@guiexpert/table 0.0.1 → 0.0.2

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 (92) hide show
  1. package/esm2020/index.mjs +26 -20
  2. package/esm2020/lib/table/checkbox/tree-checkbox-model.mjs +2 -2
  3. package/esm2020/lib/table/data/common/args-adjust-columns-to-row-parent-params.mjs +1 -1
  4. package/esm2020/lib/table/data/options/auto-restore-options.if.mjs +1 -1
  5. package/esm2020/lib/table/data/options/table-options.if.mjs +1 -1
  6. package/esm2020/lib/table/data/options/table-options.mjs +7 -8
  7. package/esm2020/lib/table/data/options/tree-options.mjs +2 -2
  8. package/esm2020/lib/table/data/tablemodel/area-ident.type.mjs +6 -6
  9. package/esm2020/lib/table/data/tablemodel/areamodel/abstract-area-model.mjs +22 -22
  10. package/esm2020/lib/table/data/tablemodel/areamodel/area-model-array-array.mjs +3 -3
  11. package/esm2020/lib/table/data/tablemodel/areamodel/area-model-hidden.mjs +25 -21
  12. package/esm2020/lib/table/data/tablemodel/areamodel/area-model-object-array-with-columndefs.mjs +2 -2
  13. package/esm2020/lib/table/data/tablemodel/areamodel/area-model-object-array.mjs +8 -8
  14. package/esm2020/lib/table/data/tablemodel/areamodel/area-model-tree.mjs +13 -13
  15. package/esm2020/lib/table/data/tablemodel/areamodel/area-model.if.mjs +1 -1
  16. package/esm2020/lib/table/data/tablemodel/areamodel/col-and-rowspan-model.mjs +1 -1
  17. package/esm2020/lib/table/data/tablemodel/column/column-def.if.mjs +1 -1
  18. package/esm2020/lib/table/data/tablemodel/column/column-def.mjs +3 -3
  19. package/esm2020/lib/table/data/tablemodel/table-model.if.mjs +1 -1
  20. package/esm2020/lib/table/data/tablemodel/table-model.mjs +24 -18
  21. package/esm2020/lib/table/event-adapter.mjs +17 -0
  22. package/esm2020/lib/table/mouse-handler.mjs +1 -7
  23. package/esm2020/lib/table/render-scope.mjs +164 -144
  24. package/esm2020/lib/table/renderer/cell-render.if.mjs +1 -1
  25. package/esm2020/lib/table/renderer/checkbox-cell-renderer.mjs +2 -2
  26. package/esm2020/lib/table/renderer/date-to-int-date-cell-renderer.mjs +2 -2
  27. package/esm2020/lib/table/renderer/date-to-iso-cell-renderer.mjs +2 -2
  28. package/esm2020/lib/table/renderer/date-to-locale-date-cell-renderer.mjs +2 -2
  29. package/esm2020/lib/table/renderer/date-to-tec-cell-renderer.mjs +12 -0
  30. package/esm2020/lib/table/renderer/edit/input-cell-renderer.mjs +2 -2
  31. package/esm2020/lib/table/renderer/edit/select-cell-renderer.mjs +2 -2
  32. package/esm2020/lib/table/renderer/male-female-to-icon-cell-renderer.mjs +2 -2
  33. package/esm2020/lib/table/renderer/number-cell-renderer.mjs +2 -2
  34. package/esm2020/lib/table/renderer/true-false-cell-renderer.mjs +15 -0
  35. package/esm2020/lib/table/service/convenience-dom.service.mjs +32 -24
  36. package/esm2020/lib/table/service/simple-dom-service.mjs +34 -0
  37. package/esm2020/lib/table/table-api.mjs +7 -7
  38. package/esm2020/lib/table/table-model-factory.mjs +6 -7
  39. package/esm2020/lib/table/table-scope.mjs +61 -55
  40. package/index.d.ts +25 -21
  41. package/lib/table/action/action-id.type.d.ts +1 -1
  42. package/lib/table/action/shortcut-actionid-mapping.type.d.ts +1 -1
  43. package/lib/table/checkbox/tree-checkbox-model.d.ts +1 -1
  44. package/lib/table/data/common/area-map.type.d.ts +1 -1
  45. package/lib/table/data/common/args-adjust-columns-to-row-parent-params.d.ts +0 -1
  46. package/lib/table/data/common/boolean-function.d.ts +1 -1
  47. package/lib/table/data/common/checked-type.d.ts +1 -1
  48. package/lib/table/data/common/filter-function.d.ts +1 -1
  49. package/lib/table/data/common/get-t.d.ts +1 -1
  50. package/lib/table/data/common/sort-state.type.d.ts +1 -1
  51. package/lib/table/data/common/tree-arrow.type.d.ts +1 -1
  52. package/lib/table/data/div-scope.type.d.ts +1 -1
  53. package/lib/table/data/options/auto-restore-options.if.d.ts +6 -3
  54. package/lib/table/data/options/table-options.d.ts +5 -6
  55. package/lib/table/data/options/table-options.if.d.ts +5 -6
  56. package/lib/table/data/side-ident.type.d.ts +1 -1
  57. package/lib/table/data/tablemodel/area-ident.type.d.ts +1 -1
  58. package/lib/table/data/tablemodel/areamodel/abstract-area-model.d.ts +12 -12
  59. package/lib/table/data/tablemodel/areamodel/area-model-array-array.d.ts +4 -4
  60. package/lib/table/data/tablemodel/areamodel/area-model-hidden.d.ts +23 -18
  61. package/lib/table/data/tablemodel/areamodel/area-model-object-array-with-columndefs.d.ts +2 -2
  62. package/lib/table/data/tablemodel/areamodel/area-model-object-array.d.ts +4 -4
  63. package/lib/table/data/tablemodel/areamodel/area-model-tree.d.ts +4 -4
  64. package/lib/table/data/tablemodel/areamodel/area-model.if.d.ts +114 -1
  65. package/lib/table/data/tablemodel/column/column-def.d.ts +3 -3
  66. package/lib/table/data/tablemodel/table-model.d.ts +1 -0
  67. package/lib/table/data/tablemodel/table-model.if.d.ts +1 -0
  68. package/lib/table/event-adapter.d.ts +12 -0
  69. package/lib/table/focus/focus.type.d.ts +1 -1
  70. package/lib/table/mouse-handler.d.ts +0 -2
  71. package/lib/table/render-scope.d.ts +11 -6
  72. package/lib/table/renderer/cell-render.if.d.ts +1 -1
  73. package/lib/table/renderer/checkbox-cell-renderer.d.ts +1 -1
  74. package/lib/table/renderer/date-to-int-date-cell-renderer.d.ts +1 -1
  75. package/lib/table/renderer/date-to-iso-cell-renderer.d.ts +1 -1
  76. package/lib/table/renderer/date-to-locale-date-cell-renderer.d.ts +1 -1
  77. package/lib/table/renderer/date-to-tec-cell-renderer.d.ts +8 -0
  78. package/lib/table/renderer/edit/edit-cell-renderer.type.d.ts +1 -1
  79. package/lib/table/renderer/edit/input-cell-renderer.d.ts +1 -1
  80. package/lib/table/renderer/edit/select-cell-renderer.d.ts +1 -1
  81. package/lib/table/renderer/male-female-to-icon-cell-renderer.d.ts +1 -1
  82. package/lib/table/renderer/number-cell-renderer.d.ts +1 -1
  83. package/lib/table/renderer/renderer-cleanup-fn.type.d.ts +1 -1
  84. package/lib/table/renderer/true-false-cell-renderer.d.ts +8 -0
  85. package/lib/table/selection/selection.type.d.ts +2 -2
  86. package/lib/table/service/convenience-dom.service.d.ts +3 -1
  87. package/lib/table/service/data/html-style.type.d.ts +1 -1
  88. package/lib/table/service/simple-dom-service.d.ts +10 -0
  89. package/lib/table/table-api.d.ts +6 -6
  90. package/lib/table/table-model-factory.d.ts +1 -2
  91. package/lib/table/table-scope.d.ts +3 -2
  92. package/package.json +2 -3
@@ -6,26 +6,26 @@ export class TableApi {
6
6
  this.tableScope.externalFilterChanged();
7
7
  }
8
8
  ;
9
- scrollToPixel(px = 0, py = 0) {
9
+ scrollToPixel(_px = 0, _py = 0) {
10
10
  // TODO
11
11
  }
12
- scrollToIndex(indexX = 0, indexY = 0) {
12
+ scrollToIndex(_indexX = 0, _indexY = 0) {
13
13
  // TODO
14
14
  }
15
- setHeaderVisible(visible = true) {
15
+ setHeaderVisible(_visible = true) {
16
16
  // TODO
17
17
  }
18
- setColumnVisible(column, visible = true) {
18
+ setColumnVisible(_column, _visible = true) {
19
19
  // TODO
20
20
  }
21
- isColumnVisible(column) {
21
+ isColumnVisible(_column) {
22
22
  // TODO
23
23
  return true;
24
24
  }
25
25
  isHeaderVisible() {
26
26
  return true; // TODO
27
27
  }
28
- setFooterVisible(visible = true) {
28
+ setFooterVisible(_visible = true) {
29
29
  // TODO
30
30
  }
31
31
  isFooterVisible() {
@@ -35,4 +35,4 @@ export class TableApi {
35
35
  this.tableScope.repaint();
36
36
  }
37
37
  }
38
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidGFibGUtYXBpLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vbGlicy90YWJsZS9zcmMvbGliL3RhYmxlL3RhYmxlLWFwaS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFJQSxNQUFNLE9BQU8sUUFBUTtJQUVuQixZQUNtQixVQUFzQjtRQUF0QixlQUFVLEdBQVYsVUFBVSxDQUFZO0lBRXpDLENBQUM7SUFFRCxxQkFBcUI7UUFDbkIsSUFBSSxDQUFDLFVBQVUsQ0FBQyxxQkFBcUIsRUFBRSxDQUFDO0lBQzFDLENBQUM7SUFBQSxDQUFDO0lBRUYsYUFBYSxDQUFDLEtBQWEsQ0FBQyxFQUFFLEtBQWEsQ0FBQztRQUMxQyxPQUFPO0lBQ1QsQ0FBQztJQUdELGFBQWEsQ0FBQyxTQUFpQixDQUFDLEVBQUUsU0FBaUIsQ0FBQztRQUNsRCxPQUFPO0lBQ1QsQ0FBQztJQUVELGdCQUFnQixDQUFDLFVBQW1CLElBQUk7UUFDdEMsT0FBTztJQUNULENBQUM7SUFFRCxnQkFBZ0IsQ0FBQyxNQUE0QixFQUFFLFVBQW1CLElBQUk7UUFDcEUsT0FBTztJQUNULENBQUM7SUFFRCxlQUFlLENBQUMsTUFBNEI7UUFDMUMsT0FBTztRQUNQLE9BQU8sSUFBSSxDQUFDO0lBQ2QsQ0FBQztJQUdELGVBQWU7UUFDYixPQUFPLElBQUksQ0FBQyxDQUFDLE9BQU87SUFDdEIsQ0FBQztJQUVELGdCQUFnQixDQUFDLFVBQW1CLElBQUk7UUFDdEMsT0FBTztJQUNULENBQUM7SUFFRCxlQUFlO1FBQ2IsT0FBTyxJQUFJLENBQUMsQ0FBQyxPQUFPO0lBQ3RCLENBQUM7SUFFRCxPQUFPO1FBQ0wsSUFBSSxDQUFDLFVBQVUsQ0FBQyxPQUFPLEVBQUUsQ0FBQztJQUM1QixDQUFDO0NBRUYiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQge1RhYmxlU2NvcGV9IGZyb20gXCIuL3RhYmxlLXNjb3BlXCI7XG5pbXBvcnQge0NvbHVtbkRlZklmfSBmcm9tIFwiLi9kYXRhL3RhYmxlbW9kZWwvY29sdW1uL2NvbHVtbi1kZWYuaWZcIjtcblxuXG5leHBvcnQgY2xhc3MgVGFibGVBcGkge1xuXG4gIGNvbnN0cnVjdG9yKFxuICAgIHByaXZhdGUgcmVhZG9ubHkgdGFibGVTY29wZTogVGFibGVTY29wZVxuICApIHtcbiAgfVxuXG4gIGV4dGVybmFsRmlsdGVyQ2hhbmdlZCgpOiB2b2lkIHtcbiAgICB0aGlzLnRhYmxlU2NvcGUuZXh0ZXJuYWxGaWx0ZXJDaGFuZ2VkKCk7XG4gIH07XG5cbiAgc2Nyb2xsVG9QaXhlbChweDogbnVtYmVyID0gMCwgcHk6IG51bWJlciA9IDApIHtcbiAgICAvLyBUT0RPXG4gIH1cblxuXG4gIHNjcm9sbFRvSW5kZXgoaW5kZXhYOiBudW1iZXIgPSAwLCBpbmRleFk6IG51bWJlciA9IDApIHtcbiAgICAvLyBUT0RPXG4gIH1cblxuICBzZXRIZWFkZXJWaXNpYmxlKHZpc2libGU6IGJvb2xlYW4gPSB0cnVlKSB7XG4gICAgLy8gVE9ET1xuICB9XG5cbiAgc2V0Q29sdW1uVmlzaWJsZShjb2x1bW46IG51bWJlciB8IENvbHVtbkRlZklmLCB2aXNpYmxlOiBib29sZWFuID0gdHJ1ZSkge1xuICAgIC8vIFRPRE9cbiAgfVxuXG4gIGlzQ29sdW1uVmlzaWJsZShjb2x1bW46IG51bWJlciB8IENvbHVtbkRlZklmKTogYm9vbGVhbiB7XG4gICAgLy8gVE9ET1xuICAgIHJldHVybiB0cnVlO1xuICB9XG5cblxuICBpc0hlYWRlclZpc2libGUoKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIHRydWU7IC8vIFRPRE9cbiAgfVxuXG4gIHNldEZvb3RlclZpc2libGUodmlzaWJsZTogYm9vbGVhbiA9IHRydWUpIHtcbiAgICAvLyBUT0RPXG4gIH1cblxuICBpc0Zvb3RlclZpc2libGUoKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIHRydWU7IC8vIFRPRE9cbiAgfVxuXG4gIHJlcGFpbnQoKSB7XG4gICAgdGhpcy50YWJsZVNjb3BlLnJlcGFpbnQoKTtcbiAgfVxuXG59XG4iXX0=
38
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidGFibGUtYXBpLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vbGlicy90YWJsZS9zcmMvbGliL3RhYmxlL3RhYmxlLWFwaS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFJQSxNQUFNLE9BQU8sUUFBUTtJQUVuQixZQUNtQixVQUFzQjtRQUF0QixlQUFVLEdBQVYsVUFBVSxDQUFZO0lBRXpDLENBQUM7SUFFRCxxQkFBcUI7UUFDbkIsSUFBSSxDQUFDLFVBQVUsQ0FBQyxxQkFBcUIsRUFBRSxDQUFDO0lBQzFDLENBQUM7SUFBQSxDQUFDO0lBRUYsYUFBYSxDQUFDLE1BQWMsQ0FBQyxFQUFFLE1BQWMsQ0FBQztRQUM1QyxPQUFPO0lBQ1QsQ0FBQztJQUdELGFBQWEsQ0FBQyxVQUFrQixDQUFDLEVBQUUsVUFBa0IsQ0FBQztRQUNwRCxPQUFPO0lBQ1QsQ0FBQztJQUVELGdCQUFnQixDQUFDLFdBQW9CLElBQUk7UUFDdkMsT0FBTztJQUNULENBQUM7SUFFRCxnQkFBZ0IsQ0FBQyxPQUE2QixFQUFFLFdBQW9CLElBQUk7UUFDdEUsT0FBTztJQUNULENBQUM7SUFFRCxlQUFlLENBQUMsT0FBNkI7UUFDM0MsT0FBTztRQUNQLE9BQU8sSUFBSSxDQUFDO0lBQ2QsQ0FBQztJQUVELGVBQWU7UUFDYixPQUFPLElBQUksQ0FBQyxDQUFDLE9BQU87SUFDdEIsQ0FBQztJQUVELGdCQUFnQixDQUFDLFdBQW9CLElBQUk7UUFDdkMsT0FBTztJQUNULENBQUM7SUFFRCxlQUFlO1FBQ2IsT0FBTyxJQUFJLENBQUMsQ0FBQyxPQUFPO0lBQ3RCLENBQUM7SUFFRCxPQUFPO1FBQ0wsSUFBSSxDQUFDLFVBQVUsQ0FBQyxPQUFPLEVBQUUsQ0FBQztJQUM1QixDQUFDO0NBRUYiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBUYWJsZVNjb3BlIH0gZnJvbSBcIi4vdGFibGUtc2NvcGVcIjtcbmltcG9ydCB7IENvbHVtbkRlZklmIH0gZnJvbSBcIi4vZGF0YS90YWJsZW1vZGVsL2NvbHVtbi9jb2x1bW4tZGVmLmlmXCI7XG5cblxuZXhwb3J0IGNsYXNzIFRhYmxlQXBpIHtcblxuICBjb25zdHJ1Y3RvcihcbiAgICBwcml2YXRlIHJlYWRvbmx5IHRhYmxlU2NvcGU6IFRhYmxlU2NvcGVcbiAgKSB7XG4gIH1cblxuICBleHRlcm5hbEZpbHRlckNoYW5nZWQoKTogdm9pZCB7XG4gICAgdGhpcy50YWJsZVNjb3BlLmV4dGVybmFsRmlsdGVyQ2hhbmdlZCgpO1xuICB9O1xuXG4gIHNjcm9sbFRvUGl4ZWwoX3B4OiBudW1iZXIgPSAwLCBfcHk6IG51bWJlciA9IDApIHtcbiAgICAvLyBUT0RPXG4gIH1cblxuXG4gIHNjcm9sbFRvSW5kZXgoX2luZGV4WDogbnVtYmVyID0gMCwgX2luZGV4WTogbnVtYmVyID0gMCkge1xuICAgIC8vIFRPRE9cbiAgfVxuXG4gIHNldEhlYWRlclZpc2libGUoX3Zpc2libGU6IGJvb2xlYW4gPSB0cnVlKSB7XG4gICAgLy8gVE9ET1xuICB9XG5cbiAgc2V0Q29sdW1uVmlzaWJsZShfY29sdW1uOiBudW1iZXIgfCBDb2x1bW5EZWZJZiwgX3Zpc2libGU6IGJvb2xlYW4gPSB0cnVlKSB7XG4gICAgLy8gVE9ET1xuICB9XG5cbiAgaXNDb2x1bW5WaXNpYmxlKF9jb2x1bW46IG51bWJlciB8IENvbHVtbkRlZklmKTogYm9vbGVhbiB7XG4gICAgLy8gVE9ET1xuICAgIHJldHVybiB0cnVlO1xuICB9XG5cbiAgaXNIZWFkZXJWaXNpYmxlKCk6IGJvb2xlYW4ge1xuICAgIHJldHVybiB0cnVlOyAvLyBUT0RPXG4gIH1cblxuICBzZXRGb290ZXJWaXNpYmxlKF92aXNpYmxlOiBib29sZWFuID0gdHJ1ZSkge1xuICAgIC8vIFRPRE9cbiAgfVxuXG4gIGlzRm9vdGVyVmlzaWJsZSgpOiBib29sZWFuIHtcbiAgICByZXR1cm4gdHJ1ZTsgLy8gVE9ET1xuICB9XG5cbiAgcmVwYWludCgpIHtcbiAgICB0aGlzLnRhYmxlU2NvcGUucmVwYWludCgpO1xuICB9XG5cbn1cbiJdfQ==
@@ -19,8 +19,9 @@ export class TableModelFactory {
19
19
  else {
20
20
  headerAreaModel = new AreaModelHidden();
21
21
  }
22
- const footerAreaModel = footer ? new AreaModelArrayArray('footer', footer, defaultRowHeights.footer, columnDefs) : new AreaModelHidden();
23
- return new TableModel(headerAreaModel, new AreaModelObjectArrayWithColumndefs('body', rows, columnDefs, defaultRowHeights.body), footerAreaModel, fixedLeftColumnCount, fixedRightColumnCount, rowCheckboxVisible, defaultRowHeights, columnDefs, columnSizes);
22
+ const footerAreaModel = footer ? new AreaModelArrayArray("footer", footer, defaultRowHeights.footer, columnDefs) : new AreaModelHidden();
23
+ const bodyAreaModel = new AreaModelObjectArrayWithColumndefs("body", rows, columnDefs, defaultRowHeights.body);
24
+ return new TableModel(headerAreaModel, bodyAreaModel, footerAreaModel, fixedLeftColumnCount, fixedRightColumnCount, rowCheckboxVisible, defaultRowHeights, columnDefs, columnSizes);
24
25
  }
25
26
  static createByObjectArrayParam(param) {
26
27
  const rowCheckboxVisible = param.rowCheckboxVisible !== undefined ? param.rowCheckboxVisible : false;
@@ -47,7 +48,7 @@ export class TableModelFactory {
47
48
  columnCount = data[0].length;
48
49
  }
49
50
  }
50
- return TableModelFactory.createByAreaModels(new AreaModelArrayArray('header', columnLabels), new AreaModelArrayArray('body', data), new AreaModelArrayArray('footer', footer), fixedLeftColumnCount, fixedRightColumnCount, rowCheckboxVisible, defaultRowHeights, columnDefs, columnSizes, overridingColumnWidth, columnCount);
51
+ return TableModelFactory.createByAreaModels(new AreaModelArrayArray("header", columnLabels, defaultRowHeights.header), new AreaModelArrayArray("body", data, defaultRowHeights.body), new AreaModelArrayArray("footer", footer, defaultRowHeights.footer), fixedLeftColumnCount, fixedRightColumnCount, rowCheckboxVisible, defaultRowHeights, columnDefs, columnSizes, overridingColumnWidth, columnCount);
51
52
  }
52
53
  static createByArrayOfArrayParams(param) {
53
54
  if (param.overridingColumnWidth === undefined) {
@@ -108,8 +109,7 @@ export class TableModelFactory {
108
109
  const children = data[childrenProperty];
109
110
  if (children) {
110
111
  for (const r of children) {
111
- let tid = '' + TableModelFactory.treeNodeIdx++;
112
- const tr = new TreeRow(r, true, [], parent, deep + 1); //, false, tid, parent.path + '/' + tid);
112
+ const tr = new TreeRow(r, true, [], parent, deep + 1);
113
113
  parent.children?.push(tr);
114
114
  TableModelFactory.buildTreeRow(r, childrenProperty, tr, deep + 1);
115
115
  if (deep > deepMaxLimit) {
@@ -121,5 +121,4 @@ export class TableModelFactory {
121
121
  return parent;
122
122
  }
123
123
  }
124
- TableModelFactory.treeNodeIdx = 0;
125
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidGFibGUtbW9kZWwtZmFjdG9yeS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL2xpYnMvdGFibGUvc3JjL2xpYi90YWJsZS90YWJsZS1tb2RlbC1mYWN0b3J5LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUVBLE9BQU8sRUFBQyxpQkFBaUIsRUFBQyxNQUFNLG9DQUFvQyxDQUFDO0FBQ3JFLE9BQU8sRUFBQyxZQUFZLEVBQUMsTUFBTSw4QkFBOEIsQ0FBQztBQUMxRCxPQUFPLEVBQUMsbUJBQW1CLEVBQUMsTUFBTSxvREFBb0QsQ0FBQztBQUN2RixPQUFPLEVBQUMsT0FBTyxFQUFDLE1BQU0sd0JBQXdCLENBQUM7QUFDL0MsT0FBTyxFQUFDLGFBQWEsRUFBQyxNQUFNLDZDQUE2QyxDQUFDO0FBRTFFLE9BQU8sRUFBQyxVQUFVLEVBQUMsTUFBTSwrQkFBK0IsQ0FBQztBQUl6RCxPQUFPLEVBQUMsa0NBQWtDLEVBQUMsTUFBTSxxRUFBcUUsQ0FBQztBQUN2SCxPQUFPLEVBQUMsZUFBZSxFQUFDLE1BQU0sK0NBQStDLENBQUM7QUFDOUUsT0FBTyxFQUFDLGlCQUFpQixFQUFDLE1BQU0sZ0NBQWdDLENBQUM7QUFFakUsTUFBTSxPQUFPLGlCQUFpQjtJQUtyQixNQUFNLENBQUMsbUJBQW1CLENBQy9CLElBQVMsRUFDVCxTQUFxQixFQUFFLEVBQ3ZCLFNBQXFCLEVBQUUsRUFDdkIsdUJBQStCLENBQUMsRUFDaEMsd0JBQWdDLENBQUMsRUFDakMscUJBQThCLEtBQUssRUFDbkMsb0JBQXlDLElBQUksaUJBQWlCLEVBQUUsRUFDaEUsVUFBeUIsRUFDekIsY0FBd0IsRUFBRTtRQUUxQixJQUFJLGVBQTRCLENBQUM7UUFDakMsSUFBSSxNQUFNLEVBQUUsTUFBTSxFQUFFO1lBQ2xCLGVBQWUsR0FBRyxJQUFJLG1CQUFtQixDQUFTLFFBQVEsRUFBRSxNQUFNLEVBQUUsaUJBQWlCLENBQUMsTUFBTSxFQUFFLFVBQVUsQ0FBQyxD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T0FBTyxNQUFNLENBQUM7U0FDZjtRQUNELGFBQWE7UUFDYixNQUFNLFFBQVEsR0FBb0IsSUFBSSxDQUFDLGdCQUFnQixDQUFDLENBQUM7UUFDekQsSUFBSSxRQUFRLEVBQUU7WUFDWixLQUFLLE1BQU0sQ0FBQyxJQUFJLFFBQVEsRUFBRTtnQkFDeEIsSUFBSSxHQUFHLEdBQUcsRUFBRSxHQUFHLGlCQUFpQixDQUFDLFdBQVcsRUFBRSxDQUFDO2dCQUMvQyxNQUFNLEVBQUUsR0FBRyxJQUFJLE9BQU8sQ0FBSSxDQUFDLEVBQUUsSUFBSSxFQUFFLEVBQUUsRUFBRSxNQUFNLEVBQUUsSUFBSSxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMseUNBQXlDO2dCQUNuRyxNQUFNLENBQUMsUUFBUSxFQUFFLElBQUksQ0FBQyxFQUFFLENBQUMsQ0FBQztnQkFDMUIsaUJBQWlCLENBQUMsWUFBWSxDQUM1QixDQUFDLEVBQ0QsZ0JBQWdCLEVBQ2hCLEVBQUUsRUFDRixJQUFJLEdBQUcsQ0FBQyxDQUNULENBQUM7Z0JBQ0YsSUFBSSxJQUFJLEdBQUcsWUFBWSxFQUFFO29CQUN2QixPQUFPLENBQUMsSUFBSSxDQUFDLDBCQUEwQixFQUFFLElBQUksQ0FBQyxDQUFDO29CQUMvQyxPQUFPLE1BQU0sQ0FBQztpQkFDZjthQUNGO1NBQ0Y7UUFDRCxPQUFPLE1BQU0sQ0FBQztJQUNoQixDQUFDOztBQTNTTSw2QkFBVyxHQUFHLENBQUMsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7VGFibGVPcHRpb25zSWZ9IGZyb20gXCIuL2RhdGEvb3B0aW9ucy90YWJsZS1vcHRpb25zLmlmXCI7XG5pbXBvcnQge1RhYmxlTW9kZWxJZn0gZnJvbSBcIi4vZGF0YS90YWJsZW1vZGVsL3RhYmxlLW1vZGVsLmlmXCI7XG5pbXBvcnQge0RlZmF1bHRSb3dIZWlnaHRzfSBmcm9tIFwiLi9kYXRhL29wdGlvbnMvZGVmYXVsdC1yb3ctaGVpZ2h0c1wiO1xuaW1wb3J0IHtUYWJsZU9wdGlvbnN9IGZyb20gXCIuL2RhdGEvb3B0aW9ucy90YWJsZS1vcHRpb25zXCI7XG5pbXBvcnQge0FyZWFNb2RlbEFycmF5QXJyYXl9IGZyb20gXCIuL2RhdGEvdGFibGVtb2RlbC9hcmVhbW9kZWwvYXJlYS1tb2RlbC1hcnJheS1hcnJheVwiO1xuaW1wb3J0IHtUcmVlUm93fSBmcm9tIFwiLi9kYXRhL2NvbW1vbi90cmVlLXJvd1wiO1xuaW1wb3J0IHtBcmVhTW9kZWxUcmVlfSBmcm9tIFwiLi9kYXRhL3RhYmxlbW9kZWwvYXJlYW1vZGVsL2FyZWEtbW9kZWwtdHJlZVwiO1xuaW1wb3J0IHtDb2x1bW5EZWZJZn0gZnJvbSBcIi4vZGF0YS90YWJsZW1vZGVsL2NvbHVtbi9jb2x1bW4tZGVmLmlmXCI7XG5pbXBvcnQge1RhYmxlTW9kZWx9IGZyb20gXCIuL2RhdGEvdGFibGVtb2RlbC90YWJsZS1tb2RlbFwiO1xuaW1wb3J0IHtDaGVja2JveENvbHVtbn0gZnJvbSBcIi4vZGF0YS9jb21tb24vY2hlY2tib3gtY29sdW1uXCI7XG5pbXBvcnQge0FyZWFNb2RlbElmfSBmcm9tIFwiLi9kYXRhL3RhYmxlbW9kZWwvYXJlYW1vZGVsL2FyZWEtbW9kZWwuaWZcIjtcbmltcG9ydCB7RGVmYXVsdFJvd0hlaWdodHNJZn0gZnJvbSBcIi4vZGF0YS9vcHRpb25zL2RlZmF1bHQtcm93LWhlaWdodHMuaWZcIjtcbmltcG9ydCB7QXJlYU1vZGVsT2JqZWN0QXJyYXlXaXRoQ29sdW1uZGVmc30gZnJvbSBcIi4vZGF0YS90YWJsZW1vZGVsL2FyZWFtb2RlbC9hcmVhLW1vZGVsLW9iamVjdC1hcnJheS13aXRoLWNvbHVtbmRlZnNcIjtcbmltcG9ydCB7QXJlYU1vZGVsSGlkZGVufSBmcm9tIFwiLi9kYXRhL3RhYmxlbW9kZWwvYXJlYW1vZGVsL2FyZWEtbW9kZWwtaGlkZGVuXCI7XG5pbXBvcnQge1RyZWVDaGVja2JveE1vZGVsfSBmcm9tIFwiLi9jaGVja2JveC90cmVlLWNoZWNrYm94LW1vZGVsXCI7XG5cbmV4cG9ydCBjbGFzcyBUYWJsZU1vZGVsRmFjdG9yeSB7XG5cblxuICBzdGF0aWMgdHJlZU5vZGVJZHggPSAwO1xuXG4gIHB1YmxpYyBzdGF0aWMgY3JlYXRlQnlPYmplY3RBcnJheTxUPihcbiAgICByb3dzOiBUW10sXG4gICAgaGVhZGVyOiBzdHJpbmdbXVtdID0gW10sXG4gICAgZm9vdGVyOiBzdHJpbmdbXVtdID0gW10sXG4gICAgZml4ZWRMZWZ0Q29sdW1uQ291bnQ6IG51bWJlciA9IDAsXG4gICAgZml4ZWRSaWdodENvbHVtbkNvdW50OiBudW1iZXIgPSAwLFxuICAgIHJvd0NoZWNrYm94VmlzaWJsZTogYm9vbGVhbiA9IGZhbHNlLFxuICAgIGRlZmF1bHRSb3dIZWlnaHRzOiBEZWZhdWx0Um93SGVpZ2h0c0lmID0gbmV3IERlZmF1bHRSb3dIZWlnaHRzKCksXG4gICAgY29sdW1uRGVmczogQ29sdW1uRGVmSWZbXSxcbiAgICBjb2x1bW5TaXplczogbnVtYmVyW10gPSBbXVxuICApIHtcbiAgICBsZXQgaGVhZGVyQXJlYU1vZGVsOiBBcmVhTW9kZWxJZjtcbiAgICBpZiAoaGVhZGVyPy5sZW5ndGgpIHtcbiAgICAgIGhlYWRlckFyZWFNb2RlbCA9IG5ldyBBcmVhTW9kZWxBcnJheUFycmF5PHN0cmluZz4oJ2hlYWRlcicsIGhlYWRlciwgZGVmYXVsdFJvd0hlaWdodHMuaGVhZGVyLCBjb2x1bW5EZWZzKTtcbiAgICB9IGVsc2UgaWYgKGNvbHVtbkRlZnM/Lmxlbmd0aCkge1xuICAgICAgaGVhZGVyQXJlYU1vZGVsID0gbmV3IEFyZWFNb2RlbEFycmF5QXJyYXk8c3RyaW5nPignaGVhZGVyJywgW2NvbHVtbkRlZnMubWFwKGRlZiA9PiBkZWYuaGVhZGVyTGFiZWwpXSwgZGVmYXVsdFJvd0hlaWdodHMuaGVhZGVyLCBjb2x1bW5EZWZzKVxuICAgIH0gZWxzZSB7XG4gICAgICBoZWFkZXJBcmVhTW9kZWwgPSBuZXcgQXJlYU1vZGVsSGlkZGVuKCk7XG4gICAgfVxuICAgIGNvbnN0IGZvb3RlckFyZWFNb2RlbCA9IGZvb3RlciA/IG5ldyBBcmVhTW9kZWxBcnJheUFycmF5PHN0cmluZz4oJ2Zvb3RlcicsIGZvb3RlciwgZGVmYXVsdFJvd0hlaWdodHMuZm9vdGVyLCBjb2x1bW5EZWZzKSA6IG5ldyBBcmVhTW9kZWxIaWRkZW4oKTtcblxuICAgIHJldHVybiBuZXcgVGFibGVNb2RlbChcbiAgICAgIGhlYWRlckFyZWFNb2RlbCxcbiAgICAgIG5ldyBBcmVhTW9kZWxPYmplY3RBcnJheVdpdGhDb2x1bW5kZWZzPFQ+KCdib2R5Jywgcm93cywgY29sdW1uRGVmcywgZGVmYXVsdFJvd0hlaWdodHMuYm9keSksXG4gICAgICBmb290ZXJBcmVhTW9kZWwsXG4gICAgICBmaXhlZExlZnRDb2x1bW5Db3VudCxcbiAgICAgIGZpeGVkUmlnaHRDb2x1bW5Db3VudCxcbiAgICAgIHJvd0NoZWNrYm94VmlzaWJsZSxcbiAgICAgIGRlZmF1bHRSb3dIZWlnaHRzLFxuICAgICAgY29sdW1uRGVmcyxcbiAgICAgIGNvbHVtblNpemVzXG4gICAgKTtcbiAgfVxuXG4gIHB1YmxpYyBzdGF0aWMgY3JlYXRlQnlPYmplY3RBcnJheVBhcmFtPFQ+KHBhcmFtOiB7XG4gICAgcm93czogVFtdLFxuICAgIGhlYWRlcj86IHN0cmluZ1tdW10sXG4gICAgZm9vdGVyPzogc3RyaW5nW11bXSxcbiAgICBmaXhlZExlZnRDb2x1bW5Db3VudD86IG51bWJlcixcbiAgICBmaXhlZFJpZ2h0Q29sdW1uQ291bnQ/OiBudW1iZXIsXG4gICAgcm93Q2hlY2tib3hWaXNpYmxlPzogYm9vbGVhbixcbiAgICBkZWZhdWx0Um93SGVpZ2h0cz86IERlZmF1bHRSb3dIZWlnaHRzSWYsXG4gICAgY29sdW1uRGVmcz86IENvbHVtbkRlZklmW10sXG4gICAgY29sdW1uU2l6ZXM/OiBudW1iZXJbXVxuICB9KSB7XG4gICAgY29uc3Qgcm93Q2hlY2tib3hWaXNpYmxlID0gcGFyYW0ucm93Q2hlY2tib3hWaXNpYmxlICE9PSB1bmRlZmluZWQgPyBwYXJhbS5yb3dDaGVja2JveFZpc2libGUgOiBmYWxzZTtcbiAgICByZXR1cm4gVGFibGVNb2RlbEZhY3RvcnkuY3JlYXRlQnlPYmplY3RBcnJheTxUPihcbiAgICAgIHBhcmFtLnJvd3MsXG4gICAgICBwYXJhbS5oZWFkZXIgPz8gW10sXG4gICAgICBwYXJhbS5mb290ZXIgPz8gW10sXG4gICAgICBwYXJhbS5maXhlZExlZnRDb2x1bW5Db3VudCA/PyAwLFxuICAgICAgcGFyYW0uZml4ZWRSaWdodENvbHVtbkNvdW50ID8/IDAsXG4gICAgICByb3dDaGVja2JveFZpc2libGUsXG4gICAgICBwYXJhbS5kZWZhdWx0Um93SGVpZ2h0cyA/PyBuZXcgRGVmYXVsdFJvd0hlaWdodHMoKSxcbiAgICAgIHBhcmFtLmNvbHVtbkRlZnMgPz8gW10sXG4gICAgICBwYXJhbS5jb2x1bW5TaXplcyA/PyBbXVxuICAgICk7XG4gIH1cblxuICBwdWJsaWMgc3RhdGljIGNyZWF0ZUJ5QXJlYU1vZGVscyhcbiAgICBoZWFkZXJBcmVhTW9kZWw6IEFyZWFNb2RlbElmID0gbmV3IEFyZWFNb2RlbEhpZGRlbigpLFxuICAgIGJvZHlBcmVhTW9kZWw6IEFyZWFNb2RlbElmLFxuICAgIGZvb3RlckFyZWFNb2RlbDogQXJlYU1vZGVsSWYgPSBuZXcgQXJlYU1vZGVsSGlkZGVuKCksXG4gICAgZml4ZWRMZWZ0Q29sdW1uQ291bnQ6IG51bWJlciA9IDAsXG4gICAgZml4ZWRSaWdodENvbHVtbkNvdW50OiBudW1iZXIgPSAwLFxuICAgIHJvd0NoZWNrYm94VmlzaWJsZTogYm9vbGVhbiA9IGZhbHNlLFxuICAgIGRlZmF1bHRSb3dIZWlnaHRzOiBEZWZhdWx0Um93SGVpZ2h0c0lmID0gbmV3IERlZmF1bHRSb3dIZWlnaHRzKCksXG4gICAgY29sdW1uRGVmczogQ29sdW1uRGVmSWZbXSxcbiAgICBjb2x1bW5TaXplczogbnVtYmVyW10gPSBbXSxcbiAgICBvdmVycmlkaW5nQ29sdW1uV2lkdGg6IG51bWJlciA9IC0xLFxuICAgIGNvbHVtbkNvdW50OiBudW1iZXJcbiAgKSB7XG4gICAgcmV0dXJuIG5ldyBUYWJsZU1vZGVsKFxuICAgICAgaGVhZGVyQXJlYU1vZGVsLFxuICAgICAgYm9keUFyZWFNb2RlbCxcbiAgICAgIGZvb3RlckFyZWFNb2RlbCxcbiAgICAgIGZpeGVkTGVmdENvbHVtbkNvdW50LFxuICAgICAgZml4ZWRSaWdodENvbHVtbkNvdW50LFxuICAgICAgcm93Q2hlY2tib3hWaXNpYmxlLFxuICAgICAgZGVmYXVsdFJvd0hlaWdodHMsXG4gICAgICBjb2x1bW5EZWZzLFxuICAgICAgY29sdW1uU2l6ZXMsXG4gICAgICBvdmVycmlkaW5nQ29sdW1uV2lkdGgsXG4gICAgICBjb2x1bW5Db3VudFxuICAgICk7XG4gIH1cblxuICBwdWJsaWMgc3RhdGljIGNyZWF0ZUJ5QXJlYU1vZGVsc1BhcmFtKHBhcmFtOiB7XG4gICAgaGVhZGVyQXJlYU1vZGVsPzogQXJlYU1vZGVsSWYsXG4gICAgYm9keUFyZWFNb2RlbDogQXJlYU1vZGVsSWYsXG4gICAgZm9vdGVyQXJlYU1vZGVsPzogQXJlYU1vZGVsSWYsXG4gICAgZml4ZWRMZWZ0Q29sdW1uQ291bnQ/OiBudW1iZXIsXG4gICAgZml4ZWRSaWdodENvbHVtbkNvdW50PzogbnVtYmVyLFxuICAgIHJvd0NoZWNrYm94VmlzaWJsZT86IGJvb2xlYW4sXG4gICAgZGVmYXVsdFJvd0hlaWdodHM/OiBEZWZhdWx0Um93SGVpZ2h0c0lmLFxuICAgIGNvbHVtbkRlZnM/OiBDb2x1bW5EZWZJZltdLFxuICAgIGNvbHVtblNpemVzPzogbnVtYmVyW10sXG4gICAgb3ZlcnJpZGluZ0NvbHVtbldpZHRoPzogbnVtYmVyLFxuICAgIGNvbHVtbkNvdW50PzogbnVtYmVyXG4gIH0pIHtcbiAgICByZXR1cm4gVGFibGVNb2RlbEZhY3RvcnkuY3JlYXRlQnlBcmVhTW9kZWxzKFxuICAgICAgcGFyYW0uaGVhZGVyQXJlYU1vZGVsID8/IG5ldyBBcmVhTW9kZWxIaWRkZW4oKSxcbiAgICAgIHBhcmFtLmJvZHlBcmVhTW9kZWwsXG4gICAgICBwYXJhbS5mb290ZXJBcmVhTW9kZWwgPz8gbmV3IEFyZWFNb2RlbEhpZGRlbigpLFxuICAgICAgcGFyYW0uZml4ZWRMZWZ0Q29sdW1uQ291bnQgPz8gMCxcbiAgICAgIHBhcmFtLmZpeGVkUmlnaHRDb2x1bW5Db3VudCA/PyAwLFxuICAgICAgcGFyYW0ucm93Q2hlY2tib3hWaXNpYmxlID09PSB1bmRlZmluZWQgPyBmYWxzZSA6IHBhcmFtLnJvd0NoZWNrYm94VmlzaWJsZSxcbiAgICAgIHBhcmFtLmRlZmF1bHRSb3dIZWlnaHRzLFxuICAgICAgcGFyYW0uY29sdW1uRGVmcyA/PyBbXSxcbiAgICAgIHBhcmFtLmNvbHVtblNpemVzID8/IFtdLFxuICAgICAgcGFyYW0ub3ZlcnJpZGluZ0NvbHVtbldpZHRoID8/IC0xLFxuICAgICAgcGFyYW0uY29sdW1uQ291bnQgPz8gMFxuICAgICk7XG4gIH1cblxuICBwdWJsaWMgc3RhdGljIGNyZWF0ZUJ5QXJyYXlPZkFycmF5PFQ+KFxuICAgIGNvbHVtbkxhYmVsczogc3RyaW5nW11bXSxcbiAgICBkYXRhOiBUW11bXSxcbiAgICBmb290ZXI6IHN0cmluZ1tdW10gPSBbXSxcbiAgICBmaXhlZExlZnRDb2x1bW5Db3VudDogbnVtYmVyID0gMCxcbiAgICBmaXhlZFJpZ2h0Q29sdW1uQ291bnQ6IG51bWJlciA9IDAsXG4gICAgcm93Q2hlY2tib3hWaXNpYmxlOiBib29sZWFuID0gZmFsc2UsXG4gICAgZGVmYXVsdFJvd0hlaWdodHM6IERlZmF1bHRSb3dIZWlnaHRzSWYgPSBuZXcgRGVmYXVsdFJvd0hlaWdodHMoKSxcbiAgICBjb2x1bW5EZWZzOiBDb2x1bW5EZWZJZltdLFxuICAgIGNvbHVtblNpemVzOiBudW1iZXJbXSA9IFtdLFxuICAgIG92ZXJyaWRpbmdDb2x1bW5XaWR0aDogbnVtYmVyID0gLTEsXG4gICAgY29sdW1uQ291bnQ6IG51bWJlciA9IDBcbiAgKSB7XG4gICAgaWYgKCFjb2x1bW5Db3VudCkge1xuICAgICAgaWYgKGNvbHVtbkRlZnM/Lmxlbmd0aCkge1xuICAgICAgICBjb2x1bW5Db3VudCA9IGNvbHVtbkRlZnMubGVuZ3RoO1xuICAgICAgfSBlbHNlIGlmIChjb2x1bW5TaXplcz8ubGVuZ3RoKSB7XG4gICAgICAgIGNvbHVtbkNvdW50ID0gY29sdW1uU2l6ZXM/Lmxlbmd0aDtcbiAgICAgIH0gZWxzZSBpZiAoY29sdW1uTGFiZWxzPy5sZW5ndGggJiYgY29sdW1uTGFiZWxzWzBdLmxlbmd0aCkge1xuICAgICAgICBjb2x1bW5Db3VudCA9IGNvbHVtbkxhYmVsc1swXS5sZW5ndGg7XG4gICAgICB9IGVsc2UgaWYgKGRhdGE/Lmxlbmd0aCAmJiBkYXRhWzBdLmxlbmd0aCkge1xuICAgICAgICBjb2x1bW5Db3VudCA9IGRhdGFbMF0ubGVuZ3RoO1xuICAgICAgfVxuICAgIH1cblxuICAgIHJldHVybiBUYWJsZU1vZGVsRmFjdG9yeS5jcmVhdGVCeUFyZWFNb2RlbHMoXG4gICAgICBuZXcgQXJlYU1vZGVsQXJyYXlBcnJheTxzdHJpbmc+KCdoZWFkZXInLCBjb2x1bW5MYWJlbHMpLFxuICAgICAgbmV3IEFyZWFNb2RlbEFycmF5QXJyYXk8VD4oJ2JvZHknLCBkYXRhKSxcbiAgICAgIG5ldyBBcmVhTW9kZWxBcnJheUFycmF5PHN0cmluZz4oJ2Zvb3RlcicsIGZvb3RlciksXG4gICAgICBmaXhlZExlZnRDb2x1bW5Db3VudCxcbiAgICAgIGZpeGVkUmlnaHRDb2x1bW5Db3VudCxcbiAgICAgIHJvd0NoZWNrYm94VmlzaWJsZSxcbiAgICAgIGRlZmF1bHRSb3dIZWlnaHRzLFxuICAgICAgY29sdW1uRGVmcyxcbiAgICAgIGNvbHVtblNpemVzLFxuICAgICAgb3ZlcnJpZGluZ0NvbHVtbldpZHRoLFxuICAgICAgY29sdW1uQ291bnRcbiAgICApO1xuICB9XG5cbiAgcHVibGljIHN0YXRpYyBjcmVhdGVCeUFycmF5T2ZBcnJheVBhcmFtczxUPihwYXJhbToge1xuICAgIGNvbHVtbkxhYmVscz86IHN0cmluZ1tdW10sXG4gICAgZGF0YTogVFtdW10sXG4gICAgZm9vdGVyPzogYW55W11bXSxcbiAgICBmaXhlZExlZnRDb2x1bW5Db3VudD86IG51bWJlcixcbiAgICBmaXhlZFJpZ2h0Q29sdW1uQ291bnQ/OiBudW1iZXIsXG4gICAgcm93Q2hlY2tib3hWaXNpYmxlPzogYm9vbGVhbixcbiAgICBkZWZhdWx0Um93SGVpZ2h0cz86IERlZmF1bHRSb3dIZWlnaHRzSWYsXG4gICAgY29sdW1uRGVmcz86IENvbHVtbkRlZklmW10sXG4gICAgY29sdW1uU2l6ZXM/OiBudW1iZXJbXSxcbiAgICBvdmVycmlkaW5nQ29sdW1uV2lkdGg/OiBudW1iZXIsXG4gICAgY29sdW1uQ291bnQ/OiBudW1iZXJcbiAgfSkge1xuICAgIGlmIChwYXJhbS5vdmVycmlkaW5nQ29sdW1uV2lkdGggPT09IHVuZGVmaW5lZCkge1xuICAgICAgcGFyYW0ub3ZlcnJpZGluZ0NvbHVtbldpZHRoID0gLTE7XG4gICAgfVxuICAgIHJldHVybiBUYWJsZU1vZGVsRmFjdG9yeS5jcmVhdGVCeUFycmF5T2ZBcnJheTxUPihcbiAgICAgIHBhcmFtLmNvbHVtbkxhYmVscyA/PyBbXSxcbiAgICAgIHBhcmFtLmRhdGEsXG4gICAgICBwYXJhbS5mb290ZXIgPz8gW10sXG4gICAgICBwYXJhbS5maXhlZExlZnRDb2x1bW5Db3VudCA/PyAwLFxuICAgICAgcGFyYW0uZml4ZWRSaWdodENvbHVtbkNvdW50ID8/IDAsXG4gICAgICBwYXJhbS5yb3dDaGVja2JveFZpc2libGUgPT09IHVuZGVmaW5lZCA/IGZhbHNlIDogcGFyYW0ucm93Q2hlY2tib3hWaXNpYmxlLFxuICAgICAgcGFyYW0uZGVmYXVsdFJvd0hlaWdodHMgPz8gbmV3IERlZmF1bHRSb3dIZWlnaHRzKDQwLCA0MCwgNDApLFxuICAgICAgcGFyYW0uY29sdW1uRGVmcyA/PyBbXSxcbiAgICAgIHBhcmFtLmNvbHVtblNpemVzID8/IFtdLFxuICAgICAgcGFyYW0ub3ZlcnJpZGluZ0NvbHVtbldpZHRoLFxuICAgICAgcGFyYW0uY29sdW1uQ291bnRcbiAgICApO1xuICB9XG5cbiAgc3RhdGljIGJ1aWxkQnlUeXBlZFJvd3NQYXJhbTxUPihwYXJhbToge1xuICAgIHJvd3M6IFRbXSxcbiAgICBjb2x1bW5EZWZzOiBDb2x1bW5EZWZJZltdLFxuICAgIHRhYmxlT3B0aW9ucz86IFRhYmxlT3B0aW9uc0lmLFxuICAgIGZpeGVkTGVmdENvbHVtbkNvdW50PzogbnVtYmVyLFxuICAgIGZpeGVkUmlnaHRDb2x1bW5Db3VudD86IG51bWJlclxuICB9KTogVGFibGVNb2RlbElmIHwgdW5kZWZpbmVkIHtcblxuICAgIHJldHVybiBUYWJsZU1vZGVsRmFjdG9yeS5idWlsZEJ5VHlwZWRSb3dzKFxuICAgICAgcGFyYW0ucm93cyA/PyBbXSxcbiAgICAgIHBhcmFtLmNvbHVtbkRlZnMsXG4gICAgICBwYXJhbS50YWJsZU9wdGlvbnMgPz8gbmV3IFRhYmxlT3B0aW9ucygpLFxuICAgICAgcGFyYW0uZml4ZWRMZWZ0Q29sdW1uQ291bnQgPz8gMCxcbiAgICAgIHBhcmFtLmZpeGVkUmlnaHRDb2x1bW5Db3VudCA/PyAwLFxuICAgIClcbiAgfVxuXG4gIHN0YXRpYyBidWlsZEJ5VHlwZWRSb3dzPFQ+KFxuICAgIHJvd3M6IFRbXSxcbiAgICBjb2x1bW5EZWZzOiBDb2x1bW5EZWZJZltdLFxuICAgIHRhYmxlT3B0aW9uczogVGFibGVPcHRpb25zSWYgPSBuZXcgVGFibGVPcHRpb25zKCksXG4gICAgZml4ZWRMZWZ0Q29sdW1uQ291bnQ6IG51bWJlciA9IDAsXG4gICAgZml4ZWRSaWdodENvbHVtbkNvdW50OiBudW1iZXIgPSAwLFxuICApOiBUYWJsZU1vZGVsSWYge1xuXG4gICAgY29uc3QgZGVmYXVsdFJvd0hlaWdodHMgPSB0YWJsZU9wdGlvbnMuZGVmYXVsdFJvd0hlaWdodHM7XG4gICAgY29uc3QgY2hlY2tib3hFeHRyYUNvbHVtblZpc2libGUgPSBjb2x1bW5EZWZzWzBdLnByb3BlcnR5ID09PSAnQ2hlY2tib3hDb2x1bW4nO1xuXG4gICAgaWYgKHJvd3M/Lmxlbmd0aCAmJiByb3dzWzBdIGluc3RhbmNlb2YgVHJlZVJvdykge1xuICAgICAgLy8gVHJlZTpcbiAgICAgIGNvbnN0IHRyZWVSb3dzID0gcm93cyBhcyBUcmVlUm93PFQ+W107XG4gICAgICBjb25zdCBib2R5YXJlYU1vZGVsID0gbmV3IEFyZWFNb2RlbFRyZWUoXG4gICAgICAgICdib2R5JyxcbiAgICAgICAgdHJlZVJvd3MsXG4gICAgICAgIGRlZmF1bHRSb3dIZWlnaHRzLmJvZHksXG4gICAgICAgIGNvbHVtbkRlZnMsXG4gICAgICApO1xuICAgICAgaWYgKGNoZWNrYm94RXh0cmFDb2x1bW5WaXNpYmxlIHx8IHRhYmxlT3B0aW9ucy5zaG93Q2hlY2tib3hXaWhvdXRFeHRyYUNvbHVtbikge1xuICAgICAgICBib2R5YXJlYU1vZGVsLnJvd1NlbGVjdGlvbk1vZGVsID0gbmV3IFRyZWVDaGVja2JveE1vZGVsKHRyZWVSb3dzKTtcbiAgICAgIH1cbiAgICAgIHJldHVybiBUYWJsZU1vZGVsRmFjdG9yeS5jcmVhdGVCeUFyZWFNb2RlbHNQYXJhbSh7XG4gICAgICAgIGhlYWRlckFyZWFNb2RlbDogbmV3IEFyZWFNb2RlbEFycmF5QXJyYXk8c3RyaW5nPignaGVhZGVyJywgW2NvbHVtbkRlZnMubWFwKGRlZiA9PiBkZWYuaGVhZGVyTGFiZWwpXSwgZGVmYXVsdFJvd0hlaWdodHMuaGVhZGVyKSxcbiAgICAgICAgYm9keUFyZWFNb2RlbDogYm9keWFyZWFNb2RlbCxcbiAgICAgICAgZm9vdGVyQXJlYU1vZGVsOiBuZXcgQXJlYU1vZGVsQXJyYXlBcnJheTxzdHJpbmc+KCdmb290ZXInLCBbXSwgZGVmYXVsdFJvd0hlaWdodHMuZm9vdGVyKSxcbiAgICAgICAgY29sdW1uRGVmcyxcbiAgICAgICAgZml4ZWRMZWZ0Q29sdW1uQ291bnQsXG4gICAgICAgIGZpeGVkUmlnaHRDb2x1bW5Db3VudCxcbiAgICAgICAgZGVmYXVsdFJvd0hlaWdodHM6IHRhYmxlT3B0aW9ucy5kZWZhdWx0Um93SGVpZ2h0cyxcbiAgICAgICAgcm93Q2hlY2tib3hWaXNpYmxlOiBmYWxzZSxcbiAgICAgICAgY29sdW1uU2l6ZXM6IFtdLFxuICAgICAgICBjb2x1bW5Db3VudDogY29sdW1uRGVmcy5sZW5ndGgsXG4gICAgICAgIG92ZXJyaWRpbmdDb2x1bW5XaWR0aDogLTFcbiAgICAgIH0pO1xuICAgIH1cblxuICAgIC8vIEZsYXQgdGFibGU6XG4gICAgcmV0dXJuIFRhYmxlTW9kZWxGYWN0b3J5LmNyZWF0ZUJ5T2JqZWN0QXJyYXlQYXJhbSh7XG4gICAgICByb3dzLFxuICAgICAgY29sdW1uRGVmcyxcbiAgICAgIGZpeGVkTGVmdENvbHVtbkNvdW50LFxuICAgICAgZml4ZWRSaWdodENvbHVtbkNvdW50LFxuICAgICAgZGVmYXVsdFJvd0hlaWdodHM6IHRhYmxlT3B0aW9ucy5kZWZhdWx0Um93SGVpZ2h0c1xuICAgIH0pO1xuXG4gIH1cblxuXG4gIHN0YXRpYyBidWlsZFRyZWVSb3dzPFQ+KFxuICAgIGRhdGE6IFRbXSxcbiAgICBjaGlsZHJlblByb3BlcnR5OiBzdHJpbmcgPSAnY2hpbGRyZW4nLFxuICAgIGRlZXBNYXhMaW1pdDogbnVtYmVyID0gMTIpOiBUcmVlUm93PFQ+W10ge1xuXG4gICAgY29uc3QgcmV0OiBUcmVlUm93PFQ+W10gPSBbXTtcbiAgICBmb3IgKGNvbnN0IHIgb2YgZGF0YSkge1xuICAgICAgcmV0LnB1c2goVGFibGVNb2RlbEZhY3RvcnkuYnVpbGRUcmVlUm93PFQ+KHIsIGNoaWxkcmVuUHJvcGVydHksIHVuZGVmaW5lZCwgMCwgZGVlcE1heExpbWl0KSk7XG4gICAgfVxuICAgIHJldHVybiByZXQ7XG4gIH1cblxuXG4gIHN0YXRpYyBidWlsZFRyZWVSb3c8VD4oXG4gICAgZGF0YTogVCxcbiAgICBjaGlsZHJlblByb3BlcnR5OiBzdHJpbmcgPSAnY2hpbGRyZW4nLFxuICAgIHBhcmVudDogVHJlZVJvdzxUPiA9IG5ldyBUcmVlUm93PFQ+KGRhdGEsIHRydWUsIFtdLCB1bmRlZmluZWQsIDApLCAvLywgZmFsc2UgLCAnMCcsICcwJyksXG4gICAgZGVlcDogbnVtYmVyID0gMCxcbiAgICBkZWVwTWF4TGltaXQ6IG51bWJlciA9IDEyKTogVHJlZVJvdzxUPiB7XG5cbiAgICBpZiAoZGVlcCA+IGRlZXBNYXhMaW1pdCkge1xuICAgICAgY29uc29sZS53YXJuKCdNYXggZGVlcCBsaW1pdCByZWFjaGVkOiAnLCBkZWVwKTtcbiAgICAgIHJldHVybiBwYXJlbnQ7XG4gICAgfVxuICAgIC8vIEB0cy1pZ25vcmVcbiAgICBjb25zdCBjaGlsZHJlbjogVFtdIHwgdW5kZWZpbmVkID0gZGF0YVtjaGlsZHJlblByb3BlcnR5XTtcbiAgICBpZiAoY2hpbGRyZW4pIHtcbiAgICAgIGZvciAoY29uc3QgciBvZiBjaGlsZHJlbikge1xuICAgICAgICBsZXQgdGlkID0gJycgKyBUYWJsZU1vZGVsRmFjdG9yeS50cmVlTm9kZUlkeCsrO1xuICAgICAgICBjb25zdCB0ciA9IG5ldyBUcmVlUm93PFQ+KHIsIHRydWUsIFtdLCBwYXJlbnQsIGRlZXAgKyAxKTsgLy8sIGZhbHNlLCB0aWQsIHBhcmVudC5wYXRoICsgJy8nICsgdGlkKTtcbiAgICAgICAgcGFyZW50LmNoaWxkcmVuPy5wdXNoKHRyKTtcbiAgICAgICAgVGFibGVNb2RlbEZhY3RvcnkuYnVpbGRUcmVlUm93KFxuICAgICAgICAgIHIsXG4gICAgICAgICAgY2hpbGRyZW5Qcm9wZXJ0eSxcbiAgICAgICAgICB0cixcbiAgICAgICAgICBkZWVwICsgMSxcbiAgICAgICAgKTtcbiAgICAgICAgaWYgKGRlZXAgPiBkZWVwTWF4TGltaXQpIHtcbiAgICAgICAgICBjb25zb2xlLndhcm4oJ01heCBkZWVwIGxpbWl0IHJlYWNoZWQ6ICcsIGRlZXApO1xuICAgICAgICAgIHJldHVybiBwYXJlbnQ7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIHBhcmVudDtcbiAgfVxufVxuXG4iXX0=
124
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidGFibGUtbW9kZWwtZmFjdG9yeS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL2xpYnMvdGFibGUvc3JjL2xpYi90YWJsZS90YWJsZS1tb2RlbC1mYWN0b3J5LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUVBLE9BQU8sRUFBRSxpQkFBaUIsRUFBRSxNQUFNLG9DQUFvQyxDQUFDO0FBQ3ZFLE9BQU8sRUFBRSxZQUFZLEVBQUUsTUFBTSw4QkFBOEIsQ0FBQztBQUM1RCxPQUFPLEVBQUUsbUJBQW1CLEVBQUUsTUFBTSxvREFBb0QsQ0FBQztBQUN6RixPQUFPLEVBQUUsT0FBTyxFQUFFLE1BQU0sd0JBQXdCLENBQUM7QUFDakQsT0FBTyxFQUFFLGFBQWEsRUFBRSxNQUFNLDZDQUE2QyxDQUFDO0FBRTVFLE9BQU8sRUFBRSxVQUFVLEVBQUUsTUFBTSwrQkFBK0IsQ0FBQztBQUczRCxPQUFPLEVBQ0wsa0NBQWtDLEVBQ25DLE1BQU0scUVBQXFFLENBQUM7QUFDN0UsT0FBTyxFQUFFLGVBQWUsRUFBRSxNQUFNLCtDQUErQyxDQUFDO0FBQ2hGLE9BQU8sRUFBRSxpQkFBaUIsRUFBRSxNQUFNLGdDQUFnQyxDQUFDO0FBRW5FLE1BQU0sT0FBTyxpQkFBaUI7SUFJckIsTUFBTSxDQUFDLG1CQUFtQixDQUMvQixJQUFTLEVBQ1QsU0FBcUIsRUFBRSxFQUN2QixTQUFxQixFQUFFLEVBQ3ZCLHVCQUErQixDQUFDLEVBQ2hDLHdCQUFnQyxDQUFDLEVBQ2pDLHFCQUE4QixLQUFLLEVBQ25DLG9CQUF5QyxJQUFJLGlCQUFpQixFQUFFLEVBQ2hFLFVBQXlCLEVBQ3pCLGNBQXdCLEVBQUU7UUFFMUIsSUFBSSxlQUE0QixDQUFDO1FBQ2pDLElBQUksTUFBTSxFQUFFLE1BQU0sRUFBRTtZQUNsQixlQUFlLEdBQUcsSUFBSSxtQkFBbUIsQ0FBUyxRQUFRLEVBQUUsTUFBTSxFQUFFLGlCQUFpQixDQUFDLE1BQU0sRUFBRSxVQUFVLENBQUMs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QixFQUFFO1FBRXpCLElBQUksSUFBSSxHQUFHLFlBQVksRUFBRTtZQUN2QixPQUFPLENBQUMsSUFBSSxDQUFDLDBCQUEwQixFQUFFLElBQUksQ0FBQyxDQUFDO1lBQy9DLE9BQU8sTUFBTSxDQUFDO1NBQ2Y7UUFDRCxhQUFhO1FBQ2IsTUFBTSxRQUFRLEdBQW9CLElBQUksQ0FBQyxnQkFBZ0IsQ0FBQyxDQUFDO1FBQ3pELElBQUksUUFBUSxFQUFFO1lBQ1osS0FBSyxNQUFNLENBQUMsSUFBSSxRQUFRLEVBQUU7Z0JBQ3hCLE1BQU0sRUFBRSxHQUFHLElBQUksT0FBTyxDQUFJLENBQUMsRUFBRSxJQUFJLEVBQUUsRUFBRSxFQUFFLE1BQU0sRUFBRSxJQUFJLEdBQUcsQ0FBQyxDQUFDLENBQUM7Z0JBQ3pELE1BQU0sQ0FBQyxRQUFRLEVBQUUsSUFBSSxDQUFDLEVBQUUsQ0FBQyxDQUFDO2dCQUMxQixpQkFBaUIsQ0FBQyxZQUFZLENBQzVCLENBQUMsRUFDRCxnQkFBZ0IsRUFDaEIsRUFBRSxFQUNGLElBQUksR0FBRyxDQUFDLENBQ1QsQ0FBQztnQkFDRixJQUFJLElBQUksR0FBRyxZQUFZLEVBQUU7b0JBQ3ZCLE9BQU8sQ0FBQyxJQUFJLENBQUMsMEJBQTBCLEVBQUUsSUFBSSxDQUFDLENBQUM7b0JBQy9DLE9BQU8sTUFBTSxDQUFDO2lCQUNmO2FBQ0Y7U0FDRjtRQUNELE9BQU8sTUFBTSxDQUFDO0lBQ2hCLENBQUM7Q0FDRiIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IFRhYmxlT3B0aW9uc0lmIH0gZnJvbSBcIi4vZGF0YS9vcHRpb25zL3RhYmxlLW9wdGlvbnMuaWZcIjtcbmltcG9ydCB7IFRhYmxlTW9kZWxJZiB9IGZyb20gXCIuL2RhdGEvdGFibGVtb2RlbC90YWJsZS1tb2RlbC5pZlwiO1xuaW1wb3J0IHsgRGVmYXVsdFJvd0hlaWdodHMgfSBmcm9tIFwiLi9kYXRhL29wdGlvbnMvZGVmYXVsdC1yb3ctaGVpZ2h0c1wiO1xuaW1wb3J0IHsgVGFibGVPcHRpb25zIH0gZnJvbSBcIi4vZGF0YS9vcHRpb25zL3RhYmxlLW9wdGlvbnNcIjtcbmltcG9ydCB7IEFyZWFNb2RlbEFycmF5QXJyYXkgfSBmcm9tIFwiLi9kYXRhL3RhYmxlbW9kZWwvYXJlYW1vZGVsL2FyZWEtbW9kZWwtYXJyYXktYXJyYXlcIjtcbmltcG9ydCB7IFRyZWVSb3cgfSBmcm9tIFwiLi9kYXRhL2NvbW1vbi90cmVlLXJvd1wiO1xuaW1wb3J0IHsgQXJlYU1vZGVsVHJlZSB9IGZyb20gXCIuL2RhdGEvdGFibGVtb2RlbC9hcmVhbW9kZWwvYXJlYS1tb2RlbC10cmVlXCI7XG5pbXBvcnQgeyBDb2x1bW5EZWZJZiB9IGZyb20gXCIuL2RhdGEvdGFibGVtb2RlbC9jb2x1bW4vY29sdW1uLWRlZi5pZlwiO1xuaW1wb3J0IHsgVGFibGVNb2RlbCB9IGZyb20gXCIuL2RhdGEvdGFibGVtb2RlbC90YWJsZS1tb2RlbFwiO1xuaW1wb3J0IHsgQXJlYU1vZGVsSWYgfSBmcm9tIFwiLi9kYXRhL3RhYmxlbW9kZWwvYXJlYW1vZGVsL2FyZWEtbW9kZWwuaWZcIjtcbmltcG9ydCB7IERlZmF1bHRSb3dIZWlnaHRzSWYgfSBmcm9tIFwiLi9kYXRhL29wdGlvbnMvZGVmYXVsdC1yb3ctaGVpZ2h0cy5pZlwiO1xuaW1wb3J0IHtcbiAgQXJlYU1vZGVsT2JqZWN0QXJyYXlXaXRoQ29sdW1uZGVmc1xufSBmcm9tIFwiLi9kYXRhL3RhYmxlbW9kZWwvYXJlYW1vZGVsL2FyZWEtbW9kZWwtb2JqZWN0LWFycmF5LXdpdGgtY29sdW1uZGVmc1wiO1xuaW1wb3J0IHsgQXJlYU1vZGVsSGlkZGVuIH0gZnJvbSBcIi4vZGF0YS90YWJsZW1vZGVsL2FyZWFtb2RlbC9hcmVhLW1vZGVsLWhpZGRlblwiO1xuaW1wb3J0IHsgVHJlZUNoZWNrYm94TW9kZWwgfSBmcm9tIFwiLi9jaGVja2JveC90cmVlLWNoZWNrYm94LW1vZGVsXCI7XG5cbmV4cG9ydCBjbGFzcyBUYWJsZU1vZGVsRmFjdG9yeSB7XG5cblxuXG4gIHB1YmxpYyBzdGF0aWMgY3JlYXRlQnlPYmplY3RBcnJheTxUPihcbiAgICByb3dzOiBUW10sXG4gICAgaGVhZGVyOiBzdHJpbmdbXVtdID0gW10sXG4gICAgZm9vdGVyOiBzdHJpbmdbXVtdID0gW10sXG4gICAgZml4ZWRMZWZ0Q29sdW1uQ291bnQ6IG51bWJlciA9IDAsXG4gICAgZml4ZWRSaWdodENvbHVtbkNvdW50OiBudW1iZXIgPSAwLFxuICAgIHJvd0NoZWNrYm94VmlzaWJsZTogYm9vbGVhbiA9IGZhbHNlLFxuICAgIGRlZmF1bHRSb3dIZWlnaHRzOiBEZWZhdWx0Um93SGVpZ2h0c0lmID0gbmV3IERlZmF1bHRSb3dIZWlnaHRzKCksXG4gICAgY29sdW1uRGVmczogQ29sdW1uRGVmSWZbXSxcbiAgICBjb2x1bW5TaXplczogbnVtYmVyW10gPSBbXVxuICApIHtcbiAgICBsZXQgaGVhZGVyQXJlYU1vZGVsOiBBcmVhTW9kZWxJZjtcbiAgICBpZiAoaGVhZGVyPy5sZW5ndGgpIHtcbiAgICAgIGhlYWRlckFyZWFNb2RlbCA9IG5ldyBBcmVhTW9kZWxBcnJheUFycmF5PHN0cmluZz4oJ2hlYWRlcicsIGhlYWRlciwgZGVmYXVsdFJvd0hlaWdodHMuaGVhZGVyLCBjb2x1bW5EZWZzKTtcbiAgICB9IGVsc2UgaWYgKGNvbHVtbkRlZnM/Lmxlbmd0aCkge1xuICAgICAgaGVhZGVyQXJlYU1vZGVsID0gbmV3IEFyZWFNb2RlbEFycmF5QXJyYXk8c3RyaW5nPignaGVhZGVyJywgW2NvbHVtbkRlZnMubWFwKGRlZiA9PiBkZWYuaGVhZGVyTGFiZWwpXSwgZGVmYXVsdFJvd0hlaWdodHMuaGVhZGVyLCBjb2x1bW5EZWZzKVxuICAgIH0gZWxzZSB7XG4gICAgICBoZWFkZXJBcmVhTW9kZWwgPSBuZXcgQXJlYU1vZGVsSGlkZGVuKCk7XG4gICAgfVxuICAgIGNvbnN0IGZvb3RlckFyZWFNb2RlbCA9IGZvb3RlciA/IG5ldyBBcmVhTW9kZWxBcnJheUFycmF5PHN0cmluZz4oXCJmb290ZXJcIiwgZm9vdGVyLCBkZWZhdWx0Um93SGVpZ2h0cy5mb290ZXIsIGNvbHVtbkRlZnMpIDogbmV3IEFyZWFNb2RlbEhpZGRlbigpO1xuICAgIGNvbnN0IGJvZHlBcmVhTW9kZWwgPSBuZXcgQXJlYU1vZGVsT2JqZWN0QXJyYXlXaXRoQ29sdW1uZGVmczxUPihcImJvZHlcIiwgcm93cywgY29sdW1uRGVmcywgZGVmYXVsdFJvd0hlaWdodHMuYm9keSk7XG5cbiAgICByZXR1cm4gbmV3IFRhYmxlTW9kZWwoXG4gICAgICBoZWFkZXJBcmVhTW9kZWwsXG4gICAgICBib2R5QXJlYU1vZGVsLFxuICAgICAgZm9vdGVyQXJlYU1vZGVsLFxuICAgICAgZml4ZWRMZWZ0Q29sdW1uQ291bnQsXG4gICAgICBmaXhlZFJpZ2h0Q29sdW1uQ291bnQsXG4gICAgICByb3dDaGVja2JveFZpc2libGUsXG4gICAgICBkZWZhdWx0Um93SGVpZ2h0cyxcbiAgICAgIGNvbHVtbkRlZnMsXG4gICAgICBjb2x1bW5TaXplc1xuICAgICk7XG4gIH1cblxuICBwdWJsaWMgc3RhdGljIGNyZWF0ZUJ5T2JqZWN0QXJyYXlQYXJhbTxUPihwYXJhbToge1xuICAgIHJvd3M6IFRbXSxcbiAgICBoZWFkZXI/OiBzdHJpbmdbXVtdLFxuICAgIGZvb3Rlcj86IHN0cmluZ1tdW10sXG4gICAgZml4ZWRMZWZ0Q29sdW1uQ291bnQ/OiBudW1iZXIsXG4gICAgZml4ZWRSaWdodENvbHVtbkNvdW50PzogbnVtYmVyLFxuICAgIHJvd0NoZWNrYm94VmlzaWJsZT86IGJvb2xlYW4sXG4gICAgZGVmYXVsdFJvd0hlaWdodHM/OiBEZWZhdWx0Um93SGVpZ2h0c0lmLFxuICAgIGNvbHVtbkRlZnM/OiBDb2x1bW5EZWZJZltdLFxuICAgIGNvbHVtblNpemVzPzogbnVtYmVyW11cbiAgfSkge1xuICAgIGNvbnN0IHJvd0NoZWNrYm94VmlzaWJsZSA9IHBhcmFtLnJvd0NoZWNrYm94VmlzaWJsZSAhPT0gdW5kZWZpbmVkID8gcGFyYW0ucm93Q2hlY2tib3hWaXNpYmxlIDogZmFsc2U7XG4gICAgcmV0dXJuIFRhYmxlTW9kZWxGYWN0b3J5LmNyZWF0ZUJ5T2JqZWN0QXJyYXk8VD4oXG4gICAgICBwYXJhbS5yb3dzLFxuICAgICAgcGFyYW0uaGVhZGVyID8/IFtdLFxuICAgICAgcGFyYW0uZm9vdGVyID8/IFtdLFxuICAgICAgcGFyYW0uZml4ZWRMZWZ0Q29sdW1uQ291bnQgPz8gMCxcbiAgICAgIHBhcmFtLmZpeGVkUmlnaHRDb2x1bW5Db3VudCA/PyAwLFxuICAgICAgcm93Q2hlY2tib3hWaXNpYmxlLFxuICAgICAgcGFyYW0uZGVmYXVsdFJvd0hlaWdodHMgPz8gbmV3IERlZmF1bHRSb3dIZWlnaHRzKCksXG4gICAgICBwYXJhbS5jb2x1bW5EZWZzID8/IFtdLFxuICAgICAgcGFyYW0uY29sdW1uU2l6ZXMgPz8gW11cbiAgICApO1xuICB9XG5cbiAgcHVibGljIHN0YXRpYyBjcmVhdGVCeUFyZWFNb2RlbHMoXG4gICAgaGVhZGVyQXJlYU1vZGVsOiBBcmVhTW9kZWxJZiA9IG5ldyBBcmVhTW9kZWxIaWRkZW4oKSxcbiAgICBib2R5QXJlYU1vZGVsOiBBcmVhTW9kZWxJZixcbiAgICBmb290ZXJBcmVhTW9kZWw6IEFyZWFNb2RlbElmID0gbmV3IEFyZWFNb2RlbEhpZGRlbigpLFxuICAgIGZpeGVkTGVmdENvbHVtbkNvdW50OiBudW1iZXIgPSAwLFxuICAgIGZpeGVkUmlnaHRDb2x1bW5Db3VudDogbnVtYmVyID0gMCxcbiAgICByb3dDaGVja2JveFZpc2libGU6IGJvb2xlYW4gPSBmYWxzZSxcbiAgICBkZWZhdWx0Um93SGVpZ2h0czogRGVmYXVsdFJvd0hlaWdodHNJZiA9IG5ldyBEZWZhdWx0Um93SGVpZ2h0cygpLFxuICAgIGNvbHVtbkRlZnM6IENvbHVtbkRlZklmW10sXG4gICAgY29sdW1uU2l6ZXM6IG51bWJlcltdID0gW10sXG4gICAgb3ZlcnJpZGluZ0NvbHVtbldpZHRoOiBudW1iZXIgPSAtMSxcbiAgICBjb2x1bW5Db3VudDogbnVtYmVyXG4gICkge1xuICAgIHJldHVybiBuZXcgVGFibGVNb2RlbChcbiAgICAgIGhlYWRlckFyZWFNb2RlbCxcbiAgICAgIGJvZHlBcmVhTW9kZWwsXG4gICAgICBmb290ZXJBcmVhTW9kZWwsXG4gICAgICBmaXhlZExlZnRDb2x1bW5Db3VudCxcbiAgICAgIGZpeGVkUmlnaHRDb2x1bW5Db3VudCxcbiAgICAgIHJvd0NoZWNrYm94VmlzaWJsZSxcbiAgICAgIGRlZmF1bHRSb3dIZWlnaHRzLFxuICAgICAgY29sdW1uRGVmcyxcbiAgICAgIGNvbHVtblNpemVzLFxuICAgICAgb3ZlcnJpZGluZ0NvbHVtbldpZHRoLFxuICAgICAgY29sdW1uQ291bnRcbiAgICApO1xuICB9XG5cbiAgcHVibGljIHN0YXRpYyBjcmVhdGVCeUFyZWFNb2RlbHNQYXJhbShwYXJhbToge1xuICAgIGhlYWRlckFyZWFNb2RlbD86IEFyZWFNb2RlbElmLFxuICAgIGJvZHlBcmVhTW9kZWw6IEFyZWFNb2RlbElmLFxuICAgIGZvb3RlckFyZWFNb2RlbD86IEFyZWFNb2RlbElmLFxuICAgIGZpeGVkTGVmdENvbHVtbkNvdW50PzogbnVtYmVyLFxuICAgIGZpeGVkUmlnaHRDb2x1bW5Db3VudD86IG51bWJlcixcbiAgICByb3dDaGVja2JveFZpc2libGU/OiBib29sZWFuLFxuICAgIGRlZmF1bHRSb3dIZWlnaHRzPzogRGVmYXVsdFJvd0hlaWdodHNJZixcbiAgICBjb2x1bW5EZWZzPzogQ29sdW1uRGVmSWZbXSxcbiAgICBjb2x1bW5TaXplcz86IG51bWJlcltdLFxuICAgIG92ZXJyaWRpbmdDb2x1bW5XaWR0aD86IG51bWJlcixcbiAgICBjb2x1bW5Db3VudD86IG51bWJlclxuICB9KSB7XG4gICAgcmV0dXJuIFRhYmxlTW9kZWxGYWN0b3J5LmNyZWF0ZUJ5QXJlYU1vZGVscyhcbiAgICAgIHBhcmFtLmhlYWRlckFyZWFNb2RlbCA/PyBuZXcgQXJlYU1vZGVsSGlkZGVuKCksXG4gICAgICBwYXJhbS5ib2R5QXJlYU1vZGVsLFxuICAgICAgcGFyYW0uZm9vdGVyQXJlYU1vZGVsID8/IG5ldyBBcmVhTW9kZWxIaWRkZW4oKSxcbiAgICAgIHBhcmFtLmZpeGVkTGVmdENvbHVtbkNvdW50ID8/IDAsXG4gICAgICBwYXJhbS5maXhlZFJpZ2h0Q29sdW1uQ291bnQgPz8gMCxcbiAgICAgIHBhcmFtLnJvd0NoZWNrYm94VmlzaWJsZSA9PT0gdW5kZWZpbmVkID8gZmFsc2UgOiBwYXJhbS5yb3dDaGVja2JveFZpc2libGUsXG4gICAgICBwYXJhbS5kZWZhdWx0Um93SGVpZ2h0cyxcbiAgICAgIHBhcmFtLmNvbHVtbkRlZnMgPz8gW10sXG4gICAgICBwYXJhbS5jb2x1bW5TaXplcyA/PyBbXSxcbiAgICAgIHBhcmFtLm92ZXJyaWRpbmdDb2x1bW5XaWR0aCA/PyAtMSxcbiAgICAgIHBhcmFtLmNvbHVtbkNvdW50ID8/IDBcbiAgICApO1xuICB9XG5cbiAgcHVibGljIHN0YXRpYyBjcmVhdGVCeUFycmF5T2ZBcnJheTxUPihcbiAgICBjb2x1bW5MYWJlbHM6IHN0cmluZ1tdW10sXG4gICAgZGF0YTogVFtdW10sXG4gICAgZm9vdGVyOiBzdHJpbmdbXVtdID0gW10sXG4gICAgZml4ZWRMZWZ0Q29sdW1uQ291bnQ6IG51bWJlciA9IDAsXG4gICAgZml4ZWRSaWdodENvbHVtbkNvdW50OiBudW1iZXIgPSAwLFxuICAgIHJvd0NoZWNrYm94VmlzaWJsZTogYm9vbGVhbiA9IGZhbHNlLFxuICAgIGRlZmF1bHRSb3dIZWlnaHRzOiBEZWZhdWx0Um93SGVpZ2h0c0lmID0gbmV3IERlZmF1bHRSb3dIZWlnaHRzKCksXG4gICAgY29sdW1uRGVmczogQ29sdW1uRGVmSWZbXSxcbiAgICBjb2x1bW5TaXplczogbnVtYmVyW10gPSBbXSxcbiAgICBvdmVycmlkaW5nQ29sdW1uV2lkdGg6IG51bWJlciA9IC0xLFxuICAgIGNvbHVtbkNvdW50OiBudW1iZXIgPSAwXG4gICkge1xuICAgIGlmICghY29sdW1uQ291bnQpIHtcbiAgICAgIGlmIChjb2x1bW5EZWZzPy5sZW5ndGgpIHtcbiAgICAgICAgY29sdW1uQ291bnQgPSBjb2x1bW5EZWZzLmxlbmd0aDtcbiAgICAgIH0gZWxzZSBpZiAoY29sdW1uU2l6ZXM/Lmxlbmd0aCkge1xuICAgICAgICBjb2x1bW5Db3VudCA9IGNvbHVtblNpemVzPy5sZW5ndGg7XG4gICAgICB9IGVsc2UgaWYgKGNvbHVtbkxhYmVscz8ubGVuZ3RoICYmIGNvbHVtbkxhYmVsc1swXS5sZW5ndGgpIHtcbiAgICAgICAgY29sdW1uQ291bnQgPSBjb2x1bW5MYWJlbHNbMF0ubGVuZ3RoO1xuICAgICAgfSBlbHNlIGlmIChkYXRhPy5sZW5ndGggJiYgZGF0YVswXS5sZW5ndGgpIHtcbiAgICAgICAgY29sdW1uQ291bnQgPSBkYXRhWzBdLmxlbmd0aDtcbiAgICAgIH1cbiAgICB9XG5cbiAgICByZXR1cm4gVGFibGVNb2RlbEZhY3RvcnkuY3JlYXRlQnlBcmVhTW9kZWxzKFxuICAgICAgbmV3IEFyZWFNb2RlbEFycmF5QXJyYXk8c3RyaW5nPihcImhlYWRlclwiLCBjb2x1bW5MYWJlbHMsIGRlZmF1bHRSb3dIZWlnaHRzLmhlYWRlciksXG4gICAgICBuZXcgQXJlYU1vZGVsQXJyYXlBcnJheTxUPihcImJvZHlcIiwgZGF0YSwgZGVmYXVsdFJvd0hlaWdodHMuYm9keSksXG4gICAgICBuZXcgQXJlYU1vZGVsQXJyYXlBcnJheTxzdHJpbmc+KFwiZm9vdGVyXCIsIGZvb3RlciwgZGVmYXVsdFJvd0hlaWdodHMuZm9vdGVyKSxcbiAgICAgIGZpeGVkTGVmdENvbHVtbkNvdW50LFxuICAgICAgZml4ZWRSaWdodENvbHVtbkNvdW50LFxuICAgICAgcm93Q2hlY2tib3hWaXNpYmxlLFxuICAgICAgZGVmYXVsdFJvd0hlaWdodHMsXG4gICAgICBjb2x1bW5EZWZzLFxuICAgICAgY29sdW1uU2l6ZXMsXG4gICAgICBvdmVycmlkaW5nQ29sdW1uV2lkdGgsXG4gICAgICBjb2x1bW5Db3VudFxuICAgICk7XG4gIH1cblxuICBwdWJsaWMgc3RhdGljIGNyZWF0ZUJ5QXJyYXlPZkFycmF5UGFyYW1zPFQ+KHBhcmFtOiB7XG4gICAgY29sdW1uTGFiZWxzPzogc3RyaW5nW11bXSxcbiAgICBkYXRhOiBUW11bXSxcbiAgICBmb290ZXI/OiBhbnlbXVtdLFxuICAgIGZpeGVkTGVmdENvbHVtbkNvdW50PzogbnVtYmVyLFxuICAgIGZpeGVkUmlnaHRDb2x1bW5Db3VudD86IG51bWJlcixcbiAgICByb3dDaGVja2JveFZpc2libGU/OiBib29sZWFuLFxuICAgIGRlZmF1bHRSb3dIZWlnaHRzPzogRGVmYXVsdFJvd0hlaWdodHNJZixcbiAgICBjb2x1bW5EZWZzPzogQ29sdW1uRGVmSWZbXSxcbiAgICBjb2x1bW5TaXplcz86IG51bWJlcltdLFxuICAgIG92ZXJyaWRpbmdDb2x1bW5XaWR0aD86IG51bWJlcixcbiAgICBjb2x1bW5Db3VudD86IG51bWJlclxuICB9KSB7XG4gICAgaWYgKHBhcmFtLm92ZXJyaWRpbmdDb2x1bW5XaWR0aCA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICBwYXJhbS5vdmVycmlkaW5nQ29sdW1uV2lkdGggPSAtMTtcbiAgICB9XG4gICAgcmV0dXJuIFRhYmxlTW9kZWxGYWN0b3J5LmNyZWF0ZUJ5QXJyYXlPZkFycmF5PFQ+KFxuICAgICAgcGFyYW0uY29sdW1uTGFiZWxzID8/IFtdLFxuICAgICAgcGFyYW0uZGF0YSxcbiAgICAgIHBhcmFtLmZvb3RlciA/PyBbXSxcbiAgICAgIHBhcmFtLmZpeGVkTGVmdENvbHVtbkNvdW50ID8/IDAsXG4gICAgICBwYXJhbS5maXhlZFJpZ2h0Q29sdW1uQ291bnQgPz8gMCxcbiAgICAgIHBhcmFtLnJvd0NoZWNrYm94VmlzaWJsZSA9PT0gdW5kZWZpbmVkID8gZmFsc2UgOiBwYXJhbS5yb3dDaGVja2JveFZpc2libGUsXG4gICAgICBwYXJhbS5kZWZhdWx0Um93SGVpZ2h0cyA/PyBuZXcgRGVmYXVsdFJvd0hlaWdodHMoNDAsIDQwLCA0MCksXG4gICAgICBwYXJhbS5jb2x1bW5EZWZzID8/IFtdLFxuICAgICAgcGFyYW0uY29sdW1uU2l6ZXMgPz8gW10sXG4gICAgICBwYXJhbS5vdmVycmlkaW5nQ29sdW1uV2lkdGgsXG4gICAgICBwYXJhbS5jb2x1bW5Db3VudFxuICAgICk7XG4gIH1cblxuICBzdGF0aWMgYnVpbGRCeVR5cGVkUm93c1BhcmFtPFQ+KHBhcmFtOiB7XG4gICAgcm93czogVFtdLFxuICAgIGNvbHVtbkRlZnM6IENvbHVtbkRlZklmW10sXG4gICAgdGFibGVPcHRpb25zPzogVGFibGVPcHRpb25zSWYsXG4gICAgZml4ZWRMZWZ0Q29sdW1uQ291bnQ/OiBudW1iZXIsXG4gICAgZml4ZWRSaWdodENvbHVtbkNvdW50PzogbnVtYmVyXG4gIH0pOiBUYWJsZU1vZGVsSWYge1xuXG4gICAgcmV0dXJuIFRhYmxlTW9kZWxGYWN0b3J5LmJ1aWxkQnlUeXBlZFJvd3M8VD4oXG4gICAgICBwYXJhbS5yb3dzID8/IFtdLFxuICAgICAgcGFyYW0uY29sdW1uRGVmcyxcbiAgICAgIHBhcmFtLnRhYmxlT3B0aW9ucyA/PyBuZXcgVGFibGVPcHRpb25zKCksXG4gICAgICBwYXJhbS5maXhlZExlZnRDb2x1bW5Db3VudCA/PyAwLFxuICAgICAgcGFyYW0uZml4ZWRSaWdodENvbHVtbkNvdW50ID8/IDBcbiAgICApO1xuICB9XG5cbiAgc3RhdGljIGJ1aWxkQnlUeXBlZFJvd3M8VD4oXG4gICAgcm93czogVFtdLFxuICAgIGNvbHVtbkRlZnM6IENvbHVtbkRlZklmW10sXG4gICAgdGFibGVPcHRpb25zOiBUYWJsZU9wdGlvbnNJZiA9IG5ldyBUYWJsZU9wdGlvbnMoKSxcbiAgICBmaXhlZExlZnRDb2x1bW5Db3VudDogbnVtYmVyID0gMCxcbiAgICBmaXhlZFJpZ2h0Q29sdW1uQ291bnQ6IG51bWJlciA9IDAsXG4gICk6IFRhYmxlTW9kZWxJZiB7XG5cbiAgICBjb25zdCBkZWZhdWx0Um93SGVpZ2h0cyA9IHRhYmxlT3B0aW9ucy5kZWZhdWx0Um93SGVpZ2h0cztcbiAgICBjb25zdCBjaGVja2JveEV4dHJhQ29sdW1uVmlzaWJsZSA9IGNvbHVtbkRlZnNbMF0ucHJvcGVydHkgPT09ICdDaGVja2JveENvbHVtbic7XG5cbiAgICBpZiAocm93cz8ubGVuZ3RoICYmIHJvd3NbMF0gaW5zdGFuY2VvZiBUcmVlUm93KSB7XG4gICAgICAvLyBUcmVlOlxuICAgICAgY29uc3QgdHJlZVJvd3MgPSByb3dzIGFzIFRyZWVSb3c8VD5bXTtcbiAgICAgIGNvbnN0IGJvZHlhcmVhTW9kZWwgPSBuZXcgQXJlYU1vZGVsVHJlZShcbiAgICAgICAgJ2JvZHknLFxuICAgICAgICB0cmVlUm93cyxcbiAgICAgICAgZGVmYXVsdFJvd0hlaWdodHMuYm9keSxcbiAgICAgICAgY29sdW1uRGVmcyxcbiAgICAgICk7XG4gICAgICBpZiAoY2hlY2tib3hFeHRyYUNvbHVtblZpc2libGUgfHwgdGFibGVPcHRpb25zLnNob3dDaGVja2JveFdpaG91dEV4dHJhQ29sdW1uKSB7XG4gICAgICAgIGJvZHlhcmVhTW9kZWwucm93U2VsZWN0aW9uTW9kZWwgPSBuZXcgVHJlZUNoZWNrYm94TW9kZWwodHJlZVJvd3MpO1xuICAgICAgfVxuICAgICAgcmV0dXJuIFRhYmxlTW9kZWxGYWN0b3J5LmNyZWF0ZUJ5QXJlYU1vZGVsc1BhcmFtKHtcbiAgICAgICAgaGVhZGVyQXJlYU1vZGVsOiBuZXcgQXJlYU1vZGVsQXJyYXlBcnJheTxzdHJpbmc+KCdoZWFkZXInLCBbY29sdW1uRGVmcy5tYXAoZGVmID0+IGRlZi5oZWFkZXJMYWJlbCldLCBkZWZhdWx0Um93SGVpZ2h0cy5oZWFkZXIpLFxuICAgICAgICBib2R5QXJlYU1vZGVsOiBib2R5YXJlYU1vZGVsLFxuICAgICAgICBmb290ZXJBcmVhTW9kZWw6IG5ldyBBcmVhTW9kZWxBcnJheUFycmF5PHN0cmluZz4oJ2Zvb3RlcicsIFtdLCBkZWZhdWx0Um93SGVpZ2h0cy5mb290ZXIpLFxuICAgICAgICBjb2x1bW5EZWZzLFxuICAgICAgICBmaXhlZExlZnRDb2x1bW5Db3VudCxcbiAgICAgICAgZml4ZWRSaWdodENvbHVtbkNvdW50LFxuICAgICAgICBkZWZhdWx0Um93SGVpZ2h0czogdGFibGVPcHRpb25zLmRlZmF1bHRSb3dIZWlnaHRzLFxuICAgICAgICByb3dDaGVja2JveFZpc2libGU6IGZhbHNlLFxuICAgICAgICBjb2x1bW5TaXplczogW10sXG4gICAgICAgIGNvbHVtbkNvdW50OiBjb2x1bW5EZWZzLmxlbmd0aCxcbiAgICAgICAgb3ZlcnJpZGluZ0NvbHVtbldpZHRoOiAtMVxuICAgICAgfSk7XG4gICAgfVxuXG4gICAgLy8gRmxhdCB0YWJsZTpcbiAgICByZXR1cm4gVGFibGVNb2RlbEZhY3RvcnkuY3JlYXRlQnlPYmplY3RBcnJheVBhcmFtKHtcbiAgICAgIHJvd3MsXG4gICAgICBjb2x1bW5EZWZzLFxuICAgICAgZml4ZWRMZWZ0Q29sdW1uQ291bnQsXG4gICAgICBmaXhlZFJpZ2h0Q29sdW1uQ291bnQsXG4gICAgICBkZWZhdWx0Um93SGVpZ2h0czogdGFibGVPcHRpb25zLmRlZmF1bHRSb3dIZWlnaHRzXG4gICAgfSk7XG5cbiAgfVxuXG5cbiAgc3RhdGljIGJ1aWxkVHJlZVJvd3M8VD4oXG4gICAgZGF0YTogVFtdLFxuICAgIGNoaWxkcmVuUHJvcGVydHk6IHN0cmluZyA9ICdjaGlsZHJlbicsXG4gICAgZGVlcE1heExpbWl0OiBudW1iZXIgPSAxMik6IFRyZWVSb3c8VD5bXSB7XG5cbiAgICBjb25zdCByZXQ6IFRyZWVSb3c8VD5bXSA9IFtdO1xuICAgIGZvciAoY29uc3QgciBvZiBkYXRhKSB7XG4gICAgICByZXQucHVzaChUYWJsZU1vZGVsRmFjdG9yeS5idWlsZFRyZWVSb3c8VD4ociwgY2hpbGRyZW5Qcm9wZXJ0eSwgdW5kZWZpbmVkLCAwLCBkZWVwTWF4TGltaXQpKTtcbiAgICB9XG4gICAgcmV0dXJuIHJldDtcbiAgfVxuXG5cbiAgc3RhdGljIGJ1aWxkVHJlZVJvdzxUPihcbiAgICBkYXRhOiBULFxuICAgIGNoaWxkcmVuUHJvcGVydHk6IHN0cmluZyA9ICdjaGlsZHJlbicsXG4gICAgcGFyZW50OiBUcmVlUm93PFQ+ID0gbmV3IFRyZWVSb3c8VD4oZGF0YSwgdHJ1ZSwgW10sIHVuZGVmaW5lZCwgMCksIC8vLCBmYWxzZSAsICcwJywgJzAnKSxcbiAgICBkZWVwOiBudW1iZXIgPSAwLFxuICAgIGRlZXBNYXhMaW1pdDogbnVtYmVyID0gMTIpOiBUcmVlUm93PFQ+IHtcblxuICAgIGlmIChkZWVwID4gZGVlcE1heExpbWl0KSB7XG4gICAgICBjb25zb2xlLndhcm4oJ01heCBkZWVwIGxpbWl0IHJlYWNoZWQ6ICcsIGRlZXApO1xuICAgICAgcmV0dXJuIHBhcmVudDtcbiAgICB9XG4gICAgLy8gQHRzLWlnbm9yZVxuICAgIGNvbnN0IGNoaWxkcmVuOiBUW10gfCB1bmRlZmluZWQgPSBkYXRhW2NoaWxkcmVuUHJvcGVydHldO1xuICAgIGlmIChjaGlsZHJlbikge1xuICAgICAgZm9yIChjb25zdCByIG9mIGNoaWxkcmVuKSB7XG4gICAgICAgIGNvbnN0IHRyID0gbmV3IFRyZWVSb3c8VD4ociwgdHJ1ZSwgW10sIHBhcmVudCwgZGVlcCArIDEpO1xuICAgICAgICBwYXJlbnQuY2hpbGRyZW4/LnB1c2godHIpO1xuICAgICAgICBUYWJsZU1vZGVsRmFjdG9yeS5idWlsZFRyZWVSb3coXG4gICAgICAgICAgcixcbiAgICAgICAgICBjaGlsZHJlblByb3BlcnR5LFxuICAgICAgICAgIHRyLFxuICAgICAgICAgIGRlZXAgKyAxLFxuICAgICAgICApO1xuICAgICAgICBpZiAoZGVlcCA+IGRlZXBNYXhMaW1pdCkge1xuICAgICAgICAgIGNvbnNvbGUud2FybignTWF4IGRlZXAgbGltaXQgcmVhY2hlZDogJywgZGVlcCk7XG4gICAgICAgICAgcmV0dXJuIHBhcmVudDtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4gcGFyZW50O1xuICB9XG59XG5cbiJdfQ==
@@ -12,17 +12,21 @@ import { InputHandler } from "./input-handler";
12
12
  import { GeModelChangeEvent } from "./data/common/event/ge-model-change-event";
13
13
  import { SelectionService } from "./selection/selection-service";
14
14
  import { ShortcutService } from "./action/shortcut.service";
15
+ import { EventAdapter } from "./event-adapter";
15
16
  export class TableScope extends RenderScope {
16
17
  constructor(hostElement, tableModel, domService, tableOptions, eventListener) {
17
18
  super(hostElement, tableModel, new ConvenienceDomService(domService), tableOptions);
18
19
  this.eventListener = eventListener;
19
20
  this.selectionService = new SelectionService(this);
20
21
  this.api = new TableApi(this);
21
- this.mouseStartAction = '';
22
+ this.mouseStartAction = "";
22
23
  this.mouseStartWidth = -1;
23
24
  this.mouseStartColumnIndex = -1;
24
25
  this.dragFrom = -1;
25
26
  this.dragTo = -1;
27
+ if (!eventListener) {
28
+ this.eventListener = new EventAdapter();
29
+ }
26
30
  if (this.tableOptions?.autoRestoreOptions) {
27
31
  const autoRestoreOptions = this.tableOptions.autoRestoreOptions;
28
32
  const keyFn = autoRestoreOptions.getStorageKeyFn;
@@ -44,7 +48,7 @@ export class TableScope extends RenderScope {
44
48
  this.shortcutService.addListener(this.selectionService);
45
49
  }
46
50
  onActionTriggered(actionId) {
47
- if (actionId === 'START_EDITING') {
51
+ if (actionId === "START_EDITING") {
48
52
  if (this.getFocusModel) {
49
53
  const fm = this.getFocusModel();
50
54
  if (fm) {
@@ -59,7 +63,7 @@ export class TableScope extends RenderScope {
59
63
  return false;
60
64
  }
61
65
  updateModelValue(areaIdent, rowIndex, columnIndex, value) {
62
- if (areaIdent === 'body') {
66
+ if (areaIdent === "body") {
63
67
  const bodyAreaModel = this.tableModel.getAreaModel(areaIdent);
64
68
  const ok = bodyAreaModel.setValue(rowIndex, columnIndex, value, this.tableModel);
65
69
  if (ok) {
@@ -89,9 +93,16 @@ export class TableScope extends RenderScope {
89
93
  if (mouseEvent) {
90
94
  const target = mouseEvent.target;
91
95
  [ret.areaIdent, ret.sideIdent] = this.getAreaAndSideIdentByAttr(target);
92
- ret.rowIndex = this.getNumberByAttr(target, 'data-row-index');
93
- ret.columnIndex = this.getNumberByAttr(target, 'data-col-index');
94
- ret.action = target.closest('[data-ge-action]')?.getAttribute('data-ge-action') ?? '';
96
+ ret.rowIndex = this.getNumberByAttr(target, "data-row-index");
97
+ ret.columnIndex = this.getNumberByAttr(target, "data-col-index");
98
+ ret.action = this.getStringByAttr(target, "data-ge-action");
99
+ const bodyY = mouseEvent.clientY - this.hostElement.offsetTop - this.areaHeaderCenter.parent.clientHeight;
100
+ const bodyX = mouseEvent.clientX - this.hostElement.offsetLeft - this.areaBodyWestGeo.width;
101
+ if (ret.areaIdent) {
102
+ const am = this.tableModel.getAreaModel(ret.areaIdent);
103
+ ret.rowTop = am.getYPosByRowIndex(ret.rowIndex);
104
+ }
105
+ ret.columnLeft = this.tableModel.getXPosByColumnIndex(ret.columnIndex);
95
106
  if (mouseEvent.ctrlKey && mouseEvent.altKey) {
96
107
  const bodyY = mouseEvent.clientY - this.hostElement.offsetTop - this.areaHeaderCenter.parent.clientHeight;
97
108
  const bodyX = mouseEvent.clientX - this.hostElement.offsetLeft - this.areaBodyWestGeo.width;
@@ -103,12 +114,11 @@ export class TableScope extends RenderScope {
103
114
  onMouseDown(mouseEvent) {
104
115
  if (mouseEvent.columnIndex > -1
105
116
  && mouseEvent.action
106
- && ['resize-column', 'drag-column'].includes(mouseEvent.action)) {
107
- let w = this.tableModel.getColumnWidth(mouseEvent.columnIndex);
108
- this.mouseStartWidth = w;
117
+ && ["resize-column", "drag-column"].includes(mouseEvent.action)) {
118
+ this.mouseStartWidth = this.tableModel.getColumnWidth(mouseEvent.columnIndex);
109
119
  this.mouseStartAction = mouseEvent.action;
110
120
  this.mouseStartColumnIndex = mouseEvent.columnIndex;
111
- if (this.mouseStartAction === 'drag-column') {
121
+ if (this.mouseStartAction === "drag-column") {
112
122
  this.dragFrom = this.mouseStartColumnIndex;
113
123
  }
114
124
  }
@@ -116,13 +126,14 @@ export class TableScope extends RenderScope {
116
126
  mouseDraggingOnFrame(mouseEvent) {
117
127
  this.eventListener.onMouseDragging(mouseEvent);
118
128
  this.mouseEvent = mouseEvent;
119
- if (this.mouseStartColumnIndex > -1 && this.mouseStartAction === 'resize-column') {
120
- let w = this.tableModel.getColumnWidth(this.mouseStartColumnIndex);
121
- this.tableModel.setColumnWidth(this.mouseStartColumnIndex, this.mouseStartWidth + mouseEvent.draggingX);
122
- this.resetSizeOfWrapperDiv();
123
- this.adjustContainersAndRows();
129
+ if (this.mouseStartColumnIndex > -1
130
+ && this.mouseStartAction === "resize-column"
131
+ && this.tableOptions.columnsResizable) {
132
+ this.resizeColumn(mouseEvent);
124
133
  }
125
- else if (this.mouseStartAction === 'drag-column' && mouseEvent.columnIndex > -1) {
134
+ else if (this.mouseStartAction === "drag-column"
135
+ && mouseEvent.columnIndex > -1
136
+ && this.tableOptions.columnsDraggable) {
126
137
  this.draggingTargetColumnIndex = mouseEvent.columnIndex;
127
138
  this.dragTo = this.draggingTargetColumnIndex;
128
139
  if (this.dragFrom > -1 && this.dragTo > -1 && this.dragFrom !== this.dragTo) {
@@ -137,28 +148,23 @@ export class TableScope extends RenderScope {
137
148
  mouseDraggingEndOnFrame(mouseEvent) {
138
149
  this.eventListener.onMouseDraggingEnd(mouseEvent);
139
150
  this.draggingTargetColumnIndex = -1;
140
- if (this.mouseStartAction === 'resize-column') {
141
- let w = this.tableModel.getColumnWidth(this.mouseStartColumnIndex);
142
- this.tableModel.setColumnWidth(this.mouseStartColumnIndex, this.mouseStartWidth + mouseEvent.draggingX);
143
- this.resetSizeOfWrapperDiv();
144
- this.adjustContainersAndRows();
151
+ if (this.mouseStartAction === "resize-column") {
152
+ this.resizeColumn(mouseEvent);
145
153
  }
146
- else if (this.mouseStartAction === 'drag-column') {
147
- // this.draggingTargetColumnIndex = mouseEvent.columnIndex;
148
- // this.dragTo = this.draggingTargetColumnIndex;
149
- // if (this.dragFrom !== this.dragTo) {
150
- // this.tableModel.changeColumnOrder(this.dragFrom, this.dragTo);
151
- // this.dragFrom = this.dragTo;
152
- // this.resetSizeOfWrapperDiv();
153
- // this.adjustContainersAndRows();
154
- // }
154
+ else if (this.mouseStartAction === "drag-column") {
155
155
  this.repaint();
156
156
  }
157
157
  this.mouseStartWidth = -1;
158
158
  this.mouseStartColumnIndex = -1;
159
159
  this.dragFrom = -1;
160
160
  this.dragTo = -1;
161
- this.mouseStartAction = '';
161
+ this.mouseStartAction = "";
162
+ }
163
+ resizeColumn(mouseEvent) {
164
+ this.tableModel.setColumnWidth(this.mouseStartColumnIndex, this.mouseStartWidth + mouseEvent.draggingX);
165
+ this.tableModel.recalcPadding();
166
+ this.resetSizeOfWrapperDiv();
167
+ this.adjustContainersAndRows();
162
168
  }
163
169
  mouseMove(mouseMoveEvent) {
164
170
  this.eventListener.onMouseMoved(mouseMoveEvent);
@@ -177,10 +183,10 @@ export class TableScope extends RenderScope {
177
183
  this.storeStateCollapsedExpandService?.collapsedStateAll(expand);
178
184
  }
179
185
  }
180
- toggleRowCheckbox(rowIdx, colIdx, areaIdent) {
186
+ toggleRowCheckbox(rowIdx, _colIdx, areaIdent) {
181
187
  const areaModel = this.tableModel.getAreaModel(areaIdent);
182
188
  const state = areaModel.isRowChecked(rowIdx);
183
- const sel = (state === undefined || state === 'semi' || state === 'none');
189
+ const sel = (state === undefined || state === "semi" || state === "none");
184
190
  areaModel.setRowChecked(rowIdx, sel);
185
191
  this.repaint();
186
192
  const selectedRows = areaModel.rowSelectionModel?.getCheckedRows();
@@ -201,17 +207,17 @@ export class TableScope extends RenderScope {
201
207
  this.repaint();
202
208
  }
203
209
  }
204
- onHeaderDblClicked(event, rowIdx, colIdx) {
210
+ onHeaderDblClicked(event, _rowIdx, colIdx) {
205
211
  const colDef = this.tableModel.getColumnDef(colIdx);
206
212
  if (colDef?.sortable && colDef.sortable()) {
207
213
  event.preventDefault();
208
214
  const states = colDef.sortStatesOrder ? colDef.sortStatesOrder : this.tableOptions.sortOrder;
209
- const currentState = colDef.sortState ?? '';
215
+ const currentState = colDef.sortState ?? "";
210
216
  const newState = states[(states.indexOf(currentState) + 1) % states.length];
211
217
  const sortItem = new SortItem(colIdx, newState);
212
218
  const done = this.tableModel.doSort([sortItem]);
213
219
  if (done) {
214
- this.tableModel.getColumnDefs()?.forEach(cd => cd.sortState = '');
220
+ this.tableModel.getColumnDefs()?.forEach(cd => cd.sortState = "");
215
221
  colDef.sortState = newState;
216
222
  }
217
223
  this.repaint();
@@ -221,9 +227,9 @@ export class TableScope extends RenderScope {
221
227
  onKeyEvent(evt) {
222
228
  this.keyEvent = evt;
223
229
  console.info(this.keyEvent); // TODO
224
- if (this.keyEvent.status === 'up' && this.keyEvent.originalEvent?.code === 'F2') {
230
+ if (this.keyEvent.status === "up" && this.keyEvent.originalEvent?.code === "F2") {
225
231
  this.keyEvent.originalEvent.stopPropagation();
226
- console.info('F2...');
232
+ console.info("F2...");
227
233
  // TODO check, if we can start to edit a cell
228
234
  }
229
235
  }
@@ -234,19 +240,19 @@ export class TableScope extends RenderScope {
234
240
  }
235
241
  debugOnce(bodyX, bodyY) {
236
242
  console.clear();
237
- console.info('this.hostElement.offsetTop', this.hostElement.offsetTop); // pageY of table tag
238
- console.info('this.hostElement.scrollHeight', this.hostElement.scrollHeight); // height of visible scroll area
239
- console.info('this.scrollViewportTop', this.scrollTop); // amount of px scrolled to top (initial : 0)
240
- console.info('this.areaHeaderCenter.parent.clientHeight', this.areaHeaderCenter.parent.clientHeight);
241
- console.info('bodyY', bodyY);
242
- console.info('bodyX', bodyX);
243
- console.info('rows', this.firstVisibleRowIndex);
244
- console.info('');
245
- console.info('this.tableModel', this.tableModel);
246
- console.info('');
247
- console.info('this.mouseMoveEvent.clientX', this.mouseHandler.mouseEvent?.clientX);
248
- console.info('this.hostElement.offsetLeft', this.hostElement.offsetLeft);
249
- console.info('this.areaBodyWestGeo.width', this.areaBodyWestGeo.width);
243
+ console.info("this.hostElement.offsetTop", this.hostElement.offsetTop); // pageY of table tag
244
+ console.info("this.hostElement.scrollHeight", this.hostElement.scrollHeight); // height of visible scroll area
245
+ console.info("this.scrollViewportTop", this.scrollTop); // amount of px scrolled to top (initial : 0)
246
+ console.info("this.areaHeaderCenter.parent.clientHeight", this.areaHeaderCenter.parent.clientHeight);
247
+ console.info("bodyY", bodyY);
248
+ console.info("bodyX", bodyX);
249
+ console.info("rows", this.firstVisibleRowIndex);
250
+ console.info("");
251
+ console.info("this.tableModel", this.tableModel);
252
+ console.info("");
253
+ console.info("this.mouseMoveEvent.clientX", this.mouseHandler.mouseEvent?.clientX);
254
+ console.info("this.hostElement.offsetLeft", this.hostElement.offsetLeft);
255
+ console.info("this.areaBodyWestGeo.width", this.areaBodyWestGeo.width);
250
256
  }
251
257
  autoRestoreScrollPosition() {
252
258
  if (this.tableOptions?.autoRestoreOptions && this.storeScrollPosStateService) {
@@ -274,7 +280,7 @@ export class TableScope extends RenderScope {
274
280
  const getRowId = autoRestoreOptions.getRowId;
275
281
  if (autoRestoreOptions.autoRestoreCollapsedExpandedState && getRowId) {
276
282
  const state = this.storeStateCollapsedExpandService.collapsedExpandedStateGet();
277
- const areaModel = this.tableModel.getAreaModel('body');
283
+ const areaModel = this.tableModel.getAreaModel("body");
278
284
  if (areaModel instanceof AreaModelTree) {
279
285
  const amtr = areaModel;
280
286
  const rowCount = areaModel.getRowCount();
@@ -289,10 +295,10 @@ export class TableScope extends RenderScope {
289
295
  }
290
296
  else {
291
297
  const rowId = getRowId(row.data);
292
- if (state.mode === 'expanded') {
298
+ if (state.mode === "expanded") {
293
299
  row.expanded = (this.storeStateCollapsedExpandService.collapsedExpandedStateIncludes(rowId));
294
300
  }
295
- else if (state.mode === 'collapsed') {
301
+ else if (state.mode === "collapsed") {
296
302
  row.expanded = (!this.storeStateCollapsedExpandService.collapsedExpandedStateIncludes(rowId));
297
303
  }
298
304
  }
@@ -304,4 +310,4 @@ export class TableScope extends RenderScope {
304
310
  }
305
311
  }
306
312
  }
307
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidGFibGUtc2NvcGUuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9saWJzL3RhYmxlL3NyYy9saWIvdGFibGUvdGFibGUtc2NvcGUudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBRUEsT0FBTyxFQUFDLFlBQVksRUFBQyxNQUFNLG9DQUFvQyxDQUFDO0FBRWhFLE9BQU8sRUFBQyxxQkFBcUIsRUFBQyxNQUFNLG1DQUFtQyxDQUFDO0FBR3hFLE9BQU8sRUFBQyxZQUFZLEVBQUMsTUFBTSxpQkFBaUIsQ0FBQztBQUU3QyxPQUFPLEVBQUMsUUFBUSxFQUFDLE1BQU0sYUFBYSxDQUFDO0FBRXJDLE9BQU8sRUFBQyxhQUFhLEVBQUMsTUFBTSw2Q0FBNkMsQ0FBQztBQUMxRSxPQUFPLEVBQUMsMEJBQTBCLEVBQUMsTUFBTSwwQ0FBMEMsQ0FBQztBQUNwRixPQUFPLEVBQUMsZ0NBQWdDLEVBQUMsTUFBTSxnREFBZ0QsQ0FBQztBQUNoRyxPQUFPLEVBQUMsd0JBQXdCLEVBQUMsTUFBTSx1Q0FBdUMsQ0FBQztBQUMvRSxPQUFPLEVBQUMsV0FBVyxFQUFDLE1BQU0sZ0JBQWdCLENBQUM7QUFDM0MsT0FBTyxFQUFDLFFBQVEsRUFBQyxNQUFNLHlCQUF5QixDQUFDO0FBQ2pELE9BQU8sRUFBQyxZQUFZLEVBQUMsTUFBTSxpQkFBaUIsQ0FBQztBQUM3QyxPQUFPLEVBQUMsa0JBQWtCLEVBQUMsTUFBTSwyQ0FBMkMsQ0FBQztBQUM3RSxPQUFPLEVBQUMsZ0JBQWdCLEVBQUMsTUFBTSwrQkFBK0IsQ0FBQztBQUkvRCxPQUFPLEVBQUMsZUFBZSxFQUFDLE1BQU0sMkJBQTJCLENBQUM7QUFHMUQsTUFBTSxPQUFPLFVBQVcsU0FBUSxXQUFXO0lBb0J6QyxZQUNFLFdBQTJCLEVBQzNCLFVBQXdCLEVBQ3hCLFVBQXdCLEVBQ3hCLFlBQTRCLEVBQ1QsYUFBOEI7UUFFakQsS0FBSyxDQUNILFdBQVcsRUFDWCxVQUFVLEVBQ1YsSUFBSSxxQkFB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b0NBQ3JDLEdBQUcsQ0FBQyxRQUFRLEdBQUcsQ0FBQyxDQUFDLElBQUksQ0FBQyxnQ0FBZ0MsQ0FBQyw4QkFBOEIsQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDO2lDQUMvRjs2QkFDRjt5QkFDRjtxQkFDRjtvQkFDRCxJQUFJLENBQUMscUJBQXFCLEVBQUUsQ0FBQztpQkFDOUI7YUFDRjtTQUNGO0lBQ0gsQ0FBQztDQUNGIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHtUYWJsZU1vZGVsSWZ9IGZyb20gXCIuL2RhdGEvdGFibGVtb2RlbC90YWJsZS1tb2RlbC5pZlwiO1xuaW1wb3J0IHtBcmVhSWRlbnR9IGZyb20gXCIuL2RhdGEvdGFibGVtb2RlbC9hcmVhLWlkZW50LnR5cGVcIjtcbmltcG9ydCB7R2VNb3VzZUV2ZW50fSBmcm9tIFwiLi9kYXRhL2NvbW1vbi9ldmVudC9nZS1tb3VzZS1ldmVudFwiO1xuaW1wb3J0IHtEb21TZXJ2aWNlSWZ9IGZyb20gXCIuL3NlcnZpY2UvZG9tLXNlcnZpY2UuaWZcIjtcbmltcG9ydCB7Q29udmVuaWVuY2VEb21TZXJ2aWNlfSBmcm9tIFwiLi9zZXJ2aWNlL2NvbnZlbmllbmNlLWRvbS5zZXJ2aWNlXCI7XG5pbXBvcnQge1RhYmxlT3B0aW9uc0lmfSBmcm9tIFwiLi9kYXRhL29wdGlvbnMvdGFibGUtb3B0aW9ucy5pZlwiO1xuaW1wb3J0IHtUcmVlUm93fSBmcm9tIFwiLi9kYXRhL2NvbW1vbi90cmVlLXJvd1wiO1xuaW1wb3J0IHtNb3VzZUhhbmRsZXJ9IGZyb20gXCIuL21vdXNlLWhhbmRsZXJcIjtcbmltcG9ydCB7RXZlbnRMaXN0ZW5lcklmfSBmcm9tIFwiLi9ldmVudC1saXN0ZW5lci5pZlwiO1xuaW1wb3J0IHtUYWJsZUFwaX0gZnJvbSBcIi4vdGFibGUtYXBpXCI7XG5pbXBvcnQge1NvcnRTdGF0ZX0gZnJvbSBcIi4vZGF0YS9jb21tb24vc29ydC1zdGF0ZS50eXBlXCI7XG5pbXBvcnQge0FyZWFNb2RlbFRyZWV9IGZyb20gXCIuL2RhdGEvdGFibGVtb2RlbC9hcmVhbW9kZWwvYXJlYS1tb2RlbC10cmVlXCI7XG5pbXBvcnQge1N0b3JlU3RhdGVTY3JvbGxQb3NTZXJ2aWNlfSBmcm9tIFwiLi9zZXJ2aWNlL3N0b3JlLXN0YXRlLXNjcm9sbC1wb3Muc2VydmljZVwiO1xuaW1wb3J0IHtTdG9yZVN0YXRlQ29sbGFwc2VkRXhwYW5kU2VydmljZX0gZnJvbSBcIi4vc2VydmljZS9zdG9yZS1zdGF0ZS1jb2xsYXBzZWQtZXhwYW5kLnNlcnZpY2VcIjtcbmltcG9ydCB7U3RvcmVTdGF0ZVNvcnRpbmdTZXJ2aWNlfSBmcm9tIFwiLi9zZXJ2aWNlL3N0b3JlLXN0YXRlLXNvcnRpbmcuc2VydmljZVwiO1xuaW1wb3J0IHtSZW5kZXJTY29wZX0gZnJvbSBcIi4vcmVuZGVyLXNjb3BlXCI7XG5pbXBvcnQge1NvcnRJdGVtfSBmcm9tIFwiLi9kYXRhL2NvbW1vbi9zb3J0LWl0ZW1cIjtcbmltcG9ydCB7SW5wdXRIYW5kbGVyfSBmcm9tIFwiLi9pbnB1dC1oYW5kbGVyXCI7XG5pbXBvcnQge0dlTW9kZWxDaGFuZ2VFdmVudH0gZnJvbSBcIi4vZGF0YS9jb21tb24vZXZlbnQvZ2UtbW9kZWwtY2hhbmdlLWV2ZW50XCI7XG5pbXBvcnQge1NlbGVjdGlvblNlcnZpY2V9IGZyb20gXCIuL3NlbGVjdGlvbi9zZWxlY3Rpb24tc2VydmljZVwiO1xuaW1wb3J0IHtHZUtleUV2ZW50fSBmcm9tIFwiLi9kYXRhL2NvbW1vbi9ldmVudC9nZS1rZXktZXZlbnRcIjtcbmltcG9ydCB7T25BY3Rpb25UcmlnZ2VyZWRJZn0gZnJvbSBcIi4vYWN0aW9uL29uLWFjdGlvbi10cmlnZ2VyZWQuaWZcIjtcbmltcG9ydCB7QWN0aW9uSWR9IGZyb20gXCIuL2FjdGlvbi9hY3Rpb24taWQudHlwZVwiO1xuaW1wb3J0IHtTaG9ydGN1dFNlcnZpY2V9IGZyb20gXCIuL2FjdGlvbi9zaG9ydGN1dC5zZXJ2aWNlXCI7XG5cblxuZXhwb3J0IGNsYXNzIFRhYmxlU2NvcGUgZXh0ZW5kcyBSZW5kZXJTY29wZSBpbXBsZW1lbnRzIE9uQWN0aW9uVHJpZ2dlcmVkSWYge1xuXG5cbiAgcHVibGljIG1vdXNlSGFuZGxlcjogTW91c2VIYW5kbGVyO1xuICBwdWJsaWMgaW5wdXRIYW5kbGVyOiBJbnB1dEhhbmRsZXI7XG4gIHB1YmxpYyBzaG9ydGN1dFNlcnZpY2U6IFNob3J0Y3V0U2VydmljZTtcblxuICBwdWJsaWMgc3RvcmVTdGF0ZUNvbGxhcHNlZEV4cGFuZFNlcnZpY2U/OiBTdG9yZVN0YXRlQ29sbGFwc2VkRXhwYW5kU2VydmljZTtcbiAgcHVibGljIHN0b3JlU29ydGluZ1NlcnZpY2U/OiBTdG9yZVN0YXRlU29ydGluZ1NlcnZpY2U7XG5cbiAgcHJvdGVjdGVkIHNlbGVjdGlvblNlcnZpY2U6IFNlbGVjdGlvblNlcnZpY2UgPSBuZXcgU2VsZWN0aW9uU2VydmljZSh0aGlzKTtcbiAgcHJvdGVjdGVkIGtleUV2ZW50PzogR2VLZXlFdmVudDtcbiAgcHJpdmF0ZSBhcGkgPSBuZXcgVGFibGVBcGkodGhpcyk7XG5cbiAgcHJpdmF0ZSBtb3VzZVN0YXJ0QWN0aW9uID0gJyc7XG4gIHByaXZhdGUgbW91c2VTdGFydFdpZHRoID0gLTE7XG4gIHByaXZhdGUgbW91c2VTdGFydENvbHVtbkluZGV4ID0gLTE7XG4gIHByaXZhdGUgZHJhZ0Zyb20gPSAtMTtcbiAgcHJpdmF0ZSBkcmFnVG8gPSAtMTtcblxuICBjb25zdHJ1Y3RvcihcbiAgICBob3N0RWxlbWVudDogSFRNTERpdkVsZW1lbnQsXG4gICAgdGFibGVNb2RlbDogVGFibGVNb2RlbElmLFxuICAgIGRvbVNlcnZpY2U6IERvbVNlcnZpY2VJZixcbiAgICB0YWJsZU9wdGlvbnM6IFRhYmxlT3B0aW9uc0lmLFxuICAgIHByb3RlY3RlZCByZWFkb25seSBldmVudExpc3RlbmVyOiBFdmVudExpc3RlbmVySWYsXG4gICkge1xuICAgIHN1cGVyKFxuICAgICAgaG9zdEVsZW1lbnQsXG4gICAgICB0YWJsZU1vZGVsLFxuICAgICAgbmV3IENvbnZlbmllbmNlRG9tU2VydmljZShkb21TZXJ2aWNlKSxcbiAgICAgIHRhYmxlT3B0aW9uc1xuICAgICk7XG4gICAgaWYgKHRoaXMudGFibGVPcHRpb25zPy5hdXRvUmVzdG9yZU9wdGlvbnMpIHtcbiAgICAgIGNvbnN0IGF1dG9SZXN0b3JlT3B0aW9ucyA9IHRoaXMudGFibGVPcHRpb25zLmF1dG9SZXN0b3JlT3B0aW9ucztcbiAgICAgIGNvbnN0IGtleUZuID0gYXV0b1Jlc3RvcmVPcHRpb25zLmdldFN0b3JhZ2VLZXlGbjtcbiAgICAgIGlmIChrZXlGbikge1xuICAgICAgICBpZiAoYXV0b1Jlc3RvcmVPcHRpb25zLmF1dG9SZXN0b3JlU2Nyb2xsUG9zaXRpb24pIHtcbiAgICAgICAgICB0aGlzLnN0b3JlU2Nyb2xsUG9zU3RhdGVTZXJ2aWNlID0gbmV3IFN0b3JlU3RhdGVTY3JvbGxQb3NTZXJ2aWNlKGtleUZuKTtcbiAgICAgICAgfVxuICAgICAgICBpZiAoYXV0b1Jlc3RvcmVPcHRpb25zLmF1dG9SZXN0b3JlQ29sbGFwc2VkRXhwYW5kZWRTdGF0ZSkge1xuICAgICAgICAgIHRoaXMuc3RvcmVTdGF0ZUNvbGxhcHNlZEV4cGFuZFNlcnZpY2UgPSBuZXcgU3RvcmVTdGF0ZUNvbGxhcHNlZEV4cGFuZFNlcnZpY2Uoa2V5Rm4pO1xuICAgICAgICB9XG4gICAgICAgIGlmIChhdXRvUmVzdG9yZU9wdGlvbnMuYXV0b1Jlc3RvcmVTb3J0aW5nU3RhdGUpIHtcbiAgICAgICAgICB0aGlzLnN0b3JlU29ydGluZ1NlcnZpY2UgPSBuZXcgU3RvcmVTdGF0ZVNvcnRpbmdTZXJ2aWNlKGtleUZuKTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cbiAgICB0aGlzLm1vdXNlSGFuZGxlciA9IG5ldyBNb3VzZUhhbmRsZXIodGhpcyk7XG4gICAgdGhpcy5pbnB1dEhhbmRsZXIgPSBuZXcgSW5wdXRIYW5kbGVyKHRoaXMpO1xuXG4gICAgdGhpcy5zaG9ydGN1dFNlcnZpY2UgPSBuZXcgU2hvcnRjdXRTZXJ2aWNlKHRoaXMpO1xuICAgIHRoaXMuc2hvcnRjdXRTZXJ2aWNlLmFkZExpc3RlbmVyKHRoaXMuc2VsZWN0aW9uU2VydmljZSk7XG4gIH1cblxuICBvbkFjdGlvblRyaWdnZXJlZChhY3Rpb25JZDogQWN0aW9uSWQpOiBib29sZWFuIHtcbiAgICBpZiAoYWN0aW9uSWQgPT09ICdTVEFSVF9FRElUSU5HJykge1xuICAgICAgaWYgKHRoaXMuZ2V0Rm9jdXNNb2RlbCkge1xuICAgICAgICBjb25zdCBmbSA9IHRoaXMuZ2V0Rm9jdXNNb2RlbCgpO1xuICAgICAgICBpZiAoZm0pIHtcbiAgICAgICAgICBjb25zdCBbcm93SWR4LCBjb2xJZHhdID0gZm0uZ2V0Rm9jdXMoKTtcbiAgICAgICAgICBpZiAodGhpcy50YWJsZU1vZGVsLmdldEJvZHlNb2RlbCgpLmlzRWRpdGFibGUocm93SWR4LCBjb2xJZHgpKSB7XG4gICAgICAgICAgICB0aGlzLmNsZWFyU2VsZWN0aW9uKCk7XG4gICAgICAgICAgICB0aGlzLmluaXRSZW5kZXJFZGl0b3Iocm93SWR4LCBjb2xJZHgpO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4gZmFsc2U7XG4gIH1cblxuICB1cGRhdGVNb2RlbFZhbHVlKGFyZWFJZGVudDogQXJlYUlkZW50LCByb3dJbmRleDogbnVtYmVyLCBjb2x1bW5JbmRleDogbnVtYmVyLCB2YWx1ZTogc3RyaW5nKSB7XG4gICAgaWYgKGFyZWFJZGVudCA9PT0gJ2JvZHknKSB7XG4gICAgICBjb25zdCBib2R5QXJlYU1vZGVsID0gdGhpcy50YWJsZU1vZGVsLmdldEFyZWFNb2RlbChhcmVhSWRlbnQpO1xuICAgICAgY29uc3Qgb2s6IGJvb2xlYW4gPSBib2R5QXJlYU1vZGVsLnNldFZhbHVlKHJvd0luZGV4LCBjb2x1bW5JbmRleCwgdmFsdWUsIHRoaXMudGFibGVNb2RlbCk7XG4gICAgICBpZiAob2spIHtcbiAgICAgICAgdGhpcy5yZXNldEVkaXRvclJlbmRlcmVyKCk7XG4gICAgICAgIHRoaXMucmVwYWludCgpO1xuICAgICAgICB0aGlzLmV2ZW50TGlzdGVuZXIub25Nb2RlbENoYW5nZWQoR2VNb2RlbENoYW5nZUV2ZW50LmNyZWF0ZVNpbmdsZShyb3dJbmRleCwgY29sdW1uSW5kZXgpKTtcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICBnZXRBcGkoKTogVGFibGVBcGkge1xuICAgIHJldHVybiB0aGlzLmFwaTtcbiAgfVxuXG4gIC8qXG4gICAqIENhbGxlZCBieSB0aGUgdGFibGUgY29tcG9uZW50XG4gICAqL1xuICBmaXJzdEluaXQoKSB7XG4gICAgdGhpcy50YWJsZU1vZGVsLmluaXQoKTtcbiAgICB0aGlzLmF1dG9SZXN0b3JlQ29sbGFwc2VkRXhwYW5kZWRTdGF0ZSgpO1xuICAgIHRoaXMuYXV0b1Jlc3RvcmVTb3J0aW5nU3RhdGUoKTtcbiAgICB0aGlzLnJlc2V0U2l6ZU9mV3JhcHBlckRpdigpO1xuICAgIHRoaXMuYWRqdXN0Q29udGFpbmVyc0FuZFJvd3MoKTtcbiAgICB0aGlzLmF1dG9SZXN0b3JlU2Nyb2xsUG9zaXRpb24oKTtcbiAgfVxuXG4gIGNyZWF0ZUdlTW91c2VFdmVudChtb3VzZUV2ZW50OiBNb3VzZUV2ZW50KTogR2VNb3VzZUV2ZW50IHtcbiAgICBjb25zdCByZXQ6IEdlTW91c2VFdmVudCA9IG5ldyBHZU1vdXNlRXZlbnQoKTtcbiAgICByZXQub3JpZ2luYWxFdmVudCA9IG1vdXNlRXZlbnQ7XG5cbiAgICBpZiAobW91c2VFdmVudCkge1xuICAgICAgY29uc3QgdGFyZ2V0ID0gbW91c2VFdmVudC50YXJnZXQgYXMgSFRNTEVsZW1lbnQ7XG4gICAgICBbcmV0LmFyZWFJZGVudCwgcmV0LnNpZGVJZGVudF0gPSB0aGlzLmdldEFyZWFBbmRTaWRlSWRlbnRCeUF0dHIodGFyZ2V0KTtcbiAgICAgIHJldC5yb3dJbmRleCA9IHRoaXMuZ2V0TnVtYmVyQnlBdHRyKHRhcmdldCwgJ2RhdGEtcm93LWluZGV4Jyk7XG4gICAgICByZXQuY29sdW1uSW5kZXggPSB0aGlzLmdldE51bWJlckJ5QXR0cih0YXJnZXQsICdkYXRhLWNvbC1pbmRleCcpO1xuICAgICAgcmV0LmFjdGlvbiA9IHRhcmdldC5jbG9zZXN0KCdbZGF0YS1nZS1hY3Rpb25dJyk/LmdldEF0dHJpYnV0ZSgnZGF0YS1nZS1hY3Rpb24nKSA/PyAnJztcblxuICAgICAgaWYgKG1vdXNlRXZlbnQuY3RybEtleSAmJiBtb3VzZUV2ZW50LmFsdEtleSkge1xuICAgICAgICBjb25zdCBib2R5WSA9IG1vdXNlRXZlbnQuY2xpZW50WSAtIHRoaXMuaG9zdEVsZW1lbnQub2Zmc2V0VG9wIC0gdGhpcy5hcmVhSGVhZGVyQ2VudGVyLnBhcmVudC5jbGllbnRIZWlnaHQ7XG4gICAgICAgIGNvbnN0IGJvZHlYID0gbW91c2VFdmVudC5jbGllbnRYIC0gdGhpcy5ob3N0RWxlbWVudC5vZmZzZXRMZWZ0IC0gdGhpcy5hcmVhQm9keVdlc3RHZW8ud2lkdGg7XG4gICAgICAgIHRoaXMuZGVidWdPbmNlKGJvZHlYLCBib2R5WSk7XG4gICAgICB9XG4gICAgfVxuICAgIHJldHVybiByZXQ7XG4gIH1cblxuICBvbk1vdXNlRG93bihtb3VzZUV2ZW50OiBHZU1vdXNlRXZlbnQpIHtcbiAgICBpZiAobW91c2VFdmVudC5jb2x1bW5JbmRleCA+IC0xXG4gICAgICAmJiBtb3VzZUV2ZW50LmFjdGlvblxuICAgICAgJiYgWydyZXNpemUtY29sdW1uJywgJ2RyYWctY29sdW1uJ10uaW5jbHVkZXMobW91c2VFdmVudC5hY3Rpb24pKSB7XG4gICAgICBsZXQgdyA9IHRoaXMudGFibGVNb2RlbC5nZXRDb2x1bW5XaWR0aChtb3VzZUV2ZW50LmNvbHVtbkluZGV4KTtcbiAgICAgIHRoaXMubW91c2VTdGFydFdpZHRoID0gdztcbiAgICAgIHRoaXMubW91c2VTdGFydEFjdGlvbiA9IG1vdXNlRXZlbnQuYWN0aW9uO1xuICAgICAgdGhpcy5tb3VzZVN0YXJ0Q29sdW1uSW5kZXggPSBtb3VzZUV2ZW50LmNvbHVtbkluZGV4O1xuXG4gICAgICBpZiAodGhpcy5tb3VzZVN0YXJ0QWN0aW9uID09PSAnZHJhZy1jb2x1bW4nKSB7XG4gICAgICAgIHRoaXMuZHJhZ0Zyb20gPSB0aGlzLm1vdXNlU3RhcnRDb2x1bW5JbmRleDtcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICBtb3VzZURyYWdnaW5nT25GcmFtZShtb3VzZUV2ZW50OiBHZU1vdXNlRXZlbnQpIHtcbiAgICB0aGlzLmV2ZW50TGlzdGVuZXIub25Nb3VzZURyYWdnaW5nKG1vdXNlRXZlbnQpO1xuICAgIHRoaXMubW91c2VFdmVudCA9IG1vdXNlRXZlbnQ7XG5cbiAgICBpZiAodGhpcy5tb3VzZVN0YXJ0Q29sdW1uSW5kZXggPiAtMSAmJiB0aGlzLm1vdXNlU3RhcnRBY3Rpb24gPT09ICdyZXNpemUtY29sdW1uJykge1xuICAgICAgbGV0IHcgPSB0aGlzLnRhYmxlTW9kZWwuZ2V0Q29sdW1uV2lkdGgodGhpcy5tb3VzZVN0YXJ0Q29sdW1uSW5kZXgpO1xuICAgICAgdGhpcy50YWJsZU1vZGVsLnNldENvbHVtbldpZHRoKHRoaXMubW91c2VTdGFydENvbHVtbkluZGV4LCB0aGlzLm1vdXNlU3RhcnRXaWR0aCArIG1vdXNlRXZlbnQuZHJhZ2dpbmdYKTtcblxuICAgICAgdGhpcy5yZXNldFNpemVPZldyYXBwZXJEaXYoKTtcbiAgICAgIHRoaXMuYWRqdXN0Q29udGFpbmVyc0FuZFJvd3MoKTtcblxuICAgIH0gZWxzZSBpZiAodGhpcy5tb3VzZVN0YXJ0QWN0aW9uID09PSAnZHJhZy1jb2x1bW4nICYmIG1vdXNlRXZlbnQuY29sdW1uSW5kZXggPiAtMSkge1xuXG4gICAgICB0aGlzLmRyYWdnaW5nVGFyZ2V0Q29sdW1uSW5kZXggPSBtb3VzZUV2ZW50LmNvbHVtbkluZGV4O1xuICAgICAgdGhpcy5kcmFnVG8gPSB0aGlzLmRyYWdnaW5nVGFyZ2V0Q29sdW1uSW5kZXg7XG5cbiAgICAgIGlmICh0aGlzLmRyYWdGcm9tID4gLTEgJiYgdGhpcy5kcmFnVG8gPiAtMSAmJiB0aGlzLmRyYWdGcm9tICE9PSB0aGlzLmRyYWdUbykge1xuICAgICAgICB0aGlzLnRhYmxlTW9kZWwuY2hhbmdlQ29sdW1uT3JkZXIodGhpcy5kcmFnRnJvbSwgdGhpcy5kcmFnVG8pO1xuICAgICAgICB0aGlzLmRyYWdGcm9tID0gdGhpcy5kcmFnVG87XG4gICAgICAgIHRoaXMucmVzZXRTaXplT2ZXcmFwcGVyRGl2KCk7XG4gICAgICAgIHRoaXMuYWRqdXN0Q29udGFpbmVyc0FuZFJvd3MoKTtcbiAgICAgIH1cbiAgICAgIHRoaXMucmVwYWludCgpO1xuICAgIH1cbiAgfVxuXG4gIG1vdXNlRHJhZ2dpbmdFbmRPbkZyYW1lKG1vdXNlRXZlbnQ6IEdlTW91c2VFdmVudCkge1xuICAgIHRoaXMuZXZlbnRMaXN0ZW5lci5vbk1vdXNlRHJhZ2dpbmdFbmQobW91c2VFdmVudCk7XG5cbiAgICB0aGlzLmRyYWdnaW5nVGFyZ2V0Q29sdW1uSW5kZXggPSAtMTtcbiAgICBpZiAodGhpcy5tb3VzZVN0YXJ0QWN0aW9uID09PSAncmVzaXplLWNvbHVtbicpIHtcbiAgICAgIGxldCB3ID0gdGhpcy50YWJsZU1vZGVsLmdldENvbHVtbldpZHRoKHRoaXMubW91c2VTdGFydENvbHVtbkluZGV4KTtcbiAgICAgIHRoaXMudGFibGVNb2RlbC5zZXRDb2x1bW5XaWR0aCh0aGlzLm1vdXNlU3RhcnRDb2x1bW5JbmRleCwgdGhpcy5tb3VzZVN0YXJ0V2lkdGggKyBtb3VzZUV2ZW50LmRyYWdnaW5nWCk7XG5cbiAgICAgIHRoaXMucmVzZXRTaXplT2ZXcmFwcGVyRGl2KCk7XG4gICAgICB0aGlzLmFkanVzdENvbnRhaW5lcnNBbmRSb3dzKCk7XG4gICAgfSBlbHNlIGlmICh0aGlzLm1vdXNlU3RhcnRBY3Rpb24gPT09ICdkcmFnLWNvbHVtbicpIHtcbiAgICAgIC8vIHRoaXMuZHJhZ2dpbmdUYXJnZXRDb2x1bW5JbmRleCA9IG1vdXNlRXZlbnQuY29sdW1uSW5kZXg7XG4gICAgICAvLyB0aGlzLmRyYWdUbyA9IHRoaXMuZHJhZ2dpbmdUYXJnZXRDb2x1bW5JbmRleDtcbiAgICAgIC8vIGlmICh0aGlzLmRyYWdGcm9tICE9PSB0aGlzLmRyYWdUbykge1xuICAgICAgLy8gICB0aGlzLnRhYmxlTW9kZWwuY2hhbmdlQ29sdW1uT3JkZXIodGhpcy5kcmFnRnJvbSwgdGhpcy5kcmFnVG8pO1xuICAgICAgLy8gICB0aGlzLmRyYWdGcm9tID0gdGhpcy5kcmFnVG87XG4gICAgICAvLyAgIHRoaXMucmVzZXRTaXplT2ZXcmFwcGVyRGl2KCk7XG4gICAgICAvLyAgIHRoaXMuYWRqdXN0Q29udGFpbmVyc0FuZFJvd3MoKTtcbiAgICAgIC8vIH1cbiAgICAgIHRoaXMucmVwYWludCgpO1xuICAgIH1cbiAgICB0aGlzLm1vdXNlU3RhcnRXaWR0aCA9IC0xO1xuICAgIHRoaXMubW91c2VTdGFydENvbHVtbkluZGV4ID0gLTE7XG4gICAgdGhpcy5kcmFnRnJvbSA9IC0xO1xuICAgIHRoaXMuZHJhZ1RvID0gLTE7XG4gICAgdGhpcy5tb3VzZVN0YXJ0QWN0aW9uID0gJyc7XG4gIH1cblxuICBtb3VzZU1vdmUobW91c2VNb3ZlRXZlbnQ6IEdlTW91c2VFdmVudCkge1xuICAgIHRoaXMuZXZlbnRMaXN0ZW5lci5vbk1vdXNlTW92ZWQobW91c2VNb3ZlRXZlbnQpO1xuICAgIHRoaXMuYWRqdXN0SG92ZXJSb3dzKG1vdXNlTW92ZUV2ZW50KTtcbiAgICB0aGlzLmFkanVzdEhvdmVyQ29sdW1ucyhtb3VzZU1vdmVFdmVudCk7XG4gIH1cblxuICBjb250ZXh0bWVudShtb3VzZU1vdmVFdmVudDogR2VNb3VzZUV2ZW50KSB7XG4gICAgdGhpcy5ldmVudExpc3RlbmVyLm9uQ29udGV4dG1lbnUobW91c2VNb3ZlRXZlbnQpO1xuICB9XG5cbiAgdG9nZ2xlRXhwYW5kQ29sbGFwc2VBbGwoZXhwYW5kOiBib29sZWFuID0gdHJ1ZSkge1xuICAgIGNvbnN0IGJvZHlBcmVhTW9kZWwgPSB0aGlzLnRhYmxlTW9kZWwuZ2V0Qm9keU1vZGVsKCk7XG4gICAgaWYgKGJvZHlBcmVhTW9kZWwgaW5zdGFuY2VvZiBBcmVhTW9kZWxUcmVlKSB7XG4gICAgICBjb25zdCBhbXQ6IEFyZWFNb2RlbFRyZWU8YW55PiA9IGJvZHlBcmVhTW9kZWw7XG4gICAgICBhbXQudG9nZ2xlRXhwYW5kQ29sbGFwc2VBbGwoZXhwYW5kKTtcbiAgICAgIHRoaXMucmVwYWludCgpO1xuICAgICAgdGhpcy5zdG9yZVN0YXRlQ29sbGFwc2VkRXhwYW5kU2VydmljZT8uY29sbGFwc2VkU3RhdGVBbGwoZXhwYW5kKTtcbiAgICB9XG4gIH1cblxuICB0b2dnbGVSb3dDaGVja2JveChyb3dJZHg6IG51bWJlciwgY29sSWR4OiBudW1iZXIsIGFyZWFJZGVudDogQXJlYUlkZW50KSB7XG4gICAgY29uc3QgYXJlYU1vZGVsID0gdGhpcy50YWJsZU1vZGVsLmdldEFyZWFNb2RlbChhcmVhSWRlbnQpO1xuICAgIGNvbnN0IHN0YXRlID0gYXJlYU1vZGVsLmlzUm93Q2hlY2tlZChyb3dJZHgpO1xuICAgIGNvbnN0IHNlbCA9IChzdGF0ZSA9PT0gdW5kZWZpbmVkIHx8IHN0YXRlID09PSAnc2VtaScgfHwgc3RhdGUgPT09ICdub25lJyk7XG4gICAgYXJlYU1vZGVsLnNldFJvd0NoZWNrZWQocm93SWR4LCBzZWwpO1xuICAgIHRoaXMucmVwYWludCgpO1xuICAgIGNvbnN0IHNlbGVjdGVkUm93cyA9IGFyZWFNb2RlbC5yb3dTZWxlY3Rpb25Nb2RlbD8uZ2V0Q2hlY2tlZFJvd3MoKTtcbiAgICB0aGlzLmV2ZW50TGlzdGVuZXIub25DaGVja2JveENoYW5nZWQoc2VsZWN0ZWRSb3dzID8gc2VsZWN0ZWRSb3dzIDogW10pO1xuICB9XG5cbiAgb25Nb3VzZUNsaWNrZWQoZXZ0OiBHZU1vdXNlRXZlbnQsIHByZXZpb3VzRXZ0OiBHZU1vdXNlRXZlbnQgfCB1bmRlZmluZWQpIHtcbiAgICBjb25zdCBkaXJ0eSA9IHRoaXMuc2VsZWN0aW9uU2VydmljZS5vbk1vdXNlQ2xpY2tlZChldnQsIHByZXZpb3VzRXZ0KTtcbiAgICB0aGlzLmV2ZW50TGlzdGVuZXIub25Nb3VzZUNsaWNrZWQoZXZ0KTtcbiAgICBpZiAoZGlydHkpIHtcbiAgICAgIHRoaXMuZGVib3VuY2UodGhpcy5yZXBhaW50LmJpbmQodGhpcyksIDEwKTtcbiAgICB9XG4gIH1cblxuICBleHRlcm5hbEZpbHRlckNoYW5nZWQoKSB7XG4gICAgY29uc3QgcHJlZGljdEZuID0gdGhpcy50YWJsZU9wdGlvbnMuZXh0ZXJuYWxGaWx0ZXJGdW5jdGlvbjtcbiAgICBpZiAocHJlZGljdEZuKSB7XG4gICAgICB0aGlzLmNsZWFyU2VsZWN0aW9uTW9kZWwoKTtcbiAgICAgIHRoaXMudGFibGVNb2RlbC5leHRlcm5hbEZpbHRlckNoYW5nZWQocHJlZGljdEZuKTtcbiAgICAgIHRoaXMucmVwYWludCgpO1xuICAgIH1cbiAgfVxuXG4gIG9uSGVhZGVyRGJsQ2xpY2tlZChldmVudDogTW91c2VFdmVudCwgcm93SWR4OiBudW1iZXIsIGNvbElkeDogbnVtYmVyKSB7XG4gICAgY29uc3QgY29sRGVmID0gdGhpcy50YWJsZU1vZGVsLmdldENvbHVtbkRlZihjb2xJZHgpO1xuICAgIGlmIChjb2xEZWY/LnNvcnRhYmxlICYmIGNvbERlZi5zb3J0YWJsZSgpKSB7XG4gICAgICBldmVudC5wcmV2ZW50RGVmYXVsdCgpO1xuICAgICAgY29uc3Qgc3RhdGVzOiBTb3J0U3RhdGVbXSA9IGNvbERlZi5zb3J0U3RhdGVzT3JkZXIgPyBjb2xEZWYuc29ydFN0YXRlc09yZGVyIDogdGhpcy50YWJsZU9wdGlvbnMuc29ydE9yZGVyO1xuICAgICAgY29uc3QgY3VycmVudFN0YXRlOiBTb3J0U3RhdGUgPSBjb2xEZWYuc29ydFN0YXRlID8/ICcnO1xuICAgICAgY29uc3QgbmV3U3RhdGUgPSBzdGF0ZXNbKHN0YXRlcy5pbmRleE9mKGN1cnJlbnRTdGF0ZSkgKyAxKSAlIHN0YXRlcy5sZW5ndGhdO1xuXG4gICAgICBjb25zdCBzb3J0SXRlbSA9IG5ldyBTb3J0SXRlbShjb2xJZHgsIG5ld1N0YXRlKTtcbiAgICAgIGNvbnN0IGRvbmUgPSB0aGlzLnRhYmxlTW9kZWwuZG9Tb3J0KFtzb3J0SXRlbV0pO1xuICAgICAgaWYgKGRvbmUpIHtcbiAgICAgICAgdGhpcy50YWJsZU1vZGVsLmdldENvbHVtbkRlZnMoKT8uZm9yRWFjaChjZCA9PiBjZC5zb3J0U3RhdGUgPSAnJyk7XG4gICAgICAgIGNvbERlZi5zb3J0U3RhdGUgPSBuZXdTdGF0ZTtcbiAgICAgIH1cbiAgICAgIHRoaXMucmVwYWludCgpO1xuICAgICAgdGhpcy5zdG9yZVNvcnRpbmdTZXJ2aWNlPy5zZXRTb3J0SXRlbXMoW3NvcnRJdGVtXSk7XG4gICAgfVxuICB9XG5cbiAgb25LZXlFdmVudChldnQ6IEdlS2V5RXZlbnQpIHtcbiAgICB0aGlzLmtleUV2ZW50ID0gZXZ0O1xuICAgIGNvbnNvbGUuaW5mbyh0aGlzLmtleUV2ZW50KTsgLy8gVE9ET1xuICAgIGlmICh0aGlzLmtleUV2ZW50LnN0YXR1cyA9PT0gJ3VwJyAmJiB0aGlzLmtleUV2ZW50Lm9yaWdpbmFsRXZlbnQ/LmNvZGUgPT09ICdGMicpIHtcbiAgICAgIHRoaXMua2V5RXZlbnQub3JpZ2luYWxFdmVudC5zdG9wUHJvcGFnYXRpb24oKTtcbiAgICAgIGNvbnNvbGUuaW5mbygnRjIuLi4nKTtcbiAgICAgIC8vIFRPRE8gIGNoZWNrLCBpZiB3ZSBjYW4gc3RhcnQgdG8gZWRpdCBhIGNlbGxcbiAgICB9XG4gIH1cblxuXG4gIHByaXZhdGUgY2xlYXJTZWxlY3Rpb25Nb2RlbCgpIHtcbiAgICBpZiAodGhpcy5nZXRTZWxlY3Rpb25Nb2RlbCkge1xuICAgICAgdGhpcy5nZXRTZWxlY3Rpb25Nb2RlbCgpPy5jbGVhcigpO1xuICAgIH1cbiAgfVxuXG4gIHByaXZhdGUgZGVidWdPbmNlKFxuICAgIGJvZHlYOiBudW1iZXIsXG4gICAgYm9keVk6IG51bWJlcixcbiAgKSB7XG4gICAgY29uc29sZS5jbGVhcigpO1xuICAgIGNvbnNvbGUuaW5mbygndGhpcy5ob3N0RWxlbWVudC5vZmZzZXRUb3AnLCB0aGlzLmhvc3RFbGVtZW50Lm9mZnNldFRvcCk7IC8vIHBhZ2VZIG9mIHRhYmxlIHRhZ1xuICAgIGNvbnNvbGUuaW5mbygndGhpcy5ob3N0RWxlbWVudC5zY3JvbGxIZWlnaHQnLCB0aGlzLmhvc3RFbGVtZW50LnNjcm9sbEhlaWdodCk7IC8vIGhlaWdodCBvZiB2aXNpYmxlIHNjcm9sbCBhcmVhXG4gICAgY29uc29sZS5pbmZvKCd0aGlzLnNjcm9sbFZpZXdwb3J0VG9wJywgdGhpcy5zY3JvbGxUb3ApOyAvLyBhbW91bnQgb2YgcHggc2Nyb2xsZWQgdG8gdG9wIChpbml0aWFsIDogMClcbiAgICBjb25zb2xlLmluZm8oJ3RoaXMuYXJlYUhlYWRlckNlbnRlci5wYXJlbnQuY2xpZW50SGVpZ2h0JywgdGhpcy5hcmVhSGVhZGVyQ2VudGVyLnBhcmVudC5jbGllbnRIZWlnaHQpO1xuICAgIGNvbnNvbGUuaW5mbygnYm9keVknLCBib2R5WSk7XG4gICAgY29uc29sZS5pbmZvKCdib2R5WCcsIGJvZHlYKTtcbiAgICBjb25zb2xlLmluZm8oJ3Jvd3MnLCB0aGlzLmZpcnN0VmlzaWJsZVJvd0luZGV4KTtcbiAgICBjb25zb2xlLmluZm8oJycsKTtcbiAgICBjb25zb2xlLmluZm8oJ3RoaXMudGFibGVNb2RlbCcsIHRoaXMudGFibGVNb2RlbCk7XG4gICAgY29uc29sZS5pbmZvKCcnLCk7XG4gICAgY29uc29sZS5pbmZvKCd0aGlzLm1vdXNlTW92ZUV2ZW50LmNsaWVudFgnLCB0aGlzLm1vdXNlSGFuZGxlci5tb3VzZUV2ZW50Py5jbGllbnRYKTtcbiAgICBjb25zb2xlLmluZm8oJ3RoaXMuaG9zdEVsZW1lbnQub2Zmc2V0TGVmdCcsIHRoaXMuaG9zdEVsZW1lbnQub2Zmc2V0TGVmdCk7XG4gICAgY29uc29sZS5pbmZvKCd0aGlzLmFyZWFCb2R5V2VzdEdlby53aWR0aCcsIHRoaXMuYXJlYUJvZHlXZXN0R2VvLndpZHRoKTtcbiAgfVxuXG4gIHByaXZhdGUgYXV0b1Jlc3RvcmVTY3JvbGxQb3NpdGlvbigpIHtcbiAgICBpZiAodGhpcy50YWJsZU9wdGlvbnM/LmF1dG9SZXN0b3JlT3B0aW9ucyAmJiB0aGlzLnN0b3JlU2Nyb2xsUG9zU3RhdGVTZXJ2aWNlKSB7XG4gICAgICBjb25zdCBhdXRvUmVzdG9yZU9wdGlvbnMgPSB0aGlzLnRhYmxlT3B0aW9ucy5hdXRvUmVzdG9yZU9wdGlvbnM7XG4gICAgICBpZiAoYXV0b1Jlc3RvcmVPcHRpb25zLmF1dG9SZXN0b3JlU2Nyb2xsUG9zaXRpb24pIHtcbiAgICAgICAgY29uc3Qgc2Nyb2xsT2Zmc2V0ID0gdGhpcy5zdG9yZVNjcm9sbFBvc1N0YXRlU2VydmljZS5nZXRTY3JvbGxPZmZzZXQoKTtcbiAgICAgICAgaWYgKHNjcm9sbE9mZnNldCkge1xuICAgICAgICAgIHRoaXMuc2Nyb2xsVmlld3BvcnQuc2Nyb2xsVG8oLi4uc2Nyb2xsT2Zmc2V0KTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIHByaXZhdGUgYXV0b1Jlc3RvcmVTb3J0aW5nU3RhdGUoKSB7XG4gICAgaWYgKHRoaXMudGFibGVPcHRpb25zPy5hdXRvUmVzdG9yZU9wdGlvbnM/LmF1dG9SZXN0b3JlU29ydGluZ1N0YXRlICYmIHRoaXMuc3RvcmVTb3J0aW5nU2VydmljZSkge1xuICAgICAgY29uc3Qgc29ydEl0ZW1zID0gdGhpcy5zdG9yZVNvcnRpbmdTZXJ2aWNlLmdldFNvcnRJdGVtcygpO1xuICAgICAgaWYgKHNvcnRJdGVtcz8ubGVuZ3RoKSB7XG4gICAgICAgIGNvbnN0IGFyZWFNb2RlbCA9IHRoaXMudGFibGVNb2RlbC5nZXRCb2R5TW9kZWwoKTtcbiAgICAgICAgYXJlYU1vZGVsLmRvU29ydChzb3J0SXRlbXMpO1xuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIHByaXZhdGUgYXV0b1Jlc3RvcmVDb2xsYXBzZWRFeHBhbmRlZFN0YXRlKCkge1xuICAgIGlmICh0aGlzLnRhYmxlT3B0aW9ucz8uYXV0b1Jlc3RvcmVPcHRpb25zPy5nZXRSb3dJZCAmJiB0aGlzLnN0b3JlU3RhdGVDb2xsYXBzZWRFeHBhbmRTZXJ2aWNlKSB7XG4gICAgICBjb25zdCBhdXRvUmVzdG9yZU9wdGlvbnMgPSB0aGlzLnRhYmxlT3B0aW9ucy5hdXRvUmVzdG9yZU9wdGlvbnM7XG4gICAgICBjb25zdCBnZXRSb3dJZCA9IGF1dG9SZXN0b3JlT3B0aW9ucy5nZXRSb3dJZDtcbiAgICAgIGlmIChhdXRvUmVzdG9yZU9wdGlvbnMuYXV0b1Jlc3RvcmVDb2xsYXBzZWRFeHBhbmRlZFN0YXRlICYmIGdldFJvd0lkKSB7XG4gICAgICAgIGNvbnN0IHN0YXRlID0gdGhpcy5zdG9yZVN0YXRlQ29sbGFwc2VkRXhwYW5kU2VydmljZS5jb2xsYXBzZWRFeHBhbmRlZFN0YXRlR2V0KCk7XG4gICAgICAgIGNvbnN0IGFyZWFNb2RlbCA9IHRoaXMudGFibGVNb2RlbC5nZXRBcmVhTW9kZWwoJ2JvZHknKTtcbiAgICAgICAgaWYgKGFyZWFNb2RlbCBpbnN0YW5jZW9mIEFyZWFNb2RlbFRyZWUpIHtcbiAgICAgICAgICBjb25zdCBhbXRyOiBBcmVhTW9kZWxUcmVlPGFueT4gPSBhcmVhTW9kZWw7XG4gICAgICAgICAgY29uc3Qgcm93Q291bnQgPSBhcmVhTW9kZWwuZ2V0Um93Q291bnQoKTtcblxuXG4gICAgICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCByb3dDb3VudDsgaSsrKSB7XG4gICAgICAgICAgICBjb25zdCByb3c6IFRyZWVSb3c8YW55PiB8IHVuZGVmaW5lZCA9IGFyZWFNb2RlbC5nZXRSb3dCeUluZGV4KGkpO1xuICAgICAgICAgICAgaWYgKHJvdykge1xuICAgICAgICAgICAgICBpZiAoc3RhdGUuYWxsRXhwYW5kZWQpIHtcbiAgICAgICAgICAgICAgICByb3cuZXhwYW5kZWQgPSB0cnVlO1xuXG4gICAgICAgICAgICAgIH0gZWxzZSBpZiAoc3RhdGUuYWxsQ29sbGFwc2VkKSB7XG4gICAgICAgICAgICAgICAgcm93LmV4cGFuZGVkID0gZmFsc2U7XG5cbiAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICBjb25zdCByb3dJZCA9IGdldFJvd0lkKHJvdy5kYXRhKTtcbiAgICAgICAgICAgICAgICBpZiAoc3RhdGUubW9kZSA9PT0gJ2V4cGFuZGVkJykge1xuICAgICAgICAgICAgICAgICAgcm93LmV4cGFuZGVkID0gKHRoaXMuc3RvcmVTdGF0ZUNvbGxhcHNlZEV4cGFuZFNlcnZpY2UuY29sbGFwc2VkRXhwYW5kZWRTdGF0ZUluY2x1ZGVzKHJvd0lkKSk7XG5cbiAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKHN0YXRlLm1vZGUgPT09ICdjb2xsYXBzZWQnKSB7XG4gICAgICAgICAgICAgICAgICByb3cuZXhwYW5kZWQgPSAoIXRoaXMuc3RvcmVTdGF0ZUNvbGxhcHNlZEV4cGFuZFNlcnZpY2UuY29sbGFwc2VkRXhwYW5kZWRTdGF0ZUluY2x1ZGVzKHJvd0lkKSk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuICAgICAgICAgIGFtdHIucmVjYWxjVmlzaWJsZVRyZWVSb3dzKCk7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG4gIH1cbn1cblxuIl19
313
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidGFibGUtc2NvcGUuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9saWJzL3RhYmxlL3NyYy9saWIvdGFibGUvdGFibGUtc2NvcGUudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBRUEsT0FBTyxFQUFFLFlBQVksRUFBRSxNQUFNLG9DQUFvQyxDQUFDO0FBRWxFLE9BQU8sRUFBRSxxQkFBcUIsRUFBRSxNQUFNLG1DQUFtQyxDQUFDO0FBRzFFLE9BQU8sRUFBRSxZQUFZLEVBQUUsTUFBTSxpQkFBaUIsQ0FBQztBQUUvQyxPQUFPLEVBQUUsUUFBUSxFQUFFLE1BQU0sYUFBYSxDQUFDO0FBRXZDLE9BQU8sRUFBRSxhQUFhLEVBQUUsTUFBTSw2Q0FBNkMsQ0FBQztBQUM1RSxPQUFPLEVBQUUsMEJBQTBCLEVBQUUsTUFBTSwwQ0FBMEMsQ0FBQztBQUN0RixPQUFPLEVBQUUsZ0NBQWdDLEVBQUUsTUFBTSxnREFBZ0QsQ0FBQztBQUNsRyxPQUFPLEVBQUUsd0JBQXdCLEVBQUUsTUFBTSx1Q0FBdUMsQ0FBQztBQUNqRixPQUFPLEVBQUUsV0FBVyxFQUFFLE1BQU0sZ0JBQWdCLENBQUM7QUFDN0MsT0FBTyxFQUFFLFFBQVEsRUFBRSxNQUFNLHlCQUF5QixDQUFDO0FBQ25ELE9BQU8sRUFBRSxZQUFZLEVBQUUsTUFBTSxpQkFBaUIsQ0FBQztBQUMvQyxPQUFPLEVBQUUsa0JBQWtCLEVBQUUsTUFBTSwyQ0FBMkMsQ0FBQztBQUMvRSxPQUFPLEVBQUUsZ0JBQWdCLEVBQUUsTUFBTSwrQkFBK0IsQ0FBQztBQUlqRSxPQUFPLEVBQUUsZUFBZSxFQUFFLE1BQU0sMkJBQTJCLENBQUM7QUFDNUQsT0FBTyxFQUFFLFlBQVksRUFBRSxNQUFNLGlCQUFpQixDQUFDO0FBRy9DLE1BQU0sT0FBTyxVQUFXLFNBQVEsV0FBVztJQW9CekMsWUFDRSxXQUEyQixFQUMzQixVQUF3QixFQUN4QixVQUF3QixFQUN4QixZQUE0QixFQUNULGFBQThCO1FB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QUMsUUFBUSxHQUFHLElBQUksQ0FBQzs2QkFFckI7aUNBQU0sSUFBSSxLQUFLLENBQUMsWUFBWSxFQUFFO2dDQUM3QixHQUFHLENBQUMsUUFBUSxHQUFHLEtBQUssQ0FBQzs2QkFFdEI7aUNBQU07Z0NBQ0wsTUFBTSxLQUFLLEdBQUcsUUFBUSxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsQ0FBQztnQ0FDakMsSUFBSSxLQUFLLENBQUMsSUFBSSxLQUFLLFVBQVUsRUFBRTtvQ0FDN0IsR0FBRyxDQUFDLFFBQVEsR0FBRyxDQUFDLElBQUksQ0FBQyxnQ0FBZ0MsQ0FBQyw4QkFBOEIsQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDO2lDQUU5RjtxQ0FBTSxJQUFJLEtBQUssQ0FBQyxJQUFJLEtBQUssV0FBVyxFQUFFO29DQUNyQyxHQUFHLENBQUMsUUFBUSxHQUFHLENBQUMsQ0FBQyxJQUFJLENBQUMsZ0NBQWdDLENBQUMsOEJBQThCLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQztpQ0FDL0Y7NkJBQ0Y7eUJBQ0Y7cUJBQ0Y7b0JBQ0QsSUFBSSxDQUFDLHFCQUFxQixFQUFFLENBQUM7aUJBQzlCO2FBQ0Y7U0FDRjtJQUNILENBQUM7Q0FDRiIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IFRhYmxlTW9kZWxJZiB9IGZyb20gXCIuL2RhdGEvdGFibGVtb2RlbC90YWJsZS1tb2RlbC5pZlwiO1xuaW1wb3J0IHsgQXJlYUlkZW50IH0gZnJvbSBcIi4vZGF0YS90YWJsZW1vZGVsL2FyZWEtaWRlbnQudHlwZVwiO1xuaW1wb3J0IHsgR2VNb3VzZUV2ZW50IH0gZnJvbSBcIi4vZGF0YS9jb21tb24vZXZlbnQvZ2UtbW91c2UtZXZlbnRcIjtcbmltcG9ydCB7IERvbVNlcnZpY2VJZiB9IGZyb20gXCIuL3NlcnZpY2UvZG9tLXNlcnZpY2UuaWZcIjtcbmltcG9ydCB7IENvbnZlbmllbmNlRG9tU2VydmljZSB9IGZyb20gXCIuL3NlcnZpY2UvY29udmVuaWVuY2UtZG9tLnNlcnZpY2VcIjtcbmltcG9ydCB7IFRhYmxlT3B0aW9uc0lmIH0gZnJvbSBcIi4vZGF0YS9vcHRpb25zL3RhYmxlLW9wdGlvbnMuaWZcIjtcbmltcG9ydCB7IFRyZWVSb3cgfSBmcm9tIFwiLi9kYXRhL2NvbW1vbi90cmVlLXJvd1wiO1xuaW1wb3J0IHsgTW91c2VIYW5kbGVyIH0gZnJvbSBcIi4vbW91c2UtaGFuZGxlclwiO1xuaW1wb3J0IHsgRXZlbnRMaXN0ZW5lcklmIH0gZnJvbSBcIi4vZXZlbnQtbGlzdGVuZXIuaWZcIjtcbmltcG9ydCB7IFRhYmxlQXBpIH0gZnJvbSBcIi4vdGFibGUtYXBpXCI7XG5pbXBvcnQgeyBTb3J0U3RhdGUgfSBmcm9tIFwiLi9kYXRhL2NvbW1vbi9zb3J0LXN0YXRlLnR5cGVcIjtcbmltcG9ydCB7IEFyZWFNb2RlbFRyZWUgfSBmcm9tIFwiLi9kYXRhL3RhYmxlbW9kZWwvYXJlYW1vZGVsL2FyZWEtbW9kZWwtdHJlZVwiO1xuaW1wb3J0IHsgU3RvcmVTdGF0ZVNjcm9sbFBvc1NlcnZpY2UgfSBmcm9tIFwiLi9zZXJ2aWNlL3N0b3JlLXN0YXRlLXNjcm9sbC1wb3Muc2VydmljZVwiO1xuaW1wb3J0IHsgU3RvcmVTdGF0ZUNvbGxhcHNlZEV4cGFuZFNlcnZpY2UgfSBmcm9tIFwiLi9zZXJ2aWNlL3N0b3JlLXN0YXRlLWNvbGxhcHNlZC1leHBhbmQuc2VydmljZVwiO1xuaW1wb3J0IHsgU3RvcmVTdGF0ZVNvcnRpbmdTZXJ2aWNlIH0gZnJvbSBcIi4vc2VydmljZS9zdG9yZS1zdGF0ZS1zb3J0aW5nLnNlcnZpY2VcIjtcbmltcG9ydCB7IFJlbmRlclNjb3BlIH0gZnJvbSBcIi4vcmVuZGVyLXNjb3BlXCI7XG5pbXBvcnQgeyBTb3J0SXRlbSB9IGZyb20gXCIuL2RhdGEvY29tbW9uL3NvcnQtaXRlbVwiO1xuaW1wb3J0IHsgSW5wdXRIYW5kbGVyIH0gZnJvbSBcIi4vaW5wdXQtaGFuZGxlclwiO1xuaW1wb3J0IHsgR2VNb2RlbENoYW5nZUV2ZW50IH0gZnJvbSBcIi4vZGF0YS9jb21tb24vZXZlbnQvZ2UtbW9kZWwtY2hhbmdlLWV2ZW50XCI7XG5pbXBvcnQgeyBTZWxlY3Rpb25TZXJ2aWNlIH0gZnJvbSBcIi4vc2VsZWN0aW9uL3NlbGVjdGlvbi1zZXJ2aWNlXCI7XG5pbXBvcnQgeyBHZUtleUV2ZW50IH0gZnJvbSBcIi4vZGF0YS9jb21tb24vZXZlbnQvZ2Uta2V5LWV2ZW50XCI7XG5pbXBvcnQgeyBPbkFjdGlvblRyaWdnZXJlZElmIH0gZnJvbSBcIi4vYWN0aW9uL29uLWFjdGlvbi10cmlnZ2VyZWQuaWZcIjtcbmltcG9ydCB7IEFjdGlvbklkIH0gZnJvbSBcIi4vYWN0aW9uL2FjdGlvbi1pZC50eXBlXCI7XG5pbXBvcnQgeyBTaG9ydGN1dFNlcnZpY2UgfSBmcm9tIFwiLi9hY3Rpb24vc2hvcnRjdXQuc2VydmljZVwiO1xuaW1wb3J0IHsgRXZlbnRBZGFwdGVyIH0gZnJvbSBcIi4vZXZlbnQtYWRhcHRlclwiO1xuXG5cbmV4cG9ydCBjbGFzcyBUYWJsZVNjb3BlIGV4dGVuZHMgUmVuZGVyU2NvcGUgaW1wbGVtZW50cyBPbkFjdGlvblRyaWdnZXJlZElmIHtcblxuXG4gIHB1YmxpYyBtb3VzZUhhbmRsZXI6IE1vdXNlSGFuZGxlcjtcbiAgcHVibGljIGlucHV0SGFuZGxlcjogSW5wdXRIYW5kbGVyO1xuICBwdWJsaWMgc2hvcnRjdXRTZXJ2aWNlOiBTaG9ydGN1dFNlcnZpY2U7XG5cbiAgcHVibGljIHN0b3JlU3RhdGVDb2xsYXBzZWRFeHBhbmRTZXJ2aWNlPzogU3RvcmVTdGF0ZUNvbGxhcHNlZEV4cGFuZFNlcnZpY2U7XG4gIHB1YmxpYyBzdG9yZVNvcnRpbmdTZXJ2aWNlPzogU3RvcmVTdGF0ZVNvcnRpbmdTZXJ2aWNlO1xuXG4gIHByb3RlY3RlZCBzZWxlY3Rpb25TZXJ2aWNlOiBTZWxlY3Rpb25TZXJ2aWNlID0gbmV3IFNlbGVjdGlvblNlcnZpY2UodGhpcyk7XG4gIHByb3RlY3RlZCBrZXlFdmVudD86IEdlS2V5RXZlbnQ7XG4gIHByaXZhdGUgYXBpID0gbmV3IFRhYmxlQXBpKHRoaXMpO1xuXG4gIHByaXZhdGUgbW91c2VTdGFydEFjdGlvbiA9IFwiXCI7XG4gIHByaXZhdGUgbW91c2VTdGFydFdpZHRoID0gLTE7XG4gIHByaXZhdGUgbW91c2VTdGFydENvbHVtbkluZGV4ID0gLTE7XG4gIHByaXZhdGUgZHJhZ0Zyb20gPSAtMTtcbiAgcHJpdmF0ZSBkcmFnVG8gPSAtMTtcblxuICBjb25zdHJ1Y3RvcihcbiAgICBob3N0RWxlbWVudDogSFRNTERpdkVsZW1lbnQsXG4gICAgdGFibGVNb2RlbDogVGFibGVNb2RlbElmLFxuICAgIGRvbVNlcnZpY2U6IERvbVNlcnZpY2VJZixcbiAgICB0YWJsZU9wdGlvbnM6IFRhYmxlT3B0aW9uc0lmLFxuICAgIHByb3RlY3RlZCByZWFkb25seSBldmVudExpc3RlbmVyOiBFdmVudExpc3RlbmVySWZcbiAgKSB7XG4gICAgc3VwZXIoXG4gICAgICBob3N0RWxlbWVudCxcbiAgICAgIHRhYmxlTW9kZWwsXG4gICAgICBuZXcgQ29udmVuaWVuY2VEb21TZXJ2aWNlKGRvbVNlcnZpY2UpLFxuICAgICAgdGFibGVPcHRpb25zXG4gICAgKTtcbiAgICBpZiAoIWV2ZW50TGlzdGVuZXIpIHtcbiAgICAgIHRoaXMuZXZlbnRMaXN0ZW5lciA9IG5ldyBFdmVudEFkYXB0ZXIoKTtcbiAgICB9XG4gICAgaWYgKHRoaXMudGFibGVPcHRpb25zPy5hdXRvUmVzdG9yZU9wdGlvbnMpIHtcbiAgICAgIGNvbnN0IGF1dG9SZXN0b3JlT3B0aW9ucyA9IHRoaXMudGFibGVPcHRpb25zLmF1dG9SZXN0b3JlT3B0aW9ucztcbiAgICAgIGNvbnN0IGtleUZuID0gYXV0b1Jlc3RvcmVPcHRpb25zLmdldFN0b3JhZ2VLZXlGbjtcbiAgICAgIGlmIChrZXlGbikge1xuICAgICAgICBpZiAoYXV0b1Jlc3RvcmVPcHRpb25zLmF1dG9SZXN0b3JlU2Nyb2xsUG9zaXRpb24pIHtcbiAgICAgICAgICB0aGlzLnN0b3JlU2Nyb2xsUG9zU3RhdGVTZXJ2aWNlID0gbmV3IFN0b3JlU3RhdGVTY3JvbGxQb3NTZXJ2aWNlKGtleUZuKTtcbiAgICAgICAgfVxuICAgICAgICBpZiAoYXV0b1Jlc3RvcmVPcHRpb25zLmF1dG9SZXN0b3JlQ29sbGFwc2VkRXhwYW5kZWRTdGF0ZSkge1xuICAgICAgICAgIHRoaXMuc3RvcmVTdGF0ZUNvbGxhcHNlZEV4cGFuZFNlcnZpY2UgPSBuZXcgU3RvcmVTdGF0ZUNvbGxhcHNlZEV4cGFuZFNlcnZpY2Uoa2V5Rm4pO1xuICAgICAgICB9XG4gICAgICAgIGlmIChhdXRvUmVzdG9yZU9wdGlvbnMuYXV0b1Jlc3RvcmVTb3J0aW5nU3RhdGUpIHtcbiAgICAgICAgICB0aGlzLnN0b3JlU29ydGluZ1NlcnZpY2UgPSBuZXcgU3RvcmVTdGF0ZVNvcnRpbmdTZXJ2aWNlKGtleUZuKTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cbiAgICB0aGlzLm1vdXNlSGFuZGxlciA9IG5ldyBNb3VzZUhhbmRsZXIodGhpcyk7XG4gICAgdGhpcy5pbnB1dEhhbmRsZXIgPSBuZXcgSW5wdXRIYW5kbGVyKHRoaXMpO1xuXG4gICAgdGhpcy5zaG9ydGN1dFNlcnZpY2UgPSBuZXcgU2hvcnRjdXRTZXJ2aWNlKHRoaXMpO1xuICAgIHRoaXMuc2hvcnRjdXRTZXJ2aWNlLmFkZExpc3RlbmVyKHRoaXMuc2VsZWN0aW9uU2VydmljZSk7XG4gIH1cblxuICBvbkFjdGlvblRyaWdnZXJlZChhY3Rpb25JZDogQWN0aW9uSWQpOiBib29sZWFuIHtcbiAgICBpZiAoYWN0aW9uSWQgPT09IFwiU1RBUlRfRURJVElOR1wiKSB7XG4gICAgICBpZiAodGhpcy5nZXRGb2N1c01vZGVsKSB7XG4gICAgICAgIGNvbnN0IGZtID0gdGhpcy5nZXRGb2N1c01vZGVsKCk7XG4gICAgICAgIGlmIChmbSkge1xuICAgICAgICAgIGNvbnN0IFtyb3dJZHgsIGNvbElkeF0gPSBmbS5nZXRGb2N1cygpO1xuICAgICAgICAgIGlmICh0aGlzLnRhYmxlTW9kZWwuZ2V0Qm9keU1vZGVsKCkuaXNFZGl0YWJsZShyb3dJZHgsIGNvbElkeCkpIHtcbiAgICAgICAgICAgIHRoaXMuY2xlYXJTZWxlY3Rpb24oKTtcbiAgICAgICAgICAgIHRoaXMuaW5pdFJlbmRlckVkaXRvcihyb3dJZHgsIGNvbElkeCk7XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuICAgIHJldHVybiBmYWxzZTtcbiAgfVxuXG4gIHVwZGF0ZU1vZGVsVmFsdWUoYXJlYUlkZW50OiBBcmVhSWRlbnQsIHJvd0luZGV4OiBudW1iZXIsIGNvbHVtbkluZGV4OiBudW1iZXIsIHZhbHVlOiBzdHJpbmcpIHtcbiAgICBpZiAoYXJlYUlkZW50ID09PSBcImJvZHlcIikge1xuICAgICAgY29uc3QgYm9keUFyZWFNb2RlbCA9IHRoaXMudGFibGVNb2RlbC5nZXRBcmVhTW9kZWwoYXJlYUlkZW50KTtcbiAgICAgIGNvbnN0IG9rOiBib29sZWFuID0gYm9keUFyZWFNb2RlbC5zZXRWYWx1ZShyb3dJbmRleCwgY29sdW1uSW5kZXgsIHZhbHVlLCB0aGlzLnRhYmxlTW9kZWwpO1xuICAgICAgaWYgKG9rKSB7XG4gICAgICAgIHRoaXMucmVzZXRFZGl0b3JSZW5kZXJlcigpO1xuICAgICAgICB0aGlzLnJlcGFpbnQoKTtcbiAgICAgICAgdGhpcy5ldmVudExpc3RlbmVyLm9uTW9kZWxDaGFuZ2VkKEdlTW9kZWxDaGFuZ2VFdmVudC5jcmVhdGVTaW5nbGUocm93SW5kZXgsIGNvbHVtbkluZGV4KSk7XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgZ2V0QXBpKCk6IFRhYmxlQXBpIHtcbiAgICByZXR1cm4gdGhpcy5hcGk7XG4gIH1cblxuICAvKlxuICAgKiBDYWxsZWQgYnkgdGhlIHRhYmxlIGNvbXBvbmVudFxuICAgKi9cbiAgZmlyc3RJbml0KCkge1xuICAgIHRoaXMudGFibGVNb2RlbC5pbml0KCk7XG4gICAgdGhpcy5hdXRvUmVzdG9yZUNvbGxhcHNlZEV4cGFuZGVkU3RhdGUoKTtcbiAgICB0aGlzLmF1dG9SZXN0b3JlU29ydGluZ1N0YXRlKCk7XG4gICAgdGhpcy5yZXNldFNpemVPZldyYXBwZXJEaXYoKTtcbiAgICB0aGlzLmFkanVzdENvbnRhaW5lcnNBbmRSb3dzKCk7XG4gICAgdGhpcy5hdXRvUmVzdG9yZVNjcm9sbFBvc2l0aW9uKCk7XG4gIH1cblxuICBjcmVhdGVHZU1vdXNlRXZlbnQobW91c2VFdmVudDogTW91c2VFdmVudCk6IEdlTW91c2VFdmVudCB7XG4gICAgY29uc3QgcmV0OiBHZU1vdXNlRXZlbnQgPSBuZXcgR2VNb3VzZUV2ZW50KCk7XG4gICAgcmV0Lm9yaWdpbmFsRXZlbnQgPSBtb3VzZUV2ZW50O1xuXG4gICAgaWYgKG1vdXNlRXZlbnQpIHtcbiAgICAgIGNvbnN0IHRhcmdldCA9IG1vdXNlRXZlbnQudGFyZ2V0IGFzIEhUTUxFbGVtZW50O1xuICAgICAgW3JldC5hcmVhSWRlbnQsIHJldC5zaWRlSWRlbnRdID0gdGhpcy5nZXRBcmVhQW5kU2lkZUlkZW50QnlBdHRyKHRhcmdldCk7XG4gICAgICByZXQucm93SW5kZXggPSB0aGlzLmdldE51bWJlckJ5QXR0cih0YXJnZXQsIFwiZGF0YS1yb3ctaW5kZXhcIik7XG4gICAgICByZXQuY29sdW1uSW5kZXggPSB0aGlzLmdldE51bWJlckJ5QXR0cih0YXJnZXQsIFwiZGF0YS1jb2wtaW5kZXhcIik7XG4gICAgICByZXQuYWN0aW9uID0gdGhpcy5nZXRTdHJpbmdCeUF0dHIodGFyZ2V0LCBcImRhdGEtZ2UtYWN0aW9uXCIpO1xuXG4gICAgICBjb25zdCBib2R5WSA9IG1vdXNlRXZlbnQuY2xpZW50WSAtIHRoaXMuaG9zdEVsZW1lbnQub2Zmc2V0VG9wIC0gdGhpcy5hcmVhSGVhZGVyQ2VudGVyLnBhcmVudC5jbGllbnRIZWlnaHQ7XG4gICAgICBjb25zdCBib2R5WCA9IG1vdXNlRXZlbnQuY2xpZW50WCAtIHRoaXMuaG9zdEVsZW1lbnQub2Zmc2V0TGVmdCAtIHRoaXMuYXJlYUJvZHlXZXN0R2VvLndpZHRoO1xuXG4gICAgICBpZiAocmV0LmFyZWFJZGVudCkge1xuICAgICAgICBjb25zdCBhbSA9IHRoaXMudGFibGVNb2RlbC5nZXRBcmVhTW9kZWwocmV0LmFyZWFJZGVudCk7XG4gICAgICAgIHJldC5yb3dUb3AgPSBhbS5nZXRZUG9zQnlSb3dJbmRleChyZXQucm93SW5kZXgpO1xuICAgICAgfVxuICAgICAgcmV0LmNvbHVtbkxlZnQgPSB0aGlzLnRhYmxlTW9kZWwuZ2V0WFBvc0J5Q29sdW1uSW5kZXgocmV0LmNvbHVtbkluZGV4KTtcblxuICAgICAgaWYgKG1vdXNlRXZlbnQuY3RybEtleSAmJiBtb3VzZUV2ZW50LmFsdEtleSkge1xuICAgICAgICBjb25zdCBib2R5WSA9IG1vdXNlRXZlbnQuY2xpZW50WSAtIHRoaXMuaG9zdEVsZW1lbnQub2Zmc2V0VG9wIC0gdGhpcy5hcmVhSGVhZGVyQ2VudGVyLnBhcmVudC5jbGllbnRIZWlnaHQ7XG4gICAgICAgIGNvbnN0IGJvZHlYID0gbW91c2VFdmVudC5jbGllbnRYIC0gdGhpcy5ob3N0RWxlbWVudC5vZmZzZXRMZWZ0IC0gdGhpcy5hcmVhQm9keVdlc3RHZW8ud2lkdGg7XG4gICAgICAgIHRoaXMuZGVidWdPbmNlKGJvZHlYLCBib2R5WSk7XG4gICAgICB9XG4gICAgfVxuICAgIHJldHVybiByZXQ7XG4gIH1cblxuICBvbk1vdXNlRG93bihtb3VzZUV2ZW50OiBHZU1vdXNlRXZlbnQpIHtcbiAgICBpZiAobW91c2VFdmVudC5jb2x1bW5JbmRleCA+IC0xXG4gICAgICAmJiBtb3VzZUV2ZW50LmFjdGlvblxuICAgICAgJiYgW1wicmVzaXplLWNvbHVtblwiLCBcImRyYWctY29sdW1uXCJdLmluY2x1ZGVzKG1vdXNlRXZlbnQuYWN0aW9uKSkge1xuXG4gICAgICB0aGlzLm1vdXNlU3RhcnRXaWR0aCA9IHRoaXMudGFibGVNb2RlbC5nZXRDb2x1bW5XaWR0aChtb3VzZUV2ZW50LmNvbHVtbkluZGV4KTtcbiAgICAgIHRoaXMubW91c2VTdGFydEFjdGlvbiA9IG1vdXNlRXZlbnQuYWN0aW9uO1xuICAgICAgdGhpcy5tb3VzZVN0YXJ0Q29sdW1uSW5kZXggPSBtb3VzZUV2ZW50LmNvbHVtbkluZGV4O1xuXG4gICAgICBpZiAodGhpcy5tb3VzZVN0YXJ0QWN0aW9uID09PSBcImRyYWctY29sdW1uXCIpIHtcbiAgICAgICAgdGhpcy5kcmFnRnJvbSA9IHRoaXMubW91c2VTdGFydENvbHVtbkluZGV4O1xuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIG1vdXNlRHJhZ2dpbmdPbkZyYW1lKG1vdXNlRXZlbnQ6IEdlTW91c2VFdmVudCkge1xuICAgIHRoaXMuZXZlbnRMaXN0ZW5lci5vbk1vdXNlRHJhZ2dpbmcobW91c2VFdmVudCk7XG4gICAgdGhpcy5tb3VzZUV2ZW50ID0gbW91c2VFdmVudDtcblxuICAgIGlmIChcbiAgICAgIHRoaXMubW91c2VTdGFydENvbHVtbkluZGV4ID4gLTFcbiAgICAgICYmIHRoaXMubW91c2VTdGFydEFjdGlvbiA9PT0gXCJyZXNpemUtY29sdW1uXCJcbiAgICAgICYmIHRoaXMudGFibGVPcHRpb25zLmNvbHVtbnNSZXNpemFibGUpIHtcbiAgICAgIHRoaXMucmVzaXplQ29sdW1uKG1vdXNlRXZlbnQpO1xuXG4gICAgfSBlbHNlIGlmIChcbiAgICAgIHRoaXMubW91c2VTdGFydEFjdGlvbiA9PT0gXCJkcmFnLWNvbHVtblwiXG4gICAgICAmJiBtb3VzZUV2ZW50LmNvbHVtbkluZGV4ID4gLTFcbiAgICAgICYmIHRoaXMudGFibGVPcHRpb25zLmNvbHVtbnNEcmFnZ2FibGUpIHtcblxuICAgICAgdGhpcy5kcmFnZ2luZ1RhcmdldENvbHVtbkluZGV4ID0gbW91c2VFdmVudC5jb2x1bW5JbmRleDtcbiAgICAgIHRoaXMuZHJhZ1RvID0gdGhpcy5kcmFnZ2luZ1RhcmdldENvbHVtbkluZGV4O1xuXG4gICAgICBpZiAodGhpcy5kcmFnRnJvbSA+IC0xICYmIHRoaXMuZHJhZ1RvID4gLTEgJiYgdGhpcy5kcmFnRnJvbSAhPT0gdGhpcy5kcmFnVG8pIHtcbiAgICAgICAgdGhpcy50YWJsZU1vZGVsLmNoYW5nZUNvbHVtbk9yZGVyKHRoaXMuZHJhZ0Zyb20sIHRoaXMuZHJhZ1RvKTtcbiAgICAgICAgdGhpcy5kcmFnRnJvbSA9IHRoaXMuZHJhZ1RvO1xuICAgICAgICB0aGlzLnJlc2V0U2l6ZU9mV3JhcHBlckRpdigpO1xuICAgICAgICB0aGlzLmFkanVzdENvbnRhaW5lcnNBbmRSb3dzKCk7XG4gICAgICB9XG4gICAgICB0aGlzLnJlcGFpbnQoKTtcbiAgICB9XG4gIH1cblxuICBtb3VzZURyYWdnaW5nRW5kT25GcmFtZShtb3VzZUV2ZW50OiBHZU1vdXNlRXZlbnQpIHtcbiAgICB0aGlzLmV2ZW50TGlzdGVuZXIub25Nb3VzZURyYWdnaW5nRW5kKG1vdXNlRXZlbnQpO1xuICAgIHRoaXMuZHJhZ2dpbmdUYXJnZXRDb2x1bW5JbmRleCA9IC0xO1xuXG4gICAgaWYgKHRoaXMubW91c2VTdGFydEFjdGlvbiA9PT0gXCJyZXNpemUtY29sdW1uXCIpIHtcbiAgICAgIHRoaXMucmVzaXplQ29sdW1uKG1vdXNlRXZlbnQpO1xuXG4gICAgfSBlbHNlIGlmICh0aGlzLm1vdXNlU3RhcnRBY3Rpb24gPT09IFwiZHJhZy1jb2x1bW5cIikge1xuICAgICAgdGhpcy5yZXBhaW50KCk7XG4gICAgfVxuICAgIHRoaXMubW91c2VTdGFydFdpZHRoID0gLTE7XG4gICAgdGhpcy5tb3VzZVN0YXJ0Q29sdW1uSW5kZXggPSAtMTtcbiAgICB0aGlzLmRyYWdGcm9tID0gLTE7XG4gICAgdGhpcy5kcmFnVG8gPSAtMTtcbiAgICB0aGlzLm1vdXNlU3RhcnRBY3Rpb24gPSBcIlwiO1xuICB9XG5cbiAgcHJpdmF0ZSByZXNpemVDb2x1bW4obW91c2VFdmVudDogR2VNb3VzZUV2ZW50KSB7XG4gICAgdGhpcy50YWJsZU1vZGVsLnNldENvbHVtbldpZHRoKHRoaXMubW91c2VTdGFydENvbHVtbkluZGV4LCB0aGlzLm1vdXNlU3RhcnRXaWR0aCArIG1vdXNlRXZlbnQuZHJhZ2dpbmdYKTtcbiAgICB0aGlzLnRhYmxlTW9kZWwucmVjYWxjUGFkZGluZygpO1xuICAgIHRoaXMucmVzZXRTaXplT2ZXcmFwcGVyRGl2KCk7XG4gICAgdGhpcy5hZGp1c3RDb250YWluZXJzQW5kUm93cygpO1xuICB9XG5cbiAgbW91c2VNb3ZlKG1vdXNlTW92ZUV2ZW50OiBHZU1vdXNlRXZlbnQpIHtcbiAgICB0aGlzLmV2ZW50TGlzdGVuZXIub25Nb3VzZU1vdmVkKG1vdXNlTW92ZUV2ZW50KTtcbiAgICB0aGlzLmFkanVzdEhvdmVyUm93cyhtb3VzZU1vdmVFdmVudCk7XG4gICAgdGhpcy5hZGp1c3RIb3ZlckNvbHVtbnMobW91c2VNb3ZlRXZlbnQpO1xuICB9XG5cbiAgY29udGV4dG1lbnUobW91c2VNb3ZlRXZlbnQ6IEdlTW91c2VFdmVudCkge1xuICAgIHRoaXMuZXZlbnRMaXN0ZW5lci5vbkNvbnRleHRtZW51KG1vdXNlTW92ZUV2ZW50KTtcbiAgfVxuXG4gIHRvZ2dsZUV4cGFuZENvbGxhcHNlQWxsKGV4cGFuZDogYm9vbGVhbiA9IHRydWUpIHtcbiAgICBjb25zdCBib2R5QXJlYU1vZGVsID0gdGhpcy50YWJsZU1vZGVsLmdldEJvZHlNb2RlbCgpO1xuICAgIGlmIChib2R5QXJlYU1vZGVsIGluc3RhbmNlb2YgQXJlYU1vZGVsVHJlZSkge1xuICAgICAgY29uc3QgYW10OiBBcmVhTW9kZWxUcmVlPGFueT4gPSBib2R5QXJlYU1vZGVsO1xuICAgICAgYW10LnRvZ2dsZUV4cGFuZENvbGxhcHNlQWxsKGV4cGFuZCk7XG4gICAgICB0aGlzLnJlcGFpbnQoKTtcbiAgICAgIHRoaXMuc3RvcmVTdGF0ZUNvbGxhcHNlZEV4cGFuZFNlcnZpY2U/LmNvbGxhcHNlZFN0YXRlQWxsKGV4cGFuZCk7XG4gICAgfVxuICB9XG5cbiAgdG9nZ2xlUm93Q2hlY2tib3gocm93SWR4OiBudW1iZXIsIF9jb2xJZHg6IG51bWJlciwgYXJlYUlkZW50OiBBcmVhSWRlbnQpIHtcbiAgICBjb25zdCBhcmVhTW9kZWwgPSB0aGlzLnRhYmxlTW9kZWwuZ2V0QXJlYU1vZGVsKGFyZWFJZGVudCk7XG4gICAgY29uc3Qgc3RhdGUgPSBhcmVhTW9kZWwuaXNSb3dDaGVja2VkKHJvd0lkeCk7XG4gICAgY29uc3Qgc2VsID0gKHN0YXRlID09PSB1bmRlZmluZWQgfHwgc3RhdGUgPT09IFwic2VtaVwiIHx8IHN0YXRlID09PSBcIm5vbmVcIik7XG4gICAgYXJlYU1vZGVsLnNldFJvd0NoZWNrZWQocm93SWR4LCBzZWwpO1xuICAgIHRoaXMucmVwYWludCgpO1xuICAgIGNvbnN0IHNlbGVjdGVkUm93cyA9IGFyZWFNb2RlbC5yb3dTZWxlY3Rpb25Nb2RlbD8uZ2V0Q2hlY2tlZFJvd3MoKTtcbiAgICB0aGlzLmV2ZW50TGlzdGVuZXIub25DaGVja2JveENoYW5nZWQoc2VsZWN0ZWRSb3dzID8gc2VsZWN0ZWRSb3dzIDogW10pO1xuICB9XG5cbiAgb25Nb3VzZUNsaWNrZWQoZXZ0OiBHZU1vdXNlRXZlbnQsIHByZXZpb3VzRXZ0OiBHZU1vdXNlRXZlbnQgfCB1bmRlZmluZWQpIHtcbiAgICBjb25zdCBkaXJ0eSA9IHRoaXMuc2VsZWN0aW9uU2VydmljZS5vbk1vdXNlQ2xpY2tlZChldnQsIHByZXZpb3VzRXZ0KTtcbiAgICB0aGlzLmV2ZW50TGlzdGVuZXIub25Nb3VzZUNsaWNrZWQoZXZ0KTtcbiAgICBpZiAoZGlydHkpIHtcbiAgICAgIHRoaXMuZGVib3VuY2UodGhpcy5yZXBhaW50LmJpbmQodGhpcyksIDEwKTtcbiAgICB9XG4gIH1cblxuICBleHRlcm5hbEZpbHRlckNoYW5nZWQoKSB7XG4gICAgY29uc3QgcHJlZGljdEZuID0gdGhpcy50YWJsZU9wdGlvbnMuZXh0ZXJuYWxGaWx0ZXJGdW5jdGlvbjtcbiAgICBpZiAocHJlZGljdEZuKSB7XG4gICAgICB0aGlzLmNsZWFyU2VsZWN0aW9uTW9kZWwoKTtcbiAgICAgIHRoaXMudGFibGVNb2RlbC5leHRlcm5hbEZpbHRlckNoYW5nZWQocHJlZGljdEZuKTtcbiAgICAgIHRoaXMucmVwYWludCgpO1xuICAgIH1cbiAgfVxuXG4gIG9uSGVhZGVyRGJsQ2xpY2tlZChldmVudDogTW91c2VFdmVudCwgX3Jvd0lkeDogbnVtYmVyLCBjb2xJZHg6IG51bWJlcikge1xuICAgIGNvbnN0IGNvbERlZiA9IHRoaXMudGFibGVNb2RlbC5nZXRDb2x1bW5EZWYoY29sSWR4KTtcbiAgICBpZiAoY29sRGVmPy5zb3J0YWJsZSAmJiBjb2xEZWYuc29ydGFibGUoKSkge1xuICAgICAgZXZlbnQucHJldmVudERlZmF1bHQoKTtcbiAgICAgIGNvbnN0IHN0YXRlczogU29ydFN0YXRlW10gPSBjb2xEZWYuc29ydFN0YXRlc09yZGVyID8gY29sRGVmLnNvcnRTdGF0ZXNPcmRlciA6IHRoaXMudGFibGVPcHRpb25zLnNvcnRPcmRlcjtcbiAgICAgIGNvbnN0IGN1cnJlbnRTdGF0ZTogU29ydFN0YXRlID0gY29sRGVmLnNvcnRTdGF0ZSA/PyBcIlwiO1xuICAgICAgY29uc3QgbmV3U3RhdGUgPSBzdGF0ZXNbKHN0YXRlcy5pbmRleE9mKGN1cnJlbnRTdGF0ZSkgKyAxKSAlIHN0YXRlcy5sZW5ndGhdO1xuXG4gICAgICBjb25zdCBzb3J0SXRlbSA9IG5ldyBTb3J0SXRlbShjb2xJZHgsIG5ld1N0YXRlKTtcbiAgICAgIGNvbnN0IGRvbmUgPSB0aGlzLnRhYmxlTW9kZWwuZG9Tb3J0KFtzb3J0SXRlbV0pO1xuICAgICAgaWYgKGRvbmUpIHtcbiAgICAgICAgdGhpcy50YWJsZU1vZGVsLmdldENvbHVtbkRlZnMoKT8uZm9yRWFjaChjZCA9PiBjZC5zb3J0U3RhdGUgPSBcIlwiKTtcbiAgICAgICAgY29sRGVmLnNvcnRTdGF0ZSA9IG5ld1N0YXRlO1xuICAgICAgfVxuICAgICAgdGhpcy5yZXBhaW50KCk7XG4gICAgICB0aGlzLnN0b3JlU29ydGluZ1NlcnZpY2U/LnNldFNvcnRJdGVtcyhbc29ydEl0ZW1dKTtcbiAgICB9XG4gIH1cblxuICBvbktleUV2ZW50KGV2dDogR2VLZXlFdmVudCkge1xuICAgIHRoaXMua2V5RXZlbnQgPSBldnQ7XG4gICAgY29uc29sZS5pbmZvKHRoaXMua2V5RXZlbnQpOyAvLyBUT0RPXG4gICAgaWYgKHRoaXMua2V5RXZlbnQuc3RhdHVzID09PSBcInVwXCIgJiYgdGhpcy5rZXlFdmVudC5vcmlnaW5hbEV2ZW50Py5jb2RlID09PSBcIkYyXCIpIHtcbiAgICAgIHRoaXMua2V5RXZlbnQub3JpZ2luYWxFdmVudC5zdG9wUHJvcGFnYXRpb24oKTtcbiAgICAgIGNvbnNvbGUuaW5mbyhcIkYyLi4uXCIpO1xuICAgICAgLy8gVE9ETyAgY2hlY2ssIGlmIHdlIGNhbiBzdGFydCB0byBlZGl0IGEgY2VsbFxuICAgIH1cbiAgfVxuXG5cbiAgcHJpdmF0ZSBjbGVhclNlbGVjdGlvbk1vZGVsKCkge1xuICAgIGlmICh0aGlzLmdldFNlbGVjdGlvbk1vZGVsKSB7XG4gICAgICB0aGlzLmdldFNlbGVjdGlvbk1vZGVsKCk/LmNsZWFyKCk7XG4gICAgfVxuICB9XG5cbiAgcHJpdmF0ZSBkZWJ1Z09uY2UoXG4gICAgYm9keVg6IG51bWJlcixcbiAgICBib2R5WTogbnVtYmVyXG4gICkge1xuICAgIGNvbnNvbGUuY2xlYXIoKTtcbiAgICBjb25zb2xlLmluZm8oXCJ0aGlzLmhvc3RFbGVtZW50Lm9mZnNldFRvcFwiLCB0aGlzLmhvc3RFbGVtZW50Lm9mZnNldFRvcCk7IC8vIHBhZ2VZIG9mIHRhYmxlIHRhZ1xuICAgIGNvbnNvbGUuaW5mbyhcInRoaXMuaG9zdEVsZW1lbnQuc2Nyb2xsSGVpZ2h0XCIsIHRoaXMuaG9zdEVsZW1lbnQuc2Nyb2xsSGVpZ2h0KTsgLy8gaGVpZ2h0IG9mIHZpc2libGUgc2Nyb2xsIGFyZWFcbiAgICBjb25zb2xlLmluZm8oXCJ0aGlzLnNjcm9sbFZpZXdwb3J0VG9wXCIsIHRoaXMuc2Nyb2xsVG9wKTsgLy8gYW1vdW50IG9mIHB4IHNjcm9sbGVkIHRvIHRvcCAoaW5pdGlhbCA6IDApXG4gICAgY29uc29sZS5pbmZvKFwidGhpcy5hcmVhSGVhZGVyQ2VudGVyLnBhcmVudC5jbGllbnRIZWlnaHRcIiwgdGhpcy5hcmVhSGVhZGVyQ2VudGVyLnBhcmVudC5jbGllbnRIZWlnaHQpO1xuICAgIGNvbnNvbGUuaW5mbyhcImJvZHlZXCIsIGJvZHlZKTtcbiAgICBjb25zb2xlLmluZm8oXCJib2R5WFwiLCBib2R5WCk7XG4gICAgY29uc29sZS5pbmZvKFwicm93c1wiLCB0aGlzLmZpcnN0VmlzaWJsZVJvd0luZGV4KTtcbiAgICBjb25zb2xlLmluZm8oXCJcIik7XG4gICAgY29uc29sZS5pbmZvKFwidGhpcy50YWJsZU1vZGVsXCIsIHRoaXMudGFibGVNb2RlbCk7XG4gICAgY29uc29sZS5pbmZvKFwiXCIpO1xuICAgIGNvbnNvbGUuaW5mbyhcInRoaXMubW91c2VNb3ZlRXZlbnQuY2xpZW50WFwiLCB0aGlzLm1vdXNlSGFuZGxlci5tb3VzZUV2ZW50Py5jbGllbnRYKTtcbiAgICBjb25zb2xlLmluZm8oXCJ0aGlzLmhvc3RFbGVtZW50Lm9mZnNldExlZnRcIiwgdGhpcy5ob3N0RWxlbWVudC5vZmZzZXRMZWZ0KTtcbiAgICBjb25zb2xlLmluZm8oXCJ0aGlzLmFyZWFCb2R5V2VzdEdlby53aWR0aFwiLCB0aGlzLmFyZWFCb2R5V2VzdEdlby53aWR0aCk7XG4gIH1cblxuICBwcml2YXRlIGF1dG9SZXN0b3JlU2Nyb2xsUG9zaXRpb24oKSB7XG4gICAgaWYgKHRoaXMudGFibGVPcHRpb25zPy5hdXRvUmVzdG9yZU9wdGlvbnMgJiYgdGhpcy5zdG9yZVNjcm9sbFBvc1N0YXRlU2VydmljZSkge1xuICAgICAgY29uc3QgYXV0b1Jlc3RvcmVPcHRpb25zID0gdGhpcy50YWJsZU9wdGlvbnMuYXV0b1Jlc3RvcmVPcHRpb25zO1xuICAgICAgaWYgKGF1dG9SZXN0b3JlT3B0aW9ucy5hdXRvUmVzdG9yZVNjcm9sbFBvc2l0aW9uKSB7XG4gICAgICAgIGNvbnN0IHNjcm9sbE9mZnNldCA9IHRoaXMuc3RvcmVTY3JvbGxQb3NTdGF0ZVNlcnZpY2UuZ2V0U2Nyb2xsT2Zmc2V0KCk7XG4gICAgICAgIGlmIChzY3JvbGxPZmZzZXQpIHtcbiAgICAgICAgICB0aGlzLnNjcm9sbFZpZXdwb3J0LnNjcm9sbFRvKC4uLnNjcm9sbE9mZnNldCk7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICBwcml2YXRlIGF1dG9SZXN0b3JlU29ydGluZ1N0YXRlKCkge1xuICAgIGlmICh0aGlzLnRhYmxlT3B0aW9ucz8uYXV0b1Jlc3RvcmVPcHRpb25zPy5hdXRvUmVzdG9yZVNvcnRpbmdTdGF0ZSAmJiB0aGlzLnN0b3JlU29ydGluZ1NlcnZpY2UpIHtcbiAgICAgIGNvbnN0IHNvcnRJdGVtcyA9IHRoaXMuc3RvcmVTb3J0aW5nU2VydmljZS5nZXRTb3J0SXRlbXMoKTtcbiAgICAgIGlmIChzb3J0SXRlbXM/Lmxlbmd0aCkge1xuICAgICAgICBjb25zdCBhcmVhTW9kZWwgPSB0aGlzLnRhYmxlTW9kZWwuZ2V0Qm9keU1vZGVsKCk7XG4gICAgICAgIGFyZWFNb2RlbC5kb1NvcnQoc29ydEl0ZW1zKTtcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICBwcml2YXRlIGF1dG9SZXN0b3JlQ29sbGFwc2VkRXhwYW5kZWRTdGF0ZSgpIHtcbiAgICBpZiAodGhpcy50YWJsZU9wdGlvbnM/LmF1dG9SZXN0b3JlT3B0aW9ucz8uZ2V0Um93SWQgJiYgdGhpcy5zdG9yZVN0YXRlQ29sbGFwc2VkRXhwYW5kU2VydmljZSkge1xuICAgICAgY29uc3QgYXV0b1Jlc3RvcmVPcHRpb25zID0gdGhpcy50YWJsZU9wdGlvbnMuYXV0b1Jlc3RvcmVPcHRpb25zO1xuICAgICAgY29uc3QgZ2V0Um93SWQgPSBhdXRvUmVzdG9yZU9wdGlvbnMuZ2V0Um93SWQ7XG4gICAgICBpZiAoYXV0b1Jlc3RvcmVPcHRpb25zLmF1dG9SZXN0b3JlQ29sbGFwc2VkRXhwYW5kZWRTdGF0ZSAmJiBnZXRSb3dJZCkge1xuICAgICAgICBjb25zdCBzdGF0ZSA9IHRoaXMuc3RvcmVTdGF0ZUNvbGxhcHNlZEV4cGFuZFNlcnZpY2UuY29sbGFwc2VkRXhwYW5kZWRTdGF0ZUdldCgpO1xuICAgICAgICBjb25zdCBhcmVhTW9kZWwgPSB0aGlzLnRhYmxlTW9kZWwuZ2V0QXJlYU1vZGVsKFwiYm9keVwiKTtcbiAgICAgICAgaWYgKGFyZWFNb2RlbCBpbnN0YW5jZW9mIEFyZWFNb2RlbFRyZWUpIHtcbiAgICAgICAgICBjb25zdCBhbXRyOiBBcmVhTW9kZWxUcmVlPGFueT4gPSBhcmVhTW9kZWw7XG4gICAgICAgICAgY29uc3Qgcm93Q291bnQgPSBhcmVhTW9kZWwuZ2V0Um93Q291bnQoKTtcblxuXG4gICAgICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCByb3dDb3VudDsgaSsrKSB7XG4gICAgICAgICAgICBjb25zdCByb3c6IFRyZWVSb3c8YW55PiB8IHVuZGVmaW5lZCA9IGFyZWFNb2RlbC5nZXRSb3dCeUluZGV4KGkpO1xuICAgICAgICAgICAgaWYgKHJvdykge1xuICAgICAgICAgICAgICBpZiAoc3RhdGUuYWxsRXhwYW5kZWQpIHtcbiAgICAgICAgICAgICAgICByb3cuZXhwYW5kZWQgPSB0cnVlO1xuXG4gICAgICAgICAgICAgIH0gZWxzZSBpZiAoc3RhdGUuYWxsQ29sbGFwc2VkKSB7XG4gICAgICAgICAgICAgICAgcm93LmV4cGFuZGVkID0gZmFsc2U7XG5cbiAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICBjb25zdCByb3dJZCA9IGdldFJvd0lkKHJvdy5kYXRhKTtcbiAgICAgICAgICAgICAgICBpZiAoc3RhdGUubW9kZSA9PT0gXCJleHBhbmRlZFwiKSB7XG4gICAgICAgICAgICAgICAgICByb3cuZXhwYW5kZWQgPSAodGhpcy5zdG9yZVN0YXRlQ29sbGFwc2VkRXhwYW5kU2VydmljZS5jb2xsYXBzZWRFeHBhbmRlZFN0YXRlSW5jbHVkZXMocm93SWQpKTtcblxuICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAoc3RhdGUubW9kZSA9PT0gXCJjb2xsYXBzZWRcIikge1xuICAgICAgICAgICAgICAgICAgcm93LmV4cGFuZGVkID0gKCF0aGlzLnN0b3JlU3RhdGVDb2xsYXBzZWRFeHBhbmRTZXJ2aWNlLmNvbGxhcHNlZEV4cGFuZGVkU3RhdGVJbmNsdWRlcyhyb3dJZCkpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cbiAgICAgICAgICBhbXRyLnJlY2FsY1Zpc2libGVUcmVlUm93cygpO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuICB9XG59XG5cblxuIl19