igniteui-angular 12.3.5 → 12.3.6

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 (32) hide show
  1. package/bundles/igniteui-angular.umd.js +87 -20
  2. package/bundles/igniteui-angular.umd.js.map +1 -1
  3. package/esm2015/lib/core/utils.js +14 -2
  4. package/esm2015/lib/data-operations/data-clone-strategy.js +7 -0
  5. package/esm2015/lib/data-operations/data-util.js +7 -6
  6. package/esm2015/lib/grids/api.service.js +2 -2
  7. package/esm2015/lib/grids/common/crud.service.js +4 -3
  8. package/esm2015/lib/grids/common/grid.interface.js +1 -1
  9. package/esm2015/lib/grids/common/pipes.js +2 -2
  10. package/esm2015/lib/grids/grid-base.directive.js +25 -1
  11. package/esm2015/lib/grids/grid-public-row.js +3 -4
  12. package/esm2015/lib/grids/row.directive.js +2 -3
  13. package/esm2015/lib/grids/summaries/grid-summary.service.js +2 -2
  14. package/esm2015/lib/grids/tree-grid/tree-grid.pipes.js +3 -3
  15. package/esm2015/lib/services/transaction/base-transaction.js +17 -4
  16. package/esm2015/lib/services/transaction/igx-hierarchical-transaction.js +3 -4
  17. package/esm2015/lib/services/transaction/igx-transaction.js +3 -3
  18. package/esm2015/lib/services/transaction/transaction-factory.service.js +1 -2
  19. package/esm2015/lib/services/transaction/transaction.js +1 -1
  20. package/esm2015/public_api.js +2 -1
  21. package/fesm2015/igniteui-angular.js +74 -21
  22. package/fesm2015/igniteui-angular.js.map +1 -1
  23. package/igniteui-angular.metadata.json +1 -1
  24. package/lib/core/utils.d.ts +8 -0
  25. package/lib/data-operations/data-clone-strategy.d.ts +6 -0
  26. package/lib/data-operations/data-util.d.ts +3 -2
  27. package/lib/grids/common/grid.interface.d.ts +2 -0
  28. package/lib/grids/grid-base.directive.d.ts +12 -0
  29. package/lib/services/transaction/base-transaction.d.ts +7 -0
  30. package/lib/services/transaction/transaction.d.ts +5 -0
  31. package/package.json +1 -1
  32. package/public_api.d.ts +1 -0
@@ -2,7 +2,6 @@ import { IgxEditRow } from './common/crud.service';
2
2
  import { GridInstanceType, GridSummaryCalculationMode, GridSummaryPosition } from './common/enums';
3
3
  import { IgxGridCell } from './grid-public-cell';
4
4
  import mergeWith from 'lodash.mergewith';
5
- import { cloneValue } from '../core/utils';
6
5
  class BaseRow {
7
6
  /**
8
7
  * Returns the view index calculated per the grid page.
@@ -37,7 +36,7 @@ class BaseRow {
37
36
  get data() {
38
37
  var _a, _b;
39
38
  if (this.inEditMode) {
40
- return mergeWith(cloneValue((_a = this._data) !== null && _a !== void 0 ? _a : this.grid.dataView[this.index]), this.grid.transactions.getAggregatedValue(this.key, false), (objValue, srcValue) => {
39
+ return mergeWith(this.grid.dataCloneStrategy.clone((_a = this._data) !== null && _a !== void 0 ? _a : this.grid.dataView[this.index]), this.grid.transactions.getAggregatedValue(this.key, false), (objValue, srcValue) => {
41
40
  if (Array.isArray(srcValue)) {
42
41
  return objValue = srcValue;
43
42
  }
@@ -333,7 +332,7 @@ export class IgxTreeGridRow extends BaseRow {
333
332
  get data() {
334
333
  var _a;
335
334
  if (this.inEditMode) {
336
- return mergeWith(cloneValue((_a = this._data) !== null && _a !== void 0 ? _a : this.grid.dataView[this.index]), this.grid.transactions.getAggregatedValue(this.key, false), (objValue, srcValue) => {
335
+ return mergeWith(this.grid.dataCloneStrategy.clone((_a = this._data) !== null && _a !== void 0 ? _a : this.grid.dataView[this.index]), this.grid.transactions.getAggregatedValue(this.key, false), (objValue, srcValue) => {
337
336
  if (Array.isArray(srcValue)) {
338
337
  return objValue = srcValue;
339
338
  }
@@ -691,4 +690,4 @@ export class IgxSummaryRow {
691
690
  return row;
692
691
  }
693
692
  }
694
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZ3JpZC1wdWJsaWMtcm93LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvaWduaXRldWktYW5ndWxhci9zcmMvbGliL2dyaWRzL2dyaWQtcHVibGljLXJvdy50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFFQSxPQUFPLEVBQUUsVUFBVSxFQUFFLE1BQU0sdUJBQXVCLENBQUM7QUFDbkQsT0FBTyxFQUFFLGdCQUFnQixFQUFFLDBCQUEwQixFQUFFLG1CQUFtQixFQUFFLE1BQU0sZ0JBQWdCLENBQUM7QUFFbkcsT0FBTyxFQUFFLFdBQVcsRUFBRSxNQUFNLG9CQUFvQixDQUFDO0FBT2pELE9BQU8sU0FBUyxNQUFNLGtCQUFrQixDQUFDO0FBQ3pDLE9BQU8sRUFBRSxVQUFVLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFFM0MsTUFBZSxPQUFPO0lBUWxCOztPQUVHO0lBQ0gsSUFBVyxTQUFTOztRQUNoQixPQUFPLElBQUksQ0FBQyxLQUFLLEdBQUcsQ0FBQyxDQUFDLENBQUEsTUFBQSxJQUFJLENBQUMsSUFBSSxDQUFDLFNBQVMsMENBQUUsSUFBSSxLQUFJLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQSxNQUFBLElBQUksQ0FBQyxJQUFJLENBQUMsU0FBUywwQ0FBRSxPQUFPLEtBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQztJQUNqRyxDQUFDO0lBRUQ7Ozs7Ozs7OztPQVNHO0lBQ0gsSUFBVyxHQUFHOztRQUNWLE1BQU0sSUFBSSxHQUFHLE1BQUEsSUFBSSxDQUFDLEtBQUssbUNBQUksSUFBSSxDQUFDLElBQUksQ0FBQyxRQUFRLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxDQUFDO1FBQzFELE1BQU0sVUFBVSxHQUFHLElBQUksQ0FBQyxJQUFJLENBQUMsVUFBVSxDQUFDO1FBQ3hDLE9BQU8sVUFBVSxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsVUFBVSxDQUFDLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQztJQUNo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LENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQSxNQUFBLElBQUksQ0FBQyxJQUFJLENBQUMsU0FBUywwQ0FBRSxPQUFPLEtBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQztJQUNqRyxDQUFDO0lBYU8sYUFBYSxDQUFDLEdBQW9CO1FBQ3RDLE9BQU8sR0FBRyxDQUFDLE1BQU0sRUFBRTtZQUNmLEdBQUcsR0FBRyxHQUFHLENBQUMsTUFBTSxDQUFDO1NBQ3BCO1FBQ0QsT0FBTyxHQUFHLENBQUM7SUFDZixDQUFDO0NBQ0oiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBJR3JvdXBCeVJlY29yZCB9IGZyb20gJy4uL2RhdGEtb3BlcmF0aW9ucy9ncm91cGJ5LXJlY29yZC5pbnRlcmZhY2UnO1xyXG5pbXBvcnQgeyBDZWxsVHlwZSB9IGZyb20gJy4vY29tbW9uL2NlbGwuaW50ZXJmYWNlJztcclxuaW1wb3J0IHsgSWd4RWRpdFJvdyB9IGZyb20gJy4vY29tbW9uL2NydWQuc2VydmljZSc7XHJcbmltcG9ydCB7IEdyaWRJbnN0YW5jZVR5cGUsIEdyaWRTdW1tYXJ5Q2FsY3VsYXRpb25Nb2RlLCBHcmlkU3VtbWFyeVBvc2l0aW9uIH0gZnJvbSAnLi9jb21tb24vZW51bXMnO1xyXG5pbXBvcnQgeyBSb3dUeXBlIH0gZnJvbSAnLi9jb21tb24vcm93LmludGVyZmFjZSc7XHJcbmltcG9ydCB7IElneEdyaWRDZWxsIH0gZnJvbSAnLi9ncmlkLXB1YmxpYy1jZWxsJztcclxuaW1wb3J0IHsgSWd4R3JpZEFQSVNlcnZpY2UgfSBmcm9tICcuL2dyaWQvZ3JpZC1hcGkuc2VydmljZSc7XHJcbmltcG9ydCB7IElneEdyaWRDb21wb25lbnQgfSBmcm9tICcuL2dyaWQvZ3JpZC5jb21wb25lbnQnO1xyXG5pbXBvcnQgeyBJZ3hIaWVyYXJjaGljYWxHcmlkQ29tcG9uZW50IH0gZnJvbSAnLi9oaWVyYXJjaGljYWwtZ3JpZC9oaWVyYXJjaGljYWwtZ3JpZC5jb21wb25lbnQnO1xyXG5pbXBvcnQgeyBJZ3hTdW1tYXJ5UmVzdWx0IH0gZnJvbSAnLi9zdW1tYXJpZXMvZ3JpZC1zdW1tYXJ5JztcclxuaW1wb3J0IHsgSWd4VHJlZUdyaWRDb21wb25lbnQgfSBmcm9tICcuL3RyZWUtZ3JpZC90cmVlLWdyaWQuY29tcG9uZW50JztcclxuaW1wb3J0IHsgSVRyZWVHcmlkUmVjb3JkIH0gZnJvbSAnLi90cmVlLWdyaWQvdHJlZS1ncmlkLmludGVyZmFjZXMnO1xyXG5pbXBvcnQgbWVyZ2VXaXRoIGZyb20gJ2xvZGFzaC5tZXJnZXdpdGgnO1xyXG5pbXBvcnQgeyBjbG9uZVZhbHVlIH0gZnJvbSAnLi4vY29yZS91dGlscyc7XHJcblxyXG5hYnN0cmFjdCBjbGFzcyBCYXNlUm93IGltcGxlbWVudHMgUm93VHlwZSB7XHJcbiAgICBwdWJsaWMgaW5kZXg6IG51bWJlcjtcclxuICAgIC8qKlxyXG4gICAgICogVGhlIGdyaWQgdGhhdCBjb250YWlucyB0aGUgcm93LlxyXG4gICAgICovXHJcbiAgICBwdWJsaWMgZ3JpZDogSWd4R3JpZENvbXBvbmVudCB8IElneFRyZWVHcmlkQ29tcG9uZW50IHwgSWd4SGllcmFyY2hpY2FsR3JpZENvbXBvbmVudDtcclxuICAgIHByb3RlY3RlZCBfZGF0YT86IGFueTtcclxuXHJcbiAgICAvKipcclxuICAgICAqIFJldHVybnMgdGhlIHZpZXcgaW5kZXggY2FsY3VsYXRlZCBwZXIgdGhlIGdyaWQgcGFnZS5cclxuICAgICAqL1xyXG4gICAgcHVibGljIGdldCB2aWV3SW5kZXgoKTogbnVtYmVyIHtcclxuICAgICAgICByZXR1cm4gdGhpcy5pbmRleCArICgodGhpcy5ncmlkLnBhZ2luYXRvcj8ucGFnZSB8fCAwKSAqICh0aGlzLmdyaWQucGFnaW5hdG9yPy5wZXJQYWdlIHx8IDApKTtcclxuICAgIH1cclxuXHJcbiAgICAvKipcclxuICAgICAqIEdldHMgdGhlIHJvdyBrZXkuXHJcbiAgICAgKiBBIHJvdyBpbiB0aGUgZ3JpZCBpcyBpZGVudGlmaWVkIGVpdGhlciBieTpcclxuICAgICAqIC0gcHJpbWFyeUtleSBkYXRhIHZhbHVlLFxyXG4gICAgICogLSB0aGUgd2hvbGUgcm93RGF0YSwgaWYgdGhlIHByaW1hcnlLZXkgaXMgb21pdHRlZC5cclxuICAgICAqXHJcbiAgICAgKiBgYGB0eXBlc2NyaXB0XHJcbiAgICAgKiBsZXQgcm93S2V5ID0gcm93LmtleTtcclxuICAgICAqIGBgYFxyXG4gICAgICovXHJcbiAgICBwdWJsaWMgZ2V0IGtleSgpOiBhbnkge1xyXG4gICAgICAgIGNvbnN0IGRhdGEgPSB0aGlzLl9kYXRhID8/IHRoaXMuZ3JpZC5kYXRhVmlld1t0aGlzLmluZGV4XTtcclxuICAgICAgICBjb25zdCBwcmltYXJ5S2V5ID0gdGhpcy5ncmlkLnByaW1hcnlLZXk7XHJcbiAgICAgICAgcmV0dXJuIHByaW1hcnlLZXkgPyBkYXRhW3ByaW1hcnlLZXldIDogZGF0YTtcclxuICAgIH1cclxuXHJcbiAgICAvKipcclxuICAgICAqIFRoZSBkYXRhIHJlY29yZCB0aGF0IHBvcHVsYXRlcyB0aGUgcm93LlxyXG4gICAgICpcclxuICAgICAqIGBgYHR5cGVzY3JpcHRcclxuICAgICAqIGxldCByb3dEYXRhID0gcm93LmRhdGE7XHJcbiAgICAgKiBgYGBcclxuICAgICAqL1xyXG4gICAgcHVibGljIGdldCBkYXRhKCk6IGFueSB7XHJcbiAgICAgICAgaWYgKHRoaXMuaW5FZGl0TW9kZSkge1xyXG4gICAgICAgICAgICByZXR1cm4gbWVyZ2VXaXRoKGNsb25lVmFsdWUodGhpcy5fZGF0YSA/PyB0aGlzLmdyaWQuZGF0YVZpZXdbdGhpcy5pbmRleF0pLFxyXG4gICAgICAgICAgICAgICAgdGhpcy5ncmlkLnRyYW5zYWN0aW9ucy5nZXRBZ2dyZWdhdGVkVmFsdWUodGhpcy5rZXksIGZhbHNlKSxcclxuICAgICAgICAgICAgICAgIChvYmpWYWx1ZSwgc3JjVmFsdWUpID0+IHtcclxuICAgICAgICAgICAgICAgICAgICBpZiAoQXJyYXkuaXNBcnJheShzcmNWYWx1ZSkpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIG9ialZhbHVlID0gc3JjVmFsdWU7XHJcbiAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHJldHVybiB0aGlzLl9kYXRhID8/IHRoaXMuZ3JpZC5kYXRhVmlld1t0aGlzLmluZGV4XTtcclxuICAgIH1cclxuXHJcbiAgICAvKipcclxuICAgICAqIEBkZXByZWNhdGVkIFVzZSAnZGF0YScgaW5zdGVhZFxyXG4gICAgICpcclxuICAgICAqIFRoZSBkYXRhIHJlY29yZCB0aGF0IHBvcHVsYXRlcyB0aGUgcm93XHJcbiAgICAgKi9cclxuICAgIHB1YmxpYyBnZXQgcm93RGF0YSgpOiBhbnkge1xyXG4gICAgICAgIHJldHVybiB0aGlzLmRhdGE7XHJcbiAgICB9XHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBAZGVwcmVjYXRlZCBVc2UgJ2tleScgaW5zdGVhZFxyXG4gICAgICovXHJcbiAgICBwdWJsaWMgZ2V0IHJvd0lEKCk6IGFueSB7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMua2V5O1xyXG4gICAgfVxyXG5cclxuICAgIC8qKlxyXG4gICAgICogUmV0dXJucyBpZiB0aGUgcm93IGlzIGN1cnJlbnRseSBpbiBlZGl0IG1vZGUuXHJcbiAgICAgKi9cclxuICAgIHB1YmxpYyBnZXQgaW5FZGl0TW9kZSgpOiBib29sZWFuIHtcclxuICAgICAgICBpZiAodGhpcy5ncmlkLnJvd0VkaXRhYmxlKSB7XHJcbiAgICAgICAgICAgIGNvbnN0IGVkaXRSb3dTdGF0ZSA9IHRoaXMuZ3JpZC5jcnVkU2VydmljZS5yb3c7XHJcbiAgICAgICAgICAgIHJldHVybiAoZWRpdFJvd1N0YXRlICYmIGVkaXRSb3dTdGF0ZS5pZCA9PT0gdGhpcy5rZXkpIHx8IGZhbHNlO1xyXG4gICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgIHJldHVybiBmYWxzZTtcclxuICAgICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBHZXRzIHdoZXRoZXIgdGhlIHJvdyBpcyBwaW5uZWQuXHJcbiAgICAgKiBEZWZhdWx0IHZhbHVlIGlzIGBmYWxzZWAuXHJcbiAgICAgKiBgYGB0eXBlc2NyaXB0XHJcbiAgICAgKiBjb25zdCBpc1Bpbm5lZCA9IHJvdy5waW5uZWQ7XHJcbiAgICAgKiBgYGBcclxuICAgICAqL1xyXG4gICAgcHVibGljIGdldCBwaW5uZWQoKTogYm9vbGVhbiB7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMuZ3JpZC5pc1JlY29yZFBpbm5lZCh0aGlzLmRhdGEpO1xyXG4gICAgfVxyXG5cclxuICAgIC8qKlxyXG4gICAgICogU2V0cyB3aGV0aGVyIHRoZSByb3cgaXMgcGlubmVkLlxyXG4gICAgICogRGVmYXVsdCB2YWx1ZSBpcyBgZmFsc2VgLlxyXG4gICAgICogYGBgdHlwZXNjcmlwdFxyXG4gICAgICogcm93LnBpbm5lZCA9ICFyb3cucGlubmVkO1xyXG4gICAgICogYGBgXHJcbiAgICAgKi9cclxuICAgIHB1YmxpYyBzZXQgcGlubmVkKHZhbDogYm9vbGVhbikge1xyXG4gICAgICAgIGlmICh2YWwpIHtcclxuICAgICAgICAgICAgdGhpcy5waW4oKTtcclxuICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICB0aGlzLnVucGluKCk7XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIC8qKlxyXG4gICAgICogR2V0cyB0aGUgcm93IGV4cGFuZGVkL2NvbGxhcHNlZCBzdGF0ZS5cclxuICAgICAqXHJcbiAgICAgKiBgYGB0eXBlc2NyaXB0XHJcbiAgICAgKiBjb25zdCBpc0V4cGFuZGVkID0gcm93LmV4cGFuZGVkO1xyXG4gICAgICogYGBgXHJcbiAgICAgKi9cclxuICAgIHB1YmxpYyBnZXQgZXhwYW5kZWQoKTogYm9vbGVhbiB7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMuZ3JpZC5ncmlkQVBJLmdldF9yb3dfZXhwYW5zaW9uX3N0YXRlKHRoaXMuZGF0YSk7XHJcbiAgICB9XHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBFeHBhbmRzL2NvbGxhcHNlcyB0aGUgcm93LlxyXG4gICAgICpcclxuICAgICAqIGBgYHR5cGVzY3JpcHRcclxuICAgICAqIHJvdy5leHBhbmRlZCA9IHRydWU7XHJcbiAgICAgKiBgYGBcclxuICAgICAqL1xyXG4gICAgcHVibGljIHNldCBleHBhbmRlZCh2YWw6IGJvb2xlYW4pIHtcclxuICAgICAgICB0aGlzLmdyaWQuZ3JpZEFQSS5zZXRfcm93X2V4cGFuc2lvbl9zdGF0ZSh0aGlzLmtleSwgdmFsKTtcclxuICAgIH1cclxuXHJcbiAgICAvKipcclxuICAgICAqIEdldHMgd2hldGhlciB0aGUgcm93IGlzIHNlbGVjdGVkLlxyXG4gICAgICogRGVmYXVsdCB2YWx1ZSBpcyBgZmFsc2VgLlxyXG4gICAgICogYGBgdHlwZXNjcmlwdFxyXG4gICAgICogcm93LnNlbGVjdGVkID0gdHJ1ZTtcclxuICAgICAqIGBgYFxyXG4gICAgICovXHJcbiAgICBwdWJsaWMgZ2V0IHNlbGVjdGVkKCk6IGJvb2xlYW4ge1xyXG4gICAgICAgIHJldHVybiB0aGlzLmdyaWQuc2VsZWN0aW9uU2VydmljZS5pc1Jvd1NlbGVjdGVkKHRoaXMua2V5KTtcclxuICAgIH1cclxuXHJcbiAgICAvKipcclxuICAgICAqIFNldHMgd2hldGhlciB0aGUgcm93IGlzIHNlbGVjdGVkLlxyXG4gICAgICogRGVmYXVsdCB2YWx1ZSBpcyBgZmFsc2VgLlxyXG4gICAgICogYGBgdHlwZXNjcmlwdFxyXG4gICAgICogcm93LnNlbGVjdGVkID0gIXJvdy5zZWxlY3RlZDtcclxuICAgICAqIGBgYFxyXG4gICAgICovXHJcbiAgICBwdWJsaWMgc2V0IHNlbGVjdGVkKHZhbDogYm9vbGVhbikge1xyXG4gICAgICAgIGlmICh2YWwpIHtcclxuICAgICAgICAgICAgdGhpcy5ncmlkLnNlbGVjdGlvblNlcnZpY2Uuc2VsZWN0Um93c1dpdGhOb0V2ZW50KFt0aGlzLmtleV0pO1xyXG4gICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgIHRoaXMuZ3JpZC5zZWxlY3Rpb25TZXJ2aWNlLmRlc2VsZWN0Um93c1dpdGhOb0V2ZW50KFt0aGlzLmtleV0pO1xyXG4gICAgICAgIH1cclxuICAgICAgICB0aGlzLmdyaWQuY2RyLm1hcmtGb3JDaGVjaygpO1xyXG4gICAgfVxyXG5cclxuICAgIC8qKlxyXG4gICAgICogUmV0dXJucyBpZiB0aGUgcm93IGlzIGluIGRlbGV0ZSBzdGF0ZS5cclxuICAgICAqL1xyXG4gICAgcHVibGljIGdldCBkZWxldGVkKCk6IGJvb2xlYW4ge1xyXG4gICAgICAgIHJldHVybiB0aGlzLmdyaWQuZ3JpZEFQSS5yb3dfZGVsZXRlZF90cmFuc2FjdGlvbih0aGlzLmtleSk7XHJcbiAgICB9XHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBSZXR1cm5zIGlmIHRoZSByb3cgaGFzIGNoaWxkIHJvd3MuIEFsd2F5cyByZXR1cm4gZmFsc2UgZm9yIElneEdyaWRSb3cuXHJcbiAgICAgKi9cclxuICAgIHB1YmxpYyBnZXQgaGFzQ2hpbGRyZW4oKTogYm9vbGVhbiB7XHJcbiAgICAgICAgcmV0dXJuIGZhbHNlO1xyXG4gICAgfVxyXG5cclxuICAgIHB1YmxpYyBnZXQgZGlzYWJsZWQoKTogYm9vbGVhbiB7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMuZ3JpZC5pc0dob3N0UmVjb3JkKHRoaXMuZGF0YSk7XHJcbiAgICB9XHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBHZXRzIHRoZSByZW5kZXJlZCBjZWxscyBpbiB0aGUgcm93IGNvbXBvbmVudC5cclxuICAgICAqL1xyXG4gICAgcHVibGljIGdldCBjZWxscygpOiBDZWxsVHlwZVtdIHtcclxuICAgICAgICBjb25zdCByZXM6IENlbGxUeXBlW10gPSBbXTtcclxuICAgICAgICB0aGlzLmdyaWQuY29sdW1uTGlzdC5mb3JFYWNoKGNvbCA9PiB7XHJcbiAgICAgICAgICAgIGNvbnN0IGNlbGw6IENlbGxUeXBlID0gbmV3IElneEdyaWRDZWxsKHRoaXMuZ3JpZCwgdGhpcy5pbmRleCwgY29sLmZpZWxkKTtcclxuICAgICAgICAgICAgcmVzLnB1c2goY2VsbCk7XHJcbiAgICAgICAgfSk7XHJcbiAgICAgICAgcmV0dXJuIHJlcztcclxuICAgIH1cclxuXHJcbiAgICAvKipcclxuICAgICAqIFBpbnMgdGhlIHNwZWNpZmllZCByb3cuXHJcbiAgICAgKiBUaGlzIG1ldGhvZCBlbWl0cyBgb25Sb3dQaW5uaW5nYCBldmVudC5cclxuICAgICAqXHJcbiAgICAgKiBgYGB0eXBlc2NyaXB0XHJcbiAgICAgKiAvLyBwaW4gdGhlIHNlbGVjdGVkIHJvdyBmcm9tIHRoZSBncmlkXHJcbiAgICAgKiB0aGlzLmdyaWQuc2VsZWN0ZWRSb3dzWzBdLnBpbigpO1xyXG4gICAgICogYGBgXHJcbiAgICAgKi9cclxuICAgIHB1YmxpYyBwaW4oKTogYm9vbGVhbiB7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMuZ3JpZC5waW5Sb3codGhpcy5rZXksIHRoaXMuaW5kZXgpO1xyXG4gICAgfVxyXG5cclxuICAgIC8qKlxyXG4gICAgICogVW5waW5zIHRoZSBzcGVjaWZpZWQgcm93LlxyXG4gICAgICogVGhpcyBtZXRob2QgZW1pdHMgYG9uUm93UGlubmluZ2AgZXZlbnQuXHJcbiAgICAgKlxyXG4gICAgICogYGBgdHlwZXNjcmlwdFxyXG4gICAgICogLy8gdW5waW4gdGhlIHNlbGVjdGVkIHJvdyBmcm9tIHRoZSBncmlkXHJcbiAgICAgKiB0aGlzLmdyaWQuc2VsZWN0ZWRSb3dzWzBdLnVucGluKCk7XHJcbiAgICAgKiBgYGBcclxuICAgICAqL1xyXG4gICAgcHVibGljIHVucGluKCk6IGJvb2xlYW4ge1xyXG4gICAgICAgIHJldHVybiB0aGlzLmdyaWQudW5waW5Sb3codGhpcy5rZXkpO1xyXG4gICAgfVxyXG5cclxuICAgIC8qKlxyXG4gICAgICogVXBkYXRlcyB0aGUgc3BlY2lmaWVkIHJvdyBvYmplY3QgYW5kIHRoZSBkYXRhIHNvdXJjZSByZWNvcmQgd2l0aCB0aGUgcGFzc2VkIHZhbHVlLlxyXG4gICAgICpcclxuICAgICAqIGBgYHR5cGVzY3JpcHRcclxuICAgICAqIC8vIHVwZGF0ZSB0aGUgc2Vjb25kIHNlbGVjdGVkIHJvdydzIHZhbHVlXHJcbiAgICAgKiBsZXQgbmV3VmFsdWUgPSBcIkFwcGxlXCI7XHJcbiAgICAgKiB0aGlzLmdyaWQuc2VsZWN0ZWRSb3dzWzFdLnVwZGF0ZShuZXdWYWx1ZSk7XHJcbiAgICAgKiBgYGBcclxuICAgICAqL1xyXG4gICAgcHVibGljIHVwZGF0ZSh2YWx1ZTogYW55KTogdm9pZCB7XHJcbiAgICAgICAgY29uc3QgY3J1ZFNlcnZpY2UgPSB0aGlzLmdyaWQuY3J1ZFNlcnZpY2U7XHJcbiAgICAgICAgaWYgKGNydWRTZXJ2aWNlLmNlbGxJbkVkaXRNb2RlICYmIGNydWRTZXJ2aWNlLmNlbGwuaWQucm93SUQgPT09IHRoaXMua2V5KSB7XHJcbiAgICAgICAgICAgIHRoaXMuZ3JpZC50cmFuc2FjdGlvbnMuZW5kUGVuZGluZyhmYWxzZSk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGNvbnN0IHJvdyA9IG5ldyBJZ3hFZGl0Um93KHRoaXMua2V5LCB0aGlzLmluZGV4LCB0aGlzLmRhdGEsIHRoaXMuZ3JpZCk7XHJcbiAgICAgICAgdGhpcy5ncmlkLmdyaWRBUEkudXBkYXRlX3Jvdyhyb3csIHZhbHVlKTtcclxuICAgICAgICB0aGlzLmdyaWQubm90aWZ5Q2hhbmdlcygpO1xyXG4gICAgfVxyXG5cclxuICAgIC8qKlxyXG4gICAgICogUmVtb3ZlcyB0aGUgc3BlY2lmaWVkIHJvdyBmcm9tIHRoZSBncmlkJ3MgZGF0YSBzb3VyY2UuXHJcbiAgICAgKiBUaGlzIG1ldGhvZCBlbWl0cyBgb25Sb3dEZWxldGVkYCBldmVudC5cclxuICAgICAqXHJcbiAgICAgKiBgYGB0eXBlc2NyaXB0XHJcbiAgICAgKiAvLyBkZWxldGUgdGhlIHRoaXJkIHNlbGVjdGVkIHJvdyBmcm9tIHRoZSBncmlkXHJcbiAgICAgKiB0aGlzLmdyaWQuc2VsZWN0ZWRSb3dzWzJdLmRlbGV0ZSgpO1xyXG4gICAgICogYGBgXHJcbiAgICAgKi9cclxuICAgIHB1YmxpYyBkZWxldGUoKTogdm9pZCB7XHJcbiAgICAgICAgdGhpcy5ncmlkLmRlbGV0ZVJvd0J5SWQodGhpcy5rZXkpO1xyXG4gICAgfVxyXG59XHJcblxyXG5leHBvcnQgY2xhc3MgSWd4R3JpZFJvdyBleHRlbmRzIEJhc2VSb3cgaW1wbGVtZW50cyBSb3dUeXBlIHtcclxuICAgIC8qKlxyXG4gICAgICogQGhpZGRlblxyXG4gICAgICovXHJcbiAgICBjb25zdHJ1Y3RvcihwdWJsaWMgZ3JpZDogSWd4R3JpZENvbXBvbmVudCxcclxuICAgICAgICBwdWJsaWMgaW5kZXg6IG51bWJlciwgZGF0YT86IGFueSkge1xyXG4gICAgICAgIHN1cGVyKCk7XHJcbiAgICAgICAgdGhpcy5fZGF0YSA9IGRhdGEgJiYgZGF0YS5hZGRSb3cgJiYgZGF0YS5yZWNvcmRSZWYgPyBkYXRhLnJlY29yZFJlZiA6IGRhdGE7XHJcbiAgICB9XHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBSZXR1cm5zIHRoZSB2aWV3IGluZGV4IGNhbGN1bGF0ZWQgcGVyIHRoZSBncmlkIHBhZ2UuXHJcbiAgICAgKi9cclxuICAgIHB1YmxpYyBnZXQgdmlld0luZGV4KCk6IG51bWJlciB7XHJcbiAgICAgICAgaWYgKHRoaXMuZ3JpZC5wYWdpbmF0b3IpIHtcclxuICAgICAgICAgICAgY29uc3QgcHJlY2VkaW5nRGV0YWlsUm93cyA9IFtdO1xyXG4gICAgICAgICAgICBjb25zdCBwcmVjZWRpbmdHcm91cFJvd3MgPSBbXTtcclxuICAgICAgICAgICAgY29uc3QgZmlyc3RSb3cgPSB0aGlzLmdyaWQuZGF0YVZpZXdbMF07XHJcbiAgICAgICAgICAgIGNvbnN0IGhhc0RldGFpbFJvd3MgPSB0aGlzLmdyaWQuZXhwYW5zaW9uU3RhdGVzLnNpemU7XHJcbiAgICAgICAgICAgIGNvbnN0IGhhc0dyb3VwZWRSb3dzID0gdGhpcy5ncmlkLmdyb3VwaW5nRXhwcmVzc2lvbnMubGVuZ3RoO1xyXG4gICAgICAgICAgICBsZXQgcHJlY2VkaW5nU3VtbWFyeVJvd3MgPSAwO1xyXG4gICAgICAgICAgICBjb25zdCBmaXJzdFJvd0luZCA9IHRoaXMuZ3JpZC5ncm91cGluZ0ZsYXRSZXN1bHQuaW5kZXhPZihmaXJzdFJvdyk7XHJcblxyXG4gICAgICAgICAgICAvLyBmcm9tIGdyb3VwaW5nRmxhdFJlc3VsdCwgcmVzb2x2ZSB0d28gb3RoZXIgY29sbGVjdGlvbnM6XHJcbiAgICAgICAgICAgIC8vIHByZWNlZGluZ0dyb3VwZWRSb3dzIC0+IHVzZSBpdCB0byByZXNvbHZlIHN1bW1hcnlSb3cgZm9yIGVhY2ggZ3JvdXAgaW4gcHJldmlvdXMgcGFnZXNcclxuICAgICAgICAgICAgLy8gcHJlY2VkaW5nRGV0YWlsUm93cyAtPiBpc2UgaXQgdG8gcmVzb2x2ZSB0aGUgZGV0YWlsIHJvdyBmb3IgZWFjaCBleHBhbmRlZCBncmlkIHJvdyBpbiBwcmV2aW91cyBwYWdlc1xyXG4gICAgICAgICAgICBpZiAoaGFzRGV0YWlsUm93cyB8fCBoYXNHcm91cGVkUm93cykge1xyXG4gICAgICAgICAgICAgICAgdGhpcy5ncmlkLmdyb3VwaW5nRmxhdFJlc3VsdC5mb3JFYWNoKChyLCBpbmQpID0+IHtcclxuICAgICAgICAgICAgICAgICAgICBjb25zdCByb3dJRCA9IHRoaXMuZ3JpZC5wcmltYXJ5S2V5ID8gclt0aGlzLmdyaWQucHJpbWFyeUtleV0gOiByO1xyXG4gICAgICAgICAgICAgICAgICAgIGlmIChoYXNHcm91cGVkUm93cyAmJiBpbmQgPCBmaXJzdFJvd0luZCAmJiB0aGlzLmdyaWQuaXNHcm91cEJ5UmVjb3JkKHIpKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHByZWNlZGluZ0dyb3VwUm93cy5wdXNoKHIpO1xyXG4gICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICBpZiAodGhpcy5ncmlkLmV4cGFuc2lvblN0YXRlcy5nZXQocm93SUQpICYmIGluZCA8IGZpcnN0Um93SW5kICYmICF0aGlzLmdyaWQuaXNHcm91cEJ5UmVjb3JkKHIpKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHByZWNlZGluZ0RldGFpbFJvd3MucHVzaChyKTtcclxuICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICB9KTtcclxuICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgaWYgKHRoaXMuZ3JpZC5zdW1tYXJ5Q2FsY3VsYXRpb25Nb2RlICE9PSBHcmlkU3VtbWFyeUNhbGN1bGF0aW9uTW9kZS5yb290TGV2ZWxPbmx5KSB7XHJcbiAgICAgICAgICAgICAgICAvLyBpZiBmaXJzdFJvdyBpcyBhIGNoaWxkIG9mIHRoZSBsYXN0IGl0ZW0gaW4gcHJlY2VkaW5nR3JvdXBSb3dzLFxyXG4gICAgICAgICAgICAgICAgLy8gdGhlbiBzdW1tYXJ5Um93IGZvciB0aGlzIGdpdmVuIGdyb3VwZWRSZWNvcmQgaXMgcmVuZGVyZWQgYWZ0ZXIgZmlyc3RSb3csXHJcbiAgICAgICAgICAgICAgICAvLyBpLmUuIG5lZWQgdG8gZGVjcmVhc2UgZmlyc3RSb3dJbmQgdG8gYWNjb3VudCBmb3IgdGhlIGFib3ZlLlxyXG4gICAgICAgICAgICAgICAgcHJlY2VkaW5nU3VtbWFyeVJvd3MgPSBwcmVjZWRpbmdHcm91cFJvd3MuZmlsdGVyKGdyID0+IHRoaXMuZ3JpZC5pc0V4cGFuZGVkR3JvdXAoZ3IpKS5sZW5ndGg7XHJcbiAgICAgICAgICAgICAgICBpZiAodGhpcy5ncmlkLnN1bW1hcnlQb3NpdGlvbiA9PT0gR3JpZFN1bW1hcnlQb3NpdGlvbi5ib3R0b20gJiYgcHJlY2VkaW5nR3JvdXBSb3dzLmxlbmd0aCAmJlxyXG4gICAgICAgICAgICAgICAgICAgIHByZWNlZGluZ0dyb3VwUm93c1twcmVjZWRpbmdHcm91cFJvd3MubGVuZ3RoIC0gMV0ucmVjb3Jkcy5pbmRleE9mKGZpcnN0Um93KSA+IC0xKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgcHJlY2VkaW5nU3VtbWFyeVJvd3MgKz0gLTE7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgIHJldHVybiBwcmVjZWRpbmdEZXRhaWxSb3dzLmxlbmd0aCArIHByZWNlZGluZ1N1bW1hcnlSb3dzICsgZmlyc3RSb3dJbmQgKyB0aGlzLmluZGV4O1xyXG4gICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgIHJldHVybiB0aGlzLmluZGV4O1xyXG4gICAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICAvKipcclxuICAgICAqIFJldHVybnMgdGhlIHBhcmVudCByb3csIGlmIGdyaWQgaXMgZ3JvdXBlZC5cclxuICAgICAqL1xyXG4gICAgcHVibGljIGdldCBwYXJlbnQoKTogUm93VHlwZSB7XHJcbiAgICAgICAgbGV0IHBhcmVudDogSWd4R3JvdXBCeVJvdztcclxuICAgICAgICBpZiAoIXRoaXMuZ3JpZC5ncm91cGluZ0V4cHJlc3Npb25zLmxlbmd0aCkge1xyXG4gICAgICAgICAgICByZXR1cm4gdW5kZWZpbmVkO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgbGV0IGkgPSB0aGlzLmluZGV4IC0gMTtcclxuICAgICAgICB3aGlsZSAoaSA+PSAwICYmICFwYXJlbnQpIHtcclxuICAgICAgICAgICAgY29uc3QgcmVjID0gdGhpcy5ncmlkLmRhdGFWaWV3W2ldO1xyXG4gICAgICAgICAgICBpZiAodGhpcy5ncmlkLmlzR3JvdXBCeVJlY29yZChyZWMpKSB7XHJcbiAgICAgICAgICAgICAgICBwYXJlbnQgPSBuZXcgSWd4R3JvdXBCeVJvdyh0aGlzLmdyaWQsIGksIHJlYyk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgaS0tO1xyXG4gICAgICAgIH1cclxuICAgICAgICByZXR1cm4gcGFyZW50O1xyXG4gICAgfVxyXG59XHJcblxyXG5leHBvcnQgY2xhc3MgSWd4VHJlZUdyaWRSb3cgZXh0ZW5kcyBCYXNlUm93IGltcGxlbWVudHMgUm93VHlwZSB7XHJcbiAgICAvKipcclxuICAgICAqIEBoaWRkZW5cclxuICAgICAqL1xyXG4gICAgY29uc3RydWN0b3IocHVibGljIGdyaWQ6IElneFRyZWVHcmlkQ29tcG9uZW50LFxyXG4gICAgICAgIHB1YmxpYyBpbmRleDogbnVtYmVyLCBkYXRhPzogYW55LCBwcml2YXRlIF90cmVlUm93PzogSVRyZWVHcmlkUmVjb3JkKSB7XHJcbiAgICAgICAgc3VwZXIoKTtcclxuICAgICAgICB0aGlzLl9kYXRhID0gZGF0YSAmJiBkYXRhLmFkZFJvdyAmJiBkYXRhLnJlY29yZFJlZiA/IGRhdGEucmVjb3JkUmVmIDogZGF0YTtcclxuICAgIH1cclxuXHJcbiAgICAvKipcclxuICAgICAqIFJldHVybnMgdGhlIHZpZXcgaW5kZXggY2FsY3VsYXRlZCBwZXIgdGhlIGdyaWQgcGFnZS5cclxuICAgICAqL1xyXG4gICAgcHVibGljIGdldCB2aWV3SW5kZXgoKTogbnVtYmVyIHtcclxuICAgICAgICBpZiAodGhpcy5ncmlkLmhhc1N1bW1hcml6ZWRDb2x1bW5zICYmICgodGhpcy5ncmlkLnBhZ2luYXRvcj8ucGFnZSB8fCAwKSA+IDApKSB7XHJcbiAgICAgICAgICAgIGlmICh0aGlzLmdyaWQuc3VtbWFyeUNhbGN1bGF0aW9uTW9kZSAhPT0gR3JpZFN1bW1hcnlDYWxjdWxhdGlvbk1vZGUucm9vdExldmVsT25seSkge1xyXG4gICAgICAgICAgICAgICAgY29uc3QgZmlyc3RSb3dJbmRleCA9IHRoaXMuZ3JpZC5wcm9jZXNzZWRFeHBhbmRlZEZsYXREYXRhLmluZGV4T2YodGhpcy5ncmlkLmRhdGFWaWV3WzBdLmRhdGEpO1xyXG4gICAgICAgICAgICAgICAgLy8gZmlyc3RSb3dJbmRleCBpcyBiYXNlZCBvbiBkYXRhIHJlc3VsdCBhZnRlciBhbGwgcGlwZXMgdHJpZ2dlcmVkLCBleGNsdWRpbmcgc3VtbWFyeSBwaXBlXHJcbiAgICAgICAgICAgICAgICBjb25zdCBwcmVjZWRpbmdTdW1tYXJ5Um93cyA9IHRoaXMuZ3JpZC5zdW1tYXJ5UG9zaXRpb24gPT09IEdyaWRTdW1tYXJ5UG9zaXRpb24uYm90dG9tID9cclxuICAgICAgICAgICAgICAgICAgICB0aGlzLmdyaWQucm9vdFJlY29yZHMuaW5kZXhPZih0aGlzLmdldFJvb3RQYXJlbnQodGhpcy5ncmlkLmRhdGFWaWV3WzBdKSkgOlxyXG4gICAgICAgICAgICAgICAgICAgIHRoaXMuZ3JpZC5yb290UmVjb3Jkcy5pbmRleE9mKHRoaXMuZ2V0Um9vdFBhcmVudCh0aGlzLmdyaWQuZGF0YVZpZXdbMF0pKSArIDE7XHJcbiAgICAgICAgICAgICAgICAvLyB0aGVyZSBpcyBhIHN1bW1hcnkgcm93IGZvciBlYWNoIHJvb3QgcmVjb3JkLCBzbyB3ZSBjYWxjdWxhdGUgaG93IG1hbnkgcm9vdCByZWNvcmRzIGFyZSByZW5kZXJlZCBiZWZvcmUgdGhlIGN1cnJlbnQgcm93XHJcbiAgICAgICAgICAgICAgICByZXR1cm4gZmlyc3RSb3dJbmRleCArIHByZWNlZGluZ1N1bW1hcnlSb3dzICsgdGhpcy5pbmRleDtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgICAgICByZXR1cm4gdGhpcy5pbmRleCArICgodGhpcy5ncmlkLnBhZ2luYXRvcj8ucGFnZSB8fCAwKSAqICh0aGlzLmdyaWQucGFnaW5hdG9yPy5wZXJQYWdlIHx8IDApKTtcclxuICAgIH1cclxuXHJcbiAgICAvKipcclxuICAgICAqICBUaGUgZGF0YSBwYXNzZWQgdG8gdGhlIHJvdyBjb21wb25lbnQuXHJcbiAgICAgKlxyXG4gICAgICogYGBgdHlwZXNjcmlwdFxyXG4gICAgICogbGV0IHNlbGVjdGVkUm93RGF0YSA9IHRoaXMuZ3JpZC5zZWxlY3RlZFJvd3NbMF0ucm93RGF0YTtcclxuICAgICAqIGBgYFxyXG4gICAgICovXHJcbiAgICBwdWJsaWMgZ2V0IGRhdGEoKTogYW55IHtcclxuICAgICAgICBpZiAodGhpcy5pbkVkaXRNb2RlKSB7XHJcbiAgICAgICAgICAgIHJldHVybiBtZXJnZVdpdGgoY2xvbmVWYWx1ZSh0aGlzLl9kYXRhID8/IHRoaXMuZ3JpZC5kYXRhVmlld1t0aGlzLmluZGV4XSksXHJcbiAgICAgICAgICAgICAgICB0aGlzLmdyaWQudHJhbnNhY3Rpb25zLmdldEFnZ3JlZ2F0ZWRWYWx1ZSh0aGlzLmtleSwgZmFsc2UpLFxyXG4gICAgICAgICAgICAgICAgKG9ialZhbHVlLCBzcmNWYWx1ZSkgPT4ge1xyXG4gICAgICAgICAgICAgICAgICAgIGlmIChBcnJheS5pc0FycmF5KHNyY1ZhbHVlKSkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gb2JqVmFsdWUgPSBzcmNWYWx1ZTtcclxuICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICB9KTtcclxuICAgICAgICB9XHJcbiAgICAgICAgY29uc3QgcmVjID0gdGhpcy5ncmlkLmRhdGFWaWV3W3RoaXMuaW5kZXhdO1xyXG4gICAgICAgIHJldHVybiB0aGlzLl9kYXRhID8gdGhpcy5fZGF0YSA6IHRoaXMuZ3JpZC5pc1RyZWVSb3cocmVjKSA/IHJlYy5kYXRhIDogcmVjO1xyXG4gICAgfVxyXG5cclxuICAgIC8qKlxyXG4gICAgICogUmV0dXJucyB0aGUgY2hpbGQgcm93cy5cclxuICAgICAqL1xyXG4gICAgcHVibGljIGdldCBjaGlsZHJlbigpOiBSb3dUeXBlW10ge1xyXG4gICAgICAgIGNvbnN0IGNoaWxkcmVuOiBJZ3hUcmVlR3JpZFJvd1tdID0gW107XHJcbiAgICAgICAgaWYgKHRoaXMudHJlZVJvdy5leHBhbmRlZCkge1xyXG4gICAgICAgICAgICB0aGlzLnRyZWVSb3cuY2hpbGRyZW4uZm9yRWFjaCgocmVjLCBpKSA9PiB7XHJcbiAgICAgICAgICAgICAgICBjb25zdCByb3cgPSBuZXcgSWd4VHJlZUdyaWRSb3codGhpcy5ncmlkLCB0aGlzLmluZGV4ICsgMSArIGksIHJlYy5kYXRhKTtcclxuICAgICAgICAgICAgICAgIGNoaWxkcmVuLnB1c2gocm93KTtcclxuICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHJldHVybiBjaGlsZHJlbjtcclxuICAgIH1cclxuXHJcbiAgICAvKipcclxuICAgICAqIFJldHVybnMgdGhlIHBhcmVudCByb3cuXHJcbiAgICAgKi9cclxuICAgIHB1YmxpYyBnZXQgcGFyZW50KCk6IFJvd1R5cGUge1xyXG4gICAgICAgIGNvbnN0IHJvdyA9IHRoaXMuZ3JpZC5nZXRSb3dCeUtleSh0aGlzLnRyZWVSb3cucGFyZW50Py5yb3dJRCk7XHJcbiAgICAgICAgcmV0dXJuIHJvdztcclxuICAgIH1cclxuXHJcbiAgICAvKipcclxuICAgICAqIFJldHVybnMgdHJ1ZSBpZiBjaGlsZCByb3dzIGV4aXN0LiBBbHdheXMgcmV0dXJuIGZhbHNlIGZvciBJZ3hHcmlkUm93LlxyXG4gICAgICovXHJcbiAgICBwdWJsaWMgZ2V0IGhhc0NoaWxkcmVuKCk6IGJvb2xlYW4ge1xyXG4gICAgICAgIGlmICh0aGlzLnRyZWVSb3cuY2hpbGRyZW4pIHtcclxuICAgICAgICAgICAgcmV0dXJuIHRoaXMudHJlZVJvdy5jaGlsZHJlbi5sZW5ndGggPiAwO1xyXG4gICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgIHJldHVybiBmYWxzZTtcclxuICAgICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBUaGUgYElUcmVlR3JpZFJlY29yZGAgd2l0aCBtZXRhZGF0YSBhYm91dCB0aGUgcm93IGluIHRoZSBjb250ZXh0IG9mIHRoZSB0cmVlIGdyaWQuXHJcbiAgICAgKlxyXG4gICAgICogYGBgdHlwZXNjcmlwdFxyXG4gICAgICogY29uc3Qgcm93UGFyZW50ID0gdGhpcy50cmVlR3JpZC5nZXRSb3dCeUtleSgxKS50cmVlUm93LnBhcmVudDtcclxuICAgICAqIGBgYFxyXG4gICAgICovXHJcbiAgICBwdWJsaWMgZ2V0IHRyZWVSb3coKTogSVRyZWVHcmlkUmVjb3JkIHtcclxuICAgICAgICByZXR1cm4gdGhpcy5fdHJlZVJvdyA/PyB0aGlzLmdyaWQucmVjb3Jkcy5nZXQodGhpcy5rZXkpO1xyXG4gICAgfVxyXG5cclxuICAgIC8qKlxyXG4gICAgICogR2V0cyB3aGV0aGVyIHRoZSByb3cgaXMgcGlubmVkLlxyXG4gICAgICpcclxuICAgICAqIGBgYHR5cGVzY3JpcHRcclxuICAgICAqIGxldCBpc1Bpbm5lZCA9IHJvdy5waW5uZWQ7XHJcbiAgICAgKiBgYGBcclxuICAgICAqL1xyXG4gICAgcHVibGljIGdldCBwaW5uZWQoKTogYm9vbGVhbiB7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMuZ3JpZC5pc1JlY29yZFBpbm5lZCh0aGlzKTtcclxuICAgIH1cclxuXHJcbiAgICAvKipcclxuICAgICAqIFNldHMgd2hldGhlciB0aGUgcm93IGlzIHBpbm5lZC5cclxuICAgICAqIERlZmF1bHQgdmFsdWUgaXMgYGZhbHNlYC5cclxuICAgICAqIGBgYHR5cGVzY3JpcHRcclxuICAgICAqIHJvdy5waW5uZWQgPSAhcm93LnBpbm5lZDtcclxuICAgICAqIGBgYFxyXG4gICAgICovXHJcbiAgICBwdWJsaWMgc2V0IHBpbm5lZCh2YWw6IGJvb2xlYW4pIHtcclxuICAgICAgICBpZiAodmFsKSB7XHJcbiAgICAgICAgICAgIHRoaXMucGluKCk7XHJcbiAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgdGhpcy51bnBpbigpO1xyXG4gICAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICAvKipcclxuICAgICAqIEdldHMgd2hldGhlciB0aGUgcm93IGlzIGV4cGFuZGVkLlxyXG4gICAgICpcclxuICAgICAqIGBgYHR5cGVzY3JpcHRcclxuICAgICAqIGxldCBlc0V4cGFuZGVkID0gcm93LmV4cGFuZGVkO1xyXG4gICAgICogYGBgXHJcbiAgICAgKi9cclxuICAgIHB1YmxpYyBnZXQgZXhwYW5kZWQoKTogYm9vbGVhbiB7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMuZ3JpZC5ncmlkQVBJLmdldF9yb3dfZXhwYW5zaW9uX3N0YXRlKHRoaXMudHJlZVJvdyk7XHJcbiAgICB9XHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBFeHBhbmRzL2NvbGxhcHNlcyB0aGUgcm93LlxyXG4gICAgICpcclxuICAgICAqIGBgYHR5cGVzY3JpcHRcclxuICAgICAqIHJvdy5leHBhbmRlZCA9IHRydWU7XHJcbiAgICAgKiBgYGBcclxuICAgICAqL1xyXG4gICAgcHVibGljIHNldCBleHBhbmRlZCh2YWw6IGJvb2xlYW4pIHtcclxuICAgICAgICB0aGlzLmdyaWQuZ3JpZEFQSS5zZXRfcm93X2V4cGFuc2lvbl9zdGF0ZSh0aGlzLmtleSwgdmFsKTtcclxuICAgIH1cclxuXHJcbiAgICBwdWJsaWMgZ2V0IGRpc2FibGVkKCk6IGJvb2xlYW4ge1xyXG4gICAgICAgIC8vIFRPRE8gY2VsbFxyXG4gICAgICAgIHJldHVybiB0aGlzLmdyaWQuaXNHaG9zdFJlY29yZCh0aGlzLmRhdGEpID8gdGhpcy50cmVlUm93LmlzRmlsdGVyZWRPdXRQYXJlbnQgPT09IHVuZGVmaW5lZCA6IGZhbHNlO1xyXG4gICAgfVxyXG5cclxuICAgIHByaXZhdGUgZ2V0Um9vdFBhcmVudChyb3c6IElUcmVlR3JpZFJlY29yZCk6IElUcmVlR3JpZFJlY29yZCB7XHJcbiAgICAgICAgd2hpbGUgKHJvdy5wYXJlbnQpIHtcclxuICAgICAgICAgICAgcm93ID0gcm93LnBhcmVudDtcclxuICAgICAgICB9XHJcbiAgICAgICAgcmV0dXJuIHJvdztcclxuICAgIH1cclxufVxyXG5cclxuZXhwb3J0IGNsYXNzIElneEhpZXJhcmNoaWNhbEdyaWRSb3cgZXh0ZW5kcyBCYXNlUm93IGltcGxlbWVudHMgUm93VHlwZSB7XHJcbiAgICAvKipcclxuICAgICAqIEBoaWRkZW5cclxuICAgICAqL1xyXG4gICAgY29uc3RydWN0b3IocHVibGljIGdyaWQ6IElneEhpZXJhcmNoaWNhbEdyaWRDb21wb25lbnQsXHJcbiAgICAgICAgcHVibGljIGluZGV4OiBudW1iZXIsIGRhdGE/OiBhbnkpIHtcclxuICAgICAgICBzdXBlcigpO1xyXG4gICAgICAgIHRoaXMuX2RhdGEgPSBkYXRhICYmIGRhdGEuYWRkUm93ICYmIGRhdGEucmVjb3JkUmVmID8gZGF0YS5yZWNvcmRSZWYgOiBkYXRhO1xyXG4gICAgfVxyXG5cclxuICAgIC8qKlxyXG4gICAgICogUmV0dXJucyB0cnVlIGlmIHJvdyBpc2xhbmRzIGV4aXN0LlxyXG4gICAgICovXHJcbiAgICBwdWJsaWMgZ2V0IGhhc0NoaWxkcmVuKCk6IGJvb2xlYW4ge1xyXG4gICAgICAgIHJldHVybiAhIXRoaXMuZ3JpZC5jaGlsZExheW91dEtleXMubGVuZ3RoO1xyXG4gICAgfVxyXG5cclxuICAgIC8qKlxyXG4gICAgICogUmV0dXJucyB0aGUgdmlldyBpbmRleCBjYWxjdWxhdGVkIHBlciB0aGUgZ3JpZCBwYWdlLlxyXG4gICAgICovXHJcbiAgICBwdWJsaWMgZ2V0IHZpZXdJbmRleCgpIHtcclxuICAgICAgICBjb25zdCBmaXJzdFJvd0luZCA9IHRoaXMuZ3JpZC5maWx0ZXJlZFNvcnRlZERhdGEuaW5kZXhPZih0aGlzLmdyaWQuZGF0YVZpZXdbMF0pO1xyXG4gICAgICAgIGNvbnN0IGV4cGFuZGVkUm93cyA9IHRoaXMuZ3JpZC5maWx0ZXJlZFNvcnRlZERhdGEuZmlsdGVyKChyZWMsIGluZCkgPT4ge1xyXG4gICAgICAgICAgICBjb25zdCByb3dJRCA9IHRoaXMuZ3JpZC5wcmltYXJ5S2V5ID8gcmVjW3RoaXMuZ3JpZC5wcmltYXJ5S2V5XSA6IHJlYztcclxuICAgICAgICAgICAgcmV0dXJuIHRoaXMuZ3JpZC5leHBhbnNpb25TdGF0ZXMuZ2V0KHJvd0lEKSAmJiBpbmQgPCBmaXJzdFJvd0luZDtcclxuICAgICAgICB9KTtcclxuICAgICAgICByZXR1cm4gZmlyc3RSb3dJbmQgKyBleHBhbmRlZFJvd3MubGVuZ3RoICsgdGhpcy5pbmRleDtcclxuICAgIH1cclxuXHJcbiAgICAvKipcclxuICAgICAqIEdldHMgdGhlIHJlbmRlcmVkIGNlbGxzIGluIHRoZSByb3cgY29tcG9uZW50LlxyXG4gICAgICovXHJcbiAgICBwdWJsaWMgZ2V0IGNlbGxzKCk6IENlbGxUeXBlW10ge1xyXG4gICAgICAgIGNvbnN0IHJlczogQ2VsbFR5cGVbXSA9IFtdO1xyXG4gICAgICAgIHRoaXMuZ3JpZC5jb2x1bW5MaXN0LmZvckVhY2goY29sID0+IHtcclxuICAgICAgICAgICAgY29uc3QgY2VsbDogQ2VsbFR5cGUgPSBuZXcgSWd4R3JpZENlbGwodGhpcy5ncmlkLCB0aGlzLmluZGV4LCBjb2wuZmllbGQpO1xyXG4gICAgICAgICAgICByZXMucHVzaChjZWxsKTtcclxuICAgICAgICB9KTtcclxuICAgICAgICByZXR1cm4gcmVzO1xyXG4gICAgfVxyXG59XHJcblxyXG5leHBvcnQgY2xhc3MgSWd4R3JvdXBCeVJvdyBpbXBsZW1lbnRzIFJvd1R5cGUge1xyXG4gICAgLyoqXHJcbiAgICAgKiBSZXR1cm5zIHRoZSByb3cgaW5kZXguXHJcbiAgICAgKi9cclxuICAgIHB1YmxpYyBpbmRleDogbnVtYmVyO1xyXG5cclxuICAgIC8qKlxyXG4gICAgICogVGhlIGdyaWQgdGhhdCBjb250YWlucyB0aGUgcm93LlxyXG4gICAgICovXHJcbiAgICBwdWJsaWMgZ3JpZDogSWd4R3JpZENvbXBvbmVudDtcclxuXHJcbiAgICAvKipcclxuICAgICAqIFJldHVybnMgYWx3YXlzIHRydWUsIGJlY2F1c2UgdGhpcyBpcyBpbiBpbnN0YW5jZSBvZiBhbiBJZ3hHcm91cEJ5Um93LlxyXG4gICAgICovXHJcbiAgICBwdWJsaWMgaXNHcm91cEJ5Um93OiBib29sZWFuO1xyXG5cclxuICAgIC8qKlxyXG4gICAgICogVGhlIElHcm91cEJ5UmVjb3JkIG9iamVjdCwgcmVwcmVzZW50aW5nIHRoZSBncm91cCByZWNvcmQsIGlmIHRoZSByb3cgaXMgYSBHcm91cEJ5Um93LlxyXG4gICAgICovXHJcbiAgICBwdWJsaWMgZ2V0IGdyb3VwUm93KCk6IElHcm91cEJ5UmVjb3JkIHtcclxuICAgICAgICByZXR1cm4gdGhpcy5fZ3JvdXBSb3cgPyB0aGlzLl9ncm91cFJvdyA6IHRoaXMuZ3JpZC5kYXRhVmlld1t0aGlzLmluZGV4XTtcclxuICAgIH1cclxuXHJcbiAgICAvKipcclxuICAgICAqIFJldHVybnMgdGhlIGNoaWxkIHJvd3MuXHJcbiAgICAgKi9cclxuICAgIHB1YmxpYyBnZXQgY2hpbGRyZW4oKTogUm93VHlwZVtdIHtcclxuICAgICAgICBjb25zdCBjaGlsZHJlbjogSWd4R3JpZFJvd1tdID0gW107XHJcbiAgICAgICAgdGhpcy5ncm91cFJvdy5yZWNvcmRzLmZvckVhY2goKHJlYywgaSkgPT4ge1xyXG4gICAgICAgICAgICBjb25zdCByb3cgPSBuZXcgSWd4R3JpZFJvdyh0aGlzLmdyaWQsIHRoaXMuaW5kZXggKyAxICsgaSwgcmVjKTtcclxuICAgICAgICAgICAgY2hpbGRyZW4ucHVzaChyb3cpO1xyXG4gICAgICAgIH0pO1xyXG4gICAgICAgIHJldHVybiBjaGlsZHJlbjtcclxuICAgIH1cclxuXHJcbiAgICAvKipcclxuICAgICAqIFJldHVybnMgdGhlIHZpZXcgaW5kZXggY2FsY3VsYXRlZCBwZXIgdGhlIGdyaWQgcGFnZS5cclxuICAgICAqL1xyXG4gICAgcHVibGljIGdldCB2aWV3SW5kZXgoKTogbnVtYmVyIHtcclxuICAgICAgICBpZiAodGhpcy5ncmlkLnBhZ2UpIHtcclxuICAgICAgICAgICAgY29uc3QgcHJlY2VkaW5nRGV0YWlsUm93cyA9IFtdO1xyXG4gICAgICAgICAgICBjb25zdCBwcmVjZWRpbmdHcm91cFJvd3MgPSBbXTtcclxuICAgICAgICAgICAgY29uc3QgZmlyc3RSb3cgPSB0aGlzLmdyaWQuZGF0YVZpZXdbMF07XHJcbiAgICAgICAgICAgIGNvbnN0IGhhc0RldGFpbFJvd3MgPSB0aGlzLmdyaWQuZXhwYW5zaW9uU3RhdGVzLnNpemU7XHJcbiAgICAgICAgICAgIGNvbnN0IGhhc0dyb3VwZWRSb3dzID0gdGhpcy5ncmlkLmdyb3VwaW5nRXhwcmVzc2lvbnMubGVuZ3RoO1xyXG4gICAgICAgICAgICBsZXQgcHJlY2VkaW5nU3VtbWFyeVJvd3MgPSAwO1xyXG4gICAgICAgICAgICBjb25zdCBmaXJzdFJvd0luZCA9IHRoaXMuZ3JpZC5ncm91cGluZ0ZsYXRSZXN1bHQuaW5kZXhPZihmaXJzdFJvdyk7XHJcblxyXG4gICAgICAgICAgICAvLyBmcm9tIGdyb3VwaW5nRmxhdFJlc3VsdCwgcmVzb2x2ZSB0d28gb3RoZXIgY29sbGVjdGlvbnM6XHJcbiAgICAgICAgICAgIC8vIHByZWNlZGluZ0dyb3VwZWRSb3dzIC0+IHVzZSBpdCB0byByZXNvbHZlIHN1bW1hcnlSb3cgZm9yIGVhY2ggZ3JvdXAgaW4gcHJldmlvdXMgcGFnZXNcclxuICAgICAgICAgICAgLy8gcHJlY2VkaW5nRGV0YWlsUm93cyAtPiBpc2UgaXQgdG8gcmVzb2x2ZSB0aGUgZGV0YWlsIHJvdyBmb3IgZWFjaCBleHBhbmRlZCBncmlkIHJvdyBpbiBwcmV2aW91cyBwYWdlc1xyXG4gICAgICAgICAgICBpZiAoaGFzRGV0YWlsUm93cyB8fCBoYXNHcm91cGVkUm93cykge1xyXG4gICAgICAgICAgICAgICAgdGhpcy5ncmlkLmdyb3VwaW5nRmxhdFJlc3VsdC5mb3JFYWNoKChyLCBpbmQpID0+IHtcclxuICAgICAgICAgICAgICAgICAgICBjb25zdCByb3dJRCA9IHRoaXMuZ3JpZC5wcmltYXJ5S2V5ID8gclt0aGlzLmdyaWQucHJpbWFyeUtleV0gOiByO1xyXG4gICAgICAgICAgICAgICAgICAgIGlmIChoYXNHcm91cGVkUm93cyAmJiBpbmQgPCBmaXJzdFJvd0luZCAmJiB0aGlzLmdyaWQuaXNHcm91cEJ5UmVjb3JkKHIpKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHByZWNlZGluZ0dyb3VwUm93cy5wdXNoKHIpO1xyXG4gICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICBpZiAodGhpcy5ncmlkLmV4cGFuc2lvblN0YXRlcy5nZXQocm93SUQpICYmIGluZCA8IGZpcnN0Um93SW5kICYmICF0aGlzLmdyaWQuaXNHcm91cEJ5UmVjb3JkKHIpKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHByZWNlZGluZ0RldGFpbFJvd3MucHVzaChyKTtcclxuICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICB9KTtcclxuICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgaWYgKHRoaXMuZ3JpZC5zdW1tYXJ5Q2FsY3VsYXRpb25Nb2RlICE9PSBHcmlkU3VtbWFyeUNhbGN1bGF0aW9uTW9kZS5yb290TGV2ZWxPbmx5KSB7XHJcbiAgICAgICAgICAgICAgICAvLyBpZiBmaXJzdFJvdyBpcyBhIGNoaWxkIG9mIHRoZSBsYXN0IGl0ZW0gaW4gcHJlY2VkaW5nR3JvdXBSb3dzLFxyXG4gICAgICAgICAgICAgICAgLy8gdGhlbiBzdW1tYXJ5Um93IGZvciB0aGlzIGdpdmVuIGdyb3VwZWRSZWNvcmQgaXMgcmVuZGVyZWQgYWZ0ZXIgZmlyc3RSb3csXHJcbiAgICAgICAgICAgICAgICAvLyBpLmUuIG5lZWQgdG8gZGVjcmVhc2UgZmlyc3RSb3dJbmQgdG8gYWNjb3VudCBmb3IgdGhlIGFib3ZlLlxyXG4gICAgICAgICAgICAgICAgcHJlY2VkaW5nU3VtbWFyeVJvd3MgPSBwcmVjZWRpbmdHcm91cFJvd3MuZmlsdGVyKGdyID0+IHRoaXMuZ3JpZC5pc0V4cGFuZGVkR3JvdXAoZ3IpKS5sZW5ndGg7XHJcbiAgICAgICAgICAgICAgICBpZiAodGhpcy5ncmlkLnN1bW1hcnlQb3NpdGlvbiA9PT0gR3JpZFN1bW1hcnlQb3NpdGlvbi5ib3R0b20gJiYgcHJlY2VkaW5nR3JvdXBSb3dzLmxlbmd0aCAmJlxyXG4gICAgICAgICAgICAgICAgICAgIHByZWNlZGluZ0dyb3VwUm93c1twcmVjZWRpbmdHcm91cFJvd3MubGVuZ3RoIC0gMV0ucmVjb3Jkcy5pbmRleE9mKGZpcnN0Um93KSA+IC0xKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgcHJlY2VkaW5nU3VtbWFyeVJvd3MgKz0gLTE7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgIHJldHVybiBwcmVjZWRpbmdEZXRhaWxSb3dzLmxlbmd0aCArIHByZWNlZGluZ1N1bW1hcnlSb3dzICsgZmlyc3RSb3dJbmQgKyB0aGlzLmluZGV4O1xyXG4gICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgIHJldHVybiB0aGlzLmluZGV4O1xyXG4gICAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICAvKipcclxuICAgICAqIEBoaWRkZW5cclxuICAgICAqL1xyXG4gICAgY29uc3RydWN0b3IoZ3JpZDogSWd4R3JpZENvbXBvbmVudCwgaW5kZXg6IG51bWJlciwgcHJpdmF0ZSBfZ3JvdXBSb3c/OiBJR3JvdXBCeVJlY29yZCkge1xyXG4gICAgICAgIHRoaXMuZ3JpZCA9IGdyaWQ7XHJcbiAgICAgICAgdGhpcy5pbmRleCA9IGluZGV4O1xyXG4gICAgICAgIHRoaXMuaXNHcm91cEJ5Um93ID0gdHJ1ZTtcclxuICAgIH1cclxuXHJcbiAgICAvKipcclxuICAgICAqIEdldHMgd2hldGhlciB0aGUgcm93IGlzIHNlbGVjdGVkLlxyXG4gICAgICogRGVmYXVsdCB2YWx1ZSBpcyBgZmFsc2VgLlxyXG4gICAgICogYGBgdHlwZXNjcmlwdFxyXG4gICAgICogcm93LnNlbGVjdGVkID0gdHJ1ZTtcclxuICAgICAqIGBgYFxyXG4gICAgICovXHJcbiAgICBwdWJsaWMgZ2V0IHNlbGVjdGVkKCk6IGJvb2xlYW4ge1xyXG4gICAgICAgIHJldHVybiB0aGlzLmNoaWxkcmVuLmV2ZXJ5KHJvdyA9PiByb3cuc2VsZWN0ZWQpO1xyXG4gICAgfVxyXG5cclxuICAgIC8qKlxyXG4gICAgICogU2V0cyB3aGV0aGVyIHRoZSByb3cgaXMgc2VsZWN0ZWQuXHJcbiAgICAgKiBEZWZhdWx0IHZhbHVlIGlzIGBmYWxzZWAuXHJcbiAgICAgKiBgYGB0eXBlc2NyaXB0XHJcbiAgICAgKiByb3cuc2VsZWN0ZWQgPSAhcm93LnNlbGVjdGVkO1xyXG4gICAgICogYGBgXHJcbiAgICAgKi9cclxuICAgIHB1YmxpYyBzZXQgc2VsZWN0ZWQodmFsOiBib29sZWFuKSB7XHJcbiAgICAgICAgaWYgKHZhbCkge1xyXG4gICAgICAgICAgICB0aGlzLmNoaWxkcmVuLmZvckVhY2gocm93ID0+IHtcclxuICAgICAgICAgICAgICAgIHRoaXMuZ3JpZC5zZWxlY3Rpb25TZXJ2aWNlLnNlbGVjdFJvd3NXaXRoTm9FdmVudChbcm93LmtleV0pO1xyXG4gICAgICAgICAgICB9KTtcclxuICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICB0aGlzLmNoaWxkcmVuLmZvckVhY2gocm93ID0+IHtcclxuICAgICAgICAgICAgICAgIHRoaXMuZ3JpZC5zZWxlY3Rpb25TZXJ2aWNlLmRlc2VsZWN0Um93c1dpdGhOb0V2ZW50KFtyb3cua2V5XSk7XHJcbiAgICAgICAgICAgIH0pO1xyXG4gICAgICAgIH1cclxuICAgICAgICB0aGlzLmdyaWQuY2RyLm1hcmtGb3JDaGVjaygpO1xyXG4gICAgfVxyXG5cclxuICAgIC8qKlxyXG4gICAgICogR2V0cy9zZXRzIHdoZXRoZXIgdGhlIGdyb3VwIHJvdyBpcyBleHBhbmRlZC5cclxuICAgICAqIGBgYHR5cGVzY3JpcHRcclxuICAgICAqIGNvbnN0IGdyb3VwUm93RXhwYW5kZWQgPSBncm91cFJvdy5leHBhbmRlZDtcclxuICAgICAqIGBgYFxyXG4gICAgICovXHJcbiAgICBwdWJsaWMgZ2V0IGV4cGFuZGVkKCk6IGJvb2xlYW4ge1xyXG4gICAgICAgIHJldHVybiB0aGlzLmdyaWQuaXNFeHBhbmRlZEdyb3VwKHRoaXMuZ3JvdXBSb3cpO1xyXG4gICAgfVxyXG5cclxuICAgIHB1YmxpYyBzZXQgZXhwYW5kZWQodmFsdWU6IGJvb2xlYW4pIHtcclxuICAgICAgICB0aGlzLmdyaWRBUEkuc2V0X2dyb3Vwcm93X2V4cGFuc2lvbl9zdGF0ZSh0aGlzLmdyb3VwUm93LCB2YWx1ZSk7XHJcbiAgICB9XHJcblxyXG4gICAgcHVibGljIGlzQWN0aXZlKCk6IGJvb2xlYW4ge1xyXG4gICAgICAgIHJldHVybiB0aGlzLmdyaWQubmF2aWdhdGlvbi5hY3RpdmVOb2RlID8gdGhpcy5ncmlkLm5hdmlnYXRpb24uYWN0aXZlTm9kZS5yb3cgPT09IHRoaXMuaW5kZXggOiBmYWxzZTtcclxuICAgIH1cclxuXHJcbiAgICAvKipcclxuICAgICAqIFRvZ2dsZXMgdGhlIGdyb3VwIHJvdyBleHBhbmRlZC9jb2xsYXBzZWQgc3RhdGUuXHJcbiAgICAgKiBgYGB0eXBlc2NyaXB0XHJcbiAgICAgKiBncm91cFJvdy50b2dnbGUoKVxyXG4gICAgICogYGBgXHJcbiAgICAgKi9cclxuICAgIHB1YmxpYyB0b2dnbGUoKTogdm9pZCB7XHJcbiAgICAgICAgdGhpcy5ncmlkLnRvZ2dsZUdyb3VwKHRoaXMuZ3JvdXBSb3cpO1xyXG4gICAgfVxyXG5cclxuICAgIHByaXZhdGUgZ2V0IGdyaWRBUEkoKTogSWd4R3JpZEFQSVNlcnZpY2Uge1xyXG4gICAgICAgIHJldHVybiB0aGlzLmdyaWQuZ3JpZEFQSSBhcyBJZ3hHcmlkQVBJU2VydmljZTtcclxuICAgIH1cclxufVxyXG5cclxuZXhwb3J0IGNsYXNzIElneFN1bW1hcnlSb3cgaW1wbGVtZW50cyBSb3dUeXBlIHtcclxuICAgIC8qKlxyXG4gICAgICogUmV0dXJucyB0aGUgcm93IGluZGV4LlxyXG4gICAgICovXHJcbiAgICBwdWJsaWMgaW5kZXg6IG51bWJlcjtcclxuXHJcbiAgICAvKipcclxuICAgICAqIFRoZSBncmlkIHRoYXQgY29udGFpbnMgdGhlIHJvdy5cclxuICAgICAqL1xyXG4gICAgcHVibGljIGdyaWQ6IElneEdyaWRDb21wb25lbnQgfCBJZ3hUcmVlR3JpZENvbXBvbmVudCB8IElneEhpZXJhcmNoaWNhbEdyaWRDb21wb25lbnQ7XHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBSZXR1cm5zIGFsd2F5cyB0cnVlLCBiZWNhdXNlIHRoaXMgaXMgaW4gaW5zdGFuY2Ugb2YgYW4gSWd4R3JvdXBCeVJvdy5cclxuICAgICAqL1xyXG4gICAgcHVibGljIGlzU3VtbWFyeVJvdzogYm9vbGVhbjtcclxuXHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBSZXR1cm5zIHRoZSBjdXJlbnQgZ3JpZCB0eXBlXHJcbiAgICAgKi9cclxuICAgIHByaXZhdGUgZ3JpZFR5cGU6IEdyaWRJbnN0YW5jZVR5cGU7XHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBUaGUgSUdyb3VwQnlSZWNvcmQgb2JqZWN0LCByZXByZXNlbnRpbmcgdGhlIGdyb3VwIHJlY29yZCwgaWYgdGhlIHJvdyBpcyBhIEdyb3VwQnlSb3cuXHJcbiAgICAgKi9cclxuICAgIHB1YmxpYyBnZXQgc3VtbWFyaWVzKCk6IE1hcDxzdHJpbmcsIElneFN1bW1hcnlSZXN1bHRbXT4ge1xyXG4gICAgICAgIHJldHVybiB0aGlzLl9zdW1tYXJpZXMgPyB0aGlzLl9zdW1tYXJpZXMgOiB0aGlzLmdyaWQuZGF0YVZpZXdbdGhpcy5pbmRleF0uc3VtbWFyaWVzO1xyXG4gICAgfVxyXG5cclxuICAgIC8qKlxyXG4gICAgICogUmV0dXJucyB0aGUgdmlldyBpbmRleCBjYWxjdWxhdGVkIHBlciB0aGUgZ3JpZCBwYWdlLlxyXG4gICAgICovXHJcbiAgICBwdWJsaWMgZ2V0IHZpZXdJbmRleCgpOiBudW1iZXIge1xyXG4gICAgICAgIGlmICh0aGlzLmdyaWQuaGFzU3VtbWFyaXplZENvbHVtbnMgJiYgdGhpcy5ncmlkLnBhZ2UgPiAwKSB7XHJcbiAgICAgICAgICAgIGlmICh0aGlzLmdyaWRUeXBlID09PSBHcmlkSW5zdGFuY2VUeXBlLkdyaWQpIHtcclxuICAgICAgICAgICAgICAgIHRoaXMuZ3JpZCA9IHRoaXMuZ3JpZCBhcyBJZ3hHcmlkQ29tcG9uZW50O1xyXG4gICAgICAgICAgICAgICAgaWYgKHRoaXMuZ3JpZC5wYWdlKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgY29uc3QgcHJlY2VkaW5nRGV0YWlsUm93cyA9IFtdO1xyXG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IHByZWNlZGluZ0dyb3VwUm93cyA9IFtdO1xyXG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IGZpcnN0Um93ID0gdGhpcy5ncmlkLmRhdGFWaWV3WzBdO1xyXG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IGhhc0RldGFpbFJvd3MgPSB0aGlzLmdyaWQuZXhwYW5zaW9uU3RhdGVzLnNpemU7XHJcbiAgICAgICAgICAgICAgICAgICAgY29uc3QgaGFzR3JvdXBlZFJvd3MgPSB0aGlzLmdyaWQuZ3JvdXBpbmdFeHByZXNzaW9ucy5sZW5ndGg7XHJcbiAgICAgICAgICAgICAgICAgICAgbGV0IHByZWNlZGluZ1N1bW1hcnlSb3dzID0gMDtcclxuICAgICAgICAgICAgICAgICAgICBjb25zdCBmaXJzdFJvd0luZCA9IHRoaXMuZ3JpZC5ncm91cGluZ0ZsYXRSZXN1bHQuaW5kZXhPZihmaXJzdFJvdyk7XHJcblxyXG4gICAgICAgICAgICAgICAgICAgIC8vIGZyb20gZ3JvdXBpbmdGbGF0UmVzdWx0LCByZXNvbHZlIHR3byBvdGhlciBjb2xsZWN0aW9uczpcclxuICAgICAgICAgICAgICAgICAgICAvLyBwcmVjZWRpbmdHcm91cGVkUm93cyAtPiB1c2UgaXQgdG8gcmVzb2x2ZSBzdW1tYXJ5Um93IGZvciBlYWNoIGdyb3VwIGluIHByZXZpb3VzIHBhZ2VzXHJcbiAgICAgICAgICAgICAgICAgICAgLy8gcHJlY2VkaW5nRGV0YWlsUm93cyAtPiBpc2UgaXQgdG8gcmVzb2x2ZSB0aGUgZGV0YWlsIHJvdyBmb3IgZWFjaCBleHBhbmRlZCBncmlkIHJvdyBpbiBwcmV2aW91cyBwYWdlc1xyXG4gICAgICAgICAgICAgICAgICAgIGlmIChoYXNEZXRhaWxSb3dzIHx8IGhhc0dyb3VwZWRSb3dzKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuZ3JpZC5ncm91cGluZ0ZsYXRSZXN1bHQuZm9yRWFjaCgociwgaW5kKSA9PiB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCByb3dJRCA9IHRoaXMuZ3JpZC5wcmltYXJ5S2V5ID8gclt0aGlzLmdyaWQucHJpbWFyeUtleV0gOiByO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGhhc0dyb3VwZWRSb3dzICYmIGluZCA8IGZpcnN0Um93SW5kICYmIHRoaXMuZ3JpZC5pc0dyb3VwQnlSZWNvcmQocikpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwcmVjZWRpbmdHcm91cFJvd3MucHVzaChyKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICh0aGlzLmdyaWQuZXhwYW5zaW9uU3RhdGVzLmdldChyb3dJRCkgJiYgaW5kIDwgZmlyc3RSb3dJbmQgJiZcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAhdGhpcy5ncmlkLmlzR3JvdXBCeVJlY29yZChyKSkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHByZWNlZGluZ0RldGFpbFJvd3MucHVzaChyKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgICAgICAgICBpZiAodGhpcy5ncmlkLnN1bW1hcnlDYWxjdWxhdGlvbk1vZGUgIT09IEdyaWRTdW1tYXJ5Q2FsY3VsYXRpb25Nb2RlLnJvb3RMZXZlbE9ubHkpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgLy8gaWYgZmlyc3RSb3cgaXMgYSBjaGlsZCBvZiB0aGUgbGFzdCBpdGVtIGluIHByZWNlZGluZ0dyb3VwUm93cyxcclxuICAgICAgICAgICAgICAgICAgICAgICAgLy8gdGhlbiBzdW1tYXJ5Um93IGZvciB0aGlzIGdpdmVuIGdyb3VwZWRSZWNvcmQgaXMgcmVuZGVyZWQgYWZ0ZXIgZmlyc3RSb3csXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIC8vIGkuZS4gbmVlZCB0byBkZWNyZWFzZSBmaXJzdFJvd0luZCB0byBhY2NvdW50IGZvciB0aGUgYWJvdmUuXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHByZWNlZGluZ1N1bW1hcnlSb3dzID0gcHJlY2VkaW5nR3JvdXBSb3dzLmZpbHRlcihnciA9PiB0aGlzLmdyaWQuaXNFeHBhbmRlZEdyb3VwKGdyKSkubGVuZ3RoO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAodGhpcy5ncmlkLnN1bW1hcnlQb3NpdGlvbiA9PT0gR3JpZFN1bW1hcnlQb3NpdGlvbi5ib3R0b20gJiYgcHJlY2VkaW5nR3JvdXBSb3dzLmxlbmd0aCAmJlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcHJlY2VkaW5nR3JvdXBSb3dzW3ByZWNlZGluZ0dyb3VwUm93cy5sZW5ndGggLSAxXS5yZWNvcmRzLmluZGV4T2YoZmlyc3RSb3cpID4gLTEpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHByZWNlZGluZ1N1bW1hcnlSb3dzICs9IC0xO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgICAgICAgICByZXR1cm4gcHJlY2VkaW5nRGV0YWlsUm93cy5sZW5ndGggKyBwcmVjZWRpbmdTdW1tYXJ5Um93cyArIGZpcnN0Um93SW5kICsgdGhpcy5pbmRleDtcclxuICAgICAgICAgICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHRoaXMuaW5kZXg7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH0gZWxzZSBpZiAodGhpcy5ncmlkVHlwZSA9PT0gR3JpZEluc3RhbmNlVHlwZS5UcmVlR3JpZCkge1xyXG4gICAgICAgICAgICAgICAgdGhpcy5ncmlkID0gdGhpcy5ncmlkIGFzIElneFRyZWVHcmlkQ29tcG9uZW50O1xyXG4gICAgICAgICAgICAgICAgaWYgKHRoaXMuZ3JpZC5zdW1tYXJ5Q2FsY3VsYXRpb25Nb2RlICE9PSBHcmlkU3VtbWFyeUNhbGN1bGF0aW9uTW9kZS5yb290TGV2ZWxPbmx5KSB7XHJcbiAgICAgICAgICAgICAgICAgICAgY29uc3QgZmlyc3RSb3dJbmRleCA9IHRoaXMuZ3JpZC5wcm9jZXNzZWRFeHBhbmRlZEZsYXREYXRhLmluZGV4T2YodGhpcy5ncmlkLmRhdGFWaWV3WzBdLmRhdGEpO1xyXG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IHByZWNlZGluZ1N1bW1hcnlSb3dzID0gdGhpcy5ncmlkLnN1bW1hcnlQb3NpdGlvbiA9PT0gR3JpZFN1bW1hcnlQb3NpdGlvbi5ib3R0b20gP1xyXG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLmdyaWQucm9vdFJlY29yZHMuaW5kZXhPZih0aGlzLmdldFJvb3RQYXJlbnQodGhpcy5ncmlkLmRhdGFWaWV3WzBdKSkgOlxyXG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLmdyaWQucm9vdFJlY29yZHMuaW5kZXhPZih0aGlzLmdldFJvb3RQYXJlbnQodGhpcy5ncmlkLmRhdGFWaWV3WzBdKSkgKyAxO1xyXG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBmaXJzdFJvd0luZGV4ICsgcHJlY2VkaW5nU3VtbWFyeVJvd3MgKyB0aGlzLmluZGV4O1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICByZXR1cm4gdGhpcy5pbmRleCArICgodGhpcy5ncmlkLnBhZ2luYXRvcj8ucGFnZSB8fCAwKSAqICh0aGlzLmdyaWQucGFnaW5hdG9yPy5wZXJQYWdlIHx8IDApKTtcclxuICAgIH1cclxuXHJcbiAgICAvKipcclxuICAgICAqIEBoaWRkZW5cclxuICAgICAqL1xyXG4gICAgY29uc3RydWN0b3IoZ3JpZDogSWd4R3JpZENvbXBvbmVudCB8IElneFRyZWVHcmlkQ29tcG9uZW50IHwgSWd4SGllcmFyY2hpY2FsR3JpZENvbXBvbmVudCxcclxuICAgICAgICBpbmRleDogbnVtYmVyLCBwcml2YXRlIF9zdW1tYXJpZXM/OiBNYXA8c3RyaW5nLCBJZ3hTdW1tYXJ5UmVzdWx0W10+LCB0eXBlPzogR3JpZEluc3RhbmNlVHlwZSkge1xyXG4gICAgICAgIHRoaXMuZ3JpZCA9IGdyaWQ7XHJcbiAgICAgICAgdGhpcy5pbmRleCA9IGluZGV4O1xyXG4gICAgICAgIHRoaXMuaXNTdW1tYXJ5Um93ID0gdHJ1ZTtcclxuICAgICAgICB0aGlzLmdyaWRUeXBlID0gdHlwZTtcclxuICAgIH1cclxuXHJcbiAgICBwcml2YXRlIGdldFJvb3RQYXJlbnQocm93OiBJVHJlZUdyaWRSZWNvcmQpOiBJVHJlZUdyaWRSZWNvcmQge1xyXG4gICAgICAgIHdoaWxlIChyb3cucGFyZW50KSB7XHJcbiAgICAgICAgICAgIHJvdyA9IHJvdy5wYXJlbnQ7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHJldHVybiByb3c7XHJcbiAgICB9XHJcbn1cclxuIl19
693
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZ3JpZC1wdWJsaWMtcm93LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvaWduaXRldWktYW5ndWxhci9zcmMvbGliL2dyaWRzL2dyaWQtcHVibGljLXJvdy50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFFQSxPQUFPLEVBQUUsVUFBVSxFQUFFLE1BQU0sdUJBQXVCLENBQUM7QUFDbkQsT0FBTyxFQUFFLGdCQUFnQixFQUFFLDBCQUEwQixFQUFFLG1CQUFtQixFQUFFLE1BQU0sZ0JBQWdCLENBQUM7QUFFbkcsT0FBTyxFQUFFLFdBQVcsRUFBRSxNQUFNLG9CQUFvQixDQUFDO0FBT2pELE9BQU8sU0FBUyxNQUFNLGtCQUFrQixDQUFDO0FBRXpDLE1BQWUsT0FBTztJQVFsQjs7T0FFRztJQUNILElBQVcsU0FBUzs7UUFDaEIsT0FBTyxJQUFJLENBQUMsS0FBSyxHQUFHLENBQUMsQ0FBQyxDQUFBLE1BQUEsSUFBSSxDQUFDLElBQUksQ0FBQyxTQUFTLDBDQUFFLElBQUksS0FBSSxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUEsTUFBQSxJQUFJLENBQUMsSUFBSSxDQUFDLFNBQVMsMENBQUUsT0FBTyxLQUFJLENBQUMsQ0FBQyxDQUFDLENBQUM7SUFDakcsQ0FBQztJQUVEOzs7Ozs7Ozs7T0FTRztJQUNILElBQVcsR0FBRzs7UUFDVixNQUFNLElBQUksR0FBRyxNQUFBLElBQUksQ0FBQyxLQUFLLG1DQUFJLElBQUksQ0FBQyxJQUFJLENBQUMsUUFBUSxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsQ0FBQztRQUMxRCxNQUFNLFVBQVUsR0FBRyxJQUFJLENBQUMsSUFBSSxDQUFDLFVBQVUsQ0FBQztRQUN4QyxPQUFPLFVBQVUsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLFVBQVUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUM7SUFDaEQsQ0FBQztJQUVEOzs7Ozs7T0FNRztJQUNILElBQVcsSUFBSTs7UUFD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QUMsU0FBUywwQ0FBRSxJQUFJLEtBQUksQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFBLE1BQUEsSUFBSSxDQUFDLElBQUksQ0FBQyxTQUFTLDBDQUFFLE9BQU8sS0FBSSxDQUFDLENBQUMsQ0FBQyxDQUFDO0lBQ2pHLENBQUM7SUFhTyxhQUFhLENBQUMsR0FBb0I7UUFDdEMsT0FBTyxHQUFHLENBQUMsTUFBTSxFQUFFO1lBQ2YsR0FBRyxHQUFHLEdBQUcsQ0FBQyxNQUFNLENBQUM7U0FDcEI7UUFDRCxPQUFPLEdBQUcsQ0FBQztJQUNmLENBQUM7Q0FDSiIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IElHcm91cEJ5UmVjb3JkIH0gZnJvbSAnLi4vZGF0YS1vcGVyYXRpb25zL2dyb3VwYnktcmVjb3JkLmludGVyZmFjZSc7XHJcbmltcG9ydCB7IENlbGxUeXBlIH0gZnJvbSAnLi9jb21tb24vY2VsbC5pbnRlcmZhY2UnO1xyXG5pbXBvcnQgeyBJZ3hFZGl0Um93IH0gZnJvbSAnLi9jb21tb24vY3J1ZC5zZXJ2aWNlJztcclxuaW1wb3J0IHsgR3JpZEluc3RhbmNlVHlwZSwgR3JpZFN1bW1hcnlDYWxjdWxhdGlvbk1vZGUsIEdyaWRTdW1tYXJ5UG9zaXRpb24gfSBmcm9tICcuL2NvbW1vbi9lbnVtcyc7XHJcbmltcG9ydCB7IFJvd1R5cGUgfSBmcm9tICcuL2NvbW1vbi9yb3cuaW50ZXJmYWNlJztcclxuaW1wb3J0IHsgSWd4R3JpZENlbGwgfSBmcm9tICcuL2dyaWQtcHVibGljLWNlbGwnO1xyXG5pbXBvcnQgeyBJZ3hHcmlkQVBJU2VydmljZSB9IGZyb20gJy4vZ3JpZC9ncmlkLWFwaS5zZXJ2aWNlJztcclxuaW1wb3J0IHsgSWd4R3JpZENvbXBvbmVudCB9IGZyb20gJy4vZ3JpZC9ncmlkLmNvbXBvbmVudCc7XHJcbmltcG9ydCB7IElneEhpZXJhcmNoaWNhbEdyaWRDb21wb25lbnQgfSBmcm9tICcuL2hpZXJhcmNoaWNhbC1ncmlkL2hpZXJhcmNoaWNhbC1ncmlkLmNvbXBvbmVudCc7XHJcbmltcG9ydCB7IElneFN1bW1hcnlSZXN1bHQgfSBmcm9tICcuL3N1bW1hcmllcy9ncmlkLXN1bW1hcnknO1xyXG5pbXBvcnQgeyBJZ3hUcmVlR3JpZENvbXBvbmVudCB9IGZyb20gJy4vdHJlZS1ncmlkL3RyZWUtZ3JpZC5jb21wb25lbnQnO1xyXG5pbXBvcnQgeyBJVHJlZUdyaWRSZWNvcmQgfSBmcm9tICcuL3RyZWUtZ3JpZC90cmVlLWdyaWQuaW50ZXJmYWNlcyc7XHJcbmltcG9ydCBtZXJnZVdpdGggZnJvbSAnbG9kYXNoLm1lcmdld2l0aCc7XHJcblxyXG5hYnN0cmFjdCBjbGFzcyBCYXNlUm93IGltcGxlbWVudHMgUm93VHlwZSB7XHJcbiAgICBwdWJsaWMgaW5kZXg6IG51bWJlcjtcclxuICAgIC8qKlxyXG4gICAgICogVGhlIGdyaWQgdGhhdCBjb250YWlucyB0aGUgcm93LlxyXG4gICAgICovXHJcbiAgICBwdWJsaWMgZ3JpZDogSWd4R3JpZENvbXBvbmVudCB8IElneFRyZWVHcmlkQ29tcG9uZW50IHwgSWd4SGllcmFyY2hpY2FsR3JpZENvbXBvbmVudDtcclxuICAgIHByb3RlY3RlZCBfZGF0YT86IGFueTtcclxuXHJcbiAgICAvKipcclxuICAgICAqIFJldHVybnMgdGhlIHZpZXcgaW5kZXggY2FsY3VsYXRlZCBwZXIgdGhlIGdyaWQgcGFnZS5cclxuICAgICAqL1xyXG4gICAgcHVibGljIGdldCB2aWV3SW5kZXgoKTogbnVtYmVyIHtcclxuICAgICAgICByZXR1cm4gdGhpcy5pbmRleCArICgodGhpcy5ncmlkLnBhZ2luYXRvcj8ucGFnZSB8fCAwKSAqICh0aGlzLmdyaWQucGFnaW5hdG9yPy5wZXJQYWdlIHx8IDApKTtcclxuICAgIH1cclxuXHJcbiAgICAvKipcclxuICAgICAqIEdldHMgdGhlIHJvdyBrZXkuXHJcbiAgICAgKiBBIHJvdyBpbiB0aGUgZ3JpZCBpcyBpZGVudGlmaWVkIGVpdGhlciBieTpcclxuICAgICAqIC0gcHJpbWFyeUtleSBkYXRhIHZhbHVlLFxyXG4gICAgICogLSB0aGUgd2hvbGUgcm93RGF0YSwgaWYgdGhlIHByaW1hcnlLZXkgaXMgb21pdHRlZC5cclxuICAgICAqXHJcbiAgICAgKiBgYGB0eXBlc2NyaXB0XHJcbiAgICAgKiBsZXQgcm93S2V5ID0gcm93LmtleTtcclxuICAgICAqIGBgYFxyXG4gICAgICovXHJcbiAgICBwdWJsaWMgZ2V0IGtleSgpOiBhbnkge1xyXG4gICAgICAgIGNvbnN0IGRhdGEgPSB0aGlzLl9kYXRhID8/IHRoaXMuZ3JpZC5kYXRhVmlld1t0aGlzLmluZGV4XTtcclxuICAgICAgICBjb25zdCBwcmltYXJ5S2V5ID0gdGhpcy5ncmlkLnByaW1hcnlLZXk7XHJcbiAgICAgICAgcmV0dXJuIHByaW1hcnlLZXkgPyBkYXRhW3ByaW1hcnlLZXldIDogZGF0YTtcclxuICAgIH1cclxuXHJcbiAgICAvKipcclxuICAgICAqIFRoZSBkYXRhIHJlY29yZCB0aGF0IHBvcHVsYXRlcyB0aGUgcm93LlxyXG4gICAgICpcclxuICAgICAqIGBgYHR5cGVzY3JpcHRcclxuICAgICAqIGxldCByb3dEYXRhID0gcm93LmRhdGE7XHJcbiAgICAgKiBgYGBcclxuICAgICAqL1xyXG4gICAgcHVibGljIGdldCBkYXRhKCk6IGFueSB7XHJcbiAgICAgICAgaWYgKHRoaXMuaW5FZGl0TW9kZSkge1xyXG4gICAgICAgICAgICByZXR1cm4gbWVyZ2VXaXRoKHRoaXMuZ3JpZC5kYXRhQ2xvbmVTdHJhdGVneS5jbG9uZSh0aGlzLl9kYXRhID8/IHRoaXMuZ3JpZC5kYXRhVmlld1t0aGlzLmluZGV4XSksXHJcbiAgICAgICAgICAgICAgICB0aGlzLmdyaWQudHJhbnNhY3Rpb25zLmdldEFnZ3JlZ2F0ZWRWYWx1ZSh0aGlzLmtleSwgZmFsc2UpLFxyXG4gICAgICAgICAgICAgICAgKG9ialZhbHVlLCBzcmNWYWx1ZSkgPT4ge1xyXG4gICAgICAgICAgICAgICAgICAgIGlmIChBcnJheS5pc0FycmF5KHNyY1ZhbHVlKSkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gb2JqVmFsdWUgPSBzcmNWYWx1ZTtcclxuICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICB9KTtcclxuICAgICAgICB9XHJcbiAgICAgICAgcmV0dXJuIHRoaXMuX2RhdGEgPz8gdGhpcy5ncmlkLmRhdGFWaWV3W3RoaXMuaW5kZXhdO1xyXG4gICAgfVxyXG5cclxuICAgIC8qKlxyXG4gICAgICogQGRlcHJlY2F0ZWQgVXNlICdkYXRhJyBpbnN0ZWFkXHJcbiAgICAgKlxyXG4gICAgICogVGhlIGRhdGEgcmVjb3JkIHRoYXQgcG9wdWxhdGVzIHRoZSByb3dcclxuICAgICAqL1xyXG4gICAgcHVibGljIGdldCByb3dEYXRhKCk6IGFueSB7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMuZGF0YTtcclxuICAgIH1cclxuXHJcbiAgICAvKipcclxuICAgICAqIEBkZXByZWNhdGVkIFVzZSAna2V5JyBpbnN0ZWFkXHJcbiAgICAgKi9cclxuICAgIHB1YmxpYyBnZXQgcm93SUQoKTogYW55IHtcclxuICAgICAgICByZXR1cm4gdGhpcy5rZXk7XHJcbiAgICB9XHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBSZXR1cm5zIGlmIHRoZSByb3cgaXMgY3VycmVudGx5IGluIGVkaXQgbW9kZS5cclxuICAgICAqL1xyXG4gICAgcHVibGljIGdldCBpbkVkaXRNb2RlKCk6IGJvb2xlYW4ge1xyXG4gICAgICAgIGlmICh0aGlzLmdyaWQucm93RWRpdGFibGUpIHtcclxuICAgICAgICAgICAgY29uc3QgZWRpdFJvd1N0YXRlID0gdGhpcy5ncmlkLmNydWRTZXJ2aWNlLnJvdztcclxuICAgICAgICAgICAgcmV0dXJuIChlZGl0Um93U3RhdGUgJiYgZWRpdFJvd1N0YXRlLmlkID09PSB0aGlzLmtleSkgfHwgZmFsc2U7XHJcbiAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xyXG4gICAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICAvKipcclxuICAgICAqIEdldHMgd2hldGhlciB0aGUgcm93IGlzIHBpbm5lZC5cclxuICAgICAqIERlZmF1bHQgdmFsdWUgaXMgYGZhbHNlYC5cclxuICAgICAqIGBgYHR5cGVzY3JpcHRcclxuICAgICAqIGNvbnN0IGlzUGlubmVkID0gcm93LnBpbm5lZDtcclxuICAgICAqIGBgYFxyXG4gICAgICovXHJcbiAgICBwdWJsaWMgZ2V0IHBpbm5lZCgpOiBib29sZWFuIHtcclxuICAgICAgICByZXR1cm4gdGhpcy5ncmlkLmlzUmVjb3JkUGlubmVkKHRoaXMuZGF0YSk7XHJcbiAgICB9XHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBTZXRzIHdoZXRoZXIgdGhlIHJvdyBpcyBwaW5uZWQuXHJcbiAgICAgKiBEZWZhdWx0IHZhbHVlIGlzIGBmYWxzZWAuXHJcbiAgICAgKiBgYGB0eXBlc2NyaXB0XHJcbiAgICAgKiByb3cucGlubmVkID0gIXJvdy5waW5uZWQ7XHJcbiAgICAgKiBgYGBcclxuICAgICAqL1xyXG4gICAgcHVibGljIHNldCBwaW5uZWQodmFsOiBib29sZWFuKSB7XHJcbiAgICAgICAgaWYgKHZhbCkge1xyXG4gICAgICAgICAgICB0aGlzLnBpbigpO1xyXG4gICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgIHRoaXMudW5waW4oKTtcclxuICAgICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBHZXRzIHRoZSByb3cgZXhwYW5kZWQvY29sbGFwc2VkIHN0YXRlLlxyXG4gICAgICpcclxuICAgICAqIGBgYHR5cGVzY3JpcHRcclxuICAgICAqIGNvbnN0IGlzRXhwYW5kZWQgPSByb3cuZXhwYW5kZWQ7XHJcbiAgICAgKiBgYGBcclxuICAgICAqL1xyXG4gICAgcHVibGljIGdldCBleHBhbmRlZCgpOiBib29sZWFuIHtcclxuICAgICAgICByZXR1cm4gdGhpcy5ncmlkLmdyaWRBUEkuZ2V0X3Jvd19leHBhbnNpb25fc3RhdGUodGhpcy5kYXRhKTtcclxuICAgIH1cclxuXHJcbiAgICAvKipcclxuICAgICAqIEV4cGFuZHMvY29sbGFwc2VzIHRoZSByb3cuXHJcbiAgICAgKlxyXG4gICAgICogYGBgdHlwZXNjcmlwdFxyXG4gICAgICogcm93LmV4cGFuZGVkID0gdHJ1ZTtcclxuICAgICAqIGBgYFxyXG4gICAgICovXHJcbiAgICBwdWJsaWMgc2V0IGV4cGFuZGVkKHZhbDogYm9vbGVhbikge1xyXG4gICAgICAgIHRoaXMuZ3JpZC5ncmlkQVBJLnNldF9yb3dfZXhwYW5zaW9uX3N0YXRlKHRoaXMua2V5LCB2YWwpO1xyXG4gICAgfVxyXG5cclxuICAgIC8qKlxyXG4gICAgICogR2V0cyB3aGV0aGVyIHRoZSByb3cgaXMgc2VsZWN0ZWQuXHJcbiAgICAgKiBEZWZhdWx0IHZhbHVlIGlzIGBmYWxzZWAuXHJcbiAgICAgKiBgYGB0eXBlc2NyaXB0XHJcbiAgICAgKiByb3cuc2VsZWN0ZWQgPSB0cnVlO1xyXG4gICAgICogYGBgXHJcbiAgICAgKi9cclxuICAgIHB1YmxpYyBnZXQgc2VsZWN0ZWQoKTogYm9vbGVhbiB7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMuZ3JpZC5zZWxlY3Rpb25TZXJ2aWNlLmlzUm93U2VsZWN0ZWQodGhpcy5rZXkpO1xyXG4gICAgfVxyXG5cclxuICAgIC8qKlxyXG4gICAgICogU2V0cyB3aGV0aGVyIHRoZSByb3cgaXMgc2VsZWN0ZWQuXHJcbiAgICAgKiBEZWZhdWx0IHZhbHVlIGlzIGBmYWxzZWAuXHJcbiAgICAgKiBgYGB0eXBlc2NyaXB0XHJcbiAgICAgKiByb3cuc2VsZWN0ZWQgPSAhcm93LnNlbGVjdGVkO1xyXG4gICAgICogYGBgXHJcbiAgICAgKi9cclxuICAgIHB1YmxpYyBzZXQgc2VsZWN0ZWQodmFsOiBib29sZWFuKSB7XHJcbiAgICAgICAgaWYgKHZhbCkge1xyXG4gICAgICAgICAgICB0aGlzLmdyaWQuc2VsZWN0aW9uU2VydmljZS5zZWxlY3RSb3dzV2l0aE5vRXZlbnQoW3RoaXMua2V5XSk7XHJcbiAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgdGhpcy5ncmlkLnNlbGVjdGlvblNlcnZpY2UuZGVzZWxlY3RSb3dzV2l0aE5vRXZlbnQoW3RoaXMua2V5XSk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHRoaXMuZ3JpZC5jZHIubWFya0ZvckNoZWNrKCk7XHJcbiAgICB9XHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBSZXR1cm5zIGlmIHRoZSByb3cgaXMgaW4gZGVsZXRlIHN0YXRlLlxyXG4gICAgICovXHJcbiAgICBwdWJsaWMgZ2V0IGRlbGV0ZWQoKTogYm9vbGVhbiB7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMuZ3JpZC5ncmlkQVBJLnJvd19kZWxldGVkX3RyYW5zYWN0aW9uKHRoaXMua2V5KTtcclxuICAgIH1cclxuXHJcbiAgICAvKipcclxuICAgICAqIFJldHVybnMgaWYgdGhlIHJvdyBoYXMgY2hpbGQgcm93cy4gQWx3YXlzIHJldHVybiBmYWxzZSBmb3IgSWd4R3JpZFJvdy5cclxuICAgICAqL1xyXG4gICAgcHVibGljIGdldCBoYXNDaGlsZHJlbigpOiBib29sZWFuIHtcclxuICAgICAgICByZXR1cm4gZmFsc2U7XHJcbiAgICB9XHJcblxyXG4gICAgcHVibGljIGdldCBkaXNhYmxlZCgpOiBib29sZWFuIHtcclxuICAgICAgICByZXR1cm4gdGhpcy5ncmlkLmlzR2hvc3RSZWNvcmQodGhpcy5kYXRhKTtcclxuICAgIH1cclxuXHJcbiAgICAvKipcclxuICAgICAqIEdldHMgdGhlIHJlbmRlcmVkIGNlbGxzIGluIHRoZSByb3cgY29tcG9uZW50LlxyXG4gICAgICovXHJcbiAgICBwdWJsaWMgZ2V0IGNlbGxzKCk6IENlbGxUeXBlW10ge1xyXG4gICAgICAgIGNvbnN0IHJlczogQ2VsbFR5cGVbXSA9IFtdO1xyXG4gICAgICAgIHRoaXMuZ3JpZC5jb2x1bW5MaXN0LmZvckVhY2goY29sID0+IHtcclxuICAgICAgICAgICAgY29uc3QgY2VsbDogQ2VsbFR5cGUgPSBuZXcgSWd4R3JpZENlbGwodGhpcy5ncmlkLCB0aGlzLmluZGV4LCBjb2wuZmllbGQpO1xyXG4gICAgICAgICAgICByZXMucHVzaChjZWxsKTtcclxuICAgICAgICB9KTtcclxuICAgICAgICByZXR1cm4gcmVzO1xyXG4gICAgfVxyXG5cclxuICAgIC8qKlxyXG4gICAgICogUGlucyB0aGUgc3BlY2lmaWVkIHJvdy5cclxuICAgICAqIFRoaXMgbWV0aG9kIGVtaXRzIGBvblJvd1Bpbm5pbmdgIGV2ZW50LlxyXG4gICAgICpcclxuICAgICAqIGBgYHR5cGVzY3JpcHRcclxuICAgICAqIC8vIHBpbiB0aGUgc2VsZWN0ZWQgcm93IGZyb20gdGhlIGdyaWRcclxuICAgICAqIHRoaXMuZ3JpZC5zZWxlY3RlZFJvd3NbMF0ucGluKCk7XHJcbiAgICAgKiBgYGBcclxuICAgICAqL1xyXG4gICAgcHVibGljIHBpbigpOiBib29sZWFuIHtcclxuICAgICAgICByZXR1cm4gdGhpcy5ncmlkLnBpblJvdyh0aGlzLmtleSwgdGhpcy5pbmRleCk7XHJcbiAgICB9XHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBVbnBpbnMgdGhlIHNwZWNpZmllZCByb3cuXHJcbiAgICAgKiBUaGlzIG1ldGhvZCBlbWl0cyBgb25Sb3dQaW5uaW5nYCBldmVudC5cclxuICAgICAqXHJcbiAgICAgKiBgYGB0eXBlc2NyaXB0XHJcbiAgICAgKiAvLyB1bnBpbiB0aGUgc2VsZWN0ZWQgcm93IGZyb20gdGhlIGdyaWRcclxuICAgICAqIHRoaXMuZ3JpZC5zZWxlY3RlZFJvd3NbMF0udW5waW4oKTtcclxuICAgICAqIGBgYFxyXG4gICAgICovXHJcbiAgICBwdWJsaWMgdW5waW4oKTogYm9vbGVhbiB7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMuZ3JpZC51bnBpblJvdyh0aGlzLmtleSk7XHJcbiAgICB9XHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBVcGRhdGVzIHRoZSBzcGVjaWZpZWQgcm93IG9iamVjdCBhbmQgdGhlIGRhdGEgc291cmNlIHJlY29yZCB3aXRoIHRoZSBwYXNzZWQgdmFsdWUuXHJcbiAgICAgKlxyXG4gICAgICogYGBgdHlwZXNjcmlwdFxyXG4gICAgICogLy8gdXBkYXRlIHRoZSBzZWNvbmQgc2VsZWN0ZWQgcm93J3MgdmFsdWVcclxuICAgICAqIGxldCBuZXdWYWx1ZSA9IFwiQXBwbGVcIjtcclxuICAgICAqIHRoaXMuZ3JpZC5zZWxlY3RlZFJvd3NbMV0udXBkYXRlKG5ld1ZhbHVlKTtcclxuICAgICAqIGBgYFxyXG4gICAgICovXHJcbiAgICBwdWJsaWMgdXBkYXRlKHZhbHVlOiBhbnkpOiB2b2lkIHtcclxuICAgICAgICBjb25zdCBjcnVkU2VydmljZSA9IHRoaXMuZ3JpZC5jcnVkU2VydmljZTtcclxuICAgICAgICBpZiAoY3J1ZFNlcnZpY2UuY2VsbEluRWRpdE1vZGUgJiYgY3J1ZFNlcnZpY2UuY2VsbC5pZC5yb3dJRCA9PT0gdGhpcy5rZXkpIHtcclxuICAgICAgICAgICAgdGhpcy5ncmlkLnRyYW5zYWN0aW9ucy5lbmRQZW5kaW5nKGZhbHNlKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgY29uc3Qgcm93ID0gbmV3IElneEVkaXRSb3codGhpcy5rZXksIHRoaXMuaW5kZXgsIHRoaXMuZGF0YSwgdGhpcy5ncmlkKTtcclxuICAgICAgICB0aGlzLmdyaWQuZ3JpZEFQSS51cGRhdGVfcm93KHJvdywgdmFsdWUpO1xyXG4gICAgICAgIHRoaXMuZ3JpZC5ub3RpZnlDaGFuZ2VzKCk7XHJcbiAgICB9XHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBSZW1vdmVzIHRoZSBzcGVjaWZpZWQgcm93IGZyb20gdGhlIGdyaWQncyBkYXRhIHNvdXJjZS5cclxuICAgICAqIFRoaXMgbWV0aG9kIGVtaXRzIGBvblJvd0RlbGV0ZWRgIGV2ZW50LlxyXG4gICAgICpcclxuICAgICAqIGBgYHR5cGVzY3JpcHRcclxuICAgICAqIC8vIGRlbGV0ZSB0aGUgdGhpcmQgc2VsZWN0ZWQgcm93IGZyb20gdGhlIGdyaWRcclxuICAgICAqIHRoaXMuZ3JpZC5zZWxlY3RlZFJvd3NbMl0uZGVsZXRlKCk7XHJcbiAgICAgKiBgYGBcclxuICAgICAqL1xyXG4gICAgcHVibGljIGRlbGV0ZSgpOiB2b2lkIHtcclxuICAgICAgICB0aGlzLmdyaWQuZGVsZXRlUm93QnlJZCh0aGlzLmtleSk7XHJcbiAgICB9XHJcbn1cclxuXHJcbmV4cG9ydCBjbGFzcyBJZ3hHcmlkUm93IGV4dGVuZHMgQmFzZVJvdyBpbXBsZW1lbnRzIFJvd1R5cGUge1xyXG4gICAgLyoqXHJcbiAgICAgKiBAaGlkZGVuXHJcbiAgICAgKi9cclxuICAgIGNvbnN0cnVjdG9yKHB1YmxpYyBncmlkOiBJZ3hHcmlkQ29tcG9uZW50LFxyXG4gICAgICAgIHB1YmxpYyBpbmRleDogbnVtYmVyLCBkYXRhPzogYW55KSB7XHJcbiAgICAgICAgc3VwZXIoKTtcclxuICAgICAgICB0aGlzLl9kYXRhID0gZGF0YSAmJiBkYXRhLmFkZFJvdyAmJiBkYXRhLnJlY29yZFJlZiA/IGRhdGEucmVjb3JkUmVmIDogZGF0YTtcclxuICAgIH1cclxuXHJcbiAgICAvKipcclxuICAgICAqIFJldHVybnMgdGhlIHZpZXcgaW5kZXggY2FsY3VsYXRlZCBwZXIgdGhlIGdyaWQgcGFnZS5cclxuICAgICAqL1xyXG4gICAgcHVibGljIGdldCB2aWV3SW5kZXgoKTogbnVtYmVyIHtcclxuICAgICAgICBpZiAodGhpcy5ncmlkLnBhZ2luYXRvcikge1xyXG4gICAgICAgICAgICBjb25zdCBwcmVjZWRpbmdEZXRhaWxSb3dzID0gW107XHJcbiAgICAgICAgICAgIGNvbnN0IHByZWNlZGluZ0dyb3VwUm93cyA9IFtdO1xyXG4gICAgICAgICAgICBjb25zdCBmaXJzdFJvdyA9IHRoaXMuZ3JpZC5kYXRhVmlld1swXTtcclxuICAgICAgICAgICAgY29uc3QgaGFzRGV0YWlsUm93cyA9IHRoaXMuZ3JpZC5leHBhbnNpb25TdGF0ZXMuc2l6ZTtcclxuICAgICAgICAgICAgY29uc3QgaGFzR3JvdXBlZFJvd3MgPSB0aGlzLmdyaWQuZ3JvdXBpbmdFeHByZXNzaW9ucy5sZW5ndGg7XHJcbiAgICAgICAgICAgIGxldCBwcmVjZWRpbmdTdW1tYXJ5Um93cyA9IDA7XHJcbiAgICAgICAgICAgIGNvbnN0IGZpcnN0Um93SW5kID0gdGhpcy5ncmlkLmdyb3VwaW5nRmxhdFJlc3VsdC5pbmRleE9mKGZpcnN0Um93KTtcclxuXHJcbiAgICAgICAgICAgIC8vIGZyb20gZ3JvdXBpbmdGbGF0UmVzdWx0LCByZXNvbHZlIHR3byBvdGhlciBjb2xsZWN0aW9uczpcclxuICAgICAgICAgICAgLy8gcHJlY2VkaW5nR3JvdXBlZFJvd3MgLT4gdXNlIGl0IHRvIHJlc29sdmUgc3VtbWFyeVJvdyBmb3IgZWFjaCBncm91cCBpbiBwcmV2aW91cyBwYWdlc1xyXG4gICAgICAgICAgICAvLyBwcmVjZWRpbmdEZXRhaWxSb3dzIC0+IGlzZSBpdCB0byByZXNvbHZlIHRoZSBkZXRhaWwgcm93IGZvciBlYWNoIGV4cGFuZGVkIGdyaWQgcm93IGluIHByZXZpb3VzIHBhZ2VzXHJcbiAgICAgICAgICAgIGlmIChoYXNEZXRhaWxSb3dzIHx8IGhhc0dyb3VwZWRSb3dzKSB7XHJcbiAgICAgICAgICAgICAgICB0aGlzLmdyaWQuZ3JvdXBpbmdGbGF0UmVzdWx0LmZvckVhY2goKHIsIGluZCkgPT4ge1xyXG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IHJvd0lEID0gdGhpcy5ncmlkLnByaW1hcnlLZXkgPyByW3RoaXMuZ3JpZC5wcmltYXJ5S2V5XSA6IHI7XHJcbiAgICAgICAgICAgICAgICAgICAgaWYgKGhhc0dyb3VwZWRSb3dzICYmIGluZCA8IGZpcnN0Um93SW5kICYmIHRoaXMuZ3JpZC5pc0dyb3VwQnlSZWNvcmQocikpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgcHJlY2VkaW5nR3JvdXBSb3dzLnB1c2gocik7XHJcbiAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgIGlmICh0aGlzLmdyaWQuZXhwYW5zaW9uU3RhdGVzLmdldChyb3dJRCkgJiYgaW5kIDwgZmlyc3RSb3dJbmQgJiYgIXRoaXMuZ3JpZC5pc0dyb3VwQnlSZWNvcmQocikpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgcHJlY2VkaW5nRGV0YWlsUm93cy5wdXNoKHIpO1xyXG4gICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIH0pO1xyXG4gICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICBpZiAodGhpcy5ncmlkLnN1bW1hcnlDYWxjdWxhdGlvbk1vZGUgIT09IEdyaWRTdW1tYXJ5Q2FsY3VsYXRpb25Nb2RlLnJvb3RMZXZlbE9ubHkpIHtcclxuICAgICAgICAgICAgICAgIC8vIGlmIGZpcnN0Um93IGlzIGEgY2hpbGQgb2YgdGhlIGxhc3QgaXRlbSBpbiBwcmVjZWRpbmdHcm91cFJvd3MsXHJcbiAgICAgICAgICAgICAgICAvLyB0aGVuIHN1bW1hcnlSb3cgZm9yIHRoaXMgZ2l2ZW4gZ3JvdXBlZFJlY29yZCBpcyByZW5kZXJlZCBhZnRlciBmaXJzdFJvdyxcclxuICAgICAgICAgICAgICAgIC8vIGkuZS4gbmVlZCB0byBkZWNyZWFzZSBmaXJzdFJvd0luZCB0byBhY2NvdW50IGZvciB0aGUgYWJvdmUuXHJcbiAgICAgICAgICAgICAgICBwcmVjZWRpbmdTdW1tYXJ5Um93cyA9IHByZWNlZGluZ0dyb3VwUm93cy5maWx0ZXIoZ3IgPT4gdGhpcy5ncmlkLmlzRXhwYW5kZWRHcm91cChncikpLmxlbmd0aDtcclxuICAgICAgICAgICAgICAgIGlmICh0aGlzLmdyaWQuc3VtbWFyeVBvc2l0aW9uID09PSBHcmlkU3VtbWFyeVBvc2l0aW9uLmJvdHRvbSAmJiBwcmVjZWRpbmdHcm91cFJvd3MubGVuZ3RoICYmXHJcbiAgICAgICAgICAgICAgICAgICAgcHJlY2VkaW5nR3JvdXBSb3dzW3ByZWNlZGluZ0dyb3VwUm93cy5sZW5ndGggLSAxXS5yZWNvcmRzLmluZGV4T2YoZmlyc3RSb3cpID4gLTEpIHtcclxuICAgICAgICAgICAgICAgICAgICBwcmVjZWRpbmdTdW1tYXJ5Um93cyArPSAtMTtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgcmV0dXJuIHByZWNlZGluZ0RldGFpbFJvd3MubGVuZ3RoICsgcHJlY2VkaW5nU3VtbWFyeVJvd3MgKyBmaXJzdFJvd0luZCArIHRoaXMuaW5kZXg7XHJcbiAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgcmV0dXJuIHRoaXMuaW5kZXg7XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIC8qKlxyXG4gICAgICogUmV0dXJucyB0aGUgcGFyZW50IHJvdywgaWYgZ3JpZCBpcyBncm91cGVkLlxyXG4gICAgICovXHJcbiAgICBwdWJsaWMgZ2V0IHBhcmVudCgpOiBSb3dUeXBlIHtcclxuICAgICAgICBsZXQgcGFyZW50OiBJZ3hHcm91cEJ5Um93O1xyXG4gICAgICAgIGlmICghdGhpcy5ncmlkLmdyb3VwaW5nRXhwcmVzc2lvbnMubGVuZ3RoKSB7XHJcbiAgICAgICAgICAgIHJldHVybiB1bmRlZmluZWQ7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBsZXQgaSA9IHRoaXMuaW5kZXggLSAxO1xyXG4gICAgICAgIHdoaWxlIChpID49IDAgJiYgIXBhcmVudCkge1xyXG4gICAgICAgICAgICBjb25zdCByZWMgPSB0aGlzLmdyaWQuZGF0YVZpZXdbaV07XHJcbiAgICAgICAgICAgIGlmICh0aGlzLmdyaWQuaXNHcm91cEJ5UmVjb3JkKHJlYykpIHtcclxuICAgICAgICAgICAgICAgIHBhcmVudCA9IG5ldyBJZ3hHcm91cEJ5Um93KHRoaXMuZ3JpZCwgaSwgcmVjKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBpLS07XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHJldHVybiBwYXJlbnQ7XHJcbiAgICB9XHJcbn1cclxuXHJcbmV4cG9ydCBjbGFzcyBJZ3hUcmVlR3JpZFJvdyBleHRlbmRzIEJhc2VSb3cgaW1wbGVtZW50cyBSb3dUeXBlIHtcclxuICAgIC8qKlxyXG4gICAgICogQGhpZGRlblxyXG4gICAgICovXHJcbiAgICBjb25zdHJ1Y3RvcihwdWJsaWMgZ3JpZDogSWd4VHJlZUdyaWRDb21wb25lbnQsXHJcbiAgICAgICAgcHVibGljIGluZGV4OiBudW1iZXIsIGRhdGE/OiBhbnksIHByaXZhdGUgX3RyZWVSb3c/OiBJVHJlZUdyaWRSZWNvcmQpIHtcclxuICAgICAgICBzdXBlcigpO1xyXG4gICAgICAgIHRoaXMuX2RhdGEgPSBkYXRhICYmIGRhdGEuYWRkUm93ICYmIGRhdGEucmVjb3JkUmVmID8gZGF0YS5yZWNvcmRSZWYgOiBkYXRhO1xyXG4gICAgfVxyXG5cclxuICAgIC8qKlxyXG4gICAgICogUmV0dXJucyB0aGUgdmlldyBpbmRleCBjYWxjdWxhdGVkIHBlciB0aGUgZ3JpZCBwYWdlLlxyXG4gICAgICovXHJcbiAgICBwdWJsaWMgZ2V0IHZpZXdJbmRleCgpOiBudW1iZXIge1xyXG4gICAgICAgIGlmICh0aGlzLmdyaWQuaGFzU3VtbWFyaXplZENvbHVtbnMgJiYgKCh0aGlzLmdyaWQucGFnaW5hdG9yPy5wYWdlIHx8IDApID4gMCkpIHtcclxuICAgICAgICAgICAgaWYgKHRoaXMuZ3JpZC5zdW1tYXJ5Q2FsY3VsYXRpb25Nb2RlICE9PSBHcmlkU3VtbWFyeUNhbGN1bGF0aW9uTW9kZS5yb290TGV2ZWxPbmx5KSB7XHJcbiAgICAgICAgICAgICAgICBjb25zdCBmaXJzdFJvd0luZGV4ID0gdGhpcy5ncmlkLnByb2Nlc3NlZEV4cGFuZGVkRmxhdERhdGEuaW5kZXhPZih0aGlzLmdyaWQuZGF0YVZpZXdbMF0uZGF0YSk7XHJcbiAgICAgICAgICAgICAgICAvLyBmaXJzdFJvd0luZGV4IGlzIGJhc2VkIG9uIGRhdGEgcmVzdWx0IGFmdGVyIGFsbCBwaXBlcyB0cmlnZ2VyZWQsIGV4Y2x1ZGluZyBzdW1tYXJ5IHBpcGVcclxuICAgICAgICAgICAgICAgIGNvbnN0IHByZWNlZGluZ1N1bW1hcnlSb3dzID0gdGhpcy5ncmlkLnN1bW1hcnlQb3NpdGlvbiA9PT0gR3JpZFN1bW1hcnlQb3NpdGlvbi5ib3R0b20gP1xyXG4gICAgICAgICAgICAgICAgICAgIHRoaXMuZ3JpZC5yb290UmVjb3Jkcy5pbmRleE9mKHRoaXMuZ2V0Um9vdFBhcmVudCh0aGlzLmdyaWQuZGF0YVZpZXdbMF0pKSA6XHJcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5ncmlkLnJvb3RSZWNvcmRzLmluZGV4T2YodGhpcy5nZXRSb290UGFyZW50KHRoaXMuZ3JpZC5kYXRhVmlld1swXSkpICsgMTtcclxuICAgICAgICAgICAgICAgIC8vIHRoZXJlIGlzIGEgc3VtbWFyeSByb3cgZm9yIGVhY2ggcm9vdCByZWNvcmQsIHNvIHdlIGNhbGN1bGF0ZSBob3cgbWFueSByb290IHJlY29yZHMgYXJlIHJlbmRlcmVkIGJlZm9yZSB0aGUgY3VycmVudCByb3dcclxuICAgICAgICAgICAgICAgIHJldHVybiBmaXJzdFJvd0luZGV4ICsgcHJlY2VkaW5nU3VtbWFyeVJvd3MgKyB0aGlzLmluZGV4O1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHJldHVybiB0aGlzLmluZGV4ICsgKCh0aGlzLmdyaWQucGFnaW5hdG9yPy5wYWdlIHx8IDApICogKHRoaXMuZ3JpZC5wYWdpbmF0b3I/LnBlclBhZ2UgfHwgMCkpO1xyXG4gICAgfVxyXG5cclxuICAgIC8qKlxyXG4gICAgICogIFRoZSBkYXRhIHBhc3NlZCB0byB0aGUgcm93IGNvbXBvbmVudC5cclxuICAgICAqXHJcbiAgICAgKiBgYGB0eXBlc2NyaXB0XHJcbiAgICAgKiBsZXQgc2VsZWN0ZWRSb3dEYXRhID0gdGhpcy5ncmlkLnNlbGVjdGVkUm93c1swXS5yb3dEYXRhO1xyXG4gICAgICogYGBgXHJcbiAgICAgKi9cclxuICAgIHB1YmxpYyBnZXQgZGF0YSgpOiBhbnkge1xyXG4gICAgICAgIGlmICh0aGlzLmluRWRpdE1vZGUpIHtcclxuICAgICAgICAgICAgcmV0dXJuIG1lcmdlV2l0aCh0aGlzLmdyaWQuZGF0YUNsb25lU3RyYXRlZ3kuY2xvbmUodGhpcy5fZGF0YSA/PyB0aGlzLmdyaWQuZGF0YVZpZXdbdGhpcy5pbmRleF0pLFxyXG4gICAgICAgICAgICAgICAgdGhpcy5ncmlkLnRyYW5zYWN0aW9ucy5nZXRBZ2dyZWdhdGVkVmFsdWUodGhpcy5rZXksIGZhbHNlKSxcclxuICAgICAgICAgICAgICAgIChvYmpWYWx1ZSwgc3JjVmFsdWUpID0+IHtcclxuICAgICAgICAgICAgICAgICAgICBpZiAoQXJyYXkuaXNBcnJheShzcmNWYWx1ZSkpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIG9ialZhbHVlID0gc3JjVmFsdWU7XHJcbiAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGNvbnN0IHJlYyA9IHRoaXMuZ3JpZC5kYXRhVmlld1t0aGlzLmluZGV4XTtcclxuICAgICAgICByZXR1cm4gdGhpcy5fZGF0YSA/IHRoaXMuX2RhdGEgOiB0aGlzLmdyaWQuaXNUcmVlUm93KHJlYykgPyByZWMuZGF0YSA6IHJlYztcclxuICAgIH1cclxuXHJcbiAgICAvKipcclxuICAgICAqIFJldHVybnMgdGhlIGNoaWxkIHJvd3MuXHJcbiAgICAgKi9cclxuICAgIHB1YmxpYyBnZXQgY2hpbGRyZW4oKTogUm93VHlwZVtdIHtcclxuICAgICAgICBjb25zdCBjaGlsZHJlbjogSWd4VHJlZUdyaWRSb3dbXSA9IFtdO1xyXG4gICAgICAgIGlmICh0aGlzLnRyZWVSb3cuZXhwYW5kZWQpIHtcclxuICAgICAgICAgICAgdGhpcy50cmVlUm93LmNoaWxkcmVuLmZvckVhY2goKHJlYywgaSkgPT4ge1xyXG4gICAgICAgICAgICAgICAgY29uc3Qgcm93ID0gbmV3IElneFRyZWVHcmlkUm93KHRoaXMuZ3JpZCwgdGhpcy5pbmRleCArIDEgKyBpLCByZWMuZGF0YSk7XHJcbiAgICAgICAgICAgICAgICBjaGlsZHJlbi5wdXNoKHJvdyk7XHJcbiAgICAgICAgICAgIH0pO1xyXG4gICAgICAgIH1cclxuICAgICAgICByZXR1cm4gY2hpbGRyZW47XHJcbiAgICB9XHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBSZXR1cm5zIHRoZSBwYXJlbnQgcm93LlxyXG4gICAgICovXHJcbiAgICBwdWJsaWMgZ2V0IHBhcmVudCgpOiBSb3dUeXBlIHtcclxuICAgICAgICBjb25zdCByb3cgPSB0aGlzLmdyaWQuZ2V0Um93QnlLZXkodGhpcy50cmVlUm93LnBhcmVudD8ucm93SUQpO1xyXG4gICAgICAgIHJldHVybiByb3c7XHJcbiAgICB9XHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBSZXR1cm5zIHRydWUgaWYgY2hpbGQgcm93cyBleGlzdC4gQWx3YXlzIHJldHVybiBmYWxzZSBmb3IgSWd4R3JpZFJvdy5cclxuICAgICAqL1xyXG4gICAgcHVibGljIGdldCBoYXNDaGlsZHJlbigpOiBib29sZWFuIHtcclxuICAgICAgICBpZiAodGhpcy50cmVlUm93LmNoaWxkcmVuKSB7XHJcbiAgICAgICAgICAgIHJldHVybiB0aGlzLnRyZWVSb3cuY2hpbGRyZW4ubGVuZ3RoID4gMDtcclxuICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICByZXR1cm4gZmFsc2U7XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIC8qKlxyXG4gICAgICogVGhlIGBJVHJlZUdyaWRSZWNvcmRgIHdpdGggbWV0YWRhdGEgYWJvdXQgdGhlIHJvdyBpbiB0aGUgY29udGV4dCBvZiB0aGUgdHJlZSBncmlkLlxyXG4gICAgICpcclxuICAgICAqIGBgYHR5cGVzY3JpcHRcclxuICAgICAqIGNvbnN0IHJvd1BhcmVudCA9IHRoaXMudHJlZUdyaWQuZ2V0Um93QnlLZXkoMSkudHJlZVJvdy5wYXJlbnQ7XHJcbiAgICAgKiBgYGBcclxuICAgICAqL1xyXG4gICAgcHVibGljIGdldCB0cmVlUm93KCk6IElUcmVlR3JpZFJlY29yZCB7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMuX3RyZWVSb3cgPz8gdGhpcy5ncmlkLnJlY29yZHMuZ2V0KHRoaXMua2V5KTtcclxuICAgIH1cclxuXHJcbiAgICAvKipcclxuICAgICAqIEdldHMgd2hldGhlciB0aGUgcm93IGlzIHBpbm5lZC5cclxuICAgICAqXHJcbiAgICAgKiBgYGB0eXBlc2NyaXB0XHJcbiAgICAgKiBsZXQgaXNQaW5uZWQgPSByb3cucGlubmVkO1xyXG4gICAgICogYGBgXHJcbiAgICAgKi9cclxuICAgIHB1YmxpYyBnZXQgcGlubmVkKCk6IGJvb2xlYW4ge1xyXG4gICAgICAgIHJldHVybiB0aGlzLmdyaWQuaXNSZWNvcmRQaW5uZWQodGhpcyk7XHJcbiAgICB9XHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBTZXRzIHdoZXRoZXIgdGhlIHJvdyBpcyBwaW5uZWQuXHJcbiAgICAgKiBEZWZhdWx0IHZhbHVlIGlzIGBmYWxzZWAuXHJcbiAgICAgKiBgYGB0eXBlc2NyaXB0XHJcbiAgICAgKiByb3cucGlubmVkID0gIXJvdy5waW5uZWQ7XHJcbiAgICAgKiBgYGBcclxuICAgICAqL1xyXG4gICAgcHVibGljIHNldCBwaW5uZWQodmFsOiBib29sZWFuKSB7XHJcbiAgICAgICAgaWYgKHZhbCkge1xyXG4gICAgICAgICAgICB0aGlzLnBpbigpO1xyXG4gICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgIHRoaXMudW5waW4oKTtcclxuICAgICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBHZXRzIHdoZXRoZXIgdGhlIHJvdyBpcyBleHBhbmRlZC5cclxuICAgICAqXHJcbiAgICAgKiBgYGB0eXBlc2NyaXB0XHJcbiAgICAgKiBsZXQgZXNFeHBhbmRlZCA9IHJvdy5leHBhbmRlZDtcclxuICAgICAqIGBgYFxyXG4gICAgICovXHJcbiAgICBwdWJsaWMgZ2V0IGV4cGFuZGVkKCk6IGJvb2xlYW4ge1xyXG4gICAgICAgIHJldHVybiB0aGlzLmdyaWQuZ3JpZEFQSS5nZXRfcm93X2V4cGFuc2lvbl9zdGF0ZSh0aGlzLnRyZWVSb3cpO1xyXG4gICAgfVxyXG5cclxuICAgIC8qKlxyXG4gICAgICogRXhwYW5kcy9jb2xsYXBzZXMgdGhlIHJvdy5cclxuICAgICAqXHJcbiAgICAgKiBgYGB0eXBlc2NyaXB0XHJcbiAgICAgKiByb3cuZXhwYW5kZWQgPSB0cnVlO1xyXG4gICAgICogYGBgXHJcbiAgICAgKi9cclxuICAgIHB1YmxpYyBzZXQgZXhwYW5kZWQodmFsOiBib29sZWFuKSB7XHJcbiAgICAgICAgdGhpcy5ncmlkLmdyaWRBUEkuc2V0X3Jvd19leHBhbnNpb25fc3RhdGUodGhpcy5rZXksIHZhbCk7XHJcbiAgICB9XHJcblxyXG4gICAgcHVibGljIGdldCBkaXNhYmxlZCgpOiBib29sZWFuIHtcclxuICAgICAgICAvLyBUT0RPIGNlbGxcclxuICAgICAgICByZXR1cm4gdGhpcy5ncmlkLmlzR2hvc3RSZWNvcmQodGhpcy5kYXRhKSA/IHRoaXMudHJlZVJvdy5pc0ZpbHRlcmVkT3V0UGFyZW50ID09PSB1bmRlZmluZWQgOiBmYWxzZTtcclxuICAgIH1cclxuXHJcbiAgICBwcml2YXRlIGdldFJvb3RQYXJlbnQocm93OiBJVHJlZUdyaWRSZWNvcmQpOiBJVHJlZUdyaWRSZWNvcmQge1xyXG4gICAgICAgIHdoaWxlIChyb3cucGFyZW50KSB7XHJcbiAgICAgICAgICAgIHJvdyA9IHJvdy5wYXJlbnQ7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHJldHVybiByb3c7XHJcbiAgICB9XHJcbn1cclxuXHJcbmV4cG9ydCBjbGFzcyBJZ3hIaWVyYXJjaGljYWxHcmlkUm93IGV4dGVuZHMgQmFzZVJvdyBpbXBsZW1lbnRzIFJvd1R5cGUge1xyXG4gICAgLyoqXHJcbiAgICAgKiBAaGlkZGVuXHJcbiAgICAgKi9cclxuICAgIGNvbnN0cnVjdG9yKHB1YmxpYyBncmlkOiBJZ3hIaWVyYXJjaGljYWxHcmlkQ29tcG9uZW50LFxyXG4gICAgICAgIHB1YmxpYyBpbmRleDogbnVtYmVyLCBkYXRhPzogYW55KSB7XHJcbiAgICAgICAgc3VwZXIoKTtcclxuICAgICAgICB0aGlzLl9kYXRhID0gZGF0YSAmJiBkYXRhLmFkZFJvdyAmJiBkYXRhLnJlY29yZFJlZiA/IGRhdGEucmVjb3JkUmVmIDogZGF0YTtcclxuICAgIH1cclxuXHJcbiAgICAvKipcclxuICAgICAqIFJldHVybnMgdHJ1ZSBpZiByb3cgaXNsYW5kcyBleGlzdC5cclxuICAgICAqL1xyXG4gICAgcHVibGljIGdldCBoYXNDaGlsZHJlbigpOiBib29sZWFuIHtcclxuICAgICAgICByZXR1cm4gISF0aGlzLmdyaWQuY2hpbGRMYXlvdXRLZXlzLmxlbmd0aDtcclxuICAgIH1cclxuXHJcbiAgICAvKipcclxuICAgICAqIFJldHVybnMgdGhlIHZpZXcgaW5kZXggY2FsY3VsYXRlZCBwZXIgdGhlIGdyaWQgcGFnZS5cclxuICAgICAqL1xyXG4gICAgcHVibGljIGdldCB2aWV3SW5kZXgoKSB7XHJcbiAgICAgICAgY29uc3QgZmlyc3RSb3dJbmQgPSB0aGlzLmdyaWQuZmlsdGVyZWRTb3J0ZWREYXRhLmluZGV4T2YodGhpcy5ncmlkLmRhdGFWaWV3WzBdKTtcclxuICAgICAgICBjb25zdCBleHBhbmRlZFJvd3MgPSB0aGlzLmdyaWQuZmlsdGVyZWRTb3J0ZWREYXRhLmZpbHRlcigocmVjLCBpbmQpID0+IHtcclxuICAgICAgICAgICAgY29uc3Qgcm93SUQgPSB0aGlzLmdyaWQucHJpbWFyeUtleSA/IHJlY1t0aGlzLmdyaWQucHJpbWFyeUtleV0gOiByZWM7XHJcbiAgICAgICAgICAgIHJldHVybiB0aGlzLmdyaWQuZXhwYW5zaW9uU3RhdGVzLmdldChyb3dJRCkgJiYgaW5kIDwgZmlyc3RSb3dJbmQ7XHJcbiAgICAgICAgfSk7XHJcbiAgICAgICAgcmV0dXJuIGZpcnN0Um93SW5kICsgZXhwYW5kZWRSb3dzLmxlbmd0aCArIHRoaXMuaW5kZXg7XHJcbiAgICB9XHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBHZXRzIHRoZSByZW5kZXJlZCBjZWxscyBpbiB0aGUgcm93IGNvbXBvbmVudC5cclxuICAgICAqL1xyXG4gICAgcHVibGljIGdldCBjZWxscygpOiBDZWxsVHlwZVtdIHtcclxuICAgICAgICBjb25zdCByZXM6IENlbGxUeXBlW10gPSBbXTtcclxuICAgICAgICB0aGlzLmdyaWQuY29sdW1uTGlzdC5mb3JFYWNoKGNvbCA9PiB7XHJcbiAgICAgICAgICAgIGNvbnN0IGNlbGw6IENlbGxUeXBlID0gbmV3IElneEdyaWRDZWxsKHRoaXMuZ3JpZCwgdGhpcy5pbmRleCwgY29sLmZpZWxkKTtcclxuICAgICAgICAgICAgcmVzLnB1c2goY2VsbCk7XHJcbiAgICAgICAgfSk7XHJcbiAgICAgICAgcmV0dXJuIHJlcztcclxuICAgIH1cclxufVxyXG5cclxuZXhwb3J0IGNsYXNzIElneEdyb3VwQnlSb3cgaW1wbGVtZW50cyBSb3dUeXBlIHtcclxuICAgIC8qKlxyXG4gICAgICogUmV0dXJucyB0aGUgcm93IGluZGV4LlxyXG4gICAgICovXHJcbiAgICBwdWJsaWMgaW5kZXg6IG51bWJlcjtcclxuXHJcbiAgICAvKipcclxuICAgICAqIFRoZSBncmlkIHRoYXQgY29udGFpbnMgdGhlIHJvdy5cclxuICAgICAqL1xyXG4gICAgcHVibGljIGdyaWQ6IElneEdyaWRDb21wb25lbnQ7XHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBSZXR1cm5zIGFsd2F5cyB0cnVlLCBiZWNhdXNlIHRoaXMgaXMgaW4gaW5zdGFuY2Ugb2YgYW4gSWd4R3JvdXBCeVJvdy5cclxuICAgICAqL1xyXG4gICAgcHVibGljIGlzR3JvdXBCeVJvdzogYm9vbGVhbjtcclxuXHJcbiAgICAvKipcclxuICAgICAqIFRoZSBJR3JvdXBCeVJlY29yZCBvYmplY3QsIHJlcHJlc2VudGluZyB0aGUgZ3JvdXAgcmVjb3JkLCBpZiB0aGUgcm93IGlzIGEgR3JvdXBCeVJvdy5cclxuICAgICAqL1xyXG4gICAgcHVibGljIGdldCBncm91cFJvdygpOiBJR3JvdXBCeVJlY29yZCB7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMuX2dyb3VwUm93ID8gdGhpcy5fZ3JvdXBSb3cgOiB0aGlzLmdyaWQuZGF0YVZpZXdbdGhpcy5pbmRleF07XHJcbiAgICB9XHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBSZXR1cm5zIHRoZSBjaGlsZCByb3dzLlxyXG4gICAgICovXHJcbiAgICBwdWJsaWMgZ2V0IGNoaWxkcmVuKCk6IFJvd1R5cGVbXSB7XHJcbiAgICAgICAgY29uc3QgY2hpbGRyZW46IElneEdyaWRSb3dbXSA9IFtdO1xyXG4gICAgICAgIHRoaXMuZ3JvdXBSb3cucmVjb3Jkcy5mb3JFYWNoKChyZWMsIGkpID0+IHtcclxuICAgICAgICAgICAgY29uc3Qgcm93ID0gbmV3IElneEdyaWRSb3codGhpcy5ncmlkLCB0aGlzLmluZGV4ICsgMSArIGksIHJlYyk7XHJcbiAgICAgICAgICAgIGNoaWxkcmVuLnB1c2gocm93KTtcclxuICAgICAgICB9KTtcclxuICAgICAgICByZXR1cm4gY2hpbGRyZW47XHJcbiAgICB9XHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBSZXR1cm5zIHRoZSB2aWV3IGluZGV4IGNhbGN1bGF0ZWQgcGVyIHRoZSBncmlkIHBhZ2UuXHJcbiAgICAgKi9cclxuICAgIHB1YmxpYyBnZXQgdmlld0luZGV4KCk6IG51bWJlciB7XHJcbiAgICAgICAgaWYgKHRoaXMuZ3JpZC5wYWdlKSB7XHJcbiAgICAgICAgICAgIGNvbnN0IHByZWNlZGluZ0RldGFpbFJvd3MgPSBbXTtcclxuICAgICAgICAgICAgY29uc3QgcHJlY2VkaW5nR3JvdXBSb3dzID0gW107XHJcbiAgICAgICAgICAgIGNvbnN0IGZpcnN0Um93ID0gdGhpcy5ncmlkLmRhdGFWaWV3WzBdO1xyXG4gICAgICAgICAgICBjb25zdCBoYXNEZXRhaWxSb3dzID0gdGhpcy5ncmlkLmV4cGFuc2lvblN0YXRlcy5zaXplO1xyXG4gICAgICAgICAgICBjb25zdCBoYXNHcm91cGVkUm93cyA9IHRoaXMuZ3JpZC5ncm91cGluZ0V4cHJlc3Npb25zLmxlbmd0aDtcclxuICAgICAgICAgICAgbGV0IHByZWNlZGluZ1N1bW1hcnlSb3dzID0gMDtcclxuICAgICAgICAgICAgY29uc3QgZmlyc3RSb3dJbmQgPSB0aGlzLmdyaWQuZ3JvdXBpbmdGbGF0UmVzdWx0LmluZGV4T2YoZmlyc3RSb3cpO1xyXG5cclxuICAgICAgICAgICAgLy8gZnJvbSBncm91cGluZ0ZsYXRSZXN1bHQsIHJlc29sdmUgdHdvIG90aGVyIGNvbGxlY3Rpb25zOlxyXG4gICAgICAgICAgICAvLyBwcmVjZWRpbmdHcm91cGVkUm93cyAtPiB1c2UgaXQgdG8gcmVzb2x2ZSBzdW1tYXJ5Um93IGZvciBlYWNoIGdyb3VwIGluIHByZXZpb3VzIHBhZ2VzXHJcbiAgICAgICAgICAgIC8vIHByZWNlZGluZ0RldGFpbFJvd3MgLT4gaXNlIGl0IHRvIHJlc29sdmUgdGhlIGRldGFpbCByb3cgZm9yIGVhY2ggZXhwYW5kZWQgZ3JpZCByb3cgaW4gcHJldmlvdXMgcGFnZXNcclxuICAgICAgICAgICAgaWYgKGhhc0RldGFpbFJvd3MgfHwgaGFzR3JvdXBlZFJvd3MpIHtcclxuICAgICAgICAgICAgICAgIHRoaXMuZ3JpZC5ncm91cGluZ0ZsYXRSZXN1bHQuZm9yRWFjaCgociwgaW5kKSA9PiB7XHJcbiAgICAgICAgICAgICAgICAgICAgY29uc3Qgcm93SUQgPSB0aGlzLmdyaWQucHJpbWFyeUtleSA/IHJbdGhpcy5ncmlkLnByaW1hcnlLZXldIDogcjtcclxuICAgICAgICAgICAgICAgICAgICBpZiAoaGFzR3JvdXBlZFJvd3MgJiYgaW5kIDwgZmlyc3RSb3dJbmQgJiYgdGhpcy5ncmlkLmlzR3JvdXBCeVJlY29yZChyKSkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBwcmVjZWRpbmdHcm91cFJvd3MucHVzaChyKTtcclxuICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgaWYgKHRoaXMuZ3JpZC5leHBhbnNpb25TdGF0ZXMuZ2V0KHJvd0lEKSAmJiBpbmQgPCBmaXJzdFJvd0luZCAmJiAhdGhpcy5ncmlkLmlzR3JvdXBCeVJlY29yZChyKSkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBwcmVjZWRpbmdEZXRhaWxSb3dzLnB1c2gocik7XHJcbiAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgIGlmICh0aGlzLmdyaWQuc3VtbWFyeUNhbGN1bGF0aW9uTW9kZSAhPT0gR3JpZFN1bW1hcnlDYWxjdWxhdGlvbk1vZGUucm9vdExldmVsT25seSkge1xyXG4gICAgICAgICAgICAgICAgLy8gaWYgZmlyc3RSb3cgaXMgYSBjaGlsZCBvZiB0aGUgbGFzdCBpdGVtIGluIHByZWNlZGluZ0dyb3VwUm93cyxcclxuICAgICAgICAgICAgICAgIC8vIHRoZW4gc3VtbWFyeVJvdyBmb3IgdGhpcyBnaXZlbiBncm91cGVkUmVjb3JkIGlzIHJlbmRlcmVkIGFmdGVyIGZpcnN0Um93LFxyXG4gICAgICAgICAgICAgICAgLy8gaS5lLiBuZWVkIHRvIGRlY3JlYXNlIGZpcnN0Um93SW5kIHRvIGFjY291bnQgZm9yIHRoZSBhYm92ZS5cclxuICAgICAgICAgICAgICAgIHByZWNlZGluZ1N1bW1hcnlSb3dzID0gcHJlY2VkaW5nR3JvdXBSb3dzLmZpbHRlcihnciA9PiB0aGlzLmdyaWQuaXNFeHBhbmRlZEdyb3VwKGdyKSkubGVuZ3RoO1xyXG4gICAgICAgICAgICAgICAgaWYgKHRoaXMuZ3JpZC5zdW1tYXJ5UG9zaXRpb24gPT09IEdyaWRTdW1tYXJ5UG9zaXRpb24uYm90dG9tICYmIHByZWNlZGluZ0dyb3VwUm93cy5sZW5ndGggJiZcclxuICAgICAgICAgICAgICAgICAgICBwcmVjZWRpbmdHcm91cFJvd3NbcHJlY2VkaW5nR3JvdXBSb3dzLmxlbmd0aCAtIDFdLnJlY29yZHMuaW5kZXhPZihmaXJzdFJvdykgPiAtMSkge1xyXG4gICAgICAgICAgICAgICAgICAgIHByZWNlZGluZ1N1bW1hcnlSb3dzICs9IC0xO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICByZXR1cm4gcHJlY2VkaW5nRGV0YWlsUm93cy5sZW5ndGggKyBwcmVjZWRpbmdTdW1tYXJ5Um93cyArIGZpcnN0Um93SW5kICsgdGhpcy5pbmRleDtcclxuICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICByZXR1cm4gdGhpcy5pbmRleDtcclxuICAgICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBAaGlkZGVuXHJcbiAgICAgKi9cclxuICAgIGNvbnN0cnVjdG9yKGdyaWQ6IElneEdyaWRDb21wb25lbnQsIGluZGV4OiBudW1iZXIsIHByaXZhdGUgX2dyb3VwUm93PzogSUdyb3VwQnlSZWNvcmQpIHtcclxuICAgICAgICB0aGlzLmdyaWQgPSBncmlkO1xyXG4gICAgICAgIHRoaXMuaW5kZXggPSBpbmRleDtcclxuICAgICAgICB0aGlzLmlzR3JvdXBCeVJvdyA9IHRydWU7XHJcbiAgICB9XHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBHZXRzIHdoZXRoZXIgdGhlIHJvdyBpcyBzZWxlY3RlZC5cclxuICAgICAqIERlZmF1bHQgdmFsdWUgaXMgYGZhbHNlYC5cclxuICAgICAqIGBgYHR5cGVzY3JpcHRcclxuICAgICAqIHJvdy5zZWxlY3RlZCA9IHRydWU7XHJcbiAgICAgKiBgYGBcclxuICAgICAqL1xyXG4gICAgcHVibGljIGdldCBzZWxlY3RlZCgpOiBib29sZWFuIHtcclxuICAgICAgICByZXR1cm4gdGhpcy5jaGlsZHJlbi5ldmVyeShyb3cgPT4gcm93LnNlbGVjdGVkKTtcclxuICAgIH1cclxuXHJcbiAgICAvKipcclxuICAgICAqIFNldHMgd2hldGhlciB0aGUgcm93IGlzIHNlbGVjdGVkLlxyXG4gICAgICogRGVmYXVsdCB2YWx1ZSBpcyBgZmFsc2VgLlxyXG4gICAgICogYGBgdHlwZXNjcmlwdFxyXG4gICAgICogcm93LnNlbGVjdGVkID0gIXJvdy5zZWxlY3RlZDtcclxuICAgICAqIGBgYFxyXG4gICAgICovXHJcbiAgICBwdWJsaWMgc2V0IHNlbGVjdGVkKHZhbDogYm9vbGVhbikge1xyXG4gICAgICAgIGlmICh2YWwpIHtcclxuICAgICAgICAgICAgdGhpcy5jaGlsZHJlbi5mb3JFYWNoKHJvdyA9PiB7XHJcbiAgICAgICAgICAgICAgICB0aGlzLmdyaWQuc2VsZWN0aW9uU2VydmljZS5zZWxlY3RSb3dzV2l0aE5vRXZlbnQoW3Jvdy5rZXldKTtcclxuICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgdGhpcy5jaGlsZHJlbi5mb3JFYWNoKHJvdyA9PiB7XHJcbiAgICAgICAgICAgICAgICB0aGlzLmdyaWQuc2VsZWN0aW9uU2VydmljZS5kZXNlbGVjdFJvd3NXaXRoTm9FdmVudChbcm93LmtleV0pO1xyXG4gICAgICAgICAgICB9KTtcclxuICAgICAgICB9XHJcbiAgICAgICAgdGhpcy5ncmlkLmNkci5tYXJrRm9yQ2hlY2soKTtcclxuICAgIH1cclxuXHJcbiAgICAvKipcclxuICAgICAqIEdldHMvc2V0cyB3aGV0aGVyIHRoZSBncm91cCByb3cgaXMgZXhwYW5kZWQuXHJcbiAgICAgKiBgYGB0eXBlc2NyaXB0XHJcbiAgICAgKiBjb25zdCBncm91cFJvd0V4cGFuZGVkID0gZ3JvdXBSb3cuZXhwYW5kZWQ7XHJcbiAgICAgKiBgYGBcclxuICAgICAqL1xyXG4gICAgcHVibGljIGdldCBleHBhbmRlZCgpOiBib29sZWFuIHtcclxuICAgICAgICByZXR1cm4gdGhpcy5ncmlkLmlzRXhwYW5kZWRHcm91cCh0aGlzLmdyb3VwUm93KTtcclxuICAgIH1cclxuXHJcbiAgICBwdWJsaWMgc2V0IGV4cGFuZGVkKHZhbHVlOiBib29sZWFuKSB7XHJcbiAgICAgICAgdGhpcy5ncmlkQVBJLnNldF9ncm91cHJvd19leHBhbnNpb25fc3RhdGUodGhpcy5ncm91cFJvdywgdmFsdWUpO1xyXG4gICAgfVxyXG5cclxuICAgIHB1YmxpYyBpc0FjdGl2ZSgpOiBib29sZWFuIHtcclxuICAgICAgICByZXR1cm4gdGhpcy5ncmlkLm5hdmlnYXRpb24uYWN0aXZlTm9kZSA/IHRoaXMuZ3JpZC5uYXZpZ2F0aW9uLmFjdGl2ZU5vZGUucm93ID09PSB0aGlzLmluZGV4IDogZmFsc2U7XHJcbiAgICB9XHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBUb2dnbGVzIHRoZSBncm91cCByb3cgZXhwYW5kZWQvY29sbGFwc2VkIHN0YXRlLlxyXG4gICAgICogYGBgdHlwZXNjcmlwdFxyXG4gICAgICogZ3JvdXBSb3cudG9nZ2xlKClcclxuICAgICAqIGBgYFxyXG4gICAgICovXHJcbiAgICBwdWJsaWMgdG9nZ2xlKCk6IHZvaWQge1xyXG4gICAgICAgIHRoaXMuZ3JpZC50b2dnbGVHcm91cCh0aGlzLmdyb3VwUm93KTtcclxuICAgIH1cclxuXHJcbiAgICBwcml2YXRlIGdldCBncmlkQVBJKCk6IElneEdyaWRBUElTZXJ2aWNlIHtcclxuICAgICAgICByZXR1cm4gdGhpcy5ncmlkLmdyaWRBUEkgYXMgSWd4R3JpZEFQSVNlcnZpY2U7XHJcbiAgICB9XHJcbn1cclxuXHJcbmV4cG9ydCBjbGFzcyBJZ3hTdW1tYXJ5Um93IGltcGxlbWVudHMgUm93VHlwZSB7XHJcbiAgICAvKipcclxuICAgICAqIFJldHVybnMgdGhlIHJvdyBpbmRleC5cclxuICAgICAqL1xyXG4gICAgcHVibGljIGluZGV4OiBudW1iZXI7XHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBUaGUgZ3JpZCB0aGF0IGNvbnRhaW5zIHRoZSByb3cuXHJcbiAgICAgKi9cclxuICAgIHB1YmxpYyBncmlkOiBJZ3hHcmlkQ29tcG9uZW50IHwgSWd4VHJlZUdyaWRDb21wb25lbnQgfCBJZ3hIaWVyYXJjaGljYWxHcmlkQ29tcG9uZW50O1xyXG5cclxuICAgIC8qKlxyXG4gICAgICogUmV0dXJucyBhbHdheXMgdHJ1ZSwgYmVjYXVzZSB0aGlzIGlzIGluIGluc3RhbmNlIG9mIGFuIElneEdyb3VwQnlSb3cuXHJcbiAgICAgKi9cclxuICAgIHB1YmxpYyBpc1N1bW1hcnlSb3c6IGJvb2xlYW47XHJcblxyXG5cclxuICAgIC8qKlxyXG4gICAgICogUmV0dXJucyB0aGUgY3VyZW50IGdyaWQgdHlwZVxyXG4gICAgICovXHJcbiAgICBwcml2YXRlIGdyaWRUeXBlOiBHcmlkSW5zdGFuY2VUeXBlO1xyXG5cclxuICAgIC8qKlxyXG4gICAgICogVGhlIElHcm91cEJ5UmVjb3JkIG9iamVjdCwgcmVwcmVzZW50aW5nIHRoZSBncm91cCByZWNvcmQsIGlmIHRoZSByb3cgaXMgYSBHcm91cEJ5Um93LlxyXG4gICAgICovXHJcbiAgICBwdWJsaWMgZ2V0IHN1bW1hcmllcygpOiBNYXA8c3RyaW5nLCBJZ3hTdW1tYXJ5UmVzdWx0W10+IHtcclxuICAgICAgICByZXR1cm4gdGhpcy5fc3VtbWFyaWVzID8gdGhpcy5fc3VtbWFyaWVzIDogdGhpcy5ncmlkLmRhdGFWaWV3W3RoaXMuaW5kZXhdLnN1bW1hcmllcztcclxuICAgIH1cclxuXHJcbiAgICAvKipcclxuICAgICAqIFJldHVybnMgdGhlIHZpZXcgaW5kZXggY2FsY3VsYXRlZCBwZXIgdGhlIGdyaWQgcGFnZS5cclxuICAgICAqL1xyXG4gICAgcHVibGljIGdldCB2aWV3SW5kZXgoKTogbnVtYmVyIHtcclxuICAgICAgICBpZiAodGhpcy5ncmlkLmhhc1N1bW1hcml6ZWRDb2x1bW5zICYmIHRoaXMuZ3JpZC5wYWdlID4gMCkge1xyXG4gICAgICAgICAgICBpZiAodGhpcy5ncmlkVHlwZSA9PT0gR3JpZEluc3RhbmNlVHlwZS5HcmlkKSB7XHJcbiAgICAgICAgICAgICAgICB0aGlzLmdyaWQgPSB0aGlzLmdyaWQgYXMgSWd4R3JpZENvbXBvbmVudDtcclxuICAgICAgICAgICAgICAgIGlmICh0aGlzLmdyaWQucGFnZSkge1xyXG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IHByZWNlZGluZ0RldGFpbFJvd3MgPSBbXTtcclxuICAgICAgICAgICAgICAgICAgICBjb25zdCBwcmVjZWRpbmdHcm91cFJvd3MgPSBbXTtcclxuICAgICAgICAgICAgICAgICAgICBjb25zdCBmaXJzdFJvdyA9IHRoaXMuZ3JpZC5kYXRhVmlld1swXTtcclxuICAgICAgICAgICAgICAgICAgICBjb25zdCBoYXNEZXRhaWxSb3dzID0gdGhpcy5ncmlkLmV4cGFuc2lvblN0YXRlcy5zaXplO1xyXG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IGhhc0dyb3VwZWRSb3dzID0gdGhpcy5ncmlkLmdyb3VwaW5nRXhwcmVzc2lvbnMubGVuZ3RoO1xyXG4gICAgICAgICAgICAgICAgICAgIGxldCBwcmVjZWRpbmdTdW1tYXJ5Um93cyA9IDA7XHJcbiAgICAgICAgICAgICAgICAgICAgY29uc3QgZmlyc3RSb3dJbmQgPSB0aGlzLmdyaWQuZ3JvdXBpbmdGbGF0UmVzdWx0LmluZGV4T2YoZmlyc3RSb3cpO1xyXG5cclxuICAgICAgICAgICAgICAgICAgICAvLyBmcm9tIGdyb3VwaW5nRmxhdFJlc3VsdCwgcmVzb2x2ZSB0d28gb3RoZXIgY29sbGVjdGlvbnM6XHJcbiAgICAgICAgICAgICAgICAgICAgLy8gcHJlY2VkaW5nR3JvdXBlZFJvd3MgLT4gdXNlIGl0IHRvIHJlc29sdmUgc3VtbWFyeVJvdyBmb3IgZWFjaCBncm91cCBpbiBwcmV2aW91cyBwYWdlc1xyXG4gICAgICAgICAgICAgICAgICAgIC8vIHByZWNlZGluZ0RldGFpbFJvd3MgLT4gaXNlIGl0IHRvIHJlc29sdmUgdGhlIGRldGFpbCByb3cgZm9yIGVhY2ggZXhwYW5kZWQgZ3JpZCByb3cgaW4gcHJldmlvdXMgcGFnZXNcclxuICAgICAgICAgICAgICAgICAgICBpZiAoaGFzRGV0YWlsUm93cyB8fCBoYXNHcm91cGVkUm93cykge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLmdyaWQuZ3JvdXBpbmdGbGF0UmVzdWx0LmZvckVhY2goKHIsIGluZCkgPT4ge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3Qgcm93SUQgPSB0aGlzLmdyaWQucHJpbWFyeUtleSA/IHJbdGhpcy5ncmlkLnByaW1hcnlLZXldIDogcjtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChoYXNHcm91cGVkUm93cyAmJiBpbmQgPCBmaXJzdFJvd0luZCAmJiB0aGlzLmdyaWQuaXNHcm91cEJ5UmVjb3JkKHIpKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcHJlY2VkaW5nR3JvdXBSb3dzLnB1c2gocik7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAodGhpcy5ncmlkLmV4cGFuc2lvblN0YXRlcy5nZXQocm93SUQpICYmIGluZCA8IGZpcnN0Um93SW5kICYmXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIXRoaXMuZ3JpZC5pc0dyb3VwQnlSZWNvcmQocikpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwcmVjZWRpbmdEZXRhaWxSb3dzLnB1c2gocik7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIH0pO1xyXG4gICAgICAgICAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgICAgICAgICAgaWYgKHRoaXMuZ3JpZC5zdW1tYXJ5Q2FsY3VsYXRpb25Nb2RlICE9PSBHcmlkU3VtbWFyeUNhbGN1bGF0aW9uTW9kZS5yb290TGV2ZWxPbmx5KSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIC8vIGlmIGZpcnN0Um93IGlzIGEgY2hpbGQgb2YgdGhlIGxhc3QgaXRlbSBpbiBwcmVjZWRpbmdHcm91cFJvd3MsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIC8vIHRoZW4gc3VtbWFyeVJvdyBmb3IgdGhpcyBnaXZlbiBncm91cGVkUmVjb3JkIGlzIHJlbmRlcmVkIGFmdGVyIGZpcnN0Um93LFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAvLyBpLmUuIG5lZWQgdG8gZGVjcmVhc2UgZmlyc3RSb3dJbmQgdG8gYWNjb3VudCBmb3IgdGhlIGFib3ZlLlxyXG4gICAgICAgICAgICAgICAgICAgICAgICBwcmVjZWRpbmdTdW1tYXJ5Um93cyA9IHByZWNlZGluZ0dyb3VwUm93cy5maWx0ZXIoZ3IgPT4gdGhpcy5ncmlkLmlzRXhwYW5kZWRHcm91cChncikpLmxlbmd0aDtcclxuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHRoaXMuZ3JpZC5zdW1tYXJ5UG9zaXRpb24gPT09IEdyaWRTdW1tYXJ5UG9zaXRpb24uYm90dG9tICYmIHByZWNlZGluZ0dyb3VwUm93cy5sZW5ndGggJiZcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHByZWNlZGluZ0dyb3VwUm93c1twcmVjZWRpbmdHcm91cFJvd3MubGVuZ3RoIC0gMV0ucmVjb3Jkcy5pbmRleE9mKGZpcnN0Um93KSA+IC0xKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBwcmVjZWRpbmdTdW1tYXJ5Um93cyArPSAtMTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHByZWNlZGluZ0RldGFpbFJvd3MubGVuZ3RoICsgcHJlY2VkaW5nU3VtbWFyeVJvd3MgKyBmaXJzdFJvd0luZCArIHRoaXMuaW5kZXg7XHJcbiAgICAgICAgICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgICAgIHJldHVybiB0aGlzLmluZGV4O1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9IGVsc2UgaWYgKHRoaXMuZ3JpZFR5cGUgPT09IEdyaWRJbnN0YW5jZVR5cGUuVHJlZUdyaWQpIHtcclxuICAgICAgICAgICAgICAgIHRoaXMuZ3JpZCA9IHRoaXMuZ3JpZCBhcyBJZ3hUcmVlR3JpZENvbXBvbmVudDtcclxuICAgICAgICAgICAgICAgIGlmICh0aGlzLmdyaWQuc3VtbWFyeUNhbGN1bGF0aW9uTW9kZSAhPT0gR3JpZFN1bW1hcnlDYWxjdWxhdGlvbk1vZGUucm9vdExldmVsT25seSkge1xyXG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IGZpcnN0Um93SW5kZXggPSB0aGlzLmdyaWQucHJvY2Vzc2VkRXhwYW5kZWRGbGF0RGF0YS5pbmRleE9mKHRoaXMuZ3JpZC5kYXRhVmlld1swXS5kYXRhKTtcclxuICAgICAgICAgICAgICAgICAgICBjb25zdCBwcmVjZWRpbmdTdW1tYXJ5Um93cyA9IHRoaXMuZ3JpZC5zdW1tYXJ5UG9zaXRpb24gPT09IEdyaWRTdW1tYXJ5UG9zaXRpb24uYm90dG9tID9cclxuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5ncmlkLnJvb3RSZWNvcmRzLmluZGV4T2YodGhpcy5nZXRSb290UGFyZW50KHRoaXMuZ3JpZC5kYXRhVmlld1swXSkpIDpcclxuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5ncmlkLnJvb3RSZWNvcmRzLmluZGV4T2YodGhpcy5nZXRSb290UGFyZW50KHRoaXMuZ3JpZC5kYXRhVmlld1swXSkpICsgMTtcclxuICAgICAgICAgICAgICAgICAgICByZXR1cm4gZmlyc3RSb3dJbmRleCArIHByZWNlZGluZ1N1bW1hcnlSb3dzICsgdGhpcy5pbmRleDtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgcmV0dXJuIHRoaXMuaW5kZXggKyAoKHRoaXMuZ3JpZC5wYWdpbmF0b3I/LnBhZ2UgfHwgMCkgKiAodGhpcy5ncmlkLnBhZ2luYXRvcj8ucGVyUGFnZSB8fCAwKSk7XHJcbiAgICB9XHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBAaGlkZGVuXHJcbiAgICAgKi9cclxuICAgIGNvbnN0cnVjdG9yKGdyaWQ6IElneEdyaWRDb21wb25lbnQgfCBJZ3hUcmVlR3JpZENvbXBvbmVudCB8IElneEhpZXJhcmNoaWNhbEdyaWRDb21wb25lbnQsXHJcbiAgICAgICAgaW5kZXg6IG51bWJlciwgcHJpdmF0ZSBfc3VtbWFyaWVzPzogTWFwPHN0cmluZywgSWd4U3VtbWFyeVJlc3VsdFtdPiwgdHlwZT86IEdyaWRJbnN0YW5jZVR5cGUpIHtcclxuICAgICAgICB0aGlzLmdyaWQgPSBncmlkO1xyXG4gICAgICAgIHRoaXMuaW5kZXggPSBpbmRleDtcclxuICAgICAgICB0aGlzLmlzU3VtbWFyeVJvdyA9IHRydWU7XHJcbiAgICAgICAgdGhpcy5ncmlkVHlwZSA9IHR5cGU7XHJcbiAgICB9XHJcblxyXG4gICAgcHJpdmF0ZSBnZXRSb290UGFyZW50KHJvdzogSVRyZWVHcmlkUmVjb3JkKTogSVRyZWVHcmlkUmVjb3JkIHtcclxuICAgICAgICB3aGlsZSAocm93LnBhcmVudCkge1xyXG4gICAgICAgICAgICByb3cgPSByb3cucGFyZW50O1xyXG4gICAgICAgIH1cclxuICAgICAgICByZXR1cm4gcm93O1xyXG4gICAgfVxyXG59XHJcbiJdfQ==
@@ -6,7 +6,6 @@ import { TransactionType } from '../services/transaction/transaction';
6
6
  import { IgxGridSelectionService } from './selection/selection.service';
7
7
  import { IgxAddRow, IgxEditRow } from './common/crud.service';
8
8
  import mergeWith from 'lodash.mergewith';
9
- import { cloneValue } from '../core/utils';
10
9
  import { Subject } from 'rxjs';
11
10
  import { takeUntil } from 'rxjs/operators';
12
11
  export class IgxRowDirective {
@@ -56,7 +55,7 @@ export class IgxRowDirective {
56
55
  */
57
56
  get rowData() {
58
57
  if (this.inEditMode) {
59
- return mergeWith(cloneValue(this._rowData), this.grid.transactions.getAggregatedValue(this.rowID, false), (objValue, srcValue) => {
58
+ return mergeWith(this.grid.dataCloneStrategy.clone(this._rowData), this.grid.transactions.getAggregatedValue(this.rowID, false), (objValue, srcValue) => {
60
59
  if (Array.isArray(srcValue)) {
61
60
  return objValue = srcValue;
62
61
  }
@@ -488,4 +487,4 @@ IgxRowDirective.propDecorators = {
488
487
  onClick: [{ type: HostListener, args: ['click', ['$event'],] }],
489
488
  showActionStrip: [{ type: HostListener, args: ['mouseenter',] }]
490
489
  };
491
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicm93LmRpcmVjdGl2ZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL2lnbml0ZXVpLWFuZ3VsYXIvc3JjL2xpYi9ncmlkcy9yb3cuZGlyZWN0aXZlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFDSCxpQkFBaUIsRUFFakIsVUFBVSxFQUNWLFVBQVUsRUFDVixXQUFXLEVBQ1gsWUFBWSxFQUNaLEtBQUssRUFDTCxTQUFTLEVBQ1QsU0FBUyxFQUNULFlBQVksRUFDWixTQUFTLEVBQ1QsTUFBTSxFQUNOLFlBQVksRUFHZixNQUFNLGVBQWUsQ0FBQztBQUN2QixPQUFPLEVBQUUsb0JBQW9CLEVBQUUsTUFBTSxnQ0FBZ0MsQ0FBQztBQUN0RSxPQUFPLEVBQUUscUJBQXFCLEVBQUUsTUFBTSx1Q0FBdUMsQ0FBQztBQUM5RSxPQUFPLEVBQUUsa0JBQWtCLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFFbkQsT0FBTyxFQUFFLGVBQWUsRUFBRSxNQUFNLHFDQUFxQyxDQUFDO0FBRXRFLE9BQU8sRUFBRSx1QkFBdUIsRUFBRSxNQUFNLCtCQUErQixDQUFDO0FBQ3hFLE9BQU8sRUFBRSxTQUFTLEVBQUUsVUFBVSxFQUFFLE1BQU0sdUJBQXVCLENBQUM7QUFFOUQsT0FBTyxTQUFTLE1BQU0sa0JBQWtCLENBQUM7QUFDekMsT0FBTyxFQUFFLFVBQVUsRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUMzQyxPQUFPLEVBQUUsT0FBTyxFQUFFLE1BQU0sTUFBTSxDQUFDO0FBQy9CLE9BQU8sRUFBRSxTQUFTLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQztBQUszQyxNQUFNLE9BQU8sZUFBZTtJQStXeEIsWUFDVyxPQUE4QixFQUM5QixnQkFBeUMsRUFDekMsT0FBZ0MsRUFDaEMsR0FBc0I7UUFIdEIsWUFBTyxHQUFQLE9BQU8sQ0FBdUI7UUFDOUIscUJBQWdCLEdBQWhCLGdCQUFnQixDQUF5QjtRQUN6QyxZQUFPLEdBQVAsT0FBTyxDQUF5QjtRQUNoQyxRQUFHLEdBQUgsR0FBRyxDQUFtQjtRQWxYakM7O1dBRUc7UUFFSCxvQkFBZSxHQUFHLElBQUksWUFBWSxFQUFzQixDQUFDO1FBRXpEOztXQUVHO1FBRUksU0FBSSxHQUFHLEtBQUssQ0FBQztRQXFDcEI7Ozs7OztXQU1HO1FBSUksYUFBUSxHQUFHLEtBQUssQ0FBQztRQWlTeEI7O1dBRUc7UUFDSSxZQUFPLEdBQUcsS0FBSyxDQUFDO1FBRXZCOzs7V0FHRztRQUNJLG9CQUFlLEdBQUcsY0FBYyxDQUFDO1FBRXhDOztXQUVHO1FBQ0ksNkJBQXdCLEdBQUcsS0FBSyxDQUFDO1FBRTlCLGFBQVEsR0FBRyxJQUFJLE9BQU8sRUFBTyxDQUFDO0lBUUgsQ0FBQztJQXRXdEM7Ozs7Ozs7T0FPRztJQUNILElBQ1csT0FBTztRQUNkLElBQUksSUFBSSxDQUFDLFVBQVUsRUFBRTtZQUNqQixPQUFPLFNBQVMsQ0FBQyxVQUFVLENBQUMsSUFBSSxDQUFDLFFBQVEsQ0FBQyxFQUFFLElBQUksQ0FBQyxJQUFJLENBQUMsWUFBWSxDQUFDLGtCQUFrQixDQUFDLElBQUksQ0FBQyxLQUFLLEVBQUUsS0FBSyxDQUFDLEVBQ3BHLENBQUMsUUFBUSxFQUFFLFFBQVEsRUFBRSxFQUFFO2dCQUNuQixJQUFJLEtBQUssQ0FBQyxPQUFPLENBQUMsUUFBUSxDQUFDLEVBQUU7b0JBQ3pCLE9BQU8sUUFBUSxHQUFHLFFBQVEsQ0FBQztpQkFDOUI7WUFDTCxDQUFDLENBQUMsQ0FBQztTQUNWO1FBQ0QsT0FBTyxJQUFJLENBQUMsUUFBUSxDQUFDO0lBQ3pCLENBQUM7SUFFRCxJQUFXLE9BQU8sQ0FBQyxDQUFNO1FBQ3JCLElBQUksQ0FBQyxRQUFRLEdBQUcsQ0FBQyxDQUFDO0lBQ3RCLENBQUM7SUF3QkQ7Ozs7OztPQU1HO0lBQ0gsSUFBVyxNQUFNLENBQUMsS0FBYztRQUM1QixJQUFJLEtBQUssRUFBRTtZQUNQLElBQUksQ0FBQyxJQUFJLENBQUMsTUFBTSxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsQ0FBQztTQUNoQzthQUFNO1lBQ0gsSUFBSSxDQUFDLElBQUksQ0FBQyxRQUFRLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxDQUFDO1NBQ2xDO0lBQ0wsQ0FBQztJQUVEOzs7OztPQUtHO0lBQ0gsSUFBVyxNQUFNO1FBQ2IsT0FBTyxJQUFJLENBQUMsSUFBSSxDQUFDLGNBQWMsQ0FBQyxJQUFJLENBQUMsT0FBTyxDQUFDLENBQUM7SUFDbEQsQ0FBQztJQUVEOzs7OztPQUtHO0lBQ0gsSUFBVyxRQUFRO1FBQ2YsT0FBTyxJQUFJLENBQUMsT0FBTyxDQUFDLHVCQUF1QixDQUFDLElBQUksQ0FBQyxPQUFPLENBQUMsQ0FBQztJQUM5RCxDQUFDO0lBRUQ7Ozs7OztPQU1HO0lBQ0gsSUFBVyxRQUFRLENBQUMsR0FBWTtRQUM1QixJQUFJLENBQUMsT0FBTyxDQUFDLHVCQUF1QixDQUFDLElBQUksQ0FBQyxLQUFLLEVBQUUsR0FBRyxDQUFDLENBQUM7SUFDMUQsQ0FBQztJQUVELElBQVcsUUFBUTtRQUNmLE9BQU8sQ0FBQyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsV0FBVyxDQUFDLEdBQUc7WUFDOUIsSUFBSSxDQUFDLElBQUksQ0FBQyxXQUFXLENBQUMsR0FBRyxDQUFDLFlBQVksRUFBRSxLQUFLLFNBQVMsQ0FBQyxJQUFJO1lBQzNELElBQUksQ0FBQyxJQUFJLENBQUMsV0FBVyxDQUFDLEdBQUcsQ0FBQyxFQUFFLEtBQUssSUFBSSxDQUFDLEtBQUssQ0FBQztJQUNwRCxDQUFDO0lBRUQsSUFDSSxTQUFTO1FBQ1QsSUFBSSxNQUFNLEdBQUcsSUFBSSxDQUFDLElBQUksQ0FBQyxTQUFTLElBQUksRUFBRSxDQUFDO1FBQ3ZDLElBQUksSUFBSSxDQUFDLElBQUksQ0FBQyxnQkFBZ0IsRUFBRTtZQUM1QixNQUFNLFVBQVUsR0FBRyxJQUFJLENBQUMsSUFBSSxDQUFDLHFCQUFxQixDQUFDO1lBQ25ELE1BQU0sR0FBRyxNQUFNLEdBQUcsVUFBVSxDQUFDO1NBQ2hDO1FBQ0QsT0FBTyxJQUFJLENBQUMsUUFBUSxDQUFDLENBQUMsQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQztJQUN6QyxDQUFDO0lBRUQsSUFBSSxVQUFVO1FBQ1YsT0FBTyxJQUFJLENBQUMsUUFBUSxJQUFJLENBQUMsSUFBSSxDQUFDLFVBQVUsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLFNBQVMsSUFBSSxFQUFFLENBQUM7SUFDaEYsQ0FBQztJQWNELElBQVcsVUFBVTtRQUNqQixPQUFPLElBQUksQ0FBQyxXQUFXLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxXQUFXLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUM7SUFDNUQsQ0FBQztJQVdEOzs7Ozs7O09BT0c7SUFDSCxJQUFXLEtBQUs7UUFDWixNQUFNLEdBQUcsR0FBRyxJQUFJLFNBQVMsRUFBTyxDQUFDO1FBQ2pDLElBQUksQ0FBQyxJQUFJLENBQUMsTUFBTSxFQUFFO1lBQ2QsT0FBTyxHQUFHLENBQUM7U0FDZDtRQUNELE1BQU0sS0FBSyxHQUFHLElBQUksQ0FBQyxNQUFNLENBQUMsTUFBTSxDQUFDLENBQUMsSUFBSSxFQUFFLEVBQUUsQ0FBQyxJQUFJLENBQUMsYUFBYSxDQUFDLGFBQWEsS0FBSyxJQUFJLENBQUM7YUFDaEYsSUFBSSxDQUFDLENBQUMsS0FBSyxFQUFFLEtBQUssRUFBRSxFQUFFLENBQUMsS0FBSyxDQUFDLE1BQU0sQ0FBQyxZQUFZLEdBQUcsS0FBSyxDQUFDLE1BQU0sQ0FBQyxZQUFZLENBQUMsQ0FBQztRQUNuRixHQUFHLENBQUMsS0FBSyxDQUFDLEtBQUssQ0FBQyxDQUFDO1FBQ2pCLE9BQU8sR0FBRyxDQUFDO0lBQ2YsQ0FBQztJQUVELElBQVcsS0FBSyxDQUFDLEtBQUs7SUFFdEIsQ0FBQztJQUVELElBQ0ksWUFBWTtRQUNaLE9BQU8sSUFBSSxDQUFDLEtBQUssQ0FBQztJQUN0QixDQUFDO0lBRUQ7O09BRUc7SUFDSCxJQUVJLFFBQVE7UUFDUixPQUFPLElBQUksQ0FBQyxnQkFBZ0IsQ0FBQyxhQUFhLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxDQUFDO0lBQzNELENBQUM7SUFFRCxJQUFJLFFBQVEsQ0FBQyxLQUFjO1FBQ3ZCLElBQUksS0FBSyxFQUFFO1lBQ1AsSUFBSSxDQUFDLGdCQUFnQixDQUFDLHFCQUFxQixDQUFDLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUM7U0FDN0Q7YUFBTTtZQUNILElBQUksQ0FBQyxnQkFBZ0IsQ0FBQyx1QkFBdUIsQ0FBQyxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDO1NBQy9EO1FBQ0QsSUFBSSxDQUFDLElBQUksQ0FBQyxHQUFHLENBQUMsWUFBWSxFQUFFLENBQUM7SUFDakMsQ0FBQztJQUVEOztPQUVHO0lBQ0gsSUFBSSxPQUFPO1FBQ1AsT0FBTyxJQUFJLENBQUMsSUFBSSxDQUFDLGNBQWMsQ0FBQztJQUNwQyxDQUFDO0lBRUQ7OztPQUdHO0lBQ0gsSUFBSSxTQUFTO1FBQ1QsSUFBSyxJQUFJLENBQUMsSUFBWSxDQUFDLG1CQUFtQixDQUFDLE1BQU0sRUFBRTtZQUMvQyxPQUFPLElBQUksQ0FBQyxJQUFJLENBQUMsa0JBQWtCLENBQUMsT0FBTyxDQUFDLElBQUksQ0FBQyxPQUFPLENBQUMsQ0FBQztTQUM3RDtRQUNELE9BQU8sSUFBSSxDQUFDLEtBQUssR0FBRyxJQUFJLENBQUMsSUFBSSxDQUFDLElBQUksR0FBRyxJQUFJLENBQUMsSUFBSSxDQUFDLE9BQU8sQ0FBQztJQUMzRCxDQUFDO0lBRUQ7O09BRUc7SUFDSCxJQUFJLGFBQWE7UUFDYixPQUFPLElBQUksQ0FBQyxJQUFJLENBQUMsYUFBYSxDQUFDO0lBQ25DLENBQUM7SUFFRDs7T0FFRztJQUNILElBQVcsTUFBTTtRQUNiLE9BQU8sSUFBSSxDQUFDO0lBQ2hCLENBQUM7SUFFRDs7T0FFRztJQUNILElBQVcsV0FBVztRQUNsQixPQUFPLEtBQUssQ0FBQztJQUNqQixDQUFDO0lBRUQ7O09BRUc7SUFDSCxJQUFJLGVBQWU7UUFDZixPQUFPLElBQUksQ0FBQyxJQUFJLENBQUMsZUFBZSxDQUFDO0lBQ3JDLENBQUM7SUFFRDs7T0FFRztJQUNILElBQVcsZ0JBQWdCO1FBQ3ZCLE9BQU8sSUFBSSxDQUFDLElBQUksQ0FBQyxnQkFBZ0IsQ0FBQztJQUN0QyxDQUFDO0lBRUQsY0FBYztJQUNkLElBQVcsS0FBSztRQUNaLE1BQU0sR0FBRyxHQUFHLElBQUksQ0FBQyxJQUFJLENBQUMsWUFBWSxDQUFDLFFBQVEsQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLENBQUM7UUFDeEQsSUFBSSxHQUFHLEVBQUU7WUFDTCxPQUFPLEdBQUcsQ0FBQyxJQUFJLEtBQUssZUFBZSxDQUFDLEdBQUcsSUFBSSxHQUFHLENBQUMsSUFBSSxLQUFLLGVBQWUsQ0FBQyxNQUFNLENBQUM7U0FDbEY7UUFFRCxPQUFPLEtBQUssQ0FBQztJQUNqQixDQUFDO0lBRUQ7O09BRUc7SUFDSCxJQUFXLFlBQVk7UUFDbkIsT0FBTyxJQUFJLENBQUMsSUFBSSxDQUFDLFlBQVksQ0FBQztJQUNsQyxDQUFDO0lBRUQsY0FBYztJQUNkLElBQVcsS0FBSztRQUNaLE1BQU0sR0FBRyxHQUFHLElBQUksQ0FBQyxJQUFJLENBQUMsWUFBWSxDQUFDLFFBQVEsQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLENBQUM7UUFDeEQsSUFBSSxHQUFHLEVBQUU7WUFDTCxPQUFPLEdBQUcsQ0FBQyxJQUFJLEtBQUssZUFBZSxDQUFDLEdBQUcsQ0FBQztTQUMzQztRQUVELE9BQU8sS0FBSyxDQUFDO0lBQ2pCLENBQUM7SUFFRCxjQUFjO0lBQ2QsSUFBVyxPQUFPO1FBQ2QsT0FBTyxJQUFJLENBQUMsT0FBTyxDQUFDLHVCQUF1QixDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsQ0FBQztJQUM1RCxDQUFDO0lBRUQ7O09BRUc7SUFDSCxJQUFXLFFBQVE7UUFDZixPQUFPLElBQUksQ0FBQyxJQUFJLENBQUMsU0FBUyxLQUFLLElBQUksQ0FBQyxLQUFLLENBQUM7SUFDOUMsQ0FBQztJQUVELGlCQUFpQjtJQUNqQixJQUFXLFVBQVU7UUFDakIsSUFBSSxJQUFJLENBQUMsSUFBSSxDQUFDLFdBQVcsRUFBRTtZQUN2QixNQUFNLFlBQVksR0FBRyxJQUFJLENBQUMsSUFBSSxDQUFDLFdBQVcsQ0FBQyxHQUFHLENBQUM7WUFDL0MsT0FBTyxDQUFDLFlBQVksSUFBSSxZQUFZLENBQUMsRUFBRSxLQUFLLElBQUksQ0FBQyxLQUFLLENBQUMsSUFBSSxLQUFLLENBQUM7U0FDcEU7YUFBTTtZQUNILE9BQU8sS0FBSyxDQUFDO1NBQ2hCO0lBQ0wsQ0FBQztJQUVEOzs7Ozs7Ozs7Ozs7Ozs7O09BZ0JHO0lBQ0gsSUFBSSxJQUFJO1FBQ0osT0FBTyxJQUFJLENBQUMsT0FBTyxDQUFDLElBQUksQ0FBQztJQUM3QixDQUFDO0lBRUQ7Ozs7Ozs7OztPQVNHO0lBQ0gsSUFBVyxLQUFLO1FBQ1osTUFBTSxVQUFVLEdBQUcsSUFBSSxDQUFDLElBQUksQ0FBQyxVQUFVLENBQUM7UUFDeEMsT0FBTyxVQUFVLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxRQUFRLENBQUMsVUFBVSxDQUFDLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxRQUFRLENBQUM7SUFDbEUsQ0FBQztJQUVEOzs7Ozs7O09BT0c7SUFDSCxJQUFJLGFBQWE7UUFDYixPQUFPLElBQUksQ0FBQyxPQUFPLENBQUMsYUFBYSxDQUFDO0lBQ3RDLENBQUM7SUE0QkQ7OztPQUdHO0lBRUksT0FBTyxDQUFDLEtBQWlCO1FBQzVCLElBQUksSUFBSSxDQUFDLElBQUksQ0FBQyxZQUFZLEtBQUssTUFBTSxJQUFJLElBQUksQ0FBQyxPQUFPLElBQUksQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLGdCQUFnQixFQUFFO1lBQ2xGLE9BQU87U0FDVjtRQUNELElBQUksS0FBSyxDQUFDLFFBQVEsSUFBSSxJQUFJLENBQUMsSUFBSSxDQUFDLDBCQUEwQixFQUFFO1lBQ3hELElBQUksQ0FBQyxnQkFBZ0IsQ0FBQyxrQkFBa0IsQ0FBQyxJQUFJLENBQUMsS0FBSyxFQUFFLElBQUksQ0FBQyxPQUFPLEVBQUUsS0FBSyxDQUFDLENBQUM7WUFDMUUsT0FBTztTQUNWO1FBRUQsc0NBQXNDO1FBQ3RDLE1BQU0sY0FBYyxHQUFHLENBQUMsQ0FBQyxDQUFDLEtBQUssQ0FBQyxPQUFPLEdBQUcsQ0FBQyxLQUFLLENBQUMsT0FBTyxDQUFDLENBQUM7UUFDMUQsSUFBSSxDQUFDLGdCQUFnQixDQUFDLGFBQWEsQ0FBQyxJQUFJLENBQUMsS0FBSyxFQUFFLGNBQWMsRUFBRSxLQUFLLENBQUMsQ0FBQztJQUMzRSxDQUFDO0lBRUQ7OztPQUdHO0lBRUksZUFBZTtRQUNsQixJQUFJLElBQUksQ0FBQyxJQUFJLENBQUMsV0FBVyxFQUFFO1lBQ3ZCLElBQUksQ0FBQyxJQUFJLENBQUMsV0FBVyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQztTQUNwQztJQUNMLENBQUM7SUFFTSxlQUFlO1FBQ2xCLCtIQUErSDtRQUMvSCxJQUFJLENBQUMsV0FBVyxDQUFDLE9BQU8sQ0FBQyxJQUFJLENBQUMsU0FBUyxDQUFDLElBQUksQ0FBQyxRQUFRLENBQUMsQ0FBQyxDQUFDLFNBQVMsQ0FBQyxHQUFHLEVBQUUsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLHFCQUFxQixFQUFFLENBQUMsQ0FBQztJQUMvRyxDQUFDO0lBRU0sV0FBVztRQUNkLElBQUksQ0FBQyxRQUFRLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDO1FBQ3pCLElBQUksQ0FBQyxRQUFRLENBQUMsUUFBUSxFQUFFLENBQUM7SUFDN0IsQ0FBQztJQUVEOztPQUVHO0lBQ0ksa0JBQWtCLENBQUMsS0FBSztRQUMzQixLQUFLLENBQUMsZUFBZSxFQUFFLENBQUM7UUFDeEIsSUFBSSxLQUFLLENBQUMsUUFBUSxJQUFJLElBQUksQ0FBQyxJQUFJLENBQUMsMEJBQTBCLEVBQUU7WUFDeEQsSUFBSSxDQUFDLGdCQUFnQixDQUFDLGtCQUFrQixDQUFDLElBQUksQ0FBQyxLQUFLLEVBQUUsSUFBSSxDQUFDLE9BQU8sRUFBRSxLQUFLLENBQUMsQ0FBQztZQUMxRSxPQUFPO1NBQ1Y7UUFDRCxJQUFJLElBQUksQ0FBQyxRQUFRLEVBQUU7WUFDZixJQUFJLENBQUMsZ0JBQWdCLENBQUMsV0FBVyxDQUFDLElBQUksQ0FBQyxLQUFLLEVBQUUsS0FBSyxDQUFDLENBQUM7U0FDeEQ7YUFBTTtZQUNILElBQUksQ0FBQyxnQkFBZ0IsQ0FBQyxhQUFhLENBQUMsSUFBSSxDQUFDLEtBQUssRUFBRSxLQUFLLEVBQUUsS0FBSyxDQUFDLENBQUM7U0FDakU7SUFDTCxDQUFDO0lBRUQ7Ozs7Ozs7O09BUUc7SUFDSSxNQUFNLENBQUMsS0FBVTtRQUNwQixNQUFNLFdBQVcsR0FBRyxJQUFJLENBQUMsSUFBSSxDQUFDLFdBQVcsQ0FBQztRQUMxQyxJQUFJLFdBQVcsQ0FBQyxjQUFjLElBQUksV0FBVyxDQUFDLElBQUksQ0FBQyxFQUFFLENBQUMsS0FBSyxLQUFLLElBQUksQ0FBQyxLQUFLLEVBQUU7WUFDeEUsSUFBSSxDQUFDLElBQUksQ0FBQyxZQUFZLENBQUMsVUFBVSxDQUFDLEtBQUssQ0FBQyxDQUFDO1NBQzVDO1FBQ0QsTUFBTSxHQUFHLEdBQUcsSUFBSSxVQUFVLENBQUMsSUFBSSxDQUFDLEtBQUssRUFBRSxJQUFJLENBQUMsS0FBSyxFQUFFLElBQUksQ0FBQyxPQUFPLEVBQUUsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDO1FBQzVFLElBQUksQ0FBQyxPQUFPLENBQUMsVUFBVSxDQUFDLEdBQUcsRUFBRSxLQUFLLENBQUMsQ0FBQztRQUNwQyxJQUFJLENBQUMsR0FBRyxDQUFDLFlBQVksRUFBRSxDQUFDO0lBQzVCLENBQUM7SUFFRDs7Ozs7Ozs7T0FRRztJQUNJLE1BQU07UUFDVCxJQUFJLENBQUMsSUFBSSxDQUFDLGFBQWEsQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLENBQUM7SUFDeEMsQ0FBQztJQUVNLFlBQVksQ0FBQyxrQkFBa0I7UUFDbEMsTUFBTSxJQUFJLEdBQUcsSUFBSSxDQUFDLElBQUksQ0FBQyxVQUFVLENBQUMsVUFBVSxDQUFDO1FBQzdDLE9BQU8sSUFBSSxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsR0FBRyxLQUFLLElBQUksQ0FBQyxLQUFLLElBQUksSUFBSSxDQUFDLE1BQU0sS0FBSyxrQkFBa0IsQ0FBQyxDQUFDLENBQUMsS0FBSyxDQUFDO0lBQ3hGLENBQUM7SUFFRDs7Ozs7Ozs7T0FRRztJQUNJLEdBQUc7UUFDTixPQUFPLElBQUksQ0FBQyxJQUFJLENBQUMsTUFBTSxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsQ0FBQztJQUN4QyxDQUFDO0lBRUQ7Ozs7Ozs7O09BUUc7SUFDSSxLQUFLO1FBQ1IsT0FBTyxJQUFJLENBQUMsSUFBSSxDQUFDLFFBQVEsQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLENBQUM7SUFDMUMsQ0FBQztJQUVEOztPQUVHO0lBQ0gsSUFBSSxvQkFBb0I7UUFDcEIsT0FBTyxJQUFJLENBQUMsSUFBSSxDQUFDLFVBQVUsQ0FBQyxDQUFDO1lBQ3pCLElBQUksQ0FBQyxRQUFRLENBQUMsQ0FBQyxDQUFDLHdCQUF3QixHQUFHLElBQUksQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLHNCQUFzQixHQUFHLElBQUksQ0FBQyxLQUFLLENBQUMsQ0FBQztZQUM3RixJQUFJLENBQUMsUUFBUSxDQUFDLENBQUMsQ0FBQyxjQUFjLENBQUMsQ0FBQyxDQUFDLFlBQVksQ0FBQztJQUN0RCxDQUFDO0lBRUQ7O09BRUc7SUFDSSxTQUFTO1FBQ1osSUFBSSxDQUFDLEdBQUcsQ0FBQyxZQUFZLEVBQUUsQ0FBQztJQUM1QixDQUFDO0lBRUQ7O09BRUc7SUFDSSx1QkFBdUIsQ0FBQyxrQkFBMEI7UUFDckQsT0FBTyxJQUFJLENBQUMsTUFBTSxJQUFJLElBQUksQ0FBQyxRQUFRLElBQUksa0JBQWtCLEtBQUssQ0FBQyxDQUFDO0lBQ3BFLENBQUM7SUFFRDs7Ozs7Ozs7T0FRRztJQUNJLFdBQVc7UUFDZCxJQUFJLENBQUMsSUFBSSxDQUFDLFdBQVcsQ0FBQyxlQUFlLENBQUMsSUFBSSxDQUFDLENBQUM7SUFDaEQsQ0FBQztJQUVEOztPQUVHO0lBQ0ksbUJBQW1CO1FBQ3RCLElBQUksQ0FBQyx3QkFBd0IsR0FBRyxJQUFJLENBQUM7SUFDekMsQ0FBQztJQUVEOztPQUVHO0lBQ0ksbUJBQW1CO1FBQ3RCLElBQUksQ0FBQyx3QkFBd0IsR0FBRyxLQUFLLENBQUM7UUFDdEMsSUFBSSxDQUFDLGVBQWUsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUM7SUFDcEMsQ0FBQztJQUVEOztPQUVHO0lBQ0gsSUFBVywyQkFBMkI7UUFDbEMsTUFBTSw0QkFBNEIsR0FBRywwQkFBMEIsQ0FBQztRQUNoRSxNQUFNLGdCQUFnQixHQUFHLElBQUksQ0FBQyxJQUFJLENBQUMsV0FBVyxJQUFJLENBQUMsSUFBSSxDQUFDLFFBQVEsQ0FBQyxDQUFDLENBQUMsK0JBQStCLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQztRQUN4RyxPQUFPLEdBQUcsNEJBQTRCLElBQUksZ0JBQWdCLEVBQUUsQ0FBQztJQUNqRSxDQUFDOzs7WUF6aUJKLFNBQVMsU0FBQztnQkFDUCxRQUFRLEVBQUUsdUJBQXVCO2FBQ3BDOzs7WUFkUSxrQkFBa0I7WUFJbEIsdUJBQXVCO1lBcEI1QixVQUFVO1lBRlYsaUJBQWlCOzs7OEJBcUNoQixNQUFNO21CQU1OLFdBQVcsU0FBQyxXQUFXO3NCQVd2QixLQUFLO29CQXdCTCxLQUFLO3VCQVVMLEtBQUssWUFDTCxXQUFXLFNBQUMsb0JBQW9CLGNBQ2hDLFdBQVcsU0FBQyw4QkFBOEI7d0JBdUQxQyxXQUFXLFNBQUMscUJBQXFCO3FCQWlCakMsS0FBSzswQkFNTCxZQUFZLFNBQUMsV0FBVyxFQUFFLEVBQUUsSUFBSSxFQUFFLHFCQUFxQixFQUFFOzhCQVV6RCxTQUFTLFNBQUMsVUFBVSxDQUFDLEdBQUcsRUFBRSxDQUFDLG9CQUFvQixDQUFDLEVBQUUsRUFBRSxJQUFJLEVBQUUsb0JBQW9CLEVBQUU7cUJBR2hGLFlBQVksU0FBQyxNQUFNOzJCQTBCbkIsV0FBVyxTQUFDLG9CQUFvQjt1QkFRaEMsS0FBSyxZQUNMLFdBQVcsU0FBQyxvQkFBb0I7c0JBa01oQyxZQUFZLFNBQUMsT0FBTyxFQUFFLENBQUMsUUFBUSxDQUFDOzhCQW1CaEMsWUFBWSxTQUFDLFlBQVkiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQge1xuICAgIENoYW5nZURldGVjdG9yUmVmLFxuICAgIERvQ2hlY2ssXG4gICAgRWxlbWVudFJlZixcbiAgICBmb3J3YXJkUmVmLFxuICAgIEhvc3RCaW5kaW5nLFxuICAgIEhvc3RMaXN0ZW5lcixcbiAgICBJbnB1dCxcbiAgICBRdWVyeUxpc3QsXG4gICAgVmlld0NoaWxkLFxuICAgIFZpZXdDaGlsZHJlbixcbiAgICBEaXJlY3RpdmUsXG4gICAgT3V0cHV0LFxuICAgIEV2ZW50RW1pdHRlcixcbiAgICBBZnRlclZpZXdJbml0LFxuICAgIE9uRGVzdHJveVxufSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IElneENoZWNrYm94Q29tcG9uZW50IH0gZnJvbSAnLi4vY2hlY2tib3gvY2hlY2tib3guY29tcG9uZW50JztcbmltcG9ydCB7IElneEdyaWRGb3JPZkRpcmVjdGl2ZSB9IGZyb20gJy4uL2RpcmVjdGl2ZXMvZm9yLW9mL2Zvcl9vZi5kaXJlY3RpdmUnO1xuaW1wb3J0IHsgR3JpZEJhc2VBUElTZXJ2aWNlIH0gZnJvbSAnLi9hcGkuc2VydmljZSc7XG5pbXBvcnQgeyBJZ3hDb2x1bW5Db21wb25lbnQgfSBmcm9tICcuL2NvbHVtbnMvY29sdW1uLmNvbXBvbmVudCc7XG5pbXBvcnQgeyBUcmFuc2FjdGlvblR5cGUgfSBmcm9tICcuLi9zZXJ2aWNlcy90cmFuc2FjdGlvbi90cmFuc2FjdGlvbic7XG5pbXBvcnQgeyBJZ3hHcmlkQmFzZURpcmVjdGl2ZSB9IGZyb20gJy4vZ3JpZC1iYXNlLmRpcmVjdGl2ZSc7XG5pbXBvcnQgeyBJZ3hHcmlkU2VsZWN0aW9uU2VydmljZSB9IGZyb20gJy4vc2VsZWN0aW9uL3NlbGVjdGlvbi5zZXJ2aWNlJztcbmltcG9ydCB7IElneEFkZFJvdywgSWd4RWRpdFJvdyB9IGZyb20gJy4vY29tbW9uL2NydWQuc2VydmljZSc7XG5pbXBvcnQgeyBHcmlkVHlwZSB9IGZyb20gJy4vY29tbW9uL2dyaWQuaW50ZXJmYWNlJztcbmltcG9ydCBtZXJnZVdpdGggZnJvbSAnbG9kYXNoLm1lcmdld2l0aCc7XG5pbXBvcnQgeyBjbG9uZVZhbHVlIH0gZnJvbSAnLi4vY29yZS91dGlscyc7XG5pbXBvcnQgeyBTdWJqZWN0IH0gZnJvbSAncnhqcyc7XG5pbXBvcnQgeyB0YWtlVW50aWwgfSBmcm9tICdyeGpzL29wZXJhdG9ycyc7XG5cbkBEaXJlY3RpdmUoe1xuICAgIHNlbGVjdG9yOiAnW2lneFJvd0Jhc2VDb21wb25lbnRdJ1xufSlcbmV4cG9ydCBjbGFzcyBJZ3hSb3dEaXJlY3RpdmU8VCBleHRlbmRzIElneEdyaWRCYXNlRGlyZWN0aXZlICYgR3JpZFR5cGU+IGltcGxlbWVudHMgRG9DaGVjaywgQWZ0ZXJWaWV3SW5pdCwgT25EZXN0cm95IHtcbiAgICAvKipcbiAgICAgKiBAaGlkZGVuXG4gICAgICovXG4gICAgQE91dHB1dCgpXG4gICAgYWRkQW5pbWF0aW9uRW5kID0gbmV3IEV2ZW50RW1pdHRlcjxJZ3hSb3dEaXJlY3RpdmU8VD4+KCk7XG5cbiAgICAvKipcbiAgICAgKiBAaGlkZGVuXG4gICAgICovXG4gICAgQEhvc3RCaW5kaW5nKCdhdHRyLnJvbGUnKVxuICAgIHB1YmxpYyByb2xlID0gJ3Jvdyc7XG5cbiAgICAvKipcbiAgICAgKiAgVGhlIGRhdGEgcGFzc2VkIHRvIHRoZSByb3cgY29tcG9uZW50LlxuICAgICAqXG4gICAgICogYGBgdHlwZXNjcmlwdFxuICAgICAqIC8vIGdldCB0aGUgcm93IGRhdGEgZm9yIHRoZSBmaXJzdCBzZWxlY3RlZCByb3dcbiAgICAgKiBsZXQgc2VsZWN0ZWRSb3dEYXRhID0gdGhpcy5ncmlkLnNlbGVjdGVkUm93c1swXS5yb3dEYXRhO1xuICAgICAqIGBgYFxuICAgICAqL1xuICAgIEBJbnB1dCgpXG4gICAgcHVibGljIGdldCByb3dEYXRhKCk6IGFueSB7XG4gICAgICAgIGlmICh0aGlzLmluRWRpdE1vZGUpIHtcbiAgICAgICAgICAgIHJldHVybiBtZXJnZVdpdGgoY2xvbmVWYWx1ZSh0aGlzLl9yb3dEYXRhKSwgdGhpcy5ncmlkLnRyYW5zYWN0aW9ucy5nZXRBZ2dyZWdhdGVkVmFsdWUodGhpcy5yb3dJRCwgZmFsc2UpLFxuICAgICAgICAgICAgICAgIChvYmpWYWx1ZSwgc3JjVmFsdWUpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgaWYgKEFycmF5LmlzQXJyYXkoc3JjVmFsdWUpKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gb2JqVmFsdWUgPSBzcmNWYWx1ZTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiB0aGlzLl9yb3dEYXRhO1xuICAgIH1cblxuICAgIHB1YmxpYyBzZXQgcm93RGF0YSh2OiBhbnkpIHtcbiAgICAgICAgdGhpcy5fcm93RGF0YSA9IHY7XG4gICAgfVxuICAgIC8qKlxuICAgICAqIFRoZSBpbmRleCBvZiB0aGUgcm93LlxuICAgICAqXG4gICAgICogYGBgdHlwZXNjcmlwdFxuICAgICAqIC8vIGdldCB0aGUgaW5kZXggb2YgdGhlIHNlY29uZCBzZWxlY3RlZCByb3dcbiAgICAgKiBsZXQgc2VsZWN0ZWRSb3dJbmRleCA9IHRoaXMuZ3JpZC5zZWxlY3RlZFJvd3NbMV0uaW5kZXg7XG4gICAgICogYGBgXG4gICAgICovXG4gICAgQElucHV0KClcbiAgICBwdWJsaWMgaW5kZXg6IG51bWJlcjtcblxuICAgIC8qKlxuICAgICAqIFNldHMgd2hldGhlciB0aGlzIHNwZWNpZmljIHJvdyBoYXMgZGlzYWJsZWQgZnVuY3Rpb25hbGl0eSBmb3IgZWRpdGluZyBhbmQgcm93IHNlbGVjdGlvbi5cbiAgICAgKiBEZWZhdWx0IHZhbHVlIGlzIGBmYWxzZWAuXG4gICAgICogYGBgdHlwZXNjcmlwdFxuICAgICAqIHRoaXMuZ3JpZC5zZWxlY3RlZFJvd3NbMF0ucGlubmVkID0gdHJ1ZTtcbiAgICAgKiBgYGBcbiAgICAgKi9cbiAgICBASW5wdXQoKVxuICAgIEBIb3N0QmluZGluZygnYXR0ci5hcmlhLWRpc2FibGVkJylcbiAgICBASG9zdEJpbmRpbmcoJ2NsYXNzLmlneC1ncmlkX190ci0tZGlzYWJsZWQnKVxuICAgIHB1YmxpYyBkaXNhYmxlZCA9IGZhbHNlO1xuXG4gICAgLyoqXG4gICAgICogU2V0cyB3aGV0aGVyIHRoZSByb3cgaXMgcGlubmVkLlxuICAgICAqIERlZmF1bHQgdmFsdWUgaXMgYGZhbHNlYC5cbiAgICAgKiBgYGB0eXBlc2NyaXB0XG4gICAgICogdGhpcy5ncmlkLnNlbGVjdGVkUm93c1swXS5waW5uZWQgPSB0cnVlO1xuICAgICAqIGBgYFxuICAgICAqL1xuICAgIHB1YmxpYyBzZXQgcGlubmVkKHZhbHVlOiBib29sZWFuKSB7XG4gICAgICAgIGlmICh2YWx1ZSkge1xuICAgICAgICAgICAgdGhpcy5ncmlkLnBpblJvdyh0aGlzLnJvd0lEKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHRoaXMuZ3JpZC51bnBpblJvdyh0aGlzLnJvd0lEKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIC8qKlxuICAgICAqIEdldHMgd2hldGhlciB0aGUgcm93IGlzIHBpbm5lZC5cbiAgICAgKiBgYGB0eXBlc2NyaXB0XG4gICAgICogbGV0IGlzUGlubmVkID0gcm93LnBpbm5lZDtcbiAgICAgKiBgYGBcbiAgICAgKi9cbiAgICBwdWJsaWMgZ2V0IHBpbm5lZCgpOiBib29sZWFuIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuZ3JpZC5pc1JlY29yZFBpbm5lZCh0aGlzLnJvd0RhdGEpO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIEdldHMgdGhlIGV4cGFuZGVkIHN0YXRlIG9mIHRoZSByb3cuXG4gICAgICogYGBgdHlwZXNjcmlwdFxuICAgICAqIGxldCBpc0V4cGFuZGVkID0gcm93LmV4cGFuZGVkO1xuICAgICAqIGBgYFxuICAgICAqL1xuICAgIHB1YmxpYyBnZXQgZXhwYW5kZWQoKTogYm9vbGVhbiB7XG4gICAgICAgIHJldHVybiB0aGlzLmdyaWRBUEkuZ2V0X3Jvd19leHBhbnNpb25fc3RhdGUodGhpcy5yb3dEYXRhKTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBFeHBhbmRzL2NvbGxhcHNlcyB0aGUgY3VycmVudCByb3cuXG4gICAgICpcbiAgICAgKiBgYGB0eXBlc2NyaXB0XG4gICAgICogdGhpcy5ncmlkLnNlbGVjdGVkUm93c1syXS5leHBhbmRlZCA9IHRydWU7XG4gICAgICogYGBgXG4gICAgICovXG4gICAgcHVibGljIHNldCBleHBhbmRlZCh2YWw6IGJvb2xlYW4pIHtcbiAgICAgICAgdGhpcy5ncmlkQVBJLnNldF9yb3dfZXhwYW5zaW9uX3N0YXRlKHRoaXMucm93SUQsIHZhbCk7XG4gICAgfVxuXG4gICAgcHVibGljIGdldCBhZGRSb3dVSSgpOiBhbnkge1xuICAgICAgICByZXR1cm4gISF0aGlzLmdyaWQuY3J1ZFNlcnZpY2Uucm93ICYmXG4gICAgICAgICAgICB0aGlzLmdyaWQuY3J1ZFNlcnZpY2Uucm93LmdldENsYXNzTmFtZSgpID09PSBJZ3hBZGRSb3cubmFtZSAmJlxuICAgICAgICAgICAgdGhpcy5ncmlkLmNydWRTZXJ2aWNlLnJvdy5pZCA9PT0gdGhpcy5yb3dJRDtcbiAgICB9XG5cbiAgICBASG9zdEJpbmRpbmcoJ3N0eWxlLm1pbi1oZWlnaHQucHgnKVxuICAgIGdldCByb3dIZWlnaHQoKSB7XG4gICAgICAgIGxldCBoZWlnaHQgPSB0aGlzLmdyaWQucm93SGVpZ2h0IHx8IDMyO1xuICAgICAgICBpZiAodGhpcy5ncmlkLmhhc0NvbHVtbkxheW91dHMpIHtcbiAgICAgICAgICAgIGNvbnN0IG1heFJvd1NwYW4gPSB0aGlzLmdyaWQubXVsdGlSb3dMYXlvdXRSb3dTaXplO1xuICAgICAgICAgICAgaGVpZ2h0ID0gaGVpZ2h0ICogbWF4Um93U3BhbjtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gdGhpcy5hZGRSb3dVSSA/IGhlaWdodCA6IG51bGw7XG4gICAgfVxuXG4gICAgZ2V0IGNlbGxIZWlnaHQoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLmFkZFJvd1VJICYmICF0aGlzLmluRWRpdE1vZGUgPyBudWxsIDogdGhpcy5ncmlkLnJvd0hlaWdodCB8fCAzMjtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBAaGlkZGVuXG4gICAgICovXG4gICAgQElucHV0KClcbiAgICBwdWJsaWMgZ3JpZElEOiBzdHJpbmc7XG5cbiAgICAvKipcbiAgICAgKiBAaGlkZGVuXG4gICAgICovXG4gICAgQFZpZXdDaGlsZHJlbignaWd4RGlyUmVmJywgeyByZWFkOiBJZ3hHcmlkRm9yT2ZEaXJlY3RpdmUgfSlcbiAgICBwdWJsaWMgX3ZpcnREaXJSb3c6IFF1ZXJ5TGlzdDxJZ3hHcmlkRm9yT2ZEaXJlY3RpdmU8YW55Pj47XG5cbiAgICBwdWJsaWMgZ2V0IHZpcnREaXJSb3coKTogSWd4R3JpZEZvck9mRGlyZWN0aXZlPGFueT4ge1xuICAgICAgICByZXR1cm4gdGhpcy5fdmlydERpclJvdyA/IHRoaXMuX3ZpcnREaXJSb3cuZmlyc3QgOiBudWxsO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIEBoaWRkZW5cbiAgICAgKi9cbiAgICBAVmlld0NoaWxkKGZvcndhcmRSZWYoKCkgPT4gSWd4Q2hlY2tib3hDb21wb25lbnQpLCB7IHJlYWQ6IElneENoZWNrYm94Q29tcG9uZW50IH0pXG4gICAgcHVibGljIGNoZWNrYm94RWxlbWVudDogSWd4Q2hlY2tib3hDb21wb25lbnQ7XG5cbiAgICBAVmlld0NoaWxkcmVuKCdjZWxsJylcbiAgICBwcm90ZWN0ZWQgX2NlbGxzOiBRdWVyeUxpc3Q8YW55PjtcblxuICAgIC8qKlxuICAgICAqIEdldHMgdGhlIHJlbmRlcmVkIGNlbGxzIGluIHRoZSByb3cgY29tcG9uZW50LlxuICAgICAqXG4gICAgICogYGBgdHlwZXNjcmlwdFxuICAgICAqIC8vIGdldCB0aGUgY2VsbHMgb2YgdGhlIHRoaXJkIHNlbGVjdGVkIHJvd1xuICAgICAqIGxldCBzZWxlY3RlZFJvd0NlbGxzID0gdGhpcy5ncmlkLnNlbGVjdGVkUm93c1syXS5jZWxscztcbiAgICAgKiBgYGBcbiAgICAgKi9cbiAgICBwdWJsaWMgZ2V0IGNlbGxzKCkge1xuICAgICAgICBjb25zdCByZXMgPSBuZXcgUXVlcnlMaXN0PGFueT4oKTtcbiAgICAgICAgaWYgKCF0aGlzLl9jZWxscykge1xuICAgICAgICAgICAgcmV0dXJuIHJlcztcbiAgICAgICAgfVxuICAgICAgICBjb25zdCBjTGlzdCA9IHRoaXMuX2NlbGxzLmZpbHRlcigoaXRlbSkgPT4gaXRlbS5uYXRpdmVFbGVtZW50LnBhcmVudEVsZW1lbnQgIT09IG51bGwpXG4gICAgICAgICAgICAuc29ydCgoaXRlbTEsIGl0ZW0yKSA9PiBpdGVtMS5jb2x1bW4udmlzaWJsZUluZGV4IC0gaXRlbTIuY29sdW1uLnZpc2libGVJbmRleCk7XG4gICAgICAgIHJlcy5yZXNldChjTGlzdCk7XG4gICAgICAgIHJldHVybiByZXM7XG4gICAgfVxuXG4gICAgcHVibGljIHNldCBjZWxscyhjZWxscykge1xuXG4gICAgfVxuXG4gICAgQEhvc3RCaW5kaW5nKCdhdHRyLmRhdGEtcm93SW5kZXgnKVxuICAgIGdldCBkYXRhUm93SW5kZXgoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLmluZGV4O1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIEBoaWRkZW5cbiAgICAgKi9cbiAgICBASW5wdXQoKVxuICAgIEBIb3N0QmluZGluZygnYXR0ci5hcmlhLXNlbGVjdGVkJylcbiAgICBnZXQgc2VsZWN0ZWQoKTogYm9vbGVhbiB7XG4gICAgICAgIHJldHVybiB0aGlzLnNlbGVjdGlvblNlcnZpY2UuaXNSb3dTZWxlY3RlZCh0aGlzLnJvd0lEKTtcbiAgICB9XG5cbiAgICBzZXQgc2VsZWN0ZWQodmFsdWU6IGJvb2xlYW4pIHtcbiAgICAgICAgaWYgKHZhbHVlKSB7XG4gICAgICAgICAgICB0aGlzLnNlbGVjdGlvblNlcnZpY2Uuc2VsZWN0Um93c1dpdGhOb0V2ZW50KFt0aGlzLnJvd0lEXSk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICB0aGlzLnNlbGVjdGlvblNlcnZpY2UuZGVzZWxlY3RSb3dzV2l0aE5vRXZlbnQoW3RoaXMucm93SURdKTtcbiAgICAgICAgfVxuICAgICAgICB0aGlzLmdyaWQuY2RyLm1hcmtGb3JDaGVjaygpO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIEBoaWRkZW5cbiAgICAgKi9cbiAgICBnZXQgY29sdW1ucygpOiBJZ3hDb2x1bW5Db21wb25lbnRbXSB7XG4gICAgICAgIHJldHVybiB0aGlzLmdyaWQudmlzaWJsZUNvbHVtbnM7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogQGhpZGRlblxuICAgICAqIEBpbnRlcm5hbFxuICAgICAqL1xuICAgIGdldCB2aWV3SW5kZXgoKTogbnVtYmVyIHtcbiAgICAgICAgaWYgKCh0aGlzLmdyaWQgYXMgYW55KS5ncm91cGluZ0V4cHJlc3Npb25zLmxlbmd0aCkge1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMuZ3JpZC5maWx0ZXJlZFNvcnRlZERhdGEuaW5kZXhPZih0aGlzLnJvd0RhdGEpO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiB0aGlzLmluZGV4ICsgdGhpcy5ncmlkLnBhZ2UgKiB0aGlzLmdyaWQucGVyUGFnZTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBAaGlkZGVuXG4gICAgICovXG4gICAgZ2V0IHBpbm5lZENvbHVtbnMoKTogSWd4Q29sdW1uQ29tcG9uZW50W10ge1xuICAgICAgICByZXR1cm4gdGhpcy5ncmlkLnBpbm5lZENvbHVtbnM7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogQGhpZGRlblxuICAgICAqL1xuICAgIHB1YmxpYyBnZXQgaXNSb290KCk6IGJvb2xlYW4ge1xuICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBAaGlkZGVuXG4gICAgICovXG4gICAgcHVibGljIGdldCBoYXNDaGlsZHJlbigpOiBib29sZWFuIHtcbiAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIEBoaWRkZW5cbiAgICAgKi9cbiAgICBnZXQgdW5waW5uZWRDb2x1bW5zKCk6IElneENvbHVtbkNvbXBvbmVudFtdIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuZ3JpZC51bnBpbm5lZENvbHVtbnM7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogQGhpZGRlblxuICAgICAqL1xuICAgIHB1YmxpYyBnZXQgc2hvd1Jvd1NlbGVjdG9ycygpOiBib29sZWFuIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuZ3JpZC5zaG93Um93U2VsZWN0b3JzO1xuICAgIH1cblxuICAgIC8qKiBAaGlkZGVuICovXG4gICAgcHVibGljIGdldCBkaXJ0eSgpOiBib29sZWFuIHtcbiAgICAgICAgY29uc3Qgcm93ID0gdGhpcy5ncmlkLnRyYW5zYWN0aW9ucy5nZXRTdGF0ZSh0aGlzLnJvd0lEKTtcbiAgICAgICAgaWYgKHJvdykge1xuICAgICAgICAgICAgcmV0dXJuIHJvdy50eXBlID09PSBUcmFuc2FjdGlvblR5cGUuQUREIHx8IHJvdy50eXBlID09PSBUcmFuc2FjdGlvblR5cGUuVVBEQVRFO1xuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIEBoaWRkZW5cbiAgICAgKi9cbiAgICBwdWJsaWMgZ2V0IHJvd0RyYWdnYWJsZSgpOiBib29sZWFuIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuZ3JpZC5yb3dEcmFnZ2FibGU7XG4gICAgfVxuXG4gICAgLyoqIEBoaWRkZW4gKi9cbiAgICBwdWJsaWMgZ2V0IGFkZGVkKCk6IGJvb2xlYW4ge1xuICAgICAgICBjb25zdCByb3cgPSB0aGlzLmdyaWQudHJhbnNhY3Rpb25zLmdldFN0YXRlKHRoaXMucm93SUQpO1xuICAgICAgICBpZiAocm93KSB7XG4gICAgICAgICAgICByZXR1cm4gcm93LnR5cGUgPT09IFRyYW5zYWN0aW9uVHlwZS5BREQ7XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgfVxuXG4gICAgLyoqIEBoaWRkZW4gKi9cbiAgICBwdWJsaWMgZ2V0IGRlbGV0ZWQoKTogYm9vbGVhbiB7XG4gICAgICAgIHJldHVybiB0aGlzLmdyaWRBUEkucm93X2RlbGV0ZWRfdHJhbnNhY3Rpb24odGhpcy5yb3dJRCk7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogQGhpZGRlblxuICAgICAqL1xuICAgIHB1YmxpYyBnZXQgZHJhZ2dpbmcoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLmdyaWQuZHJhZ1Jvd0lEID09PSB0aGlzLnJvd0lEO1xuICAgIH1cblxuICAgIC8vIFRPRE86IFJlZmFjdG9yXG4gICAgcHVibGljIGdldCBpbkVkaXRNb2RlKCk6IGJvb2xlYW4ge1xuICAgICAgICBpZiAodGhpcy5ncmlkLnJvd0VkaXRhYmxlKSB7XG4gICAgICAgICAgICBjb25zdCBlZGl0Um93U3RhdGUgPSB0aGlzLmdyaWQuY3J1ZFNlcnZpY2Uucm93O1xuICAgICAgICAgICAgcmV0dXJuIChlZGl0Um93U3RhdGUgJiYgZWRpdFJvd1N0YXRlLmlkID09PSB0aGlzLnJvd0lEKSB8fCBmYWxzZTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIC8qKlxuICAgICAqIEdldCBhIHJlZmVyZW5jZSB0byB0aGUgZ3JpZCB0aGF0IGNvbnRhaW5zIHRoZSBzZWxlY3RlZCByb3cuXG4gICAgICpcbiAgICAgKiBgYGB0eXBlc2NyaXB0XG4gICAgICogaGFuZGxlUm93U2VsZWN0aW9uKGV2ZW50KSB7XG4gICAgICogIC8vIHRoZSBncmlkIG9uIHdoaWNoIHRoZSByb3dTZWxlY3RlZCBldmVudCB3YXMgdHJpZ2dlcmVkXG4gICAgICogIGNvbnN0IGdyaWQgPSBldmVudC5yb3cuZ3JpZDtcbiAgICAgKiB9XG4gICAgICogYGBgXG4gICAgICpcbiAgICAgKiBgYGBodG1sXG4gICAgICogIDxpZ3gtZ3JpZFxuICAgICAqICAgIFtkYXRhXT1cImRhdGFcIlxuICAgICAqICAgIChyb3dTZWxlY3RlZCk9XCJoYW5kbGVSb3dTZWxlY3Rpb24oJGV2ZW50KVwiPlxuICAgICAqICA8L2lneC1ncmlkPlxuICAgICAqIGBgYFxuICAgICAqL1xuICAgIGdldCBncmlkKCk6IFQge1xuICAgICAgICByZXR1cm4gdGhpcy5ncmlkQVBJLmdyaWQ7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogR2V0cyB0aGUgSUQgb2YgdGhlIHJvdy5cbiAgICAgKiBBIHJvdyBpbiB0aGUgZ3JpZCBpcyBpZGVudGlmaWVkIGVpdGhlciBieTpcbiAgICAgKiAtIHByaW1hcnlLZXkgZGF0YSB2YWx1ZSxcbiAgICAgKiAtIHRoZSB3aG9sZSByb3dEYXRhLCBpZiB0aGUgcHJpbWFyeUtleSBpcyBvbWl0dGVkLlxuICAgICAqXG4gICAgICogYGBgdHlwZXNjcmlwdFxuICAgICAqIGxldCByb3dJRCA9IHRoaXMuZ3JpZC5zZWxlY3RlZFJvd3NbMl0ucm93SUQ7XG4gICAgICogYGBgXG4gICAgICovXG4gICAgcHVibGljIGdldCByb3dJRCgpIHtcbiAgICAgICAgY29uc3QgcHJpbWFyeUtleSA9IHRoaXMuZ3JpZC5wcmltYXJ5S2V5O1xuICAgICAgICByZXR1cm4gcHJpbWFyeUtleSA/IHRoaXMuX3Jvd0RhdGFbcHJpbWFyeUtleV0gOiB0aGlzLl9yb3dEYXRhO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIFRoZSBuYXRpdmUgRE9NIGVsZW1lbnQgcmVwcmVzZW50aW5nIHRoZSByb3cuIENvdWxkIGJlIG51bGwgaW4gY2VydGFpbiBlbnZpcm9ubWVudHMuXG4gICAgICpcbiAgICAgKiBgYGB0eXBlc2NyaXB0XG4gICAgICogLy8gZ2V0IHRoZSBuYXRpdmVFbGVtZW50IG9mIHRoZSBzZWNvbmQgc2VsZWN0ZWQgcm93XG4gICAgICogbGV0IHNlbGVjdGVkUm93TmF0aXZlRWxlbWVudCA9IHRoaXMuZ3JpZC5zZWxlY3RlZFJvd3NbMV0ubmF0aXZlRWxlbWVudDtcbiAgICAgKiBgYGBcbiAgICAgKi9cbiAgICBnZXQgbmF0aXZlRWxlbWVudCgpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuZWxlbWVudC5uYXRpdmVFbGVtZW50O1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIEBoaWRkZW5cbiAgICAgKi9cbiAgICBwdWJsaWMgZm9jdXNlZCA9IGZhbHNlO1xuXG4gICAgLyoqXG4gICAgICogQGhpZGRlblxuICAgICAqIEBpbnRlcm5hbFxuICAgICAqL1xuICAgIHB1YmxpYyBkZWZhdWx0Q3NzQ2xhc3MgPSAnaWd4LWdyaWRfX3RyJztcblxuICAgIC8qKlxuICAgICAqIEBoaWRkZW5cbiAgICAgKi9cbiAgICBwdWJsaWMgdHJpZ2dlckFkZEFuaW1hdGlvbkNsYXNzID0gZmFsc2U7XG5cbiAgICBwcm90ZWN0ZWQgZGVzdHJveSQgPSBuZXcgU3ViamVjdDxhbnk+KCk7XG4gICAgcHJvdGVjdGVkIF9yb3dEYXRhOiBhbnk7XG4gICAgcHJvdGVjdGVkIF9hZGRSb3c6IGJvb2xlYW47XG5cbiAgICBjb25zdHJ1Y3RvcihcbiAgICAgICAgcHVibGljIGdyaWRBUEk6IEdyaWRCYXNlQVBJU2VydmljZTxUPixcbiAgICAgICAgcHVibGljIHNlbGVjdGlvblNlcnZpY2U6IElneEdyaWRTZWxlY3Rpb25TZXJ2aWNlLFxuICAgICAgICBwdWJsaWMgZWxlbWVudDogRWxlbWVudFJlZjxIVE1MRWxlbWVudD4sXG4gICAgICAgIHB1YmxpYyBjZHI6IENoYW5nZURldGVjdG9yUmVmKSB7IH1cblxuICAgIC8qKlxuICAgICAqIEBoaWRkZW5cbiAgICAgKiBAaW50ZXJuYWxcbiAgICAgKi9cbiAgICBASG9zdExpc3RlbmVyKCdjbGljaycsIFsnJGV2ZW50J10pXG4gICAgcHVibGljIG9uQ2xpY2soZXZlbnQ6IE1vdXNlRXZlbnQpIHtcbiAgICAgICAgaWYgKHRoaXMuZ3JpZC5yb3dTZWxlY3Rpb24gPT09ICdub25lJyB8fCB0aGlzLmRlbGV0ZWQgfHwgIXRoaXMuZ3JpZC5zZWxlY3RSb3dPbkNsaWNrKSB7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgICAgaWYgKGV2ZW50LnNoaWZ0S2V5ICYmIHRoaXMuZ3JpZC5pc011bHRpUm93U2VsZWN0aW9uRW5hYmxlZCkge1xuICAgICAgICAgICAgdGhpcy5zZWxlY3Rpb25TZXJ2aWNlLnNlbGVjdE11bHRpcGxlUm93cyh0aGlzLnJvd0lELCB0aGlzLnJvd0RhdGEsIGV2ZW50KTtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuXG4gICAgICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBuby1iaXR3aXNlXG4gICAgICAgIGNvbnN0IGNsZWFyU2VsZWN0aW9uID0gISgrZXZlbnQuY3RybEtleSBeICtldmVudC5tZXRhS2V5KTtcbiAgICAgICAgdGhpcy5zZWxlY3Rpb25TZXJ2aWNlLnNlbGVjdFJvd0J5SWQodGhpcy5yb3dJRCwgY2xlYXJTZWxlY3Rpb24sIGV2ZW50KTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBAaGlkZGVuXG4gICAgICogQGludGVybmFsXG4gICAgICovXG4gICAgQEhvc3RMaXN0ZW5lcignbW91c2VlbnRlcicpXG4gICAgcHVibGljIHNob3dBY3Rpb25TdHJpcCgpIHtcbiAgICAgICAgaWYgKHRoaXMuZ3JpZC5hY3Rpb25TdHJpcCkge1xuICAgICAgICAgICAgdGhpcy5ncmlkLmFjdGlvblN0cmlwLnNob3codGhpcyk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBwdWJsaWMgbmdBZnRlclZpZXdJbml0KCkge1xuICAgICAgICAvLyBJZiB0aGUgdGVtcGxhdGUgb2YgdGhlIHJvdyBjaGFuZ2VzLCB0aGUgZm9yT2YgaW4gaXQgaXMgcmVjcmVhdGVkIGFuZCBpcyBub3QgZGV0ZWN0ZWQgYnkgdGhlIGdyaWQgYW5kIHJvd3MgY2FuJ3QgYmUgc2Nyb2xsZWQuXG4gICAgICAgIHRoaXMuX3ZpcnREaXJSb3cuY2hhbmdlcy5waXBlKHRha2VVbnRpbCh0aGlzLmRlc3Ryb3kkKSkuc3Vic2NyaWJlKCgpID0+IHRoaXMuZ3JpZC5yZXNldEhvcml6b250YWxGb3JPZnMoKSk7XG4gICAgfVxuXG4gICAgcHVibGljIG5nT25EZXN0cm95KCkge1xuICAgICAgICB0aGlzLmRlc3Ryb3kkLm5leHQodHJ1ZSk7XG4gICAgICAgIHRoaXMuZGVzdHJveSQuY29tcGxldGUoKTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBAaGlkZGVuXG4gICAgICovXG4gICAgcHVibGljIG9uUm93U2VsZWN0b3JDbGljayhldmVudCkge1xuICAgICAgICBldmVudC5zdG9wUHJvcGFnYXRpb24oKTtcbiAgICAgICAgaWYgKGV2ZW50LnNoaWZ0S2V5ICYmIHRoaXMuZ3JpZC5pc011bHRpUm93U2VsZWN0aW9uRW5hYmxlZCkge1xuICAgICAgICAgICAgdGhpcy5zZWxlY3Rpb25TZXJ2aWNlLnNlbGVjdE11bHRpcGxlUm93cyh0aGlzLnJvd0lELCB0aGlzLnJvd0RhdGEsIGV2ZW50KTtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgICAgICBpZiAodGhpcy5zZWxlY3RlZCkge1xuICAgICAgICAgICAgdGhpcy5zZWxlY3Rpb25TZXJ2aWNlLmRlc2VsZWN0Um93KHRoaXMucm93SUQsIGV2ZW50KTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHRoaXMuc2VsZWN0aW9uU2VydmljZS5zZWxlY3RSb3dCeUlkKHRoaXMucm93SUQsIGZhbHNlLCBldmVudCk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBVcGRhdGVzIHRoZSBzcGVjaWZpZWQgcm93IG9iamVjdCBhbmQgdGhlIGRhdGEgc291cmNlIHJlY29yZCB3aXRoIHRoZSBwYXNzZWQgdmFsdWUuXG4gICAgICpcbiAgICAgKiBgYGB0eXBlc2NyaXB0XG4gICAgICogLy8gdXBkYXRlIHRoZSBzZWNvbmQgc2VsZWN0ZWQgcm93J3MgdmFsdWVcbiAgICAgKiBsZXQgbmV3VmFsdWUgPSBcIkFwcGxlXCI7XG4gICAgICogdGhpcy5ncmlkLnNlbGVjdGVkUm93c1sxXS51cGRhdGUobmV3VmFsdWUpO1xuICAgICAqIGBgYFxuICAgICAqL1xuICAgIHB1YmxpYyB1cGRhdGUodmFsdWU6IGFueSkge1xuICAgICAgICBjb25zdCBjcnVkU2VydmljZSA9IHRoaXMuZ3JpZC5jcnVkU2VydmljZTtcbiAgICAgICAgaWYgKGNydWRTZXJ2aWNlLmNlbGxJbkVkaXRNb2RlICYmIGNydWRTZXJ2aWNlLmNlbGwuaWQucm93SUQgPT09IHRoaXMucm93SUQpIHtcbiAgICAgICAgICAgIHRoaXMuZ3JpZC50cmFuc2FjdGlvbnMuZW5kUGVuZGluZyhmYWxzZSk7XG4gICAgICAgIH1cbiAgICAgICAgY29uc3Qgcm93ID0gbmV3IElneEVkaXRSb3codGhpcy5yb3dJRCwgdGhpcy5pbmRleCwgdGhpcy5yb3dEYXRhLCB0aGlzLmdyaWQpO1xuICAgICAgICB0aGlzLmdyaWRBUEkudXBkYXRlX3Jvdyhyb3csIHZhbHVlKTtcbiAgICAgICAgdGhpcy5jZHIubWFya0ZvckNoZWNrKCk7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogUmVtb3ZlcyB0aGUgc3BlY2lmaWVkIHJvdyBmcm9tIHRoZSBncmlkJ3MgZGF0YSBzb3VyY2UuXG4gICAgICogVGhpcyBtZXRob2QgZW1pdHMgYHJvd0RlbGV0ZWRgIGV2ZW50LlxuICAgICAqXG4gICAgICogYGBgdHlwZXNjcmlwdFxuICAgICAqIC8vIGRlbGV0ZSB0aGUgdGhpcmQgc2VsZWN0ZWQgcm93IGZyb20gdGhlIGdyaWRcbiAgICAgKiB0aGlzLmdyaWQuc2VsZWN0ZWRSb3dzWzJdLmRlbGV0ZSgpO1xuICAgICAqIGBgYFxuICAgICAqL1xuICAgIHB1YmxpYyBkZWxldGUoKSB7XG4gICAgICAgIHRoaXMuZ3JpZC5kZWxldGVSb3dCeUlkKHRoaXMucm93SUQpO1xuICAgIH1cblxuICAgIHB1YmxpYyBpc0NlbGxBY3RpdmUodmlzaWJsZUNvbHVtbkluZGV4KSB7XG4gICAgICAgIGNvbnN0IG5vZGUgPSB0aGlzLmdyaWQubmF2aWdhdGlvbi5hY3RpdmVOb2RlO1xuICAgICAgICByZXR1cm4gbm9kZSA/IG5vZGUucm93ID09PSB0aGlzLmluZGV4ICYmIG5vZGUuY29sdW1uID09PSB2aXNpYmxlQ29sdW1uSW5kZXggOiBmYWxzZTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBQaW5zIHRoZSBzcGVjaWZpZWQgcm93LlxuICAgICAqIFRoaXMgbWV0aG9kIGVtaXRzIGByb3dQaW5uaW5nYCBldmVudC5cbiAgICAgKlxuICAgICAqIGBgYHR5cGVzY3JpcHRcbiAgICAgKiAvLyBwaW4gdGhlIHNlbGVjdGVkIHJvdyBmcm9tIHRoZSBncmlkXG4gICAgICogdGhpcy5ncmlkLnNlbGVjdGVkUm93c1swXS5waW4oKTtcbiAgICAgKiBgYGBcbiAgICAgKi9cbiAgICBwdWJsaWMgcGluKCkge1xuICAgICAgICByZXR1cm4gdGhpcy5ncmlkLnBpblJvdyh0aGlzLnJvd0lEKTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBVbnBpbnMgdGhlIHNwZWNpZmllZCByb3cuXG4gICAgICogVGhpcyBtZXRob2QgZW1pdHMgYHJvd1Bpbm5pbmdgIGV2ZW50LlxuICAgICAqXG4gICAgICogYGBgdHlwZXNjcmlwdFxuICAgICAqIC8vIHVucGluIHRoZSBzZWxlY3RlZCByb3cgZnJvbSB0aGUgZ3JpZFxuICAgICAqIHRoaXMuZ3JpZC5zZWxlY3RlZFJvd3NbMF0udW5waW4oKTtcbiAgICAgKiBgYGBcbiAgICAgKi9cbiAgICBwdWJsaWMgdW5waW4oKSB7XG4gICAgICAgIHJldHVybiB0aGlzLmdyaWQudW5waW5Sb3codGhpcy5yb3dJRCk7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogQGhpZGRlblxuICAgICAqL1xuICAgIGdldCByb3dDaGVja2JveEFyaWFMYWJlbCgpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuZ3JpZC5wcmltYXJ5S2V5ID9cbiAgICAgICAgICAgIHRoaXMuc2VsZWN0ZWQgPyAnRGVzZWxlY3Qgcm93IHdpdGgga2V5ICcgKyB0aGlzLnJvd0lEIDogJ1NlbGVjdCByb3cgd2l0aCBrZXkgJyArIHRoaXMucm93SUQgOlxuICAgICAgICAgICAgdGhpcy5zZWxlY3RlZCA/ICdEZXNlbGVjdCByb3cnIDogJ1NlbGVjdCByb3cnO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIEBoaWRkZW5cbiAgICAgKi9cbiAgICBwdWJsaWMgbmdEb0NoZWNrKCkge1xuICAgICAgICB0aGlzLmNkci5tYXJrRm9yQ2hlY2soKTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBAaGlkZGVuXG4gICAgICovXG4gICAgcHVibGljIHNob3VsZERpc3BsYXlQaW5uZWRDaGlwKHZpc2libGVDb2x1bW5JbmRleDogbnVtYmVyKTogYm9vbGVhbiB7XG4gICAgICAgIHJldHVybiB0aGlzLnBpbm5lZCAmJiB0aGlzLmRpc2FibGVkICYmIHZpc2libGVDb2x1bW5JbmRleCA9PT0gMDtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBTcGF3bnMgdGhlIGFkZCByb3cgVUkgZm9yIHRoZSBzcGVjaWZpYyByb3cuXG4gICAgICpcbiAgICAgKiBAZXhhbXBsZVxuICAgICAqIGBgYHR5cGVzY3JpcHRcbiAgICAgKiBjb25zdCByb3cgPSB0aGlzLmdyaWQxLmdldFJvd0J5SW5kZXgoMSk7XG4gICAgICogcm93LmJlZ2luQWRkUm93KCk7XG4gICAgICogYGBgXG4gICAgICovXG4gICAgcHVibGljIGJlZ2luQWRkUm93KCkge1xuICAgICAgICB0aGlzLmdyaWQuY3J1ZFNlcnZpY2UuZW50ZXJBZGRSb3dNb2RlKHRoaXMpO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIEBoaWRkZW5cbiAgICAgKi9cbiAgICBwdWJsaWMgdHJpZ2dlckFkZEFuaW1hdGlvbigpIHtcbiAgICAgICAgdGhpcy50cmlnZ2VyQWRkQW5pbWF0aW9uQ2xhc3MgPSB0cnVlO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIEBoaWRkZW5cbiAgICAgKi9cbiAgICBwdWJsaWMgYW5pbWF0aW9uRW5kSGFuZGxlcigpIHtcbiAgICAgICAgdGhpcy50cmlnZ2VyQWRkQW5pbWF0aW9uQ2xhc3MgPSBmYWxzZTtcbiAgICAgICAgdGhpcy5hZGRBbmltYXRpb25FbmQuZW1pdCh0aGlzKTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBAaGlkZGVuXG4gICAgICovXG4gICAgcHVibGljIGdldCByZXNvbHZlRHJhZ0luZGljYXRvckNsYXNzZXMoKTogc3RyaW5nIHtcbiAgICAgICAgY29uc3QgZGVmYXVsdERyYWdJbmRpY2F0b3JDc3NDbGFzcyA9ICdpZ3gtZ3JpZF9fZHJhZy1pbmRpY2F0b3InO1xuICAgICAgICBjb25zdCBkcmFnSW5kaWNhdG9yT2ZmID0gdGhpcy5ncmlkLnJvd0RyYWdnaW5nICYmICF0aGlzLmRyYWdnaW5nID8gJ2lneC1ncmlkX19kcmFnLWluZGljYXRvci0tb2ZmJyA6ICcnO1xuICAgICAgICByZXR1cm4gYCR7ZGVmYXVsdERyYWdJbmRpY2F0b3JDc3NDbGFzc30gJHtkcmFnSW5kaWNhdG9yT2ZmfWA7XG4gICAgfVxufVxuIl19
490
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicm93LmRpcmVjdGl2ZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL2lnbml0ZXVpLWFuZ3VsYXIvc3JjL2xpYi9ncmlkcy9yb3cuZGlyZWN0aXZlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFDSCxpQkFBaUIsRUFFakIsVUFBVSxFQUNWLFVBQVUsRUFDVixXQUFXLEVBQ1gsWUFBWSxFQUNaLEtBQUssRUFDTCxTQUFTLEVBQ1QsU0FBUyxFQUNULFlBQVksRUFDWixTQUFTLEVBQ1QsTUFBTSxFQUNOLFlBQVksRUFHZixNQUFNLGVBQWUsQ0FBQztBQUN2QixPQUFPLEVBQUUsb0JBQW9CLEVBQUUsTUFBTSxnQ0FBZ0MsQ0FBQztBQUN0RSxPQUFPLEVBQUUscUJBQXFCLEVBQUUsTUFBTSx1Q0FBdUMsQ0FBQztBQUM5RSxPQUFPLEVBQUUsa0JBQWtCLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFFbkQsT0FBTyxFQUFFLGVBQWUsRUFBRSxNQUFNLHFDQUFxQyxDQUFDO0FBRXRFLE9BQU8sRUFBRSx1QkFBdUIsRUFBRSxNQUFNLCtCQUErQixDQUFDO0FBQ3hFLE9BQU8sRUFBRSxTQUFTLEVBQUUsVUFBVSxFQUFFLE1BQU0sdUJBQXVCLENBQUM7QUFFOUQsT0FBTyxTQUFTLE1BQU0sa0JBQWtCLENBQUM7QUFDekMsT0FBTyxFQUFFLE9BQU8sRUFBRSxNQUFNLE1BQU0sQ0FBQztBQUMvQixPQUFPLEVBQUUsU0FBUyxFQUFFLE1BQU0sZ0JBQWdCLENBQUM7QUFLM0MsTUFBTSxPQUFPLGVBQWU7SUErV3hCLFlBQ1csT0FBOEIsRUFDOUIsZ0JBQXlDLEVBQ3pDLE9BQWdDLEVBQ2hDLEdBQXNCO1FBSHRCLFlBQU8sR0FBUCxPQUFPLENBQXVCO1FBQzlCLHFCQUFnQixHQUFoQixnQkFBZ0IsQ0FBeUI7UUFDekMsWUFBTyxHQUFQLE9BQU8sQ0FBeUI7UUFDaEMsUUFBRyxHQUFILEdBQUcsQ0FBbUI7UUFs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QW1CaEMsWUFBWSxTQUFDLFlBQVkiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQge1xuICAgIENoYW5nZURldGVjdG9yUmVmLFxuICAgIERvQ2hlY2ssXG4gICAgRWxlbWVudFJlZixcbiAgICBmb3J3YXJkUmVmLFxuICAgIEhvc3RCaW5kaW5nLFxuICAgIEhvc3RMaXN0ZW5lcixcbiAgICBJbnB1dCxcbiAgICBRdWVyeUxpc3QsXG4gICAgVmlld0NoaWxkLFxuICAgIFZpZXdDaGlsZHJlbixcbiAgICBEaXJlY3RpdmUsXG4gICAgT3V0cHV0LFxuICAgIEV2ZW50RW1pdHRlcixcbiAgICBBZnRlclZpZXdJbml0LFxuICAgIE9uRGVzdHJveVxufSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IElneENoZWNrYm94Q29tcG9uZW50IH0gZnJvbSAnLi4vY2hlY2tib3gvY2hlY2tib3guY29tcG9uZW50JztcbmltcG9ydCB7IElneEdyaWRGb3JPZkRpcmVjdGl2ZSB9IGZyb20gJy4uL2RpcmVjdGl2ZXMvZm9yLW9mL2Zvcl9vZi5kaXJlY3RpdmUnO1xuaW1wb3J0IHsgR3JpZEJhc2VBUElTZXJ2aWNlIH0gZnJvbSAnLi9hcGkuc2VydmljZSc7XG5pbXBvcnQgeyBJZ3hDb2x1bW5Db21wb25lbnQgfSBmcm9tICcuL2NvbHVtbnMvY29sdW1uLmNvbXBvbmVudCc7XG5pbXBvcnQgeyBUcmFuc2FjdGlvblR5cGUgfSBmcm9tICcuLi9zZXJ2aWNlcy90cmFuc2FjdGlvbi90cmFuc2FjdGlvbic7XG5pbXBvcnQgeyBJZ3hHcmlkQmFzZURpcmVjdGl2ZSB9IGZyb20gJy4vZ3JpZC1iYXNlLmRpcmVjdGl2ZSc7XG5pbXBvcnQgeyBJZ3hHcmlkU2VsZWN0aW9uU2VydmljZSB9IGZyb20gJy4vc2VsZWN0aW9uL3NlbGVjdGlvbi5zZXJ2aWNlJztcbmltcG9ydCB7IElneEFkZFJvdywgSWd4RWRpdFJvdyB9IGZyb20gJy4vY29tbW9uL2NydWQuc2VydmljZSc7XG5pbXBvcnQgeyBHcmlkVHlwZSB9IGZyb20gJy4vY29tbW9uL2dyaWQuaW50ZXJmYWNlJztcbmltcG9ydCBtZXJnZVdpdGggZnJvbSAnbG9kYXNoLm1lcmdld2l0aCc7XG5pbXBvcnQgeyBTdWJqZWN0IH0gZnJvbSAncnhqcyc7XG5pbXBvcnQgeyB0YWtlVW50aWwgfSBmcm9tICdyeGpzL29wZXJhdG9ycyc7XG5cbkBEaXJlY3RpdmUoe1xuICAgIHNlbGVjdG9yOiAnW2lneFJvd0Jhc2VDb21wb25lbnRdJ1xufSlcbmV4cG9ydCBjbGFzcyBJZ3hSb3dEaXJlY3RpdmU8VCBleHRlbmRzIElneEdyaWRCYXNlRGlyZWN0aXZlICYgR3JpZFR5cGU+IGltcGxlbWVudHMgRG9DaGVjaywgQWZ0ZXJWaWV3SW5pdCwgT25EZXN0cm95IHtcbiAgICAvKipcbiAgICAgKiBAaGlkZGVuXG4gICAgICovXG4gICAgQE91dHB1dCgpXG4gICAgYWRkQW5pbWF0aW9uRW5kID0gbmV3IEV2ZW50RW1pdHRlcjxJZ3hSb3dEaXJlY3RpdmU8VD4+KCk7XG5cbiAgICAvKipcbiAgICAgKiBAaGlkZGVuXG4gICAgICovXG4gICAgQEhvc3RCaW5kaW5nKCdhdHRyLnJvbGUnKVxuICAgIHB1YmxpYyByb2xlID0gJ3Jvdyc7XG5cbiAgICAvKipcbiAgICAgKiAgVGhlIGRhdGEgcGFzc2VkIHRvIHRoZSByb3cgY29tcG9uZW50LlxuICAgICAqXG4gICAgICogYGBgdHlwZXNjcmlwdFxuICAgICAqIC8vIGdldCB0aGUgcm93IGRhdGEgZm9yIHRoZSBmaXJzdCBzZWxlY3RlZCByb3dcbiAgICAgKiBsZXQgc2VsZWN0ZWRSb3dEYXRhID0gdGhpcy5ncmlkLnNlbGVjdGVkUm93c1swXS5yb3dEYXRhO1xuICAgICAqIGBgYFxuICAgICAqL1xuICAgIEBJbnB1dCgpXG4gICAgcHVibGljIGdldCByb3dEYXRhKCk6IGFueSB7XG4gICAgICAgIGlmICh0aGlzLmluRWRpdE1vZGUpIHtcbiAgICAgICAgICAgIHJldHVybiBtZXJnZVdpdGgodGhpcy5ncmlkLmRhdGFDbG9uZVN0cmF0ZWd5LmNsb25lKHRoaXMuX3Jvd0RhdGEpLCB0aGlzLmdyaWQudHJhbnNhY3Rpb25zLmdldEFnZ3JlZ2F0ZWRWYWx1ZSh0aGlzLnJvd0lELCBmYWxzZSksXG4gICAgICAgICAgICAgICAgKG9ialZhbHVlLCBzcmNWYWx1ZSkgPT4ge1xuICAgICAgICAgICAgICAgICAgICBpZiAoQXJyYXkuaXNBcnJheShzcmNWYWx1ZSkpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBvYmpWYWx1ZSA9IHNyY1ZhbHVlO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfSk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHRoaXMuX3Jvd0RhdGE7XG4gICAgfVxuXG4gICAgcHVibGljIHNldCByb3dEYXRhKHY6IGFueSkge1xuICAgICAgICB0aGlzLl9yb3dEYXRhID0gdjtcbiAgICB9XG4gICAgLyoqXG4gICAgICogVGhlIGluZGV4IG9mIHRoZSByb3cuXG4gICAgICpcbiAgICAgKiBgYGB0eXBlc2NyaXB0XG4gICAgICogLy8gZ2V0IHRoZSBpbmRleCBvZiB0aGUgc2Vjb25kIHNlbGVjdGVkIHJvd1xuICAgICAqIGxldCBzZWxlY3RlZFJvd0luZGV4ID0gdGhpcy5ncmlkLnNlbGVjdGVkUm93c1sxXS5pbmRleDtcbiAgICAgKiBgYGBcbiAgICAgKi9cbiAgICBASW5wdXQoKVxuICAgIHB1YmxpYyBpbmRleDogbnVtYmVyO1xuXG4gICAgLyoqXG4gICAgICogU2V0cyB3aGV0aGVyIHRoaXMgc3BlY2lmaWMgcm93IGhhcyBkaXNhYmxlZCBmdW5jdGlvbmFsaXR5IGZvciBlZGl0aW5nIGFuZCByb3cgc2VsZWN0aW9uLlxuICAgICAqIERlZmF1bHQgdmFsdWUgaXMgYGZhbHNlYC5cbiAgICAgKiBgYGB0eXBlc2NyaXB0XG4gICAgICogdGhpcy5ncmlkLnNlbGVjdGVkUm93c1swXS5waW5uZWQgPSB0cnVlO1xuICAgICAqIGBgYFxuICAgICAqL1xuICAgIEBJbnB1dCgpXG4gICAgQEhvc3RCaW5kaW5nKCdhdHRyLmFyaWEtZGlzYWJsZWQnKVxuICAgIEBIb3N0QmluZGluZygnY2xhc3MuaWd4LWdyaWRfX3RyLS1kaXNhYmxlZCcpXG4gICAgcHVibGljIGRpc2FibGVkID0gZmFsc2U7XG5cbiAgICAvKipcbiAgICAgKiBTZXRzIHdoZXRoZXIgdGhlIHJvdyBpcyBwaW5uZWQuXG4gICAgICogRGVmYXVsdCB2YWx1ZSBpcyBgZmFsc2VgLlxuICAgICAqIGBgYHR5cGVzY3JpcHRcbiAgICAgKiB0aGlzLmdyaWQuc2VsZWN0ZWRSb3dzWzBdLnBpbm5lZCA9IHRydWU7XG4gICAgICogYGBgXG4gICAgICovXG4gICAgcHVibGljIHNldCBwaW5uZWQodmFsdWU6IGJvb2xlYW4pIHtcbiAgICAgICAgaWYgKHZhbHVlKSB7XG4gICAgICAgICAgICB0aGlzLmdyaWQucGluUm93KHRoaXMucm93SUQpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgdGhpcy5ncmlkLnVucGluUm93KHRoaXMucm93SUQpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogR2V0cyB3aGV0aGVyIHRoZSByb3cgaXMgcGlubmVkLlxuICAgICAqIGBgYHR5cGVzY3JpcHRcbiAgICAgKiBsZXQgaXNQaW5uZWQgPSByb3cucGlubmVkO1xuICAgICAqIGBgYFxuICAgICAqL1xuICAgIHB1YmxpYyBnZXQgcGlubmVkKCk6IGJvb2xlYW4ge1xuICAgICAgICByZXR1cm4gdGhpcy5ncmlkLmlzUmVjb3JkUGlubmVkKHRoaXMucm93RGF0YSk7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogR2V0cyB0aGUgZXhwYW5kZWQgc3RhdGUgb2YgdGhlIHJvdy5cbiAgICAgKiBgYGB0eXBlc2NyaXB0XG4gICAgICogbGV0IGlzRXhwYW5kZWQgPSByb3cuZXhwYW5kZWQ7XG4gICAgICogYGBgXG4gICAgICovXG4gICAgcHVibGljIGdldCBleHBhbmRlZCgpOiBib29sZWFuIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuZ3JpZEFQSS5nZXRfcm93X2V4cGFuc2lvbl9zdGF0ZSh0aGlzLnJvd0RhdGEpO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIEV4cGFuZHMvY29sbGFwc2VzIHRoZSBjdXJyZW50IHJvdy5cbiAgICAgKlxuICAgICAqIGBgYHR5cGVzY3JpcHRcbiAgICAgKiB0aGlzLmdyaWQuc2VsZWN0ZWRSb3dzWzJdLmV4cGFuZGVkID0gdHJ1ZTtcbiAgICAgKiBgYGBcbiAgICAgKi9cbiAgICBwdWJsaWMgc2V0IGV4cGFuZGVkKHZhbDogYm9vbGVhbikge1xuICAgICAgICB0aGlzLmdyaWRBUEkuc2V0X3Jvd19leHBhbnNpb25fc3RhdGUodGhpcy5yb3dJRCwgdmFsKTtcbiAgICB9XG5cbiAgICBwdWJsaWMgZ2V0IGFkZFJvd1VJKCk6IGFueSB7XG4gICAgICAgIHJldHVybiAhIXRoaXMuZ3JpZC5jcnVkU2VydmljZS5yb3cgJiZcbiAgICAgICAgICAgIHRoaXMuZ3JpZC5jcnVkU2VydmljZS5yb3cuZ2V0Q2xhc3NOYW1lKCkgPT09IElneEFkZFJvdy5uYW1lICYmXG4gICAgICAgICAgICB0aGlzLmdyaWQuY3J1ZFNlcnZpY2Uucm93LmlkID09PSB0aGlzLnJvd0lEO1xuICAgIH1cblxuICAgIEBIb3N0QmluZGluZygnc3R5bGUubWluLWhlaWdodC5weCcpXG4gICAgZ2V0IHJvd0hlaWdodCgpIHtcbiAgICAgICAgbGV0IGhlaWdodCA9IHRoaXMuZ3JpZC5yb3dIZWlnaHQgfHwgMzI7XG4gICAgICAgIGlmICh0aGlzLmdyaWQuaGFzQ29sdW1uTGF5b3V0cykge1xuICAgICAgICAgICAgY29uc3QgbWF4Um93U3BhbiA9IHRoaXMuZ3JpZC5tdWx0aVJvd0xheW91dFJvd1NpemU7XG4gICAgICAgICAgICBoZWlnaHQgPSBoZWlnaHQgKiBtYXhSb3dTcGFuO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiB0aGlzLmFkZFJvd1VJID8gaGVpZ2h0IDogbnVsbDtcbiAgICB9XG5cbiAgICBnZXQgY2VsbEhlaWdodCgpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuYWRkUm93VUkgJiYgIXRoaXMuaW5FZGl0TW9kZSA/IG51bGwgOiB0aGlzLmdyaWQucm93SGVpZ2h0IHx8IDMyO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIEBoaWRkZW5cbiAgICAgKi9cbiAgICBASW5wdXQoKVxuICAgIHB1YmxpYyBncmlkSUQ6IHN0cmluZztcblxuICAgIC8qKlxuICAgICAqIEBoaWRkZW5cbiAgICAgKi9cbiAgICBAVmlld0NoaWxkcmVuKCdpZ3hEaXJSZWYnLCB7IHJlYWQ6IElneEdyaWRGb3JPZkRpcmVjdGl2ZSB9KVxuICAgIHB1YmxpYyBfdmlydERpclJvdzogUXVlcnlMaXN0PElneEdyaWRGb3JPZkRpcmVjdGl2ZTxhbnk+PjtcblxuICAgIHB1YmxpYyBnZXQgdmlydERpclJvdygpOiBJZ3hHcmlkRm9yT2ZEaXJlY3RpdmU8YW55PiB7XG4gICAgICAgIHJldHVybiB0aGlzLl92aXJ0RGlyUm93ID8gdGhpcy5fdmlydERpclJvdy5maXJzdCA6IG51bGw7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogQGhpZGRlblxuICAgICAqL1xuICAgIEBWaWV3Q2hpbGQoZm9yd2FyZFJlZigoKSA9PiBJZ3hDaGVja2JveENvbXBvbmVudCksIHsgcmVhZDogSWd4Q2hlY2tib3hDb21wb25lbnQgfSlcbiAgICBwdWJsaWMgY2hlY2tib3hFbGVtZW50OiBJZ3hDaGVja2JveENvbXBvbmVudDtcblxuICAgIEBWaWV3Q2hpbGRyZW4oJ2NlbGwnKVxuICAgIHByb3RlY3RlZCBfY2VsbHM6IFF1ZXJ5TGlzdDxhbnk+O1xuXG4gICAgLyoqXG4gICAgICogR2V0cyB0aGUgcmVuZGVyZWQgY2VsbHMgaW4gdGhlIHJvdyBjb21wb25lbnQuXG4gICAgICpcbiAgICAgKiBgYGB0eXBlc2NyaXB0XG4gICAgICogLy8gZ2V0IHRoZSBjZWxscyBvZiB0aGUgdGhpcmQgc2VsZWN0ZWQgcm93XG4gICAgICogbGV0IHNlbGVjdGVkUm93Q2VsbHMgPSB0aGlzLmdyaWQuc2VsZWN0ZWRSb3dzWzJdLmNlbGxzO1xuICAgICAqIGBgYFxuICAgICAqL1xuICAgIHB1YmxpYyBnZXQgY2VsbHMoKSB7XG4gICAgICAgIGNvbnN0IHJlcyA9IG5ldyBRdWVyeUxpc3Q8YW55PigpO1xuICAgICAgICBpZiAoIXRoaXMuX2NlbGxzKSB7XG4gICAgICAgICAgICByZXR1cm4gcmVzO1xuICAgICAgICB9XG4gICAgICAgIGNvbnN0IGNMaXN0ID0gdGhpcy5fY2VsbHMuZmlsdGVyKChpdGVtKSA9PiBpdGVtLm5hdGl2ZUVsZW1lbnQucGFyZW50RWxlbWVudCAhPT0gbnVsbClcbiAgICAgICAgICAgIC5zb3J0KChpdGVtMSwgaXRlbTIpID0+IGl0ZW0xLmNvbHVtbi52aXNpYmxlSW5kZXggLSBpdGVtMi5jb2x1bW4udmlzaWJsZUluZGV4KTtcbiAgICAgICAgcmVzLnJlc2V0KGNMaXN0KTtcbiAgICAgICAgcmV0dXJuIHJlcztcbiAgICB9XG5cbiAgICBwdWJsaWMgc2V0IGNlbGxzKGNlbGxzKSB7XG5cbiAgICB9XG5cbiAgICBASG9zdEJpbmRpbmcoJ2F0dHIuZGF0YS1yb3dJbmRleCcpXG4gICAgZ2V0IGRhdGFSb3dJbmRleCgpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuaW5kZXg7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogQGhpZGRlblxuICAgICAqL1xuICAgIEBJbnB1dCgpXG4gICAgQEhvc3RCaW5kaW5nKCdhdHRyLmFyaWEtc2VsZWN0ZWQnKVxuICAgIGdldCBzZWxlY3RlZCgpOiBib29sZWFuIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuc2VsZWN0aW9uU2VydmljZS5pc1Jvd1NlbGVjdGVkKHRoaXMucm93SUQpO1xuICAgIH1cblxuICAgIHNldCBzZWxlY3RlZCh2YWx1ZTogYm9vbGVhbikge1xuICAgICAgICBpZiAodmFsdWUpIHtcbiAgICAgICAgICAgIHRoaXMuc2VsZWN0aW9uU2VydmljZS5zZWxlY3RSb3dzV2l0aE5vRXZlbnQoW3RoaXMucm93SURdKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHRoaXMuc2VsZWN0aW9uU2VydmljZS5kZXNlbGVjdFJvd3NXaXRoTm9FdmVudChbdGhpcy5yb3dJRF0pO1xuICAgICAgICB9XG4gICAgICAgIHRoaXMuZ3JpZC5jZHIubWFya0ZvckNoZWNrKCk7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogQGhpZGRlblxuICAgICAqL1xuICAgIGdldCBjb2x1bW5zKCk6IElneENvbHVtbkNvbXBvbmVudFtdIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuZ3JpZC52aXNpYmxlQ29sdW1ucztcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBAaGlkZGVuXG4gICAgICogQGludGVybmFsXG4gICAgICovXG4gICAgZ2V0IHZpZXdJbmRleCgpOiBudW1iZXIge1xuICAgICAgICBpZiAoKHRoaXMuZ3JpZCBhcyBhbnkpLmdyb3VwaW5nRXhwcmVzc2lvbnMubGVuZ3RoKSB7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy5ncmlkLmZpbHRlcmVkU29ydGVkRGF0YS5pbmRleE9mKHRoaXMucm93RGF0YSk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHRoaXMuaW5kZXggKyB0aGlzLmdyaWQucGFnZSAqIHRoaXMuZ3JpZC5wZXJQYWdlO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIEBoaWRkZW5cbiAgICAgKi9cbiAgICBnZXQgcGlubmVkQ29sdW1ucygpOiBJZ3hDb2x1bW5Db21wb25lbnRbXSB7XG4gICAgICAgIHJldHVybiB0aGlzLmdyaWQucGlubmVkQ29sdW1ucztcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBAaGlkZGVuXG4gICAgICovXG4gICAgcHVibGljIGdldCBpc1Jvb3QoKTogYm9vbGVhbiB7XG4gICAgICAgIHJldHVybiB0cnVlO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIEBoaWRkZW5cbiAgICAgKi9cbiAgICBwdWJsaWMgZ2V0IGhhc0NoaWxkcmVuKCk6IGJvb2xlYW4ge1xuICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogQGhpZGRlblxuICAgICAqL1xuICAgIGdldCB1bnBpbm5lZENvbHVtbnMoKTogSWd4Q29sdW1uQ29tcG9uZW50W10ge1xuICAgICAgICByZXR1cm4gdGhpcy5ncmlkLnVucGlubmVkQ29sdW1ucztcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBAaGlkZGVuXG4gICAgICovXG4gICAgcHVibGljIGdldCBzaG93Um93U2VsZWN0b3JzKCk6IGJvb2xlYW4ge1xuICAgICAgICByZXR1cm4gdGhpcy5ncmlkLnNob3dSb3dTZWxlY3RvcnM7XG4gICAgfVxuXG4gICAgLyoqIEBoaWRkZW4gKi9cbiAgICBwdWJsaWMgZ2V0IGRpcnR5KCk6IGJvb2xlYW4ge1xuICAgICAgICBjb25zdCByb3cgPSB0aGlzLmdyaWQudHJhbnNhY3Rpb25zLmdldFN0YXRlKHRoaXMucm93SUQpO1xuICAgICAgICBpZiAocm93KSB7XG4gICAgICAgICAgICByZXR1cm4gcm93LnR5cGUgPT09IFRyYW5zYWN0aW9uVHlwZS5BREQgfHwgcm93LnR5cGUgPT09IFRyYW5zYWN0aW9uVHlwZS5VUERBVEU7XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogQGhpZGRlblxuICAgICAqL1xuICAgIHB1YmxpYyBnZXQgcm93RHJhZ2dhYmxlKCk6IGJvb2xlYW4ge1xuICAgICAgICByZXR1cm4gdGhpcy5ncmlkLnJvd0RyYWdnYWJsZTtcbiAgICB9XG5cbiAgICAvKiogQGhpZGRlbiAqL1xuICAgIHB1YmxpYyBnZXQgYWRkZWQoKTogYm9vbGVhbiB7XG4gICAgICAgIGNvbnN0IHJvdyA9IHRoaXMuZ3JpZC50cmFuc2FjdGlvbnMuZ2V0U3RhdGUodGhpcy5yb3dJRCk7XG4gICAgICAgIGlmIChyb3cpIHtcbiAgICAgICAgICAgIHJldHVybiByb3cudHlwZSA9PT0gVHJhbnNhY3Rpb25UeXBlLkFERDtcbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9XG5cbiAgICAvKiogQGhpZGRlbiAqL1xuICAgIHB1YmxpYyBnZXQgZGVsZXRlZCgpOiBib29sZWFuIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuZ3JpZEFQSS5yb3dfZGVsZXRlZF90cmFuc2FjdGlvbih0aGlzLnJvd0lEKTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBAaGlkZGVuXG4gICAgICovXG4gICAgcHVibGljIGdldCBkcmFnZ2luZygpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuZ3JpZC5kcmFnUm93SUQgPT09IHRoaXMucm93SUQ7XG4gICAgfVxuXG4gICAgLy8gVE9ETzogUmVmYWN0b3JcbiAgICBwdWJsaWMgZ2V0IGluRWRpdE1vZGUoKTogYm9vbGVhbiB7XG4gICAgICAgIGlmICh0aGlzLmdyaWQucm93RWRpdGFibGUpIHtcbiAgICAgICAgICAgIGNvbnN0IGVkaXRSb3dTdGF0ZSA9IHRoaXMuZ3JpZC5jcnVkU2VydmljZS5yb3c7XG4gICAgICAgICAgICByZXR1cm4gKGVkaXRSb3dTdGF0ZSAmJiBlZGl0Um93U3RhdGUuaWQgPT09IHRoaXMucm93SUQpIHx8IGZhbHNlO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogR2V0IGEgcmVmZXJlbmNlIHRvIHRoZSBncmlkIHRoYXQgY29udGFpbnMgdGhlIHNlbGVjdGVkIHJvdy5cbiAgICAgKlxuICAgICAqIGBgYHR5cGVzY3JpcHRcbiAgICAgKiBoYW5kbGVSb3dTZWxlY3Rpb24oZXZlbnQpIHtcbiAgICAgKiAgLy8gdGhlIGdyaWQgb24gd2hpY2ggdGhlIHJvd1NlbGVjdGVkIGV2ZW50IHdhcyB0cmlnZ2VyZWRcbiAgICAgKiAgY29uc3QgZ3JpZCA9IGV2ZW50LnJvdy5ncmlkO1xuICAgICAqIH1cbiAgICAgKiBgYGBcbiAgICAgKlxuICAgICAqIGBgYGh0bWxcbiAgICAgKiAgPGlneC1ncmlkXG4gICAgICogICAgW2RhdGFdPVwiZGF0YVwiXG4gICAgICogICAgKHJvd1NlbGVjdGVkKT1cImhhbmRsZVJvd1NlbGVjdGlvbigkZXZlbnQpXCI+XG4gICAgICogIDwvaWd4LWdyaWQ+XG4gICAgICogYGBgXG4gICAgICovXG4gICAgZ2V0IGdyaWQoKTogVCB7XG4gICAgICAgIHJldHVybiB0aGlzLmdyaWRBUEkuZ3JpZDtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBHZXRzIHRoZSBJRCBvZiB0aGUgcm93LlxuICAgICAqIEEgcm93IGluIHRoZSBncmlkIGlzIGlkZW50aWZpZWQgZWl0aGVyIGJ5OlxuICAgICAqIC0gcHJpbWFyeUtleSBkYXRhIHZhbHVlLFxuICAgICAqIC0gdGhlIHdob2xlIHJvd0RhdGEsIGlmIHRoZSBwcmltYXJ5S2V5IGlzIG9taXR0ZWQuXG4gICAgICpcbiAgICAgKiBgYGB0eXBlc2NyaXB0XG4gICAgICogbGV0IHJvd0lEID0gdGhpcy5ncmlkLnNlbGVjdGVkUm93c1syXS5yb3dJRDtcbiAgICAgKiBgYGBcbiAgICAgKi9cbiAgICBwdWJsaWMgZ2V0IHJvd0lEKCkge1xuICAgICAgICBjb25zdCBwcmltYXJ5S2V5ID0gdGhpcy5ncmlkLnByaW1hcnlLZXk7XG4gICAgICAgIHJldHVybiBwcmltYXJ5S2V5ID8gdGhpcy5fcm93RGF0YVtwcmltYXJ5S2V5XSA6IHRoaXMuX3Jvd0RhdGE7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogVGhlIG5hdGl2ZSBET00gZWxlbWVudCByZXByZXNlbnRpbmcgdGhlIHJvdy4gQ291bGQgYmUgbnVsbCBpbiBjZXJ0YWluIGVudmlyb25tZW50cy5cbiAgICAgKlxuICAgICAqIGBgYHR5cGVzY3JpcHRcbiAgICAgKiAvLyBnZXQgdGhlIG5hdGl2ZUVsZW1lbnQgb2YgdGhlIHNlY29uZCBzZWxlY3RlZCByb3dcbiAgICAgKiBsZXQgc2VsZWN0ZWRSb3dOYXRpdmVFbGVtZW50ID0gdGhpcy5ncmlkLnNlbGVjdGVkUm93c1sxXS5uYXRpdmVFbGVtZW50O1xuICAgICAqIGBgYFxuICAgICAqL1xuICAgIGdldCBuYXRpdmVFbGVtZW50KCkge1xuICAgICAgICByZXR1cm4gdGhpcy5lbGVtZW50Lm5hdGl2ZUVsZW1lbnQ7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogQGhpZGRlblxuICAgICAqL1xuICAgIHB1YmxpYyBmb2N1c2VkID0gZmFsc2U7XG5cbiAgICAvKipcbiAgICAgKiBAaGlkZGVuXG4gICAgICogQGludGVybmFsXG4gICAgICovXG4gICAgcHVibGljIGRlZmF1bHRDc3NDbGFzcyA9ICdpZ3gtZ3JpZF9fdHInO1xuXG4gICAgLyoqXG4gICAgICogQGhpZGRlblxuICAgICAqL1xuICAgIHB1YmxpYyB0cmlnZ2VyQWRkQW5pbWF0aW9uQ2xhc3MgPSBmYWxzZTtcblxuICAgIHByb3RlY3RlZCBkZXN0cm95JCA9IG5ldyBTdWJqZWN0PGFueT4oKTtcbiAgICBwcm90ZWN0ZWQgX3Jvd0RhdGE6IGFueTtcbiAgICBwcm90ZWN0ZWQgX2FkZFJvdzogYm9vbGVhbjtcblxuICAgIGNvbnN0cnVjdG9yKFxuICAgICAgICBwdWJsaWMgZ3JpZEFQSTogR3JpZEJhc2VBUElTZXJ2aWNlPFQ+LFxuICAgICAgICBwdWJsaWMgc2VsZWN0aW9uU2VydmljZTogSWd4R3JpZFNlbGVjdGlvblNlcnZpY2UsXG4gICAgICAgIHB1YmxpYyBlbGVtZW50OiBFbGVtZW50UmVmPEhUTUxFbGVtZW50PixcbiAgICAgICAgcHVibGljIGNkcjogQ2hhbmdlRGV0ZWN0b3JSZWYpIHsgfVxuXG4gICAgLyoqXG4gICAgICogQGhpZGRlblxuICAgICAqIEBpbnRlcm5hbFxuICAgICAqL1xuICAgIEBIb3N0TGlzdGVuZXIoJ2NsaWNrJywgWyckZXZlbnQnXSlcbiAgICBwdWJsaWMgb25DbGljayhldmVudDogTW91c2VFdmVudCkge1xuICAgICAgICBpZiAodGhpcy5ncmlkLnJvd1NlbGVjdGlvbiA9PT0gJ25vbmUnIHx8IHRoaXMuZGVsZXRlZCB8fCAhdGhpcy5ncmlkLnNlbGVjdFJvd09uQ2xpY2spIHtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgICAgICBpZiAoZXZlbnQuc2hpZnRLZXkgJiYgdGhpcy5ncmlkLmlzTXVsdGlSb3dTZWxlY3Rpb25FbmFibGVkKSB7XG4gICAgICAgICAgICB0aGlzLnNlbGVjdGlvblNlcnZpY2Uuc2VsZWN0TXVsdGlwbGVSb3dzKHRoaXMucm93SUQsIHRoaXMucm93RGF0YSwgZXZlbnQpO1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG5cbiAgICAgICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIG5vLWJpdHdpc2VcbiAgICAgICAgY29uc3QgY2xlYXJTZWxlY3Rpb24gPSAhKCtldmVudC5jdHJsS2V5IF4gK2V2ZW50Lm1ldGFLZXkpO1xuICAgICAgICB0aGlzLnNlbGVjdGlvblNlcnZpY2Uuc2VsZWN0Um93QnlJZCh0aGlzLnJvd0lELCBjbGVhclNlbGVjdGlvbiwgZXZlbnQpO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIEBoaWRkZW5cbiAgICAgKiBAaW50ZXJuYWxcbiAgICAgKi9cbiAgICBASG9zdExpc3RlbmVyKCdtb3VzZWVudGVyJylcbiAgICBwdWJsaWMgc2hvd0FjdGlvblN0cmlwKCkge1xuICAgICAgICBpZiAodGhpcy5ncmlkLmFjdGlvblN0cmlwKSB7XG4gICAgICAgICAgICB0aGlzLmdyaWQuYWN0aW9uU3RyaXAuc2hvdyh0aGlzKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIHB1YmxpYyBuZ0FmdGVyVmlld0luaXQoKSB7XG4gICAgICAgIC8vIElmIHRoZSB0ZW1wbGF0ZSBvZiB0aGUgcm93IGNoYW5nZXMsIHRoZSBmb3JPZiBpbiBpdCBpcyByZWNyZWF0ZWQgYW5kIGlzIG5vdCBkZXRlY3RlZCBieSB0aGUgZ3JpZCBhbmQgcm93cyBjYW4ndCBiZSBzY3JvbGxlZC5cbiAgICAgICAgdGhpcy5fdmlydERpclJvdy5jaGFuZ2VzLnBpcGUodGFrZVVudGlsKHRoaXMuZGVzdHJveSQpKS5zdWJzY3JpYmUoKCkgPT4gdGhpcy5ncmlkLnJlc2V0SG9yaXpvbnRhbEZvck9mcygpKTtcbiAgICB9XG5cbiAgICBwdWJsaWMgbmdPbkRlc3Ryb3koKSB7XG4gICAgICAgIHRoaXMuZGVzdHJveSQubmV4dCh0cnVlKTtcbiAgICAgICAgdGhpcy5kZXN0cm95JC5jb21wbGV0ZSgpO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIEBoaWRkZW5cbiAgICAgKi9cbiAgICBwdWJsaWMgb25Sb3dTZWxlY3RvckNsaWNrKGV2ZW50KSB7XG4gICAgICAgIGV2ZW50LnN0b3BQcm9wYWdhdGlvbigpO1xuICAgICAgICBpZiAoZXZlbnQuc2hpZnRLZXkgJiYgdGhpcy5ncmlkLmlzTXVsdGlSb3dTZWxlY3Rpb25FbmFibGVkKSB7XG4gICAgICAgICAgICB0aGlzLnNlbGVjdGlvblNlcnZpY2Uuc2VsZWN0TXVsdGlwbGVSb3dzKHRoaXMucm93SUQsIHRoaXMucm93RGF0YSwgZXZlbnQpO1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICAgIGlmICh0aGlzLnNlbGVjdGVkKSB7XG4gICAgICAgICAgICB0aGlzLnNlbGVjdGlvblNlcnZpY2UuZGVzZWxlY3RSb3codGhpcy5yb3dJRCwgZXZlbnQpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgdGhpcy5zZWxlY3Rpb25TZXJ2aWNlLnNlbGVjdFJvd0J5SWQodGhpcy5yb3dJRCwgZmFsc2UsIGV2ZW50KTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIC8qKlxuICAgICAqIFVwZGF0ZXMgdGhlIHNwZWNpZmllZCByb3cgb2JqZWN0IGFuZCB0aGUgZGF0YSBzb3VyY2UgcmVjb3JkIHdpdGggdGhlIHBhc3NlZCB2YWx1ZS5cbiAgICAgKlxuICAgICAqIGBgYHR5cGVzY3JpcHRcbiAgICAgKiAvLyB1cGRhdGUgdGhlIHNlY29uZCBzZWxlY3RlZCByb3cncyB2YWx1ZVxuICAgICAqIGxldCBuZXdWYWx1ZSA9IFwiQXBwbGVcIjtcbiAgICAgKiB0aGlzLmdyaWQuc2VsZWN0ZWRSb3dzWzFdLnVwZGF0ZShuZXdWYWx1ZSk7XG4gICAgICogYGBgXG4gICAgICovXG4gICAgcHVibGljIHVwZGF0ZSh2YWx1ZTogYW55KSB7XG4gICAgICAgIGNvbnN0IGNydWRTZXJ2aWNlID0gdGhpcy5ncmlkLmNydWRTZXJ2aWNlO1xuICAgICAgICBpZiAoY3J1ZFNlcnZpY2UuY2VsbEluRWRpdE1vZGUgJiYgY3J1ZFNlcnZpY2UuY2VsbC5pZC5yb3dJRCA9PT0gdGhpcy5yb3dJRCkge1xuICAgICAgICAgICAgdGhpcy5ncmlkLnRyYW5zYWN0aW9ucy5lbmRQZW5kaW5nKGZhbHNlKTtcbiAgICAgICAgfVxuICAgICAgICBjb25zdCByb3cgPSBuZXcgSWd4RWRpdFJvdyh0aGlzLnJvd0lELCB0aGlzLmluZGV4LCB0aGlzLnJvd0RhdGEsIHRoaXMuZ3JpZCk7XG4gICAgICAgIHRoaXMuZ3JpZEFQSS51cGRhdGVfcm93KHJvdywgdmFsdWUpO1xuICAgICAgICB0aGlzLmNkci5tYXJrRm9yQ2hlY2soKTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBSZW1vdmVzIHRoZSBzcGVjaWZpZWQgcm93IGZyb20gdGhlIGdyaWQncyBkYXRhIHNvdXJjZS5cbiAgICAgKiBUaGlzIG1ldGhvZCBlbWl0cyBgcm93RGVsZXRlZGAgZXZlbnQuXG4gICAgICpcbiAgICAgKiBgYGB0eXBlc2NyaXB0XG4gICAgICogLy8gZGVsZXRlIHRoZSB0aGlyZCBzZWxlY3RlZCByb3cgZnJvbSB0aGUgZ3JpZFxuICAgICAqIHRoaXMuZ3JpZC5zZWxlY3RlZFJvd3NbMl0uZGVsZXRlKCk7XG4gICAgICogYGBgXG4gICAgICovXG4gICAgcHVibGljIGRlbGV0ZSgpIHtcbiAgICAgICAgdGhpcy5ncmlkLmRlbGV0ZVJvd0J5SWQodGhpcy5yb3dJRCk7XG4gICAgfVxuXG4gICAgcHVibGljIGlzQ2VsbEFjdGl2ZSh2aXNpYmxlQ29sdW1uSW5kZXgpIHtcbiAgICAgICAgY29uc3Qgbm9kZSA9IHRoaXMuZ3JpZC5uYXZpZ2F0aW9uLmFjdGl2ZU5vZGU7XG4gICAgICAgIHJldHVybiBub2RlID8gbm9kZS5yb3cgPT09IHRoaXMuaW5kZXggJiYgbm9kZS5jb2x1bW4gPT09IHZpc2libGVDb2x1bW5JbmRleCA6IGZhbHNlO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIFBpbnMgdGhlIHNwZWNpZmllZCByb3cuXG4gICAgICogVGhpcyBtZXRob2QgZW1pdHMgYHJvd1Bpbm5pbmdgIGV2ZW50LlxuICAgICAqXG4gICAgICogYGBgdHlwZXNjcmlwdFxuICAgICAqIC8vIHBpbiB0aGUgc2VsZWN0ZWQgcm93IGZyb20gdGhlIGdyaWRcbiAgICAgKiB0aGlzLmdyaWQuc2VsZWN0ZWRSb3dzWzBdLnBpbigpO1xuICAgICAqIGBgYFxuICAgICAqL1xuICAgIHB1YmxpYyBwaW4oKSB7XG4gICAgICAgIHJldHVybiB0aGlzLmdyaWQucGluUm93KHRoaXMucm93SUQpO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIFVucGlucyB0aGUgc3BlY2lmaWVkIHJvdy5cbiAgICAgKiBUaGlzIG1ldGhvZCBlbWl0cyBgcm93UGlubmluZ2AgZXZlbnQuXG4gICAgICpcbiAgICAgKiBgYGB0eXBlc2NyaXB0XG4gICAgICogLy8gdW5waW4gdGhlIHNlbGVjdGVkIHJvdyBmcm9tIHRoZSBncmlkXG4gICAgICogdGhpcy5ncmlkLnNlbGVjdGVkUm93c1swXS51bnBpbigpO1xuICAgICAqIGBgYFxuICAgICAqL1xuICAgIHB1YmxpYyB1bnBpbigpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuZ3JpZC51bnBpblJvdyh0aGlzLnJvd0lEKTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBAaGlkZGVuXG4gICAgICovXG4gICAgZ2V0IHJvd0NoZWNrYm94QXJpYUxhYmVsKCkge1xuICAgICAgICByZXR1cm4gdGhpcy5ncmlkLnByaW1hcnlLZXkgP1xuICAgICAgICAgICAgdGhpcy5zZWxlY3RlZCA/ICdEZXNlbGVjdCByb3cgd2l0aCBrZXkgJyArIHRoaXMucm93SUQgOiAnU2VsZWN0IHJvdyB3aXRoIGtleSAnICsgdGhpcy5yb3dJRCA6XG4gICAgICAgICAgICB0aGlzLnNlbGVjdGVkID8gJ0Rlc2VsZWN0IHJvdycgOiAnU2VsZWN0IHJvdyc7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogQGhpZGRlblxuICAgICAqL1xuICAgIHB1YmxpYyBuZ0RvQ2hlY2soKSB7XG4gICAgICAgIHRoaXMuY2RyLm1hcmtGb3JDaGVjaygpO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIEBoaWRkZW5cbiAgICAgKi9cbiAgICBwdWJsaWMgc2hvdWxkRGlzcGxheVBpbm5lZENoaXAodmlzaWJsZUNvbHVtbkluZGV4OiBudW1iZXIpOiBib29sZWFuIHtcbiAgICAgICAgcmV0dXJuIHRoaXMucGlubmVkICYmIHRoaXMuZGlzYWJsZWQgJiYgdmlzaWJsZUNvbHVtbkluZGV4ID09PSAwO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIFNwYXducyB0aGUgYWRkIHJvdyBVSSBmb3IgdGhlIHNwZWNpZmljIHJvdy5cbiAgICAgKlxuICAgICAqIEBleGFtcGxlXG4gICAgICogYGBgdHlwZXNjcmlwdFxuICAgICAqIGNvbnN0IHJvdyA9IHRoaXMuZ3JpZDEuZ2V0Um93QnlJbmRleCgxKTtcbiAgICAgKiByb3cuYmVnaW5BZGRSb3coKTtcbiAgICAgKiBgYGBcbiAgICAgKi9cbiAgICBwdWJsaWMgYmVnaW5BZGRSb3coKSB7XG4gICAgICAgIHRoaXMuZ3JpZC5jcnVkU2VydmljZS5lbnRlckFkZFJvd01vZGUodGhpcyk7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogQGhpZGRlblxuICAgICAqL1xuICAgIHB1YmxpYyB0cmlnZ2VyQWRkQW5pbWF0aW9uKCkge1xuICAgICAgICB0aGlzLnRyaWdnZXJBZGRBbmltYXRpb25DbGFzcyA9IHRydWU7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogQGhpZGRlblxuICAgICAqL1xuICAgIHB1YmxpYyBhbmltYXRpb25FbmRIYW5kbGVyKCkge1xuICAgICAgICB0aGlzLnRyaWdnZXJBZGRBbmltYXRpb25DbGFzcyA9IGZhbHNlO1xuICAgICAgICB0aGlzLmFkZEFuaW1hdGlvbkVuZC5lbWl0KHRoaXMpO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIEBoaWRkZW5cbiAgICAgKi9cbiAgICBwdWJsaWMgZ2V0IHJlc29sdmVEcmFnSW5kaWNhdG9yQ2xhc3NlcygpOiBzdHJpbmcge1xuICAgICAgICBjb25zdCBkZWZhdWx0RHJhZ0luZGljYXRvckNzc0NsYXNzID0gJ2lneC1ncmlkX19kcmFnLWluZGljYXRvcic7XG4gICAgICAgIGNvbnN0IGRyYWdJbmRpY2F0b3JPZmYgPSB0aGlzLmdyaWQucm93RHJhZ2dpbmcgJiYgIXRoaXMuZHJhZ2dpbmcgPyAnaWd4LWdyaWRfX2RyYWctaW5kaWNhdG9yLS1vZmYnIDogJyc7XG4gICAgICAgIHJldHVybiBgJHtkZWZhdWx0RHJhZ0luZGljYXRvckNzc0NsYXNzfSAke2RyYWdJbmRpY2F0b3JPZmZ9YDtcbiAgICB9XG59XG4iXX0=