@jax-data-science/sci-image-visualizer 0.16.0 → 0.18.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (127) hide show
  1. package/esm2022/lib/contracts/display-types.mjs +4 -2
  2. package/esm2022/lib/contracts/image.contract.mjs +1 -1
  3. package/esm2022/lib/contracts/ports/spatial-data.port.mjs +1 -1
  4. package/esm2022/lib/contracts/region-editor-api.contract.mjs +1 -1
  5. package/esm2022/lib/contracts/region-store.contract.mjs +1 -1
  6. package/esm2022/lib/contracts/spatial-dataset.contract.mjs +1 -1
  7. package/esm2022/lib/contracts/visualizer.contract.mjs +1 -1
  8. package/esm2022/lib/geometry/cell-meshes.mjs +37 -0
  9. package/esm2022/lib/geometry/place.mjs +47 -0
  10. package/esm2022/lib/implementations/napari-js/napari-camera-depth.mjs +93 -0
  11. package/esm2022/lib/implementations/napari-js/napari-loading-state.mjs +1 -1
  12. package/esm2022/lib/implementations/napari-js/napari-region-overlay.mjs +2 -2
  13. package/esm2022/lib/implementations/napari-js/napari-scene.mjs +1 -1
  14. package/esm2022/lib/implementations/napari-js/napari-spatial-2d-scene.mjs +86 -18
  15. package/esm2022/lib/implementations/napari-js/napari-spatial-3d-cells.mjs +746 -0
  16. package/esm2022/lib/implementations/napari-js/napari-spatial-3d-scene.mjs +343 -18
  17. package/esm2022/lib/implementations/napari-js/napari-spatial-3d-transcripts.mjs +427 -0
  18. package/esm2022/lib/implementations/napari-js/napari-spatial-encoding.mjs +11 -4
  19. package/esm2022/lib/implementations/napari-js/napari-spatial-hover.mjs +95 -5
  20. package/esm2022/lib/implementations/napari-js/napari-spatial-scene.mjs +15 -1
  21. package/esm2022/lib/implementations/napari-js/napari-spatial-tiles.mjs +35 -8
  22. package/esm2022/lib/implementations/napari-js/napari-visualizer.service.mjs +40 -1
  23. package/esm2022/lib/implementations/napari-js/napari-volume-region-meshes.mjs +136 -28
  24. package/esm2022/lib/implementations/napari-js/napari-volume-scene.mjs +19 -3
  25. package/esm2022/lib/implementations/napari-js/spatial-tiles/cell-layers.mjs +188 -52
  26. package/esm2022/lib/implementations/napari-js/spatial-tiles/transcript-layers.mjs +35 -11
  27. package/esm2022/lib/implementations/osd/osd-region-overlay.mjs +2 -2
  28. package/esm2022/lib/implementations/spatial-data-http/spatial-data-http.service.mjs +10 -1
  29. package/esm2022/lib/region-editor/class-tree/class-tree.component.mjs +30 -3
  30. package/esm2022/lib/region-editor/classes-panel/classes-panel.component.mjs +15 -3
  31. package/esm2022/lib/region-editor/region-editor.component.mjs +24 -4
  32. package/esm2022/lib/region-source/region-source-ops.mjs +7 -1
  33. package/esm2022/lib/region-source/region-tiles.mjs +1 -1
  34. package/esm2022/lib/region-source/worker-region-source.mjs +24 -1
  35. package/esm2022/lib/routing-visualizer.service.mjs +404 -7
  36. package/esm2022/lib/spatial/observations-in-selection.mjs +83 -0
  37. package/esm2022/lib/spatial/plane-cells.mjs +119 -0
  38. package/esm2022/lib/spatial/spatial-controls.facade.mjs +304 -8
  39. package/esm2022/lib/spatial/spatial-encoding.mjs +52 -3
  40. package/esm2022/lib/spatial/spatial-hover.mjs +34 -1
  41. package/esm2022/lib/spatial/spatial-planes.mjs +49 -0
  42. package/esm2022/lib/spatial/spatial-selection.mjs +2 -2
  43. package/esm2022/lib/spatial/spatial-tile-merge.mjs +38 -1
  44. package/esm2022/lib/spatial/transcripts-in-selection.mjs +208 -0
  45. package/esm2022/lib/spatial-controls/spatial-cells-panel/spatial-cells-panel.component.mjs +42 -65
  46. package/esm2022/lib/spatial-controls/spatial-charts/spatial-charts.component.mjs +6 -2
  47. package/esm2022/lib/spatial-controls/spatial-color-by/spatial-color-by.component.mjs +187 -0
  48. package/esm2022/lib/spatial-controls/spatial-controls.component.mjs +51 -12
  49. package/esm2022/lib/spatial-controls/spatial-gene-style/spatial-gene-style.component.mjs +7 -3
  50. package/esm2022/lib/spatial-controls/spatial-gene-tree/spatial-gene-tree.component.mjs +21 -6
  51. package/esm2022/lib/spatial-controls/spatial-groups-panel/spatial-groups-panel.component.mjs +94 -13
  52. package/esm2022/lib/spatial-controls/spatial-key/spatial-key.component.mjs +3 -3
  53. package/esm2022/lib/spatial-controls/spatial-marker-genes-form/spatial-marker-genes-form.component.mjs +3 -3
  54. package/esm2022/lib/spatial-controls/spatial-observations-panel/spatial-observations-panel.component.mjs +79 -57
  55. package/esm2022/lib/spatial-controls/spatial-selection-observations/spatial-selection-observations.component.mjs +101 -0
  56. package/esm2022/lib/spatial-controls/spatial-selection-transcripts/spatial-selection-transcripts.component.mjs +94 -0
  57. package/esm2022/lib/spatial-controls/spatial-transcripts-panel/spatial-transcripts-panel.component.mjs +9 -3
  58. package/esm2022/lib/store/region-source-scope.mjs +10 -1
  59. package/esm2022/lib/store/region-store.service.mjs +33 -2
  60. package/esm2022/lib/toolbar/toolbar.component.mjs +10 -3
  61. package/esm2022/lib/visualizer/spatial-region-set.mjs +95 -0
  62. package/esm2022/lib/visualizer.component.mjs +40 -4
  63. package/fesm2022/{jax-data-science-sci-image-visualizer-jax-data-science-sci-image-visualizer-CYsPzX3J.mjs → jax-data-science-sci-image-visualizer-jax-data-science-sci-image-visualizer-CBiLcnE6.mjs} +4838 -656
  64. package/fesm2022/jax-data-science-sci-image-visualizer-jax-data-science-sci-image-visualizer-CBiLcnE6.mjs.map +1 -0
  65. package/fesm2022/{jax-data-science-sci-image-visualizer-onnx-sam-session-DaZVXq1s.mjs → jax-data-science-sci-image-visualizer-onnx-sam-session-BXHjv4PE.mjs} +2 -2
  66. package/fesm2022/{jax-data-science-sci-image-visualizer-onnx-sam-session-DaZVXq1s.mjs.map → jax-data-science-sci-image-visualizer-onnx-sam-session-BXHjv4PE.mjs.map} +1 -1
  67. package/fesm2022/jax-data-science-sci-image-visualizer.mjs +1 -1
  68. package/fesm2022/region-source.worker.js +84 -2
  69. package/lib/contracts/display-types.d.ts +99 -6
  70. package/lib/contracts/image.contract.d.ts +6 -0
  71. package/lib/contracts/ports/spatial-data.port.d.ts +7 -0
  72. package/lib/contracts/region-editor-api.contract.d.ts +9 -0
  73. package/lib/contracts/region-store.contract.d.ts +6 -0
  74. package/lib/contracts/spatial-dataset.contract.d.ts +7 -1
  75. package/lib/contracts/visualizer.contract.d.ts +43 -1
  76. package/lib/geometry/cell-meshes.d.ts +27 -0
  77. package/lib/geometry/place.d.ts +45 -0
  78. package/lib/implementations/napari-js/napari-camera-depth.d.ts +23 -0
  79. package/lib/implementations/napari-js/napari-loading-state.d.ts +1 -1
  80. package/lib/implementations/napari-js/napari-scene.d.ts +12 -0
  81. package/lib/implementations/napari-js/napari-spatial-2d-scene.d.ts +19 -3
  82. package/lib/implementations/napari-js/napari-spatial-3d-cells.d.ts +141 -0
  83. package/lib/implementations/napari-js/napari-spatial-3d-scene.d.ts +89 -0
  84. package/lib/implementations/napari-js/napari-spatial-3d-transcripts.d.ts +103 -0
  85. package/lib/implementations/napari-js/napari-spatial-encoding.d.ts +9 -2
  86. package/lib/implementations/napari-js/napari-spatial-hover.d.ts +22 -0
  87. package/lib/implementations/napari-js/napari-spatial-scene.d.ts +12 -0
  88. package/lib/implementations/napari-js/napari-spatial-tiles.d.ts +20 -6
  89. package/lib/implementations/napari-js/napari-visualizer.service.d.ts +27 -1
  90. package/lib/implementations/napari-js/napari-volume-region-meshes.d.ts +48 -16
  91. package/lib/implementations/napari-js/napari-volume-scene.d.ts +2 -0
  92. package/lib/implementations/napari-js/spatial-tiles/cell-layers.d.ts +54 -1
  93. package/lib/implementations/napari-js/spatial-tiles/transcript-layers.d.ts +11 -2
  94. package/lib/implementations/spatial-data-http/spatial-data-http.service.d.ts +7 -0
  95. package/lib/region-editor/class-tree/class-tree.component.d.ts +16 -1
  96. package/lib/region-editor/classes-panel/classes-panel.component.d.ts +10 -1
  97. package/lib/region-editor/region-editor.component.d.ts +4 -0
  98. package/lib/region-source/region-source-ops.d.ts +12 -0
  99. package/lib/region-source/region-tiles.d.ts +8 -0
  100. package/lib/region-source/worker-region-source.d.ts +18 -0
  101. package/lib/routing-visualizer.service.d.ts +140 -1
  102. package/lib/spatial/observations-in-selection.d.ts +43 -0
  103. package/lib/spatial/plane-cells.d.ts +37 -0
  104. package/lib/spatial/spatial-controls.facade.d.ts +59 -0
  105. package/lib/spatial/spatial-encoding.d.ts +24 -1
  106. package/lib/spatial/spatial-hover.d.ts +23 -0
  107. package/lib/spatial/spatial-planes.d.ts +22 -0
  108. package/lib/spatial/spatial-selection.d.ts +2 -1
  109. package/lib/spatial/spatial-tile-merge.d.ts +9 -0
  110. package/lib/spatial/transcripts-in-selection.d.ts +95 -0
  111. package/lib/spatial-controls/spatial-cells-panel/spatial-cells-panel.component.d.ts +19 -28
  112. package/lib/spatial-controls/spatial-color-by/spatial-color-by.component.d.ts +64 -0
  113. package/lib/spatial-controls/spatial-controls.component.d.ts +19 -2
  114. package/lib/spatial-controls/spatial-gene-style/spatial-gene-style.component.d.ts +3 -1
  115. package/lib/spatial-controls/spatial-gene-tree/spatial-gene-tree.component.d.ts +7 -0
  116. package/lib/spatial-controls/spatial-groups-panel/spatial-groups-panel.component.d.ts +28 -7
  117. package/lib/spatial-controls/spatial-observations-panel/spatial-observations-panel.component.d.ts +26 -23
  118. package/lib/spatial-controls/spatial-selection-observations/spatial-selection-observations.component.d.ts +48 -0
  119. package/lib/spatial-controls/spatial-selection-transcripts/spatial-selection-transcripts.component.d.ts +43 -0
  120. package/lib/spatial-controls/spatial-transcripts-panel/spatial-transcripts-panel.component.d.ts +3 -1
  121. package/lib/store/region-source-scope.d.ts +4 -0
  122. package/lib/store/region-store.service.d.ts +21 -0
  123. package/lib/toolbar/toolbar.component.d.ts +6 -1
  124. package/lib/visualizer/spatial-region-set.d.ts +55 -0
  125. package/lib/visualizer.component.d.ts +14 -0
  126. package/package.json +2 -2
  127. package/fesm2022/jax-data-science-sci-image-visualizer-jax-data-science-sci-image-visualizer-CYsPzX3J.mjs.map +0 -1
@@ -6,6 +6,8 @@
6
6
  * Protocol: `{ id, op, ...args }` → `{ id, ok: true, result }` | `{ id, ok: false, error }`.
7
7
  */
8
8
  import { reconstruct } from '../geometry/reconstruct';
9
+ import { reconstructCells } from '../geometry/cell-meshes';
10
+ import { toWorld } from '../geometry/place';
9
11
  import { RegionFeatureTable, } from './region-tiles';
10
12
  /** The open tables, by handle. */
11
13
  export class RegionSourceTables {
@@ -36,6 +38,10 @@ export class RegionSourceTables {
36
38
  return this.table(r.handle).classOutlines(r.classes, r.level, r.exclude);
37
39
  case 'mesh':
38
40
  return reconstruct(r.slices, r.options);
41
+ case 'cells':
42
+ return reconstructCells(r.cells, r.options);
43
+ case 'place':
44
+ return toWorld(r.vertices, r.frame);
39
45
  case 'export':
40
46
  return this.table(r.handle).exportGeoJson(r.exclude, r.extra);
41
47
  case 'close':
@@ -50,4 +56,4 @@ export class RegionSourceTables {
50
56
  return table;
51
57
  }
52
58
  }
53
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicmVnaW9uLXNvdXJjZS1vcHMuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi9zcmMvbGliL3JlZ2lvbi1zb3VyY2UvcmVnaW9uLXNvdXJjZS1vcHMudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7Ozs7OztHQU1HO0FBQ0gsT0FBTyxFQUFxQyxXQUFXLEVBQUUsTUFBTSx5QkFBeUIsQ0FBQztBQUV6RixPQUFPLEVBRUwsa0JBQWtCLEdBS25CLE1BQU0sZ0JBQWdCLENBQUM7QUFxQ3hCLGtDQUFrQztBQUNsQyxNQUFNLE9BQU8sa0JBQWtCO0lBQS9CO1FBQ21CLFdBQU0sR0FBRyxJQUFJLEdBQUcsRUFBOEIsQ0FBQztRQUN4RCxlQUFVLEdBQUcsQ0FBQyxDQUFDO0lBdUN6QixDQUFDO0lBckNDLEdBQUcsQ0FBZ0MsT0FBVTtRQUMzQyxPQUFPLElBQUksQ0FBQyxRQUFRLENBQUMsT0FBTyxDQUFpQyxDQUFDO0lBQ2hFLENBQUM7SUFFTyxRQUFRLENBQUMsQ0FBc0I7UUFDckMsUUFBUSxDQUFDLENBQUMsRUFBRSxFQUFFLENBQUM7WUFDYixLQUFLLE1BQU0sQ0FBQyxDQUFDLENBQUM7Z0JBQ1osTUFBTSxLQUFLLEdBQUcsa0JBQWtCLENBQUMsV0FBVyxDQUFDLENBQUMsQ0FBQyxJQUFJLEVBQUUsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxDQUFDO2dCQUNqRSxNQUFNLE1BQU0sR0FBRyxJQUFJLENBQUMsVUFBVSxFQUFFLENBQUM7Z0JBQ2pDLElBQUksQ0FBQyxNQUFNLENBQUMsR0FBRyxDQUFDLE1BQU0sRUFBRSxLQUFLLENBQUMsQ0FBQztnQkFDL0IsT0FBTyxFQUFFLE1BQU0sRUFBRSxJQUFJLEVBQUUsS0FBSyxDQUFDLElBQUksRUFBRSxFQUFFLENBQUM7WUFDeEMsQ0FBQztZQUNELEtBQUssTUFBTTtnQkFDVCxPQUFPLElBQUksQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxLQUFLLEVBQUUsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUM7WUFDN0QsS0FBSyxVQUFVO2dCQUNiLE9BQU8sSUFBSSxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsTUFBTSxDQUFDLENBQUMsUUFBUSxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQztZQUM5QyxLQUFLLE9BQU87Z0JBQ1YsT0FBTyxJQUFJLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxNQUFNLENBQUMsQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsS0FBSyxDQUFDLENBQUM7WUFDbEQsS0FBSyxTQUFTO2dCQUNaLE9BQU8sSUFBSSxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsTUFBTSxDQUFDLENBQUMsV0FBVyxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLE9BQU8sQ0FBQyxDQUFDO1lBQzFELEtBQUssVUFBVTtnQkFDYixPQUFPLElBQUksQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxDQUFDLGFBQWEsQ0FBQyxDQUFDLENBQUMsT0FBTyxFQUFFLENBQUMsQ0FBQyxLQUFLLEVBQUUsQ0FBQyxDQUFDLE9BQU8sQ0FBQyxDQUFDO1lBQzNFLEtBQUssTUFBTTtnQkFDVCxPQUFPLFdBQVcsQ0FBQyxDQUFDLENBQUMsTUFBTSxFQUFFLENBQUMsQ0FBQyxPQUFPLENBQUMsQ0FBQztZQUMxQyxLQUFLLFFBQVE7Z0JBQ1gsT0FBTyxJQUFJLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxNQUFNLENBQUMsQ0FBQyxhQUFhLENBQUMsQ0FBQyxDQUFDLE9BQU8sRUFBRSxDQUFDLENBQUMsS0FBSyxDQUFDLENBQUM7WUFDaEUsS0FBSyxPQUFPO2dCQUNWLElBQUksQ0FBQyxNQUFNLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQyxNQUFNLENBQUMsQ0FBQztnQkFDN0IsT0FBTyxJQUFJLENBQUM7UUFDaEIsQ0FBQztJQUNILENBQUM7SUFFTyxLQUFLLENBQUMsTUFBYztRQUMxQixNQUFNLEtBQUssR0FBRyxJQUFJLENBQUMsTUFBTSxDQUFDLEdBQUcsQ0FBQyxNQUFNLENBQUMsQ0FBQztRQUN0QyxJQUFJLENBQUMsS0FBSztZQUFFLE1BQU0sSUFBSSxLQUFLLENBQUMseUJBQXlCLE1BQU0sR0FBRyxDQUFDLENBQUM7UUFDaEUsT0FBTyxLQUFLLENBQUM7SUFDZixDQUFDO0NBQ0YiLCJzb3VyY2VzQ29udGVudCI6WyIvKipcbiAqIFRoZSByZWdpb24tc291cmNlIHdvcmtlcidzIHByb3RvY29sIGFuZCB0aGUgdGFibGVzIGl0IGhvbGRzLCBzaGFyZWQgYnkgdGhlIHdvcmtlciBhbmQgdGhlXG4gKiBtYWluLXRocmVhZCBmYWxsYmFjayAod2hpY2ggcnVucyB0aGUgdmVyeSBzYW1lIHtAbGluayBSZWdpb25Tb3VyY2VUYWJsZXN9IHdoZXJlIG5vIHdvcmtlciBjYW5cbiAqIHN0YXJ0KS5cbiAqXG4gKiBQcm90b2NvbDogYHsgaWQsIG9wLCAuLi5hcmdzIH1gIOKGkiBgeyBpZCwgb2s6IHRydWUsIHJlc3VsdCB9YCB8IGB7IGlkLCBvazogZmFsc2UsIGVycm9yIH1gLlxuICovXG5pbXBvcnQgeyBSZWNvbnN0cnVjdE9wdGlvbnMsIFNsaWNlT3V0bGluZXMsIHJlY29uc3RydWN0IH0gZnJvbSAnLi4vZ2VvbWV0cnkvcmVjb25zdHJ1Y3QnO1xuaW1wb3J0IHR5cGUgeyBNZXNoIH0gZnJvbSAnbmFwYXJpLWpzL2dlb21ldHJ5JztcbmltcG9ydCB7XG4gIENsYXNzT3V0bGluZXMsXG4gIFJlZ2lvbkZlYXR1cmVUYWJsZSxcbiAgUmVnaW9uSW5kZXhQYWdlLFxuICBSZWdpb25JbmRleFF1ZXJ5LFxuICBSZWdpb25Tb3VyY2VJbmZvLFxuICBSZWdpb25UaWxlLFxufSBmcm9tICcuL3JlZ2lvbi10aWxlcyc7XG5pbXBvcnQgdHlwZSB7IFNvdXJjZUZlYXR1cmUgfSBmcm9tICcuL3JlZ2lvbi1zb3VyY2UnO1xuXG5leHBvcnQgdHlwZSBSZWdpb25Tb3VyY2VSZXF1ZXN0ID1cbiAgfCB7IG9wOiAnb3Blbic7IHRleHQ6IHN0cmluZzsgdGlsZVNpemU/OiBudW1iZXIgfVxuICB8IHsgb3A6ICd0aWxlJzsgaGFuZGxlOiBudW1iZXI7IHo6IG51bWJlcjsgbGV2ZWw6IG51bWJlcjsgZ3g6IG51bWJlcjsgZ3k6IG51bWJlciB9XG4gIHwgeyBvcDogJ2ZlYXR1cmVzJzsgaGFuZGxlOiBudW1iZXI7IGlkczogcmVhZG9ubHkgc3RyaW5nW10gfVxuICB8IHsgb3A6ICdpbmRleCc7IGhhbmRsZTogbnVtYmVyOyB6OiBudW1iZXI7IHF1ZXJ5OiBSZWdpb25JbmRleFF1ZXJ5IH1cbiAgfCB7IG9wOiAnY2xhc3Nlcyc7IGhhbmRsZTogbnVtYmVyOyB6OiBudW1iZXIgfCBudWxsOyBleGNsdWRlPzogcmVhZG9ubHkgc3RyaW5nW10gfVxuICB8IHtcbiAgICAgIG9wOiAnb3V0bGluZXMnO1xuICAgICAgaGFuZGxlOiBudW1iZXI7XG4gICAgICBjbGFzc2VzOiByZWFkb25seSBzdHJpbmdbXSB8IG51bGw7XG4gICAgICBsZXZlbDogbnVtYmVyO1xuICAgICAgZXhjbHVkZT86IHJlYWRvbmx5IHN0cmluZ1tdO1xuICAgIH1cbiAgfCB7IG9wOiAnbWVzaCc7IHNsaWNlczogcmVhZG9ubHkgU2xpY2VPdXRsaW5lc1tdOyBvcHRpb25zPzogUmVjb25zdHJ1Y3RPcHRpb25zIH1cbiAgfCB7IG9wOiAnZXhwb3J0JzsgaGFuZGxlOiBudW1iZXI7IGV4Y2x1ZGU6IHJlYWRvbmx5IHN0cmluZ1tdOyBleHRyYTogcmVhZG9ubHkgb2JqZWN0W10gfVxuICB8IHsgb3A6ICdjbG9zZSc7IGhhbmRsZTogbnVtYmVyIH07XG5cbmV4cG9ydCBpbnRlcmZhY2UgUmVnaW9uU291cmNlUmVzdWx0cyB7XG4gIG9wZW46IHsgaGFuZGxlOiBudW1iZXI7IGluZm86IFJlZ2lvblNvdXJjZUluZm8gfTtcbiAgdGlsZTogUmVnaW9uVGlsZTtcbiAgZmVhdHVyZXM6IFNvdXJjZUZlYXR1cmVbXTtcbiAgaW5kZXg6IFJlZ2lvbkluZGV4UGFnZTtcbiAgY2xhc3NlczogUmVjb3JkPHN0cmluZywgbnVtYmVyPjtcbiAgb3V0bGluZXM6IENsYXNzT3V0bGluZXNbXTtcbiAgbWVzaDogTWVzaDtcbiAgZXhwb3J0OiBzdHJpbmc7XG4gIGNsb3NlOiBudWxsO1xufVxuXG5leHBvcnQgdHlwZSBSZWdpb25Tb3VyY2VNZXNzYWdlID0gUmVnaW9uU291cmNlUmVxdWVzdCAmIHsgaWQ6IG51bWJlciB9O1xuXG5leHBvcnQgdHlwZSBSZWdpb25Tb3VyY2VSZXBseSA9XG4gIHsgaWQ6IG51bWJlcjsgb2s6IHRydWU7IHJlc3VsdDogdW5rbm93biB9IHwgeyBpZDogbnVtYmVyOyBvazogZmFsc2U7IGVycm9yOiBzdHJpbmcgfTtcblxuLyoqIFRoZSBvcGVuIHRhYmxlcywgYnkgaGFuZGxlLiAqL1xuZXhwb3J0IGNsYXNzIFJlZ2lvblNvdXJjZVRhYmxlcyB7XG4gIHByaXZhdGUgcmVhZG9ubHkgdGFibGVzID0gbmV3IE1hcDxudW1iZXIsIFJlZ2lvbkZlYXR1cmVUYWJsZT4oKTtcbiAgcHJpdmF0ZSBuZXh0SGFuZGxlID0gMTtcblxuICBydW48UiBleHRlbmRzIFJlZ2lvblNvdXJjZVJlcXVlc3Q+KHJlcXVlc3Q6IFIpOiBSZWdpb25Tb3VyY2VSZXN1bHRzW1JbJ29wJ11dIHtcbiAgICByZXR1cm4gdGhpcy5kaXNwYXRjaChyZXF1ZXN0KSBhcyBSZWdpb25Tb3VyY2VSZXN1bHRzW1JbJ29wJ11dO1xuICB9XG5cbiAgcHJpdmF0ZSBkaXNwYXRjaChyOiBSZWdpb25Tb3VyY2VSZXF1ZXN0KTogUmVnaW9uU291cmNlUmVzdWx0c1trZXlvZiBSZWdpb25Tb3VyY2VSZXN1bHRzXSB7XG4gICAgc3dpdGNoIChyLm9wKSB7XG4gICAgICBjYXNlICdvcGVuJzoge1xuICAgICAgICBjb25zdCB0YWJsZSA9IFJlZ2lvbkZlYXR1cmVUYWJsZS5mcm9tR2VvSnNvbihyLnRleHQsIHIudGlsZVNpemUpO1xuICAgICAgICBjb25zdCBoYW5kbGUgPSB0aGlzLm5leHRIYW5kbGUrKztcbiAgICAgICAgdGhpcy50YWJsZXMuc2V0KGhhbmRsZSwgdGFibGUpO1xuICAgICAgICByZXR1cm4geyBoYW5kbGUsIGluZm86IHRhYmxlLmluZm8oKSB9O1xuICAgICAgfVxuICAgICAgY2FzZSAndGlsZSc6XG4gICAgICAgIHJldHVybiB0aGlzLnRhYmxlKHIuaGFuZGxlKS50aWxlKHIueiwgci5sZXZlbCwgci5neCwgci5neSk7XG4gICAgICBjYXNlICdmZWF0dXJlcyc6XG4gICAgICAgIHJldHVybiB0aGlzLnRhYmxlKHIuaGFuZGxlKS5mZWF0dXJlcyhyLmlkcyk7XG4gICAgICBjYXNlICdpbmRleCc6XG4gICAgICAgIHJldHVybiB0aGlzLnRhYmxlKHIuaGFuZGxlKS5pbmRleChyLnosIHIucXVlcnkpO1xuICAgICAgY2FzZSAnY2xhc3Nlcyc6XG4gICAgICAgIHJldHVybiB0aGlzLnRhYmxlKHIuaGFuZGxlKS5jbGFzc0NvdW50cyhyLnosIHIuZXhjbHVkZSk7XG4gICAgICBjYXNlICdvdXRsaW5lcyc6XG4gICAgICAgIHJldHVybiB0aGlzLnRhYmxlKHIuaGFuZGxlKS5jbGFzc091dGxpbmVzKHIuY2xhc3Nlcywgci5sZXZlbCwgci5leGNsdWRlKTtcbiAgICAgIGNhc2UgJ21lc2gnOlxuICAgICAgICByZXR1cm4gcmVjb25zdHJ1Y3Qoci5zbGljZXMsIHIub3B0aW9ucyk7XG4gICAgICBjYXNlICdleHBvcnQnOlxuICAgICAgICByZXR1cm4gdGhpcy50YWJsZShyLmhhbmRsZSkuZXhwb3J0R2VvSnNvbihyLmV4Y2x1ZGUsIHIuZXh0cmEpO1xuICAgICAgY2FzZSAnY2xvc2UnOlxuICAgICAgICB0aGlzLnRhYmxlcy5kZWxldGUoci5oYW5kbGUpO1xuICAgICAgICByZXR1cm4gbnVsbDtcbiAgICB9XG4gIH1cblxuICBwcml2YXRlIHRhYmxlKGhhbmRsZTogbnVtYmVyKTogUmVnaW9uRmVhdHVyZVRhYmxlIHtcbiAgICBjb25zdCB0YWJsZSA9IHRoaXMudGFibGVzLmdldChoYW5kbGUpO1xuICAgIGlmICghdGFibGUpIHRocm93IG5ldyBFcnJvcihgTm8gb3BlbiByZWdpb24gc291cmNlICR7aGFuZGxlfS5gKTtcbiAgICByZXR1cm4gdGFibGU7XG4gIH1cbn1cbiJdfQ==
59
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicmVnaW9uLXNvdXJjZS1vcHMuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi9zcmMvbGliL3JlZ2lvbi1zb3VyY2UvcmVnaW9uLXNvdXJjZS1vcHMudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7Ozs7OztHQU1HO0FBQ0gsT0FBTyxFQUFxQyxXQUFXLEVBQUUsTUFBTSx5QkFBeUIsQ0FBQztBQUN6RixPQUFPLEVBQTJCLGdCQUFnQixFQUFFLE1BQU0seUJBQXlCLENBQUM7QUFDcEYsT0FBTyxFQUFlLE9BQU8sRUFBRSxNQUFNLG1CQUFtQixDQUFDO0FBRXpELE9BQU8sRUFFTCxrQkFBa0IsR0FLbkIsTUFBTSxnQkFBZ0IsQ0FBQztBQXlDeEIsa0NBQWtDO0FBQ2xDLE1BQU0sT0FBTyxrQkFBa0I7SUFBL0I7UUFDbUIsV0FBTSxHQUFHLElBQUksR0FBRyxFQUE4QixDQUFDO1FBQ3hELGVBQVUsR0FBRyxDQUFDLENBQUM7SUEyQ3pCLENBQUM7SUF6Q0MsR0FBRyxDQUFnQyxPQUFVO1FBQzNDLE9BQU8sSUFBSSxDQUFDLFFBQVEsQ0FBQyxPQUFPLENBQWlDLENBQUM7SUFDaEUsQ0FBQztJQUVPLFFBQVEsQ0FBQyxDQUFzQjtRQUNyQyxRQUFRLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQztZQUNiLEtBQUssTUFBTSxDQUFDLENBQUMsQ0FBQztnQkFDWixNQUFNLEtBQUssR0FBRyxrQkFBa0IsQ0FBQyxXQUFXLENBQUMsQ0FBQyxDQUFDLElBQUksRUFBRSxDQUFDLENBQUMsUUFBUSxDQUFDLENBQUM7Z0JBQ2pFLE1BQU0sTUFBTSxHQUFHLElBQUksQ0FBQyxVQUFVLEVBQUUsQ0FBQztnQkFDakMsSUFBSSxDQUFDLE1BQU0sQ0FBQyxHQUFHLENBQUMsTUFBTSxFQUFFLEtBQUssQ0FBQyxDQUFDO2dCQUMvQixPQUFPLEVBQUUsTUFBTSxFQUFFLElBQUksRUFBRSxLQUFLLENBQUMsSUFBSSxFQUFFLEVBQUUsQ0FBQztZQUN4QyxDQUFDO1lBQ0QsS0FBSyxNQUFNO2dCQUNULE9BQU8sSUFBSSxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsTUFBTSxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLEtBQUssRUFBRSxDQUFDLENBQUMsRUFBRSxFQUFFLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQztZQUM3RCxLQUFLLFVBQVU7Z0JBQ2IsT0FBTyxJQUFJLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxNQUFNLENBQUMsQ0FBQyxRQUFRLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDO1lBQzlDLEtBQUssT0FBTztnQkFDVixPQUFPLElBQUksQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxLQUFLLENBQUMsQ0FBQztZQUNsRCxLQUFLLFNBQVM7Z0JBQ1osT0FBTyxJQUFJLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxNQUFNLENBQUMsQ0FBQyxXQUFXLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsT0FBTyxDQUFDLENBQUM7WUFDMUQsS0FBSyxVQUFVO2dCQUNiLE9BQU8sSUFBSSxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsTUFBTSxDQUFDLENBQUMsYUFBYSxDQUFDLENBQUMsQ0FBQyxPQUFPLEVBQUUsQ0FBQyxDQUFDLEtBQUssRUFBRSxDQUFDLENBQUMsT0FBTyxDQUFDLENBQUM7WUFDM0UsS0FBSyxNQUFNO2dCQUNULE9BQU8sV0FBVyxDQUFDLENBQUMsQ0FBQyxNQUFNLEVBQUUsQ0FBQyxDQUFDLE9BQU8sQ0FBQyxDQUFDO1lBQzFDLEtBQUssT0FBTztnQkFDVixPQUFPLGdCQUFnQixDQUFDLENBQUMsQ0FBQyxLQUFLLEVBQUUsQ0FBQyxDQUFDLE9BQU8sQ0FBQyxDQUFDO1lBQzlDLEtBQUssT0FBTztnQkFDVixPQUFPLE9BQU8sQ0FBQyxDQUFDLENBQUMsUUFBUSxFQUFFLENBQUMsQ0FBQyxLQUFLLENBQUMsQ0FBQztZQUN0QyxLQUFLLFFBQVE7Z0JBQ1gsT0FBTyxJQUFJLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxNQUFNLENBQUMsQ0FBQyxhQUFhLENBQUMsQ0FBQyxDQUFDLE9BQU8sRUFBRSxDQUFDLENBQUMsS0FBSyxDQUFDLENBQUM7WUFDaEUsS0FBSyxPQUFPO2dCQUNWLElBQUksQ0FBQyxNQUFNLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQyxNQUFNLENBQUMsQ0FBQztnQkFDN0IsT0FBTyxJQUFJLENBQUM7UUFDaEIsQ0FBQztJQUNILENBQUM7SUFFTyxLQUFLLENBQUMsTUFBYztRQUMxQixNQUFNLEtBQUssR0FBRyxJQUFJLENBQUMsTUFBTSxDQUFDLEdBQUcsQ0FBQyxNQUFNLENBQUMsQ0FBQztRQUN0QyxJQUFJLENBQUMsS0FBSztZQUFFLE1BQU0sSUFBSSxLQUFLLENBQUMseUJBQXlCLE1BQU0sR0FBRyxDQUFDLENBQUM7UUFDaEUsT0FBTyxLQUFLLENBQUM7SUFDZixDQUFDO0NBQ0YiLCJzb3VyY2VzQ29udGVudCI6WyIvKipcbiAqIFRoZSByZWdpb24tc291cmNlIHdvcmtlcidzIHByb3RvY29sIGFuZCB0aGUgdGFibGVzIGl0IGhvbGRzLCBzaGFyZWQgYnkgdGhlIHdvcmtlciBhbmQgdGhlXG4gKiBtYWluLXRocmVhZCBmYWxsYmFjayAod2hpY2ggcnVucyB0aGUgdmVyeSBzYW1lIHtAbGluayBSZWdpb25Tb3VyY2VUYWJsZXN9IHdoZXJlIG5vIHdvcmtlciBjYW5cbiAqIHN0YXJ0KS5cbiAqXG4gKiBQcm90b2NvbDogYHsgaWQsIG9wLCAuLi5hcmdzIH1gIOKGkiBgeyBpZCwgb2s6IHRydWUsIHJlc3VsdCB9YCB8IGB7IGlkLCBvazogZmFsc2UsIGVycm9yIH1gLlxuICovXG5pbXBvcnQgeyBSZWNvbnN0cnVjdE9wdGlvbnMsIFNsaWNlT3V0bGluZXMsIHJlY29uc3RydWN0IH0gZnJvbSAnLi4vZ2VvbWV0cnkvcmVjb25zdHJ1Y3QnO1xuaW1wb3J0IHsgQ2VsbE91dGxpbmVzLCBDZWxsc01lc2gsIHJlY29uc3RydWN0Q2VsbHMgfSBmcm9tICcuLi9nZW9tZXRyeS9jZWxsLW1lc2hlcyc7XG5pbXBvcnQgeyBWb2x1bWVGcmFtZSwgdG9Xb3JsZCB9IGZyb20gJy4uL2dlb21ldHJ5L3BsYWNlJztcbmltcG9ydCB0eXBlIHsgTWVzaCB9IGZyb20gJ25hcGFyaS1qcy9nZW9tZXRyeSc7XG5pbXBvcnQge1xuICBDbGFzc091dGxpbmVzLFxuICBSZWdpb25GZWF0dXJlVGFibGUsXG4gIFJlZ2lvbkluZGV4UGFnZSxcbiAgUmVnaW9uSW5kZXhRdWVyeSxcbiAgUmVnaW9uU291cmNlSW5mbyxcbiAgUmVnaW9uVGlsZSxcbn0gZnJvbSAnLi9yZWdpb24tdGlsZXMnO1xuaW1wb3J0IHR5cGUgeyBTb3VyY2VGZWF0dXJlIH0gZnJvbSAnLi9yZWdpb24tc291cmNlJztcblxuZXhwb3J0IHR5cGUgUmVnaW9uU291cmNlUmVxdWVzdCA9XG4gIHwgeyBvcDogJ29wZW4nOyB0ZXh0OiBzdHJpbmc7IHRpbGVTaXplPzogbnVtYmVyIH1cbiAgfCB7IG9wOiAndGlsZSc7IGhhbmRsZTogbnVtYmVyOyB6OiBudW1iZXI7IGxldmVsOiBudW1iZXI7IGd4OiBudW1iZXI7IGd5OiBudW1iZXIgfVxuICB8IHsgb3A6ICdmZWF0dXJlcyc7IGhhbmRsZTogbnVtYmVyOyBpZHM6IHJlYWRvbmx5IHN0cmluZ1tdIH1cbiAgfCB7IG9wOiAnaW5kZXgnOyBoYW5kbGU6IG51bWJlcjsgejogbnVtYmVyOyBxdWVyeTogUmVnaW9uSW5kZXhRdWVyeSB9XG4gIHwgeyBvcDogJ2NsYXNzZXMnOyBoYW5kbGU6IG51bWJlcjsgejogbnVtYmVyIHwgbnVsbDsgZXhjbHVkZT86IHJlYWRvbmx5IHN0cmluZ1tdIH1cbiAgfCB7XG4gICAgICBvcDogJ291dGxpbmVzJztcbiAgICAgIGhhbmRsZTogbnVtYmVyO1xuICAgICAgY2xhc3NlczogcmVhZG9ubHkgc3RyaW5nW10gfCBudWxsO1xuICAgICAgbGV2ZWw6IG51bWJlcjtcbiAgICAgIGV4Y2x1ZGU/OiByZWFkb25seSBzdHJpbmdbXTtcbiAgICB9XG4gIHwgeyBvcDogJ21lc2gnOyBzbGljZXM6IHJlYWRvbmx5IFNsaWNlT3V0bGluZXNbXTsgb3B0aW9ucz86IFJlY29uc3RydWN0T3B0aW9ucyB9XG4gIHwgeyBvcDogJ2NlbGxzJzsgY2VsbHM6IHJlYWRvbmx5IENlbGxPdXRsaW5lc1tdOyBvcHRpb25zPzogUmVjb25zdHJ1Y3RPcHRpb25zIH1cbiAgfCB7IG9wOiAncGxhY2UnOyB2ZXJ0aWNlczogRmxvYXQzMkFycmF5OyBmcmFtZTogVm9sdW1lRnJhbWUgfVxuICB8IHsgb3A6ICdleHBvcnQnOyBoYW5kbGU6IG51bWJlcjsgZXhjbHVkZTogcmVhZG9ubHkgc3RyaW5nW107IGV4dHJhOiByZWFkb25seSBvYmplY3RbXSB9XG4gIHwgeyBvcDogJ2Nsb3NlJzsgaGFuZGxlOiBudW1iZXIgfTtcblxuZXhwb3J0IGludGVyZmFjZSBSZWdpb25Tb3VyY2VSZXN1bHRzIHtcbiAgb3BlbjogeyBoYW5kbGU6IG51bWJlcjsgaW5mbzogUmVnaW9uU291cmNlSW5mbyB9O1xuICB0aWxlOiBSZWdpb25UaWxlO1xuICBmZWF0dXJlczogU291cmNlRmVhdHVyZVtdO1xuICBpbmRleDogUmVnaW9uSW5kZXhQYWdlO1xuICBjbGFzc2VzOiBSZWNvcmQ8c3RyaW5nLCBudW1iZXI+O1xuICBvdXRsaW5lczogQ2xhc3NPdXRsaW5lc1tdO1xuICBtZXNoOiBNZXNoO1xuICBjZWxsczogQ2VsbHNNZXNoO1xuICBwbGFjZTogRmxvYXQzMkFycmF5O1xuICBleHBvcnQ6IHN0cmluZztcbiAgY2xvc2U6IG51bGw7XG59XG5cbmV4cG9ydCB0eXBlIFJlZ2lvblNvdXJjZU1lc3NhZ2UgPSBSZWdpb25Tb3VyY2VSZXF1ZXN0ICYgeyBpZDogbnVtYmVyIH07XG5cbmV4cG9ydCB0eXBlIFJlZ2lvblNvdXJjZVJlcGx5ID1cbiAgeyBpZDogbnVtYmVyOyBvazogdHJ1ZTsgcmVzdWx0OiB1bmtub3duIH0gfCB7IGlkOiBudW1iZXI7IG9rOiBmYWxzZTsgZXJyb3I6IHN0cmluZyB9O1xuXG4vKiogVGhlIG9wZW4gdGFibGVzLCBieSBoYW5kbGUuICovXG5leHBvcnQgY2xhc3MgUmVnaW9uU291cmNlVGFibGVzIHtcbiAgcHJpdmF0ZSByZWFkb25seSB0YWJsZXMgPSBuZXcgTWFwPG51bWJlciwgUmVnaW9uRmVhdHVyZVRhYmxlPigpO1xuICBwcml2YXRlIG5leHRIYW5kbGUgPSAxO1xuXG4gIHJ1bjxSIGV4dGVuZHMgUmVnaW9uU291cmNlUmVxdWVzdD4ocmVxdWVzdDogUik6IFJlZ2lvblNvdXJjZVJlc3VsdHNbUlsnb3AnXV0ge1xuICAgIHJldHVybiB0aGlzLmRpc3BhdGNoKHJlcXVlc3QpIGFzIFJlZ2lvblNvdXJjZVJlc3VsdHNbUlsnb3AnXV07XG4gIH1cblxuICBwcml2YXRlIGRpc3BhdGNoKHI6IFJlZ2lvblNvdXJjZVJlcXVlc3QpOiBSZWdpb25Tb3VyY2VSZXN1bHRzW2tleW9mIFJlZ2lvblNvdXJjZVJlc3VsdHNdIHtcbiAgICBzd2l0Y2ggKHIub3ApIHtcbiAgICAgIGNhc2UgJ29wZW4nOiB7XG4gICAgICAgIGNvbnN0IHRhYmxlID0gUmVnaW9uRmVhdHVyZVRhYmxlLmZyb21HZW9Kc29uKHIudGV4dCwgci50aWxlU2l6ZSk7XG4gICAgICAgIGNvbnN0IGhhbmRsZSA9IHRoaXMubmV4dEhhbmRsZSsrO1xuICAgICAgICB0aGlzLnRhYmxlcy5zZXQoaGFuZGxlLCB0YWJsZSk7XG4gICAgICAgIHJldHVybiB7IGhhbmRsZSwgaW5mbzogdGFibGUuaW5mbygpIH07XG4gICAgICB9XG4gICAgICBjYXNlICd0aWxlJzpcbiAgICAgICAgcmV0dXJuIHRoaXMudGFibGUoci5oYW5kbGUpLnRpbGUoci56LCByLmxldmVsLCByLmd4LCByLmd5KTtcbiAgICAgIGNhc2UgJ2ZlYXR1cmVzJzpcbiAgICAgICAgcmV0dXJuIHRoaXMudGFibGUoci5oYW5kbGUpLmZlYXR1cmVzKHIuaWRzKTtcbiAgICAgIGNhc2UgJ2luZGV4JzpcbiAgICAgICAgcmV0dXJuIHRoaXMudGFibGUoci5oYW5kbGUpLmluZGV4KHIueiwgci5xdWVyeSk7XG4gICAgICBjYXNlICdjbGFzc2VzJzpcbiAgICAgICAgcmV0dXJuIHRoaXMudGFibGUoci5oYW5kbGUpLmNsYXNzQ291bnRzKHIueiwgci5leGNsdWRlKTtcbiAgICAgIGNhc2UgJ291dGxpbmVzJzpcbiAgICAgICAgcmV0dXJuIHRoaXMudGFibGUoci5oYW5kbGUpLmNsYXNzT3V0bGluZXMoci5jbGFzc2VzLCByLmxldmVsLCByLmV4Y2x1ZGUpO1xuICAgICAgY2FzZSAnbWVzaCc6XG4gICAgICAgIHJldHVybiByZWNvbnN0cnVjdChyLnNsaWNlcywgci5vcHRpb25zKTtcbiAgICAgIGNhc2UgJ2NlbGxzJzpcbiAgICAgICAgcmV0dXJuIHJlY29uc3RydWN0Q2VsbHMoci5jZWxscywgci5vcHRpb25zKTtcbiAgICAgIGNhc2UgJ3BsYWNlJzpcbiAgICAgICAgcmV0dXJuIHRvV29ybGQoci52ZXJ0aWNlcywgci5mcmFtZSk7XG4gICAgICBjYXNlICdleHBvcnQnOlxuICAgICAgICByZXR1cm4gdGhpcy50YWJsZShyLmhhbmRsZSkuZXhwb3J0R2VvSnNvbihyLmV4Y2x1ZGUsIHIuZXh0cmEpO1xuICAgICAgY2FzZSAnY2xvc2UnOlxuICAgICAgICB0aGlzLnRhYmxlcy5kZWxldGUoci5oYW5kbGUpO1xuICAgICAgICByZXR1cm4gbnVsbDtcbiAgICB9XG4gIH1cblxuICBwcml2YXRlIHRhYmxlKGhhbmRsZTogbnVtYmVyKTogUmVnaW9uRmVhdHVyZVRhYmxlIHtcbiAgICBjb25zdCB0YWJsZSA9IHRoaXMudGFibGVzLmdldChoYW5kbGUpO1xuICAgIGlmICghdGFibGUpIHRocm93IG5ldyBFcnJvcihgTm8gb3BlbiByZWdpb24gc291cmNlICR7aGFuZGxlfS5gKTtcbiAgICByZXR1cm4gdGFibGU7XG4gIH1cbn1cbiJdfQ==
@@ -705,4 +705,4 @@ function ringsBox(rings) {
705
705
  }
706
706
  return [x0, y0, x1, y1];
707
707
  }
708
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicmVnaW9uLXRpbGVzLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vc3JjL2xpYi9yZWdpb24tc291cmNlL3JlZ2lvbi10aWxlcy50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTs7Ozs7Ozs7Ozs7Ozs7R0FjRztBQUNILE9BQU8sRUFBRSxRQUFRLEVBQUUsTUFBTSxvQkFBb0IsQ0FBQztBQUM5QyxPQUFPLEVBQUUsWUFBWSxFQUFFLE1BQU0sa0JBQWtCLENBQUM7QUFDaEQsT0FBTyxFQUFFLFNBQVMsRUFBRSxNQUFNLHVCQUF1QixDQUFDO0FBQ2xELE9BQU8sRUFBRSxTQUFTLEVBQUUsTUFBTSx5QkFBeUIsQ0FBQztBQUtwRCwrQ0FBK0M7QUFDL0MsTUFBTSxDQUFDLE1BQU0sZ0JBQWdCLEdBQUcsR0FBRyxDQUFDO0FBc0pwQzs7OztHQUlHO0FBQ0gsTUFBTSxVQUFVLGNBQWMsQ0FBQyxZQUFvQixFQUFFLE1BQWM7SUFDakUsSUFBSSxDQUFDLENBQUMsWUFBWSxHQUFHLENBQUMsQ0FBQyxJQUFJLE1BQU0sSUFBSSxDQUFDO1FBQUUsT0FBTyxDQUFDLENBQUM7SUFDakQsTUFBTSxLQUFLLEdBQUcsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsWUFBWSxDQUFDLEdBQUcsSUFBSSxDQUFDLENBQUM7SUFDekQsT0FBTyxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUMsRUFBRSxJQUFJLENBQUMsR0FBRyxDQUFDLE1BQU0sR0FBRyxDQUFDLEVBQUUsS0FBSyxDQUFDLENBQUMsQ0FBQztBQUNsRCxDQUFDO0FBRUQsd0VBQXdFO0FBQ3hFLE1BQU0sVUFBVSxjQUFjLENBQUMsS0FBYTtJQUMxQyxPQUFPLEtBQUssSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsS0FBSyxHQUFHLENBQUMsQ0FBQyxDQUFDO0FBQzNDLENBQUM7QUFFRCxrR0FBa0c7QUFDbEcsTUFBTSxVQUFVLGNBQWMsQ0FBQyxLQUFhO0lBQzFDLE9BQU8sS0FBSyxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLElBQUksS0FBSyxDQUFDO0FBQ3JDLENBQUM7QUFFRCw2Q0FBNkM7QUFDN0MsTUFBTSxVQUFVLGFBQWEsQ0FBQyxLQUFhLEVBQUUsUUFBUSxHQUFHLGdCQUFnQjtJQUN0RSxPQUFPLFFBQVEsR0FBRyxDQUFDLElBQUksS0FBSyxDQUFDO0FBQy9CLENBQUM7QUFFRDs7O0dBR0c7QUFDSCxNQUFNLFVBQVUsaUJBQWlCLENBQy9CLElBQVUsRUFDVixLQUFhLEVBQ2IsUUFBZ0IsRUFDaEIsTUFBbUIsRUFDbkIsS0FBSyxHQUFHLFFBQVE7SUFFaEIsSUFBSSxDQUFDLE1BQU07UUFBRSxPQUFPLEVBQUUsQ0FBQztJQUN2QixNQUFNLEVBQUUsR0FBRyxJQUFJLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsRUFBRSxNQUFNLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztJQUN4QyxNQUFNLEVBQUUsR0FBRyxJQUFJLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsRUFBRSxNQUFNLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztJQUN4QyxNQUFNLEVBQUUsR0FBRyxJQUFJLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsRUFBRSxNQUFNLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztJQUN4QyxNQUFNLEVBQUUsR0FBRyxJQUFJLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsRUFBRSxNQUFNLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztJQUN4QyxJQUFJLEVBQUUsR0FBRyxFQUFFLElBQUksRUFBRSxHQUFHLEVBQUU7UUFBRSxPQUFPLEVBQUUsQ0FBQztJQUNsQyxNQUFNLElBQUksR0FBRyxhQUFhLENBQUMsS0FBSyxFQUFFLFFBQVEsQ0FBQyxDQUFDO0lBQzVDLE1BQU0sR0FBRyxHQUFHLElBQUksQ0FBQyxLQUFLLENBQUMsRUFBRSxHQUFHLElBQUksQ0FBQyxDQUFDO0lBQ2xDLE1BQU0sR0FBRyxHQUFHLElBQUksQ0FBQyxLQUFLLENBQUMsRUFBRSxHQUFHLElBQUksQ0FBQyxDQUFDO0lBQ2xDLE1BQU0sR0FBRyxHQUFHLElBQUksQ0FBQyxLQUFLLENBQUMsRUFBRSxHQUFHLElBQUksQ0FBQyxDQUFDO0lBQ2xDLE1BQU0sR0FBRyxHQUFHLElBQUksQ0FBQyxLQUFLLENBQUMsRUFBRSxHQUFHLElBQUksQ0FBQyxDQUFDO0lBQ2xDLE1BQU0sRUFBRSxHQUFHLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxHQUFHLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsR0FBRyxJQUFJLENBQUM7SUFDMUMsTUFBTSxFQUFFLEdBQUcsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLEdBQUcsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxHQUFHLElBQUksQ0FBQztJQUMxQyxNQUFNLEdBQUcsR0FBb0IsRUFBRSxDQUFDO0lBQ2hDLEtBQUssSUFBSSxFQUFFLEdBQUcsR0FBRyxFQUFFLEVBQUUsSUFBSSxHQUFHLEVBQUUsRUFBRSxFQUFFLEVBQUUsQ0FBQztRQUNuQyxLQUFLLElBQUksRUFBRSxHQUFHLEdBQUcsRUFBRSxFQUFFLElBQUksR0FBRyxFQUFFLEVBQUUsRUFBRTtZQUFFLEdBQUcsQ0FBQyxJQUFJLENBQUMsRUFBRSxLQUFLLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxDQUFDLENBQUM7SUFDbEUsQ0FBQztJQUNELE1BQU0sQ0FBQyxHQUFHLENBQUMsQ0FBZ0IsRUFBRSxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxHQUFHLEdBQUcsR0FBRyxFQUFFLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsRUFBRSxHQUFHLEdBQUcsR0FBRyxFQUFFLENBQUMsSUFBSSxDQUFDLENBQUM7SUFDaEYsR0FBRyxDQUFDLElBQUksQ0FB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QUFDO1lBQ2hELElBQUksQ0FBQyxLQUFLLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxDQUFDO1lBQ3ZCLElBQUksQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDO1lBQ3JCLElBQUksQ0FBQyxLQUFLLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxDQUFDO1lBQ3ZCLE1BQU0sR0FBRyxHQUFHLFFBQVEsQ0FBQyxLQUFLLENBQUMsQ0FBQztZQUM1QixJQUFJLENBQUMsS0FBSyxDQUFDLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQztZQUNyQixJQUFJLEtBQUssQ0FBQyxNQUFNLEVBQUUsQ0FBQztnQkFDakIsRUFBRSxHQUFHLElBQUksQ0FBQyxHQUFHLENBQUMsRUFBRSxFQUFFLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO2dCQUMxQixFQUFFLEdBQUcsSUFBSSxDQUFDLEdBQUcsQ0FBQyxFQUFFLEVBQUUsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7Z0JBQzFCLEVBQUUsR0FBRyxJQUFJLENBQUMsR0FBRyxDQUFDLEVBQUUsRUFBRSxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztnQkFDMUIsRUFBRSxHQUFHLElBQUksQ0FBQyxHQUFHLENBQUMsRUFBRSxFQUFFLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO1lBQzVCLENBQUM7UUFDSCxDQUFDLENBQUMsQ0FBQztRQUNILElBQUksQ0FBQyxNQUFNLEdBQUcsRUFBRSxJQUFJLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDO1FBQ2pELE1BQU0sTUFBTSxHQUFHLElBQUksQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsRUFBRSxJQUFJLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxFQUFFLElBQUks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T0FBTyxHQUFHLElBQUksR0FBRyxDQUFDLEtBQUssQ0FBQyxPQUFPLElBQUksRUFBRSxDQUFDLENBQUM7UUFDN0MsTUFBTSxPQUFPLEdBQUcsS0FBSyxDQUFDLE9BQU8sQ0FBQyxDQUFDLENBQUMsSUFBSSxHQUFHLENBQUMsS0FBSyxDQUFDLE9BQU8sQ0FBQyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUM7UUFDOUQsTUFBTSxNQUFNLEdBQUcsS0FBSyxDQUFDLEtBQUssRUFBRSxJQUFJLEVBQUUsQ0FBQyxXQUFXLEVBQUUsSUFBSSxJQUFJLENBQUM7UUFDekQsTUFBTSxJQUFJLEdBQXFCLEVBQUUsQ0FBQztRQUNsQyxJQUFJLEtBQUssR0FBRyxDQUFDLENBQUM7UUFDZCxLQUFLLElBQUksQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLEdBQUcsSUFBSSxDQUFDLEdBQUcsQ0FBQyxNQUFNLEVBQUUsQ0FBQyxFQUFFLEVBQUUsQ0FBQztZQUN6QyxJQUFJLElBQUksQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDLEtBQUssQ0FBQyxJQUFJLE9BQU8sQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQztnQkFBRSxTQUFTO1lBQy9ELElBQUksTUFBTSxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQyxJQUFJLEVBQUUsQ0FBQyxDQUFDLFdBQVcsRUFBRSxDQUFDLFFBQVEsQ0FBQyxNQUFNLENBQUM7Z0JBQUUsU0FBUztZQUMvRSxJQUFJLE9BQU8sSUFBSSxDQUFDLE9BQU8sQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUMsSUFBSSxFQUFFLENBQUM7Z0JBQUUsU0FBUztZQUM1RCxJQUFJLEtBQUssSUFBSSxLQUFLLENBQUMsTUFBTSxJQUFJLElBQUksQ0FBQyxNQUFNLEdBQUcsS0FBSyxDQUFDLEtBQUssRUFBRSxDQUFDO2dCQUN2RCxJQUFJLENBQUMsSUFBSSxDQUFDO29CQUNSLEVBQUUsRUFBRSxJQUFJLENBQUMs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RyxJQUFJLENBQUMsR0FBRyxDQUFDLE1BQU0sRUFBRSxDQUFDLEVBQUUsRUFBRSxDQUFDO1lBQ3pDLElBQUksSUFBSSxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUMsS0FBSyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDLE1BQU07Z0JBQUUsU0FBUztZQUM1RCxNQUFNLENBQUMsR0FBRyxJQUFJLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDO1lBQ3hCLElBQUksSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxTQUFTO2dCQUFFLFNBQVM7WUFDN0QsTUFBTSxHQUFHLEdBQUcsSUFBSSxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsSUFBSSxDQUFDLEVBQ2pDLEdBQUcsR0FBRyxJQUFJLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxJQUFJLENBQUMsRUFDN0IsR0FBRyxHQUFHLElBQUksQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLElBQUksQ0FBQyxFQUM3QixHQUFHLEdBQUcsSUFBSSxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsSUFBSSxDQUFDLENBQUM7WUFDaEMsNkNBQTZDO1lBQzdDLElBQUksQ0FBQyxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLENBQUMsQ0FBQyxJQUFJLENBQUMsTUFBTSxDQUFDLEtBQUssQ0FBQztnQkFBRSxTQUFTO1lBQ3RELE1BQU0sS0FBSyxHQUFHLENBQUMsR0FBRyxHQUFHLEdBQUcsR0FBRyxDQUFDLENBQUMsR0FBRyxDQUFDLEdBQUcsR0FBRyxHQUFHLEdBQUcsQ0FBQyxDQUFDLENBQUM7WUFDaEQsSUFBSSxDQUFDLENBQUMsS0FBSyxJQUFJLHFCQUFxQixDQUFDLElBQUksQ0FBQyxDQUFDLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsQ0FBQyxDQUFDLEtBQUssQ0FBQyxNQUFNLENBQUMsYUFBYSxDQUFDLEVBQUUsQ0FBQztnQkFDM0YsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQztnQkFDYixTQUFTO1lBQ1gsQ0FBQztZQUNELEtBQUssSUFBSSxFQUFFLEdBQUcsR0FBRyxFQUFFLEVBQUUsSUFBSSxHQUFHLEVBQUUsRUFBRSxFQUFFLEVBQUUsQ0FBQztnQkFDbkMsS0FBSyxJQUFJLEVBQUUsR0FBRyxHQUFHLEVBQUUsRUFBRSxJQUFJLEdBQUcsRUFBRSxFQUFFLEVBQUUsRUFBRSxDQUFDO29CQUNuQyxNQUFNLEVBQUUsR0FBRyxHQUFHLEVBQUUsSUFBSSxFQUFFLEVBQUUsQ0FBQztvQkFDekIsTUFBTSxJQUFJLEdBQUcsS0FBSyxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsQ0FBQztvQkFDM0IsSUFBSSxJQUFJO3dCQUFFLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUM7O3dCQUNsQixLQUFLLENBQUMsR0FBRyxDQUFDLEVBQUUsRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7Z0JBQzFCLENBQUM7WUFDSCxDQUFDO1FBQ0gsQ0FBQztRQUNELEtBQUssR0FBRyxFQUFFLEtBQUssRUFBRSxJQUFJLEVBQUUsQ0FBQztRQUN4QixJQUFJLENBQUMsT0FBTyxDQUFDLEdBQUcsQ0FBQyxHQUFHLEVBQUUsS0FBSyxDQUFDLENBQUM7UUFDN0IsT0FBTyxLQUFLLENBQUM7SUFDZixDQUFDO0NBQ0Y7QUFFRDs7OztHQUlHO0FBQ0gsTUFBTSxDQUFDLE1BQU0scUJBQXFCLEdBQUcsRUFBRSxDQUFDO0FBUXhDLDJGQUEyRjtBQUMzRixTQUFTLFNBQVMsQ0FBQyxDQUFpQixFQUFFLElBQVksRUFBRSxFQUFVLEVBQUUsRUFBVTtJQUN4RSxPQUFPLENBQ0wsSUFBSSxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsSUFBSSxDQUFDLElBQUksRUFBRTtRQUM3QixFQUFFLElBQUksSUFBSSxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsSUFBSSxDQUFDO1FBQzdCLElBQUksQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLElBQUksQ0FBQyxJQUFJLEVBQUU7UUFDN0IsRUFBRSxJQUFJLElBQUksQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLElBQUksQ0FBQyxDQUM5QixDQUFDO0FBQ0osQ0FBQztBQUVELG1FQUFtRTtBQUNuRSxNQUFNLFVBQVUsV0FBVyxDQUFDLE9BQTJCO0lBQ3JELE1BQU0sRUFBRSxHQUFHLE9BQU8sRUFBRSxFQUFFLElBQUksT0FBTyxFQUFFLFVBQVUsRUFBRSxFQUFFLENBQUM7SUFDbEQsT0FBTyxPQUFPLEVBQUUsS0FBSyxRQUFRLElBQUksT0FBTyxFQUFFLEtBQUssUUFBUSxDQUFDLENBQUMsQ0FBQyxNQUFNLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDLFNBQVMsQ0FBQztBQUNuRixDQUFDO0FBRUQsOEZBQThGO0FBQzlGLFNBQVMsZ0JBQWdCLENBQUMsT0FBMkI7SUFDbkQsTUFBTSxDQUFDLEdBQUcsT0FBTyxFQUFFLFVBQVUsRUFBRSxjQUEwRSxDQUFDO0lBQzFHLElBQUksQ0FBQyxDQUFDO1FBQUUsT0FBTyxFQUFFLEtBQUssRUFBRSxNQUFNLEVBQUUsS0FBSyxFQUFFLElBQUksRUFBRSxDQUFDO0lBQzlDLElBQUksT0FBTyxDQUFDLEtBQUssUUFBUTtRQUFFLE9BQU8sRUFBRSxLQUFLLEVBQUUsQ0FBQyxFQUFFLEtBQUssRUFBRSxJQUFJLEVBQUUsQ0FBQztJQUM1RCxNQUFNLEtBQUssR0FDVCxLQUFLLENBQUMsT0FBTyxDQUFDLENBQUMsQ0FBQyxLQUFLLENBQUMsSUFBSSxDQUFDLENBQUMsS0FBSyxDQUFDLE1BQU0sSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxDQUFDLENBQUMsQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDO0lBQ3hHLE9BQU8sRUFBRSxLQUFLLEVBQUUsQ0FBQyxDQUFDLElBQUksSUFBSSxJQUFJLEVBQUUsS0FBSyxFQUFFLENBQUM7QUFDMUMsQ0FBQztBQUVEOzs7R0FHRztBQUNILFNBQVMsT0FBTyxDQUFDLE9BQTJCO0lBQzFDLE1BQU0sQ0FBQyxHQUFHLE9BQU8sRUFBRSxRQUFRLENBQUM7SUFDNUIsTUFBTSxNQUFNLEdBQUcsQ0FBQyxFQUFFLFdBQXNCLENBQUM7SUFDekMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxPQUFPLENBQUMsTUFBTSxDQUFDO1FBQUUsT0FBTyxFQUFFLEtBQUssRUFBRSxFQUFFLEVBQUUsSUFBSSxFQUFFLEtBQUssRUFBRSxLQUFLLEVBQUUsRUFBRSxFQUFFLENBQUM7SUFDL0UsTUFBTSxRQUFRLEdBQUcsQ0FBQyxJQUFvQixFQUFFLEVBQUU7UUFDeEMsTUFBTSxLQUFLLEdBQW1CLEVBQUUsQ0FBQztRQUNqQyxNQUFNLEtBQUssR0FBZSxFQUFFLENBQUM7UUFDN0IsS0FBSyxNQUFNLE9BQU8sSUFBSSxJQUFJLEVBQUUsQ0FBQztZQUMzQixNQUFNLElBQUksR0FBYSxFQUFFLENBQUM7WUFDMUIsS0FBSyxNQUFNLENBQUMsSUFBSSxPQUFPLEVBQUUsQ0FBQztnQkFDeEIsSUFBSSxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsTUFBTSxDQUFDLENBQUM7Z0JBQ3hCLEtBQUssQ0FBQyxJQUFJLENBQUMsUUFBUSxDQUFDLENBQUMsRUFBRSxJQUFJLENBQUMsQ0FBQyxDQUFDO1lBQ2hDLENBQUM7WUFDRCxJQUFJLElBQUksQ0FBQyxNQUFNO2dCQUFFLEtBQUssQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUM7UUFDcEMsQ0FBQztRQUNELE9BQU8sRUFBRSxLQUFLLEVBQUUsSUFBSSxFQUFFLEtBQUssRUFBRSxLQUFLLEVBQUUsQ0FBQztJQUN2QyxDQUFDLENBQUM7SUFDRixRQUFRLENBQUMsQ0FBQyxJQUFJLEVBQUUsQ0FBQztRQUNmLEtBQUssU0FBUztZQUNaLE9BQU8sUUFBUSxDQUFDLENBQUMsTUFBc0IsQ0FBQyxDQUFDLENBQUM7UUFDNUMsS0FBSyxjQUFjO1lBQ2pCLE9BQU8sUUFBUSxDQUFDLE1BQXdCLENBQUMsQ0FBQztRQUM1QyxLQUFLLFlBQVk7WUFDZixPQUFPLEVBQUUsS0FBSyxFQUFFLENBQUMsUUFBUSxDQUFDLE1BQW9CLEVBQUUsS0FBSyxDQUFDLENBQUMsRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLEtBQUssRUFBRSxFQUFFLEVBQUUsQ0FBQztRQUNuRixLQUFLLGlCQUFpQjtZQUNwQixPQUFPLEVBQUUsS0FBSyxFQUFHLE1BQXVCLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxRQUFRLENBQUMsQ0FBQyxFQUFFLEtBQUssQ0FBQyxDQUFDLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxLQUFLLEVBQUUsRUFBRSxFQUFFLENBQUM7UUFDbkc7WUFDRSxPQUFPLEVBQUUsS0FBSyxFQUFFLEVBQUUsRUFBRSxJQUFJLEVBQUUsS0FBSyxFQUFFLEtBQUssRUFBRSxFQUFFLEVBQUUsQ0FBQztJQUNqRCxDQUFDO0FBQ0gsQ0FBQztBQUVEOzs7O0dBSUc7QUFDSCxNQUFNLFVBQVUscUJBQXFCLENBQ25DLFFBQTJCLEVBQzNCLFNBQXNDLEVBQ3RDLEtBQXlCO0lBRXpCLE1BQU0sSUFBSSxHQUFHLENBQUMsNEJBQTRCLENBQUMsQ0FBQztJQUM1QyxJQUFJLFNBQVMsRUFBRSxNQUFNO1FBQUUsSUFBSSxDQUFDLElBQUksQ0FBQyxvQkFBb0IsSUFBSSxDQUFDLFNBQVMsQ0FBQyxTQUFTLENBQUMsRUFBRSxDQUFDLENBQUM7SUFDbEYsSUFBSSxLQUFLO1FBQUUsSUFBSSxDQUFDLElBQUksQ0FBQyxXQUFXLElBQUksQ0FBQyxTQUFTLENBQUMsS0FBSyxDQUFDLEVBQUUsQ0FBQyxDQUFDO0lBQ3pELE9BQU8sSUFBSSxJQUFJLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxnQkFBZ0IsUUFBUSxDQUFDLElBQUksQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDO0FBQ2xFLENBQUM7QUFFRCx1R0FBdUc7QUFDdkcsTUFBTSxVQUFVLGFBQWEsQ0FBQyxHQUFZO0lBQ3hDLElBQUksQ0FBQyxLQUFLLENBQUMsT0FBTyxDQUFDLEdBQUcsQ0FBQztRQUFFLE9BQU8sU0FBUyxDQUFDO0lBQzFDLE1BQU0sR0FBRyxHQUFzQixFQUFFLENBQUM7SUFDbEMsS0FBSyxNQUFNLENBQUMsSUFBSSxHQUFxQyxFQUFFLENBQUM7UUFDdEQsSUFBSSxDQUFDLENBQUMsSUFBSSxPQUFPLENBQUMsQ0FBQyxJQUFJLEtBQUssUUFBUTtZQUFFLFNBQVM7UUFDL0MsTUFBTSxLQUFLLEdBQUcsS0FBSyxDQUFDLE9BQU8sQ0FBQyxDQUFDLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEtBQUssQ0FBQztRQUNuRyxHQUFHLENBQUMsSUFBSSxDQUFDO1lBQ1AsSUFBSSxFQUFFLENBQUMsQ0FBQyxJQUFJO1lBQ1osR0FBRyxDQUFDLE9BQU8sQ0FBQyxDQUFDLEtBQUssS0FBSyxRQUFRLENBQUMsQ0FBQyxDQUFDLEVBQUUsS0FBSyxFQUFFLENBQUMsQ0FBQyxLQUFLLEVBQUUsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDO1lBQzFELEdBQUcsQ0FBQyxPQUFPLENBQUMsQ0FBQyxNQUFNLEtBQUssUUFBUSxDQUFDLENBQUMsQ0FBQyxFQUFFLE1BQU0sRUFBRSxDQUFDLENBQUMsTUFBTSxFQUFFLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQztZQUM3RCxHQUFHLENBQUMsT0FBTyxLQUFLLEtBQUssUUFBUSxDQUFDLENBQUMsQ0FBQyxFQUFFLEtBQUssRUFBRSxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUM7WUFDL0MsR0FBRyxDQUFDLE9BQU8sQ0FBQyxDQUFDLEtBQUssS0FBSyxRQUFRLENBQUMsQ0FBQyxDQUFDLEVBQUUsS0FBSyxFQUFFLENBQUMsQ0FBQyxLQUFLLEVBQUUsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDO1NBQzNELENBQUMsQ0FBQztJQUNMLENBQUM7SUFDRCxPQUFPLEdBQUcsQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsU0FBUyxDQUFDO0FBQ3RDLENBQUM7QUFFRCw0REFBNEQ7QUFDNUQsTUFBTSxVQUFVLFNBQVMsQ0FBQyxHQUFZO0lBQ3BDLElBQUksQ0FBQyxHQUFHLElBQUksT0FBTyxHQUFHLEtBQUssUUFBUTtRQUFFLE9BQU8sU0FBUyxDQUFDO0lBQ3RELE1BQU0sQ0FBQyxHQUFHLEdBQThCLENBQUM7SUFDekMsTUFBTSxLQUFLLEdBQXNCLEVBQUUsQ0FBQztJQUNwQyxJQUFJLE9BQU8sQ0FBQyxDQUFDLFdBQVcsS0FBSyxRQUFRO1FBQUUsS0FBSyxDQUFDLFdBQVcsR0FBRyxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUMsRUFBRSxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsV0FBVyxDQUFDLENBQUMsQ0FBQztJQUNuRyxJQUFJLE9BQU8sQ0FBQyxDQUFDLE1BQU0sS0FBSyxRQUFRO1FBQUUsS0FBSyxDQUFDLE1BQU0sR0FBRyxDQUFDLENBQUMsTUFBTSxDQUFDO0lBQzFELElBQUksT0FBTyxDQUFDLENBQUMsV0FBVyxLQUFLLFFBQVEsSUFBSSxDQUFDLENBQUMsV0FBVyxHQUFHLENBQUM7UUFBRSxLQUFLLENBQUMsV0FBVyxHQUFHLENBQUMsQ0FBQyxXQUFXLENBQUM7SUFDOUYsSUFBSSxPQUFPLENBQUMsQ0FBQyxNQUFNLEtBQUssU0FBUztRQUFFLEtBQUssQ0FBQyxNQUFNLEdBQUcsQ0FBQyxDQUFDLE1BQU0sQ0FBQztJQUMzRCxJQUFJLE9BQU8sQ0FBQyxDQUFDLFNBQVMsS0FBSyxRQUFRO1FBQUUsS0FBSyxDQUFDLFNBQVMsR0FBRyxDQUFDLENBQUMsU0FBUyxDQUFDO0lBQ25FLE9BQU8sTUFBTSxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsU0FBUyxDQUFDO0FBQ3ZELENBQUM7QUFFRCxTQUFTLFFBQVEsQ0FBQyxNQUFrQixFQUFFLE1BQWU7SUFDbkQsSUFBSSxDQUFDLEdBQUcsTUFBTSxFQUFFLE1BQU0sSUFBSSxDQUFDLENBQUM7SUFDNUIsSUFBSSxNQUFNLElBQUksQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDO1FBQ3BCLE1BQU0sQ0FBQyxHQUFHLE1BQU0sQ0FBQyxDQUFDLENBQUMsRUFDakIsQ0FBQyxHQUFHLE1BQU0sQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUM7UUFDcEIsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDO1lBQUUsQ0FBQyxFQUFFLENBQUM7SUFDMUMsQ0FBQztJQUNELE1BQU0sR0FBRyxHQUFHLElBQUksWUFBWSxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQztJQUNwQyxLQUFLLElBQUksQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsRUFBRSxFQUFFLENBQUM7UUFDM0IsR0FBRyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsR0FBRyxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztRQUMzQixHQUFHLENBQUMsQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDLENBQUMsR0FBRyxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztJQUNqQyxDQUFDO0lBQ0QsT0FBTyxHQUFHLENBQUM7QUFDYixDQUFDO0FBRUQsU0FBUyxRQUFRLENBQUMsS0FBOEI7SUFDOUMsSUFBSSxFQUFFLEdBQUcsUUFBUSxFQUNmLEVBQUUsR0FBRyxRQUFRLEVBQ2IsRUFBRSxHQUFHLENBQUMsUUFBUSxFQUNkLEVBQUUsR0FBRyxDQUFDLFFBQVEsQ0FBQztJQUNqQixLQUFLLE1BQU0sQ0FBQyxJQUFJLEtBQUssRUFBRSxDQUFDO1FBQ3RCLEtBQUssSUFBSSxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxDQUFDLE1BQU0sRUFBRSxDQUFDLElBQUksQ0FBQyxFQUFFLENBQUM7WUFDekMsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsRUFBRTtnQkFBRSxFQUFFLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO1lBQ3pCLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLEVBQUU7Z0JBQUUsRUFBRSxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztZQUN6QixJQUFJLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLEdBQUcsRUFBRTtnQkFBRSxFQUFFLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQztZQUNqQyxJQUFJLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLEdBQUcsRUFBRTtnQkFBRSxFQUFFLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQztRQUNuQyxDQUFDO0lBQ0gsQ0FBQztJQUNELE9BQU8sQ0FBQyxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLENBQUMsQ0FBQztBQUMxQixDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiLyoqXG4gKiBUaGUgcHVyZSBjb3JlIG9mIGEgdGlsZWQgcmVnaW9uIHNvdXJjZTogYSBsYXJnZSBHZW9KU09OIHJlZ2lvbiBzZXQgY3V0IGludG8gdGlsZXMgcGVyIGxldmVsXG4gKiBvZiBkZXRhaWwsIHRoZSBvdXRsaW5lcyBzaW1wbGlmaWVkIHBlciBsZXZlbCwgc28gYSB2aWV3IG9ubHkgZXZlciBob2xkcyBhbmQgZHJhd3Mgd2hhdCBpcyBvblxuICogc2NyZWVuIGF0IHRoZSBkZXRhaWwgdGhlIHpvb20gY2FuIHNob3cuXG4gKlxuICogTGV2ZWxzOiBsZXZlbCAwIGlzIGV4YWN0OyBhIGxldmVsLWsgdGlsZSBjb3ZlcnMgYHRpbGVTaXplIMK3IDLhtY9gIGltYWdlIHBpeGVscyBhbmQgaXRzIG91dGxpbmVzXG4gKiBhcmUgc2ltcGxpZmllZCAoRG91Z2xhc+KAk1BldWNrZXIpIHRvIGAy4bWP4oG7wrlgIGltYWdlIHBpeGVscyDigJQgaGFsZiB0byBvbmUgc2NyZWVuIHBpeGVsIGF0IHRoZSB6b29tc1xuICogdGhhdCBwaWNrIHRoYXQgbGV2ZWwgKHtAbGluayByZWdpb25MZXZlbEZvcn0pLiBBIGZlYXR1cmUgdW5kZXIgYDLhtY9gIGltYWdlIHBpeGVscyAob25lIHRvIHR3b1xuICogc2NyZWVuIHBpeGVscyB0aGVyZSkgaXMgbGVmdCBvdXQgb2YgdGhlIGxldmVsLiBBIHRpbGUgaG9sZHMgdGhlIFdIT0xFIHNpbXBsaWZpZWQgZmVhdHVyZSAobm90XG4gKiBjbGlwcGVkKSBmb3IgZXZlcnkgZmVhdHVyZSB3aG9zZSBib3ggbWVldHMgaXQsIHNvIGEgdmlldyBkZS1kdXBsaWNhdGVzIGZlYXR1cmVzIGJ5IGlkLCBhbmQgYXRcbiAqIGxldmVsIDAgdGhlIHRpbGVzIGluIHZpZXcgaG9sZCB0aGUgZXhhY3Qgb3V0bGluZSBvZiBldmVyeXRoaW5nIHZpc2libGUuXG4gKlxuICogTm8gRE9NLCBubyBBbmd1bGFyOiB0aGUgc2FtZSBjb2RlIHJ1bnMgaW4gdGhlIHJlZ2lvbi1zb3VyY2Ugd29ya2VyIGFuZCwgd2hlcmUgd29ya2VycyBkbyBub3RcbiAqIGV4aXN0LCBvbiB0aGUgbWFpbiB0aHJlYWQuXG4gKi9cbmltcG9ydCB7IHJnYlRvSGV4IH0gZnJvbSAnLi4vY29udHJhY3RzL2NvbG9yJztcbmltcG9ydCB7IHNpbXBsaWZ5UmluZyB9IGZyb20gJy4uL2dlb21ldHJ5L3JpbmcnO1xuaW1wb3J0IHsgcG9seWxhYmVsIH0gZnJvbSAnLi4vZ2VvbWV0cnkvcG9seWxhYmVsJztcbmltcG9ydCB7IHJpbmdzQXJlYSB9IGZyb20gJy4uL2dlb21ldHJ5L3JlY29uc3RydWN0JztcblxuLyoqIEFuIGF4aXMtYWxpZ25lZCBib3ggYFt4MCwgeTAsIHgxLCB5MV1gIGluIGltYWdlIHBpeGVscy4gKi9cbmV4cG9ydCB0eXBlIEJib3ggPSBbbnVtYmVyLCBudW1iZXIsIG51bWJlciwgbnVtYmVyXTtcblxuLyoqIEVkZ2Ugb2YgYSBsZXZlbC0wIHRpbGUsIGluIGltYWdlIHBpeGVscy4gKi9cbmV4cG9ydCBjb25zdCBSRUdJT05fVElMRV9TSVpFID0gNTEyO1xuXG4vKipcbiAqIE9uZSBjbGFzcyBvZiBhIGNsYXNzIGhpZXJhcmNoeSAoZS5nLiBhIGJyYWluLWF0bGFzIG9udG9sb2d5KTogdGhlIGNsYXNzIG5hbWUgdGhlIGZlYXR1cmVzIHVzZSxcbiAqIGl0cyBsb25nIG5hbWUsIGl0cyBwYXJlbnQgY2xhc3MgYW5kIGl0cyBjb2xvdXIuIEEgcmVnaW9uIHNldCBtYXkgY2Fycnkgb25lIChhIEdlb0pTT05cbiAqIEZlYXR1cmVDb2xsZWN0aW9uJ3MgYGNsYXNzSGllcmFyY2h5YCBtZW1iZXIpOyB0aGUgUmVnaW9uIEVkaXRvciB0aGVuIGxpc3RzIHRoZSBzZXQgYXMgYSB0cmVlLlxuICovXG5leHBvcnQgaW50ZXJmYWNlIFJlZ2lvbkNsYXNzTm9kZSB7XG4gIC8qKiBUaGUgY2xhc3MgbmFtZSwgYXMgZmVhdHVyZXMgdXNlIGl0IChgY2xhc3NpZmljYXRpb24ubmFtZWApOiBhbiBhdGxhcyBhY3JvbnltLCBzYXkuICovXG4gIG5hbWU6IHN0cmluZztcbiAgLyoqIFRoZSBsb25nIG5hbWUsIGUuZy4gXCJTb21hdG9tb3RvciBhcmVhcywgTGF5ZXIgNVwiLiAqL1xuICB0aXRsZT86IHN0cmluZztcbiAgLyoqIFRoZSBwYXJlbnQgY2xhc3MncyBuYW1lOyBhYnNlbnQgZm9yIGEgcm9vdC4gKi9cbiAgcGFyZW50Pzogc3RyaW5nIHwgbnVsbDtcbiAgLyoqIGAjcnJnZ2JiYC4gKi9cbiAgY29sb3I/OiBzdHJpbmc7XG4gIC8qKiBQb3NpdGlvbiBhbW9uZyBpdHMgc2libGluZ3MgKGFuIGF0bGFzJ3MgZ3JhcGggb3JkZXIpOyBmaWxlIG9yZGVyIHdpdGhvdXQgb25lLiAqL1xuICBvcmRlcj86IG51bWJlcjtcbn1cblxuLyoqXG4gKiBIb3cgYSByZWdpb24gc2V0IHdhbnRzIHRvIGJlIGRyYXduLCBhIGhpbnQgdGhlIHZpZXdlciBhcHBsaWVzIHdoZW4gdGhlIHNldCBvcGVucyAoYSBHZW9KU09OXG4gKiBGZWF0dXJlQ29sbGVjdGlvbidzIGBzdHlsZWAgbWVtYmVyKTogYW4gYXRsYXMgZmlsbHMgaXRzIHN0cnVjdHVyZXMgYW5kIGxhYmVscyB0aGVtLlxuICovXG5leHBvcnQgaW50ZXJmYWNlIFJlZ2lvblNvdXJjZVN0eWxlIHtcbiAgLyoqIEZpbGwgcmVnaW9ucyBpbiB0aGVpciBjb2xvdXIgYXQgdGhpcyBvcGFjaXR5ICgwID0gb3V0bGluZXMgb25seSkuICovXG4gIGZpbGxPcGFjaXR5PzogbnVtYmVyO1xuICAvKiogT3V0bGluZSBjb2xvdXIgd2hlbiBmaWxsZWQgKGRlZmF1bHQ6IHRoZSByZWdpb24ncyBjb2xvdXIpLiAqL1xuICBzdHJva2U/OiBzdHJpbmc7XG4gIC8qKiBPdXRsaW5lIHdpZHRoIGluIHNjcmVlbiBweC4gKi9cbiAgc3Ryb2tlV2lkdGg/OiBudW1iZXI7XG4gIC8qKiBTaG93IGNsYXNzIGxhYmVscyBpbnNpZGUgdGhlIHJlZ2lvbnMuICovXG4gIGxhYmVscz86IGJvb2xlYW47XG4gIC8qKiBGaWxsIGNvbG91ciBvZiBzZWxlY3RlZCByZWdpb25zLiAqL1xuICBoaWdobGlnaHQ/OiBzdHJpbmc7XG59XG5cbi8qKiBXaGF0IGEgcmVnaW9uIHNvdXJjZSBob2xkcywga25vd24gb25jZSBpdCBpcyBvcGVuLiAqL1xuZXhwb3J0IGludGVyZmFjZSBSZWdpb25Tb3VyY2VJbmZvIHtcbiAgLyoqIEZlYXR1cmVzIGluIHRoZSBzb3VyY2UsIG92ZXIgZXZlcnkgcGxhbmUuICovXG4gIGZlYXR1cmVDb3VudDogbnVtYmVyO1xuICAvKiogVGhlIGJveCBhcm91bmQgZXZlcnkgZmVhdHVyZSdzIGdlb21ldHJ5OyBudWxsIHdoZW4gbm9uZSBoYXMgYW55LiAqL1xuICBib3VuZHM6IEJib3ggfCBudWxsO1xuICAvKiogRWRnZSBvZiBhIGxldmVsLTAgdGlsZSwgaW4gaW1hZ2UgcGl4ZWxzLiAqL1xuICB0aWxlU2l6ZTogbnVtYmVyO1xuICAvKiogTnVtYmVyIG9mIGxldmVsczsgdGhlIGxhc3Qgb25lJ3MgdGlsZXMgY292ZXIge0BsaW5rIGJvdW5kc30gaW4gYSBmZXcgdGlsZXMuICovXG4gIGxldmVsczogbnVtYmVyO1xuICAvKiogVGhlIHogcGxhbmVzIGZlYXR1cmVzIGFyZSBvbiAoUXVQYXRoJ3MgYGdlb21ldHJ5LnBsYW5lLnpgLCAwIHdpdGhvdXQgb25lKSwgYXNjZW5kaW5nLiAqL1xuICBwbGFuZXM6IG51bWJlcltdO1xuICAvKiogVGhlIGNvbG91ciB0aGUgZmlsZSBnaXZlcyBlYWNoIGNsYXNzIChpdHMgZmlyc3QgZmVhdHVyZSdzKSwgYnkgY2xhc3MgbmFtZS4gKi9cbiAgY2xhc3NDb2xvcnM6IFJlY29yZDxzdHJpbmcsIHN0cmluZz47XG4gIC8qKiBUaGUgc2V0J3MgY2xhc3MgaGllcmFyY2h5LCB3aGVuIGl0IGhhcyBvbmUuICovXG4gIGhpZXJhcmNoeT86IFJlZ2lvbkNsYXNzTm9kZVtdO1xuICAvKiogSG93IHRoZSBzZXQgd2FudHMgdG8gYmUgZHJhd24sIHdoZW4gaXQgc2F5cy4gKi9cbiAgc3R5bGU/OiBSZWdpb25Tb3VyY2VTdHlsZTtcbn1cblxuLyoqIE9uZSBmZWF0dXJlIGFzIGEgdGlsZSBjYXJyaWVzIGl0OiBpZGVudGl0eSwgY2xhc3MgYW5kIG91dGxpbmUgYXQgdGhlIHRpbGUncyBsZXZlbC4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgVGlsZUZlYXR1cmUge1xuICBpZDogc3RyaW5nO1xuICAvKiogVGhlIGNsYXNzIG5hbWUuICovXG4gIGxhYmVsOiBzdHJpbmcgfCBudWxsO1xuICAvKiogVGhlIGZlYXR1cmUncyBvd24gY29sb3VyIChgI3JyZ2diYmApLCBmcm9tIGl0cyBjbGFzc2lmaWNhdGlvbi4gKi9cbiAgY29sb3I6IHN0cmluZyB8IG51bGw7XG4gIC8qKiBUaGUgYm94IGFyb3VuZCB0aGUgZXhhY3QgZ2VvbWV0cnkuICovXG4gIGJib3g6IEJib3g7XG4gIC8qKiBSaW5ncyBhcyBpbnRlcmxlYXZlZCBgeCwgeWAgKG5vIHJlcGVhdGVkIGNsb3NpbmcgdmVydGV4KTogZXh0ZXJpb3JzIGFuZCBob2xlcyBvZiBldmVyeVxuICAgKiAgcGFydCwgZHJhd24gYW5kIGhpdC10ZXN0ZWQgZXZlbi1vZGQuIEZvciBhbiBvcGVuIGZlYXR1cmUsIGl0cyBwb2x5bGluZXMuICovXG4gIHJpbmdzOiBGbG9hdDMyQXJyYXlbXTtcbiAgLyoqIEEgcG9seWxpbmUgKExpbmVTdHJpbmcpIHJhdGhlciB0aGFuIGFuIGFyZWEuICovXG4gIG9wZW46IGJvb2xlYW47XG4gIC8qKlxuICAgKiBXaGVyZSB0byBsYWJlbCB0aGUgZmVhdHVyZSwgcGVyIHBhcnQgYmlnIGVub3VnaDogYHgsIHksIHJvb21gIHRyaXBsZXMsIGByb29tYCB0aGUgZGlzdGFuY2VcbiAgICogZnJvbSB0aGUgcG9pbnQgdG8gdGhlIHBhcnQncyBuZWFyZXN0IGVkZ2UgKGltYWdlIHB4KSwgc28gYSBsYWJlbCBzaG93cyBvbmNlIGl0IGZpdHMuXG4gICAqL1xuICBsYWJlbHM/OiBGbG9hdDMyQXJyYXk7XG59XG5cbi8qKlxuICogQSBjbGFzcydzIG91dGxpbmVzIG9uIG9uZSBwbGFuZTogcmluZ3MgYXMgaW50ZXJsZWF2ZWQgYHgsIHlgIGltYWdlIHB4IChob2xlcyBpbmNsdWRlZCksIGFuZCBpdHNcbiAqIG9wZW4gZmVhdHVyZXMnIHBvbHlsaW5lcywgbGlrZXdpc2UgKGFic2VudCBmcm9tIGEgc2VydmVyIHRoYXQgcHJlZGF0ZXMgdGhlbSkuIFJlYWQgZm9yIGV2ZXJ5XG4gKiBjbGFzcyBhdCBvbmNlLCBlYWNoIHJpbmcncyBhbmQgbGluZSdzIGNsYXNzIGNvbWVzIHdpdGggaXQgKGByaW5nTGFiZWxzYCwgYGxpbmVMYWJlbHNgKS5cbiAqL1xuZXhwb3J0IGludGVyZmFjZSBDbGFzc091dGxpbmVzIHtcbiAgejogbnVtYmVyO1xuICByaW5nczogRmxvYXQzMkFycmF5W107XG4gIC8qKlxuICAgKiBUaGUgZmVhdHVyZSBlYWNoIHJpbmcgaXMgcGFydCBvZiAoc2VlIFNsaWNlT3V0bGluZXMucmluZ0dyb3Vwcyk6IGEgZmVhdHVyZSdzIHJpbmdzIGZpbGxcbiAgICogZXZlbi1vZGQsIHRoZSBmZWF0dXJlcyBhcyB0aGVpciB1bmlvbi4gQWJzZW50IGZyb20gYSBzZXJ2ZXIgdGhhdCBwcmVkYXRlcyB0aGVtLlxuICAgKi9cbiAgcmluZ0dyb3Vwcz86IG51bWJlcltdO1xuICBsaW5lcz86IEZsb2F0MzJBcnJheVtdO1xuICByaW5nTGFiZWxzPzogc3RyaW5nW107XG4gIGxpbmVMYWJlbHM/OiBzdHJpbmdbXTtcbn1cblxuLyoqIE9uZSB0aWxlIG9mIG9uZSBsZXZlbCBvZiBvbmUgcGxhbmUuICovXG5leHBvcnQgaW50ZXJmYWNlIFJlZ2lvblRpbGUge1xuICB6OiBudW1iZXI7XG4gIGxldmVsOiBudW1iZXI7XG4gIGd4OiBudW1iZXI7XG4gIGd5OiBudW1iZXI7XG4gIGZlYXR1cmVzOiBUaWxlRmVhdHVyZVtdO1xufVxuXG4vKiogQSB0aWxlJ3MgYWRkcmVzcy4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgUmVnaW9uVGlsZUtleSB7XG4gIGxldmVsOiBudW1iZXI7XG4gIGd4OiBudW1iZXI7XG4gIGd5OiBudW1iZXI7XG59XG5cbi8qKiBPbmUgcm93IG9mIGEgc291cmNlJ3MgZmVhdHVyZSBpbmRleCAodGhlIFJlZ2lvbiBFZGl0b3IncyB0YWJsZSkuICovXG5leHBvcnQgaW50ZXJmYWNlIFJlZ2lvbkluZGV4Um93IHtcbiAgaWQ6IHN0cmluZztcbiAgbGFiZWw6IHN0cmluZyB8IG51bGw7XG4gIGNvbG9yOiBzdHJpbmcgfCBudWxsO1xuICBiYm94OiBCYm94O1xuICAvKiogVGhlIGFyZWEgaW5zaWRlIHRoZSBleGFjdCBvdXRsaW5lIChob2xlcyBsZWZ0IG91dCksIGltYWdlIHB4wrI7IDAgZm9yIGEgcG9seWxpbmUuIEFic2VudCBmcm9tIGFcbiAgICogIHNlcnZlciB0aGF0IHByZWRhdGVzIGl0LiAqL1xuICBhcmVhPzogbnVtYmVyO1xufVxuXG4vKiogQSBwYWdlIG9mIGEgcGxhbmUncyBmZWF0dXJlIGluZGV4LiAqL1xuZXhwb3J0IGludGVyZmFjZSBSZWdpb25JbmRleFBhZ2Uge1xuICAvKiogUm93cyBtYXRjaGluZyB0aGUgcXVlcnksIG92ZXIgdGhlIHdob2xlIHBsYW5lLiAqL1xuICB0b3RhbDogbnVtYmVyO1xuICByb3dzOiBSZWdpb25JbmRleFJvd1tdO1xufVxuXG4vKiogV2hpY2ggcm93cyBhIHBhZ2Ugb2YgdGhlIGluZGV4IGhvbGRzLiAqL1xuZXhwb3J0IGludGVyZmFjZSBSZWdpb25JbmRleFF1ZXJ5IHtcbiAgb2Zmc2V0OiBudW1iZXI7XG4gIGxpbWl0OiBudW1iZXI7XG4gIC8qKiBPbmx5IHJvd3Mgd2hvc2UgY2xhc3MgbmFtZSBjb250YWlucyB0aGlzIChjYXNlLWluc2Vuc2l0aXZlKS4gKi9cbiAgbGFiZWw/OiBzdHJpbmc7XG4gIC8qKiBMZWF2ZSB0aGVzZSBpZHMgb3V0ICh0YWtlbiBpbnRvIHRoZSB3b3JraW5nIHNldCwgb3IgZGVsZXRlZCkuICovXG4gIGV4Y2x1ZGU/OiByZWFkb25seSBzdHJpbmdbXTtcbiAgLyoqIE9ubHkgcm93cyBvZiBleGFjdGx5IHRoZXNlIGNsYXNzZXMuICovXG4gIGNsYXNzZXM/OiByZWFkb25seSBzdHJpbmdbXTtcbn1cblxuLyoqIFRoZSBwYXJ0cyBvZiBhIEdlb0pTT04gZmVhdHVyZSB0aGUgdGlsZXIgcmVhZHMuIFBhcnNlZCBmcm9tIGEgZmlsZTogbm90aGluZyBpcyBndWFyYW50ZWVkLiAqL1xuZXhwb3J0IGludGVyZmFjZSBHZW9Kc29uRmVhdHVyZUxpa2Uge1xuICB0eXBlPzogc3RyaW5nO1xuICBpZD86IHN0cmluZyB8IG51bWJlcjtcbiAgZ2VvbWV0cnk/OiB7IHR5cGU/OiBzdHJpbmc7IGNvb3JkaW5hdGVzPzogdW5rbm93bjsgcGxhbmU/OiB7IHo/OiBudW1iZXIgfSB9IHwgbnVsbDtcbiAgcHJvcGVydGllcz86IHsgaWQ/OiBzdHJpbmcgfCBudW1iZXI7IGNsYXNzaWZpY2F0aW9uPzogdW5rbm93biB9ICYgUmVjb3JkPHN0cmluZywgdW5rbm93bj47XG59XG5cbi8qKlxuICogVGhlIGxldmVsIHdob3NlIHRpbGVzIHN1aXQgYSB6b29tIG9mIGBweFBlckltYWdlUHhgIHNjcmVlbiBwaXhlbHMgcGVyIGltYWdlIHBpeGVsOiBleGFjdCAoMClcbiAqIGF0IDE6MSBhbmQgY2xvc2VyLCBlbHNlIGxldmVsIGsgZm9yIHpvb21zIGluIFsy4oG74bWPLCAywrnigbvhtY8pLCB3aGVyZSBpdHMgdG9sZXJhbmNlIGlzIGhhbGYgdG8gb25lXG4gKiBzY3JlZW4gcGl4ZWwgYW5kIHRoZSBmZWF0dXJlcyBpdCBsZWF2ZXMgb3V0IGFyZSB1bmRlciBvbmUgb3IgdHdvLlxuICovXG5leHBvcnQgZnVuY3Rpb24gcmVnaW9uTGV2ZWxGb3IocHhQZXJJbWFnZVB4OiBudW1iZXIsIGxldmVsczogbnVtYmVyKTogbnVtYmVyIHtcbiAgaWYgKCEocHhQZXJJbWFnZVB4ID4gMCkgfHwgbGV2ZWxzIDw9IDEpIHJldHVybiAwO1xuICBjb25zdCBsZXZlbCA9IE1hdGguY2VpbCgtTWF0aC5sb2cyKHB4UGVySW1hZ2VQeCkgLSAxZS05KTtcbiAgcmV0dXJuIE1hdGgubWF4KDAsIE1hdGgubWluKGxldmVscyAtIDEsIGxldmVsKSk7XG59XG5cbi8qKiBTaW1wbGlmaWNhdGlvbiB0b2xlcmFuY2Ugb2YgYSBsZXZlbCwgaW4gaW1hZ2UgcGl4ZWxzICgwID0gZXhhY3QpLiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGxldmVsVG9sZXJhbmNlKGxldmVsOiBudW1iZXIpOiBudW1iZXIge1xuICByZXR1cm4gbGV2ZWwgPD0gMCA/IDAgOiAyICoqIChsZXZlbCAtIDEpO1xufVxuXG4vKiogRmVhdHVyZXMgc21hbGxlciB0aGFuIHRoaXMgKHRoZWlyIGJveCdzIGxvbmdlciBzaWRlLCBpbWFnZSBwaXhlbHMpIGFyZSBsZWZ0IG91dCBvZiBhIGxldmVsLiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGxldmVsTWluRXh0ZW50KGxldmVsOiBudW1iZXIpOiBudW1iZXIge1xuICByZXR1cm4gbGV2ZWwgPD0gMCA/IDAgOiAyICoqIGxldmVsO1xufVxuXG4vKiogVGlsZSBlZGdlIG9mIGEgbGV2ZWwsIGluIGltYWdlIHBpeGVscy4gKi9cbmV4cG9ydCBmdW5jdGlvbiBsZXZlbFRpbGVTaXplKGxldmVsOiBudW1iZXIsIHRpbGVTaXplID0gUkVHSU9OX1RJTEVfU0laRSk6IG51bWJlciB7XG4gIHJldHVybiB0aWxlU2l6ZSAqIDIgKiogbGV2ZWw7XG59XG5cbi8qKlxuICogVGlsZXMgb2YgYGxldmVsYCB0aGF0IG1lZXQgYHJlY3RgLCBjbGlwcGVkIHRvIGBib3VuZHNgIChub25lIHBhc3QgdGhlIGRhdGEpLCBvcmRlcmVkIGZyb20gdGhlXG4gKiByZWN0YW5nbGUncyBjZW50cmUgb3V0d2FyZCBzbyB0aGUgbWlkZGxlIG9mIHRoZSBzY3JlZW4gZmlsbHMgZmlyc3QuIEF0IG1vc3QgYGxpbWl0YC5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHJlZ2lvblRpbGVzSW5SZWN0KFxuICByZWN0OiBCYm94LFxuICBsZXZlbDogbnVtYmVyLFxuICB0aWxlU2l6ZTogbnVtYmVyLFxuICBib3VuZHM6IEJib3ggfCBudWxsLFxuICBsaW1pdCA9IEluZmluaXR5LFxuKTogUmVnaW9uVGlsZUtleVtdIHtcbiAgaWYgKCFib3VuZHMpIHJldHVybiBbXTtcbiAgY29uc3QgeDAgPSBNYXRoLm1heChyZWN0WzBdLCBib3VuZHNbMF0pO1xuICBjb25zdCB5MCA9IE1hdGgubWF4KHJlY3RbMV0sIGJvdW5kc1sxXSk7XG4gIGNvbnN0IHgxID0gTWF0aC5taW4ocmVjdFsyXSwgYm91bmRzWzJdKTtcbiAgY29uc3QgeTEgPSBNYXRoLm1pbihyZWN0WzNdLCBib3VuZHNbM10pO1xuICBpZiAoeDEgPCB4MCB8fCB5MSA8IHkwKSByZXR1cm4gW107XG4gIGNvbnN0IHNpemUgPSBsZXZlbFRpbGVTaXplKGxldmVsLCB0aWxlU2l6ZSk7XG4gIGNvbnN0IGd4MCA9IE1hdGguZmxvb3IoeDAgLyBzaXplKTtcbiAgY29uc3QgZ3kwID0gTWF0aC5mbG9vcih5MCAvIHNpemUpO1xuICBjb25zdCBneDEgPSBNYXRoLmZsb29yKHgxIC8gc2l6ZSk7XG4gIGNvbnN0IGd5MSA9IE1hdGguZmxvb3IoeTEgLyBzaXplKTtcbiAgY29uc3QgY3ggPSAocmVjdFswXSArIHJlY3RbMl0pIC8gMiAvIHNpemU7XG4gIGNvbnN0IGN5ID0gKHJlY3RbMV0gKyByZWN0WzNdKSAvIDIgLyBzaXplO1xuICBjb25zdCBvdXQ6IFJlZ2lvblRpbGVLZXlbXSA9IFtdO1xuICBmb3IgKGxldCBneSA9IGd5MDsgZ3kgPD0gZ3kxOyBneSsrKSB7XG4gICAgZm9yIChsZXQgZ3ggPSBneDA7IGd4IDw9IGd4MTsgZ3grKykgb3V0LnB1c2goeyBsZXZlbCwgZ3gsIGd5IH0pO1xuICB9XG4gIGNvbnN0IGQgPSAoazogUmVnaW9uVGlsZUtleSkgPT4gKGsuZ3ggKyAwLjUgLSBjeCkgKiogMiArIChrLmd5ICsgMC41IC0gY3kpICoqIDI7XG4gIG91dC5zb3J0KChhLCBiKSA9PiBkKGEpIC0gZChiKSk7XG4gIHJldHVybiBvdXQubGVuZ3RoID4gbGltaXQgPyBvdXQuc2xpY2UoMCwgbGltaXQpIDogb3V0O1xufVxuXG4vKiogYGxldmVsL2d4L2d5YCwgYSB0aWxlJ3MgaWQgd2l0aGluIG9uZSBwbGFuZS4gKi9cbmV4cG9ydCBmdW5jdGlvbiByZWdpb25UaWxlSWQoazogUmVnaW9uVGlsZUtleSk6IHN0cmluZyB7XG4gIHJldHVybiBgJHtrLmxldmVsfS8ke2suZ3h9LyR7ay5neX1gO1xufVxuXG4vKiogVGhlIHRpbGUgb2YgYGxldmVsYCBob2xkaW5nIGltYWdlIHBvaW50ICh4LCB5KS4gKi9cbmV4cG9ydCBmdW5jdGlvbiB0aWxlQXQoeDogbnVtYmVyLCB5OiBudW1iZXIsIGxldmVsOiBudW1iZXIsIHRpbGVTaXplID0gUkVHSU9OX1RJTEVfU0laRSk6IFJlZ2lvblRpbGVLZXkge1xuICBjb25zdCBzaXplID0gbGV2ZWxUaWxlU2l6ZShsZXZlbCwgdGlsZVNpemUpO1xuICByZXR1cm4geyBsZXZlbCwgZ3g6IE1hdGguZmxvb3IoeCAvIHNpemUpLCBneTogTWF0aC5mbG9vcih5IC8gc2l6ZSkgfTtcbn1cblxuLyoqIFRydWUgd2hlbiB0d28gYm94ZXMgbWVldCAoZWRnZXMgaW5jbHVkZWQpLiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGJib3hlc01lZXQoYTogUmVhZG9ubHk8QmJveD4sIGI6IFJlYWRvbmx5PEJib3g+KTogYm9vbGVhbiB7XG4gIHJldHVybiBhWzBdIDw9IGJbMl0gJiYgYVsyXSA+PSBiWzBdICYmIGFbMV0gPD0gYlszXSAmJiBhWzNdID49IGJbMV07XG59XG5cbi8vIOKUgOKUgCBQaWNraW5nIOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgFxuXG4vKipcbiAqIFRoZSBmZWF0dXJlIHVuZGVyIGltYWdlIHBvaW50ICh4LCB5KTogaW5zaWRlIGFuIGFyZWEgKGV2ZW4tb2RkIG92ZXIgaXRzIHJpbmdzLCBzbyBob2xlcyBhcmVcbiAqIG91dHNpZGUpIG9yIHdpdGhpbiBgdG9sZXJhbmNlYCBpbWFnZSBwaXhlbHMgb2YgYSBwb2x5bGluZS4gT2Ygc2V2ZXJhbCwgdGhlIG9uZSB3aXRoIHRoZVxuICogc21hbGxlc3QgYm94IOKAlCB0aGUgaW5uZXJtb3N0IG9mIG5lc3RlZCBvdXRsaW5lcy4gTnVsbCB3aGVuIG5vbmUgaXMuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBmZWF0dXJlQXQoXG4gIGZlYXR1cmVzOiBJdGVyYWJsZTxUaWxlRmVhdHVyZT4sXG4gIHg6IG51bWJlcixcbiAgeTogbnVtYmVyLFxuICB0b2xlcmFuY2UgPSAwLFxuKTogVGlsZUZlYXR1cmUgfCBudWxsIHtcbiAgbGV0IGJlc3Q6IFRpbGVGZWF0dXJlIHwgbnVsbCA9IG51bGw7XG4gIGxldCBiZXN0QXJlYSA9IEluZmluaXR5O1xuICBmb3IgKGNvbnN0IGYgb2YgZmVhdHVyZXMpIHtcbiAgICBjb25zdCBiID0gZi5iYm94O1xuICAgIGlmICh4IDwgYlswXSAtIHRvbGVyYW5jZSB8fCB4ID4gYlsyXSArIHRvbGVyYW5jZSB8fCB5IDwgYlsxXSAtIHRvbGVyYW5jZSB8fCB5ID4gYlszXSArIHRvbGVyYW5jZSkgY29udGludWU7XG4gICAgY29uc3QgaGl0ID0gZi5vcGVuID8gbmVhclBvbHlsaW5lcyhmLnJpbmdzLCB4LCB5LCB0b2xlcmFuY2UpIDogaW5zaWRlUmluZ3MoZi5yaW5ncywgeCwgeSk7XG4gICAgaWYgKCFoaXQpIGNvbnRpbnVlO1xuICAgIGNvbnN0IGFyZWEgPSAoYlsyXSAtIGJbMF0pICogKGJbM10gLSBiWzFdKTtcbiAgICBpZiAoYXJlYSA8IGJlc3RBcmVhKSB7XG4gICAgICBiZXN0ID0gZjtcbiAgICAgIGJlc3RBcmVhID0gYXJlYTtcbiAgICB9XG4gIH1cbiAgcmV0dXJuIGJlc3Q7XG59XG5cbi8qKiBGZWF0dXJlcyB3aG9zZSBib3ggbWVldHMgYHJlY3RgICh0aGUgcnViYmVyIGJhbmQncyBydWxlIGZvciByZWdpb25zKS4gKi9cbmV4cG9ydCBmdW5jdGlvbiBmZWF0dXJlc0luUmVjdChmZWF0dXJlczogSXRlcmFibGU8VGlsZUZlYXR1cmU+LCByZWN0OiBSZWFkb25seTxCYm94Pik6IFRpbGVGZWF0dXJlW10ge1xuICBjb25zdCBvdXQ6IFRpbGVGZWF0dXJlW10gPSBbXTtcbiAgZm9yIChjb25zdCBmIG9mIGZlYXR1cmVzKSBpZiAoYmJveGVzTWVldChmLmJib3gsIHJlY3QpKSBvdXQucHVzaChmKTtcbiAgcmV0dXJuIG91dDtcbn1cblxuLyoqIEV2ZW4tb2RkIGNvbnRhaW5tZW50IG92ZXIgaW50ZXJsZWF2ZWQgcmluZ3MuICovXG5leHBvcnQgZnVuY3Rpb24gaW5zaWRlUmluZ3MocmluZ3M6IHJlYWRvbmx5IEFycmF5TGlrZTxudW1iZXI+W10sIHg6IG51bWJlciwgeTogbnVtYmVyKTogYm9vbGVhbiB7XG4gIGxldCBpbnNpZGUgPSBmYWxzZTtcbiAgZm9yIChjb25zdCByIG9mIHJpbmdzKSB7XG4gICAgY29uc3QgbiA9IHIubGVuZ3RoID4+IDE7XG4gICAgaWYgKG4gPCAzKSBjb250aW51ZTtcbiAgICBmb3IgKGxldCBpID0gMCwgaiA9IG4gLSAxOyBpIDwgbjsgaiA9IGkrKykge1xuICAgICAgY29uc3QgeGkgPSByWzIgKiBpXSxcbiAgICAgICAgeWkgPSByWzIgKiBpICsgMV0sXG4gICAgICAgIHhqID0gclsyICogal0sXG4gICAgICAgIHlqID0gclsyICogaiArIDFdO1xuICAgICAgaWYgKHlpID4geSAhPT0geWogPiB5ICYmIHggPCAoKHhqIC0geGkpICogKHkgLSB5aSkpIC8gKHlqIC0geWkpICsgeGkpIGluc2lkZSA9ICFpbnNpZGU7XG4gICAgfVxuICB9XG4gIHJldHVybiBpbnNpZGU7XG59XG5cbmZ1bmN0aW9uIG5lYXJQb2x5bGluZXMobGluZXM6IHJlYWRvbmx5IEFycmF5TGlrZTxudW1iZXI+W10sIHg6IG51bWJlciwgeTogbnVtYmVyLCB0b2xlcmFuY2U6IG51bWJlcik6IGJvb2xlYW4ge1xuICBmb3IgKGNvbnN0IGwgb2YgbGluZXMpIHtcbiAgICBmb3IgKGxldCBpID0gMjsgaSArIDEgPCBsLmxlbmd0aDsgaSArPSAyKSB7XG4gICAgICBpZiAoc2VnbWVudERpc3RhbmNlKHgsIHksIGxbaSAtIDJdLCBsW2kgLSAxXSwgbFtpXSwgbFtpICsgMV0pIDw9IHRvbGVyYW5jZSkgcmV0dXJuIHRydWU7XG4gICAgfVxuICB9XG4gIHJldHVybiBmYWxzZTtcbn1cblxuZnVuY3Rpb24gc2VnbWVudERpc3RhbmNlKHB4OiBudW1iZXIsIHB5OiBudW1iZXIsIGF4OiBudW1iZXIsIGF5OiBudW1iZXIsIGJ4OiBudW1iZXIsIGJ5OiBudW1iZXIpOiBudW1iZXIge1xuICBjb25zdCBkeCA9IGJ4IC0gYXgsXG4gICAgZHkgPSBieSAtIGF5O1xuICBjb25zdCBsZW4yID0gZHggKiBkeCArIGR5ICogZHk7XG4gIGNvbnN0IHQgPSBsZW4yID09PSAwID8gMCA6IE1hdGgubWF4KDAsIE1hdGgubWluKDEsICgocHggLSBheCkgKiBkeCArIChweSAtIGF5KSAqIGR5KSAvIGxlbjIpKTtcbiAgcmV0dXJuIE1hdGguaHlwb3QocHggLSAoYXggKyB0ICogZHgpLCBweSAtIChheSArIHQgKiBkeSkpO1xufVxuXG4vLyDilIDilIAgU2ltcGxpZmljYXRpb24g4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSAXG5cbi8qKiBEb3VnbGFz4oCTUGV1Y2tlciBvdmVyIGFuIG9wZW4gcG9seWxpbmUgKGJvdGggZW5kcyBrZXB0KS4gKi9cbmV4cG9ydCBmdW5jdGlvbiBzaW1wbGlmeVBvbHlsaW5lKHhzOiBudW1iZXJbXSwgeXM6IG51bWJlcltdLCBlcHNpbG9uOiBudW1iZXIpOiB7IHhzOiBudW1iZXJbXTsgeXM6IG51bWJlcltdIH0ge1xuICBjb25zdCBuID0geHMubGVuZ3RoO1xuICBpZiAobiA8PSAyIHx8ICEoZXBzaWxvbiA+IDApKSByZXR1cm4geyB4czogeHMuc2xpY2UoKSwgeXM6IHlzLnNsaWNlKCkgfTtcbiAgY29uc3Qga2VlcCA9IG5ldyBVaW50OEFycmF5KG4pO1xuICBrZWVwWzBdID0ga2VlcFtuIC0gMV0gPSAxO1xuICBjb25zdCBzdGFjazogQXJyYXk8W251bWJlciwgbnVtYmVyXT4gPSBbWzAsIG4gLSAxXV07XG4gIHdoaWxlIChzdGFjay5sZW5ndGgpIHtcbiAgICBjb25zdCBbYSwgYl0gPSBzdGFjay5wb3AoKSBhcyBbbnVtYmVyLCBudW1iZXJdO1xuICAgIGxldCBtYXhEID0gLTEsXG4gICAgICBpZHggPSAtMTtcbiAgICBmb3IgKGxldCBpID0gYSArIDE7IGkgPCBiOyBpKyspIHtcbiAgICAgIGNvbnN0IGQgPSBzZWdtZW50RGlzdGFuY2UoeHNbaV0sIHlzW2ldLCB4c1thXSwgeXNbYV0sIHhzW2JdLCB5c1tiXSk7XG4gICAgICBpZiAoZCA+IG1heEQpIHtcbiAgICAgICAgbWF4RCA9IGQ7XG4gICAgICAgIGlkeCA9IGk7XG4gICAgICB9XG4gICAgfVxuICAgIGlmIChtYXhEID4gZXBzaWxvbikge1xuICAgICAga2VlcFtpZHhdID0gMTtcbiAgICAgIHN0YWNrLnB1c2goW2EsIGlkeF0sIFtpZHgsIGJdKTtcbiAgICB9XG4gIH1cbiAgY29uc3Qgb3g6IG51bWJlcltdID0gW10sXG4gICAgb3k6IG51bWJlcltdID0gW107XG4gIGZvciAobGV0IGkgPSAwOyBpIDwgbjsgaSsrKSB7XG4gICAgaWYgKGtlZXBbaV0pIHtcbiAgICAgIG94LnB1c2goeHNbaV0pO1xuICAgICAgb3kucHVzaCh5c1tpXSk7XG4gICAgfVxuICB9XG4gIHJldHVybiB7IHhzOiBveCwgeXM6IG95IH07XG59XG5cbi8qKlxuICogUmluZ3Mgc2ltcGxpZmllZCBmb3IgYSBsZXZlbDogZXZlcnkgcmluZyB0aHJvdWdoIERvdWdsYXPigJNQZXVja2VyIGF0IHRoZSBsZXZlbCdzIHRvbGVyYW5jZSxcbiAqIHJpbmdzIHdob3NlIGJveCBpcyB1bmRlciB0aGUgbGV2ZWwncyBtaW5pbXVtIGV4dGVudCBkcm9wcGVkLCBhbmQgcmluZ3MgbGVmdCB3aXRoIHRvbyBmZXdcbiAqIHZlcnRpY2VzIHRvIGRyYXcgKDMgZm9yIGEgY2xvc2VkIHJpbmcsIDIgZm9yIGEgcG9seWxpbmUpIGRyb3BwZWQuIExldmVsIDAgcmV0dXJucyB0aGUgcmluZ3NcbiAqIGFzIHRoZXkgYXJlLlxuICovXG5leHBvcnQgZnVuY3Rpb24gc2ltcGxpZnlSaW5ncyhyaW5nczogcmVhZG9ubHkgRmxvYXQ2NEFycmF5W10sIG9wZW46IGJvb2xlYW4sIGxldmVsOiBudW1iZXIpOiBGbG9hdDMyQXJyYXlbXSB7XG4gIGNvbnN0IHRvbCA9IGxldmVsVG9sZXJhbmNlKGxldmVsKTtcbiAgY29uc3QgbWluRXh0ZW50ID0gbGV2ZWxNaW5FeHRlbnQobGV2ZWwpO1xuICBjb25zdCBtaW5WZXJ0aWNlcyA9IG9wZW4gPyAyIDogMztcbiAgY29uc3Qgb3V0OiBGbG9hdDMyQXJyYXlbXSA9IFtdO1xuICBmb3IgKGNvbnN0IHJpbmcgb2YgcmluZ3MpIHtcbiAgICBjb25zdCBuID0gcmluZy5sZW5ndGggPj4gMTtcbiAgICBpZiAobiA8IG1pblZlcnRpY2VzKSBjb250aW51ZTtcbiAgICBpZiAodG9sID09PSAwKSB7XG4gICAgICBvdXQucHVzaChGbG9hdDMyQXJyYXkuZnJvbShyaW5nKSk7XG4gICAgICBjb250aW51ZTtcbiAgICB9XG4gICAgY29uc3QgeHMgPSBuZXcgQXJyYXk8bnVtYmVyPihuKSxcbiAgICAgIHlzID0gbmV3IEFycmF5PG51bWJlcj4obik7XG4gICAgbGV0IHgwID0gSW5maW5pdHksXG4gICAgICB5MCA9IEluZmluaXR5LFxuICAgICAgeDEgPSAtSW5maW5pdHksXG4gICAgICB5MSA9IC1JbmZpbml0eTtcbiAgICBmb3IgKGxldCBpID0gMDsgaSA8IG47IGkrKykge1xuICAgICAgY29uc3QgeCA9IHJpbmdbMiAqIGldLFxuICAgICAgICB5ID0gcmluZ1syICogaSArIDFdO1xuICAgICAgeHNbaV0gPSB4O1xuICAgICAgeXNbaV0gPSB5O1xuICAgICAgaWYgKHggPCB4MCkgeDAgPSB4O1xuICAgICAgaWYgKHggPiB4MSkgeDEgPSB4O1xuICAgICAgaWYgKHkgPCB5MCkgeTAgPSB5O1xuICAgICAgaWYgKHkgPiB5MSkgeTEgPSB5O1xuICAgIH1cbiAgICBpZiAoTWF0aC5tYXgoeDEgLSB4MCwgeTEgLSB5MCkgPCBtaW5FeHRlbnQpIGNvbnRpbnVlO1xuICAgIGNvbnN0IHMgPSBvcGVuID8gc2ltcGxpZnlQb2x5bGluZSh4cywgeXMsIHRvbCkgOiBzaW1wbGlmeVJpbmcoeHMsIHlzLCB0b2wpO1xuICAgIGlmIChzLnhzLmxlbmd0aCA8IG1pblZlcnRpY2VzKSBjb250aW51ZTtcbiAgICBjb25zdCBmbGF0ID0gbmV3IEZsb2F0MzJBcnJheShzLnhzLmxlbmd0aCAqIDIpO1xuICAgIGZvciAobGV0IGkgPSAwOyBpIDwgcy54cy5sZW5ndGg7IGkrKykge1xuICAgICAgZmxhdFsyICogaV0gPSBzLnhzW2ldO1xuICAgICAgZmxhdFsyICogaSArIDFdID0gcy55c1tpXTtcbiAgICB9XG4gICAgb3V0LnB1c2goZmxhdCk7XG4gIH1cbiAgcmV0dXJuIG91dDtcbn1cblxuLy8g4pSA4pSAIFRoZSBmZWF0dXJlIHRhYmxlIOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgFxuXG4vKiogRmVhdHVyZXMgKGFuZCB0aGVpciBzaW1wbGlmaWVkIG91dGxpbmVzKSBjYWNoZWQgcGVyIGxldmVsLCBwYXN0IHdoaWNoIHRoZSBvbGRlc3QgZ28uICovXG5jb25zdCBTSU1QTElGSUVEX0NBQ0hFX0xJTUlUID0gMjAwXzAwMDtcblxuLyoqXG4gKiBBIHBhcnNlZCBHZW9KU09OIHJlZ2lvbiBzZXQsIGluZGV4ZWQgZm9yIHRpbGVzLiBIb2xkcyB0aGUgcmF3IGZlYXR1cmVzIChmb3IgdGhlIGV4YWN0XG4gKiBnZW9tZXRyeSBhbmQgdGhlIGV4cG9ydCksIGVhY2ggZmVhdHVyZSdzIHJpbmdzLCBib3gsIHBsYW5lIGFuZCBjbGFzcywgYW5kIGJ1aWxkcyBhIGxldmVsJ3NcbiAqIHRpbGUgYnVja2V0cyB0aGUgZmlyc3QgdGltZSB0aGF0IGxldmVsIG9mIGEgcGxhbmUgaXMgYXNrZWQgZm9yLlxuICovXG5leHBvcnQgY2xhc3MgUmVnaW9uRmVhdHVyZVRhYmxlIHtcbiAgcmVhZG9ubHkgaWRzOiBzdHJpbmdbXSA9IFtdO1xuICByZWFkb25seSBsYWJlbHM6IEFycmF5PHN0cmluZyB8IG51bGw+ID0gW107XG4gIHJlYWRvbmx5IGNvbG9yczogQXJyYXk8c3RyaW5nIHwgbnVsbD4gPSBbXTtcbiAgcmVhZG9ubHkgcGxhbmVzOiBudW1iZXJbXSA9IFtdO1xuICByZWFkb25seSBib3hlczogQmJveFtdID0gW107XG4gIHJlYWRvbmx5IHJpbmdzOiBGbG9hdDY0QXJyYXlbXVtdID0gW107XG4gIHJlYWRvbmx5IG9wZW46IGJvb2xlYW5bXSA9IFtdO1xuICAvKiogUGVyIGZlYXR1cmUsIGl0cyBwYXJ0cyBhcyByaW5nIGluZGljZXMgKHRoZSBleHRlcmlvciBmaXJzdCwgdGhlbiBpdHMgaG9sZXMpLiAqL1xuICByZWFkb25seSBwYXJ0czogbnVtYmVyW11bXVtdID0gW107XG4gIHByaXZhdGUgcmVhZG9ubHkgbGFiZWxQb2ludHMgPSBuZXcgTWFwPG51bWJlciwgRmxvYXQzMkFycmF5PigpO1xuICAvKiogRWFjaCBmZWF0dXJlJ3MgYXJlYSwgd29ya2VkIG91dCB0aGUgZmlyc3QgdGltZSBpdHMgcm93IGlzIGFza2VkIGZvci4gKi9cbiAgcHJpdmF0ZSByZWFkb25seSBhcmVhcyA9IG5ldyBNYXA8bnVtYmVyLCBudW1iZXI+KCk7XG4gIHByaXZhdGUgaGllcmFyY2h5PzogUmVnaW9uQ2xhc3NOb2RlW107XG4gIHByaXZhdGUgc3R5bGU/OiBSZWdpb25Tb3VyY2VTdHlsZTtcbiAgcHJpdmF0ZSByZWFkb25seSBieUlkID0gbmV3IE1hcDxzdHJpbmcsIG51bWJlcj4oKTtcbiAgcHJpdmF0ZSByZWFkb25seSBidWNrZXRzID0gbmV3IE1hcDxzdHJpbmcsIExldmVsSW5kZXg+KCk7XG4gIHByaXZhdGUgcmVhZG9ubHkgc2ltcGxpZmllZCA9IG5ldyBNYXA8c3RyaW5nLCBGbG9hdDMyQXJyYXlbXT4oKTtcbiAgcHJpdmF0ZSByZWFkb25seSBib3VuZHM6IEJib3ggfCBudWxsO1xuICBwcml2YXRlIHJlYWRvbmx5IGxldmVsczogbnVtYmVyO1xuXG4gIGNvbnN0cnVjdG9yKFxuICAgIHJlYWRvbmx5IHJhdzogR2VvSnNvbkZlYXR1cmVMaWtlW10sXG4gICAgcmVhZG9ubHkgdGlsZVNpemUgPSBSRUdJT05fVElMRV9TSVpFLFxuICApIHtcbiAgICBsZXQgeDAgPSBJbmZpbml0eSxcbiAgICAgIHkwID0gSW5maW5pdHksXG4gICAgICB4MSA9IC1JbmZpbml0eSxcbiAgICAgIHkxID0gLUluZmluaXR5O1xuICAgIHJhdy5mb3JFYWNoKChmZWF0dXJlLCBpKSA9PiB7XG4gICAgICBjb25zdCBvd24gPSBmZWF0dXJlSWRPZihmZWF0dXJlKTtcbiAgICAgIGxldCBpZCA9IG93bjtcbiAgICAgIGlmIChpZCA9PT0gdW5kZWZpbmVkIHx8IHRoaXMuYnlJZC5oYXMoaWQpKSB7XG4gICAgICAgIC8vIEl0cyBwb3NpdGlvbiwgdW5sZXNzIGEgZmVhdHVyZSBhbHJlYWR5IGhhcyB0aGF0IGlkIChhbiBleHBsaWNpdCBcIiMxXCIsIHNheSk6IGlkcyBhcmUgdW5pcXVlLFxuICAgICAgICAvLyBvciBhIHRha2UsIGFuIGV4Y2x1c2lvbiBvciBhbiBleHBvcnQgd291bGQgYWN0IG9uIGJvdGguXG4gICAgICAgIGlkID0gYCMke2l9YDtcbiAgICAgICAgZm9yIChsZXQgayA9IDE7IHRoaXMuYnlJZC5oYXMoaWQpOyBrKyspIGlkID0gYCMke2l9LSR7a31gO1xuICAgICAgfVxuICAgICAgdGhpcy5ieUlkLnNldChpZCwgaSk7XG4gICAgICB0aGlzLmlkcy5wdXNoKGlkKTtcbiAgICAgIGNvbnN0IHsgbGFiZWwsIGNvbG9yIH0gPSBjbGFzc2lmaWNhdGlvbk9mKGZlYXR1cmUpO1xuICAgICAgdGhpcy5sYWJlbHMucHVzaChsYWJlbCk7XG4gICAgICB0aGlzLmNvbG9ycy5wdXNoKGNvbG9yKTtcbiAgICAgIHRoaXMucGxhbmVzLnB1c2goZmVhdHVyZT8uZ2VvbWV0cnk/LnBsYW5lPy56ID8/IDApO1xuICAgICAgY29uc3QgeyByaW5ncywgb3BlbiwgcGFydHMgfSA9IHJpbmdzT2YoZmVhdHVyZSk7XG4gICAgICB0aGlzLnJpbmdzLnB1c2gocmluZ3MpO1xuICAgICAgdGhpcy5vcGVuLnB1c2gob3Blbik7XG4gICAgICB0aGlzLnBhcnRzLnB1c2gocGFydHMpO1xuICAgICAgY29uc3QgYm94ID0gcmluZ3NCb3gocmluZ3MpO1xuICAgICAgdGhpcy5ib3hlcy5wdXNoKGJveCk7XG4gICAgICBpZiAocmluZ3MubGVuZ3RoKSB7XG4gICAgICAgIHgwID0gTWF0aC5taW4oeDAsIGJveFswXSk7XG4gICAgICAgIHkwID0gTWF0aC5taW4oeTAsIGJveFsxXSk7XG4gICAgICAgIHgxID0gTWF0aC5tYXgoeDEsIGJveFsyXSk7XG4gICAgICAgIHkxID0gTWF0aC5tYXgoeTEsIGJveFszXSk7XG4gICAgICB9XG4gICAgfSk7XG4gICAgdGhpcy5ib3VuZHMgPSB4MCA8PSB4MSA/IFt4MCwgeTAsIHgxLCB5MV0gOiBudWxsO1xuICAgIGNvbnN0IGV4dGVudCA9IHRoaXMuYm91bmRzID8gTWF0aC5tYXgoTWF0aC5hYnMoeDApLCBNYXRoLmFicyh5MCksIE1hdGguYWJzKHgxKSwgTWF0aC5hYnMoeTEpKSA6IDA7XG4gICAgdGhpcy5sZXZlbHMgPSAxICsgTWF0aC5tYXgoMCwgTWF0aC5jZWlsKE1hdGgubG9nMihNYXRoLm1heChleHRlbnQsIHRpbGVTaXplKSAvIHRpbGVTaXplKSkpO1xuICB9XG5cbiAgLyoqIFBhcnNlIGEgR2VvSlNPTiBGZWF0dXJlQ29sbGVjdGlvbiBzdHJpbmcuIFRocm93cyBvbiBpbnZhbGlkIEpTT04gb3Igbm8gYGZlYXR1cmVzYC4gKi9cbiAgc3RhdGljIGZyb21HZW9Kc29uKHRleHQ6IHN0cmluZywgdGlsZVNpemUgPSBSRUdJT05fVElMRV9TSVpFKTogUmVnaW9uRmVhdHVyZVRhYmxlIHtcbiAgICBjb25zdCBwYXJzZWQgPSBKU09OLnBhcnNlKHRleHQpO1xuICAgIGlmICghcGFyc2VkIHx8ICFBcnJheS5pc0FycmF5KHBhcnNlZC5mZWF0dXJlcykpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcihcIkludmFsaWQgR2VvSnNvbiBmaWxlOiBtdXN0IGNvbnRhaW4gdGhlICdmZWF0dXJlcycga2V5LlwiKTtcbiAgICB9XG4gICAgY29uc3QgdGFibGUgPSBuZXcgUmVnaW9uRmVhdHVyZVRhYmxlKHBhcnNlZC5mZWF0dXJlcywgdGlsZVNpemUpO1xuICAgIHRhYmxlLmRlc2NyaWJlKHBhcnNlZC5jbGFzc0hpZXJhcmNoeSwgcGFyc2VkLnN0eWxlKTtcbiAgICByZXR1cm4gdGFibGU7XG4gIH1cblxuICAvKiogQXR0YWNoIGEgY2xhc3MgaGllcmFyY2h5IGFuZCBhIHN0eWxlIGhpbnQgKGVhY2ggaWdub3JlZCB3aGVuIG5vdCB3ZWxsIGZvcm1lZCkuICovXG4gIGRlc2NyaWJlKGhpZXJhcmNoeT86IHVua25vd24sIHN0eWxlPzogdW5rbm93bik6IHZvaWQge1xuICAgIHRoaXMuaGllcmFyY2h5ID0gcmVhZEhpZXJhcmNoeShoaWVyYXJjaHkpID8/IHRoaXMuaGllcmFyY2h5O1xuICAgIHRoaXMuc3R5bGUgPSByZWFkU3R5bGUoc3R5bGUpID8/IHRoaXMuc3R5bGU7XG4gIH1cblxuICAvKipcbiAgICogVGhlIG91dGxpbmVzIG9mIGV2ZXJ5IGZlYXR1cmUgb2YgdGhlc2UgY2xhc3NlcywgcGxhbmUgYnkgcGxhbmUsIHNpbXBsaWZpZWQgZm9yIGBsZXZlbGAgKHdoYXQgYVxuICAgKiAzRCByZWNvbnN0cnVjdGlvbiBvZiB0aGUgY2xhc3NlcyBzdGFja3MpLCB3aXRob3V0IHRoZSBgZXhjbHVkZWBkIGlkczogY2xvc2VkIGZlYXR1cmVzJyByaW5ncyxcbiAgICogb3BlbiBmZWF0dXJlcycgcG9seWxpbmVzIGFzIGBsaW5lc2AsIGVhY2ggcmluZyB3aXRoIGl0cyBmZWF0dXJlIChgcmluZ0dyb3Vwc2ApLiBQbGFuZXMgd2l0aG91dFxuICAgKiBvbmUgYXJlIGxlZnQgb3V0LiBgY2xhc3Nlc2AgbnVsbCByZWFkcyBldmVyeSBsYWJlbGxlZCBmZWF0dXJlLCBlYWNoIG91dGxpbmUgd2l0aCBpdHMgY2xhc3NcbiAgICogKGByaW5nTGFiZWxzYCwgYGxpbmVMYWJlbHNgKS5cbiAgICovXG4gIGNsYXNzT3V0bGluZXMoXG4gICAgY2xhc3NlczogcmVhZG9ubHkgc3RyaW5nW10gfCBudWxsLFxuICAgIGxldmVsOiBudW1iZXIsXG4gICAgZXhjbHVkZTogcmVhZG9ubHkgc3RyaW5nW10gPSBbXSxcbiAgKTogQ2xhc3NPdXRsaW5lc1tdIHtcbiAgICBjb25zdCB3YW50ZWQgPSBjbGFzc2VzID8gbmV3IFNldChjbGFzc2VzKSA6IG51bGw7XG4gICAgY29uc3Qgc2tpcCA9IG5ldyBTZXQoZXhjbHVkZSk7XG4gICAgY29uc3QgYnlQbGFuZSA9IG5ldyBNYXA8bnVtYmVyLCBDbGFzc091dGxpbmVzPigpO1xuICAgIGZvciAobGV0IGkgPSAwOyBpIDwgdGhpcy5pZHMubGVuZ3RoOyBpKyspIHtcbiAgICAgIGNvbnN0IGxhYmVsID0gdGhpcy5sYWJlbHNbaV07XG4gICAgICBpZiAoIWxhYmVsIHx8ICh3YW50ZWQgJiYgIXdhbnRlZC5oYXMobGFiZWwpKSB8fCBza2lwLmhhcyh0aGlzLmlkc1tpXSkpIGNvbnRpbnVlO1xuICAgICAgY29uc3QgcmluZ3MgPSB0aGlzLnJpbmdzQXQoaSwgbGV2ZWwpO1xuICAgICAgaWYgKCFyaW5ncy5sZW5ndGgpIGNvbnRpbnVlO1xuICAgICAgY29uc3QgeiA9IHRoaXMucGxhbmVzW2ldO1xuICAgICAgbGV0IHBsYW5lID0gYnlQbGFuZS5nZXQoeik7XG4gICAgICBpZiAoIXBsYW5lKSBieVBsYW5lLnNldCh6LCAocGxhbmUgPSB7IHosIHJpbmdzOiBbXSB9KSk7XG4gICAgICBpZiAodGhpcy5vcGVuW2ldKSB7XG4gICAgICAgIChwbGFuZS5saW5lcyA/Pz0gW10pLnB1c2goLi4ucmluZ3MpO1xuICAgICAgICBpZiAoIXdhbnRlZCkgKHBsYW5lLmxpbmVMYWJlbHMgPz89IFtdKS5wdXNoKC4uLnJpbmdzLm1hcCgoKSA9PiBsYWJlbCkpO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgcGxhbmUucmluZ3MucHVzaCguLi5yaW5ncyk7XG4gICAgICAgIChwbGFuZS5yaW5nR3JvdXBzID8/PSBbXSkucHVzaCguLi5yaW5ncy5tYXAoKCkgPT4gaSkpO1xuICAgICAgICBpZiAoIXdhbnRlZCkgKHBsYW5lLnJpbmdMYWJlbHMgPz89IFtdKS5wdXNoKC4uLnJpbmdzLm1hcCgoKSA9PiBsYWJlbCkpO1xuICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4gQXJyYXkuZnJvbShieVBsYW5lLnZhbHVlcygpKS5zb3J0KChhLCBiKSA9PiBhLnogLSBiLnopO1xuICB9XG5cbiAgLyoqIEZlYXR1cmVzIHBlciBjbGFzcyBvbiBwbGFuZSBgemAgKG51bGw6IG9uIGV2ZXJ5IHBsYW5lKSwgd2l0aG91dCB0aGUgYGV4Y2x1ZGVgZCBpZHMuICovXG4gIGNsYXNzQ291bnRzKHo6IG51bWJlciB8IG51bGwsIGV4Y2x1ZGU6IHJlYWRvbmx5IHN0cmluZ1tdID0gW10pOiBSZWNvcmQ8c3RyaW5nLCBudW1iZXI+IHtcbiAgICBjb25zdCBza2lwID0gbmV3IFNldChleGNsdWRlKTtcbiAgICBjb25zdCBjb3VudHM6IFJlY29yZDxzdHJpbmcsIG51bWJlcj4gPSB7fTtcbiAgICBmb3IgKGxldCBpID0gMDsgaSA8IHRoaXMuaWRzLmxlbmd0aDsgaSsrKSB7XG4gICAgICBjb25zdCBsYWJlbCA9IHRoaXMubGFiZWxzW2ldO1xuICAgICAgaWYgKCh6ICE9PSBudWxsICYmIHRoaXMucGxhbmVzW2ldICE9PSB6KSB8fCAhbGFiZWwgfHwgc2tpcC5oYXModGhpcy5pZHNbaV0pKSBjb250aW51ZTtcbiAgICAgIGNvdW50c1tsYWJlbF0gPSAoY291bnRzW2xhYmVsXSA/PyAwKSArIDE7XG4gICAgfVxuICAgIHJldHVybiBjb3VudHM7XG4gIH1cblxuICBpbmZvKCk6IFJlZ2lvblNvdXJjZUluZm8ge1xuICAgIGNvbnN0IGNsYXNzQ29sb3JzOiBSZWNvcmQ8c3RyaW5nLCBzdHJpbmc+ID0ge307XG4gICAgdGhpcy5sYWJlbHMuZm9yRWFjaCgobGFiZWwsIGkpID0+IHtcbiAgICAgIGNvbnN0IGNvbG9yID0gdGhpcy5jb2xvcnNbaV07XG4gICAgICBpZiAobGFiZWwgJiYgY29sb3IgJiYgIShsYWJlbCBpbiBjbGFzc0NvbG9ycykpIGNsYXNzQ29sb3JzW2xhYmVsXSA9IGNvbG9yO1xuICAgIH0pO1xuICAgIHJldHVybiB7XG4gICAgICBmZWF0dXJlQ291bnQ6IHRoaXMuaWRzLmxlbmd0aCxcbiAgICAgIGJvdW5kczogdGhpcy5ib3VuZHMsXG4gICAgICB0aWxlU2l6ZTogdGhpcy50aWxlU2l6ZSxcbiAgICAgIGxldmVsczogdGhpcy5sZXZlbHMsXG4gICAgICBwbGFuZXM6IEFycmF5LmZyb20obmV3IFNldCh0aGlzLnBsYW5lcykpLnNvcnQoKGEsIGIpID0+IGEgLSBiKSxcbiAgICAgIGNsYXNzQ29sb3JzLFxuICAgICAgLi4uKHRoaXMuaGllcmFyY2h5ID8geyBoaWVyYXJjaHk6IHRoaXMuaGllcmFyY2h5IH0gOiB7fSksXG4gICAgICAuLi4odGhpcy5zdHlsZSA/IHsgc3R5bGU6IHRoaXMuc3R5bGUgfSA6IHt9KSxcbiAgICB9O1xuICB9XG5cbiAgLyoqIE9uZSB0aWxlIG9mIHBsYW5lIGB6YC4gKi9cbiAgdGlsZSh6OiBudW1iZXIsIGxldmVsOiBudW1iZXIsIGd4OiBudW1iZXIsIGd5OiBudW1iZXIpOiBSZWdpb25UaWxlIHtcbiAgICBjb25zdCB7IGNlbGxzLCB3aWRlIH0gPSB0aGlzLmJ1Y2tldHNGb3IoeiwgbGV2ZWwpO1xuICAgIGNvbnN0IGJ1Y2tldCA9IGNlbGxzLmdldChgJHtneH0vJHtneX1gKSA/PyBbXTtcbiAgICBjb25zdCBzaXplID0gbGV2ZWxUaWxlU2l6ZShsZXZlbCwgdGhpcy50aWxlU2l6ZSk7XG4gICAgY29uc3QgZmVhdHVyZXM6IFRpbGVGZWF0dXJlW10gPSBbXTtcbiAgICAvLyBUaGUgdGlsZSdzIGNlbGwgZmVhdHVyZXMgYW5kIHRoZSB3aWRlIG9uZXMgdGhhdCBtZWV0IGl0LCBtZXJnZWQgYmFjayBpbnRvIGZpbGUgb3JkZXIuXG4gICAgY29uc3Qgb3JkZXI6IG51bWJlcltdID0gW107XG4gICAgZm9yIChsZXQgYSA9IDAsIHcgPSAwOyBhIDwgYnVja2V0Lmxlbmd0aCB8fCB3IDwgd2lkZS5sZW5ndGg7KSB7XG4gICAgICBpZiAodyA+PSB3aWRlLmxlbmd0aCB8fCAoYSA8IGJ1Y2tldC5sZW5ndGggJiYgYnVja2V0W2FdIDwgd2lkZVt3XSkpIG9yZGVyLnB1c2goYnVja2V0W2ErK10pO1xuICAgICAgZWxzZSB7XG4gICAgICAgIGNvbnN0IGkgPSB3aWRlW3crK107XG4gICAgICAgIGlmIChjZWxsTWVldHModGhpcy5ib3hlc1tpXSwgc2l6ZSwgZ3gsIGd5KSkgb3JkZXIucHVzaChpKTtcbiAgICAgIH1cbiAgICB9XG4gICAgZm9yIChjb25zdCBpIG9mIG9yZGVyKSB7XG4gICAgICBjb25zdCByaW5ncyA9IHRoaXMucmluZ3NBdChpLCBsZXZlbCk7XG4gICAgICBpZiAoIXJpbmdzLmxlbmd0aCkgY29udGludWU7XG4gICAgICBjb25zdCBsYWJlbHMgPSB0aGlzLmxhYmVsc0F0KGksIGxldmVsKTtcbiAgICAgIGZlYXR1cmVzLnB1c2goe1xuICAgICAgICBpZDogdGhpcy5pZHNbaV0sXG4gICAgICAgIGxhYmVsOiB0aGlzLmxhYmVsc1tpXSxcbiAgICAgICAgY29sb3I6IHRoaXMuY29sb3JzW2ldLFxuICAgICAgICBiYm94OiB0aGlzLmJveGVzW2ldLFxuICAgICAgICByaW5ncyxcbiAgICAgICAgb3BlbjogdGhpcy5vcGVuW2ldLFxuICAgICAgICAuLi4obGFiZWxzID8geyBsYWJlbHMgfSA6IHt9KSxcbiAgICAgIH0pO1xuICAgIH1cbiAgICByZXR1cm4geyB6LCBsZXZlbCwgZ3gsIGd5LCBmZWF0dXJlcyB9O1xuICB9XG5cbiAgLyoqIFRoZSByYXcgR2VvSlNPTiBmZWF0dXJlcyB3aXRoIHRoZXNlIGlkcywgaW4gdGhlIG9yZGVyIGFza2VkICh1bmtub3duIGlkcyBza2lwcGVkKS4gKi9cbiAgZmVhdHVyZXMoaWRzOiByZWFkb25seSBzdHJpbmdbXSk6IEFycmF5PHsgaWQ6IHN0cmluZzsgZmVhdHVyZTogR2VvSnNvbkZlYXR1cmVMaWtlIH0+IHtcbiAgICBjb25zdCBvdXQ6IEFycmF5PHsgaWQ6IHN0cmluZzsgZmVhdHVyZTogR2VvSnNvbkZlYXR1cmVMaWtlIH0+ID0gW107XG4gICAgZm9yIChjb25zdCBpZCBvZiBpZHMpIHtcbiAgICAgIGNvbnN0IGkgPSB0aGlzLmJ5SWQuZ2V0KGlkKTtcbiAgICAgIGlmIChpICE9PSB1bmRlZmluZWQpIG91dC5wdXNoKHsgaWQsIGZlYXR1cmU6IHRoaXMucmF3W2ldIH0pO1xuICAgIH1cbiAgICByZXR1cm4gb3V0O1xuICB9XG5cbiAgLyoqIEZlYXR1cmUgYGlgJ3MgYXJlYSBpbiBweMKyICgwIGZvciBhIHBvbHlsaW5lKS4gKi9cbiAgcHJpdmF0ZSBhcmVhT2YoaTogbnVtYmVyKTogbnVtYmVyIHtcbiAgICBsZXQgYXJlYSA9IHRoaXMuYXJlYXMuZ2V0KGkpO1xuICAgIGlmIChhcmVhID09PSB1bmRlZmluZWQpIHtcbiAgICAgIGFyZWEgPSB0aGlzLm9wZW5baV0gPyAwIDogcmluZ3NBcmVhKHRoaXMucmluZ3NbaV0pO1xuICAgICAgdGhpcy5hcmVhcy5zZXQoaSwgYXJlYSk7XG4gICAgfVxuICAgIHJldHVybiBhcmVhO1xuICB9XG5cbiAgLyoqIEEgcGFnZSBvZiBwbGFuZSBgemAncyBmZWF0dXJlcywgaW4gZmlsZSBvcmRlci4gKi9cbiAgaW5kZXgoejogbnVtYmVyLCBxdWVyeTogUmVnaW9uSW5kZXhRdWVyeSk6IFJlZ2lvbkluZGV4UGFnZSB7XG4gICAgY29uc3QgZXhjbHVkZSA9IG5ldyBTZXQocXVlcnkuZXhjbHVkZSA/PyBbXSk7XG4gICAgY29uc3QgY2xhc3NlcyA9IHF1ZXJ5LmNsYXNzZXMgPyBuZXcgU2V0KHF1ZXJ5LmNsYXNzZXMpIDogbnVsbDtcbiAgICBjb25zdCBuZWVkbGUgPSBxdWVyeS5sYWJlbD8udHJpbSgpLnRvTG93ZXJDYXNlKCkgfHwgbnVsbDtcbiAgICBjb25zdCByb3dzOiBSZWdpb25JbmRleFJvd1tdID0gW107XG4gICAgbGV0IHRvdGFsID0gMDtcbiAgICBmb3IgKGxldCBpID0gMDsgaSA8IHRoaXMuaWRzLmxlbmd0aDsgaSsrKSB7XG4gICAgICBpZiAodGhpcy5wbGFuZXNbaV0gIT09IHogfHwgZXhjbHVkZS5oYXModGhpcy5pZHNbaV0pKSBjb250aW51ZTtcbiAgICAgIGlmIChuZWVkbGUgJiYgISh0aGlzLmxhYmVsc1tpXSA/PyAnJykudG9Mb3dlckNhc2UoKS5pbmNsdWRlcyhuZWVkbGUpKSBjb250aW51ZTtcbiAgICAgIGlmIChjbGFzc2VzICYmICFjbGFzc2VzLmhhcyh0aGlzLmxhYmVsc1tpXSA/PyAnJykpIGNvbnRpbnVlO1xuICAgICAgaWYgKHRvdGFsID49IHF1ZXJ5Lm9mZnNldCAmJiByb3dzLmxlbmd0aCA8IHF1ZXJ5LmxpbWl0KSB7XG4gICAgICAgIHJvd3MucHVzaCh7XG4gICAgICAgICAgaWQ6IHRoaXMuaWRzW2ldLFxuICAgICAgICAgIGxhYmVsOiB0aGlzLmxhYmVsc1tpXSxcbiAgICAgICAgICBjb2xvcjogdGhpcy5jb2xvcnNbaV0sXG4gICAgICAgICAgYmJveDogdGhpcy5ib3hlc1tpXSxcbiAgICAgICAgICBhcmVhOiB0aGlzLmFyZWFPZihpKSxcbiAgICAgICAgfSk7XG4gICAgICB9XG4gICAgICB0b3RhbCsrO1xuICAgIH1cbiAgICByZXR1cm4geyB0b3RhbCwgcm93cyB9O1xuICB9XG5cbiAgLyoqXG4gICAqIFRoZSBzb3VyY2UgYXMgYSBHZW9KU09OIEZlYXR1cmVDb2xsZWN0aW9uIHN0cmluZywgdGhyb3VnaCB0aGUgd29ya2luZyBzZXQ6IGZlYXR1cmVzIHdob3NlXG4gICAqIGlkIGlzIGluIGBleGNsdWRlYCAodGFrZW4gZm9yIGVkaXRpbmcsIG9yIGRlbGV0ZWQpIGFyZSBsZWZ0IG91dCwgYGV4dHJhYCAodGhlIHdvcmtpbmcgc2V0J3NcbiAgICogZmVhdHVyZXMpIGFwcGVuZGVkLiBFdmVyeSBmZWF0dXJlIGtlZXBzIGFuIGBpZGA7IHRoZSBzZXQga2VlcHMgaXRzIGhpZXJhcmNoeSBhbmQgc3R5bGUuXG4gICAqL1xuICBleHBvcnRHZW9Kc29uKGV4Y2x1ZGU6IHJlYWRvbmx5IHN0cmluZ1tdLCBleHRyYTogcmVhZG9ubHkgb2JqZWN0W10pOiBzdHJpbmcge1xuICAgIGNvbnN0IHNraXAgPSBuZXcgU2V0KGV4Y2x1ZGUpO1xuICAgIGNvbnN0IHBhcnRzOiBzdHJpbmdbXSA9IFtdO1xuICAgIHRoaXMucmF3LmZvckVhY2goKGZlYXR1cmUsIGkpID0+IHtcbiAgICAgIGNvbnN0IGlkID0gdGhpcy5pZHNbaV07XG4gICAgICBpZiAoc2tpcC5oYXMoaWQpKSByZXR1cm47XG4gICAgICBwYXJ0cy5wdXNoKEpTT04uc3RyaW5naWZ5KGZlYXR1cmUuaWQgPT09IHVuZGVmaW5lZCA/IHsgdHlwZTogJ0ZlYXR1cmUnLCBpZCwgLi4uZmVhdHVyZSB9IDogZmVhdHVyZSkpO1xuICAgIH0pO1xuICAgIGZvciAoY29uc3QgZiBvZiBleHRyYSkgcGFydHMucHVzaChKU09OLnN0cmluZ2lmeShmKSk7XG4gICAgcmV0dXJuIGZlYXR1cmVDb2xsZWN0aW9uSnNvbihwYXJ0cywgdGhpcy5oaWVyYXJjaHksIHRoaXMuc3R5bGUpO1xuICB9XG5cbiAgLyoqXG4gICAqIEZlYXR1cmUgYGlgJ3MgbGFiZWwgcG9pbnRzIChvbmUgcGVyIHBhcnQgd2l0aCByb29tIGZvciBhIGxhYmVsIGF0IGBsZXZlbGA6IGEgcGFydCB1bmRlciB0aGVcbiAgICogbGV2ZWwncyBtaW5pbXVtIGV4dGVudCBpcyBub3QgZHJhd24gdGhlcmUpLCBmcm9tIHRoZSBleGFjdCBnZW9tZXRyeSwgY29tcHV0ZWQgb25jZS5cbiAgICovXG4gIHByaXZhdGUgbGFiZWxzQXQoaTogbnVtYmVyLCBsZXZlbDogbnVtYmVyKTogRmxvYXQzMkFycmF5IHwgbnVsbCB7XG4gICAgaWYgKHRoaXMub3BlbltpXSB8fCAhdGhpcy5sYWJlbHNbaV0pIHJldHVybiBudWxsO1xuICAgIGxldCBwb2ludHMgPSB0aGlzLmxhYmVsUG9pbnRzLmdldChpKTtcbiAgICBpZiAoIXBvaW50cykge1xuICAgICAgY29uc3Qgb3V0OiBudW1iZXJbXSA9IFtdO1xuICAgICAgZm9yIChjb25zdCBwYXJ0IG9mIHRoaXMucGFydHNbaV0pIHtcbiAgICAgICAgY29uc3QgcG9sZSA9IHBvbHlsYWJlbChwYXJ0Lm1hcCgocikgPT4gdGhpcy5yaW5nc1tpXVtyXSkpO1xuICAgICAgICBpZiAocG9sZSAmJiBwb2xlLmRpc3RhbmNlID4gMCkgb3V0LnB1c2gocG9sZS54LCBwb2xlLnksIHBvbGUuZGlzdGFuY2UpO1xuICAgICAgfVxuICAgICAgcG9pbnRzID0gRmxvYXQzMkFycmF5LmZyb20ob3V0KTtcbiAgICAgIHRoaXMubGFiZWxQb2ludHMuc2V0KGksIHBvaW50cyk7XG4gICAgfVxuICAgIGNvbnN0IG1pbiA9IGxldmVsTWluRXh0ZW50KGxldmVsKSAvIDI7XG4gICAgaWYgKCFtaW4pIHJldHVybiBwb2ludHMubGVuZ3RoID8gcG9pbnRzIDogbnVsbDtcbiAgICBjb25zdCBrZXB0OiBudW1iZXJbXSA9IFtdO1xuICAgIGZvciAobGV0IGsgPSAwOyBrICsgMiA8IHBvaW50cy5sZW5ndGg7IGsgKz0gMylcbiAgICAgIGlmIChwb2ludHNbayArIDJdID49IG1pbikga2VwdC5wdXNoKHBvaW50c1trXSwgcG9pbnRzW2sgKyAxXSwgcG9pbnRzW2sgKyAyXSk7XG4gICAgcmV0dXJuIGtlcHQubGVuZ3RoID8gRmxvYXQzMkFycmF5LmZyb20oa2VwdCkgOiBudWxsO1xuICB9XG5cbiAgLyoqIEZlYXR1cmUgYGlgJ3MgcmluZ3MgYXQgYGxldmVsYCwgc2ltcGxpZmllZCBvbmNlIGFuZCBjYWNoZWQuICovXG4gIHByaXZhdGUgcmluZ3NBdChpOiBudW1iZXIsIGxldmVsOiBudW1iZXIpOiBGbG9hdDMyQXJyYXlbXSB7XG4gICAgY29uc3Qga2V5ID0gYCR7bGV2ZWx9LyR7aX1gO1xuICAgIGxldCByaW5ncyA9IHRoaXMuc2ltcGxpZmllZC5nZXQoa2V5KTtcbiAgICBpZiAoIXJpbmdzKSB7XG4gICAgICByaW5ncyA9IHNpbXBsaWZ5UmluZ3ModGhpcy5yaW5nc1tpXSwgdGhpcy5vcGVuW2ldLCBsZXZlbCk7XG4gICAgICBpZiAodGhpcy5zaW1wbGlmaWVkLnNpemUgPj0gU0lNUExJRklFRF9DQUNIRV9MSU1JVCkge1xuICAgICAgICBjb25zdCBvbGRlc3QgPSB0aGlzLnNpbXBsaWZpZWQua2V5cygpLm5leHQoKS52YWx1ZSBhcyBzdHJpbmc7XG4gICAgICAgIHRoaXMuc2ltcGxpZmllZC5kZWxldGUob2xkZXN0KTtcbiAgICAgIH1cbiAgICAgIHRoaXMuc2ltcGxpZmllZC5zZXQoa2V5LCByaW5ncyk7XG4gICAgfVxuICAgIHJldHVybiByaW5ncztcbiAgfVxuXG4gIC8qKiBFbnRyaWVzIGluIHBsYW5lIGB6YCdzIGxldmVsLWBsZXZlbGAgaW5kZXg6IGNlbGwgbGlzdGluZ3MgcGx1cyB3aWRlIGZlYXR1cmVzICh0ZXN0cykuICovXG4gIGluZGV4RW50cmllcyh6OiBudW1iZXIsIGxldmVsOiBudW1iZXIpOiBudW1iZXIge1xuICAgIGNvbnN0IHsgY2VsbHMsIHdpZGUgfSA9IHRoaXMuYnVja2V0c0Zvcih6LCBsZXZlbCk7XG4gICAgbGV0IG4gPSB3aWRlLmxlbmd0aDtcbiAgICBmb3IgKGNvbnN0IGxpc3Qgb2YgY2VsbHMudmFsdWVzKCkpIG4gKz0gbGlzdC5sZW5ndGg7XG4gICAgcmV0dXJuIG47XG4gIH1cblxuICAvKipcbiAgICogUGxhbmUgYHpgJ3MgbGV2ZWwtYGxldmVsYCBpbmRleCwgYnVpbHQgb24gZmlyc3QgdXNlOiBmZWF0dXJlcyBieSB0aWxlIGNlbGwgKGBneC9neWAg4oaSIGZlYXR1cmVcbiAgICogaW5kaWNlcyksIGFuZCB0aGUgd2lkZSBvbmVzIChtb3JlIHRoYW4ge0BsaW5rIE1BWF9DRUxMU19QRVJfRkVBVFVSRX0gY2VsbHMsIG9yIHBhc3QgdGhlXG4gICAqIG51bWJlciByYW5nZSksIHRlc3RlZCBhZ2FpbnN0IGEgdGlsZSB3aGVuIGl0IGlzIGFza2VkIGZvci5cbiAgICovXG4gIHByaXZhdGUgYnVja2V0c0Zvcih6OiBudW1iZXIsIGxldmVsOiBudW1iZXIpOiBMZXZlbEluZGV4IHtcbiAgICBjb25zdCBrZXkgPSBgJHt6fS8ke2xldmVsfWA7XG4gICAgbGV0IGluZGV4ID0gdGhpcy5idWNrZXRzLmdldChrZXkpO1xuICAgIGlmIChpbmRleCkgcmV0dXJuIGluZGV4O1xuICAgIGNvbnN0IGNlbGxzID0gbmV3IE1hcDxzdHJpbmcsIG51bWJlcltdPigpO1xuICAgIGNvbnN0IHdpZGU6IG51bWJlcltdID0gW107XG4gICAgY29uc3Qgc2l6ZSA9IGxldmVsVGlsZVNpemUobGV2ZWwsIHRoaXMudGlsZVNpemUpO1xuICAgIGNvbnN0IG1pbkV4dGVudCA9IGxldmVsTWluRXh0ZW50KGxldmVsKTtcbiAgICBmb3IgKGxldCBpID0gMDsgaSA8IHRoaXMuaWRzLmxlbmd0aDsgaSsrKSB7XG4gICAgICBpZiAodGhpcy5wbGFuZXNbaV0gIT09IHogfHwgIXRoaXMucmluZ3NbaV0ubGVuZ3RoKSBjb250aW51ZTtcbiAgICAgIGNvbnN0IGIgPSB0aGlzLmJveGVzW2ldO1xuICAgICAgaWYgKE1hdGgubWF4KGJbMl0gLSBiWzBdLCBiWzNdIC0gYlsxXSkgPCBtaW5FeHRlbnQpIGNvbnRpbnVlO1xuICAgICAgY29uc3QgZ3gwID0gTWF0aC5mbG9vcihiWzBdIC8gc2l6ZSksXG4gICAgICAgIGd4MSA9IE1hdGguZmxvb3IoYlsyXSAvIHNpemUpLFxuICAgICAgICBneTAgPSBNYXRoLmZsb29yKGJbMV0gLyBzaXplKSxcbiAgICAgICAgZ3kxID0gTWF0aC5mbG9vcihiWzNdIC8gc2l6ZSk7XG4gICAgICAvLyBBIGJveCB3aXRoIGEgTmFOIGNvb3JkaW5hdGUgbWVldHMgbm8gdGlsZS5cbiAgICAgIGlmIChbZ3gwLCBneDEsIGd5MCwgZ3kxXS5zb21lKE51bWJlci5pc05hTikpIGNvbnRpbnVlO1xuICAgICAgY29uc3QgY291bnQgPSAoZ3gxIC0gZ3gwICsgMSkgKiAoZ3kxIC0gZ3kwICsgMSk7XG4gICAgICBpZiAoIShjb3VudCA8PSBNQVhfQ0VMTFNfUEVSX0ZFQVRVUkUpIHx8ICFbZ3gwLCBneDEsIGd5MCwgZ3kxXS5ldmVyeShOdW1iZXIuaXNTYWZlSW50ZWdlcikpIHtcbiAgICAgICAgd2lkZS5wdXNoKGkpO1xuICAgICAgICBjb250aW51ZTtcbiAgICAgIH1cbiAgICAgIGZvciAobGV0IGd5ID0gZ3kwOyBneSA8PSBneTE7IGd5KyspIHtcbiAgICAgICAgZm9yIChsZXQgZ3ggPSBneDA7IGd4IDw9IGd4MTsgZ3grKykge1xuICAgICAgICAgIGNvbnN0IGlkID0gYCR7Z3h9LyR7Z3l9YDtcbiAgICAgICAgICBjb25zdCBsaXN0ID0gY2VsbHMuZ2V0KGlkKTtcbiAgICAgICAgICBpZiAobGlzdCkgbGlzdC5wdXNoKGkpO1xuICAgICAgICAgIGVsc2UgY2VsbHMuc2V0KGlkLCBbaV0pO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuICAgIGluZGV4ID0geyBjZWxscywgd2lkZSB9O1xuICAgIHRoaXMuYnVja2V0cy5zZXQoa2V5LCBpbmRleCk7XG4gICAgcmV0dXJuIGluZGV4O1xuICB9XG59XG5cbi8qKlxuICogQSBmZWF0dXJlIHNwYW5uaW5nIG1vcmUgdGlsZXMgdGhhbiB0aGlzIGlzIG5vdCBsaXN0ZWQgaW4gZWFjaCBvZiB0aGVtIGJ1dCBrZXB0IGFzaWRlIGFuZCB0ZXN0ZWRcbiAqIGFnYWluc3QgYSB0aWxlIHdoZW4gb25lIGlzIGFza2VkIGZvcjogb25lIGh1Z2UgYm94IChhbiBvdXRsaW5lIGFyb3VuZCBhIHdob2xlIHNsaWRlLCBvciBhIGNvcnJ1cHRcbiAqIGNvb3JkaW5hdGUpIG11c3Qgbm90IG1ha2UgYSBwbGFuZSdzIGluZGV4IG1pbGxpb25zIG9mIGVudHJpZXMuXG4gKi9cbmV4cG9ydCBjb25zdCBNQVhfQ0VMTFNfUEVSX0ZFQVRVUkUgPSA2NDtcblxuLyoqIEEgcGxhbmUncyBsZXZlbDogZmVhdHVyZXMgYnkgdGlsZSBjZWxsLCBhbmQgdGhlIHdpZGUgb25lcyAoYXNjZW5kaW5nKSwgdGVzdGVkIHBlciB0aWxlLiAqL1xuaW50ZXJmYWNlIExldmVsSW5kZXgge1xuICBjZWxsczogTWFwPHN0cmluZywgbnVtYmVyW10+O1xuICB3aWRlOiBudW1iZXJbXTtcbn1cblxuLyoqIFdoZXRoZXIgYm94IGBiYCBtZWV0cyBjZWxsIChneCwgZ3kpIG9mIHRpbGVzIGBzaXplYCBwaXhlbHMgd2lkZSwgYXMgYSBjZWxsIGxpc3RzIGl0LiAqL1xuZnVuY3Rpb24gY2VsbE1lZXRzKGI6IFJlYWRvbmx5PEJib3g+LCBzaXplOiBudW1iZXIsIGd4OiBudW1iZXIsIGd5OiBudW1iZXIpOiBib29sZWFuIHtcbiAgcmV0dXJuIChcbiAgICBNYXRoLmZsb29yKGJbMF0gLyBzaXplKSA8PSBneCAmJlxuICAgIGd4IDw9IE1hdGguZmxvb3IoYlsyXSAvIHNpemUpICYmXG4gICAgTWF0aC5mbG9vcihiWzFdIC8gc2l6ZSkgPD0gZ3kgJiZcbiAgICBneSA8PSBNYXRoLmZsb29yKGJbM10gLyBzaXplKVxuICApO1xufVxuXG4vKiogQSBmZWF0dXJlJ3Mgb3duIGlkIChgaWRgLCBlbHNlIGBwcm9wZXJ0aWVzLmlkYCkgYXMgYSBzdHJpbmcuICovXG5leHBvcnQgZnVuY3Rpb24gZmVhdHVyZUlkT2YoZmVhdHVyZTogR2VvSnNvbkZlYXR1cmVMaWtlKTogc3RyaW5nIHwgdW5kZWZpbmVkIHtcbiAgY29uc3QgaWQgPSBmZWF0dXJlPy5pZCA/PyBmZWF0dXJlPy5wcm9wZXJ0aWVzPy5pZDtcbiAgcmV0dXJuIHR5cGVvZiBpZCA9PT0gJ3N0cmluZycgfHwgdHlwZW9mIGlkID09PSAnbnVtYmVyJyA/IFN0cmluZyhpZCkgOiB1bmRlZmluZWQ7XG59XG5cbi8qKiBDbGFzcyBuYW1lIGFuZCBjb2xvdXIgZnJvbSBRdVBhdGgncyBgY2xhc3NpZmljYXRpb25gIChge25hbWUsIGNvbG9yfWAsIG9yIGEgYmFyZSBuYW1lKS4gKi9cbmZ1bmN0aW9uIGNsYXNzaWZpY2F0aW9uT2YoZmVhdHVyZTogR2VvSnNvbkZlYXR1cmVMaWtlKTogeyBsYWJlbDogc3RyaW5nIHwgbnVsbDsgY29sb3I6IHN0cmluZyB8IG51bGwgfSB7XG4gIGNvbnN0IGMgPSBmZWF0dXJlPy5wcm9wZXJ0aWVzPy5jbGFzc2lmaWNhdGlvbiBhcyB7IG5hbWU/OiBzdHJpbmc7IGNvbG9yPzogbnVtYmVyW10gfSB8IHN0cmluZyB8IHVuZGVmaW5lZDtcbiAgaWYgKCFjKSByZXR1cm4geyBsYWJlbDogJ0NlbGwnLCBjb2xvcjogbnVsbCB9O1xuICBpZiAodHlwZW9mIGMgPT09ICdzdHJpbmcnKSByZXR1cm4geyBsYWJlbDogYywgY29sb3I6IG51bGwgfTtcbiAgY29uc3QgY29sb3IgPVxuICAgIEFycmF5LmlzQXJyYXkoYy5jb2xvcikgJiYgYy5jb2xvci5sZW5ndGggPj0gMyA/IHJnYlRvSGV4KFtjLmNvbG9yWzBdLCBjLmNvbG9yWzFdLCBjLmNvbG9yWzJdXSkgOiBudWxsO1xuICByZXR1cm4geyBsYWJlbDogYy5uYW1lID8/IG51bGwsIGNvbG9yIH07XG59XG5cbi8qKlxuICogQSBmZWF0dXJlJ3MgcmluZ3MsIGludGVybGVhdmVkLCB3aXRob3V0IHRoZSBjbG9zaW5nIHZlcnRleDsgd2hldGhlciBpdCBpcyBhIHBvbHlsaW5lOyBhbmQgaXRzXG4gKiBwYXJ0cyBhcyByaW5nIGluZGljZXMgKGVhY2ggcGFydCdzIGV4dGVyaW9yIGZpcnN0LCB0aGVuIGl0cyBob2xlcykuXG4gKi9cbmZ1bmN0aW9uIHJpbmdzT2YoZmVhdHVyZTogR2VvSnNvbkZlYXR1cmVMaWtlKTogeyByaW5nczogRmxvYXQ2NEFycmF5W107IG9wZW46IGJvb2xlYW47IHBhcnRzOiBudW1iZXJbXVtdIH0ge1xuICBjb25zdCBnID0gZmVhdHVyZT8uZ2VvbWV0cnk7XG4gIGNvbnN0IGNvb3JkcyA9IGc/LmNvb3JkaW5hdGVzIGFzIHVua25vd247XG4gIGlmICghZyB8fCAhQXJyYXkuaXNBcnJheShjb29yZHMpKSByZXR1cm4geyByaW5nczogW10sIG9wZW46IGZhbHNlLCBwYXJ0czogW10gfTtcbiAgY29uc3QgcG9seWdvbnMgPSAobGlzdDogbnVtYmVyW11bXVtdW10pID0+IHtcbiAgICBjb25zdCByaW5nczogRmxvYXQ2NEFycmF5W10gPSBbXTtcbiAgICBjb25zdCBwYXJ0czogbnVtYmVyW11bXSA9IFtdO1xuICAgIGZvciAoY29uc3QgcG9seWdvbiBvZiBsaXN0KSB7XG4gICAgICBjb25zdCBwYXJ0OiBudW1iZXJbXSA9IFtdO1xuICAgICAgZm9yIChjb25zdCByIG9mIHBvbHlnb24pIHtcbiAgICAgICAgcGFydC5wdXNoKHJpbmdzLmxlbmd0aCk7XG4gICAgICAgIHJpbmdzLnB1c2goZmxhdFJpbmcociwgdHJ1ZSkpO1xuICAgICAgfVxuICAgICAgaWYgKHBhcnQubGVuZ3RoKSBwYXJ0cy5wdXNoKHBhcnQpO1xuICAgIH1cbiAgICByZXR1cm4geyByaW5ncywgb3BlbjogZmFsc2UsIHBhcnRzIH07XG4gIH07XG4gIHN3aXRjaCAoZy50eXBlKSB7XG4gICAgY2FzZSAnUG9seWdvbic6XG4gICAgICByZXR1cm4gcG9seWdvbnMoW2Nvb3JkcyBhcyBudW1iZXJbXVtdW11dKTtcbiAgICBjYXNlICdNdWx0aVBvbHlnb24nOlxuICAgICAgcmV0dXJuIHBvbHlnb25zKGNvb3JkcyBhcyBudW1iZXJbXVtdW11bXSk7XG4gICAgY2FzZSAnTGluZVN0cmluZyc6XG4gICAgICByZXR1cm4geyByaW5nczogW2ZsYXRSaW5nKGNvb3JkcyBhcyBudW1iZXJbXVtdLCBmYWxzZSldLCBvcGVuOiB0cnVlLCBwYXJ0czogW10gfTtcbiAgICBjYXNlICdNdWx0aUxpbmVTdHJpbmcnOlxuICAgICAgcmV0dXJuIHsgcmluZ3M6IChjb29yZHMgYXMgbnVtYmVyW11bXVtdKS5tYXAoKHIpID0+IGZsYXRSaW5nKHIsIGZhbHNlKSksIG9wZW46IHRydWUsIHBhcnRzOiBbXSB9O1xuICAgIGRlZmF1bHQ6XG4gICAgICByZXR1cm4geyByaW5nczogW10sIG9wZW46IGZhbHNlLCBwYXJ0czogW10gfTtcbiAgfVxufVxuXG4vKipcbiAqIEEgRmVhdHVyZUNvbGxlY3Rpb24gc3RyaW5nIG9mIGBmZWF0dXJlc2AgKGVhY2ggYSBmZWF0dXJlJ3MgSlNPTiksIHdpdGggdGhlIHNldCdzIGNsYXNzIGhpZXJhcmNoeVxuICogYW5kIHN0eWxlIGFzIGl0cyBgY2xhc3NIaWVyYXJjaHlgIGFuZCBgc3R5bGVgIG1lbWJlcnMgd2hlbiBpdCBoYXMgdGhlbTogd2hhdFxuICoge0BsaW5rIFJlZ2lvbkZlYXR1cmVUYWJsZS5mcm9tR2VvSnNvbn0gcmVhZHMgYmFjay5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGZlYXR1cmVDb2xsZWN0aW9uSnNvbihcbiAgZmVhdHVyZXM6IHJlYWRvbmx5IHN0cmluZ1tdLFxuICBoaWVyYXJjaHk/OiByZWFkb25seSBSZWdpb25DbGFzc05vZGVbXSxcbiAgc3R5bGU/OiBSZWdpb25Tb3VyY2VTdHlsZSxcbik6IHN0cmluZyB7XG4gIGNvbnN0IGhlYWQgPSBbJ1widHlwZVwiOlwiRmVhdHVyZUNvbGxlY3Rpb25cIiddO1xuICBpZiAoaGllcmFyY2h5Py5sZW5ndGgpIGhlYWQucHVzaChgXCJjbGFzc0hpZXJhcmNoeVwiOiR7SlNPTi5zdHJpbmdpZnkoaGllcmFyY2h5KX1gKTtcbiAgaWYgKHN0eWxlKSBoZWFkLnB1c2goYFwic3R5bGVcIjoke0pTT04uc3RyaW5naWZ5KHN0eWxlKX1gKTtcbiAgcmV0dXJuIGB7JHtoZWFkLmpvaW4oJywnKX0sXCJmZWF0dXJlc1wiOlske2ZlYXR1cmVzLmpvaW4oJywnKX1dfWA7XG59XG5cbi8qKiBBIHdlbGwtZm9ybWVkIGNsYXNzIGhpZXJhcmNoeSBmcm9tIGEgZmlsZSAoY29sb3VycyBhcyBgI3JyZ2diYmAgb3IgYFtyLCBnLCBiXWApLCBlbHNlIHVuZGVmaW5lZC4gKi9cbmV4cG9ydCBmdW5jdGlvbiByZWFkSGllcmFyY2h5KHJhdzogdW5rbm93bik6IFJlZ2lvbkNsYXNzTm9kZVtdIHwgdW5kZWZpbmVkIHtcbiAgaWYgKCFBcnJheS5pc0FycmF5KHJhdykpIHJldHVybiB1bmRlZmluZWQ7XG4gIGNvbnN0IG91dDogUmVnaW9uQ2xhc3NOb2RlW10gPSBbXTtcbiAgZm9yIChjb25zdCBuIG9mIHJhdyBhcyBBcnJheTxSZWNvcmQ8c3RyaW5nLCB1bmtub3duPj4pIHtcbiAgICBpZiAoIW4gfHwgdHlwZW9mIG4ubmFtZSAhPT0gJ3N0cmluZycpIGNvbnRpbnVlO1xuICAgIGNvbnN0IGNvbG9yID0gQXJyYXkuaXNBcnJheShuLmNvbG9yKSA/IHJnYlRvSGV4KFsrbi5jb2xvclswXSwgK24uY29sb3JbMV0sICtuLmNvbG9yWzJdXSkgOiBuLmNvbG9yO1xuICAgIG91dC5wdXNoKHtcbiAgICAgIG5hbWU6IG4ubmFtZSxcbiAgICAgIC4uLih0eXBlb2Ygbi50aXRsZSA9PT0gJ3N0cmluZycgPyB7IHRpdGxlOiBuLnRpdGxlIH0gOiB7fSksXG4gICAgICAuLi4odHlwZW9mIG4ucGFyZW50ID09PSAnc3RyaW5nJyA/IHsgcGFyZW50OiBuLnBhcmVudCB9IDoge30pLFxuICAgICAgLi4uKHR5cGVvZiBjb2xvciA9PT0gJ3N0cmluZycgPyB7IGNvbG9yIH0gOiB7fSksXG4gICAgICAuLi4odHlwZW9mIG4ub3JkZXIgPT09ICdudW1iZXInID8geyBvcmRlcjogbi5vcmRlciB9IDoge30pLFxuICAgIH0pO1xuICB9XG4gIHJldHVybiBvdXQubGVuZ3RoID8gb3V0IDogdW5kZWZpbmVkO1xufVxuXG4vKiogQSB3ZWxsLWZvcm1lZCBzdHlsZSBoaW50IGZyb20gYSBmaWxlLCBlbHNlIHVuZGVmaW5lZC4gKi9cbmV4cG9ydCBmdW5jdGlvbiByZWFkU3R5bGUocmF3OiB1bmtub3duKTogUmVnaW9uU291cmNlU3R5bGUgfCB1bmRlZmluZWQge1xuICBpZiAoIXJhdyB8fCB0eXBlb2YgcmF3ICE9PSAnb2JqZWN0JykgcmV0dXJuIHVuZGVmaW5lZDtcbiAgY29uc3QgciA9IHJhdyBhcyBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPjtcbiAgY29uc3Qgc3R5bGU6IFJlZ2lvblNvdXJjZVN0eWxlID0ge307XG4gIGlmICh0eXBlb2Ygci5maWxsT3BhY2l0eSA9PT0gJ251bWJlcicpIHN0eWxlLmZpbGxPcGFjaXR5ID0gTWF0aC5tYXgoMCwgTWF0aC5taW4oMSwgci5maWxsT3BhY2l0eSkpO1xuICBpZiAodHlwZW9mIHIuc3Ryb2tlID09PSAnc3RyaW5nJykgc3R5bGUuc3Ryb2tlID0gci5zdHJva2U7XG4gIGlmICh0eXBlb2Ygci5zdHJva2VXaWR0aCA9PT0gJ251bWJlcicgJiYgci5zdHJva2VXaWR0aCA+IDApIHN0eWxlLnN0cm9rZVdpZHRoID0gci5zdHJva2VXaWR0aDtcbiAgaWYgKHR5cGVvZiByLmxhYmVscyA9PT0gJ2Jvb2xlYW4nKSBzdHlsZS5sYWJlbHMgPSByLmxhYmVscztcbiAgaWYgKHR5cGVvZiByLmhpZ2hsaWdodCA9PT0gJ3N0cmluZycpIHN0eWxlLmhpZ2hsaWdodCA9IHIuaGlnaGxpZ2h0O1xuICByZXR1cm4gT2JqZWN0LmtleXMoc3R5bGUpLmxlbmd0aCA/IHN0eWxlIDogdW5kZWZpbmVkO1xufVxuXG5mdW5jdGlvbiBmbGF0UmluZyhwb2ludHM6IG51bWJlcltdW10sIGNsb3NlZDogYm9vbGVhbik6IEZsb2F0NjRBcnJheSB7XG4gIGxldCBuID0gcG9pbnRzPy5sZW5ndGggPz8gMDtcbiAgaWYgKGNsb3NlZCAmJiBuID4gMSkge1xuICAgIGNvbnN0IGEgPSBwb2ludHNbMF0sXG4gICAgICBiID0gcG9pbnRzW24gLSAxXTtcbiAgICBpZiAoYVswXSA9PT0gYlswXSAmJiBhWzFdID09PSBiWzFdKSBuLS07XG4gIH1cbiAgY29uc3Qgb3V0ID0gbmV3IEZsb2F0NjRBcnJheShuICogMik7XG4gIGZvciAobGV0IGkgPSAwOyBpIDwgbjsgaSsrKSB7XG4gICAgb3V0WzIgKiBpXSA9ICtwb2ludHNbaV1bMF07XG4gICAgb3V0WzIgKiBpICsgMV0gPSArcG9pbnRzW2ldWzFdO1xuICB9XG4gIHJldHVybiBvdXQ7XG59XG5cbmZ1bmN0aW9uIHJpbmdzQm94KHJpbmdzOiByZWFkb25seSBGbG9hdDY0QXJyYXlbXSk6IEJib3gge1xuICBsZXQgeDAgPSBJbmZpbml0eSxcbiAgICB5MCA9IEluZmluaXR5LFxuICAgIHgxID0gLUluZmluaXR5LFxuICAgIHkxID0gLUluZmluaXR5O1xuICBmb3IgKGNvbnN0IHIgb2YgcmluZ3MpIHtcbiAgICBmb3IgKGxldCBpID0gMDsgaSArIDEgPCByLmxlbmd0aDsgaSArPSAyKSB7XG4gICAgICBpZiAocltpXSA8IHgwKSB4MCA9IHJbaV07XG4gICAgICBpZiAocltpXSA+IHgxKSB4MSA9IHJbaV07XG4gICAgICBpZiAocltpICsgMV0gPCB5MCkgeTAgPSByW2kgKyAxXTtcbiAgICAgIGlmIChyW2kgKyAxXSA+IHkxKSB5MSA9IHJbaSArIDFdO1xuICAgIH1cbiAgfVxuICByZXR1cm4gW3gwLCB5MCwgeDEsIHkxXTtcbn1cbiJdfQ==
708
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicmVnaW9uLXRpbGVzLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vc3JjL2xpYi9yZWdpb24tc291cmNlL3JlZ2lvbi10aWxlcy50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTs7Ozs7Ozs7Ozs7Ozs7R0FjRztBQUNILE9BQU8sRUFBRSxRQUFRLEVBQUUsTUFBTSxvQkFBb0IsQ0FBQztBQUM5QyxPQUFPLEVBQUUsWUFBWSxFQUFFLE1BQU0sa0JBQWtCLENBQUM7QUFDaEQsT0FBTyxFQUFFLFNBQVMsRUFBRSxNQUFNLHVCQUF1QixDQUFDO0FBQ2xELE9BQU8sRUFBRSxTQUFTLEVBQUUsTUFBTSx5QkFBeUIsQ0FBQztBQUtwRCwrQ0FBK0M7QUFDL0MsTUFBTSxDQUFDLE1BQU0sZ0JBQWdCLEdBQUcsR0FBRyxDQUFDO0FBOEpwQzs7OztHQUlHO0FBQ0gsTUFBTSxVQUFVLGNBQWMsQ0FBQyxZQUFvQixFQUFFLE1BQWM7SUFDakUsSUFBSSxDQUFDLENBQUMsWUFBWSxHQUFHLENBQUMsQ0FBQyxJQUFJLE1BQU0sSUFBSSxDQUFDO1FBQUUsT0FBTyxDQUFDLENBQUM7SUFDakQsTUFBTSxLQUFLLEdBQUcsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsWUFBWSxDQUFDLEdBQUcsSUFBSSxDQUFDLENBQUM7SUFDekQsT0FBTyxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUMsRUFBRSxJQUFJLENBQUMsR0FBRyxDQUFDLE1BQU0sR0FBRyxDQUFDLEVBQUUsS0FBSyxDQUFDLENBQUMsQ0FBQztBQUNsRCxDQUFDO0FBRUQsd0VBQXdFO0FBQ3hFLE1BQU0sVUFBVSxjQUFjLENBQUMsS0FBYTtJQUMxQyxPQUFPLEtBQUssSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsS0FBSyxHQUFHLENBQUMsQ0FBQyxDQUFDO0FBQzNDLENBQUM7QUFFRCxrR0FBa0c7QUFDbEcsTUFBTSxVQUFVLGNBQWMsQ0FBQyxLQUFhO0lBQzFDLE9BQU8sS0FBSyxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLElBQUksS0FBSyxDQUFDO0FBQ3JDLENBQUM7QUFFRCw2Q0FBNkM7QUFDN0MsTUFBTSxVQUFVLGFBQWEsQ0FBQyxLQUFhLEVBQUUsUUFBUSxHQUFHLGdCQUFnQjtJQUN0RSxPQUFPLFFBQVEsR0FBRyxDQUFDLElBQUksS0FBSyxDQUFDO0FBQy9CLENBQUM7QUFFRDs7O0dBR0c7QUFDSCxNQUFNLFVBQVUsaUJBQWlCLENBQy9CLElBQVUsRUFDVixLQUFhLEVBQ2IsUUFBZ0IsRUFDaEIsTUFBbUIsRUFDbkIsS0FBSyxHQUFHLFFBQVE7SUFFaEIsSUFBSSxDQUFDLE1BQU07UUFBRSxPQUFPLEVBQUUsQ0FBQztJQUN2QixNQUFNLEVBQUUsR0FBRyxJQUFJLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsRUFBRSxNQUFNLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztJQUN4QyxNQUFNLEVBQUUsR0FBRyxJQUFJLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsRUFBRSxNQUFNLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztJQUN4QyxNQUFNLEVBQUUsR0FBRyxJQUFJLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsRUFBRSxNQUFNLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztJQUN4QyxNQUFNLEVBQUUsR0FBRyxJQUFJLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsRUFBRSxNQUFNLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztJQUN4QyxJQUFJLEVBQUUsR0FBRyxFQUFFLElBQUksRUFBRSxHQUFHLEVBQUU7UUFBRSxPQUFPLEVBQUUsQ0FBQztJQUNsQyxNQUFNLElBQUksR0FBRyxhQUFhLENBQUMsS0FBSyxFQUFFLFFBQVEsQ0FBQyxDQUFDO0lBQzVDLE1BQU0sR0FBRyxHQUFHLElBQUksQ0FBQyxLQUFLLENBQUMsRUFBRSxHQUFHLElBQUksQ0FBQyxDQUFDO0lBQ2xDLE1BQU0sR0FBRyxHQUFHLElBQUksQ0FBQyxLQUFLLENBQUMsRUFBRSxHQUFHLElBQUksQ0FBQyxDQUFDO0lBQ2xDLE1BQU0sR0FBRyxHQUFHLElBQUksQ0FBQyxLQUFLLENBQUMsRUFBRSxHQUFHLElBQUksQ0FBQyxDQUFDO0lBQ2xDLE1BQU0sR0FBRyxHQUFHLElBQUksQ0FBQyxLQUFLLENBQUMsRUFBRSxHQUFHLElBQUksQ0FBQyxDQUFDO0lBQ2xDLE1BQU0sRUFBRSxHQUFHLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxHQUFHLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsR0FBRyxJQUFJLENBQUM7SUFDMUMsTUFBTSxFQUFFLEdBQUcsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLEdBQUcsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxHQUFHLElBQUksQ0FBQztJQUMxQyxNQUFNLEdBQUcsR0FBb0IsRUFBRSxDQUFDO0lBQ2hDLEtBQUssSUFBSSxFQUFFLEdBQUcsR0FBRyxFQUFFLEVBQUUsSUFBSSxHQUFHLEVBQUUsRUFBRSxFQUFFLEVBQUUsQ0FBQztRQUNuQyxLQUFLLElBQUksRUFBRSxHQUFHLEdBQUcsRUFBRSxFQUFFLElBQUksR0FBRyxFQUFFLEVBQUUsRUFBRTtZQUFFLEdBQUcsQ0FBQyxJQUFJLENBQUMsRUFBRSxLQUFLLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxDQUFDLENBQUM7SUFDbEUsQ0FBQztJQUNELE1BQU0sQ0FBQyxHQUFHLENBQUMsQ0FBZ0IsRUFBRSxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxHQUFHLEdBQUcsR0FBRyxFQUFFLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsRUFBRSxHQUFHLEdBQUcsR0FBRyxFQUFFLENBQUMsSUFBSSxDQUFDLENBQUM7SUFDaEYsR0FBRyxDQUFDLElBQUksQ0FB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QUFDO1lBQ2hELElBQUksQ0FBQyxLQUFLLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxDQUFDO1lBQ3ZCLElBQUksQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDO1lBQ3JCLElBQUksQ0FBQyxLQUFLLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxDQUFDO1lBQ3ZCLE1BQU0sR0FBRyxHQUFHLFFBQVEsQ0FBQyxLQUFLLENBQUMsQ0FBQztZQUM1QixJQUFJLENBQUMsS0FBSyxDQUFDLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQztZQUNyQixJQUFJLEtBQUssQ0FBQyxNQUFNLEVBQUUsQ0FBQztnQkFDakIsRUFBRSxHQUFHLElBQUksQ0FBQyxHQUFHLENBQUMsRUFBRSxFQUFFLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO2dCQUMxQixFQUFFLEdBQUcsSUFBSSxDQUFDLEdBQUcsQ0FBQyxFQUFFLEVBQUUsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7Z0JBQzFCLEVBQUUsR0FBRyxJQUFJLENBQUMsR0FBRyxDQUFDLEVBQUUsRUFBRSxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztnQkFDMUIsRUFBRSxHQUFHLElBQUksQ0FBQyxHQUFHLENBQUMsRUFBRSxFQUFFLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO1lBQzVCLENBQUM7UUFDSCxDQUFDLENBQUMsQ0FBQztRQUNILElBQUksQ0FBQyxNQUFNLEdBQUcsRUFBRSxJQUFJLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDO1FBQ2pELE1BQU0sTUFBTSxHQUFHLElBQUksQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsRUFBRSxJQUFJLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxFQUFFLElBQUks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T0FBTyxHQUFHLElBQUksR0FBRyxDQUFDLEtBQUssQ0FBQyxPQUFPLElBQUksRUFBRSxDQUFDLENBQUM7UUFDN0MsTUFBTSxPQUFPLEdBQUcsS0FBSyxDQUFDLE9BQU8sQ0FBQyxDQUFDLENBQUMsSUFBSSxHQUFHLENBQUMsS0FBSyxDQUFDLE9BQU8sQ0FBQyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUM7UUFDOUQsTUFBTSxNQUFNLEdBQUcsS0FBSyxDQUFDLEtBQUssRUFBRSxJQUFJLEVBQUUsQ0FBQyxXQUFXLEVBQUUsSUFBSSxJQUFJLENBQUM7UUFDekQsTUFBTSxJQUFJLEdBQXFCLEVBQUUsQ0FBQztRQUNsQyxJQUFJLEtBQUssR0FBRyxDQUFDLENBQUM7UUFDZCxLQUFLLElBQUksQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLEdBQUcsSUFBSSxDQUFDLEdBQUcsQ0FBQyxNQUFNLEVBQUUsQ0FBQyxFQUFFLEVBQUUsQ0FBQztZQUN6QyxJQUFJLElBQUksQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDLEtBQUssQ0FBQyxJQUFJLE9BQU8sQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQztnQkFBRSxTQUFTO1lBQy9ELElBQUksTUFBTSxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQyxJQUFJLEVBQUUsQ0FBQyxDQUFDLFdBQVcsRUFBRSxDQUFDLFFBQVEsQ0FBQyxNQUFNLENBQUM7Z0JBQUUsU0FBUztZQUMvRSxJQUFJLE9BQU8sSUFBSSxDQUFDLE9BQU8sQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUMsSUFBSSxFQUFFLENBQUM7Z0JBQUUsU0FBUztZQUM1RCxJQUFJLEtBQUssSUFBSSxLQUFLLENBQUMsTUFBTSxJQUFJLElBQUksQ0FBQyxNQUFNLEdBQUcsS0FBSyxDQUFDLEtBQUssRUFBRSxDQUFDO2dCQUN2RCxJQUFJLENBQUMsSUFBSSxDQUFDO29CQUNSLEVBQUUsRUFBRSxJQUFJLENBQUMs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RyxJQUFJLENBQUMsR0FBRyxDQUFDLE1BQU0sRUFBRSxDQUFDLEVBQUUsRUFBRSxDQUFDO1lBQ3pDLElBQUksSUFBSSxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUMsS0FBSyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDLE1BQU07Z0JBQUUsU0FBUztZQUM1RCxNQUFNLENBQUMsR0FBRyxJQUFJLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDO1lBQ3hCLElBQUksSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxTQUFTO2dCQUFFLFNBQVM7WUFDN0QsTUFBTSxHQUFHLEdBQUcsSUFBSSxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsSUFBSSxDQUFDLEVBQ2pDLEdBQUcsR0FBRyxJQUFJLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxJQUFJLENBQUMsRUFDN0IsR0FBRyxHQUFHLElBQUksQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLElBQUksQ0FBQyxFQUM3QixHQUFHLEdBQUcsSUFBSSxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsSUFBSSxDQUFDLENBQUM7WUFDaEMsNkNBQTZDO1lBQzdDLElBQUksQ0FBQyxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLENBQUMsQ0FBQyxJQUFJLENBQUMsTUFBTSxDQUFDLEtBQUssQ0FBQztnQkFBRSxTQUFTO1lBQ3RELE1BQU0sS0FBSyxHQUFHLENBQUMsR0FBRyxHQUFHLEdBQUcsR0FBRyxDQUFDLENBQUMsR0FBRyxDQUFDLEdBQUcsR0FBRyxHQUFHLEdBQUcsQ0FBQyxDQUFDLENBQUM7WUFDaEQsSUFBSSxDQUFDLENB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dGlsZWQgcmVnaW9uIHNvdXJjZTogYSBsYXJnZSBHZW9KU09OIHJlZ2lvbiBzZXQgY3V0IGludG8gdGlsZXMgcGVyIGxldmVsXG4gKiBvZiBkZXRhaWwsIHRoZSBvdXRsaW5lcyBzaW1wbGlmaWVkIHBlciBsZXZlbCwgc28gYSB2aWV3IG9ubHkgZXZlciBob2xkcyBhbmQgZHJhd3Mgd2hhdCBpcyBvblxuICogc2NyZWVuIGF0IHRoZSBkZXRhaWwgdGhlIHpvb20gY2FuIHNob3cuXG4gKlxuICogTGV2ZWxzOiBsZXZlbCAwIGlzIGV4YWN0OyBhIGxldmVsLWsgdGlsZSBjb3ZlcnMgYHRpbGVTaXplIMK3IDLhtY9gIGltYWdlIHBpeGVscyBhbmQgaXRzIG91dGxpbmVzXG4gKiBhcmUgc2ltcGxpZmllZCAoRG91Z2xhc+KAk1BldWNrZXIpIHRvIGAy4bWP4oG7wrlgIGltYWdlIHBpeGVscyDigJQgaGFsZiB0byBvbmUgc2NyZWVuIHBpeGVsIGF0IHRoZSB6b29tc1xuICogdGhhdCBwaWNrIHRoYXQgbGV2ZWwgKHtAbGluayByZWdpb25MZXZlbEZvcn0pLiBBIGZlYXR1cmUgdW5kZXIgYDLhtY9gIGltYWdlIHBpeGVscyAob25lIHRvIHR3b1xuICogc2NyZWVuIHBpeGVscyB0aGVyZSkgaXMgbGVmdCBvdXQgb2YgdGhlIGxldmVsLiBBIHRpbGUgaG9sZHMgdGhlIFdIT0xFIHNpbXBsaWZpZWQgZmVhdHVyZSAobm90XG4gKiBjbGlwcGVkKSBmb3IgZXZlcnkgZmVhdHVyZSB3aG9zZSBib3ggbWVldHMgaXQsIHNvIGEgdmlldyBkZS1kdXBsaWNhdGVzIGZlYXR1cmVzIGJ5IGlkLCBhbmQgYXRcbiAqIGxldmVsIDAgdGhlIHRpbGVzIGluIHZpZXcgaG9sZCB0aGUgZXhhY3Qgb3V0bGluZSBvZiBldmVyeXRoaW5nIHZpc2libGUuXG4gKlxuICogTm8gRE9NLCBubyBBbmd1bGFyOiB0aGUgc2FtZSBjb2RlIHJ1bnMgaW4gdGhlIHJlZ2lvbi1zb3VyY2Ugd29ya2VyIGFuZCwgd2hlcmUgd29ya2VycyBkbyBub3RcbiAqIGV4aXN0LCBvbiB0aGUgbWFpbiB0aHJlYWQuXG4gKi9cbmltcG9ydCB7IHJnYlRvSGV4IH0gZnJvbSAnLi4vY29udHJhY3RzL2NvbG9yJztcbmltcG9ydCB7IHNpbXBsaWZ5UmluZyB9IGZyb20gJy4uL2dlb21ldHJ5L3JpbmcnO1xuaW1wb3J0IHsgcG9seWxhYmVsIH0gZnJvbSAnLi4vZ2VvbWV0cnkvcG9seWxhYmVsJztcbmltcG9ydCB7IHJpbmdzQXJlYSB9IGZyb20gJy4uL2dlb21ldHJ5L3JlY29uc3RydWN0JztcblxuLyoqIEFuIGF4aXMtYWxpZ25lZCBib3ggYFt4MCwgeTAsIHgxLCB5MV1gIGluIGltYWdlIHBpeGVscy4gKi9cbmV4cG9ydCB0eXBlIEJib3ggPSBbbnVtYmVyLCBudW1iZXIsIG51bWJlciwgbnVtYmVyXTtcblxuLyoqIEVkZ2Ugb2YgYSBsZXZlbC0wIHRpbGUsIGluIGltYWdlIHBpeGVscy4gKi9cbmV4cG9ydCBjb25zdCBSRUdJT05fVElMRV9TSVpFID0gNTEyO1xuXG4vKipcbiAqIE9uZSBjbGFzcyBvZiBhIGNsYXNzIGhpZXJhcmNoeSAoZS5nLiBhIGJyYWluLWF0bGFzIG9udG9sb2d5KTogdGhlIGNsYXNzIG5hbWUgdGhlIGZlYXR1cmVzIHVzZSxcbiAqIGl0cyBsb25nIG5hbWUsIGl0cyBwYXJlbnQgY2xhc3MgYW5kIGl0cyBjb2xvdXIuIEEgcmVnaW9uIHNldCBtYXkgY2Fycnkgb25lIChhIEdlb0pTT05cbiAqIEZlYXR1cmVDb2xsZWN0aW9uJ3MgYGNsYXNzSGllcmFyY2h5YCBtZW1iZXIpOyB0aGUgUmVnaW9uIEVkaXRvciB0aGVuIGxpc3RzIHRoZSBzZXQgYXMgYSB0cmVlLlxuICovXG5leHBvcnQgaW50ZXJmYWNlIFJlZ2lvbkNsYXNzTm9kZSB7XG4gIC8qKiBUaGUgY2xhc3MgbmFtZSwgYXMgZmVhdHVyZXMgdXNlIGl0IChgY2xhc3NpZmljYXRpb24ubmFtZWApOiBhbiBhdGxhcyBhY3JvbnltLCBzYXkuICovXG4gIG5hbWU6IHN0cmluZztcbiAgLyoqIFRoZSBsb25nIG5hbWUsIGUuZy4gXCJTb21hdG9tb3RvciBhcmVhcywgTGF5ZXIgNVwiLiAqL1xuICB0aXRsZT86IHN0cmluZztcbiAgLyoqIFRoZSBwYXJlbnQgY2xhc3MncyBuYW1lOyBhYnNlbnQgZm9yIGEgcm9vdC4gKi9cbiAgcGFyZW50Pzogc3RyaW5nIHwgbnVsbDtcbiAgLyoqIGAjcnJnZ2JiYC4gKi9cbiAgY29sb3I/OiBzdHJpbmc7XG4gIC8qKiBQb3NpdGlvbiBhbW9uZyBpdHMgc2libGluZ3MgKGFuIGF0bGFzJ3MgZ3JhcGggb3JkZXIpOyBmaWxlIG9yZGVyIHdpdGhvdXQgb25lLiAqL1xuICBvcmRlcj86IG51bWJlcjtcbn1cblxuLyoqXG4gKiBIb3cgYSByZWdpb24gc2V0IHdhbnRzIHRvIGJlIGRyYXduLCBhIGhpbnQgdGhlIHZpZXdlciBhcHBsaWVzIHdoZW4gdGhlIHNldCBvcGVucyAoYSBHZW9KU09OXG4gKiBGZWF0dXJlQ29sbGVjdGlvbidzIGBzdHlsZWAgbWVtYmVyKTogYW4gYXRsYXMgZmlsbHMgaXRzIHN0cnVjdHVyZXMgYW5kIGxhYmVscyB0aGVtLlxuICovXG5leHBvcnQgaW50ZXJmYWNlIFJlZ2lvblNvdXJjZVN0eWxlIHtcbiAgLyoqIEZpbGwgcmVnaW9ucyBpbiB0aGVpciBjb2xvdXIgYXQgdGhpcyBvcGFjaXR5ICgwID0gb3V0bGluZXMgb25seSkuICovXG4gIGZpbGxPcGFjaXR5PzogbnVtYmVyO1xuICAvKiogT3V0bGluZSBjb2xvdXIgd2hlbiBmaWxsZWQgKGRlZmF1bHQ6IHRoZSByZWdpb24ncyBjb2xvdXIpLiAqL1xuICBzdHJva2U/OiBzdHJpbmc7XG4gIC8qKiBPdXRsaW5lIHdpZHRoIGluIHNjcmVlbiBweC4gKi9cbiAgc3Ryb2tlV2lkdGg/OiBudW1iZXI7XG4gIC8qKiBTaG93IGNsYXNzIGxhYmVscyBpbnNpZGUgdGhlIHJlZ2lvbnMuICovXG4gIGxhYmVscz86IGJvb2xlYW47XG4gIC8qKiBGaWxsIGNvbG91ciBvZiBzZWxlY3RlZCByZWdpb25zLiAqL1xuICBoaWdobGlnaHQ/OiBzdHJpbmc7XG59XG5cbi8qKiBXaGF0IGEgcmVnaW9uIHNvdXJjZSBob2xkcywga25vd24gb25jZSBpdCBpcyBvcGVuLiAqL1xuZXhwb3J0IGludGVyZmFjZSBSZWdpb25Tb3VyY2VJbmZvIHtcbiAgLyoqIEZlYXR1cmVzIGluIHRoZSBzb3VyY2UsIG92ZXIgZXZlcnkgcGxhbmUuICovXG4gIGZlYXR1cmVDb3VudDogbnVtYmVyO1xuICAvKiogVGhlIGJveCBhcm91bmQgZXZlcnkgZmVhdHVyZSdzIGdlb21ldHJ5OyBudWxsIHdoZW4gbm9uZSBoYXMgYW55LiAqL1xuICBib3VuZHM6IEJib3ggfCBudWxsO1xuICAvKiogRWRnZSBvZiBhIGxldmVsLTAgdGlsZSwgaW4gaW1hZ2UgcGl4ZWxzLiAqL1xuICB0aWxlU2l6ZTogbnVtYmVyO1xuICAvKiogTnVtYmVyIG9mIGxldmVsczsgdGhlIGxhc3Qgb25lJ3MgdGlsZXMgY292ZXIge0BsaW5rIGJvdW5kc30gaW4gYSBmZXcgdGlsZXMuICovXG4gIGxldmVsczogbnVtYmVyO1xuICAvKiogVGhlIHogcGxhbmVzIGZlYXR1cmVzIGFyZSBvbiAoUXVQYXRoJ3MgYGdlb21ldHJ5LnBsYW5lLnpgLCAwIHdpdGhvdXQgb25lKSwgYXNjZW5kaW5nLiAqL1xuICBwbGFuZXM6IG51bWJlcltdO1xuICAvKiogVGhlIGNvbG91ciB0aGUgZmlsZSBnaXZlcyBlYWNoIGNsYXNzIChpdHMgZmlyc3QgZmVhdHVyZSdzKSwgYnkgY2xhc3MgbmFtZS4gKi9cbiAgY2xhc3NDb2xvcnM6IFJlY29yZDxzdHJpbmcsIHN0cmluZz47XG4gIC8qKiBUaGUgc2V0J3MgY2xhc3MgaGllcmFyY2h5LCB3aGVuIGl0IGhhcyBvbmUuICovXG4gIGhpZXJhcmNoeT86IFJlZ2lvbkNsYXNzTm9kZVtdO1xuICAvKiogSG93IHRoZSBzZXQgd2FudHMgdG8gYmUgZHJhd24sIHdoZW4gaXQgc2F5cy4gKi9cbiAgc3R5bGU/OiBSZWdpb25Tb3VyY2VTdHlsZTtcbiAgLyoqXG4gICAqIFdoZXJlIGVhY2ggcGxhbmUgaXMsIHdoZW4gdGhlIHNldCBzYXlzOiBgc2xpY2VaW2ldYCB0aGUgeiBvZiBwbGFuZSBgcGxhbmVzW2ldYCwgaW4gdGhlIHVuaXRzIG9mXG4gICAqIHRoZSBjb29yZGluYXRlcyBpdHMgb3V0bGluZXMgYXJlIGluIChhIDNEIHNlZ21lbnRhdGlvbidzIHBsYW5lcywgaW4gaXRzIG9ic2VydmF0aW9ucycgdW5pdHMpLlxuICAgKiBQbGFuZXMgc3RheSBvcmRpbmFscyBmb3IgYWRkcmVzc2luZzsgdGhlc2UgcGxhY2UgdGhlbSAoc2VlIHRoZSBzcGF0aWFsIDNEIHZpZXcpLlxuICAgKi9cbiAgc2xpY2VaPzogbnVtYmVyW107XG4gIC8qKiBNaWNyb25zIHBlciB1bml0IG9mIHRoZSBzZXQncyBjb29yZGluYXRlcywgd2hlbiBpdCBzYXlzLiAqL1xuICBtaWNyb25zUGVyVW5pdD86IG51bWJlcjtcbn1cblxuLyoqIE9uZSBmZWF0dXJlIGFzIGEgdGlsZSBjYXJyaWVzIGl0OiBpZGVudGl0eSwgY2xhc3MgYW5kIG91dGxpbmUgYXQgdGhlIHRpbGUncyBsZXZlbC4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgVGlsZUZlYXR1cmUge1xuICBpZDogc3RyaW5nO1xuICAvKiogVGhlIGNsYXNzIG5hbWUuICovXG4gIGxhYmVsOiBzdHJpbmcgfCBudWxsO1xuICAvKiogVGhlIGZlYXR1cmUncyBvd24gY29sb3VyIChgI3JyZ2diYmApLCBmcm9tIGl0cyBjbGFzc2lmaWNhdGlvbi4gKi9cbiAgY29sb3I6IHN0cmluZyB8IG51bGw7XG4gIC8qKiBUaGUgYm94IGFyb3VuZCB0aGUgZXhhY3QgZ2VvbWV0cnkuICovXG4gIGJib3g6IEJib3g7XG4gIC8qKiBSaW5ncyBhcyBpbnRlcmxlYXZlZCBgeCwgeWAgKG5vIHJlcGVhdGVkIGNsb3NpbmcgdmVydGV4KTogZXh0ZXJpb3JzIGFuZCBob2xlcyBvZiBldmVyeVxuICAgKiAgcGFydCwgZHJhd24gYW5kIGhpdC10ZXN0ZWQgZXZlbi1vZGQuIEZvciBhbiBvcGVuIGZlYXR1cmUsIGl0cyBwb2x5bGluZXMuICovXG4gIHJpbmdzOiBGbG9hdDMyQXJyYXlbXTtcbiAgLyoqIEEgcG9seWxpbmUgKExpbmVTdHJpbmcpIHJhdGhlciB0aGFuIGFuIGFyZWEuICovXG4gIG9wZW46IGJvb2xlYW47XG4gIC8qKlxuICAgKiBXaGVyZSB0byBsYWJlbCB0aGUgZmVhdHVyZSwgcGVyIHBhcnQgYmlnIGVub3VnaDogYHgsIHksIHJvb21gIHRyaXBsZXMsIGByb29tYCB0aGUgZGlzdGFuY2VcbiAgICogZnJvbSB0aGUgcG9pbnQgdG8gdGhlIHBhcnQncyBuZWFyZXN0IGVkZ2UgKGltYWdlIHB4KSwgc28gYSBsYWJlbCBzaG93cyBvbmNlIGl0IGZpdHMuXG4gICAqL1xuICBsYWJlbHM/OiBGbG9hdDMyQXJyYXk7XG59XG5cbi8qKlxuICogQSBjbGFzcydzIG91dGxpbmVzIG9uIG9uZSBwbGFuZTogcmluZ3MgYXMgaW50ZXJsZWF2ZWQgYHgsIHlgIGltYWdlIHB4IChob2xlcyBpbmNsdWRlZCksIGFuZCBpdHNcbiAqIG9wZW4gZmVhdHVyZXMnIHBvbHlsaW5lcywgbGlrZXdpc2UgKGFic2VudCBmcm9tIGEgc2VydmVyIHRoYXQgcHJlZGF0ZXMgdGhlbSkuIFJlYWQgZm9yIGV2ZXJ5XG4gKiBjbGFzcyBhdCBvbmNlLCBlYWNoIHJpbmcncyBhbmQgbGluZSdzIGNsYXNzIGNvbWVzIHdpdGggaXQgKGByaW5nTGFiZWxzYCwgYGxpbmVMYWJlbHNgKS5cbiAqL1xuZXhwb3J0IGludGVyZmFjZSBDbGFzc091dGxpbmVzIHtcbiAgejogbnVtYmVyO1xuICByaW5nczogRmxvYXQzMkFycmF5W107XG4gIC8qKlxuICAgKiBUaGUgZmVhdHVyZSBlYWNoIHJpbmcgaXMgcGFydCBvZiAoc2VlIFNsaWNlT3V0bGluZXMucmluZ0dyb3Vwcyk6IGEgZmVhdHVyZSdzIHJpbmdzIGZpbGxcbiAgICogZXZlbi1vZGQsIHRoZSBmZWF0dXJlcyBhcyB0aGVpciB1bmlvbi4gQWJzZW50IGZyb20gYSBzZXJ2ZXIgdGhhdCBwcmVkYXRlcyB0aGVtLlxuICAgKi9cbiAgcmluZ0dyb3Vwcz86IG51bWJlcltdO1xuICBsaW5lcz86IEZsb2F0MzJBcnJheVtdO1xuICByaW5nTGFiZWxzPzogc3RyaW5nW107XG4gIGxpbmVMYWJlbHM/OiBzdHJpbmdbXTtcbn1cblxuLyoqIE9uZSB0aWxlIG9mIG9uZSBsZXZlbCBvZiBvbmUgcGxhbmUuICovXG5leHBvcnQgaW50ZXJmYWNlIFJlZ2lvblRpbGUge1xuICB6OiBudW1iZXI7XG4gIGxldmVsOiBudW1iZXI7XG4gIGd4OiBudW1iZXI7XG4gIGd5OiBudW1iZXI7XG4gIGZlYXR1cmVzOiBUaWxlRmVhdHVyZVtdO1xufVxuXG4vKiogQSB0aWxlJ3MgYWRkcmVzcy4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgUmVnaW9uVGlsZUtleSB7XG4gIGxldmVsOiBudW1iZXI7XG4gIGd4OiBudW1iZXI7XG4gIGd5OiBudW1iZXI7XG59XG5cbi8qKiBPbmUgcm93IG9mIGEgc291cmNlJ3MgZmVhdHVyZSBpbmRleCAodGhlIFJlZ2lvbiBFZGl0b3IncyB0YWJsZSkuICovXG5leHBvcnQgaW50ZXJmYWNlIFJlZ2lvbkluZGV4Um93IHtcbiAgaWQ6IHN0cmluZztcbiAgbGFiZWw6IHN0cmluZyB8IG51bGw7XG4gIGNvbG9yOiBzdHJpbmcgfCBudWxsO1xuICBiYm94OiBCYm94O1xuICAvKiogVGhlIGFyZWEgaW5zaWRlIHRoZSBleGFjdCBvdXRsaW5lIChob2xlcyBsZWZ0IG91dCksIGltYWdlIHB4wrI7IDAgZm9yIGEgcG9seWxpbmUuIEFic2VudCBmcm9tIGFcbiAgICogIHNlcnZlciB0aGF0IHByZWRhdGVzIGl0LiAqL1xuICBhcmVhPzogbnVtYmVyO1xufVxuXG4vKiogQSBwYWdlIG9mIGEgcGxhbmUncyBmZWF0dXJlIGluZGV4LiAqL1xuZXhwb3J0IGludGVyZmFjZSBSZWdpb25JbmRleFBhZ2Uge1xuICAvKiogUm93cyBtYXRjaGluZyB0aGUgcXVlcnksIG92ZXIgdGhlIHdob2xlIHBsYW5lLiAqL1xuICB0b3RhbDogbnVtYmVyO1xuICByb3dzOiBSZWdpb25JbmRleFJvd1tdO1xufVxuXG4vKiogV2hpY2ggcm93cyBhIHBhZ2Ugb2YgdGhlIGluZGV4IGhvbGRzLiAqL1xuZXhwb3J0IGludGVyZmFjZSBSZWdpb25JbmRleFF1ZXJ5IHtcbiAgb2Zmc2V0OiBudW1iZXI7XG4gIGxpbWl0OiBudW1iZXI7XG4gIC8qKiBPbmx5IHJvd3Mgd2hvc2UgY2xhc3MgbmFtZSBjb250YWlucyB0aGlzIChjYXNlLWluc2Vuc2l0aXZlKS4gKi9cbiAgbGFiZWw/OiBzdHJpbmc7XG4gIC8qKiBMZWF2ZSB0aGVzZSBpZHMgb3V0ICh0YWtlbiBpbnRvIHRoZSB3b3JraW5nIHNldCwgb3IgZGVsZXRlZCkuICovXG4gIGV4Y2x1ZGU/OiByZWFkb25seSBzdHJpbmdbXTtcbiAgLyoqIE9ubHkgcm93cyBvZiBleGFjdGx5IHRoZXNlIGNsYXNzZXMuICovXG4gIGNsYXNzZXM/OiByZWFkb25seSBzdHJpbmdbXTtcbn1cblxuLyoqIFRoZSBwYXJ0cyBvZiBhIEdlb0pTT04gZmVhdHVyZSB0aGUgdGlsZXIgcmVhZHMuIFBhcnNlZCBmcm9tIGEgZmlsZTogbm90aGluZyBpcyBndWFyYW50ZWVkLiAqL1xuZXhwb3J0IGludGVyZmFjZSBHZW9Kc29uRmVhdHVyZUxpa2Uge1xuICB0eXBlPzogc3RyaW5nO1xuICBpZD86IHN0cmluZyB8IG51bWJlcjtcbiAgZ2VvbWV0cnk/OiB7IHR5cGU/OiBzdHJpbmc7IGNvb3JkaW5hdGVzPzogdW5rbm93bjsgcGxhbmU/OiB7IHo/OiBudW1iZXIgfSB9IHwgbnVsbDtcbiAgcHJvcGVydGllcz86IHsgaWQ/OiBzdHJpbmcgfCBudW1iZXI7IGNsYXNzaWZpY2F0aW9uPzogdW5rbm93biB9ICYgUmVjb3JkPHN0cmluZywgdW5rbm93bj47XG59XG5cbi8qKlxuICogVGhlIGxldmVsIHdob3NlIHRpbGVzIHN1aXQgYSB6b29tIG9mIGBweFBlckltYWdlUHhgIHNjcmVlbiBwaXhlbHMgcGVyIGltYWdlIHBpeGVsOiBleGFjdCAoMClcbiAqIGF0IDE6MSBhbmQgY2xvc2VyLCBlbHNlIGxldmVsIGsgZm9yIHpvb21zIGluIFsy4oG74bWPLCAywrnigbvhtY8pLCB3aGVyZSBpdHMgdG9sZXJhbmNlIGlzIGhhbGYgdG8gb25lXG4gKiBzY3JlZW4gcGl4ZWwgYW5kIHRoZSBmZWF0dXJlcyBpdCBsZWF2ZXMgb3V0IGFyZSB1bmRlciBvbmUgb3IgdHdvLlxuICovXG5leHBvcnQgZnVuY3Rpb24gcmVnaW9uTGV2ZWxGb3IocHhQZXJJbWFnZVB4OiBudW1iZXIsIGxldmVsczogbnVtYmVyKTogbnVtYmVyIHtcbiAgaWYgKCEocHhQZXJJbWFnZVB4ID4gMCkgfHwgbGV2ZWxzIDw9IDEpIHJldHVybiAwO1xuICBjb25zdCBsZXZlbCA9IE1hdGguY2VpbCgtTWF0aC5sb2cyKHB4UGVySW1hZ2VQeCkgLSAxZS05KTtcbiAgcmV0dXJuIE1hdGgubWF4KDAsIE1hdGgubWluKGxldmVscyAtIDEsIGxldmVsKSk7XG59XG5cbi8qKiBTaW1wbGlmaWNhdGlvbiB0b2xlcmFuY2Ugb2YgYSBsZXZlbCwgaW4gaW1hZ2UgcGl4ZWxzICgwID0gZXhhY3QpLiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGxldmVsVG9sZXJhbmNlKGxldmVsOiBudW1iZXIpOiBudW1iZXIge1xuICByZXR1cm4gbGV2ZWwgPD0gMCA/IDAgOiAyICoqIChsZXZlbCAtIDEpO1xufVxuXG4vKiogRmVhdHVyZXMgc21hbGxlciB0aGFuIHRoaXMgKHRoZWlyIGJveCdzIGxvbmdlciBzaWRlLCBpbWFnZSBwaXhlbHMpIGFyZSBsZWZ0IG91dCBvZiBhIGxldmVsLiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGxldmVsTWluRXh0ZW50KGxldmVsOiBudW1iZXIpOiBudW1iZXIge1xuICByZXR1cm4gbGV2ZWwgPD0gMCA/IDAgOiAyICoqIGxldmVsO1xufVxuXG4vKiogVGlsZSBlZGdlIG9mIGEgbGV2ZWwsIGluIGltYWdlIHBpeGVscy4gKi9cbmV4cG9ydCBmdW5jdGlvbiBsZXZlbFRpbGVTaXplKGxldmVsOiBudW1iZXIsIHRpbGVTaXplID0gUkVHSU9OX1RJTEVfU0laRSk6IG51bWJlciB7XG4gIHJldHVybiB0aWxlU2l6ZSAqIDIgKiogbGV2ZWw7XG59XG5cbi8qKlxuICogVGlsZXMgb2YgYGxldmVsYCB0aGF0IG1lZXQgYHJlY3RgLCBjbGlwcGVkIHRvIGBib3VuZHNgIChub25lIHBhc3QgdGhlIGRhdGEpLCBvcmRlcmVkIGZyb20gdGhlXG4gKiByZWN0YW5nbGUncyBjZW50cmUgb3V0d2FyZCBzbyB0aGUgbWlkZGxlIG9mIHRoZSBzY3JlZW4gZmlsbHMgZmlyc3QuIEF0IG1vc3QgYGxpbWl0YC5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHJlZ2lvblRpbGVzSW5SZWN0KFxuICByZWN0OiBCYm94LFxuICBsZXZlbDogbnVtYmVyLFxuICB0aWxlU2l6ZTogbnVtYmVyLFxuICBib3VuZHM6IEJib3ggfCBudWxsLFxuICBsaW1pdCA9IEluZmluaXR5LFxuKTogUmVnaW9uVGlsZUtleVtdIHtcbiAgaWYgKCFib3VuZHMpIHJldHVybiBbXTtcbiAgY29uc3QgeDAgPSBNYXRoLm1heChyZWN0WzBdLCBib3VuZHNbMF0pO1xuICBjb25zdCB5MCA9IE1hdGgubWF4KHJlY3RbMV0sIGJvdW5kc1sxXSk7XG4gIGNvbnN0IHgxID0gTWF0aC5taW4ocmVjdFsyXSwgYm91bmRzWzJdKTtcbiAgY29uc3QgeTEgPSBNYXRoLm1pbihyZWN0WzNdLCBib3VuZHNbM10pO1xuICBpZiAoeDEgPCB4MCB8fCB5MSA8IHkwKSByZXR1cm4gW107XG4gIGNvbnN0IHNpemUgPSBsZXZlbFRpbGVTaXplKGxldmVsLCB0aWxlU2l6ZSk7XG4gIGNvbnN0IGd4MCA9IE1hdGguZmxvb3IoeDAgLyBzaXplKTtcbiAgY29uc3QgZ3kwID0gTWF0aC5mbG9vcih5MCAvIHNpemUpO1xuICBjb25zdCBneDEgPSBNYXRoLmZsb29yKHgxIC8gc2l6ZSk7XG4gIGNvbnN0IGd5MSA9IE1hdGguZmxvb3IoeTEgLyBzaXplKTtcbiAgY29uc3QgY3ggPSAocmVjdFswXSArIHJlY3RbMl0pIC8gMiAvIHNpemU7XG4gIGNvbnN0IGN5ID0gKHJlY3RbMV0gKyByZWN0WzNdKSAvIDIgLyBzaXplO1xuICBjb25zdCBvdXQ6IFJlZ2lvblRpbGVLZXlbXSA9IFtdO1xuICBmb3IgKGxldCBneSA9IGd5MDsgZ3kgPD0gZ3kxOyBneSsrKSB7XG4gICAgZm9yIChsZXQgZ3ggPSBneDA7IGd4IDw9IGd4MTsgZ3grKykgb3V0LnB1c2goeyBsZXZlbCwgZ3gsIGd5IH0pO1xuICB9XG4gIGNvbnN0IGQgPSAoazogUmVnaW9uVGlsZUtleSkgPT4gKGsuZ3ggKyAwLjUgLSBjeCkgKiogMiArIChrLmd5ICsgMC41IC0gY3kpICoqIDI7XG4gIG91dC5zb3J0KChhLCBiKSA9PiBkKGEpIC0gZChiKSk7XG4gIHJldHVybiBvdXQubGVuZ3RoID4gbGltaXQgPyBvdXQuc2xpY2UoMCwgbGltaXQpIDogb3V0O1xufVxuXG4vKiogYGxldmVsL2d4L2d5YCwgYSB0aWxlJ3MgaWQgd2l0aGluIG9uZSBwbGFuZS4gKi9cbmV4cG9ydCBmdW5jdGlvbiByZWdpb25UaWxlSWQoazogUmVnaW9uVGlsZUtleSk6IHN0cmluZyB7XG4gIHJldHVybiBgJHtrLmxldmVsfS8ke2suZ3h9LyR7ay5neX1gO1xufVxuXG4vKiogVGhlIHRpbGUgb2YgYGxldmVsYCBob2xkaW5nIGltYWdlIHBvaW50ICh4LCB5KS4gKi9cbmV4cG9ydCBmdW5jdGlvbiB0aWxlQXQoeDogbnVtYmVyLCB5OiBudW1iZXIsIGxldmVsOiBudW1iZXIsIHRpbGVTaXplID0gUkVHSU9OX1RJTEVfU0laRSk6IFJlZ2lvblRpbGVLZXkge1xuICBjb25zdCBzaXplID0gbGV2ZWxUaWxlU2l6ZShsZXZlbCwgdGlsZVNpemUpO1xuICByZXR1cm4geyBsZXZlbCwgZ3g6IE1hdGguZmxvb3IoeCAvIHNpemUpLCBneTogTWF0aC5mbG9vcih5IC8gc2l6ZSkgfTtcbn1cblxuLyoqIFRydWUgd2hlbiB0d28gYm94ZXMgbWVldCAoZWRnZXMgaW5jbHVkZWQpLiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGJib3hlc01lZXQoYTogUmVhZG9ubHk8QmJveD4sIGI6IFJlYWRvbmx5PEJib3g+KTogYm9vbGVhbiB7XG4gIHJldHVybiBhWzBdIDw9IGJbMl0gJiYgYVsyXSA+PSBiWzBdICYmIGFbMV0gPD0gYlszXSAmJiBhWzNdID49IGJbMV07XG59XG5cbi8vIOKUgOKUgCBQaWNraW5nIOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgFxuXG4vKipcbiAqIFRoZSBmZWF0dXJlIHVuZGVyIGltYWdlIHBvaW50ICh4LCB5KTogaW5zaWRlIGFuIGFyZWEgKGV2ZW4tb2RkIG92ZXIgaXRzIHJpbmdzLCBzbyBob2xlcyBhcmVcbiAqIG91dHNpZGUpIG9yIHdpdGhpbiBgdG9sZXJhbmNlYCBpbWFnZSBwaXhlbHMgb2YgYSBwb2x5bGluZS4gT2Ygc2V2ZXJhbCwgdGhlIG9uZSB3aXRoIHRoZVxuICogc21hbGxlc3QgYm94IOKAlCB0aGUgaW5uZXJtb3N0IG9mIG5lc3RlZCBvdXRsaW5lcy4gTnVsbCB3aGVuIG5vbmUgaXMuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBmZWF0dXJlQXQoXG4gIGZlYXR1cmVzOiBJdGVyYWJsZTxUaWxlRmVhdHVyZT4sXG4gIHg6IG51bWJlcixcbiAgeTogbnVtYmVyLFxuICB0b2xlcmFuY2UgPSAwLFxuKTogVGlsZUZlYXR1cmUgfCBudWxsIHtcbiAgbGV0IGJlc3Q6IFRpbGVGZWF0dXJlIHwgbnVsbCA9IG51bGw7XG4gIGxldCBiZXN0QXJlYSA9IEluZmluaXR5O1xuICBmb3IgKGNvbnN0IGYgb2YgZmVhdHVyZXMpIHtcbiAgICBjb25zdCBiID0gZi5iYm94O1xuICAgIGlmICh4IDwgYlswXSAtIHRvbGVyYW5jZSB8fCB4ID4gYlsyXSArIHRvbGVyYW5jZSB8fCB5IDwgYlsxXSAtIHRvbGVyYW5jZSB8fCB5ID4gYlszXSArIHRvbGVyYW5jZSkgY29udGludWU7XG4gICAgY29uc3QgaGl0ID0gZi5vcGVuID8gbmVhclBvbHlsaW5lcyhmLnJpbmdzLCB4LCB5LCB0b2xlcmFuY2UpIDogaW5zaWRlUmluZ3MoZi5yaW5ncywgeCwgeSk7XG4gICAgaWYgKCFoaXQpIGNvbnRpbnVlO1xuICAgIGNvbnN0IGFyZWEgPSAoYlsyXSAtIGJbMF0pICogKGJbM10gLSBiWzFdKTtcbiAgICBpZiAoYXJlYSA8IGJlc3RBcmVhKSB7XG4gICAgICBiZXN0ID0gZjtcbiAgICAgIGJlc3RBcmVhID0gYXJlYTtcbiAgICB9XG4gIH1cbiAgcmV0dXJuIGJlc3Q7XG59XG5cbi8qKiBGZWF0dXJlcyB3aG9zZSBib3ggbWVldHMgYHJlY3RgICh0aGUgcnViYmVyIGJhbmQncyBydWxlIGZvciByZWdpb25zKS4gKi9cbmV4cG9ydCBmdW5jdGlvbiBmZWF0dXJlc0luUmVjdChmZWF0dXJlczogSXRlcmFibGU8VGlsZUZlYXR1cmU+LCByZWN0OiBSZWFkb25seTxCYm94Pik6IFRpbGVGZWF0dXJlW10ge1xuICBjb25zdCBvdXQ6IFRpbGVGZWF0dXJlW10gPSBbXTtcbiAgZm9yIChjb25zdCBmIG9mIGZlYXR1cmVzKSBpZiAoYmJveGVzTWVldChmLmJib3gsIHJlY3QpKSBvdXQucHVzaChmKTtcbiAgcmV0dXJuIG91dDtcbn1cblxuLyoqIEV2ZW4tb2RkIGNvbnRhaW5tZW50IG92ZXIgaW50ZXJsZWF2ZWQgcmluZ3MuICovXG5leHBvcnQgZnVuY3Rpb24gaW5zaWRlUmluZ3MocmluZ3M6IHJlYWRvbmx5IEFycmF5TGlrZTxudW1iZXI+W10sIHg6IG51bWJlciwgeTogbnVtYmVyKTogYm9vbGVhbiB7XG4gIGxldCBpbnNpZGUgPSBmYWxzZTtcbiAgZm9yIChjb25zdCByIG9mIHJpbmdzKSB7XG4gICAgY29uc3QgbiA9IHIubGVuZ3RoID4+IDE7XG4gICAgaWYgKG4gPCAzKSBjb250aW51ZTtcbiAgICBmb3IgKGxldCBpID0gMCwgaiA9IG4gLSAxOyBpIDwgbjsgaiA9IGkrKykge1xuICAgICAgY29uc3QgeGkgPSByWzIgKiBpXSxcbiAgICAgICAgeWkgPSByWzIgKiBpICsgMV0sXG4gICAgICAgIHhqID0gclsyICogal0sXG4gICAgICAgIHlqID0gclsyICogaiArIDFdO1xuICAgICAgaWYgKHlpID4geSAhPT0geWogPiB5ICYmIHggPCAoKHhqIC0geGkpICogKHkgLSB5aSkpIC8gKHlqIC0geWkpICsgeGkpIGluc2lkZSA9ICFpbnNpZGU7XG4gICAgfVxuICB9XG4gIHJldHVybiBpbnNpZGU7XG59XG5cbmZ1bmN0aW9uIG5lYXJQb2x5bGluZXMobGluZXM6IHJlYWRvbmx5IEFycmF5TGlrZTxudW1iZXI+W10sIHg6IG51bWJlciwgeTogbnVtYmVyLCB0b2xlcmFuY2U6IG51bWJlcik6IGJvb2xlYW4ge1xuICBmb3IgKGNvbnN0IGwgb2YgbGluZXMpIHtcbiAgICBmb3IgKGxldCBpID0gMjsgaSArIDEgPCBsLmxlbmd0aDsgaSArPSAyKSB7XG4gICAgICBpZiAoc2VnbWVudERpc3RhbmNlKHgsIHksIGxbaSAtIDJdLCBsW2kgLSAxXSwgbFtpXSwgbFtpICsgMV0pIDw9IHRvbGVyYW5jZSkgcmV0dXJuIHRydWU7XG4gICAgfVxuICB9XG4gIHJldHVybiBmYWxzZTtcbn1cblxuZnVuY3Rpb24gc2VnbWVudERpc3RhbmNlKHB4OiBudW1iZXIsIHB5OiBudW1iZXIsIGF4OiBudW1iZXIsIGF5OiBudW1iZXIsIGJ4OiBudW1iZXIsIGJ5OiBudW1iZXIpOiBudW1iZXIge1xuICBjb25zdCBkeCA9IGJ4IC0gYXgsXG4gICAgZHkgPSBieSAtIGF5O1xuICBjb25zdCBsZW4yID0gZHggKiBkeCArIGR5ICogZHk7XG4gIGNvbnN0IHQgPSBsZW4yID09PSAwID8gMCA6IE1hdGgubWF4KDAsIE1hdGgubWluKDEsICgocHggLSBheCkgKiBkeCArIChweSAtIGF5KSAqIGR5KSAvIGxlbjIpKTtcbiAgcmV0dXJuIE1hdGguaHlwb3QocHggLSAoYXggKyB0ICogZHgpLCBweSAtIChheSArIHQgKiBkeSkpO1xufVxuXG4vLyDilIDilIAgU2ltcGxpZmljYXRpb24g4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSAXG5cbi8qKiBEb3VnbGFz4oCTUGV1Y2tlciBvdmVyIGFuIG9wZW4gcG9seWxpbmUgKGJvdGggZW5kcyBrZXB0KS4gKi9cbmV4cG9ydCBmdW5jdGlvbiBzaW1wbGlmeVBvbHlsaW5lKHhzOiBudW1iZXJbXSwgeXM6IG51bWJlcltdLCBlcHNpbG9uOiBudW1iZXIpOiB7IHhzOiBudW1iZXJbXTsgeXM6IG51bWJlcltdIH0ge1xuICBjb25zdCBuID0geHMubGVuZ3RoO1xuICBpZiAobiA8PSAyIHx8ICEoZXBzaWxvbiA+IDApKSByZXR1cm4geyB4czogeHMuc2xpY2UoKSwgeXM6IHlzLnNsaWNlKCkgfTtcbiAgY29uc3Qga2VlcCA9IG5ldyBVaW50OEFycmF5KG4pO1xuICBrZWVwWzBdID0ga2VlcFtuIC0gMV0gPSAxO1xuICBjb25zdCBzdGFjazogQXJyYXk8W251bWJlciwgbnVtYmVyXT4gPSBbWzAsIG4gLSAxXV07XG4gIHdoaWxlIChzdGFjay5sZW5ndGgpIHtcbiAgICBjb25zdCBbYSwgYl0gPSBzdGFjay5wb3AoKSBhcyBbbnVtYmVyLCBudW1iZXJdO1xuICAgIGxldCBtYXhEID0gLTEsXG4gICAgICBpZHggPSAtMTtcbiAgICBmb3IgKGxldCBpID0gYSArIDE7IGkgPCBiOyBpKyspIHtcbiAgICAgIGNvbnN0IGQgPSBzZWdtZW50RGlzdGFuY2UoeHNbaV0sIHlzW2ldLCB4c1thXSwgeXNbYV0sIHhzW2JdLCB5c1tiXSk7XG4gICAgICBpZiAoZCA+IG1heEQpIHtcbiAgICAgICAgbWF4RCA9IGQ7XG4gICAgICAgIGlkeCA9IGk7XG4gICAgICB9XG4gICAgfVxuICAgIGlmIChtYXhEID4gZXBzaWxvbikge1xuICAgICAga2VlcFtpZHhdID0gMTtcbiAgICAgIHN0YWNrLnB1c2goW2EsIGlkeF0sIFtpZHgsIGJdKTtcbiAgICB9XG4gIH1cbiAgY29uc3Qgb3g6IG51bWJlcltdID0gW10sXG4gICAgb3k6IG51bWJlcltdID0gW107XG4gIGZvciAobGV0IGkgPSAwOyBpIDwgbjsgaSsrKSB7XG4gICAgaWYgKGtlZXBbaV0pIHtcbiAgICAgIG94LnB1c2goeHNbaV0pO1xuICAgICAgb3kucHVzaCh5c1tpXSk7XG4gICAgfVxuICB9XG4gIHJldHVybiB7IHhzOiBveCwgeXM6IG95IH07XG59XG5cbi8qKlxuICogUmluZ3Mgc2ltcGxpZmllZCBmb3IgYSBsZXZlbDogZXZlcnkgcmluZyB0aHJvdWdoIERvdWdsYXPigJNQZXVja2VyIGF0IHRoZSBsZXZlbCdzIHRvbGVyYW5jZSxcbiAqIHJpbmdzIHdob3NlIGJveCBpcyB1bmRlciB0aGUgbGV2ZWwncyBtaW5pbXVtIGV4dGVudCBkcm9wcGVkLCBhbmQgcmluZ3MgbGVmdCB3aXRoIHRvbyBmZXdcbiAqIHZlcnRpY2VzIHRvIGRyYXcgKDMgZm9yIGEgY2xvc2VkIHJpbmcsIDIgZm9yIGEgcG9seWxpbmUpIGRyb3BwZWQuIExldmVsIDAgcmV0dXJucyB0aGUgcmluZ3NcbiAqIGFzIHRoZXkgYXJlLlxuICovXG5leHBvcnQgZnVuY3Rpb24gc2ltcGxpZnlSaW5ncyhyaW5nczogcmVhZG9ubHkgRmxvYXQ2NEFycmF5W10sIG9wZW46IGJvb2xlYW4sIGxldmVsOiBudW1iZXIpOiBGbG9hdDMyQXJyYXlbXSB7XG4gIGNvbnN0IHRvbCA9IGxldmVsVG9sZXJhbmNlKGxldmVsKTtcbiAgY29uc3QgbWluRXh0ZW50ID0gbGV2ZWxNaW5FeHRlbnQobGV2ZWwpO1xuICBjb25zdCBtaW5WZXJ0aWNlcyA9IG9wZW4gPyAyIDogMztcbiAgY29uc3Qgb3V0OiBGbG9hdDMyQXJyYXlbXSA9IFtdO1xuICBmb3IgKGNvbnN0IHJpbmcgb2YgcmluZ3MpIHtcbiAgICBjb25zdCBuID0gcmluZy5sZW5ndGggPj4gMTtcbiAgICBpZiAobiA8IG1pblZlcnRpY2VzKSBjb250aW51ZTtcbiAgICBpZiAodG9sID09PSAwKSB7XG4gICAgICBvdXQucHVzaChGbG9hdDMyQXJyYXkuZnJvbShyaW5nKSk7XG4gICAgICBjb250aW51ZTtcbiAgICB9XG4gICAgY29uc3QgeHMgPSBuZXcgQXJyYXk8bnVtYmVyPihuKSxcbiAgICAgIHlzID0gbmV3IEFycmF5PG51bWJlcj4obik7XG4gICAgbGV0IHgwID0gSW5maW5pdHksXG4gICAgICB5MCA9IEluZmluaXR5LFxuICAgICAgeDEgPSAtSW5maW5pdHksXG4gICAgICB5MSA9IC1JbmZpbml0eTtcbiAgICBmb3IgKGxldCBpID0gMDsgaSA8IG47IGkrKykge1xuICAgICAgY29uc3QgeCA9IHJpbmdbMiAqIGldLFxuICAgICAgICB5ID0gcmluZ1syICogaSArIDFdO1xuICAgICAgeHNbaV0gPSB4O1xuICAgICAgeXNbaV0gPSB5O1xuICAgICAgaWYgKHggPCB4MCkgeDAgPSB4O1xuICAgICAgaWYgKHggPiB4MSkgeDEgPSB4O1xuICAgICAgaWYgKHkgPCB5MCkgeTAgPSB5O1xuICAgICAgaWYgKHkgPiB5MSkgeTEgPSB5O1xuICAgIH1cbiAgICBpZiAoTWF0aC5tYXgoeDEgLSB4MCwgeTEgLSB5MCkgPCBtaW5FeHRlbnQpIGNvbnRpbnVlO1xuICAgIGNvbnN0IHMgPSBvcGVuID8gc2ltcGxpZnlQb2x5bGluZSh4cywgeXMsIHRvbCkgOiBzaW1wbGlmeVJpbmcoeHMsIHlzLCB0b2wpO1xuICAgIGlmIChzLnhzLmxlbmd0aCA8IG1pblZlcnRpY2VzKSBjb250aW51ZTtcbiAgICBjb25zdCBmbGF0ID0gbmV3IEZsb2F0MzJBcnJheShzLnhzLmxlbmd0aCAqIDIpO1xuICAgIGZvciAobGV0IGkgPSAwOyBpIDwgcy54cy5sZW5ndGg7IGkrKykge1xuICAgICAgZmxhdFsyICogaV0gPSBzLnhzW2ldO1xuICAgICAgZmxhdFsyICogaSArIDFdID0gcy55c1tpXTtcbiAgICB9XG4gICAgb3V0LnB1c2goZmxhdCk7XG4gIH1cbiAgcmV0dXJuIG91dDtcbn1cblxuLy8g4pSA4pSAIFRoZSBmZWF0dXJlIHRhYmxlIOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgFxuXG4vKiogRmVhdHVyZXMgKGFuZCB0aGVpciBzaW1wbGlmaWVkIG91dGxpbmVzKSBjYWNoZWQgcGVyIGxldmVsLCBwYXN0IHdoaWNoIHRoZSBvbGRlc3QgZ28uICovXG5jb25zdCBTSU1QTElGSUVEX0NBQ0hFX0xJTUlUID0gMjAwXzAwMDtcblxuLyoqXG4gKiBBIHBhcnNlZCBHZW9KU09OIHJlZ2lvbiBzZXQsIGluZGV4ZWQgZm9yIHRpbGVzLiBIb2xkcyB0aGUgcmF3IGZlYXR1cmVzIChmb3IgdGhlIGV4YWN0XG4gKiBnZW9tZXRyeSBhbmQgdGhlIGV4cG9ydCksIGVhY2ggZmVhdHVyZSdzIHJpbmdzLCBib3gsIHBsYW5lIGFuZCBjbGFzcywgYW5kIGJ1aWxkcyBhIGxldmVsJ3NcbiAqIHRpbGUgYnVja2V0cyB0aGUgZmlyc3QgdGltZSB0aGF0IGxldmVsIG9mIGEgcGxhbmUgaXMgYXNrZWQgZm9yLlxuICovXG5leHBvcnQgY2xhc3MgUmVnaW9uRmVhdHVyZVRhYmxlIHtcbiAgcmVhZG9ubHkgaWRzOiBzdHJpbmdbXSA9IFtdO1xuICByZWFkb25seSBsYWJlbHM6IEFycmF5PHN0cmluZyB8IG51bGw+ID0gW107XG4gIHJlYWRvbmx5IGNvbG9yczogQXJyYXk8c3RyaW5nIHwgbnVsbD4gPSBbXTtcbiAgcmVhZG9ubHkgcGxhbmVzOiBudW1iZXJbXSA9IFtdO1xuICByZWFkb25seSBib3hlczogQmJveFtdID0gW107XG4gIHJlYWRvbmx5IHJpbmdzOiBGbG9hdDY0QXJyYXlbXVtdID0gW107XG4gIHJlYWRvbmx5IG9wZW46IGJvb2xlYW5bXSA9IFtdO1xuICAvKiogUGVyIGZlYXR1cmUsIGl0cyBwYXJ0cyBhcyByaW5nIGluZGljZXMgKHRoZSBleHRlcmlvciBmaXJzdCwgdGhlbiBpdHMgaG9sZXMpLiAqL1xuICByZWFkb25seSBwYXJ0czogbnVtYmVyW11bXVtdID0gW107XG4gIHByaXZhdGUgcmVhZG9ubHkgbGFiZWxQb2ludHMgPSBuZXcgTWFwPG51bWJlciwgRmxvYXQzMkFycmF5PigpO1xuICAvKiogRWFjaCBmZWF0dXJlJ3MgYXJlYSwgd29ya2VkIG91dCB0aGUgZmlyc3QgdGltZSBpdHMgcm93IGlzIGFza2VkIGZvci4gKi9cbiAgcHJpdmF0ZSByZWFkb25seSBhcmVhcyA9IG5ldyBNYXA8bnVtYmVyLCBudW1iZXI+KCk7XG4gIHByaXZhdGUgaGllcmFyY2h5PzogUmVnaW9uQ2xhc3NOb2RlW107XG4gIHByaXZhdGUgc3R5bGU/OiBSZWdpb25Tb3VyY2VTdHlsZTtcbiAgcHJpdmF0ZSByZWFkb25seSBieUlkID0gbmV3IE1hcDxzdHJpbmcsIG51bWJlcj4oKTtcbiAgcHJpdmF0ZSByZWFkb25seSBidWNrZXRzID0gbmV3IE1hcDxzdHJpbmcsIExldmVsSW5kZXg+KCk7XG4gIHByaXZhdGUgcmVhZG9ubHkgc2ltcGxpZmllZCA9IG5ldyBNYXA8c3RyaW5nLCBGbG9hdDMyQXJyYXlbXT4oKTtcbiAgcHJpdmF0ZSByZWFkb25seSBib3VuZHM6IEJib3ggfCBudWxsO1xuICBwcml2YXRlIHJlYWRvbmx5IGxldmVsczogbnVtYmVyO1xuXG4gIGNvbnN0cnVjdG9yKFxuICAgIHJlYWRvbmx5IHJhdzogR2VvSnNvbkZlYXR1cmVMaWtlW10sXG4gICAgcmVhZG9ubHkgdGlsZVNpemUgPSBSRUdJT05fVElMRV9TSVpFLFxuICApIHtcbiAgICBsZXQgeDAgPSBJbmZpbml0eSxcbiAgICAgIHkwID0gSW5maW5pdHksXG4gICAgICB4MSA9IC1JbmZpbml0eSxcbiAgICAgIHkxID0gLUluZmluaXR5O1xuICAgIHJhdy5mb3JFYWNoKChmZWF0dXJlLCBpKSA9PiB7XG4gICAgICBjb25zdCBvd24gPSBmZWF0dXJlSWRPZihmZWF0dXJlKTtcbiAgICAgIGxldCBpZCA9IG93bjtcbiAgICAgIGlmIChpZCA9PT0gdW5kZWZpbmVkIHx8IHRoaXMuYnlJZC5oYXMoaWQpKSB7XG4gICAgICAgIC8vIEl0cyBwb3NpdGlvbiwgdW5sZXNzIGEgZmVhdHVyZSBhbHJlYWR5IGhhcyB0aGF0IGlkIChhbiBleHBsaWNpdCBcIiMxXCIsIHNheSk6IGlkcyBhcmUgdW5pcXVlLFxuICAgICAgICAvLyBvciBhIHRha2UsIGFuIGV4Y2x1c2lvbiBvciBhbiBleHBvcnQgd291bGQgYWN0IG9uIGJvdGguXG4gICAgICAgIGlkID0gYCMke2l9YDtcbiAgICAgICAgZm9yIChsZXQgayA9IDE7IHRoaXMuYnlJZC5oYXMoaWQpOyBrKyspIGlkID0gYCMke2l9LSR7a31gO1xuICAgICAgfVxuICAgICAgdGhpcy5ieUlkLnNldChpZCwgaSk7XG4gICAgICB0aGlzLmlkcy5wdXNoKGlkKTtcbiAgICAgIGNvbnN0IHsgbGFiZWwsIGNvbG9yIH0gPSBjbGFzc2lmaWNhdGlvbk9mKGZlYXR1cmUpO1xuICAgICAgdGhpcy5sYWJlbHMucHVzaChsYWJlbCk7XG4gICAgICB0aGlzLmNvbG9ycy5wdXNoKGNvbG9yKTtcbiAgICAgIHRoaXMucGxhbmVzLnB1c2goZmVhdHVyZT8uZ2VvbWV0cnk/LnBsYW5lPy56ID8/IDApO1xuICAgICAgY29uc3QgeyByaW5ncywgb3BlbiwgcGFydHMgfSA9IHJpbmdzT2YoZmVhdHVyZSk7XG4gICAgICB0aGlzLnJpbmdzLnB1c2gocmluZ3MpO1xuICAgICAgdGhpcy5vcGVuLnB1c2gob3Blbik7XG4gICAgICB0aGlzLnBhcnRzLnB1c2gocGFydHMpO1xuICAgICAgY29uc3QgYm94ID0gcmluZ3NCb3gocmluZ3MpO1xuICAgICAgdGhpcy5ib3hlcy5wdXNoKGJveCk7XG4gICAgICBpZiAocmluZ3MubGVuZ3RoKSB7XG4gICAgICAgIHgwID0gTWF0aC5taW4oeDAsIGJveFswXSk7XG4gICAgICAgIHkwID0gTWF0aC5taW4oeTAsIGJveFsxXSk7XG4gICAgICAgIHgxID0gTWF0aC5tYXgoeDEsIGJveFsyXSk7XG4gICAgICAgIHkxID0gTWF0aC5tYXgoeTEsIGJveFszXSk7XG4gICAgICB9XG4gICAgfSk7XG4gICAgdGhpcy5ib3VuZHMgPSB4MCA8PSB4MSA/IFt4MCwgeTAsIHgxLCB5MV0gOiBudWxsO1xuICAgIGNvbnN0IGV4dGVudCA9IHRoaXMuYm91bmRzID8gTWF0aC5tYXgoTWF0aC5hYnMoeDApLCBNYXRoLmFicyh5MCksIE1hdGguYWJzKHgxKSwgTWF0aC5hYnMoeTEpKSA6IDA7XG4gICAgdGhpcy5sZXZlbHMgPSAxICsgTWF0aC5tYXgoMCwgTWF0aC5jZWlsKE1hdGgubG9nMihNYXRoLm1heChleHRlbnQsIHRpbGVTaXplKSAvIHRpbGVTaXplKSkpO1xuICB9XG5cbiAgLyoqIFBhcnNlIGEgR2VvSlNPTiBGZWF0dXJlQ29sbGVjdGlvbiBzdHJpbmcuIFRocm93cyBvbiBpbnZhbGlkIEpTT04gb3Igbm8gYGZlYXR1cmVzYC4gKi9cbiAgc3RhdGljIGZyb21HZW9Kc29uKHRleHQ6IHN0cmluZywgdGlsZVNpemUgPSBSRUdJT05fVElMRV9TSVpFKTogUmVnaW9uRmVhdHVyZVRhYmxlIHtcbiAgICBjb25zdCBwYXJzZWQgPSBKU09OLnBhcnNlKHRleHQpO1xuICAgIGlmICghcGFyc2VkIHx8ICFBcnJheS5pc0FycmF5KHBhcnNlZC5mZWF0dXJlcykpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcihcIkludmFsaWQgR2VvSnNvbiBmaWxlOiBtdXN0IGNvbnRhaW4gdGhlICdmZWF0dXJlcycga2V5LlwiKTtcbiAgICB9XG4gICAgY29uc3QgdGFibGUgPSBuZXcgUmVnaW9uRmVhdHVyZVRhYmxlKHBhcnNlZC5mZWF0dXJlcywgdGlsZVNpemUpO1xuICAgIHRhYmxlLmRlc2NyaWJlKHBhcnNlZC5jbGFzc0hpZXJhcmNoeSwgcGFyc2VkLnN0eWxlKTtcbiAgICByZXR1cm4gdGFibGU7XG4gIH1cblxuICAvKiogQXR0YWNoIGEgY2xhc3MgaGllcmFyY2h5IGFuZCBhIHN0eWxlIGhpbnQgKGVhY2ggaWdub3JlZCB3aGVuIG5vdCB3ZWxsIGZvcm1lZCkuICovXG4gIGRlc2NyaWJlKGhpZXJhcmNoeT86IHVua25vd24sIHN0eWxlPzogdW5rbm93bik6IHZvaWQge1xuICAgIHRoaXMuaGllcmFyY2h5ID0gcmVhZEhpZXJhcmNoeShoaWVyYXJjaHkpID8/IHRoaXMuaGllcmFyY2h5O1xuICAgIHRoaXMuc3R5bGUgPSByZWFkU3R5bGUoc3R5bGUpID8/IHRoaXMuc3R5bGU7XG4gIH1cblxuICAvKipcbiAgICogVGhlIG91dGxpbmVzIG9mIGV2ZXJ5IGZlYXR1cmUgb2YgdGhlc2UgY2xhc3NlcywgcGxhbmUgYnkgcGxhbmUsIHNpbXBsaWZpZWQgZm9yIGBsZXZlbGAgKHdoYXQgYVxuICAgKiAzRCByZWNvbnN0cnVjdGlvbiBvZiB0aGUgY2xhc3NlcyBzdGFja3MpLCB3aXRob3V0IHRoZSBgZXhjbHVkZWBkIGlkczogY2xvc2VkIGZlYXR1cmVzJyByaW5ncyxcbiAgICogb3BlbiBmZWF0dXJlcycgcG9seWxpbmVzIGFzIGBsaW5lc2AsIGVhY2ggcmluZyB3aXRoIGl0cyBmZWF0dXJlIChgcmluZ0dyb3Vwc2ApLiBQbGFuZXMgd2l0aG91dFxuICAgKiBvbmUgYXJlIGxlZnQgb3V0LiBgY2xhc3Nlc2AgbnVsbCByZWFkcyBldmVyeSBsYWJlbGxlZCBmZWF0dXJlLCBlYWNoIG91dGxpbmUgd2l0aCBpdHMgY2xhc3NcbiAgICogKGByaW5nTGFiZWxzYCwgYGxpbmVMYWJlbHNgKS5cbiAgICovXG4gIGNsYXNzT3V0bGluZXMoXG4gICAgY2xhc3NlczogcmVhZG9ubHkgc3RyaW5nW10gfCBudWxsLFxuICAgIGxldmVsOiBudW1iZXIsXG4gICAgZXhjbHVkZTogcmVhZG9ubHkgc3RyaW5nW10gPSBbXSxcbiAgKTogQ2xhc3NPdXRsaW5lc1tdIHtcbiAgICBjb25zdCB3YW50ZWQgPSBjbGFzc2VzID8gbmV3IFNldChjbGFzc2VzKSA6IG51bGw7XG4gICAgY29uc3Qgc2tpcCA9IG5ldyBTZXQoZXhjbHVkZSk7XG4gICAgY29uc3QgYnlQbGFuZSA9IG5ldyBNYXA8bnVtYmVyLCBDbGFzc091dGxpbmVzPigpO1xuICAgIGZvciAobGV0IGkgPSAwOyBpIDwgdGhpcy5pZHMubGVuZ3RoOyBpKyspIHtcbiAgICAgIGNvbnN0IGxhYmVsID0gdGhpcy5sYWJlbHNbaV07XG4gICAgICBpZiAoIWxhYmVsIHx8ICh3YW50ZWQgJiYgIXdhbnRlZC5oYXMobGFiZWwpKSB8fCBza2lwLmhhcyh0aGlzLmlkc1tpXSkpIGNvbnRpbnVlO1xuICAgICAgY29uc3QgcmluZ3MgPSB0aGlzLnJpbmdzQXQoaSwgbGV2ZWwpO1xuICAgICAgaWYgKCFyaW5ncy5sZW5ndGgpIGNvbnRpbnVlO1xuICAgICAgY29uc3QgeiA9IHRoaXMucGxhbmVzW2ldO1xuICAgICAgbGV0IHBsYW5lID0gYnlQbGFuZS5nZXQoeik7XG4gICAgICBpZiAoIXBsYW5lKSBieVBsYW5lLnNldCh6LCAocGxhbmUgPSB7IHosIHJpbmdzOiBbXSB9KSk7XG4gICAgICBpZiAodGhpcy5vcGVuW2ldKSB7XG4gICAgICAgIChwbGFuZS5saW5lcyA/Pz0gW10pLnB1c2goLi4ucmluZ3MpO1xuICAgICAgICBpZiAoIXdhbnRlZCkgKHBsYW5lLmxpbmVMYWJlbHMgPz89IFtdKS5wdXNoKC4uLnJpbmdzLm1hcCgoKSA9PiBsYWJlbCkpO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgcGxhbmUucmluZ3MucHVzaCguLi5yaW5ncyk7XG4gICAgICAgIChwbGFuZS5yaW5nR3JvdXBzID8/PSBbXSkucHVzaCguLi5yaW5ncy5tYXAoKCkgPT4gaSkpO1xuICAgICAgICBpZiAoIXdhbnRlZCkgKHBsYW5lLnJpbmdMYWJlbHMgPz89IFtdKS5wdXNoKC4uLnJpbmdzLm1hcCgoKSA9PiBsYWJlbCkpO1xuICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4gQXJyYXkuZnJvbShieVBsYW5lLnZhbHVlcygpKS5zb3J0KChhLCBiKSA9PiBhLnogLSBiLnopO1xuICB9XG5cbiAgLyoqIEZlYXR1cmVzIHBlciBjbGFzcyBvbiBwbGFuZSBgemAgKG51bGw6IG9uIGV2ZXJ5IHBsYW5lKSwgd2l0aG91dCB0aGUgYGV4Y2x1ZGVgZCBpZHMuICovXG4gIGNsYXNzQ291bnRzKHo6IG51bWJlciB8IG51bGwsIGV4Y2x1ZGU6IHJlYWRvbmx5IHN0cmluZ1tdID0gW10pOiBSZWNvcmQ8c3RyaW5nLCBudW1iZXI+IHtcbiAgICBjb25zdCBza2lwID0gbmV3IFNldChleGNsdWRlKTtcbiAgICBjb25zdCBjb3VudHM6IFJlY29yZDxzdHJpbmcsIG51bWJlcj4gPSB7fTtcbiAgICBmb3IgKGxldCBpID0gMDsgaSA8IHRoaXMuaWRzLmxlbmd0aDsgaSsrKSB7XG4gICAgICBjb25zdCBsYWJlbCA9IHRoaXMubGFiZWxzW2ldO1xuICAgICAgaWYgKCh6ICE9PSBudWxsICYmIHRoaXMucGxhbmVzW2ldICE9PSB6KSB8fCAhbGFiZWwgfHwgc2tpcC5oYXModGhpcy5pZHNbaV0pKSBjb250aW51ZTtcbiAgICAgIGNvdW50c1tsYWJlbF0gPSAoY291bnRzW2xhYmVsXSA/PyAwKSArIDE7XG4gICAgfVxuICAgIHJldHVybiBjb3VudHM7XG4gIH1cblxuICBpbmZvKCk6IFJlZ2lvblNvdXJjZUluZm8ge1xuICAgIGNvbnN0IGNsYXNzQ29sb3JzOiBSZWNvcmQ8c3RyaW5nLCBzdHJpbmc+ID0ge307XG4gICAgdGhpcy5sYWJlbHMuZm9yRWFjaCgobGFiZWwsIGkpID0+IHtcbiAgICAgIGNvbnN0IGNvbG9yID0gdGhpcy5jb2xvcnNbaV07XG4gICAgICBpZiAobGFiZWwgJiYgY29sb3IgJiYgIShsYWJlbCBpbiBjbGFzc0NvbG9ycykpIGNsYXNzQ29sb3JzW2xhYmVsXSA9IGNvbG9yO1xuICAgIH0pO1xuICAgIHJldHVybiB7XG4gICAgICBmZWF0dXJlQ291bnQ6IHRoaXMuaWRzLmxlbmd0aCxcbiAgICAgIGJvdW5kczogdGhpcy5ib3VuZHMsXG4gICAgICB0aWxlU2l6ZTogdGhpcy50aWxlU2l6ZSxcbiAgICAgIGxldmVsczogdGhpcy5sZXZlbHMsXG4gICAgICBwbGFuZXM6IEFycmF5LmZyb20obmV3IFNldCh0aGlzLnBsYW5lcykpLnNvcnQoKGEsIGIpID0+IGEgLSBiKSxcbiAgICAgIGNsYXNzQ29sb3JzLFxuICAgICAgLi4uKHRoaXMuaGllcmFyY2h5ID8geyBoaWVyYXJjaHk6IHRoaXMuaGllcmFyY2h5IH0gOiB7fSksXG4gICAgICAuLi4odGhpcy5zdHlsZSA/IHsgc3R5bGU6IHRoaXMuc3R5bGUgfSA6IHt9KSxcbiAgICB9O1xuICB9XG5cbiAgLyoqIE9uZSB0aWxlIG9mIHBsYW5lIGB6YC4gKi9cbiAgdGlsZSh6OiBudW1iZXIsIGxldmVsOiBudW1iZXIsIGd4OiBudW1iZXIsIGd5OiBudW1iZXIpOiBSZWdpb25UaWxlIHtcbiAgICBjb25zdCB7IGNlbGxzLCB3aWRlIH0gPSB0aGlzLmJ1Y2tldHNGb3IoeiwgbGV2ZWwpO1xuICAgIGNvbnN0IGJ1Y2tldCA9IGNlbGxzLmdldChgJHtneH0vJHtneX1gKSA/PyBbXTtcbiAgICBjb25zdCBzaXplID0gbGV2ZWxUaWxlU2l6ZShsZXZlbCwgdGhpcy50aWxlU2l6ZSk7XG4gICAgY29uc3QgZmVhdHVyZXM6IFRpbGVGZWF0dXJlW10gPSBbXTtcbiAgICAvLyBUaGUgdGlsZSdzIGNlbGwgZmVhdHVyZXMgYW5kIHRoZSB3aWRlIG9uZXMgdGhhdCBtZWV0IGl0LCBtZXJnZWQgYmFjayBpbnRvIGZpbGUgb3JkZXIuXG4gICAgY29uc3Qgb3JkZXI6IG51bWJlcltdID0gW107XG4gICAgZm9yIChsZXQgYSA9IDAsIHcgPSAwOyBhIDwgYnVja2V0Lmxlbmd0aCB8fCB3IDwgd2lkZS5sZW5ndGg7KSB7XG4gICAgICBpZiAodyA+PSB3aWRlLmxlbmd0aCB8fCAoYSA8IGJ1Y2tldC5sZW5ndGggJiYgYnVja2V0W2FdIDwgd2lkZVt3XSkpIG9yZGVyLnB1c2goYnVja2V0W2ErK10pO1xuICAgICAgZWxzZSB7XG4gICAgICAgIGNvbnN0IGkgPSB3aWRlW3crK107XG4gICAgICAgIGlmIChjZWxsTWVldHModGhpcy5ib3hlc1tpXSwgc2l6ZSwgZ3gsIGd5KSkgb3JkZXIucHVzaChpKTtcbiAgICAgIH1cbiAgICB9XG4gICAgZm9yIChjb25zdCBpIG9mIG9yZGVyKSB7XG4gICAgICBjb25zdCByaW5ncyA9IHRoaXMucmluZ3NBdChpLCBsZXZlbCk7XG4gICAgICBpZiAoIXJpbmdzLmxlbmd0aCkgY29udGludWU7XG4gICAgICBjb25zdCBsYWJlbHMgPSB0aGlzLmxhYmVsc0F0KGksIGxldmVsKTtcbiAgICAgIGZlYXR1cmVzLnB1c2goe1xuICAgICAgICBpZDogdGhpcy5pZHNbaV0sXG4gICAgICAgIGxhYmVsOiB0aGlzLmxhYmVsc1tpXSxcbiAgICAgICAgY29sb3I6IHRoaXMuY29sb3JzW2ldLFxuICAgICAgICBiYm94OiB0aGlzLmJveGVzW2ldLFxuICAgICAgICByaW5ncyxcbiAgICAgICAgb3BlbjogdGhpcy5vcGVuW2ldLFxuICAgICAgICAuLi4obGFiZWxzID8geyBsYWJlbHMgfSA6IHt9KSxcbiAgICAgIH0pO1xuICAgIH1cbiAgICByZXR1cm4geyB6LCBsZXZlbCwgZ3gsIGd5LCBmZWF0dXJlcyB9O1xuICB9XG5cbiAgLyoqIFRoZSByYXcgR2VvSlNPTiBmZWF0dXJlcyB3aXRoIHRoZXNlIGlkcywgaW4gdGhlIG9yZGVyIGFza2VkICh1bmtub3duIGlkcyBza2lwcGVkKS4gKi9cbiAgZmVhdHVyZXMoaWRzOiByZWFkb25seSBzdHJpbmdbXSk6IEFycmF5PHsgaWQ6IHN0cmluZzsgZmVhdHVyZTogR2VvSnNvbkZlYXR1cmVMaWtlIH0+IHtcbiAgICBjb25zdCBvdXQ6IEFycmF5PHsgaWQ6IHN0cmluZzsgZmVhdHVyZTogR2VvSnNvbkZlYXR1cmVMaWtlIH0+ID0gW107XG4gICAgZm9yIChjb25zdCBpZCBvZiBpZHMpIHtcbiAgICAgIGNvbnN0IGkgPSB0aGlzLmJ5SWQuZ2V0KGlkKTtcbiAgICAgIGlmIChpICE9PSB1bmRlZmluZWQpIG91dC5wdXNoKHsgaWQsIGZlYXR1cmU6IHRoaXMucmF3W2ldIH0pO1xuICAgIH1cbiAgICByZXR1cm4gb3V0O1xuICB9XG5cbiAgLyoqIEZlYXR1cmUgYGlgJ3MgYXJlYSBpbiBweMKyICgwIGZvciBhIHBvbHlsaW5lKS4gKi9cbiAgcHJpdmF0ZSBhcmVhT2YoaTogbnVtYmVyKTogbnVtYmVyIHtcbiAgICBsZXQgYXJlYSA9IHRoaXMuYXJlYXMuZ2V0KGkpO1xuICAgIGlmIChhcmVhID09PSB1bmRlZmluZWQpIHtcbiAgICAgIGFyZWEgPSB0aGlzLm9wZW5baV0gPyAwIDogcmluZ3NBcmVhKHRoaXMucmluZ3NbaV0pO1xuICAgICAgdGhpcy5hcmVhcy5zZXQoaSwgYXJlYSk7XG4gICAgfVxuICAgIHJldHVybiBhcmVhO1xuICB9XG5cbiAgLyoqIEEgcGFnZSBvZiBwbGFuZSBgemAncyBmZWF0dXJlcywgaW4gZmlsZSBvcmRlci4gKi9cbiAgaW5kZXgoejogbnVtYmVyLCBxdWVyeTogUmVnaW9uSW5kZXhRdWVyeSk6IFJlZ2lvbkluZGV4UGFnZSB7XG4gICAgY29uc3QgZXhjbHVkZSA9IG5ldyBTZXQocXVlcnkuZXhjbHVkZSA/PyBbXSk7XG4gICAgY29uc3QgY2xhc3NlcyA9IHF1ZXJ5LmNsYXNzZXMgPyBuZXcgU2V0KHF1ZXJ5LmNsYXNzZXMpIDogbnVsbDtcbiAgICBjb25zdCBuZWVkbGUgPSBxdWVyeS5sYWJlbD8udHJpbSgpLnRvTG93ZXJDYXNlKCkgfHwgbnVsbDtcbiAgICBjb25zdCByb3dzOiBSZWdpb25JbmRleFJvd1tdID0gW107XG4gICAgbGV0IHRvdGFsID0gMDtcbiAgICBmb3IgKGxldCBpID0gMDsgaSA8IHRoaXMuaWRzLmxlbmd0aDsgaSsrKSB7XG4gICAgICBpZiAodGhpcy5wbGFuZXNbaV0gIT09IHogfHwgZXhjbHVkZS5oYXModGhpcy5pZHNbaV0pKSBjb250aW51ZTtcbiAgICAgIGlmIChuZWVkbGUgJiYgISh0aGlzLmxhYmVsc1tpXSA/PyAnJykudG9Mb3dlckNhc2UoKS5pbmNsdWRlcyhuZWVkbGUpKSBjb250aW51ZTtcbiAgICAgIGlmIChjbGFzc2VzICYmICFjbGFzc2VzLmhhcyh0aGlzLmxhYmVsc1tpXSA/PyAnJykpIGNvbnRpbnVlO1xuICAgICAgaWYgKHRvdGFsID49IHF1ZXJ5Lm9mZnNldCAmJiByb3dzLmxlbmd0aCA8IHF1ZXJ5LmxpbWl0KSB7XG4gICAgICAgIHJvd3MucHVzaCh7XG4gICAgICAgICAgaWQ6IHRoaXMuaWRzW2ldLFxuICAgICAgICAgIGxhYmVsOiB0aGlzLmxhYmVsc1tpXSxcbiAgICAgICAgICBjb2xvcjogdGhpcy5jb2xvcnNbaV0sXG4gICAgICAgICAgYmJveDogdGhpcy5ib3hlc1tpXSxcbiAgICAgICAgICBhcmVhOiB0aGlzLmFyZWFPZihpKSxcbiAgICAgICAgfSk7XG4gICAgICB9XG4gICAgICB0b3RhbCsrO1xuICAgIH1cbiAgICByZXR1cm4geyB0b3RhbCwgcm93cyB9O1xuICB9XG5cbiAgLyoqXG4gICAqIFRoZSBzb3VyY2UgYXMgYSBHZW9KU09OIEZlYXR1cmVDb2xsZWN0aW9uIHN0cmluZywgdGhyb3VnaCB0aGUgd29ya2luZyBzZXQ6IGZlYXR1cmVzIHdob3NlXG4gICAqIGlkIGlzIGluIGBleGNsdWRlYCAodGFrZW4gZm9yIGVkaXRpbmcsIG9yIGRlbGV0ZWQpIGFyZSBsZWZ0IG91dCwgYGV4dHJhYCAodGhlIHdvcmtpbmcgc2V0J3NcbiAgICogZmVhdHVyZXMpIGFwcGVuZGVkLiBFdmVyeSBmZWF0dXJlIGtlZXBzIGFuIGBpZGA7IHRoZSBzZXQga2VlcHMgaXRzIGhpZXJhcmNoeSBhbmQgc3R5bGUuXG4gICAqL1xuICBleHBvcnRHZW9Kc29uKGV4Y2x1ZGU6IHJlYWRvbmx5IHN0cmluZ1tdLCBleHRyYTogcmVhZG9ubHkgb2JqZWN0W10pOiBzdHJpbmcge1xuICAgIGNvbnN0IHNraXAgPSBuZXcgU2V0KGV4Y2x1ZGUpO1xuICAgIGNvbnN0IHBhcnRzOiBzdHJpbmdbXSA9IFtdO1xuICAgIHRoaXMucmF3LmZvckVhY2goKGZlYXR1cmUsIGkpID0+IHtcbiAgICAgIGNvbnN0IGlkID0gdGhpcy5pZHNbaV07XG4gICAgICBpZiAoc2tpcC5oYXMoaWQpKSByZXR1cm47XG4gICAgICBwYXJ0cy5wdXNoKEpTT04uc3RyaW5naWZ5KGZlYXR1cmUuaWQgPT09IHVuZGVmaW5lZCA/IHsgdHlwZTogJ0ZlYXR1cmUnLCBpZCwgLi4uZmVhdHVyZSB9IDogZmVhdHVyZSkpO1xuICAgIH0pO1xuICAgIGZvciAoY29uc3QgZiBvZiBleHRyYSkgcGFydHMucHVzaChKU09OLnN0cmluZ2lmeShmKSk7XG4gICAgcmV0dXJuIGZlYXR1cmVDb2xsZWN0aW9uSnNvbihwYXJ0cywgdGhpcy5oaWVyYXJjaHksIHRoaXMuc3R5bGUpO1xuICB9XG5cbiAgLyoqXG4gICAqIEZlYXR1cmUgYGlgJ3MgbGFiZWwgcG9pbnRzIChvbmUgcGVyIHBhcnQgd2l0aCByb29tIGZvciBhIGxhYmVsIGF0IGBsZXZlbGA6IGEgcGFydCB1bmRlciB0aGVcbiAgICogbGV2ZWwncyBtaW5pbXVtIGV4dGVudCBpcyBub3QgZHJhd24gdGhlcmUpLCBmcm9tIHRoZSBleGFjdCBnZW9tZXRyeSwgY29tcHV0ZWQgb25jZS5cbiAgICovXG4gIHByaXZhdGUgbGFiZWxzQXQoaTogbnVtYmVyLCBsZXZlbDogbnVtYmVyKTogRmxvYXQzMkFycmF5IHwgbnVsbCB7XG4gICAgaWYgKHRoaXMub3BlbltpXSB8fCAhdGhpcy5sYWJlbHNbaV0pIHJldHVybiBudWxsO1xuICAgIGxldCBwb2ludHMgPSB0aGlzLmxhYmVsUG9pbnRzLmdldChpKTtcbiAgICBpZiAoIXBvaW50cykge1xuICAgICAgY29uc3Qgb3V0OiBudW1iZXJbXSA9IFtdO1xuICAgICAgZm9yIChjb25zdCBwYXJ0IG9mIHRoaXMucGFydHNbaV0pIHtcbiAgICAgICAgY29uc3QgcG9sZSA9IHBvbHlsYWJlbChwYXJ0Lm1hcCgocikgPT4gdGhpcy5yaW5nc1tpXVtyXSkpO1xuICAgICAgICBpZiAocG9sZSAmJiBwb2xlLmRpc3RhbmNlID4gMCkgb3V0LnB1c2gocG9sZS54LCBwb2xlLnksIHBvbGUuZGlzdGFuY2UpO1xuICAgICAgfVxuICAgICAgcG9pbnRzID0gRmxvYXQzMkFycmF5LmZyb20ob3V0KTtcbiAgICAgIHRoaXMubGFiZWxQb2ludHMuc2V0KGksIHBvaW50cyk7XG4gICAgfVxuICAgIGNvbnN0IG1pbiA9IGxldmVsTWluRXh0ZW50KGxldmVsKSAvIDI7XG4gICAgaWYgKCFtaW4pIHJldHVybiBwb2ludHMubGVuZ3RoID8gcG9pbnRzIDogbnVsbDtcbiAgICBjb25zdCBrZXB0OiBudW1iZXJbXSA9IFtdO1xuICAgIGZvciAobGV0IGsgPSAwOyBrICsgMiA8IHBvaW50cy5sZW5ndGg7IGsgKz0gMylcbiAgICAgIGlmIChwb2ludHNbayArIDJdID49IG1pbikga2VwdC5wdXNoKHBvaW50c1trXSwgcG9pbnRzW2sgKyAxXSwgcG9pbnRzW2sgKyAyXSk7XG4gICAgcmV0dXJuIGtlcHQubGVuZ3RoID8gRmxvYXQzMkFycmF5LmZyb20oa2VwdCkgOiBudWxsO1xuICB9XG5cbiAgLyoqIEZlYXR1cmUgYGlgJ3MgcmluZ3MgYXQgYGxldmVsYCwgc2ltcGxpZmllZCBvbmNlIGFuZCBjYWNoZWQuICovXG4gIHByaXZhdGUgcmluZ3NBdChpOiBudW1iZXIsIGxldmVsOiBudW1iZXIpOiBGbG9hdDMyQXJyYXlbXSB7XG4gICAgY29uc3Qga2V5ID0gYCR7bGV2ZWx9LyR7aX1gO1xuICAgIGxldCByaW5ncyA9IHRoaXMuc2ltcGxpZmllZC5nZXQoa2V5KTtcbiAgICBpZiAoIXJpbmdzKSB7XG4gICAgICByaW5ncyA9IHNpbXBsaWZ5UmluZ3ModGhpcy5yaW5nc1tpXSwgdGhpcy5vcGVuW2ldLCBsZXZlbCk7XG4gICAgICBpZiAodGhpcy5zaW1wbGlmaWVkLnNpemUgPj0gU0lNUExJRklFRF9DQUNIRV9MSU1JVCkge1xuICAgICAgICBjb25zdCBvbGRlc3QgPSB0aGlzLnNpbXBsaWZpZWQua2V5cygpLm5leHQoKS52YWx1ZSBhcyBzdHJpbmc7XG4gICAgICAgIHRoaXMuc2ltcGxpZmllZC5kZWxldGUob2xkZXN0KTtcbiAgICAgIH1cbiAgICAgIHRoaXMuc2ltcGxpZmllZC5zZXQoa2V5LCByaW5ncyk7XG4gICAgfVxuICAgIHJldHVybiByaW5ncztcbiAgfVxuXG4gIC8qKiBFbnRyaWVzIGluIHBsYW5lIGB6YCdzIGxldmVsLWBsZXZlbGAgaW5kZXg6IGNlbGwgbGlzdGluZ3MgcGx1cyB3aWRlIGZlYXR1cmVzICh0ZXN0cykuICovXG4gIGluZGV4RW50cmllcyh6OiBudW1iZXIsIGxldmVsOiBudW1iZXIpOiBudW1iZXIge1xuICAgIGNvbnN0IHsgY2VsbHMsIHdpZGUgfSA9IHRoaXMuYnVja2V0c0Zvcih6LCBsZXZlbCk7XG4gICAgbGV0IG4gPSB3aWRlLmxlbmd0aDtcbiAgICBmb3IgKGNvbnN0IGxpc3Qgb2YgY2VsbHMudmFsdWVzKCkpIG4gKz0gbGlzdC5sZW5ndGg7XG4gICAgcmV0dXJuIG47XG4gIH1cblxuICAvKipcbiAgICogUGxhbmUgYHpgJ3MgbGV2ZWwtYGxldmVsYCBpbmRleCwgYnVpbHQgb24gZmlyc3QgdXNlOiBmZWF0dXJlcyBieSB0aWxlIGNlbGwgKGBneC9neWAg4oaSIGZlYXR1cmVcbiAgICogaW5kaWNlcyksIGFuZCB0aGUgd2lkZSBvbmVzIChtb3JlIHRoYW4ge0BsaW5rIE1BWF9DRUxMU19QRVJfRkVBVFVSRX0gY2VsbHMsIG9yIHBhc3QgdGhlXG4gICAqIG51bWJlciByYW5nZSksIHRlc3RlZCBhZ2FpbnN0IGEgdGlsZSB3aGVuIGl0IGlzIGFza2VkIGZvci5cbiAgICovXG4gIHByaXZhdGUgYnVja2V0c0Zvcih6OiBudW1iZXIsIGxldmVsOiBudW1iZXIpOiBMZXZlbEluZGV4IHtcbiAgICBjb25zdCBrZXkgPSBgJHt6fS8ke2xldmVsfWA7XG4gICAgbGV0IGluZGV4ID0gdGhpcy5idWNrZXRzLmdldChrZXkpO1xuICAgIGlmIChpbmRleCkgcmV0dXJuIGluZGV4O1xuICAgIGNvbnN0IGNlbGxzID0gbmV3IE1hcDxzdHJpbmcsIG51bWJlcltdPigpO1xuICAgIGNvbnN0IHdpZGU6IG51bWJlcltdID0gW107XG4gICAgY29uc3Qgc2l6ZSA9IGxldmVsVGlsZVNpemUobGV2ZWwsIHRoaXMudGlsZVNpemUpO1xuICAgIGNvbnN0IG1pbkV4dGVudCA9IGxldmVsTWluRXh0ZW50KGxldmVsKTtcbiAgICBmb3IgKGxldCBpID0gMDsgaSA8IHRoaXMuaWRzLmxlbmd0aDsgaSsrKSB7XG4gICAgICBpZiAodGhpcy5wbGFuZXNbaV0gIT09IHogfHwgIXRoaXMucmluZ3NbaV0ubGVuZ3RoKSBjb250aW51ZTtcbiAgICAgIGNvbnN0IGIgPSB0aGlzLmJveGVzW2ldO1xuICAgICAgaWYgKE1hdGgubWF4KGJbMl0gLSBiWzBdLCBiWzNdIC0gYlsxXSkgPCBtaW5FeHRlbnQpIGNvbnRpbnVlO1xuICAgICAgY29uc3QgZ3gwID0gTWF0aC5mbG9vcihiWzBdIC8gc2l6ZSksXG4gICAgICAgIGd4MSA9IE1hdGguZmxvb3IoYlsyXSAvIHNpemUpLFxuICAgICAgICBneTAgPSBNYXRoLmZsb29yKGJbMV0gLyBzaXplKSxcbiAgICAgICAgZ3kxID0gTWF0aC5mbG9vcihiWzNdIC8gc2l6ZSk7XG4gICAgICAvLyBBIGJveCB3aXRoIGEgTmFOIGNvb3JkaW5hdGUgbWVldHMgbm8gdGlsZS5cbiAgICAgIGlmIChbZ3gwLCBneDEsIGd5MCwgZ3kxXS5zb21lKE51bWJlci5pc05hTikpIGNvbnRpbnVlO1xuICAgICAgY29uc3QgY291bnQgPSAoZ3gxIC0gZ3gwICsgMSkgKiAoZ3kxIC0gZ3kwICsgMSk7XG4gICAgICBpZiAoIShjb3VudCA8PSBNQVhfQ0VMTFNfUEVSX0ZFQVRVUkUpIHx8ICFbZ3gwLCBneDEsIGd5MCwgZ3kxXS5ldmVyeShOdW1iZXIuaXNTYWZlSW50ZWdlcikpIHtcbiAgICAgICAgd2lkZS5wdXNoKGkpO1xuICAgICAgICBjb250aW51ZTtcbiAgICAgIH1cbiAgICAgIGZvciAobGV0IGd5ID0gZ3kwOyBneSA8PSBneTE7IGd5KyspIHtcbiAgICAgICAgZm9yIChsZXQgZ3ggPSBneDA7IGd4IDw9IGd4MTsgZ3grKykge1xuICAgICAgICAgIGNvbnN0IGlkID0gYCR7Z3h9LyR7Z3l9YDtcbiAgICAgICAgICBjb25zdCBsaXN0ID0gY2VsbHMuZ2V0KGlkKTtcbiAgICAgICAgICBpZiAobGlzdCkgbGlzdC5wdXNoKGkpO1xuICAgICAgICAgIGVsc2UgY2VsbHMuc2V0KGlkLCBbaV0pO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuICAgIGluZGV4ID0geyBjZWxscywgd2lkZSB9O1xuICAgIHRoaXMuYnVja2V0cy5zZXQoa2V5LCBpbmRleCk7XG4gICAgcmV0dXJuIGluZGV4O1xuICB9XG59XG5cbi8qKlxuICogQSBmZWF0dXJlIHNwYW5uaW5nIG1vcmUgdGlsZXMgdGhhbiB0aGlzIGlzIG5vdCBsaXN0ZWQgaW4gZWFjaCBvZiB0aGVtIGJ1dCBrZXB0IGFzaWRlIGFuZCB0ZXN0ZWRcbiAqIGFnYWluc3QgYSB0aWxlIHdoZW4gb25lIGlzIGFza2VkIGZvcjogb25lIGh1Z2UgYm94IChhbiBvdXRsaW5lIGFyb3VuZCBhIHdob2xlIHNsaWRlLCBvciBhIGNvcnJ1cHRcbiAqIGNvb3JkaW5hdGUpIG11c3Qgbm90IG1ha2UgYSBwbGFuZSdzIGluZGV4IG1pbGxpb25zIG9mIGVudHJpZXMuXG4gKi9cbmV4cG9ydCBjb25zdCBNQVhfQ0VMTFNfUEVSX0ZFQVRVUkUgPSA2NDtcblxuLyoqIEEgcGxhbmUncyBsZXZlbDogZmVhdHVyZXMgYnkgdGlsZSBjZWxsLCBhbmQgdGhlIHdpZGUgb25lcyAoYXNjZW5kaW5nKSwgdGVzdGVkIHBlciB0aWxlLiAqL1xuaW50ZXJmYWNlIExldmVsSW5kZXgge1xuICBjZWxsczogTWFwPHN0cmluZywgbnVtYmVyW10+O1xuICB3aWRlOiBudW1iZXJbXTtcbn1cblxuLyoqIFdoZXRoZXIgYm94IGBiYCBtZWV0cyBjZWxsIChneCwgZ3kpIG9mIHRpbGVzIGBzaXplYCBwaXhlbHMgd2lkZSwgYXMgYSBjZWxsIGxpc3RzIGl0LiAqL1xuZnVuY3Rpb24gY2VsbE1lZXRzKGI6IFJlYWRvbmx5PEJib3g+LCBzaXplOiBudW1iZXIsIGd4OiBudW1iZXIsIGd5OiBudW1iZXIpOiBib29sZWFuIHtcbiAgcmV0dXJuIChcbiAgICBNYXRoLmZsb29yKGJbMF0gLyBzaXplKSA8PSBneCAmJlxuICAgIGd4IDw9IE1hdGguZmxvb3IoYlsyXSAvIHNpemUpICYmXG4gICAgTWF0aC5mbG9vcihiWzFdIC8gc2l6ZSkgPD0gZ3kgJiZcbiAgICBneSA8PSBNYXRoLmZsb29yKGJbM10gLyBzaXplKVxuICApO1xufVxuXG4vKiogQSBmZWF0dXJlJ3Mgb3duIGlkIChgaWRgLCBlbHNlIGBwcm9wZXJ0aWVzLmlkYCkgYXMgYSBzdHJpbmcuICovXG5leHBvcnQgZnVuY3Rpb24gZmVhdHVyZUlkT2YoZmVhdHVyZTogR2VvSnNvbkZlYXR1cmVMaWtlKTogc3RyaW5nIHwgdW5kZWZpbmVkIHtcbiAgY29uc3QgaWQgPSBmZWF0dXJlPy5pZCA/PyBmZWF0dXJlPy5wcm9wZXJ0aWVzPy5pZDtcbiAgcmV0dXJuIHR5cGVvZiBpZCA9PT0gJ3N0cmluZycgfHwgdHlwZW9mIGlkID09PSAnbnVtYmVyJyA/IFN0cmluZyhpZCkgOiB1bmRlZmluZWQ7XG59XG5cbi8qKiBDbGFzcyBuYW1lIGFuZCBjb2xvdXIgZnJvbSBRdVBhdGgncyBgY2xhc3NpZmljYXRpb25gIChge25hbWUsIGNvbG9yfWAsIG9yIGEgYmFyZSBuYW1lKS4gKi9cbmZ1bmN0aW9uIGNsYXNzaWZpY2F0aW9uT2YoZmVhdHVyZTogR2VvSnNvbkZlYXR1cmVMaWtlKTogeyBsYWJlbDogc3RyaW5nIHwgbnVsbDsgY29sb3I6IHN0cmluZyB8IG51bGwgfSB7XG4gIGNvbnN0IGMgPSBmZWF0dXJlPy5wcm9wZXJ0aWVzPy5jbGFzc2lmaWNhdGlvbiBhcyB7IG5hbWU/OiBzdHJpbmc7IGNvbG9yPzogbnVtYmVyW10gfSB8IHN0cmluZyB8IHVuZGVmaW5lZDtcbiAgaWYgKCFjKSByZXR1cm4geyBsYWJlbDogJ0NlbGwnLCBjb2xvcjogbnVsbCB9O1xuICBpZiAodHlwZW9mIGMgPT09ICdzdHJpbmcnKSByZXR1cm4geyBsYWJlbDogYywgY29sb3I6IG51bGwgfTtcbiAgY29uc3QgY29sb3IgPVxuICAgIEFycmF5LmlzQXJyYXkoYy5jb2xvcikgJiYgYy5jb2xvci5sZW5ndGggPj0gMyA/IHJnYlRvSGV4KFtjLmNvbG9yWzBdLCBjLmNvbG9yWzFdLCBjLmNvbG9yWzJdXSkgOiBudWxsO1xuICByZXR1cm4geyBsYWJlbDogYy5uYW1lID8/IG51bGwsIGNvbG9yIH07XG59XG5cbi8qKlxuICogQSBmZWF0dXJlJ3MgcmluZ3MsIGludGVybGVhdmVkLCB3aXRob3V0IHRoZSBjbG9zaW5nIHZlcnRleDsgd2hldGhlciBpdCBpcyBhIHBvbHlsaW5lOyBhbmQgaXRzXG4gKiBwYXJ0cyBhcyByaW5nIGluZGljZXMgKGVhY2ggcGFydCdzIGV4dGVyaW9yIGZpcnN0LCB0aGVuIGl0cyBob2xlcykuXG4gKi9cbmZ1bmN0aW9uIHJpbmdzT2YoZmVhdHVyZTogR2VvSnNvbkZlYXR1cmVMaWtlKTogeyByaW5nczogRmxvYXQ2NEFycmF5W107IG9wZW46IGJvb2xlYW47IHBhcnRzOiBudW1iZXJbXVtdIH0ge1xuICBjb25zdCBnID0gZmVhdHVyZT8uZ2VvbWV0cnk7XG4gIGNvbnN0IGNvb3JkcyA9IGc/LmNvb3JkaW5hdGVzIGFzIHVua25vd247XG4gIGlmICghZyB8fCAhQXJyYXkuaXNBcnJheShjb29yZHMpKSByZXR1cm4geyByaW5nczogW10sIG9wZW46IGZhbHNlLCBwYXJ0czogW10gfTtcbiAgY29uc3QgcG9seWdvbnMgPSAobGlzdDogbnVtYmVyW11bXVtdW10pID0+IHtcbiAgICBjb25zdCByaW5nczogRmxvYXQ2NEFycmF5W10gPSBbXTtcbiAgICBjb25zdCBwYXJ0czogbnVtYmVyW11bXSA9IFtdO1xuICAgIGZvciAoY29uc3QgcG9seWdvbiBvZiBsaXN0KSB7XG4gICAgICBjb25zdCBwYXJ0OiBudW1iZXJbXSA9IFtdO1xuICAgICAgZm9yIChjb25zdCByIG9mIHBvbHlnb24pIHtcbiAgICAgICAgcGFydC5wdXNoKHJpbmdzLmxlbmd0aCk7XG4gICAgICAgIHJpbmdzLnB1c2goZmxhdFJpbmcociwgdHJ1ZSkpO1xuICAgICAgfVxuICAgICAgaWYgKHBhcnQubGVuZ3RoKSBwYXJ0cy5wdXNoKHBhcnQpO1xuICAgIH1cbiAgICByZXR1cm4geyByaW5ncywgb3BlbjogZmFsc2UsIHBhcnRzIH07XG4gIH07XG4gIHN3aXRjaCAoZy50eXBlKSB7XG4gICAgY2FzZSAnUG9seWdvbic6XG4gICAgICByZXR1cm4gcG9seWdvbnMoW2Nvb3JkcyBhcyBudW1iZXJbXVtdW11dKTtcbiAgICBjYXNlICdNdWx0aVBvbHlnb24nOlxuICAgICAgcmV0dXJuIHBvbHlnb25zKGNvb3JkcyBhcyBudW1iZXJbXVtdW11bXSk7XG4gICAgY2FzZSAnTGluZVN0cmluZyc6XG4gICAgICByZXR1cm4geyByaW5nczogW2ZsYXRSaW5nKGNvb3JkcyBhcyBudW1iZXJbXVtdLCBmYWxzZSldLCBvcGVuOiB0cnVlLCBwYXJ0czogW10gfTtcbiAgICBjYXNlICdNdWx0aUxpbmVTdHJpbmcnOlxuICAgICAgcmV0dXJuIHsgcmluZ3M6IChjb29yZHMgYXMgbnVtYmVyW11bXVtdKS5tYXAoKHIpID0+IGZsYXRSaW5nKHIsIGZhbHNlKSksIG9wZW46IHRydWUsIHBhcnRzOiBbXSB9O1xuICAgIGRlZmF1bHQ6XG4gICAgICByZXR1cm4geyByaW5nczogW10sIG9wZW46IGZhbHNlLCBwYXJ0czogW10gfTtcbiAgfVxufVxuXG4vKipcbiAqIEEgRmVhdHVyZUNvbGxlY3Rpb24gc3RyaW5nIG9mIGBmZWF0dXJlc2AgKGVhY2ggYSBmZWF0dXJlJ3MgSlNPTiksIHdpdGggdGhlIHNldCdzIGNsYXNzIGhpZXJhcmNoeVxuICogYW5kIHN0eWxlIGFzIGl0cyBgY2xhc3NIaWVyYXJjaHlgIGFuZCBgc3R5bGVgIG1lbWJlcnMgd2hlbiBpdCBoYXMgdGhlbTogd2hhdFxuICoge0BsaW5rIFJlZ2lvbkZlYXR1cmVUYWJsZS5mcm9tR2VvSnNvbn0gcmVhZHMgYmFjay5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGZlYXR1cmVDb2xsZWN0aW9uSnNvbihcbiAgZmVhdHVyZXM6IHJlYWRvbmx5IHN0cmluZ1tdLFxuICBoaWVyYXJjaHk/OiByZWFkb25seSBSZWdpb25DbGFzc05vZGVbXSxcbiAgc3R5bGU/OiBSZWdpb25Tb3VyY2VTdHlsZSxcbik6IHN0cmluZyB7XG4gIGNvbnN0IGhlYWQgPSBbJ1widHlwZVwiOlwiRmVhdHVyZUNvbGxlY3Rpb25cIiddO1xuICBpZiAoaGllcmFyY2h5Py5sZW5ndGgpIGhlYWQucHVzaChgXCJjbGFzc0hpZXJhcmNoeVwiOiR7SlNPTi5zdHJpbmdpZnkoaGllcmFyY2h5KX1gKTtcbiAgaWYgKHN0eWxlKSBoZWFkLnB1c2goYFwic3R5bGVcIjoke0pTT04uc3RyaW5naWZ5KHN0eWxlKX1gKTtcbiAgcmV0dXJuIGB7JHtoZWFkLmpvaW4oJywnKX0sXCJmZWF0dXJlc1wiOlske2ZlYXR1cmVzLmpvaW4oJywnKX1dfWA7XG59XG5cbi8qKiBBIHdlbGwtZm9ybWVkIGNsYXNzIGhpZXJhcmNoeSBmcm9tIGEgZmlsZSAoY29sb3VycyBhcyBgI3JyZ2diYmAgb3IgYFtyLCBnLCBiXWApLCBlbHNlIHVuZGVmaW5lZC4gKi9cbmV4cG9ydCBmdW5jdGlvbiByZWFkSGllcmFyY2h5KHJhdzogdW5rbm93bik6IFJlZ2lvbkNsYXNzTm9kZVtdIHwgdW5kZWZpbmVkIHtcbiAgaWYgKCFBcnJheS5pc0FycmF5KHJhdykpIHJldHVybiB1bmRlZmluZWQ7XG4gIGNvbnN0IG91dDogUmVnaW9uQ2xhc3NOb2RlW10gPSBbXTtcbiAgZm9yIChjb25zdCBuIG9mIHJhdyBhcyBBcnJheTxSZWNvcmQ8c3RyaW5nLCB1bmtub3duPj4pIHtcbiAgICBpZiAoIW4gfHwgdHlwZW9mIG4ubmFtZSAhPT0gJ3N0cmluZycpIGNvbnRpbnVlO1xuICAgIGNvbnN0IGNvbG9yID0gQXJyYXkuaXNBcnJheShuLmNvbG9yKSA/IHJnYlRvSGV4KFsrbi5jb2xvclswXSwgK24uY29sb3JbMV0sICtuLmNvbG9yWzJdXSkgOiBuLmNvbG9yO1xuICAgIG91dC5wdXNoKHtcbiAgICAgIG5hbWU6IG4ubmFtZSxcbiAgICAgIC4uLih0eXBlb2Ygbi50aXRsZSA9PT0gJ3N0cmluZycgPyB7IHRpdGxlOiBuLnRpdGxlIH0gOiB7fSksXG4gICAgICAuLi4odHlwZW9mIG4ucGFyZW50ID09PSAnc3RyaW5nJyA/IHsgcGFyZW50OiBuLnBhcmVudCB9IDoge30pLFxuICAgICAgLi4uKHR5cGVvZiBjb2xvciA9PT0gJ3N0cmluZycgPyB7IGNvbG9yIH0gOiB7fSksXG4gICAgICAuLi4odHlwZW9mIG4ub3JkZXIgPT09ICdudW1iZXInID8geyBvcmRlcjogbi5vcmRlciB9IDoge30pLFxuICAgIH0pO1xuICB9XG4gIHJldHVybiBvdXQubGVuZ3RoID8gb3V0IDogdW5kZWZpbmVkO1xufVxuXG4vKiogQSB3ZWxsLWZvcm1lZCBzdHlsZSBoaW50IGZyb20gYSBmaWxlLCBlbHNlIHVuZGVmaW5lZC4gKi9cbmV4cG9ydCBmdW5jdGlvbiByZWFkU3R5bGUocmF3OiB1bmtub3duKTogUmVnaW9uU291cmNlU3R5bGUgfCB1bmRlZmluZWQge1xuICBpZiAoIXJhdyB8fCB0eXBlb2YgcmF3ICE9PSAnb2JqZWN0JykgcmV0dXJuIHVuZGVmaW5lZDtcbiAgY29uc3QgciA9IHJhdyBhcyBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPjtcbiAgY29uc3Qgc3R5bGU6IFJlZ2lvblNvdXJjZVN0eWxlID0ge307XG4gIGlmICh0eXBlb2Ygci5maWxsT3BhY2l0eSA9PT0gJ251bWJlcicpIHN0eWxlLmZpbGxPcGFjaXR5ID0gTWF0aC5tYXgoMCwgTWF0aC5taW4oMSwgci5maWxsT3BhY2l0eSkpO1xuICBpZiAodHlwZW9mIHIuc3Ryb2tlID09PSAnc3RyaW5nJykgc3R5bGUuc3Ryb2tlID0gci5zdHJva2U7XG4gIGlmICh0eXBlb2Ygci5zdHJva2VXaWR0aCA9PT0gJ251bWJlcicgJiYgci5zdHJva2VXaWR0aCA+IDApIHN0eWxlLnN0cm9rZVdpZHRoID0gci5zdHJva2VXaWR0aDtcbiAgaWYgKHR5cGVvZiByLmxhYmVscyA9PT0gJ2Jvb2xlYW4nKSBzdHlsZS5sYWJlbHMgPSByLmxhYmVscztcbiAgaWYgKHR5cGVvZiByLmhpZ2hsaWdodCA9PT0gJ3N0cmluZycpIHN0eWxlLmhpZ2hsaWdodCA9IHIuaGlnaGxpZ2h0O1xuICByZXR1cm4gT2JqZWN0LmtleXMoc3R5bGUpLmxlbmd0aCA/IHN0eWxlIDogdW5kZWZpbmVkO1xufVxuXG5mdW5jdGlvbiBmbGF0UmluZyhwb2ludHM6IG51bWJlcltdW10sIGNsb3NlZDogYm9vbGVhbik6IEZsb2F0NjRBcnJheSB7XG4gIGxldCBuID0gcG9pbnRzPy5sZW5ndGggPz8gMDtcbiAgaWYgKGNsb3NlZCAmJiBuID4gMSkge1xuICAgIGNvbnN0IGEgPSBwb2ludHNbMF0sXG4gICAgICBiID0gcG9pbnRzW24gLSAxXTtcbiAgICBpZiAoYVswXSA9PT0gYlswXSAmJiBhWzFdID09PSBiWzFdKSBuLS07XG4gIH1cbiAgY29uc3Qgb3V0ID0gbmV3IEZsb2F0NjRBcnJheShuICogMik7XG4gIGZvciAobGV0IGkgPSAwOyBpIDwgbjsgaSsrKSB7XG4gICAgb3V0WzIgKiBpXSA9ICtwb2ludHNbaV1bMF07XG4gICAgb3V0WzIgKiBpICsgMV0gPSArcG9pbnRzW2ldWzFdO1xuICB9XG4gIHJldHVybiBvdXQ7XG59XG5cbmZ1bmN0aW9uIHJpbmdzQm94KHJpbmdzOiByZWFkb25seSBGbG9hdDY0QXJyYXlbXSk6IEJib3gge1xuICBsZXQgeDAgPSBJbmZpbml0eSxcbiAgICB5MCA9IEluZmluaXR5LFxuICAgIHgxID0gLUluZmluaXR5LFxuICAgIHkxID0gLUluZmluaXR5O1xuICBmb3IgKGNvbnN0IHIgb2YgcmluZ3MpIHtcbiAgICBmb3IgKGxldCBpID0gMDsgaSArIDEgPCByLmxlbmd0aDsgaSArPSAyKSB7XG4gICAgICBpZiAocltpXSA8IHgwKSB4MCA9IHJbaV07XG4gICAgICBpZiAocltpXSA+IHgxKSB4MSA9IHJbaV07XG4gICAgICBpZiAocltpICsgMV0gPCB5MCkgeTAgPSByW2kgKyAxXTtcbiAgICAgIGlmIChyW2kgKyAxXSA+IHkxKSB5MSA9IHJbaSArIDFdO1xuICAgIH1cbiAgfVxuICByZXR1cm4gW3gwLCB5MCwgeDEsIHkxXTtcbn1cbiJdfQ==