@jax-data-science/sci-image-visualizer 0.17.0 → 0.18.1

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 (121) hide show
  1. package/esm2022/lib/contracts/display-types.mjs +3 -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 +81 -15
  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 +325 -18
  17. package/esm2022/lib/implementations/napari-js/napari-spatial-3d-transcripts.mjs +182 -24
  18. package/esm2022/lib/implementations/napari-js/napari-spatial-hover.mjs +95 -5
  19. package/esm2022/lib/implementations/napari-js/napari-spatial-scene.mjs +15 -1
  20. package/esm2022/lib/implementations/napari-js/napari-spatial-tiles.mjs +30 -2
  21. package/esm2022/lib/implementations/napari-js/napari-visualizer.service.mjs +40 -1
  22. package/esm2022/lib/implementations/napari-js/napari-volume-region-meshes.mjs +111 -28
  23. package/esm2022/lib/implementations/napari-js/napari-volume-scene.mjs +14 -2
  24. package/esm2022/lib/implementations/napari-js/spatial-tiles/cell-layers.mjs +180 -48
  25. package/esm2022/lib/implementations/napari-js/spatial-tiles/transcript-layers.mjs +28 -8
  26. package/esm2022/lib/implementations/osd/osd-region-overlay.mjs +2 -2
  27. package/esm2022/lib/implementations/spatial-data-http/spatial-data-http.service.mjs +10 -1
  28. package/esm2022/lib/region-editor/class-tree/class-tree.component.mjs +30 -3
  29. package/esm2022/lib/region-editor/classes-panel/classes-panel.component.mjs +15 -3
  30. package/esm2022/lib/region-editor/region-editor.component.mjs +24 -4
  31. package/esm2022/lib/region-source/region-source-ops.mjs +7 -1
  32. package/esm2022/lib/region-source/region-tiles.mjs +1 -1
  33. package/esm2022/lib/region-source/worker-region-source.mjs +24 -1
  34. package/esm2022/lib/routing-visualizer.service.mjs +404 -7
  35. package/esm2022/lib/spatial/observations-in-selection.mjs +83 -0
  36. package/esm2022/lib/spatial/plane-cells.mjs +119 -0
  37. package/esm2022/lib/spatial/spatial-controls.facade.mjs +298 -5
  38. package/esm2022/lib/spatial/spatial-encoding.mjs +35 -3
  39. package/esm2022/lib/spatial/spatial-hover.mjs +34 -1
  40. package/esm2022/lib/spatial/spatial-planes.mjs +49 -0
  41. package/esm2022/lib/spatial/spatial-selection.mjs +2 -2
  42. package/esm2022/lib/spatial/spatial-tile-merge.mjs +38 -1
  43. package/esm2022/lib/spatial/transcripts-in-selection.mjs +208 -0
  44. package/esm2022/lib/spatial-controls/spatial-cells-panel/spatial-cells-panel.component.mjs +42 -65
  45. package/esm2022/lib/spatial-controls/spatial-color-by/spatial-color-by.component.mjs +187 -0
  46. package/esm2022/lib/spatial-controls/spatial-controls.component.mjs +47 -12
  47. package/esm2022/lib/spatial-controls/spatial-gene-tree/spatial-gene-tree.component.mjs +3 -3
  48. package/esm2022/lib/spatial-controls/spatial-groups-panel/spatial-groups-panel.component.mjs +38 -10
  49. package/esm2022/lib/spatial-controls/spatial-key/spatial-key.component.mjs +3 -3
  50. package/esm2022/lib/spatial-controls/spatial-marker-genes-form/spatial-marker-genes-form.component.mjs +3 -3
  51. package/esm2022/lib/spatial-controls/spatial-observations-panel/spatial-observations-panel.component.mjs +79 -57
  52. package/esm2022/lib/spatial-controls/spatial-selection-observations/spatial-selection-observations.component.mjs +101 -0
  53. package/esm2022/lib/spatial-controls/spatial-selection-transcripts/spatial-selection-transcripts.component.mjs +94 -0
  54. package/esm2022/lib/spatial-controls/spatial-transcripts-panel/spatial-transcripts-panel.component.mjs +9 -3
  55. package/esm2022/lib/store/region-source-scope.mjs +10 -1
  56. package/esm2022/lib/store/region-store.service.mjs +33 -2
  57. package/esm2022/lib/toolbar/toolbar.component.mjs +10 -3
  58. package/esm2022/lib/visualizer/spatial-region-set.mjs +95 -0
  59. package/esm2022/lib/visualizer.component.mjs +40 -4
  60. package/fesm2022/{jax-data-science-sci-image-visualizer-jax-data-science-sci-image-visualizer-DHrHO2ay.mjs → jax-data-science-sci-image-visualizer-jax-data-science-sci-image-visualizer-YrNqv8wH.mjs} +4521 -759
  61. package/fesm2022/jax-data-science-sci-image-visualizer-jax-data-science-sci-image-visualizer-YrNqv8wH.mjs.map +1 -0
  62. package/fesm2022/{jax-data-science-sci-image-visualizer-onnx-sam-session-CKEUwNta.mjs → jax-data-science-sci-image-visualizer-onnx-sam-session-Dph35S7m.mjs} +2 -2
  63. package/fesm2022/{jax-data-science-sci-image-visualizer-onnx-sam-session-CKEUwNta.mjs.map → jax-data-science-sci-image-visualizer-onnx-sam-session-Dph35S7m.mjs.map} +1 -1
  64. package/fesm2022/jax-data-science-sci-image-visualizer.mjs +1 -1
  65. package/fesm2022/region-source.worker.js +84 -2
  66. package/lib/contracts/display-types.d.ts +90 -4
  67. package/lib/contracts/image.contract.d.ts +6 -0
  68. package/lib/contracts/ports/spatial-data.port.d.ts +7 -0
  69. package/lib/contracts/region-editor-api.contract.d.ts +9 -0
  70. package/lib/contracts/region-store.contract.d.ts +6 -0
  71. package/lib/contracts/spatial-dataset.contract.d.ts +7 -1
  72. package/lib/contracts/visualizer.contract.d.ts +43 -1
  73. package/lib/geometry/cell-meshes.d.ts +27 -0
  74. package/lib/geometry/place.d.ts +45 -0
  75. package/lib/implementations/napari-js/napari-camera-depth.d.ts +23 -0
  76. package/lib/implementations/napari-js/napari-loading-state.d.ts +1 -1
  77. package/lib/implementations/napari-js/napari-scene.d.ts +12 -0
  78. package/lib/implementations/napari-js/napari-spatial-2d-scene.d.ts +19 -3
  79. package/lib/implementations/napari-js/napari-spatial-3d-cells.d.ts +141 -0
  80. package/lib/implementations/napari-js/napari-spatial-3d-scene.d.ts +87 -0
  81. package/lib/implementations/napari-js/napari-spatial-3d-transcripts.d.ts +49 -8
  82. package/lib/implementations/napari-js/napari-spatial-hover.d.ts +22 -0
  83. package/lib/implementations/napari-js/napari-spatial-scene.d.ts +12 -0
  84. package/lib/implementations/napari-js/napari-spatial-tiles.d.ts +15 -0
  85. package/lib/implementations/napari-js/napari-visualizer.service.d.ts +27 -1
  86. package/lib/implementations/napari-js/napari-volume-region-meshes.d.ts +38 -19
  87. package/lib/implementations/napari-js/napari-volume-scene.d.ts +2 -0
  88. package/lib/implementations/napari-js/spatial-tiles/cell-layers.d.ts +53 -0
  89. package/lib/implementations/napari-js/spatial-tiles/transcript-layers.d.ts +11 -2
  90. package/lib/implementations/spatial-data-http/spatial-data-http.service.d.ts +7 -0
  91. package/lib/region-editor/class-tree/class-tree.component.d.ts +16 -1
  92. package/lib/region-editor/classes-panel/classes-panel.component.d.ts +10 -1
  93. package/lib/region-editor/region-editor.component.d.ts +4 -0
  94. package/lib/region-source/region-source-ops.d.ts +12 -0
  95. package/lib/region-source/region-tiles.d.ts +8 -0
  96. package/lib/region-source/worker-region-source.d.ts +18 -0
  97. package/lib/routing-visualizer.service.d.ts +140 -1
  98. package/lib/spatial/observations-in-selection.d.ts +43 -0
  99. package/lib/spatial/plane-cells.d.ts +37 -0
  100. package/lib/spatial/spatial-controls.facade.d.ts +59 -0
  101. package/lib/spatial/spatial-encoding.d.ts +14 -1
  102. package/lib/spatial/spatial-hover.d.ts +23 -0
  103. package/lib/spatial/spatial-planes.d.ts +22 -0
  104. package/lib/spatial/spatial-selection.d.ts +2 -1
  105. package/lib/spatial/spatial-tile-merge.d.ts +9 -0
  106. package/lib/spatial/transcripts-in-selection.d.ts +95 -0
  107. package/lib/spatial-controls/spatial-cells-panel/spatial-cells-panel.component.d.ts +19 -28
  108. package/lib/spatial-controls/spatial-color-by/spatial-color-by.component.d.ts +64 -0
  109. package/lib/spatial-controls/spatial-controls.component.d.ts +17 -2
  110. package/lib/spatial-controls/spatial-groups-panel/spatial-groups-panel.component.d.ts +16 -6
  111. package/lib/spatial-controls/spatial-observations-panel/spatial-observations-panel.component.d.ts +26 -23
  112. package/lib/spatial-controls/spatial-selection-observations/spatial-selection-observations.component.d.ts +48 -0
  113. package/lib/spatial-controls/spatial-selection-transcripts/spatial-selection-transcripts.component.d.ts +43 -0
  114. package/lib/spatial-controls/spatial-transcripts-panel/spatial-transcripts-panel.component.d.ts +3 -1
  115. package/lib/store/region-source-scope.d.ts +4 -0
  116. package/lib/store/region-store.service.d.ts +21 -0
  117. package/lib/toolbar/toolbar.component.d.ts +6 -1
  118. package/lib/visualizer/spatial-region-set.d.ts +55 -0
  119. package/lib/visualizer.component.d.ts +14 -0
  120. package/package.json +1 -1
  121. package/fesm2022/jax-data-science-sci-image-visualizer-jax-data-science-sci-image-visualizer-DHrHO2ay.mjs.map +0 -1
@@ -204,7 +204,7 @@ export class NapariRegionOverlay {
204
204
  this.renderer = new NapariRegionSvgRenderer(this.svg, this.store, (r) => this.draws(r));
205
205
  this.projection = new OverlayProjection(this.svg, this.viewer);
206
206
  this.sourceLayer =
207
- opts.regionSource === false ? null : new RegionSourceLayer(this.svg, this.store.getRegionSourceView$());
207
+ opts.regionSource === false ? null : new RegionSourceLayer(this.svg, this.store.getDrawnRegionSourceView$());
208
208
  this.svg.addEventListener('pointerdown', this.onPointerDown);
209
209
  this.svg.addEventListener('pointermove', this.onPointerMove);
210
210
  this.svg.addEventListener('pointerup', this.onPointerUp);
@@ -517,4 +517,4 @@ export class NapariRegionOverlay {
517
517
  });
518
518
  }
519
519
  }
520
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibmFwYXJpLXJlZ2lvbi1vdmVybGF5LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vc3JjL2xpYi9pbXBsZW1lbnRhdGlvbnMvbmFwYXJpLWpzL25hcGFyaS1yZWdpb24tb3ZlcmxheS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsWUFBWSxFQUFFLE1BQU0sTUFBTSxDQUFDO0FBR3BDLE9BQU8sRUFBRSxNQUFNLEVBQUUsU0FBUyxFQUFFLE9BQU8sRUFBRSxNQUFNLHFCQUFxQixDQUFDO0FBR2pFLE9BQU8sRUFBRSxpQkFBaUIsRUFBRSxvQkFBb0IsRUFBRSxNQUFNLDBDQUEwQyxDQUFDO0FBRW5HLE9BQU8sRUFDTCxTQUFTLEVBQ1QsV0FBVyxFQUNYLGFBQWEsRUFDYixjQUFjLEVBQ2QsYUFBYSxHQUNkLE1BQU0sc0NBQXNDLENBQUM7QUFFOUMsT0FBTyxFQUFXLHVCQUF1QixFQUFFLE1BQU0sc0NBQXNDLENBQUM7QUFDeEYsT0FBTyxFQUFFLGlCQUFpQixFQUFFLE1BQU0scUNBQXFDLENBQUM7QUFDeEUsT0FBTyxFQUFjLGVBQWUsRUFBRSxNQUFNLDhCQUE4QixDQUFDO0FBRTNFLE1BQU0sTUFBTSxHQUFHLDRCQUE0QixDQUFDO0FBQzVDOzs7Ozs7Ozs7R0FTRztBQUNILE1BQU0sZ0JBQWdCLEdBQUcsQ0FBQyxDQUFDO0FBQzNCOzs7Ozs7OztHQVFHO0FBQ0gsTUFBTSxnQkFBZ0IsR0FBRyxDQUFDLENBQUM7QUFDM0I7Ozs7R0FJRztBQUNILE1BQU0sY0FBYyxHQUFHLENBQUMsQ0FBQztBQUN6QixrR0FBa0c7QUFDbEcsTUFBTSxhQUFhLEdBQUcsRUFBRSxDQUFDO0FBQ3pCLDRFQUE0RTtBQUM1RSxNQUFNLGFBQWEsR0FBRyxDQUFDLENBQUM7QUFDeEIseUZBQXlGO0FBQ3pGLE1BQU0sZ0JBQWdCLEdBQUcsQ0FBQyxDQUFDO0FBNkIzQjs7Ozs7Ozs7Ozs7Ozs7Ozs7O0dBa0JHO0FBQ0gsTUFB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QUFJLENBQUMsY0FBYyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLFVBQVUsRUFBRSxDQUFDLENBQUMsQ0FBQyxFQUFFLEVBQUUsSUFBSSxDQUFDLFFBQVEsRUFBRTtZQUM3RixJQUFJLEVBQUUsSUFBSSxDQUFDLFNBQVM7WUFDcEIsSUFBSSxFQUFFLElBQUksQ0FBQyxTQUFTO1NBQ3JCLENBQUMsQ0FBQztJQUNMLENBQUM7Q0FDRiIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IFN1YnNjcmlwdGlvbiB9IGZyb20gJ3J4anMnO1xuXG5pbXBvcnQgeyBJUmVnaW9uT3ZlcmxheSwgUmVnaW9uVG9vbE1vZGUgfSBmcm9tICcuLi8uLi9jb250cmFjdHMvcmVnaW9uLW92ZXJsYXkuY29udHJhY3QnO1xuaW1wb3J0IHsgUmVnaW9uLCBSZWN0YW5nbGUsIFBvbHlnb24gfSBmcm9tICcuLi8uLi9tb2RlbHMvcmVnaW9uJztcbmltcG9ydCB7IFJlZ2lvblN0b3JlIH0gZnJvbSAnLi4vLi4vc3RvcmUvcmVnaW9uLXN0b3JlLnNlcnZpY2UnO1xuaW1wb3J0IHR5cGUgeyBBZmZpbmUgfSBmcm9tICcuLi8uLi9yZWdpb24tb3ZlcmxheS9zdmctcmVnaW9uLXJlbmRlcmVyJztcbmltcG9ydCB7IFJlZ2lvblNvdXJjZUxheWVyLCBTT1VSQ0VfTUFSUVVFRV9MSU1JVCB9IGZyb20gJy4uLy4uL3JlZ2lvbi1vdmVybGF5L3JlZ2lvbi1zb3VyY2UtbGF5ZXInO1xuXG5pbXBvcnQge1xuICBoaXRIYW5kbGUsXG4gIG5lYXJlc3RFZGdlLFxuICBuZWFyZXN0VmVydGV4LFxuICByZWdpb25Db250YWlucyxcbiAgcmVnaW9uc0luUmVjdCxcbn0gZnJvbSAnLi4vLi4vcmVnaW9uLW92ZXJsYXkvcmVnaW9uLWdlb21ldHJ5JztcblxuaW1wb3J0IHsgRHJhZ0JveCwgTmFwYXJpUmVnaW9uU3ZnUmVuZGVyZXIgfSBmcm9tICcuL3JlZ2lvbi1vdmVybGF5L3JlZ2lvbi1zdmctcmVuZGVyZXInO1xuaW1wb3J0IHsgT3ZlcmxheVByb2plY3Rpb24gfSBmcm9tICcuL3JlZ2lvbi1vdmVybGF5L292ZXJsYXktcHJvamVjdGlvbic7XG5pbXBvcnQgeyBSZWdpb25FZGl0LCBhcHBseVJlZ2lvbkVkaXQgfSBmcm9tICcuL3JlZ2lvbi1vdmVybGF5L3JlZ2lvbi1lZGl0JztcblxuY29uc3QgU1ZHX05TID0gJ2h0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnJztcbi8qKlxuICogTWluIGRyYWcgYmVmb3JlIGEgZnJlZWhhbmQgcGF0aCByZWNvcmRzIGFub3RoZXIgcG9pbnQsIGluIFNDUkVFTiBwaXhlbHMuXG4gKlxuICogU2NyZWVuIHJhdGhlciB0aGFuIHdvcmxkLCB3aGljaCBpcyB3aGF0IFwiMiBpbWFnZSBweFwiIGFsd2F5cyBtZWFudCBpbiBwcmFjdGljZTogYXQgMTAwJVxuICogem9vbSBvdmVyIGFuIGltYWdlIHRoZSB0d28gYXJlIHRoZSBzYW1lIHRoaW5nLiBUYWtlbiBhcyB3b3JsZCB1bml0cyBpdCBicmVha3Mgb24gYW55XG4gKiBkYXRhc2V0IHdob3NlIHdvcmxkIGlzIHNtYWxsIOKAlCBzZXFGSVNIJ3Mgc2FtcGxlIHNwYW5zIGFib3V0IDUgdW5pdHMsIHNvIGEgMi11bml0XG4gKiB0aHJlc2hvbGQgcmVjb3JkcyBhIHBvaW50IGV2ZXJ5IDQwJSBvZiB0aGUgd2F5IGFjcm9zcyBhbmQgYSBmcmVlaGFuZCBST0kgY29tZXMgb3V0IGFzIGFcbiAqIHRyaWFuZ2xlLiBBZ2FpbnN0IHRoZSBzY3JlZW4gaXQgYWxzbyBkb2VzIHRoZSByaWdodCB0aGluZyB1bmRlciB6b29tOiBkcmF3aW5nIHpvb21lZCBpblxuICogcmVjb3JkcyBhIGZpbmVyIHBhdGgsIGJlY2F1c2UgdGhhdCBpcyBleGFjdGx5IHdoZW4gdGhlIGV4dHJhIGRldGFpbCBpcyB2aXNpYmxlLlxuICovXG5jb25zdCBGUkVFSEFORF9TVEVQX1BYID0gMjtcbi8qKlxuICogU21hbGxlc3QgY29tbWl0dGVkIHJlY3RhbmdsZSwgaW4gU0NSRUVOIHBpeGVscyBvbiBlYWNoIHNpZGUuXG4gKlxuICogSXRzIGpvYiBpcyB0byB0aHJvdyBhd2F5IGEgY2xpY2sgdGhhdCB3YXMgbm90IGEgZHJhZy4gSGVsZCBpbiB3b3JsZCB1bml0cyDigJQgd2hpY2ggaXQgd2FzXG4gKiDigJQgaXQgaW5zdGVhZCB0aHJvd3MgYXdheSByZWFsIGRyYWdzIG9uIGFueSBkYXRhc2V0IHdob3NlIHdvcmxkIGlzIHNtYWxsOiBpbiBzZXFGSVNIJ3NcbiAqIH41IHggNyB1bml0IHNhbXBsZSBhIHJlY3RhbmdsZSBoYWQgdG8gY292ZXIgNDAlIG9mIHRoZSB3aWR0aCB0byBjb21taXQgYXQgYWxsLCBhbmRcbiAqIGFueXRoaW5nIHNtYWxsZXIgdmFuaXNoZWQgd2l0aCBubyBmZWVkYmFjay4gVGhhdCB3YXMgdGhlIGRpcmVjdCBjYXVzZSBvZiBST0lzIGJlaW5nXG4gKiBpbXBvc3NpYmxlIHRvIGNyZWF0ZSB0aGVyZS5cbiAqL1xuY29uc3QgTUlOX1JFQ1RfRFJBR19QWCA9IDI7XG4vKipcbiAqIEEgcnViYmVyIGJhbmQgc21hbGxlciB0aGFuIHRoaXMgb24gYm90aCBzaWRlcywgaW4gU0NSRUVOIHBpeGVscywgaXMgYSBjbGljayBvbiBlbXB0eSBzcGFjZVxuICogKGl0IGNsZWFycyB0aGUgc2VsZWN0aW9uKS4gU2NyZWVuIGZvciB0aGUgc2FtZSByZWFzb24gYXMge0BsaW5rIE1JTl9SRUNUX0RSQUdfUFh9OiAzIHdvcmxkXG4gKiB1bml0cyBpcyBvdmVyIGhhbGYgb2Ygc2VxRklTSCdzIHNhbXBsZS5cbiAqL1xuY29uc3QgTUlOX01BUlFVRUVfUFggPSAzO1xuLyoqIENsaWNrLWRpc3RhbmNlIChzY3JlZW4gcHgpIHdpdGhpbiB3aGljaCBhIHBvbHlnb24gY2xpY2sgc25hcHMgY2xvc2VkIG9udG8gdGhlIGZpcnN0IHZlcnRleC4gKi9cbmNvbnN0IENMT1NFX1NOQVBfUFggPSAxMDtcbi8qKiBTY3JlZW4tcHggaGl0IHJhZGl1cyBmb3IgZ3JhYmJpbmcgYSB2ZXJ0ZXggLyByZWN0YW5nbGUgY29ybmVyIGhhbmRsZS4gKi9cbmNvbnN0IEhBTkRMRV9ISVRfUFggPSA5O1xuLyoqIFNjcmVlbi1weCBkaXN0YW5jZSBmcm9tIGFuIG9wZW4gcG9seWxpbmUgd2l0aGluIHdoaWNoIGEgY2xpY2sgc2VsZWN0cyBpdCAoYXMgT1NEKS4gKi9cbmNvbnN0IE9QRU5fUEFUSF9ISVRfUFggPSA2O1xuXG4vKipcbiAqIFRoZSBzbGljZSBvZiB0aGUgbmFwYXJpIFZpZXdlciB0aGUgb3ZlcmxheSBuZWVkcyAoY29vcmQgdHJhbnNmb3JtcyArIGNvbnRyb2wgZ2F0aW5nKS5cbiAqXG4gKiBDT09SRElOQVRFIFNQQUNFUzogYGNhbnZhc1RvV29ybGRgIHRha2VzIENMSUVOVCBwaXhlbHMgKHZpZXdwb3J0IGNvb3JkaW5hdGVzLCBhcyBhIHBvaW50ZXJcbiAqIGV2ZW50J3MgYGNsaWVudFgvWWApLCBleGFjdGx5IGFzIG5hcGFyaS1qcyBgVmlld2VyLmNhbnZhc1RvV29ybGRgIGRvZXMuIGBjYW52YXNUcmFuc2Zvcm1gIGlzXG4gKiB0aGUgY2FtZXJhJ3Mgd29ybGQg4oaSIENBTlZBUy1MT0NBTCBDU1MtcGl4ZWwgYWZmaW5lLCBuYXBhcmktanMgYFZpZXdlci5jYW52YXNUcmFuc2Zvcm1gLCB3aGljaFxuICogcmVhZHMgbm8gbGF5b3V0OiBkcmF3aW5nIGFuZCBmb2xsb3dpbmcgdGhlIGNhbWVyYSB1c2UgaXQsIHNvIGEgY2FtZXJhIGZyYW1lIGNvc3RzIG9uZVxuICogYG1hdHJpeCguLi4pYCBhbmQgbm8gYGdldEJvdW5kaW5nQ2xpZW50UmVjdCgpYCAocmV2aWV3IE5BUEFSSS1CT1VOREFSWS0xMCkuIFRoZSBzdmcgY292ZXJzIHRoZVxuICogcGxvdCBob3N0IGFuZCB0aGUgY2FudmFzIGlzIHRoZSBob3N0J3MgaW4tZmxvdyBjaGlsZCBhdCBpdHMgdG9wLWxlZnQsIHNvIGNhbnZhcy1sb2NhbCBhbmRcbiAqIHN2Zy1sb2NhbCBwaXhlbHMgYXJlIHRoZSBzYW1lOyBhIHBvaW50ZXIncyBjbGllbnQgcGl4ZWxzIGFyZSBtYXBwZWQgaW50byB0aGUgc3ZnIGJ5IHRoZVxuICogb3ZlcmxheSBpdHNlbGYuXG4gKlxuICogRXhwb3J0ZWQgYmVjYXVzZSB0aGUgM0Qgc3BhdGlhbCBtb2RlIHN1cHBsaWVzIGEgU0NSRUVOLVNQQUNFIGltcGxlbWVudGF0aW9uIG9mIGl0OiB0aGVyZSB0aGVcbiAqIGRyYXduIHNoYXBlIGlzIGEgbGFzc28gaW4gY2FudmFzIHBpeGVscywgbm90IGEgcmVjdGFuZ2xlIGluIGltYWdlIHNwYWNlLCBzbyBcIndvcmxkXCIgaXMgdGhlXG4gKiBjYW52YXMgaXRzZWxmIOKAlCBgY2FudmFzVG9Xb3JsZGAgaXMgdGhlIGNsaWVudCDihpIgY2FudmFzIG9mZnNldCBhbmQgYGNhbnZhc1RyYW5zZm9ybWAgdGhlXG4gKiBpZGVudGl0eS4gVGhhdCBsZXRzIHRoZSAzRCB2aWV3IHJldXNlIHRoaXMgd2hvbGUgb3ZlcmxheSDigJQgZXZlcnkgdG9vbCwgdGhlIGhhbmRsZXMsIHRoZSBzdG9yZVxuICogcm91bmQtdHJpcCDigJQgd2l0aCBubyAzRC1zcGVjaWZpYyBkcmF3aW5nIGNvZGUuXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgT3ZlcmxheVZpZXdlciB7XG4gIC8qKiBDbGllbnQgcHgg4oaSIHdvcmxkLiAqL1xuICBjYW52YXNUb1dvcmxkKGNsaWVudFg6IG51bWJlciwgY2xpZW50WTogbnVtYmVyKTogW251bWJlciwgbnVtYmVyXTtcbiAgLyoqIFdvcmxkIOKGkiBjYW52YXMtbG9jYWwgKD0gc3ZnLWxvY2FsKSBDU1MgcHgsIGFzIGFuIFNWRyBhZmZpbmUgYFthLCBiLCBjLCBkLCBlLCBmXWAuICovXG4gIGNhbnZhc1RyYW5zZm9ybSgpOiBBZmZpbmU7XG4gIHNldENvbnRyb2xzRW5hYmxlZChlbmFibGVkOiBib29sZWFuKTogdm9pZDtcbiAgcmVhZG9ubHkgY2FtZXJhOiB7IHJlYWRvbmx5IGNoYW5nZWQ6IHsgY29ubmVjdChsaXN0ZW5lcjogKCkgPT4gdm9pZCk6ICgpID0+IHZvaWQgfSB9O1xufVxuXG4vKipcbiAqIFNWRyByZWdpb24gb3ZlcmxheSBmb3IgdGhlIG5hcGFyaS1qcyBXZWJHUFUgaW1hZ2UgdmlldyAoaml0LXVpIzEwMiksIG1pcnJvcmluZyB0aGUgT1NEIGJhY2tlbmQnc1xuICoge0BsaW5rIE9zZFJlZ2lvbk92ZXJsYXl9IGJ1dCBkcml2ZW4gYnkgbmFwYXJpJ3MgYGNhbnZhc1RvV29ybGRgL2BjYW52YXNUcmFuc2Zvcm1gIHRyYW5zZm9ybXNcbiAqIChzZWUge0BsaW5rIE92ZXJsYXlWaWV3ZXJ9IGZvciB0aGVpciBjb29yZGluYXRlIHNwYWNlcykuXG4gKiBWZWN0b3Igc2hhcGVzIGFyZSBkcmF3biBpbiBhbiBhYnNvbHV0ZWx5LXBvc2l0aW9uZWQgYDxzdmc+YCBvdmVyIHRoZSBjYW52YXMgKG5vIG5lZWQgdG8gcHVzaFxuICogdGhlbSB0aHJvdWdoIFdlYkdQVSkgYnkge0BsaW5rIE5hcGFyaVJlZ2lvblN2Z1JlbmRlcmVyfSBvdmVyIHRoZSBzaGFyZWQgYFN2Z1JlZ2lvblJlbmRlcmVyYDpcbiAqIGluIHdvcmxkIGNvb3JkaW5hdGVzIGluc2lkZSBvbmUgdHJhbnNmb3JtZWQgZ3JvdXAsIHJlYnVpbHQgb24gYSByZWdpb24gb3Igc2VsZWN0aW9uIGNoYW5nZSxcbiAqIHdoaWxlIGEgY2FtZXJhIG1vdmUgb25seSByZXdyaXRlcyB0aGUgdHJhbnNmb3JtIChuYXBhcmktanMncyBgY2FudmFzVHJhbnNmb3JtYCwgdGhlIGNhbWVyYVxuICogY2VudHJlL3pvb20pIGFuZCB0aGUgZmV3IHNjcmVlbi1zcGFjZSBoYW5kbGVzIGFuZCBsYWJlbHMuIFRoaXMgY2xhc3MgaXNcbiAqIHRoZSBnZXN0dXJlIGNvbnRyb2xsZXI6IHBvaW50ZXIgaGFuZGxlcnMsIHRoZSB0b29sIG1vZGUsIGFuZCB0aGUgZWRpdC9kcmFmdC9tYXJxdWVlIHN0YXRlLlxuICogSXQgd3JpdGVzIGNvbXBsZXRlZCBzaGFwZXMgdG8gdGhlIHNoYXJlZCB7QGxpbmsgUmVnaW9uU3RvcmV9IChzbyBzYXZlIC8gdW5kbyAvIGV4cG9ydCB3b3JrXG4gKiBpZGVudGljYWxseSB0byBPU0QpLlxuICpcbiAqIFN1cHBvcnRzIChqaXQtdWkjMTAyKTogcmVjdGFuZ2xlIC8gcG9seWdvbiAvIGZyZWVoYW5kIHBhdGggZHJhd2luZywgY2xpY2stc2VsZWN0IGFuZCBydWJiZXItYmFuZFxuICogbWFycXVlZSBzZWxlY3QsIHBhbi96b29tIGdhdGluZyB2aWEgYHNldENvbnRyb2xzRW5hYmxlZGAsIGJvZHkgbW92ZSwgdmVydGV4IG1vdmUvYWRkL2RlbGV0ZSxcbiAqIGJlemllciBoYW5kbGUgZWRpdGluZywgYW5kIGRvbnV0IGhvbGVzIChpbmNsdWRpbmcgaG9sZSB2ZXJ0ZXggKyBob2xlLWJlemllci1oYW5kbGUgZWRpdGluZykuXG4gKiBIaXQtdGVzdGluZyBzaGFyZXMgYHJlZ2lvbi1vdmVybGF5L3JlZ2lvbi1nZW9tZXRyeWAgd2l0aCB0aGUgT1NEIG92ZXJsYXksIHNvIGJvdGggZm9sbG93XG4gKiB0aGUgc2FtZSBydWxlcyAobXVsdGktcGFydCByZWdpb25zLCBob2xlcywgb3BlbiBwb2x5bGluZXMsIGhhbmRsZS1sZXNzIGJlemllciBjdXJ2ZXMpLlxuICovXG5leHBvcnQgY2xhc3MgTmFwYXJpUmVnaW9uT3ZlcmxheSBpbXBsZW1lbnRzIElSZWdpb25PdmVybGF5IHtcbiAgcHJpdmF0ZSByZWFkb25seSBzdmc6IFNWR1NWR0VsZW1lbnQ7XG4gIHByaXZhdGUgcmVhZG9ubHkgcmVuZGVyZXI6IE5hcGFyaVJlZ2lvblN2Z1JlbmRlcmVyO1xuICAvKiogVGhlIGltYWdlJ3MgcmVnaW9uIHNvdXJjZSwgZHJhd24gdW5kZXIgdGhlIHJlZ2lvbnMgYXQgdGhlIHpvb20ncyBsZXZlbCBvZiBkZXRhaWw7IG51bGxcbiAgICogIHdoZXJlIHdvcmxkIGlzIG5vdCB0aGUgaW1hZ2UgKHRoZSAzRCB2aWV3J3Mgc2NyZWVuLXNwYWNlIGxhc3NvcykuICovXG4gIHByaXZhdGUgcmVhZG9ubHkgc291cmNlTGF5ZXI6IFJlZ2lvblNvdXJjZUxheWVyIHwgbnVsbDtcbiAgLyoqIENsaWVudCDihpQgc3ZnLWxvY2FsIOKGlCB3b3JsZCBjb252ZXJzaW9ucywgd2l0aCB0aGUgc3ZnIG9yaWdpbiByZWFkIG9uY2UgcGVyIGdlc3R1cmUvcmVkcmF3LiAqL1xuICBwcml2YXRlIHJlYWRvbmx5IHByb2plY3Rpb246IE92ZXJsYXlQcm9qZWN0aW9uO1xuICBwcml2YXRlIHJlYWRvbmx5IHN1YnMgPSBuZXcgU3Vic2NyaXB0aW9uKCk7XG4gIHByaXZhdGUgcmVhZG9ubHkgZGlzY29ubmVjdENhbWVyYTogKCkgPT4gdm9pZDtcblxuICBwcml2YXRlIG1vZGU6IFJlZ2lvblRvb2xNb2RlID0gJ25vbmUnO1xuICBwcml2YXRlIHNlbGVjdGVkOiBudW1iZXJbXSA9IFtdO1xuXG4gIC8qKiBJbi1wcm9ncmVzcyBkcmF3aW5nIHN0YXRlIChpbWFnZS1zcGFjZSkuICovXG4gIHByaXZhdGUgZHJhZnRSZWN0OiBEcmFnQm94IHwgbnVsbCA9IG51bGw7XG4gIC8qKiBJbi1wcm9ncmVzcyBydWJiZXItYmFuZCBzZWxlY3Rpb24gbWFycXVlZSAoc2VsZWN0IG1vZGUpLCBpbWFnZS1zcGFjZS4gKi9cbiAgcHJpdmF0ZSBtYXJxdWVlOiBEcmFnQm94IHwgbnVsbCA9IG51bGw7XG4gIHByaXZhdGUgZHJhZnRQYXRoOiBBcnJheTxbbnVtYmVyLCBudW1iZXJdPiB8IG51bGwgPSBudWxsOyAvLyBmcmVlaGFuZCBvciBjbGljayBwb2x5Z29uXG4gIHByaXZhdGUgZHJhd2luZyA9IGZhbHNlOyAvLyBwb2ludGVyIGlzIGRvd24gZm9yIHJlY3QgLyBmcmVlaGFuZFxuICBwcml2YXRlIHJlZ2lvbnNWaXNpYmxlID0gdHJ1ZTtcblxuICAvKiogSW4tcHJvZ3Jlc3MgbWFuaXB1bGF0aW9uIChzZWxlY3QvbW92ZSBtb2Rlcyk6IGRyYWdnaW5nIGEgYm9keSwgYSBwb2x5Z29uIHZlcnRleCwgb3IgYVxuICAgKiAgcmVjdGFuZ2xlIGNvcm5lci4gYGFuY2hvcmAgaXMgdGhlIGZpeGVkIG9wcG9zaXRlIGNvcm5lciBmb3IgYSByZWN0YW5nbGUgcmVzaXplLiAqL1xuICBwcml2YXRlIGVkaXQ6IFJlZ2lvbkVkaXQgfCBudWxsID0gbnVsbDtcblxuICAvKipcbiAgICogU2NyZWVuIHNwYWNlICh0aGUgM0QgdmlldydzIGxhc3Nvcyk6IHRoZSByZWdpb25zIHRoaXMgb3ZlcmxheSBkcmV3IGl0c2VsZiwgYnkgaWQuIE9ubHkgdGhvc2VcbiAgICogYXJlIGRyYXduLCBwaWNrZWQgb3IgZWRpdGVkIGhlcmU7IGV2ZXJ5IG90aGVyIHJlZ2lvbiBpbiB0aGUgc3RvcmUgaXMgaW4gaW1hZ2Ugc3BhY2UgKHRoZVxuICAgKiBpbWFnZSdzIG93biwgYW4gaW1wb3J0ZWQgc2V0LCBzdHJ1Y3R1cmVzIGEgdHJlZSBjbGljayB0b29rIGZyb20gYSBzb3VyY2UpIGFuZCBtZWFucyBub3RoaW5nXG4gICAqIGF0IGNhbnZhcyBwaXhlbHMuIE51bGw6IGV2ZXJ5IHJlZ2lvbiAod29ybGQgaXMgdGhlIGltYWdlKS5cbiAgICovXG4gIHByaXZhdGUgcmVhZG9ubHkgb3duOiBTZXQ8bnVtYmVyPiB8IG51bGw7XG5cbiAgY29uc3RydWN0b3IoXG4gICAgcHJpdmF0ZSByZWFkb25seSBob3N0OiBIVE1MRWxlbWVudCxcbiAgICBwcml2YXRlIHJlYWRvbmx5IHZpZXdlcjogT3ZlcmxheVZpZXdlcixcbiAgICBwcml2YXRlIHJlYWRvbmx5IHN0b3JlOiBSZWdpb25TdG9yZSxcbiAgICBvcHRzOiB7IHJlZ2lvblNvdXJjZT86IGJvb2xlYW47IHNjcmVlblNwYWNlPzogYm9vbGVhbiB9ID0ge30sXG4gICkge1xuICAgIHRoaXMub3duID0gb3B0cy5zY3JlZW5TcGFjZSA/IG5ldyBTZXQoKSA6IG51bGw7XG4gICAgaWYgKGdldENvbXB1dGVkU3R5bGUoaG9zdCkucG9zaXRpb24gPT09ICdzdGF0aWMnKSBob3N0LnN0eWxlLnBvc2l0aW9uID0gJ3JlbGF0aXZlJztcbiAgICB0aGlzLnN2ZyA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnROUyhTVkdfTlMsICdzdmcnKTtcbiAgICBPYmplY3QuYXNzaWduKHRoaXMuc3ZnLnN0eWxlLCB7XG4gICAgICBwb3NpdGlvbjogJ2Fic29sdXRlJyxcbiAgICAgIGluc2V0OiAnMCcsXG4gICAgICB3aWR0aDogJzEwMCUnLFxuICAgICAgaGVpZ2h0OiAnMTAwJScsXG4gICAgICB6SW5kZXg6ICcyMCcsXG4gICAgICBwb2ludGVyRXZlbnRzOiAnbm9uZScsIC8vIHVudGlsIGEgdG9vbCBhY3RpdmF0ZXNcbiAgICAgIHRvdWNoQWN0aW9uOiAnbm9uZScsXG4gICAgfSBhcyBQYXJ0aWFsPENTU1N0eWxlRGVjbGFyYXRpb24+KTtcbiAgICB0aGlzLmhvc3QuYXBwZW5kQ2hpbGQodGhpcy5zdmcpO1xuICAgIHRoaXMucmVuZGVyZXIgPSBuZXcgTmFwYXJpUmVnaW9uU3ZnUmVuZGVyZXIodGhpcy5zdmcsIHRoaXMuc3RvcmUsIChyKSA9PiB0aGlzLmRyYXdzKHIpKTtcbiAgICB0aGlzLnByb2plY3Rpb24gPSBuZXcgT3ZlcmxheVByb2plY3Rpb24odGhpcy5zdmcsIHRoaXMudmlld2VyKTtcbiAgICB0aGlzLnNvdXJjZUxheWVyID1cbiAgICAgIG9wdHMucmVnaW9uU291cmNlID09PSBmYWxzZSA/IG51bGwgOiBuZXcgUmVnaW9uU291cmNlTGF5ZXIodGhpcy5zdmcsIHRoaXMuc3RvcmUuZ2V0UmVnaW9uU291cmNlVmlldyQoKSk7XG5cbiAgICB0aGlzLnN2Zy5hZGRFdmVudExpc3RlbmVyKCdwb2ludGVyZG93bicsIHRoaXMub25Qb2ludGVyRG93bik7XG4gICAgdGhpcy5zdmcuYWRkRXZlbnRMaXN0ZW5lcigncG9pbnRlcm1vdmUnLCB0aGlzLm9uUG9pbnRlck1vdmUpO1xuICAgIHRoaXMuc3ZnLmFkZEV2ZW50TGlzdGVuZXIoJ3BvaW50ZXJ1cCcsIHRoaXMub25Qb2ludGVyVXApO1xuICAgIHRoaXMuc3ZnLmFkZEV2ZW50TGlzdGVuZXIoJ3BvaW50ZXJjYW5jZWwnLCB0aGlzLm9uUG9pbnRlckNhbmNlbCk7XG4gICAgdGhpcy5zdmcuYWRkRXZlbnRMaXN0ZW5lcignbG9zdHBvaW50ZXJjYXB0dXJlJywgdGhpcy5vblBvaW50ZXJDYW5jZWwpO1xuICAgIHRoaXMuc3ZnLmFkZEV2ZW50TGlzdGVuZXIoJ2RibGNsaWNrJywgdGhpcy5vbkRibENsaWNrKTtcblxuICAgIHRoaXMuc3Vicy5hZGQodGhpcy5zdG9yZS5nZXRSZWdpb25VcGRhdGVFdmVudCgpLnN1YnNjcmliZSgoKSA9PiB0aGlzLnJlZHJhdygpKSk7XG4gICAgdGhpcy5zdWJzLmFkZChcbiAgICAgIHRoaXMuc3RvcmUuZ2V0U2VsZWN0ZWRTaGFwZUluZGljZXMkKCkuc3Vic2NyaWJlKChpZHgpID0+IHtcbiAgICAgICAgdGhpcy5zZWxlY3RlZCA9IGlkeCA/PyBbXTtcbiAgICAgICAgdGhpcy5yZWRyYXcoKTtcbiAgICAgIH0pLFxuICAgICk7XG4gICAgLy8gQSBjYW1lcmEgbW92ZSByZXdyaXRlcyB0aGUgcmVuZGVyZXIncyB0cmFuc2Zvcm0gYW5kIGl0cyBmZXcgc2NyZWVuLXNwYWNlIGVsZW1lbnRzO1xuICAgIC8vIHRoZSByZWdpb25zIGFyZSBkcmF3biBpbiB3b3JsZCBjb29yZGluYXRlcyBhbmQgYXJlIG5vdCByZWJ1aWx0IChOQVBBUkktQk9VTkRBUlktMTApLlxuICAgIHRoaXMuZGlzY29ubmVjdENhbWVyYSA9IHRoaXMudmlld2VyLmNhbWVyYS5jaGFuZ2VkLmNvbm5lY3QoKCkgPT4gdGhpcy51cGRhdGVDYW1lcmEoKSk7XG4gICAgdGhpcy5yZWRyYXcoKTtcbiAgfVxuXG4gIC8vIOKUgOKUgCBJUmVnaW9uT3ZlcmxheSDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIBcbiAgLyoqXG4gICAqIFdoZXRoZXIgYSByZWdpb24gdG9vbCBjdXJyZW50bHkgb3ducyB0aGUgcG9pbnRlci5cbiAgICpcbiAgICogRXhwb3NlZCBzbyB0aGUgc3BhdGlhbCB2aWV3cyBjYW4gdGVsbCBhIGJhcmUgY2xpY2sgb24gdGhlIGNsb3VkIChzZWxlY3QgdGhlXG4gICAqIGNsYXNzIHVuZGVyIHRoZSBjdXJzb3IpIGZyb20gYSBjbGljayB0aGF0IGJlbG9uZ3MgdG8gYSBkcmF3aW5nIGdlc3R1cmUg4oCUXG4gICAqIHBsYWNpbmcgYSBwb2x5Z29uIHZlcnRleCBpcyBhbHNvIGEgY2xpY2sgdGhhdCBkb2VzIG5vdCBtb3ZlLCBhbmQgaXQgbXVzdCBub3RcbiAgICogY2hhbmdlIHRoZSBzZWxlY3Rpb24gYmVoaW5kIHRoZSBzaGFwZSBiZWluZyBkcmF3bi5cbiAgICovXG4gIGdldCB0b29sQWN0aXZlKCk6IGJvb2xlYW4ge1xuICAgIHJldHVybiB0aGlzLm1vZGUgIT09ICdub25lJztcbiAgfVxuXG4gIHNldE1vZGUobW9kZTogUmVnaW9uVG9vbE1vZGUpOiB2b2lkIHtcbiAgICB0aGlzLmVuZEdlc3R1cmUoKTtcbiAgICB0aGlzLm1vZGUgPSBtb2RlO1xuICAgIHRoaXMuZHJhZnRSZWN0ID0gbnVsbDtcbiAgICB0aGlzLmRyYWZ0UGF0aCA9IG51bGw7XG4gICAgLy8gVGhlIG92ZXJsYXkgb3ducyBwb2ludGVyL25hdmlnYXRpb24gZ2F0aW5nOiB3aGlsZSBhIHRvb2wgaXMgYWN0aXZlIGl0IGNhcHR1cmVzIHRoZSBwb2ludGVyXG4gICAgLy8gYW5kIHRoZSBuYXBhcmkgY2FtZXJhIGNvbnRyb2xzIGFyZSBkaXNhYmxlZDsgJ25vbmUnIGhhbmRzIHRoZSBwb2ludGVyIGJhY2sgZm9yIHBhbi96b29tLlxuICAgIGNvbnN0IGFjdGl2ZSA9IG1vZGUgIT09ICdub25lJztcbiAgICB0aGlzLnZpZXdlci5zZXRDb250cm9sc0VuYWJsZWQoIWFjdGl2ZSk7XG4gICAgdGhpcy5zdmcuc3R5bGUucG9pbnRlckV2ZW50cyA9IGFjdGl2ZSA/ICdhdXRvJyA6ICdub25lJztcbiAgICB0aGlzLnN2Zy5zdHlsZS5jdXJzb3IgPSBhY3RpdmUgPyAnY3Jvc3NoYWlyJyA6ICdkZWZhdWx0JztcbiAgICB0aGlzLnJlbmRlck92ZXJsYXkoKTtcbiAgfVxuXG4gIHNldFNlbGVjdGVkQmV6aWVyKGJlemllcjogYm9vbGVhbik6IHZvaWQge1xuICAgIGNvbnN0IHNlbCA9IHRoaXMuc2VsZWN0ZWRSZWdpb24oKTtcbiAgICBpZiAoc2VsPy5pZCAhPSBudWxsKSB0aGlzLnN0b3JlLnNldEJlemllcihzZWwuaWQsIGJlemllcik7XG4gIH1cblxuICAvKipcbiAgICogSG93IGZpbmVseSBhIGRyYXduIHZlcnRleCBtYXkgYmUgcGxhY2VkLCBpbiB3b3JsZCB1bml0czogb25lIChhbiBpbWFnZSdzIHBpeGVscykgYnlcbiAgICogZGVmYXVsdCwgZmluZXIgZm9yIGEgZGF0YXNldCB3aG9zZSBjb29yZGluYXRlcyBhcmUgbm90IHBpeGVscyAoc2VlIE92ZXJsYXlQcm9qZWN0aW9uKS5cbiAgICovXG4gIHNldFdvcmxkUXVhbnR1bShxdWFudHVtOiBudW1iZXIpOiB2b2lkIHtcbiAgICB0aGlzLnByb2plY3Rpb24uc2V0V29ybGRRdWFudHVtKHF1YW50dW0pO1xuICB9XG5cbiAgZGVzdHJveSgpOiB2b2lkIHtcbiAgICB0aGlzLnN2Zy5yZW1vdmVFdmVudExpc3RlbmVyKCdwb2ludGVyZG93bicsIHRoaXMub25Qb2ludGVyRG93bik7XG4gICAgdGhpcy5zdmcucmVtb3ZlRXZlbnRMaXN0ZW5lcigncG9pbnRlcm1vdmUnLCB0aGlzLm9uUG9pbnRlck1vdmUpO1xuICAgIHRoaXMuc3ZnLnJlbW92ZUV2ZW50TGlzdGVuZXIoJ3BvaW50ZXJ1cCcsIHRoaXMub25Qb2ludGVyVXApO1xuICAgIHRoaXMuc3ZnLnJlbW92ZUV2ZW50TGlzdGVuZXIoJ3BvaW50ZXJjYW5jZWwnLCB0aGlzLm9uUG9pbnRlckNhbmNlbCk7XG4gICAgdGhpcy5zdmcucmVtb3ZlRXZlbnRMaXN0ZW5lcignbG9zdHBvaW50ZXJjYXB0dXJlJywgdGhpcy5vblBvaW50ZXJDYW5jZWwpO1xuICAgIHRoaXMuc3ZnLnJlbW92ZUV2ZW50TGlzdGVuZXIoJ2RibGNsaWNrJywgdGhpcy5vbkRibENsaWNrKTtcbiAgICB0aGlzLmRpc2Nvbm5lY3RDYW1lcmEoKTtcbiAgICB0aGlzLnN1YnMudW5zdWJzY3JpYmUoKTtcbiAgICAvLyBBIGRyYWcgdG9ybiBkb3duIG1pZC1nZXN0dXJlIChhIGJhY2tlbmQgc3dpdGNoKSBtdXN0IHN0aWxsIGNsb3NlIGl0cyBzdG9yZSBiYXRjaC5cbiAgICB0aGlzLmVuZEdlc3R1cmUoKTtcbiAgICB0aGlzLnNvdXJjZUxheWVyPy5kZXN0cm95KCk7XG4gICAgaWYgKHRoaXMuc3ZnLnBhcmVudE5vZGUpIHRoaXMuc3ZnLnBhcmVudE5vZGUucmVtb3ZlQ2hpbGQodGhpcy5zdmcpO1xuICB9XG5cbiAgLy8g4pSA4pSAIHBvaW50ZXIgaGFuZGxlcnMg4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSAXG4gIHByaXZhdGUgcmVhZG9ubHkgb25Qb2ludGVyRG93biA9IChlOiBQb2ludGVyRXZlbnQpOiB2b2lkID0+IHtcbiAgICBpZiAodGhpcy5tb2RlID09PSAnbm9uZScpIHJldHVybjtcbiAgICBlLnByZXZlbnREZWZhdWx0KCk7XG4gICAgdGhpcy5wcm9qZWN0aW9uLndpdGhPcmlnaW4oKCkgPT4gdGhpcy5wb2ludGVyRG93bihlKSk7XG4gIH07XG5cbiAgcHJpdmF0ZSBwb2ludGVyRG93bihlOiBQb2ludGVyRXZlbnQpOiB2b2lkIHtcbiAgICBjb25zdCBbaXgsIGl5XSA9IHRoaXMucHJvamVjdGlvbi50b0ltYWdlKGUuY2xpZW50WCwgZS5jbGllbnRZKTtcbiAgICBpZiAodGhpcy5tb2RlID09PSAnZHJhd3JlY3QnKSB7XG4gICAgICB0aGlzLmRyYWZ0UmVjdCA9IHsgeDA6IGl4LCB5MDogaXksIHgxOiBpeCwgeTE6IGl5IH07XG4gICAgICB0aGlzLmRyYXdpbmcgPSB0cnVlO1xuICAgICAgdGhpcy5zdmcuc2V0UG9pbnRlckNhcHR1cmUoZS5wb2ludGVySWQpO1xuICAgIH0gZWxzZSBpZiAodGhpcy5tb2RlID09PSAnZHJhd2Nsb3NlZHBhdGgnIHx8IHRoaXMubW9kZSA9PT0gJ2RyYXdvcGVucGF0aCcpIHtcbiAgICAgIHRoaXMuZHJhZnRQYXRoID0gW1tpeCwgaXldXTtcbiAgICAgIHRoaXMuZHJhd2luZyA9IHRydWU7XG4gICAgICB0aGlzLnN2Zy5zZXRQb2ludGVyQ2FwdHVyZShlLnBvaW50ZXJJZCk7XG4gICAgfSBlbHNlIGlmICh0aGlzLm1vZGUgPT09ICdkcmF3cG9seWdvbicpIHtcbiAgICAgIHRoaXMuaGFuZGxlUG9seWdvbkNsaWNrKGl4LCBpeSwgZS5jbGllbnRYLCBlLmNsaWVudFkpO1xuICAgIH0gZWxzZSBpZiAodGhpcy5tb2RlID09PSAnc2VsZWN0JyB8fCB0aGlzLm1vZGUgPT09ICdtb3ZlJykge1xuICAgICAgdGhpcy5iZWdpbk1hbmlwdWxhdGlvbihpeCwgaXksIGUpO1xuICAgIH0gZWxzZSBpZiAodGhpcy5tb2RlID09PSAnYWRkcG9pbnQnKSB7XG4gICAgICB0aGlzLmhhbmRsZUFkZFBvaW50KGl4LCBpeSwgZS5jbGllbnRYLCBlLmNsaWVudFkpO1xuICAgIH0gZWxzZSBpZiAodGhpcy5tb2RlID09PSAnZGVsZXRlcG9pbnQnKSB7XG4gICAgICB0aGlzLmhhbmRsZURlbGV0ZVBvaW50KGl4LCBpeSk7XG4gICAgfVxuICAgIHRoaXMucmVkcmF3KCk7XG4gIH1cblxuICBwcml2YXRlIHJlYWRvbmx5IG9uUG9pbnRlck1vdmUgPSAoZTogUG9pbnRlckV2ZW50KTogdm9pZCA9PiB7XG4gICAgY29uc3QgW2l4LCBpeV0gPSB0aGlzLnByb2plY3Rpb24udG9JbWFnZShlLmNsaWVudFgsIGUuY2xpZW50WSk7XG4gICAgaWYgKHRoaXMubWFycXVlZSkge1xuICAgICAgdGhpcy5tYXJxdWVlLngxID0gaXg7XG4gICAgICB0aGlzLm1hcnF1ZWUueTEgPSBpeTtcbiAgICAgIHRoaXMudXBkYXRlTWFycXVlZUVsKCk7IC8vIHVwZGF0ZSBqdXN0IHRoZSBtYXJxdWVlIHJlY3Qg4oCUIE5PVCBhIGZ1bGwgcmVnaW9uIHJlZHJhd1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICBpZiAodGhpcy5lZGl0KSB7XG4gICAgICBhcHBseVJlZ2lvbkVkaXQodGhpcy5zdG9yZSwgdGhpcy5lZGl0LCBpeCwgaXkpO1xuICAgICAgdGhpcy5yZWRyYXcoKTtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgaWYgKCF0aGlzLmRyYXdpbmcpIHJldHVybjtcbiAgICBpZiAodGhpcy5kcmFmdFJlY3QpIHtcbiAgICAgIHRoaXMuZHJhZnRSZWN0LngxID0gaXg7XG4gICAgICB0aGlzLmRyYWZ0UmVjdC55MSA9IGl5O1xuICAgIH0gZWxzZSBpZiAodGhpcy5kcmFmdFBhdGgpIHtcbiAgICAgIGNvbnN0IHN0ZXAgPSBGUkVFSEFORF9TVEVQX1BYICogdGhpcy5wcm9qZWN0aW9uLndvcmxkUGVyQ2FudmFzUGl4ZWwoKTtcbiAgICAgIGNvbnN0IGxhc3QgPSB0aGlzLmRyYWZ0UGF0aFt0aGlzLmRyYWZ0UGF0aC5sZW5ndGggLSAxXTtcbiAgICAgIGlmIChNYXRoLmFicyhpeCAtIGxhc3RbMF0pID49IHN0ZXAgfHwgTWF0aC5hYnMoaXkgLSBsYXN0WzFdKSA+PSBzdGVwKSB7XG4gICAgICAgIHRoaXMuZHJhZnRQYXRoLnB1c2goW2l4LCBpeV0pO1xuICAgICAgfVxuICAgIH1cbiAgICB0aGlzLnJlbmRlck92ZXJsYXkoKTtcbiAgfTtcblxuICBwcml2YXRlIHJlYWRvbmx5IG9uUG9pbnRlclVwID0gKGU6IFBvaW50ZXJFdmVudCk6IHZvaWQgPT4ge1xuICAgIGlmICh0aGlzLm1hcnF1ZWUpIHtcbiAgICAgIGNvbnN0IG0gPSB0aGlzLm1hcnF1ZWU7XG4gICAgICB0aGlzLm1hcnF1ZWUgPSBudWxsO1xuICAgICAgdGhpcy5yZW5kZXJlci5jbGVhck1hcnF1ZWUoKTtcbiAgICAgIHRyeSB7XG4gICAgICAgIHRoaXMuc3ZnLnJlbGVhc2VQb2ludGVyQ2FwdHVyZShlLnBvaW50ZXJJZCk7XG4gICAgICB9IGNhdGNoIHtcbiAgICAgICAgLyogYWxyZWFkeSByZWxlYXNlZCAqL1xuICAgICAgfVxuICAgICAgdGhpcy5maW5pc2hNYXJxdWVlKG0pOyAvLyBzZXRTZWxlY3RlZFNoYXBlSW5kaWNlcyDihpIgb25lIHJlZHJhdyB2aWEgdGhlIHNlbGVjdGlvbiBzdWJzY3JpcHRpb25cbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgaWYgKHRoaXMuZWRpdCkge1xuICAgICAgdGhpcy5zdG9yZS5lbmRCYXRjaCgpO1xuICAgICAgdGhpcy5lZGl0ID0gbnVsbDtcbiAgICAgIHRyeSB7XG4gICAgICAgIHRoaXMuc3ZnLnJlbGVhc2VQb2ludGVyQ2FwdHVyZShlLnBvaW50ZXJJZCk7XG4gICAgICB9IGNhdGNoIHtcbiAgICAgICAgLyogYWxyZWFkeSByZWxlYXNlZCAqL1xuICAgICAgfVxuICAgICAgdGhpcy5yZWRyYXcoKTtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgaWYgKCF0aGlzLmRyYXdpbmcpIHJldHVybjtcbiAgICB0aGlzLmRyYXdpbmcgPSBmYWxzZTtcbiAgICB0cnkge1xuICAgICAgdGhpcy5zdmcucmVsZWFzZVBvaW50ZXJDYXB0dXJlKGUucG9pbnRlcklkKTtcbiAgICB9IGNhdGNoIHtcbiAgICAgIC8qIGNhcHR1cmUgbWF5IGFscmVhZHkgYmUgcmVsZWFzZWQgKi9cbiAgICB9XG4gICAgaWYgKHRoaXMuZHJhZnRSZWN0KSB7XG4gICAgICBjb25zdCB7IHgwLCB5MCwgeDEsIHkxIH0gPSB0aGlzLmRyYWZ0UmVjdDtcbiAgICAgIGNvbnN0IHggPSBNYXRoLm1pbih4MCwgeDEpO1xuICAgICAgY29uc3QgeSA9IE1hdGgubWluKHkwLCB5MSk7XG4gICAgICBjb25zdCB3ID0gTWF0aC5hYnMoeDEgLSB4MCk7XG4gICAgICBjb25zdCBoID0gTWF0aC5hYnMoeTEgLSB5MCk7XG4gICAgICB0aGlzLmRyYWZ0UmVjdCA9IG51bGw7XG4gICAgICBjb25zdCBtaW4gPSBNSU5fUkVDVF9EUkFHX1BYICogdGhpcy5wcm9qZWN0aW9uLndvcmxkUGVyQ2FudmFzUGl4ZWwoKTtcbiAgICAgIGlmICh3ID49IG1pbiAmJiBoID49IG1pbikgdGhpcy5jb21taXRSZWN0YW5nbGUoeCwgeSwgdywgaCk7XG4gICAgfSBlbHNlIGlmICh0aGlzLmRyYWZ0UGF0aCkge1xuICAgICAgY29uc3QgcHRzID0gdGhpcy5kcmFmdFBhdGg7XG4gICAgICB0aGlzLmRyYWZ0UGF0aCA9IG51bGw7XG4gICAgICBjb25zdCBjbG9zZWQgPSB0aGlzLm1vZGUgPT09ICdkcmF3Y2xvc2VkcGF0aCc7XG4gICAgICBpZiAocHRzLmxlbmd0aCA+PSAoY2xvc2VkID8gMyA6IDIpKSB0aGlzLmNvbW1pdFBvbHlnb24ocHRzLCBjbG9zZWQpO1xuICAgIH1cbiAgICB0aGlzLnJlZHJhdygpO1xuICB9O1xuXG4gIC8qKlxuICAgKiBUaGUgcG9pbnRlciBnZXN0dXJlIGVuZGVkIHdpdGhvdXQgYSBwb2ludGVydXAgKHRoZSBicm93c2VyIGNhbmNlbGxlZCBpdCwgb3IgY2FwdHVyZSB3YXNcbiAgICogbG9zdCk6IGVuZCBpdCB3aXRob3V0IGNvbW1pdHRpbmcuIEFsc28gZmlyZXMgYWZ0ZXIgZXZlcnkgbm9ybWFsIHJlbGVhc2UsIHdoZW4gbm90aGluZ1xuICAgKiBpcyBsaXZlIGFueSBtb3JlLlxuICAgKi9cbiAgcHJpdmF0ZSByZWFkb25seSBvblBvaW50ZXJDYW5jZWwgPSAoKTogdm9pZCA9PiB7XG4gICAgaWYgKCF0aGlzLmVkaXQgJiYgIXRoaXMuZHJhd2luZyAmJiAhdGhpcy5tYXJxdWVlKSByZXR1cm47XG4gICAgdGhpcy5lbmRHZXN0dXJlKCk7XG4gICAgdGhpcy5yZWRyYXcoKTtcbiAgfTtcblxuICAvKipcbiAgICogRW5kIHdoYXRldmVyIHBvaW50ZXIgZ2VzdHVyZSBpcyBsaXZlIHdpdGhvdXQgY29tbWl0dGluZyBpdDogY2xvc2UgdGhlIHN0b3JlIGJhdGNoIGEgZHJhZ1xuICAgKiBvcGVuZWQgKHNvIGxhdGVyIGVkaXRzIGFyZSBlbWl0dGVkIGFnYWluKSBhbmQgZm9yZ2V0IHRoZSBkcmFnIChzbyBhIGJhcmUgaG92ZXIgbm8gbG9uZ2VyXG4gICAqIG1vdmVzIHRoZSByZWdpb24pLCBhbmQgZHJvcCB0aGUgbWFycXVlZSBhbmQgYSByZWN0YW5nbGUvZnJlZWhhbmQgZHJhZnQuIEEgY2xpY2stcGxhY2VkXG4gICAqIHBvbHlnb24gaXMgbm90IGEgcG9pbnRlciBnZXN0dXJlIGFuZCBzdXJ2aXZlcy5cbiAgICovXG4gIHByaXZhdGUgZW5kR2VzdHVyZSgpOiB2b2lkIHtcbiAgICBpZiAodGhpcy5lZGl0KSB0aGlzLnN0b3JlLmVuZEJhdGNoKCk7XG4gICAgdGhpcy5lZGl0ID0gbnVsbDtcbiAgICBpZiAodGhpcy5kcmF3aW5nKSB7XG4gICAgICB0aGlzLmRyYWZ0UmVjdCA9IG51bGw7XG4gICAgICB0aGlzLmRyYWZ0UGF0aCA9IG51bGw7XG4gICAgfVxuICAgIHRoaXMuZHJhd2luZyA9IGZhbHNlO1xuICAgIHRoaXMubWFycXVlZSA9IG51bGw7XG4gICAgdGhpcy5yZW5kZXJlci5jbGVhck1hcnF1ZWUoKTtcbiAgfVxuXG4gIC8qKiBDbGljay10by1wbGFjZSBwb2x5Z29uOiBhZGQgYSB2ZXJ0ZXgsIG9yIGNsb3NlIHdoZW4gY2xpY2tpbmcgbmVhciB0aGUgZmlyc3Qgb25lLiAqL1xuICBwcml2YXRlIGhhbmRsZVBvbHlnb25DbGljayhpeDogbnVtYmVyLCBpeTogbnVtYmVyLCBjbGllbnRYOiBudW1iZXIsIGNsaWVudFk6IG51bWJlcik6IHZvaWQge1xuICAgIGlmICghdGhpcy5kcmFmdFBhdGgpIHtcbiAgICAgIHRoaXMuZHJhZnRQYXRoID0gW1tpeCwgaXldXTtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgY29uc3QgbmVhciA9XG4gICAgICB0aGlzLnByb2plY3Rpb24uc2NyZWVuRGlzdChjbGllbnRYLCBjbGllbnRZLCB0aGlzLmRyYWZ0UGF0aFswXVswXSwgdGhpcy5kcmFmdFBhdGhbMF1bMV0pIDw9IENMT1NFX1NOQVBfUFggJiZcbiAgICAgIHRoaXMuZHJhZnRQYXRoLmxlbmd0aCA+PSAzO1xuICAgIGlmIChuZWFyKSB7XG4gICAgICBjb25zdCBwdHMgPSB0aGlzLmRyYWZ0UGF0aDtcbiAgICAgIHRoaXMuZHJhZnRQYXRoID0gbnVsbDtcbiAgICAgIHRoaXMuY29tbWl0UG9seWdvbihwdHMsIHRydWUpO1xuICAgIH0gZWxzZSB7XG4gICAgICB0aGlzLmRyYWZ0UGF0aC5wdXNoKFtpeCwgaXldKTtcbiAgICB9XG4gIH1cblxuICBwcml2YXRlIHJlYWRvbmx5IG9uRGJsQ2xpY2sgPSAoZTogTW91c2VFdmVudCk6IHZvaWQgPT4ge1xuICAgIGlmICh0aGlzLm1vZGUgIT09ICdkcmF3cG9seWdvbicgfHwgIXRoaXMuZHJhZnRQYXRoKSByZXR1cm47XG4gICAgZS5wcmV2ZW50RGVmYXVsdCgpO1xuICAgIGNvbnN0IHB0cyA9IHRoaXMuZHJhZnRQYXRoO1xuICAgIHRoaXMuZHJhZnRQYXRoID0gbnVsbDtcbiAgICBpZiAocHRzLmxlbmd0aCA+PSAzKSB0aGlzLmNvbW1pdFBvbHlnb24ocHRzLCB0cnVlKTtcbiAgICB0aGlzLnJlZHJhdygpO1xuICB9O1xuXG4gIC8qKiBUaGUgY3VycmVudGx5LXNlbGVjdGVkIHJlZ2lvbiAoc2luZ2xlIHNlbGVjdGlvbikgdGhpcyBvdmVybGF5IGRyYXdzLCBvciBudWxsLiAqL1xuICBwcml2YXRlIHNlbGVjdGVkUmVnaW9uKCk6IFJlZ2lvbiB8IG51bGwge1xuICAgIGNvbnN0IHJlZ2lvbnMgPSB0aGlzLnN0b3JlLmdldFJlZ2lvbnMoKTtcbiAgICBjb25zdCBpID0gdGhpcy5zZWxlY3RlZFswXTtcbiAgICBjb25zdCByZWdpb24gPSBpICE9IG51bGwgJiYgaSA+PSAwICYmIGkgPCByZWdpb25zLmxlbmd0aCA/IHJlZ2lvbnNbaV0gOiBudWxsO1xuICAgIHJldHVybiByZWdpb24gJiYgdGhpcy5kcmF3cyhyZWdpb24pID8gcmVnaW9uIDogbnVsbDtcbiAgfVxuXG4gIC8qKiBXaGV0aGVyIHRoaXMgb3ZlcmxheSBkcmF3cyAoYW5kIGxldHMgdGhlIHBvaW50ZXIgcGljaykgYHJlZ2lvbmA6IHNlZSB7QGxpbmsgb3dufS4gKi9cbiAgcHJpdmF0ZSBkcmF3cyhyZWdpb246IFJlZ2lvbik6IGJvb2xlYW4ge1xuICAgIHJldHVybiAhdGhpcy5vd24gfHwgdGhpcy5vd24uaGFzKHJlZ2lvbi5pZCk7XG4gIH1cblxuICAvKiogVGhlIHJlZ2lvbnMgdGhpcyBvdmVybGF5IGRyZXcgaW4gc2NyZWVuIHNwYWNlICh0aGUgM0QgdmlldydzIGxhc3Nvcyk7IFtdIGluIGltYWdlIHNwYWNlLiAqL1xuICBvd25SZWdpb25JZHMoKTogbnVtYmVyW10ge1xuICAgIHJldHVybiB0aGlzLm93biA/IFsuLi50aGlzLm93bl0gOiBbXTtcbiAgfVxuXG4gIC8qKlxuICAgKiBTdGFydCBhIHNlbGVjdC9tb3ZlIGludGVyYWN0aW9uOiBncmFiIGEgaGFuZGxlIChyZWN0YW5nbGUgY29ybmVyKSBvciB2ZXJ0ZXggb2YgdGhlIGFscmVhZHktXG4gICAqIHNlbGVjdGVkIHJlZ2lvbiBmaXJzdDsgb3RoZXJ3aXNlIHNlbGVjdCB0aGUgdG9wbW9zdCByZWdpb24gdW5kZXIgdGhlIGN1cnNvciBhbmQgZHJhZyBpdHMgYm9keS5cbiAgICovXG4gIHByaXZhdGUgYmVnaW5NYW5pcHVsYXRpb24oaXg6IG51bWJlciwgaXk6IG51bWJlciwgZTogUG9pbnRlckV2ZW50KTogdm9pZCB7XG4gICAgY29uc3Qgc2VsID0gdGhpcy5zZWxlY3RlZFJlZ2lvbigpO1xuICAgIGlmIChzZWw/LmJvdW5kcykge1xuICAgICAgY29uc3QgW2x4LCBseV0gPSB0aGlzLnByb2plY3Rpb24uY2xpZW50VG9Mb2NhbChlLmNsaWVudFgsIGUuY2xpZW50WSk7XG4gICAgICBjb25zdCBncmFiID0gaGl0SGFuZGxlKHNlbCwgbHgsIGx5LCB0aGlzLnByb2plY3Rpb24udG9TY3JlZW4sIEhBTkRMRV9ISVRfUFgpO1xuICAgICAgaWYgKGdyYWIpIHtcbiAgICAgICAgdGhpcy5zdG9yZS5iZWdpbkJhdGNoKCk7XG4gICAgICAgIHRoaXMuZWRpdCA9IHsgLi4uZ3JhYiwgaWQ6IHNlbC5pZCwgbGFzdDogW2l4LCBpeV0gfTtcbiAgICAgICAgdGhpcy5zdmcuc2V0UG9pbnRlckNhcHR1cmUoZS5wb2ludGVySWQpO1xuICAgICAgICByZXR1cm47XG4gICAgICB9XG4gICAgfVxuICAgIC8vIEhpdC10ZXN0IGJvZGllcywgdG9wbW9zdCBmaXJzdCAobGFzdCBkcmF3biByZW5kZXJzIG9uIHRvcCksIGF0IHRoZSBleGFjdCBwb2ludGVyXG4gICAgLy8gcG9zaXRpb24g4oCUIHNuYXBwaW5nIGlzIGZvciBwbGFjaW5nIHZlcnRpY2VzLCBub3QgZm9yIHBpY2tpbmcuXG4gICAgY29uc3QgcmVnaW9ucyA9IHRoaXMuc3RvcmUuZ2V0UmVnaW9ucygpO1xuICAgIGNvbnN0IFt3eCwgd3ldID0gdGhpcy5wcm9qZWN0aW9uLnRvV29ybGQoZS5jbGllbnRYLCBlLmNsaWVudFkpO1xuICAgIGZvciAobGV0IGkgPSByZWdpb25zLmxlbmd0aCAtIDE7IGkgPj0gMDsgaS0tKSB7XG4gICAgICBpZiAodGhpcy5zdG9yZS5pc0NsYXNzSGlkZGVuKHJlZ2lvbnNbaV0ubGFiZWwpIHx8ICF0aGlzLmRyYXdzKHJlZ2lvbnNbaV0pKSBjb250aW51ZTtcbiAgICAgIGlmIChyZWdpb25Db250YWlucyhyZWdpb25zW2ldLCB3eCwgd3ksIHsgdG9TY3JlZW46IHRoaXMucHJvamVjdGlvbi50b1NjcmVlbiwgdG9sUHg6IE9QRU5fUEFUSF9ISVRfUFggfSkpIHtcbiAgICAgICAgdGhpcy5zdG9yZS5zZWxlY3RSZWdpb24ocmVnaW9uc1tpXSk7XG4gICAgICAgIHRoaXMuc3RvcmUuYmVnaW5CYXRjaCgpO1xuICAgICAgICB0aGlzLmVkaXQgPSB7IGtpbmQ6ICdib2R5JywgaWQ6IHJlZ2lvbnNbaV0uaWQsIGxhc3Q6IFtpeCwgaXldIH07XG4gICAgICAgIHRoaXMuc3ZnLnNldFBvaW50ZXJDYXB0dXJlKGUucG9pbnRlcklkKTtcbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuICAgIH1cbiAgICAvLyBBIGZlYXR1cmUgb2YgdGhlIHJlZ2lvbiBzb3VyY2U6IHRha2UgaXQgaW50byB0aGUgcmVnaW9ucyBhbmQgc2VsZWN0IGl0IChhIGRyYWcgb24gaXRcbiAgICAvLyBtb3ZlcyBpdCBvbmNlIGl0IGlzIHNlbGVjdGVkKS5cbiAgICBjb25zdCBmZWF0dXJlID0gdGhpcy5zb3VyY2VMYXllcj8uZmVhdHVyZUF0KHd4LCB3eSwgT1BFTl9QQVRIX0hJVF9QWCk7XG4gICAgaWYgKGZlYXR1cmUpIHtcbiAgICAgIHZvaWQgdGhpcy5zdG9yZS5zZWxlY3RTb3VyY2VGZWF0dXJlcyhbZmVhdHVyZS5pZF0sIGUuc2hpZnRLZXkgfHwgZS5tZXRhS2V5IHx8IGUuY3RybEtleSk7XG4gICAgICByZXR1cm47XG4gICAgfVxuICAgIC8vIEVtcHR5IHNwYWNlOiBpbiBzZWxlY3QgbW9kZSBzdGFydCBhIHJ1YmJlci1iYW5kIG1hcnF1ZWUgKHNlbGVjdHMgdGhlIHJlZ2lvbnMgaXQgY292ZXJzIG9uXG4gICAgLy8gcmVsZWFzZSk7IGluIG1vdmUgbW9kZSBqdXN0IGNsZWFyIHRoZSBzZWxlY3Rpb24uXG4gICAgaWYgKHRoaXMubW9kZSA9PT0gJ3NlbGVjdCcpIHtcbiAgICAgIHRoaXMubWFycXVlZSA9IHsgeDA6IGl4LCB5MDogaXksIHgxOiBpeCwgeTE6IGl5IH07XG4gICAgICB0aGlzLnVwZGF0ZU1hcnF1ZWVFbCgpO1xuICAgICAgdGhpcy5zdmcuc2V0UG9pbnRlckNhcHR1cmUoZS5wb2ludGVySWQpO1xuICAgIH0gZWxzZSB7XG4gICAgICB0aGlzLnN0b3JlLnNldFNlbGVjdGVkU2hhcGVJbmRpY2VzKFtdKTtcbiAgICB9XG4gIH1cblxuICAvKiogU2hvdyB0aGUgbWFycXVlZSB3aGVyZSBpdCBpcyBub3cgKG9ubHkgdGhlIG1hcnF1ZWUgZWxlbWVudDogbm8gZnVsbCByZWdpb24gcmVkcmF3KS4gKi9cbiAgcHJpdmF0ZSB1cGRhdGVNYXJxdWVlRWwoKTogdm9pZCB7XG4gICAgaWYgKCF0aGlzLm1hcnF1ZWUpIHJldHVybjtcbiAgICBjb25zdCB7IHgwLCB5MCwgeDEsIHkxIH0gPSB0aGlzLm1hcnF1ZWU7XG4gICAgY29uc3QgW2x4LCBseV0gPSB0aGlzLnByb2plY3Rpb24udG9Mb2NhbChNYXRoLm1pbih4MCwgeDEpLCBNYXRoLm1pbih5MCwgeTEpKTtcbiAgICBjb25zdCBbcngsIHJ5XSA9IHRoaXMucHJvamVjdGlvbi50b0xvY2FsKE1hdGgubWF4KHgwLCB4MSksIE1hdGgubWF4KHkwLCB5MSkpO1xuICAgIHRoaXMucmVuZGVyZXIuc2hvd01hcnF1ZWUobHgsIGx5LCByeCwgcnkpO1xuICB9XG5cbiAgLyoqIGFkZHBvaW50IG1vZGU6IGluc2VydCBhIHZlcnRleCBhdCB0aGUgY2xpY2sgb24gdGhlIHNlbGVjdGVkIHBvbHlnb24ncyBuZWFyZXN0IGVkZ2VcbiAgICogIChleHRlcmlvciBvciBhIGhvbGUgcmluZykuICovXG4gIHByaXZhdGUgaGFuZGxlQWRkUG9pbnQoaXg6IG51bWJlciwgaXk6IG51bWJlciwgY2xpZW50WDogbnVtYmVyLCBjbGllbnRZOiBudW1iZXIpOiB2b2lkIHtcbiAgICBjb25zdCBzZWwgPSB0aGlzLnNlbGVjdGVkUmVnaW9uKCk7XG4gICAgaWYgKCFzZWwpIHJldHVybjtcbiAgICBjb25zdCBbbHgsIGx5XSA9IHRoaXMucHJvamVjdGlvbi5jbGllbnRUb0xvY2FsKGNsaWVudFgsIGNsaWVudFkpO1xuICAgIGNvbnN0IGVkZ2UgPSBuZWFyZXN0RWRnZShzZWwsIGx4LCBseSwgdGhpcy5wcm9qZWN0aW9uLnRvU2NyZWVuKTtcbiAgICBpZiAoIWVkZ2UpIHJldHVybjtcbiAgICBpZiAoZWRnZS5yaW5nIDwgMCkgdGhpcy5zdG9yZS5hZGRWZXJ0ZXgoc2VsLmlkLCBlZGdlLnNlZ0luZGV4LCBpeCwgaXkpO1xuICAgIGVsc2UgdGhpcy5zdG9yZS5hZGRIb2xlVmVydGV4KHNlbC5pZCwgZWRnZS5yaW5nLCBlZGdlLnNlZ0luZGV4LCBpeCwgaXkpO1xuICB9XG5cbiAgLyoqIGRlbGV0ZXBvaW50IG1vZGU6IHJlbW92ZSB0aGUgc2VsZWN0ZWQgcG9seWdvbidzIHZlcnRleCBuZWFyZXN0IHRoZSBjbGljayAoZXh0ZXJpb3Igb3IgYVxuICAgKiAgaG9sZSByaW5nKS4gKi9cbiAgcHJpdmF0ZSBoYW5kbGVEZWxldGVQb2ludChpeDogbnVtYmVyLCBpeTogbnVtYmVyKTogdm9pZCB7XG4gICAgY29uc3Qgc2VsID0gdGhpcy5zZWxlY3RlZFJlZ2lvbigpO1xuICAgIGlmICghc2VsKSByZXR1cm47XG4gICAgY29uc3QgdiA9IG5lYXJlc3RWZXJ0ZXgoc2VsLCBpeCwgaXkpO1xuICAgIGlmICghdikgcmV0dXJuO1xuICAgIGlmICh2LnJpbmcgPCAwKSB0aGlzLnN0b3JlLmRlbGV0ZVZlcnRleChzZWwuaWQsIHYuaW5kZXgpO1xuICAgIGVsc2UgdGhpcy5zdG9yZS5kZWxldGVIb2xlVmVydGV4KHNlbC5pZCwgdi5yaW5nLCB2LmluZGV4KTtcbiAgfVxuXG4gIC8qKiBGaW5hbGl6ZSBhIHJ1YmJlci1iYW5kIG1hcnF1ZWU6IHNlbGVjdCBldmVyeSByZWdpb24gd2hvc2UgYm91bmRpbmcgYm94IGl0IG92ZXJsYXBzIChhXG4gICAqICBtYXJxdWVlIHVuZGVyIHtAbGluayBNSU5fTUFSUVVFRV9QWH0gaXMgYSBjbGljayBvbiBlbXB0eSBzcGFjZSDihpIgY2xlYXIgdGhlIHNlbGVjdGlvbikuICovXG4gIHByaXZhdGUgZmluaXNoTWFycXVlZShtOiBEcmFnQm94KTogdm9pZCB7XG4gICAgY29uc3QgeDAgPSBNYXRoLm1pbihtLngwLCBtLngxKTtcbiAgICBjb25zdCB4MSA9IE1hdGgubWF4KG0ueDAsIG0ueDEpO1xuICAgIGNvbnN0IHkwID0gTWF0aC5taW4obS55MCwgbS55MSk7XG4gICAgY29uc3QgeTEgPSBNYXRoLm1heChtLnkwLCBtLnkxKTtcbiAgICBjb25zdCBtaW4gPSBNSU5fTUFSUVVFRV9QWCAqIHRoaXMucHJvamVjdGlvbi53b3JsZFBlckNhbnZhc1BpeGVsKCk7XG4gICAgaWYgKHgxIC0geDAgPCBtaW4gJiYgeTEgLSB5MCA8IG1pbikge1xuICAgICAgdGhpcy5zdG9yZS5zZXRTZWxlY3RlZFNoYXBlSW5kaWNlcyhbXSk7XG4gICAgICByZXR1cm47XG4gICAgfVxuICAgIGNvbnN0IHJlZ2lvbnMgPSB0aGlzLnN0b3JlLmdldFJlZ2lvbnMoKTtcbiAgICB0aGlzLnN0b3JlLnNldFNlbGVjdGVkU2hhcGVJbmRpY2VzKFxuICAgICAgcmVnaW9uc0luUmVjdChyZWdpb25zLCB4MCwgeTAsIHgxLCB5MSwge1xuICAgICAgICBza2lwUHJvZmlsZXM6IHRydWUsXG4gICAgICAgIHNraXA6IChyKSA9PiB0aGlzLnN0b3JlLmlzQ2xhc3NIaWRkZW4oci5sYWJlbCkgfHwgIXRoaXMuZHJhd3MociksXG4gICAgICB9KSxcbiAgICApO1xuICAgIGNvbnN0IGZlYXR1cmVzID0gdGhpcy5zb3VyY2VMYXllcj8uZmVhdHVyZXNJblJlY3QoeDAsIHkwLCB4MSwgeTEpID8/IFtdO1xuICAgIGlmIChmZWF0dXJlcy5sZW5ndGgpIHtcbiAgICAgIHZvaWQgdGhpcy5zdG9yZS5zZWxlY3RTb3VyY2VGZWF0dXJlcyhcbiAgICAgICAgZmVhdHVyZXMuc2xpY2UoMCwgU09VUkNFX01BUlFVRUVfTElNSVQpLm1hcCgoZikgPT4gZi5pZCksXG4gICAgICAgIHRydWUsXG4gICAgICApO1xuICAgIH1cbiAgfVxuXG4gIC8vIOKUgOKUgCBzaGFwZSBjb21taXQg4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSAXG4gIHByaXZhdGUgY29tbWl0UmVjdGFuZ2xlKHg6IG51bWJlciwgeTogbnVtYmVyLCB3aWR0aDogbnVtYmVyLCBoZWlnaHQ6IG51bWJlcik6IHZvaWQge1xuICAgIGNvbnN0IHJlY3QgPSBuZXcgUmVjdGFuZ2xlKCk7XG4gICAgcmVjdC54ID0geDtcbiAgICByZWN0LnkgPSB5O1xuICAgIHJlY3Qud2lkdGggPSB3aWR0aDtcbiAgICByZWN0LmhlaWdodCA9IGhlaWdodDtcbiAgICBjb25zdCByZWdpb24gPSBuZXcgUmVnaW9uKCk7XG4gICAgcmVnaW9uLmJvdW5kcyA9IHJlY3Q7XG4gICAgcmVnaW9uLmNvbG9yID0gdGhpcy5zdG9yZS5nZXRTaGFwZUNvbG9yKCk7XG4gICAgdGhpcy5zdG9yZS5hZGRSZWdpb24ocmVnaW9uKTtcbiAgICB0aGlzLm93bj8uYWRkKHJlZ2lvbi5pZCk7XG4gIH1cblxuICBwcml2YXRlIGNvbW1pdFBvbHlnb24ocG9pbnRzOiBBcnJheTxbbnVtYmVyLCBudW1iZXJdPiwgY2xvc2VkOiBib29sZWFuKTogdm9pZCB7XG4gICAgY29uc3QgcG9seSA9IG5ldyBQb2x5Z29uKCk7XG4gICAgcG9seS5ucG9pbnRzID0gcG9pbnRzLmxlbmd0aDtcbiAgICBwb2x5Lnhwb2ludHMgPSBwb2ludHMubWFwKChwKSA9PiBwWzBdKTtcbiAgICBwb2x5Lnlwb2ludHMgPSBwb2ludHMubWFwKChwKSA9PiBwWzFdKTtcbiAgICBwb2x5LmNvb3JkaW5hdGVzID0gcG9pbnRzLm1hcCgocCkgPT4gW3BbMF0sIHBbMV1dKTtcbiAgICBwb2x5LmNsb3NlZCA9IGNsb3NlZDtcbiAgICBjb25zdCByZWdpb24gPSBuZXcgUmVnaW9uKCk7XG4gICAgcmVnaW9uLmJvdW5kcyA9IHBvbHk7XG4gICAgcmVnaW9uLmNvbG9yID0gdGhpcy5zdG9yZS5nZXRTaGFwZUNvbG9yKCk7XG4gICAgcmVnaW9uLmxhYmVsID0gJ1JlZ2lvbic7XG4gICAgdGhpcy5zdG9yZS5hZGRSZWdpb24ocmVnaW9uKTtcbiAgICB0aGlzLm93bj8uYWRkKHJlZ2lvbi5pZCk7XG4gIH1cblxuICAvLyDilIDilIAgcmVuZGVyaW5nIOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgFxuICAvKiogU2hvdyBvciBoaWRlIHRoZSBkcmF3biByZWdpb25zLiBBIHJlZ2lvbiBiZWluZyBkcmF3biBzdGF5cyB2aXNpYmxlIGVpdGhlciB3YXkuICovXG4gIHNldFJlZ2lvbnNWaXNpYmxlKHZpc2libGU6IGJvb2xlYW4pOiB2b2lkIHtcbiAgICBpZiAodmlzaWJsZSA9PT0gdGhpcy5yZWdpb25zVmlzaWJsZSkgcmV0dXJuO1xuICAgIHRoaXMucmVnaW9uc1Zpc2libGUgPSB2aXNpYmxlO1xuICAgIHRoaXMuc291cmNlTGF5ZXI/LnNldFZpc2libGUodmlzaWJsZSk7XG4gICAgdGhpcy5yZWRyYXcoKTtcbiAgfVxuXG4gIC8qKiBGb2xsb3cgYSBjYW1lcmEgbW92ZTogb25lIHRyYW5zZm9ybSBhdHRyaWJ1dGUgcGx1cyB0aGUgc2NyZWVuLXNwYWNlIGVsZW1lbnRzLiAqL1xuICBwcml2YXRlIHVwZGF0ZUNhbWVyYSgpOiB2b2lkIHtcbiAgICBjb25zdCBhZmZpbmUgPSB0aGlzLnByb2plY3Rpb24uYWZmaW5lKCk7XG4gICAgdGhpcy5yZW5kZXJlci5zZXRDYW1lcmEoYWZmaW5lKTtcbiAgICB0aGlzLnNvdXJjZUxheWVyPy5zZXRDYW1lcmEoYWZmaW5lKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBSZWJ1aWxkIGV2ZXJ5IGVsZW1lbnQgZnJvbSB0aGUgc3RvcmU6IHRoZSByZWdpb25zIGluIHdvcmxkIGNvb3JkaW5hdGVzIChvbmUgdHJhbnNmb3JtZWRcbiAgICogZ3JvdXApLCB0aGVpciBsYWJlbHMsIGFuZCB0aGUgb3ZlcmxheS4gUmVhZHMgbm8gbGF5b3V0OiB0aGUgY2FtZXJhIGFmZmluZSBpcyB0aGUgdmlld2VyJ3MuXG4gICAqL1xuICByZWRyYXcoKTogdm9pZCB7XG4gICAgdGhpcy51cGRhdGVDYW1lcmEoKTtcbiAgICB0aGlzLnJlbmRlcmVyLnJlbmRlcih0aGlzLnJlZ2lvbnNWaXNpYmxlID8gdGhpcy5zdG9yZS5nZXRSZWdpb25zKCkgOiBbXSwgdGhpcy5zZWxlY3RlZCk7XG4gICAgdGhpcy5yZW5kZXJPdmVybGF5KCk7XG4gIH1cblxuICAvKiogUmVidWlsZCB0aGUgc2NyZWVuLXNwYWNlIG92ZXJsYXkgb25seTogdGhlIHNlbGVjdGVkIHJlZ2lvbnMnIGhhbmRsZXMgYW5kIHRoZSBkcmFmdC4gKi9cbiAgcHJpdmF0ZSByZW5kZXJPdmVybGF5KCk6IHZvaWQge1xuICAgIHRoaXMucmVuZGVyZXIucmVuZGVyT3ZlcmxheSh0aGlzLnJlZ2lvbnNWaXNpYmxlID8gdGhpcy5zdG9yZS5nZXRSZWdpb25zKCkgOiBbXSwgdGhpcy5zZWxlY3RlZCwge1xuICAgICAgcmVjdDogdGhpcy5kcmFmdFJlY3QsXG4gICAgICBwYXRoOiB0aGlzLmRyYWZ0UGF0aCxcbiAgICB9KTtcbiAgfVxufVxuIl19
520
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibmFwYXJpLXJlZ2lvbi1vdmVybGF5LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vc3JjL2xpYi9pbXBsZW1lbnRhdGlvbnMvbmFwYXJpLWpzL25hcGFyaS1yZWdpb24tb3ZlcmxheS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsWUFBWSxFQUFFLE1BQU0sTUFBTSxDQUFDO0FBR3BDLE9BQU8sRUFBRSxNQUFNLEVBQUUsU0FBUyxFQUFFLE9BQU8sRUFBRSxNQUFNLHFCQUFxQixDQUFDO0FBR2pFLE9BQU8sRUFBRSxpQkFBaUIsRUFBRSxvQkFBb0IsRUFBRSxNQUFNLDBDQUEwQyxDQUFDO0FBRW5HLE9BQU8sRUFDTCxTQUFTLEVBQ1QsV0FBVyxFQUNYLGFBQWEsRUFDYixjQUFjLEVBQ2QsYUFBYSxHQUNkLE1BQU0sc0NBQXNDLENBQUM7QUFFOUMsT0FBTyxFQUFXLHVCQUF1QixFQUFFLE1BQU0sc0NBQXNDLENBQUM7QUFDeEYsT0FBTyxFQUFFLGlCQUFpQixFQUFFLE1BQU0scUNBQXFDLENBQUM7QUFDeEUsT0FBTyxFQUFjLGVBQWUsRUFBRSxNQUFNLDhCQUE4QixDQUFDO0FBRTNFLE1BQU0sTUFBTSxHQUFHLDRCQUE0QixDQUFDO0FBQzVDOzs7Ozs7Ozs7R0FTRztBQUNILE1BQU0sZ0JBQWdCLEdBQUcsQ0FBQyxDQUFDO0FBQzNCOzs7Ozs7OztHQVFHO0FBQ0gsTUFBTSxnQkFBZ0IsR0FBRyxDQUFDLENBQUM7QUFDM0I7Ozs7R0FJRztBQUNILE1BQU0sY0FBYyxHQUFHLENBQUMsQ0FBQztBQUN6QixrR0FBa0c7QUFDbEcsTUFBTSxhQUFhLEdBQUcsRUFBRSxDQUFDO0FBQ3pCLDRFQUE0RTtBQUM1RSxNQUFNLGFBQWEsR0FBRyxDQUFDLENBQUM7QUFDeEIseUZBQXlGO0FBQ3pGLE1BQU0sZ0JBQWdCLEdBQUcsQ0FBQyxDQUFDO0FBNkIzQjs7Ozs7Ozs7Ozs7Ozs7Ozs7O0dBa0JHO0FBQ0gsTUFB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QUFJLENBQUMsY0FBYyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLFVBQVUsRUFBRSxDQUFDLENBQUMsQ0FBQyxFQUFFLEVBQUUsSUFBSSxDQUFDLFFBQVEsRUFBRTtZQUM3RixJQUFJLEVBQUUsSUFBSSxDQUFDLFNBQVM7WUFDcEIsSUFBSSxFQUFFLElBQUksQ0FBQyxTQUFTO1NBQ3JCLENBQUMsQ0FBQztJQUNMLENBQUM7Q0FDRiIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IFN1YnNjcmlwdGlvbiB9IGZyb20gJ3J4anMnO1xuXG5pbXBvcnQgeyBJUmVnaW9uT3ZlcmxheSwgUmVnaW9uVG9vbE1vZGUgfSBmcm9tICcuLi8uLi9jb250cmFjdHMvcmVnaW9uLW92ZXJsYXkuY29udHJhY3QnO1xuaW1wb3J0IHsgUmVnaW9uLCBSZWN0YW5nbGUsIFBvbHlnb24gfSBmcm9tICcuLi8uLi9tb2RlbHMvcmVnaW9uJztcbmltcG9ydCB7IFJlZ2lvblN0b3JlIH0gZnJvbSAnLi4vLi4vc3RvcmUvcmVnaW9uLXN0b3JlLnNlcnZpY2UnO1xuaW1wb3J0IHR5cGUgeyBBZmZpbmUgfSBmcm9tICcuLi8uLi9yZWdpb24tb3ZlcmxheS9zdmctcmVnaW9uLXJlbmRlcmVyJztcbmltcG9ydCB7IFJlZ2lvblNvdXJjZUxheWVyLCBTT1VSQ0VfTUFSUVVFRV9MSU1JVCB9IGZyb20gJy4uLy4uL3JlZ2lvbi1vdmVybGF5L3JlZ2lvbi1zb3VyY2UtbGF5ZXInO1xuXG5pbXBvcnQge1xuICBoaXRIYW5kbGUsXG4gIG5lYXJlc3RFZGdlLFxuICBuZWFyZXN0VmVydGV4LFxuICByZWdpb25Db250YWlucyxcbiAgcmVnaW9uc0luUmVjdCxcbn0gZnJvbSAnLi4vLi4vcmVnaW9uLW92ZXJsYXkvcmVnaW9uLWdlb21ldHJ5JztcblxuaW1wb3J0IHsgRHJhZ0JveCwgTmFwYXJpUmVnaW9uU3ZnUmVuZGVyZXIgfSBmcm9tICcuL3JlZ2lvbi1vdmVybGF5L3JlZ2lvbi1zdmctcmVuZGVyZXInO1xuaW1wb3J0IHsgT3ZlcmxheVByb2plY3Rpb24gfSBmcm9tICcuL3JlZ2lvbi1vdmVybGF5L292ZXJsYXktcHJvamVjdGlvbic7XG5pbXBvcnQgeyBSZWdpb25FZGl0LCBhcHBseVJlZ2lvbkVkaXQgfSBmcm9tICcuL3JlZ2lvbi1vdmVybGF5L3JlZ2lvbi1lZGl0JztcblxuY29uc3QgU1ZHX05TID0gJ2h0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnJztcbi8qKlxuICogTWluIGRyYWcgYmVmb3JlIGEgZnJlZWhhbmQgcGF0aCByZWNvcmRzIGFub3RoZXIgcG9pbnQsIGluIFNDUkVFTiBwaXhlbHMuXG4gKlxuICogU2NyZWVuIHJhdGhlciB0aGFuIHdvcmxkLCB3aGljaCBpcyB3aGF0IFwiMiBpbWFnZSBweFwiIGFsd2F5cyBtZWFudCBpbiBwcmFjdGljZTogYXQgMTAwJVxuICogem9vbSBvdmVyIGFuIGltYWdlIHRoZSB0d28gYXJlIHRoZSBzYW1lIHRoaW5nLiBUYWtlbiBhcyB3b3JsZCB1bml0cyBpdCBicmVha3Mgb24gYW55XG4gKiBkYXRhc2V0IHdob3NlIHdvcmxkIGlzIHNtYWxsIOKAlCBzZXFGSVNIJ3Mgc2FtcGxlIHNwYW5zIGFib3V0IDUgdW5pdHMsIHNvIGEgMi11bml0XG4gKiB0aHJlc2hvbGQgcmVjb3JkcyBhIHBvaW50IGV2ZXJ5IDQwJSBvZiB0aGUgd2F5IGFjcm9zcyBhbmQgYSBmcmVlaGFuZCBST0kgY29tZXMgb3V0IGFzIGFcbiAqIHRyaWFuZ2xlLiBBZ2FpbnN0IHRoZSBzY3JlZW4gaXQgYWxzbyBkb2VzIHRoZSByaWdodCB0aGluZyB1bmRlciB6b29tOiBkcmF3aW5nIHpvb21lZCBpblxuICogcmVjb3JkcyBhIGZpbmVyIHBhdGgsIGJlY2F1c2UgdGhhdCBpcyBleGFjdGx5IHdoZW4gdGhlIGV4dHJhIGRldGFpbCBpcyB2aXNpYmxlLlxuICovXG5jb25zdCBGUkVFSEFORF9TVEVQX1BYID0gMjtcbi8qKlxuICogU21hbGxlc3QgY29tbWl0dGVkIHJlY3RhbmdsZSwgaW4gU0NSRUVOIHBpeGVscyBvbiBlYWNoIHNpZGUuXG4gKlxuICogSXRzIGpvYiBpcyB0byB0aHJvdyBhd2F5IGEgY2xpY2sgdGhhdCB3YXMgbm90IGEgZHJhZy4gSGVsZCBpbiB3b3JsZCB1bml0cyDigJQgd2hpY2ggaXQgd2FzXG4gKiDigJQgaXQgaW5zdGVhZCB0aHJvd3MgYXdheSByZWFsIGRyYWdzIG9uIGFueSBkYXRhc2V0IHdob3NlIHdvcmxkIGlzIHNtYWxsOiBpbiBzZXFGSVNIJ3NcbiAqIH41IHggNyB1bml0IHNhbXBsZSBhIHJlY3RhbmdsZSBoYWQgdG8gY292ZXIgNDAlIG9mIHRoZSB3aWR0aCB0byBjb21taXQgYXQgYWxsLCBhbmRcbiAqIGFueXRoaW5nIHNtYWxsZXIgdmFuaXNoZWQgd2l0aCBubyBmZWVkYmFjay4gVGhhdCB3YXMgdGhlIGRpcmVjdCBjYXVzZSBvZiBST0lzIGJlaW5nXG4gKiBpbXBvc3NpYmxlIHRvIGNyZWF0ZSB0aGVyZS5cbiAqL1xuY29uc3QgTUlOX1JFQ1RfRFJBR19QWCA9IDI7XG4vKipcbiAqIEEgcnViYmVyIGJhbmQgc21hbGxlciB0aGFuIHRoaXMgb24gYm90aCBzaWRlcywgaW4gU0NSRUVOIHBpeGVscywgaXMgYSBjbGljayBvbiBlbXB0eSBzcGFjZVxuICogKGl0IGNsZWFycyB0aGUgc2VsZWN0aW9uKS4gU2NyZWVuIGZvciB0aGUgc2FtZSByZWFzb24gYXMge0BsaW5rIE1JTl9SRUNUX0RSQUdfUFh9OiAzIHdvcmxkXG4gKiB1bml0cyBpcyBvdmVyIGhhbGYgb2Ygc2VxRklTSCdzIHNhbXBsZS5cbiAqL1xuY29uc3QgTUlOX01BUlFVRUVfUFggPSAzO1xuLyoqIENsaWNrLWRpc3RhbmNlIChzY3JlZW4gcHgpIHdpdGhpbiB3aGljaCBhIHBvbHlnb24gY2xpY2sgc25hcHMgY2xvc2VkIG9udG8gdGhlIGZpcnN0IHZlcnRleC4gKi9cbmNvbnN0IENMT1NFX1NOQVBfUFggPSAxMDtcbi8qKiBTY3JlZW4tcHggaGl0IHJhZGl1cyBmb3IgZ3JhYmJpbmcgYSB2ZXJ0ZXggLyByZWN0YW5nbGUgY29ybmVyIGhhbmRsZS4gKi9cbmNvbnN0IEhBTkRMRV9ISVRfUFggPSA5O1xuLyoqIFNjcmVlbi1weCBkaXN0YW5jZSBmcm9tIGFuIG9wZW4gcG9seWxpbmUgd2l0aGluIHdoaWNoIGEgY2xpY2sgc2VsZWN0cyBpdCAoYXMgT1NEKS4gKi9cbmNvbnN0IE9QRU5fUEFUSF9ISVRfUFggPSA2O1xuXG4vKipcbiAqIFRoZSBzbGljZSBvZiB0aGUgbmFwYXJpIFZpZXdlciB0aGUgb3ZlcmxheSBuZWVkcyAoY29vcmQgdHJhbnNmb3JtcyArIGNvbnRyb2wgZ2F0aW5nKS5cbiAqXG4gKiBDT09SRElOQVRFIFNQQUNFUzogYGNhbnZhc1RvV29ybGRgIHRha2VzIENMSUVOVCBwaXhlbHMgKHZpZXdwb3J0IGNvb3JkaW5hdGVzLCBhcyBhIHBvaW50ZXJcbiAqIGV2ZW50J3MgYGNsaWVudFgvWWApLCBleGFjdGx5IGFzIG5hcGFyaS1qcyBgVmlld2VyLmNhbnZhc1RvV29ybGRgIGRvZXMuIGBjYW52YXNUcmFuc2Zvcm1gIGlzXG4gKiB0aGUgY2FtZXJhJ3Mgd29ybGQg4oaSIENBTlZBUy1MT0NBTCBDU1MtcGl4ZWwgYWZmaW5lLCBuYXBhcmktanMgYFZpZXdlci5jYW52YXNUcmFuc2Zvcm1gLCB3aGljaFxuICogcmVhZHMgbm8gbGF5b3V0OiBkcmF3aW5nIGFuZCBmb2xsb3dpbmcgdGhlIGNhbWVyYSB1c2UgaXQsIHNvIGEgY2FtZXJhIGZyYW1lIGNvc3RzIG9uZVxuICogYG1hdHJpeCguLi4pYCBhbmQgbm8gYGdldEJvdW5kaW5nQ2xpZW50UmVjdCgpYCAocmV2aWV3IE5BUEFSSS1CT1VOREFSWS0xMCkuIFRoZSBzdmcgY292ZXJzIHRoZVxuICogcGxvdCBob3N0IGFuZCB0aGUgY2FudmFzIGlzIHRoZSBob3N0J3MgaW4tZmxvdyBjaGlsZCBhdCBpdHMgdG9wLWxlZnQsIHNvIGNhbnZhcy1sb2NhbCBhbmRcbiAqIHN2Zy1sb2NhbCBwaXhlbHMgYXJlIHRoZSBzYW1lOyBhIHBvaW50ZXIncyBjbGllbnQgcGl4ZWxzIGFyZSBtYXBwZWQgaW50byB0aGUgc3ZnIGJ5IHRoZVxuICogb3ZlcmxheSBpdHNlbGYuXG4gKlxuICogRXhwb3J0ZWQgYmVjYXVzZSB0aGUgM0Qgc3BhdGlhbCBtb2RlIHN1cHBsaWVzIGEgU0NSRUVOLVNQQUNFIGltcGxlbWVudGF0aW9uIG9mIGl0OiB0aGVyZSB0aGVcbiAqIGRyYXduIHNoYXBlIGlzIGEgbGFzc28gaW4gY2FudmFzIHBpeGVscywgbm90IGEgcmVjdGFuZ2xlIGluIGltYWdlIHNwYWNlLCBzbyBcIndvcmxkXCIgaXMgdGhlXG4gKiBjYW52YXMgaXRzZWxmIOKAlCBgY2FudmFzVG9Xb3JsZGAgaXMgdGhlIGNsaWVudCDihpIgY2FudmFzIG9mZnNldCBhbmQgYGNhbnZhc1RyYW5zZm9ybWAgdGhlXG4gKiBpZGVudGl0eS4gVGhhdCBsZXRzIHRoZSAzRCB2aWV3IHJldXNlIHRoaXMgd2hvbGUgb3ZlcmxheSDigJQgZXZlcnkgdG9vbCwgdGhlIGhhbmRsZXMsIHRoZSBzdG9yZVxuICogcm91bmQtdHJpcCDigJQgd2l0aCBubyAzRC1zcGVjaWZpYyBkcmF3aW5nIGNvZGUuXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgT3ZlcmxheVZpZXdlciB7XG4gIC8qKiBDbGllbnQgcHgg4oaSIHdvcmxkLiAqL1xuICBjYW52YXNUb1dvcmxkKGNsaWVudFg6IG51bWJlciwgY2xpZW50WTogbnVtYmVyKTogW251bWJlciwgbnVtYmVyXTtcbiAgLyoqIFdvcmxkIOKGkiBjYW52YXMtbG9jYWwgKD0gc3ZnLWxvY2FsKSBDU1MgcHgsIGFzIGFuIFNWRyBhZmZpbmUgYFthLCBiLCBjLCBkLCBlLCBmXWAuICovXG4gIGNhbnZhc1RyYW5zZm9ybSgpOiBBZmZpbmU7XG4gIHNldENvbnRyb2xzRW5hYmxlZChlbmFibGVkOiBib29sZWFuKTogdm9pZDtcbiAgcmVhZG9ubHkgY2FtZXJhOiB7IHJlYWRvbmx5IGNoYW5nZWQ6IHsgY29ubmVjdChsaXN0ZW5lcjogKCkgPT4gdm9pZCk6ICgpID0+IHZvaWQgfSB9O1xufVxuXG4vKipcbiAqIFNWRyByZWdpb24gb3ZlcmxheSBmb3IgdGhlIG5hcGFyaS1qcyBXZWJHUFUgaW1hZ2UgdmlldyAoaml0LXVpIzEwMiksIG1pcnJvcmluZyB0aGUgT1NEIGJhY2tlbmQnc1xuICoge0BsaW5rIE9zZFJlZ2lvbk92ZXJsYXl9IGJ1dCBkcml2ZW4gYnkgbmFwYXJpJ3MgYGNhbnZhc1RvV29ybGRgL2BjYW52YXNUcmFuc2Zvcm1gIHRyYW5zZm9ybXNcbiAqIChzZWUge0BsaW5rIE92ZXJsYXlWaWV3ZXJ9IGZvciB0aGVpciBjb29yZGluYXRlIHNwYWNlcykuXG4gKiBWZWN0b3Igc2hhcGVzIGFyZSBkcmF3biBpbiBhbiBhYnNvbHV0ZWx5LXBvc2l0aW9uZWQgYDxzdmc+YCBvdmVyIHRoZSBjYW52YXMgKG5vIG5lZWQgdG8gcHVzaFxuICogdGhlbSB0aHJvdWdoIFdlYkdQVSkgYnkge0BsaW5rIE5hcGFyaVJlZ2lvblN2Z1JlbmRlcmVyfSBvdmVyIHRoZSBzaGFyZWQgYFN2Z1JlZ2lvblJlbmRlcmVyYDpcbiAqIGluIHdvcmxkIGNvb3JkaW5hdGVzIGluc2lkZSBvbmUgdHJhbnNmb3JtZWQgZ3JvdXAsIHJlYnVpbHQgb24gYSByZWdpb24gb3Igc2VsZWN0aW9uIGNoYW5nZSxcbiAqIHdoaWxlIGEgY2FtZXJhIG1vdmUgb25seSByZXdyaXRlcyB0aGUgdHJhbnNmb3JtIChuYXBhcmktanMncyBgY2FudmFzVHJhbnNmb3JtYCwgdGhlIGNhbWVyYVxuICogY2VudHJlL3pvb20pIGFuZCB0aGUgZmV3IHNjcmVlbi1zcGFjZSBoYW5kbGVzIGFuZCBsYWJlbHMuIFRoaXMgY2xhc3MgaXNcbiAqIHRoZSBnZXN0dXJlIGNvbnRyb2xsZXI6IHBvaW50ZXIgaGFuZGxlcnMsIHRoZSB0b29sIG1vZGUsIGFuZCB0aGUgZWRpdC9kcmFmdC9tYXJxdWVlIHN0YXRlLlxuICogSXQgd3JpdGVzIGNvbXBsZXRlZCBzaGFwZXMgdG8gdGhlIHNoYXJlZCB7QGxpbmsgUmVnaW9uU3RvcmV9IChzbyBzYXZlIC8gdW5kbyAvIGV4cG9ydCB3b3JrXG4gKiBpZGVudGljYWxseSB0byBPU0QpLlxuICpcbiAqIFN1cHBvcnRzIChqaXQtdWkjMTAyKTogcmVjdGFuZ2xlIC8gcG9seWdvbiAvIGZyZWVoYW5kIHBhdGggZHJhd2luZywgY2xpY2stc2VsZWN0IGFuZCBydWJiZXItYmFuZFxuICogbWFycXVlZSBzZWxlY3QsIHBhbi96b29tIGdhdGluZyB2aWEgYHNldENvbnRyb2xzRW5hYmxlZGAsIGJvZHkgbW92ZSwgdmVydGV4IG1vdmUvYWRkL2RlbGV0ZSxcbiAqIGJlemllciBoYW5kbGUgZWRpdGluZywgYW5kIGRvbnV0IGhvbGVzIChpbmNsdWRpbmcgaG9sZSB2ZXJ0ZXggKyBob2xlLWJlemllci1oYW5kbGUgZWRpdGluZykuXG4gKiBIaXQtdGVzdGluZyBzaGFyZXMgYHJlZ2lvbi1vdmVybGF5L3JlZ2lvbi1nZW9tZXRyeWAgd2l0aCB0aGUgT1NEIG92ZXJsYXksIHNvIGJvdGggZm9sbG93XG4gKiB0aGUgc2FtZSBydWxlcyAobXVsdGktcGFydCByZWdpb25zLCBob2xlcywgb3BlbiBwb2x5bGluZXMsIGhhbmRsZS1sZXNzIGJlemllciBjdXJ2ZXMpLlxuICovXG5leHBvcnQgY2xhc3MgTmFwYXJpUmVnaW9uT3ZlcmxheSBpbXBsZW1lbnRzIElSZWdpb25PdmVybGF5IHtcbiAgcHJpdmF0ZSByZWFkb25seSBzdmc6IFNWR1NWR0VsZW1lbnQ7XG4gIHByaXZhdGUgcmVhZG9ubHkgcmVuZGVyZXI6IE5hcGFyaVJlZ2lvblN2Z1JlbmRlcmVyO1xuICAvKiogVGhlIGltYWdlJ3MgcmVnaW9uIHNvdXJjZSwgZHJhd24gdW5kZXIgdGhlIHJlZ2lvbnMgYXQgdGhlIHpvb20ncyBsZXZlbCBvZiBkZXRhaWw7IG51bGxcbiAgICogIHdoZXJlIHdvcmxkIGlzIG5vdCB0aGUgaW1hZ2UgKHRoZSAzRCB2aWV3J3Mgc2NyZWVuLXNwYWNlIGxhc3NvcykuICovXG4gIHByaXZhdGUgcmVhZG9ubHkgc291cmNlTGF5ZXI6IFJlZ2lvblNvdXJjZUxheWVyIHwgbnVsbDtcbiAgLyoqIENsaWVudCDihpQgc3ZnLWxvY2FsIOKGlCB3b3JsZCBjb252ZXJzaW9ucywgd2l0aCB0aGUgc3ZnIG9yaWdpbiByZWFkIG9uY2UgcGVyIGdlc3R1cmUvcmVkcmF3LiAqL1xuICBwcml2YXRlIHJlYWRvbmx5IHByb2plY3Rpb246IE92ZXJsYXlQcm9qZWN0aW9uO1xuICBwcml2YXRlIHJlYWRvbmx5IHN1YnMgPSBuZXcgU3Vic2NyaXB0aW9uKCk7XG4gIHByaXZhdGUgcmVhZG9ubHkgZGlzY29ubmVjdENhbWVyYTogKCkgPT4gdm9pZDtcblxuICBwcml2YXRlIG1vZGU6IFJlZ2lvblRvb2xNb2RlID0gJ25vbmUnO1xuICBwcml2YXRlIHNlbGVjdGVkOiBudW1iZXJbXSA9IFtdO1xuXG4gIC8qKiBJbi1wcm9ncmVzcyBkcmF3aW5nIHN0YXRlIChpbWFnZS1zcGFjZSkuICovXG4gIHByaXZhdGUgZHJhZnRSZWN0OiBEcmFnQm94IHwgbnVsbCA9IG51bGw7XG4gIC8qKiBJbi1wcm9ncmVzcyBydWJiZXItYmFuZCBzZWxlY3Rpb24gbWFycXVlZSAoc2VsZWN0IG1vZGUpLCBpbWFnZS1zcGFjZS4gKi9cbiAgcHJpdmF0ZSBtYXJxdWVlOiBEcmFnQm94IHwgbnVsbCA9IG51bGw7XG4gIHByaXZhdGUgZHJhZnRQYXRoOiBBcnJheTxbbnVtYmVyLCBudW1iZXJdPiB8IG51bGwgPSBudWxsOyAvLyBmcmVlaGFuZCBvciBjbGljayBwb2x5Z29uXG4gIHByaXZhdGUgZHJhd2luZyA9IGZhbHNlOyAvLyBwb2ludGVyIGlzIGRvd24gZm9yIHJlY3QgLyBmcmVlaGFuZFxuICBwcml2YXRlIHJlZ2lvbnNWaXNpYmxlID0gdHJ1ZTtcblxuICAvKiogSW4tcHJvZ3Jlc3MgbWFuaXB1bGF0aW9uIChzZWxlY3QvbW92ZSBtb2Rlcyk6IGRyYWdnaW5nIGEgYm9keSwgYSBwb2x5Z29uIHZlcnRleCwgb3IgYVxuICAgKiAgcmVjdGFuZ2xlIGNvcm5lci4gYGFuY2hvcmAgaXMgdGhlIGZpeGVkIG9wcG9zaXRlIGNvcm5lciBmb3IgYSByZWN0YW5nbGUgcmVzaXplLiAqL1xuICBwcml2YXRlIGVkaXQ6IFJlZ2lvbkVkaXQgfCBudWxsID0gbnVsbDtcblxuICAvKipcbiAgICogU2NyZWVuIHNwYWNlICh0aGUgM0QgdmlldydzIGxhc3Nvcyk6IHRoZSByZWdpb25zIHRoaXMgb3ZlcmxheSBkcmV3IGl0c2VsZiwgYnkgaWQuIE9ubHkgdGhvc2VcbiAgICogYXJlIGRyYXduLCBwaWNrZWQgb3IgZWRpdGVkIGhlcmU7IGV2ZXJ5IG90aGVyIHJlZ2lvbiBpbiB0aGUgc3RvcmUgaXMgaW4gaW1hZ2Ugc3BhY2UgKHRoZVxuICAgKiBpbWFnZSdzIG93biwgYW4gaW1wb3J0ZWQgc2V0LCBzdHJ1Y3R1cmVzIGEgdHJlZSBjbGljayB0b29rIGZyb20gYSBzb3VyY2UpIGFuZCBtZWFucyBub3RoaW5nXG4gICAqIGF0IGNhbnZhcyBwaXhlbHMuIE51bGw6IGV2ZXJ5IHJlZ2lvbiAod29ybGQgaXMgdGhlIGltYWdlKS5cbiAgICovXG4gIHByaXZhdGUgcmVhZG9ubHkgb3duOiBTZXQ8bnVtYmVyPiB8IG51bGw7XG5cbiAgY29uc3RydWN0b3IoXG4gICAgcHJpdmF0ZSByZWFkb25seSBob3N0OiBIVE1MRWxlbWVudCxcbiAgICBwcml2YXRlIHJlYWRvbmx5IHZpZXdlcjogT3ZlcmxheVZpZXdlcixcbiAgICBwcml2YXRlIHJlYWRvbmx5IHN0b3JlOiBSZWdpb25TdG9yZSxcbiAgICBvcHRzOiB7IHJlZ2lvblNvdXJjZT86IGJvb2xlYW47IHNjcmVlblNwYWNlPzogYm9vbGVhbiB9ID0ge30sXG4gICkge1xuICAgIHRoaXMub3duID0gb3B0cy5zY3JlZW5TcGFjZSA/IG5ldyBTZXQoKSA6IG51bGw7XG4gICAgaWYgKGdldENvbXB1dGVkU3R5bGUoaG9zdCkucG9zaXRpb24gPT09ICdzdGF0aWMnKSBob3N0LnN0eWxlLnBvc2l0aW9uID0gJ3JlbGF0aXZlJztcbiAgICB0aGlzLnN2ZyA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnROUyhTVkdfTlMsICdzdmcnKTtcbiAgICBPYmplY3QuYXNzaWduKHRoaXMuc3ZnLnN0eWxlLCB7XG4gICAgICBwb3NpdGlvbjogJ2Fic29sdXRlJyxcbiAgICAgIGluc2V0OiAnMCcsXG4gICAgICB3aWR0aDogJzEwMCUnLFxuICAgICAgaGVpZ2h0OiAnMTAwJScsXG4gICAgICB6SW5kZXg6ICcyMCcsXG4gICAgICBwb2ludGVyRXZlbnRzOiAnbm9uZScsIC8vIHVudGlsIGEgdG9vbCBhY3RpdmF0ZXNcbiAgICAgIHRvdWNoQWN0aW9uOiAnbm9uZScsXG4gICAgfSBhcyBQYXJ0aWFsPENTU1N0eWxlRGVjbGFyYXRpb24+KTtcbiAgICB0aGlzLmhvc3QuYXBwZW5kQ2hpbGQodGhpcy5zdmcpO1xuICAgIHRoaXMucmVuZGVyZXIgPSBuZXcgTmFwYXJpUmVnaW9uU3ZnUmVuZGVyZXIodGhpcy5zdmcsIHRoaXMuc3RvcmUsIChyKSA9PiB0aGlzLmRyYXdzKHIpKTtcbiAgICB0aGlzLnByb2plY3Rpb24gPSBuZXcgT3ZlcmxheVByb2plY3Rpb24odGhpcy5zdmcsIHRoaXMudmlld2VyKTtcbiAgICB0aGlzLnNvdXJjZUxheWVyID1cbiAgICAgIG9wdHMucmVnaW9uU291cmNlID09PSBmYWxzZSA/IG51bGwgOiBuZXcgUmVnaW9uU291cmNlTGF5ZXIodGhpcy5zdmcsIHRoaXMuc3RvcmUuZ2V0RHJhd25SZWdpb25Tb3VyY2VWaWV3JCgpKTtcblxuICAgIHRoaXMuc3ZnLmFkZEV2ZW50TGlzdGVuZXIoJ3BvaW50ZXJkb3duJywgdGhpcy5vblBvaW50ZXJEb3duKTtcbiAgICB0aGlzLnN2Zy5hZGRFdmVudExpc3RlbmVyKCdwb2ludGVybW92ZScsIHRoaXMub25Qb2ludGVyTW92ZSk7XG4gICAgdGhpcy5zdmcuYWRkRXZlbnRMaXN0ZW5lcigncG9pbnRlcnVwJywgdGhpcy5vblBvaW50ZXJVcCk7XG4gICAgdGhpcy5zdmcuYWRkRXZlbnRMaXN0ZW5lcigncG9pbnRlcmNhbmNlbCcsIHRoaXMub25Qb2ludGVyQ2FuY2VsKTtcbiAgICB0aGlzLnN2Zy5hZGRFdmVudExpc3RlbmVyKCdsb3N0cG9pbnRlcmNhcHR1cmUnLCB0aGlzLm9uUG9pbnRlckNhbmNlbCk7XG4gICAgdGhpcy5zdmcuYWRkRXZlbnRMaXN0ZW5lcignZGJsY2xpY2snLCB0aGlzLm9uRGJsQ2xpY2spO1xuXG4gICAgdGhpcy5zdWJzLmFkZCh0aGlzLnN0b3JlLmdldFJlZ2lvblVwZGF0ZUV2ZW50KCkuc3Vic2NyaWJlKCgpID0+IHRoaXMucmVkcmF3KCkpKTtcbiAgICB0aGlzLnN1YnMuYWRkKFxuICAgICAgdGhpcy5zdG9yZS5nZXRTZWxlY3RlZFNoYXBlSW5kaWNlcyQoKS5zdWJzY3JpYmUoKGlkeCkgPT4ge1xuICAgICAgICB0aGlzLnNlbGVjdGVkID0gaWR4ID8/IFtdO1xuICAgICAgICB0aGlzLnJlZHJhdygpO1xuICAgICAgfSksXG4gICAgKTtcbiAgICAvLyBBIGNhbWVyYSBtb3ZlIHJld3JpdGVzIHRoZSByZW5kZXJlcidzIHRyYW5zZm9ybSBhbmQgaXRzIGZldyBzY3JlZW4tc3BhY2UgZWxlbWVudHM7XG4gICAgLy8gdGhlIHJlZ2lvbnMgYXJlIGRyYXduIGluIHdvcmxkIGNvb3JkaW5hdGVzIGFuZCBhcmUgbm90IHJlYnVpbHQgKE5BUEFSSS1CT1VOREFSWS0xMCkuXG4gICAgdGhpcy5kaXNjb25uZWN0Q2FtZXJhID0gdGhpcy52aWV3ZXIuY2FtZXJhLmNoYW5nZWQuY29ubmVjdCgoKSA9PiB0aGlzLnVwZGF0ZUNhbWVyYSgpKTtcbiAgICB0aGlzLnJlZHJhdygpO1xuICB9XG5cbiAgLy8g4pSA4pSAIElSZWdpb25PdmVybGF5IOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgFxuICAvKipcbiAgICogV2hldGhlciBhIHJlZ2lvbiB0b29sIGN1cnJlbnRseSBvd25zIHRoZSBwb2ludGVyLlxuICAgKlxuICAgKiBFeHBvc2VkIHNvIHRoZSBzcGF0aWFsIHZpZXdzIGNhbiB0ZWxsIGEgYmFyZSBjbGljayBvbiB0aGUgY2xvdWQgKHNlbGVjdCB0aGVcbiAgICogY2xhc3MgdW5kZXIgdGhlIGN1cnNvcikgZnJvbSBhIGNsaWNrIHRoYXQgYmVsb25ncyB0byBhIGRyYXdpbmcgZ2VzdHVyZSDigJRcbiAgICogcGxhY2luZyBhIHBvbHlnb24gdmVydGV4IGlzIGFsc28gYSBjbGljayB0aGF0IGRvZXMgbm90IG1vdmUsIGFuZCBpdCBtdXN0IG5vdFxuICAgKiBjaGFuZ2UgdGhlIHNlbGVjdGlvbiBiZWhpbmQgdGhlIHNoYXBlIGJlaW5nIGRyYXduLlxuICAgKi9cbiAgZ2V0IHRvb2xBY3RpdmUoKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIHRoaXMubW9kZSAhPT0gJ25vbmUnO1xuICB9XG5cbiAgc2V0TW9kZShtb2RlOiBSZWdpb25Ub29sTW9kZSk6IHZvaWQge1xuICAgIHRoaXMuZW5kR2VzdHVyZSgpO1xuICAgIHRoaXMubW9kZSA9IG1vZGU7XG4gICAgdGhpcy5kcmFmdFJlY3QgPSBudWxsO1xuICAgIHRoaXMuZHJhZnRQYXRoID0gbnVsbDtcbiAgICAvLyBUaGUgb3ZlcmxheSBvd25zIHBvaW50ZXIvbmF2aWdhdGlvbiBnYXRpbmc6IHdoaWxlIGEgdG9vbCBpcyBhY3RpdmUgaXQgY2FwdHVyZXMgdGhlIHBvaW50ZXJcbiAgICAvLyBhbmQgdGhlIG5hcGFyaSBjYW1lcmEgY29udHJvbHMgYXJlIGRpc2FibGVkOyAnbm9uZScgaGFuZHMgdGhlIHBvaW50ZXIgYmFjayBmb3IgcGFuL3pvb20uXG4gICAgY29uc3QgYWN0aXZlID0gbW9kZSAhPT0gJ25vbmUnO1xuICAgIHRoaXMudmlld2VyLnNldENvbnRyb2xzRW5hYmxlZCghYWN0aXZlKTtcbiAgICB0aGlzLnN2Zy5zdHlsZS5wb2ludGVyRXZlbnRzID0gYWN0aXZlID8gJ2F1dG8nIDogJ25vbmUnO1xuICAgIHRoaXMuc3ZnLnN0eWxlLmN1cnNvciA9IGFjdGl2ZSA/ICdjcm9zc2hhaXInIDogJ2RlZmF1bHQnO1xuICAgIHRoaXMucmVuZGVyT3ZlcmxheSgpO1xuICB9XG5cbiAgc2V0U2VsZWN0ZWRCZXppZXIoYmV6aWVyOiBib29sZWFuKTogdm9pZCB7XG4gICAgY29uc3Qgc2VsID0gdGhpcy5zZWxlY3RlZFJlZ2lvbigpO1xuICAgIGlmIChzZWw/LmlkICE9IG51bGwpIHRoaXMuc3RvcmUuc2V0QmV6aWVyKHNlbC5pZCwgYmV6aWVyKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBIb3cgZmluZWx5IGEgZHJhd24gdmVydGV4IG1heSBiZSBwbGFjZWQsIGluIHdvcmxkIHVuaXRzOiBvbmUgKGFuIGltYWdlJ3MgcGl4ZWxzKSBieVxuICAgKiBkZWZhdWx0LCBmaW5lciBmb3IgYSBkYXRhc2V0IHdob3NlIGNvb3JkaW5hdGVzIGFyZSBub3QgcGl4ZWxzIChzZWUgT3ZlcmxheVByb2plY3Rpb24pLlxuICAgKi9cbiAgc2V0V29ybGRRdWFudHVtKHF1YW50dW06IG51bWJlcik6IHZvaWQge1xuICAgIHRoaXMucHJvamVjdGlvbi5zZXRXb3JsZFF1YW50dW0ocXVhbnR1bSk7XG4gIH1cblxuICBkZXN0cm95KCk6IHZvaWQge1xuICAgIHRoaXMuc3ZnLnJlbW92ZUV2ZW50TGlzdGVuZXIoJ3BvaW50ZXJkb3duJywgdGhpcy5vblBvaW50ZXJEb3duKTtcbiAgICB0aGlzLnN2Zy5yZW1vdmVFdmVudExpc3RlbmVyKCdwb2ludGVybW92ZScsIHRoaXMub25Qb2ludGVyTW92ZSk7XG4gICAgdGhpcy5zdmcucmVtb3ZlRXZlbnRMaXN0ZW5lcigncG9pbnRlcnVwJywgdGhpcy5vblBvaW50ZXJVcCk7XG4gICAgdGhpcy5zdmcucmVtb3ZlRXZlbnRMaXN0ZW5lcigncG9pbnRlcmNhbmNlbCcsIHRoaXMub25Qb2ludGVyQ2FuY2VsKTtcbiAgICB0aGlzLnN2Zy5yZW1vdmVFdmVudExpc3RlbmVyKCdsb3N0cG9pbnRlcmNhcHR1cmUnLCB0aGlzLm9uUG9pbnRlckNhbmNlbCk7XG4gICAgdGhpcy5zdmcucmVtb3ZlRXZlbnRMaXN0ZW5lcignZGJsY2xpY2snLCB0aGlzLm9uRGJsQ2xpY2spO1xuICAgIHRoaXMuZGlzY29ubmVjdENhbWVyYSgpO1xuICAgIHRoaXMuc3Vicy51bnN1YnNjcmliZSgpO1xuICAgIC8vIEEgZHJhZyB0b3JuIGRvd24gbWlkLWdlc3R1cmUgKGEgYmFja2VuZCBzd2l0Y2gpIG11c3Qgc3RpbGwgY2xvc2UgaXRzIHN0b3JlIGJhdGNoLlxuICAgIHRoaXMuZW5kR2VzdHVyZSgpO1xuICAgIHRoaXMuc291cmNlTGF5ZXI/LmRlc3Ryb3koKTtcbiAgICBpZiAodGhpcy5zdmcucGFyZW50Tm9kZSkgdGhpcy5zdmcucGFyZW50Tm9kZS5yZW1vdmVDaGlsZCh0aGlzLnN2Zyk7XG4gIH1cblxuICAvLyDilIDilIAgcG9pbnRlciBoYW5kbGVycyDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIBcbiAgcHJpdmF0ZSByZWFkb25seSBvblBvaW50ZXJEb3duID0gKGU6IFBvaW50ZXJFdmVudCk6IHZvaWQgPT4ge1xuICAgIGlmICh0aGlzLm1vZGUgPT09ICdub25lJykgcmV0dXJuO1xuICAgIGUucHJldmVudERlZmF1bHQoKTtcbiAgICB0aGlzLnByb2plY3Rpb24ud2l0aE9yaWdpbigoKSA9PiB0aGlzLnBvaW50ZXJEb3duKGUpKTtcbiAgfTtcblxuICBwcml2YXRlIHBvaW50ZXJEb3duKGU6IFBvaW50ZXJFdmVudCk6IHZvaWQge1xuICAgIGNvbnN0IFtpeCwgaXldID0gdGhpcy5wcm9qZWN0aW9uLnRvSW1hZ2UoZS5jbGllbnRYLCBlLmNsaWVudFkpO1xuICAgIGlmICh0aGlzLm1vZGUgPT09ICdkcmF3cmVjdCcpIHtcbiAgICAgIHRoaXMuZHJhZnRSZWN0ID0geyB4MDogaXgsIHkwOiBpeSwgeDE6IGl4LCB5MTogaXkgfTtcbiAgICAgIHRoaXMuZHJhd2luZyA9IHRydWU7XG4gICAgICB0aGlzLnN2Zy5zZXRQb2ludGVyQ2FwdHVyZShlLnBvaW50ZXJJZCk7XG4gICAgfSBlbHNlIGlmICh0aGlzLm1vZGUgPT09ICdkcmF3Y2xvc2VkcGF0aCcgfHwgdGhpcy5tb2RlID09PSAnZHJhd29wZW5wYXRoJykge1xuICAgICAgdGhpcy5kcmFmdFBhdGggPSBbW2l4LCBpeV1dO1xuICAgICAgdGhpcy5kcmF3aW5nID0gdHJ1ZTtcbiAgICAgIHRoaXMuc3ZnLnNldFBvaW50ZXJDYXB0dXJlKGUucG9pbnRlcklkKTtcbiAgICB9IGVsc2UgaWYgKHRoaXMubW9kZSA9PT0gJ2RyYXdwb2x5Z29uJykge1xuICAgICAgdGhpcy5oYW5kbGVQb2x5Z29uQ2xpY2soaXgsIGl5LCBlLmNsaWVudFgsIGUuY2xpZW50WSk7XG4gICAgfSBlbHNlIGlmICh0aGlzLm1vZGUgPT09ICdzZWxlY3QnIHx8IHRoaXMubW9kZSA9PT0gJ21vdmUnKSB7XG4gICAgICB0aGlzLmJlZ2luTWFuaXB1bGF0aW9uKGl4LCBpeSwgZSk7XG4gICAgfSBlbHNlIGlmICh0aGlzLm1vZGUgPT09ICdhZGRwb2ludCcpIHtcbiAgICAgIHRoaXMuaGFuZGxlQWRkUG9pbnQoaXgsIGl5LCBlLmNsaWVudFgsIGUuY2xpZW50WSk7XG4gICAgfSBlbHNlIGlmICh0aGlzLm1vZGUgPT09ICdkZWxldGVwb2ludCcpIHtcbiAgICAgIHRoaXMuaGFuZGxlRGVsZXRlUG9pbnQoaXgsIGl5KTtcbiAgICB9XG4gICAgdGhpcy5yZWRyYXcoKTtcbiAgfVxuXG4gIHByaXZhdGUgcmVhZG9ubHkgb25Qb2ludGVyTW92ZSA9IChlOiBQb2ludGVyRXZlbnQpOiB2b2lkID0+IHtcbiAgICBjb25zdCBbaXgsIGl5XSA9IHRoaXMucHJvamVjdGlvbi50b0ltYWdlKGUuY2xpZW50WCwgZS5jbGllbnRZKTtcbiAgICBpZiAodGhpcy5tYXJxdWVlKSB7XG4gICAgICB0aGlzLm1hcnF1ZWUueDEgPSBpeDtcbiAgICAgIHRoaXMubWFycXVlZS55MSA9IGl5O1xuICAgICAgdGhpcy51cGRhdGVNYXJxdWVlRWwoKTsgLy8gdXBkYXRlIGp1c3QgdGhlIG1hcnF1ZWUgcmVjdCDigJQgTk9UIGEgZnVsbCByZWdpb24gcmVkcmF3XG4gICAgICByZXR1cm47XG4gICAgfVxuICAgIGlmICh0aGlzLmVkaXQpIHtcbiAgICAgIGFwcGx5UmVnaW9uRWRpdCh0aGlzLnN0b3JlLCB0aGlzLmVkaXQsIGl4LCBpeSk7XG4gICAgICB0aGlzLnJlZHJhdygpO1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICBpZiAoIXRoaXMuZHJhd2luZykgcmV0dXJuO1xuICAgIGlmICh0aGlzLmRyYWZ0UmVjdCkge1xuICAgICAgdGhpcy5kcmFmdFJlY3QueDEgPSBpeDtcbiAgICAgIHRoaXMuZHJhZnRSZWN0LnkxID0gaXk7XG4gICAgfSBlbHNlIGlmICh0aGlzLmRyYWZ0UGF0aCkge1xuICAgICAgY29uc3Qgc3RlcCA9IEZSRUVIQU5EX1NURVBfUFggKiB0aGlzLnByb2plY3Rpb24ud29ybGRQZXJDYW52YXNQaXhlbCgpO1xuICAgICAgY29uc3QgbGFzdCA9IHRoaXMuZHJhZnRQYXRoW3RoaXMuZHJhZnRQYXRoLmxlbmd0aCAtIDFdO1xuICAgICAgaWYgKE1hdGguYWJzKGl4IC0gbGFzdFswXSkgPj0gc3RlcCB8fCBNYXRoLmFicyhpeSAtIGxhc3RbMV0pID49IHN0ZXApIHtcbiAgICAgICAgdGhpcy5kcmFmdFBhdGgucHVzaChbaXgsIGl5XSk7XG4gICAgICB9XG4gICAgfVxuICAgIHRoaXMucmVuZGVyT3ZlcmxheSgpO1xuICB9O1xuXG4gIHByaXZhdGUgcmVhZG9ubHkgb25Qb2ludGVyVXAgPSAoZTogUG9pbnRlckV2ZW50KTogdm9pZCA9PiB7XG4gICAgaWYgKHRoaXMubWFycXVlZSkge1xuICAgICAgY29uc3QgbSA9IHRoaXMubWFycXVlZTtcbiAgICAgIHRoaXMubWFycXVlZSA9IG51bGw7XG4gICAgICB0aGlzLnJlbmRlcmVyLmNsZWFyTWFycXVlZSgpO1xuICAgICAgdHJ5IHtcbiAgICAgICAgdGhpcy5zdmcucmVsZWFzZVBvaW50ZXJDYXB0dXJlKGUucG9pbnRlcklkKTtcbiAgICAgIH0gY2F0Y2gge1xuICAgICAgICAvKiBhbHJlYWR5IHJlbGVhc2VkICovXG4gICAgICB9XG4gICAgICB0aGlzLmZpbmlzaE1hcnF1ZWUobSk7IC8vIHNldFNlbGVjdGVkU2hhcGVJbmRpY2VzIOKGkiBvbmUgcmVkcmF3IHZpYSB0aGUgc2VsZWN0aW9uIHN1YnNjcmlwdGlvblxuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICBpZiAodGhpcy5lZGl0KSB7XG4gICAgICB0aGlzLnN0b3JlLmVuZEJhdGNoKCk7XG4gICAgICB0aGlzLmVkaXQgPSBudWxsO1xuICAgICAgdHJ5IHtcbiAgICAgICAgdGhpcy5zdmcucmVsZWFzZVBvaW50ZXJDYXB0dXJlKGUucG9pbnRlcklkKTtcbiAgICAgIH0gY2F0Y2gge1xuICAgICAgICAvKiBhbHJlYWR5IHJlbGVhc2VkICovXG4gICAgICB9XG4gICAgICB0aGlzLnJlZHJhdygpO1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICBpZiAoIXRoaXMuZHJhd2luZykgcmV0dXJuO1xuICAgIHRoaXMuZHJhd2luZyA9IGZhbHNlO1xuICAgIHRyeSB7XG4gICAgICB0aGlzLnN2Zy5yZWxlYXNlUG9pbnRlckNhcHR1cmUoZS5wb2ludGVySWQpO1xuICAgIH0gY2F0Y2gge1xuICAgICAgLyogY2FwdHVyZSBtYXkgYWxyZWFkeSBiZSByZWxlYXNlZCAqL1xuICAgIH1cbiAgICBpZiAodGhpcy5kcmFmdFJlY3QpIHtcbiAgICAgIGNvbnN0IHsgeDAsIHkwLCB4MSwgeTEgfSA9IHRoaXMuZHJhZnRSZWN0O1xuICAgICAgY29uc3QgeCA9IE1hdGgubWluKHgwLCB4MSk7XG4gICAgICBjb25zdCB5ID0gTWF0aC5taW4oeTAsIHkxKTtcbiAgICAgIGNvbnN0IHcgPSBNYXRoLmFicyh4MSAtIHgwKTtcbiAgICAgIGNvbnN0IGggPSBNYXRoLmFicyh5MSAtIHkwKTtcbiAgICAgIHRoaXMuZHJhZnRSZWN0ID0gbnVsbDtcbiAgICAgIGNvbnN0IG1pbiA9IE1JTl9SRUNUX0RSQUdfUFggKiB0aGlzLnByb2plY3Rpb24ud29ybGRQZXJDYW52YXNQaXhlbCgpO1xuICAgICAgaWYgKHcgPj0gbWluICYmIGggPj0gbWluKSB0aGlzLmNvbW1pdFJlY3RhbmdsZSh4LCB5LCB3LCBoKTtcbiAgICB9IGVsc2UgaWYgKHRoaXMuZHJhZnRQYXRoKSB7XG4gICAgICBjb25zdCBwdHMgPSB0aGlzLmRyYWZ0UGF0aDtcbiAgICAgIHRoaXMuZHJhZnRQYXRoID0gbnVsbDtcbiAgICAgIGNvbnN0IGNsb3NlZCA9IHRoaXMubW9kZSA9PT0gJ2RyYXdjbG9zZWRwYXRoJztcbiAgICAgIGlmIChwdHMubGVuZ3RoID49IChjbG9zZWQgPyAzIDogMikpIHRoaXMuY29tbWl0UG9seWdvbihwdHMsIGNsb3NlZCk7XG4gICAgfVxuICAgIHRoaXMucmVkcmF3KCk7XG4gIH07XG5cbiAgLyoqXG4gICAqIFRoZSBwb2ludGVyIGdlc3R1cmUgZW5kZWQgd2l0aG91dCBhIHBvaW50ZXJ1cCAodGhlIGJyb3dzZXIgY2FuY2VsbGVkIGl0LCBvciBjYXB0dXJlIHdhc1xuICAgKiBsb3N0KTogZW5kIGl0IHdpdGhvdXQgY29tbWl0dGluZy4gQWxzbyBmaXJlcyBhZnRlciBldmVyeSBub3JtYWwgcmVsZWFzZSwgd2hlbiBub3RoaW5nXG4gICAqIGlzIGxpdmUgYW55IG1vcmUuXG4gICAqL1xuICBwcml2YXRlIHJlYWRvbmx5IG9uUG9pbnRlckNhbmNlbCA9ICgpOiB2b2lkID0+IHtcbiAgICBpZiAoIXRoaXMuZWRpdCAmJiAhdGhpcy5kcmF3aW5nICYmICF0aGlzLm1hcnF1ZWUpIHJldHVybjtcbiAgICB0aGlzLmVuZEdlc3R1cmUoKTtcbiAgICB0aGlzLnJlZHJhdygpO1xuICB9O1xuXG4gIC8qKlxuICAgKiBFbmQgd2hhdGV2ZXIgcG9pbnRlciBnZXN0dXJlIGlzIGxpdmUgd2l0aG91dCBjb21taXR0aW5nIGl0OiBjbG9zZSB0aGUgc3RvcmUgYmF0Y2ggYSBkcmFnXG4gICAqIG9wZW5lZCAoc28gbGF0ZXIgZWRpdHMgYXJlIGVtaXR0ZWQgYWdhaW4pIGFuZCBmb3JnZXQgdGhlIGRyYWcgKHNvIGEgYmFyZSBob3ZlciBubyBsb25nZXJcbiAgICogbW92ZXMgdGhlIHJlZ2lvbiksIGFuZCBkcm9wIHRoZSBtYXJxdWVlIGFuZCBhIHJlY3RhbmdsZS9mcmVlaGFuZCBkcmFmdC4gQSBjbGljay1wbGFjZWRcbiAgICogcG9seWdvbiBpcyBub3QgYSBwb2ludGVyIGdlc3R1cmUgYW5kIHN1cnZpdmVzLlxuICAgKi9cbiAgcHJpdmF0ZSBlbmRHZXN0dXJlKCk6IHZvaWQge1xuICAgIGlmICh0aGlzLmVkaXQpIHRoaXMuc3RvcmUuZW5kQmF0Y2goKTtcbiAgICB0aGlzLmVkaXQgPSBudWxsO1xuICAgIGlmICh0aGlzLmRyYXdpbmcpIHtcbiAgICAgIHRoaXMuZHJhZnRSZWN0ID0gbnVsbDtcbiAgICAgIHRoaXMuZHJhZnRQYXRoID0gbnVsbDtcbiAgICB9XG4gICAgdGhpcy5kcmF3aW5nID0gZmFsc2U7XG4gICAgdGhpcy5tYXJxdWVlID0gbnVsbDtcbiAgICB0aGlzLnJlbmRlcmVyLmNsZWFyTWFycXVlZSgpO1xuICB9XG5cbiAgLyoqIENsaWNrLXRvLXBsYWNlIHBvbHlnb246IGFkZCBhIHZlcnRleCwgb3IgY2xvc2Ugd2hlbiBjbGlja2luZyBuZWFyIHRoZSBmaXJzdCBvbmUuICovXG4gIHByaXZhdGUgaGFuZGxlUG9seWdvbkNsaWNrKGl4OiBudW1iZXIsIGl5OiBudW1iZXIsIGNsaWVudFg6IG51bWJlciwgY2xpZW50WTogbnVtYmVyKTogdm9pZCB7XG4gICAgaWYgKCF0aGlzLmRyYWZ0UGF0aCkge1xuICAgICAgdGhpcy5kcmFmdFBhdGggPSBbW2l4LCBpeV1dO1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICBjb25zdCBuZWFyID1cbiAgICAgIHRoaXMucHJvamVjdGlvbi5zY3JlZW5EaXN0KGNsaWVudFgsIGNsaWVudFksIHRoaXMuZHJhZnRQYXRoWzBdWzBdLCB0aGlzLmRyYWZ0UGF0aFswXVsxXSkgPD0gQ0xPU0VfU05BUF9QWCAmJlxuICAgICAgdGhpcy5kcmFmdFBhdGgubGVuZ3RoID49IDM7XG4gICAgaWYgKG5lYXIpIHtcbiAgICAgIGNvbnN0IHB0cyA9IHRoaXMuZHJhZnRQYXRoO1xuICAgICAgdGhpcy5kcmFmdFBhdGggPSBudWxsO1xuICAgICAgdGhpcy5jb21taXRQb2x5Z29uKHB0cywgdHJ1ZSk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHRoaXMuZHJhZnRQYXRoLnB1c2goW2l4LCBpeV0pO1xuICAgIH1cbiAgfVxuXG4gIHByaXZhdGUgcmVhZG9ubHkgb25EYmxDbGljayA9IChlOiBNb3VzZUV2ZW50KTogdm9pZCA9PiB7XG4gICAgaWYgKHRoaXMubW9kZSAhPT0gJ2RyYXdwb2x5Z29uJyB8fCAhdGhpcy5kcmFmdFBhdGgpIHJldHVybjtcbiAgICBlLnByZXZlbnREZWZhdWx0KCk7XG4gICAgY29uc3QgcHRzID0gdGhpcy5kcmFmdFBhdGg7XG4gICAgdGhpcy5kcmFmdFBhdGggPSBudWxsO1xuICAgIGlmIChwdHMubGVuZ3RoID49IDMpIHRoaXMuY29tbWl0UG9seWdvbihwdHMsIHRydWUpO1xuICAgIHRoaXMucmVkcmF3KCk7XG4gIH07XG5cbiAgLyoqIFRoZSBjdXJyZW50bHktc2VsZWN0ZWQgcmVnaW9uIChzaW5nbGUgc2VsZWN0aW9uKSB0aGlzIG92ZXJsYXkgZHJhd3MsIG9yIG51bGwuICovXG4gIHByaXZhdGUgc2VsZWN0ZWRSZWdpb24oKTogUmVnaW9uIHwgbnVsbCB7XG4gICAgY29uc3QgcmVnaW9ucyA9IHRoaXMuc3RvcmUuZ2V0UmVnaW9ucygpO1xuICAgIGNvbnN0IGkgPSB0aGlzLnNlbGVjdGVkWzBdO1xuICAgIGNvbnN0IHJlZ2lvbiA9IGkgIT0gbnVsbCAmJiBpID49IDAgJiYgaSA8IHJlZ2lvbnMubGVuZ3RoID8gcmVnaW9uc1tpXSA6IG51bGw7XG4gICAgcmV0dXJuIHJlZ2lvbiAmJiB0aGlzLmRyYXdzKHJlZ2lvbikgPyByZWdpb24gOiBudWxsO1xuICB9XG5cbiAgLyoqIFdoZXRoZXIgdGhpcyBvdmVybGF5IGRyYXdzIChhbmQgbGV0cyB0aGUgcG9pbnRlciBwaWNrKSBgcmVnaW9uYDogc2VlIHtAbGluayBvd259LiAqL1xuICBwcml2YXRlIGRyYXdzKHJlZ2lvbjogUmVnaW9uKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuICF0aGlzLm93biB8fCB0aGlzLm93bi5oYXMocmVnaW9uLmlkKTtcbiAgfVxuXG4gIC8qKiBUaGUgcmVnaW9ucyB0aGlzIG92ZXJsYXkgZHJldyBpbiBzY3JlZW4gc3BhY2UgKHRoZSAzRCB2aWV3J3MgbGFzc29zKTsgW10gaW4gaW1hZ2Ugc3BhY2UuICovXG4gIG93blJlZ2lvbklkcygpOiBudW1iZXJbXSB7XG4gICAgcmV0dXJuIHRoaXMub3duID8gWy4uLnRoaXMub3duXSA6IFtdO1xuICB9XG5cbiAgLyoqXG4gICAqIFN0YXJ0IGEgc2VsZWN0L21vdmUgaW50ZXJhY3Rpb246IGdyYWIgYSBoYW5kbGUgKHJlY3RhbmdsZSBjb3JuZXIpIG9yIHZlcnRleCBvZiB0aGUgYWxyZWFkeS1cbiAgICogc2VsZWN0ZWQgcmVnaW9uIGZpcnN0OyBvdGhlcndpc2Ugc2VsZWN0IHRoZSB0b3Btb3N0IHJlZ2lvbiB1bmRlciB0aGUgY3Vyc29yIGFuZCBkcmFnIGl0cyBib2R5LlxuICAgKi9cbiAgcHJpdmF0ZSBiZWdpbk1hbmlwdWxhdGlvbihpeDogbnVtYmVyLCBpeTogbnVtYmVyLCBlOiBQb2ludGVyRXZlbnQpOiB2b2lkIHtcbiAgICBjb25zdCBzZWwgPSB0aGlzLnNlbGVjdGVkUmVnaW9uKCk7XG4gICAgaWYgKHNlbD8uYm91bmRzKSB7XG4gICAgICBjb25zdCBbbHgsIGx5XSA9IHRoaXMucHJvamVjdGlvbi5jbGllbnRUb0xvY2FsKGUuY2xpZW50WCwgZS5jbGllbnRZKTtcbiAgICAgIGNvbnN0IGdyYWIgPSBoaXRIYW5kbGUoc2VsLCBseCwgbHksIHRoaXMucHJvamVjdGlvbi50b1NjcmVlbiwgSEFORExFX0hJVF9QWCk7XG4gICAgICBpZiAoZ3JhYikge1xuICAgICAgICB0aGlzLnN0b3JlLmJlZ2luQmF0Y2goKTtcbiAgICAgICAgdGhpcy5lZGl0ID0geyAuLi5ncmFiLCBpZDogc2VsLmlkLCBsYXN0OiBbaXgsIGl5XSB9O1xuICAgICAgICB0aGlzLnN2Zy5zZXRQb2ludGVyQ2FwdHVyZShlLnBvaW50ZXJJZCk7XG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cbiAgICB9XG4gICAgLy8gSGl0LXRlc3QgYm9kaWVzLCB0b3Btb3N0IGZpcnN0IChsYXN0IGRyYXduIHJlbmRlcnMgb24gdG9wKSwgYXQgdGhlIGV4YWN0IHBvaW50ZXJcbiAgICAvLyBwb3NpdGlvbiDigJQgc25hcHBpbmcgaXMgZm9yIHBsYWNpbmcgdmVydGljZXMsIG5vdCBmb3IgcGlja2luZy5cbiAgICBjb25zdCByZWdpb25zID0gdGhpcy5zdG9yZS5nZXRSZWdpb25zKCk7XG4gICAgY29uc3QgW3d4LCB3eV0gPSB0aGlzLnByb2plY3Rpb24udG9Xb3JsZChlLmNsaWVudFgsIGUuY2xpZW50WSk7XG4gICAgZm9yIChsZXQgaSA9IHJlZ2lvbnMubGVuZ3RoIC0gMTsgaSA+PSAwOyBpLS0pIHtcbiAgICAgIGlmICh0aGlzLnN0b3JlLmlzQ2xhc3NIaWRkZW4ocmVnaW9uc1tpXS5sYWJlbCkgfHwgIXRoaXMuZHJhd3MocmVnaW9uc1tpXSkpIGNvbnRpbnVlO1xuICAgICAgaWYgKHJlZ2lvbkNvbnRhaW5zKHJlZ2lvbnNbaV0sIHd4LCB3eSwgeyB0b1NjcmVlbjogdGhpcy5wcm9qZWN0aW9uLnRvU2NyZWVuLCB0b2xQeDogT1BFTl9QQVRIX0hJVF9QWCB9KSkge1xuICAgICAgICB0aGlzLnN0b3JlLnNlbGVjdFJlZ2lvbihyZWdpb25zW2ldKTtcbiAgICAgICAgdGhpcy5zdG9yZS5iZWdpbkJhdGNoKCk7XG4gICAgICAgIHRoaXMuZWRpdCA9IHsga2luZDogJ2JvZHknLCBpZDogcmVnaW9uc1tpXS5pZCwgbGFzdDogW2l4LCBpeV0gfTtcbiAgICAgICAgdGhpcy5zdmcuc2V0UG9pbnRlckNhcHR1cmUoZS5wb2ludGVySWQpO1xuICAgICAgICByZXR1cm47XG4gICAgICB9XG4gICAgfVxuICAgIC8vIEEgZmVhdHVyZSBvZiB0aGUgcmVnaW9uIHNvdXJjZTogdGFrZSBpdCBpbnRvIHRoZSByZWdpb25zIGFuZCBzZWxlY3QgaXQgKGEgZHJhZyBvbiBpdFxuICAgIC8vIG1vdmVzIGl0IG9uY2UgaXQgaXMgc2VsZWN0ZWQpLlxuICAgIGNvbnN0IGZlYXR1cmUgPSB0aGlzLnNvdXJjZUxheWVyPy5mZWF0dXJlQXQod3gsIHd5LCBPUEVOX1BBVEhfSElUX1BYKTtcbiAgICBpZiAoZmVhdHVyZSkge1xuICAgICAgdm9pZCB0aGlzLnN0b3JlLnNlbGVjdFNvdXJjZUZlYXR1cmVzKFtmZWF0dXJlLmlkXSwgZS5zaGlmdEtleSB8fCBlLm1ldGFLZXkgfHwgZS5jdHJsS2V5KTtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgLy8gRW1wdHkgc3BhY2U6IGluIHNlbGVjdCBtb2RlIHN0YXJ0IGEgcnViYmVyLWJhbmQgbWFycXVlZSAoc2VsZWN0cyB0aGUgcmVnaW9ucyBpdCBjb3ZlcnMgb25cbiAgICAvLyByZWxlYXNlKTsgaW4gbW92ZSBtb2RlIGp1c3QgY2xlYXIgdGhlIHNlbGVjdGlvbi5cbiAgICBpZiAodGhpcy5tb2RlID09PSAnc2VsZWN0Jykge1xuICAgICAgdGhpcy5tYXJxdWVlID0geyB4MDogaXgsIHkwOiBpeSwgeDE6IGl4LCB5MTogaXkgfTtcbiAgICAgIHRoaXMudXBkYXRlTWFycXVlZUVsKCk7XG4gICAgICB0aGlzLnN2Zy5zZXRQb2ludGVyQ2FwdHVyZShlLnBvaW50ZXJJZCk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHRoaXMuc3RvcmUuc2V0U2VsZWN0ZWRTaGFwZUluZGljZXMoW10pO1xuICAgIH1cbiAgfVxuXG4gIC8qKiBTaG93IHRoZSBtYXJxdWVlIHdoZXJlIGl0IGlzIG5vdyAob25seSB0aGUgbWFycXVlZSBlbGVtZW50OiBubyBmdWxsIHJlZ2lvbiByZWRyYXcpLiAqL1xuICBwcml2YXRlIHVwZGF0ZU1hcnF1ZWVFbCgpOiB2b2lkIHtcbiAgICBpZiAoIXRoaXMubWFycXVlZSkgcmV0dXJuO1xuICAgIGNvbnN0IHsgeDAsIHkwLCB4MSwgeTEgfSA9IHRoaXMubWFycXVlZTtcbiAgICBjb25zdCBbbHgsIGx5XSA9IHRoaXMucHJvamVjdGlvbi50b0xvY2FsKE1hdGgubWluKHgwLCB4MSksIE1hdGgubWluKHkwLCB5MSkpO1xuICAgIGNvbnN0IFtyeCwgcnldID0gdGhpcy5wcm9qZWN0aW9uLnRvTG9jYWwoTWF0aC5tYXgoeDAsIHgxKSwgTWF0aC5tYXgoeTAsIHkxKSk7XG4gICAgdGhpcy5yZW5kZXJlci5zaG93TWFycXVlZShseCwgbHksIHJ4LCByeSk7XG4gIH1cblxuICAvKiogYWRkcG9pbnQgbW9kZTogaW5zZXJ0IGEgdmVydGV4IGF0IHRoZSBjbGljayBvbiB0aGUgc2VsZWN0ZWQgcG9seWdvbidzIG5lYXJlc3QgZWRnZVxuICAgKiAgKGV4dGVyaW9yIG9yIGEgaG9sZSByaW5nKS4gKi9cbiAgcHJpdmF0ZSBoYW5kbGVBZGRQb2ludChpeDogbnVtYmVyLCBpeTogbnVtYmVyLCBjbGllbnRYOiBudW1iZXIsIGNsaWVudFk6IG51bWJlcik6IHZvaWQge1xuICAgIGNvbnN0IHNlbCA9IHRoaXMuc2VsZWN0ZWRSZWdpb24oKTtcbiAgICBpZiAoIXNlbCkgcmV0dXJuO1xuICAgIGNvbnN0IFtseCwgbHldID0gdGhpcy5wcm9qZWN0aW9uLmNsaWVudFRvTG9jYWwoY2xpZW50WCwgY2xpZW50WSk7XG4gICAgY29uc3QgZWRnZSA9IG5lYXJlc3RFZGdlKHNlbCwgbHgsIGx5LCB0aGlzLnByb2plY3Rpb24udG9TY3JlZW4pO1xuICAgIGlmICghZWRnZSkgcmV0dXJuO1xuICAgIGlmIChlZGdlLnJpbmcgPCAwKSB0aGlzLnN0b3JlLmFkZFZlcnRleChzZWwuaWQsIGVkZ2Uuc2VnSW5kZXgsIGl4LCBpeSk7XG4gICAgZWxzZSB0aGlzLnN0b3JlLmFkZEhvbGVWZXJ0ZXgoc2VsLmlkLCBlZGdlLnJpbmcsIGVkZ2Uuc2VnSW5kZXgsIGl4LCBpeSk7XG4gIH1cblxuICAvKiogZGVsZXRlcG9pbnQgbW9kZTogcmVtb3ZlIHRoZSBzZWxlY3RlZCBwb2x5Z29uJ3MgdmVydGV4IG5lYXJlc3QgdGhlIGNsaWNrIChleHRlcmlvciBvciBhXG4gICAqICBob2xlIHJpbmcpLiAqL1xuICBwcml2YXRlIGhhbmRsZURlbGV0ZVBvaW50KGl4OiBudW1iZXIsIGl5OiBudW1iZXIpOiB2b2lkIHtcbiAgICBjb25zdCBzZWwgPSB0aGlzLnNlbGVjdGVkUmVnaW9uKCk7XG4gICAgaWYgKCFzZWwpIHJldHVybjtcbiAgICBjb25zdCB2ID0gbmVhcmVzdFZlcnRleChzZWwsIGl4LCBpeSk7XG4gICAgaWYgKCF2KSByZXR1cm47XG4gICAgaWYgKHYucmluZyA8IDApIHRoaXMuc3RvcmUuZGVsZXRlVmVydGV4KHNlbC5pZCwgdi5pbmRleCk7XG4gICAgZWxzZSB0aGlzLnN0b3JlLmRlbGV0ZUhvbGVWZXJ0ZXgoc2VsLmlkLCB2LnJpbmcsIHYuaW5kZXgpO1xuICB9XG5cbiAgLyoqIEZpbmFsaXplIGEgcnViYmVyLWJhbmQgbWFycXVlZTogc2VsZWN0IGV2ZXJ5IHJlZ2lvbiB3aG9zZSBib3VuZGluZyBib3ggaXQgb3ZlcmxhcHMgKGFcbiAgICogIG1hcnF1ZWUgdW5kZXIge0BsaW5rIE1JTl9NQVJRVUVFX1BYfSBpcyBhIGNsaWNrIG9uIGVtcHR5IHNwYWNlIOKGkiBjbGVhciB0aGUgc2VsZWN0aW9uKS4gKi9cbiAgcHJpdmF0ZSBmaW5pc2hNYXJxdWVlKG06IERyYWdCb3gpOiB2b2lkIHtcbiAgICBjb25zdCB4MCA9IE1hdGgubWluKG0ueDAsIG0ueDEpO1xuICAgIGNvbnN0IHgxID0gTWF0aC5tYXgobS54MCwgbS54MSk7XG4gICAgY29uc3QgeTAgPSBNYXRoLm1pbihtLnkwLCBtLnkxKTtcbiAgICBjb25zdCB5MSA9IE1hdGgubWF4KG0ueTAsIG0ueTEpO1xuICAgIGNvbnN0IG1pbiA9IE1JTl9NQVJRVUVFX1BYICogdGhpcy5wcm9qZWN0aW9uLndvcmxkUGVyQ2FudmFzUGl4ZWwoKTtcbiAgICBpZiAoeDEgLSB4MCA8IG1pbiAmJiB5MSAtIHkwIDwgbWluKSB7XG4gICAgICB0aGlzLnN0b3JlLnNldFNlbGVjdGVkU2hhcGVJbmRpY2VzKFtdKTtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgY29uc3QgcmVnaW9ucyA9IHRoaXMuc3RvcmUuZ2V0UmVnaW9ucygpO1xuICAgIHRoaXMuc3RvcmUuc2V0U2VsZWN0ZWRTaGFwZUluZGljZXMoXG4gICAgICByZWdpb25zSW5SZWN0KHJlZ2lvbnMsIHgwLCB5MCwgeDEsIHkxLCB7XG4gICAgICAgIHNraXBQcm9maWxlczogdHJ1ZSxcbiAgICAgICAgc2tpcDogKHIpID0+IHRoaXMuc3RvcmUuaXNDbGFzc0hpZGRlbihyLmxhYmVsKSB8fCAhdGhpcy5kcmF3cyhyKSxcbiAgICAgIH0pLFxuICAgICk7XG4gICAgY29uc3QgZmVhdHVyZXMgPSB0aGlzLnNvdXJjZUxheWVyPy5mZWF0dXJlc0luUmVjdCh4MCwgeTAsIHgxLCB5MSkgPz8gW107XG4gICAgaWYgKGZlYXR1cmVzLmxlbmd0aCkge1xuICAgICAgdm9pZCB0aGlzLnN0b3JlLnNlbGVjdFNvdXJjZUZlYXR1cmVzKFxuICAgICAgICBmZWF0dXJlcy5zbGljZSgwLCBTT1VSQ0VfTUFSUVVFRV9MSU1JVCkubWFwKChmKSA9PiBmLmlkKSxcbiAgICAgICAgdHJ1ZSxcbiAgICAgICk7XG4gICAgfVxuICB9XG5cbiAgLy8g4pSA4pSAIHNoYXBlIGNvbW1pdCDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIBcbiAgcHJpdmF0ZSBjb21taXRSZWN0YW5nbGUoeDogbnVtYmVyLCB5OiBudW1iZXIsIHdpZHRoOiBudW1iZXIsIGhlaWdodDogbnVtYmVyKTogdm9pZCB7XG4gICAgY29uc3QgcmVjdCA9IG5ldyBSZWN0YW5nbGUoKTtcbiAgICByZWN0LnggPSB4O1xuICAgIHJlY3QueSA9IHk7XG4gICAgcmVjdC53aWR0aCA9IHdpZHRoO1xuICAgIHJlY3QuaGVpZ2h0ID0gaGVpZ2h0O1xuICAgIGNvbnN0IHJlZ2lvbiA9IG5ldyBSZWdpb24oKTtcbiAgICByZWdpb24uYm91bmRzID0gcmVjdDtcbiAgICByZWdpb24uY29sb3IgPSB0aGlzLnN0b3JlLmdldFNoYXBlQ29sb3IoKTtcbiAgICB0aGlzLnN0b3JlLmFkZFJlZ2lvbihyZWdpb24pO1xuICAgIHRoaXMub3duPy5hZGQocmVnaW9uLmlkKTtcbiAgfVxuXG4gIHByaXZhdGUgY29tbWl0UG9seWdvbihwb2ludHM6IEFycmF5PFtudW1iZXIsIG51bWJlcl0+LCBjbG9zZWQ6IGJvb2xlYW4pOiB2b2lkIHtcbiAgICBjb25zdCBwb2x5ID0gbmV3IFBvbHlnb24oKTtcbiAgICBwb2x5Lm5wb2ludHMgPSBwb2ludHMubGVuZ3RoO1xuICAgIHBvbHkueHBvaW50cyA9IHBvaW50cy5tYXAoKHApID0+IHBbMF0pO1xuICAgIHBvbHkueXBvaW50cyA9IHBvaW50cy5tYXAoKHApID0+IHBbMV0pO1xuICAgIHBvbHkuY29vcmRpbmF0ZXMgPSBwb2ludHMubWFwKChwKSA9PiBbcFswXSwgcFsxXV0pO1xuICAgIHBvbHkuY2xvc2VkID0gY2xvc2VkO1xuICAgIGNvbnN0IHJlZ2lvbiA9IG5ldyBSZWdpb24oKTtcbiAgICByZWdpb24uYm91bmRzID0gcG9seTtcbiAgICByZWdpb24uY29sb3IgPSB0aGlzLnN0b3JlLmdldFNoYXBlQ29sb3IoKTtcbiAgICByZWdpb24ubGFiZWwgPSAnUmVnaW9uJztcbiAgICB0aGlzLnN0b3JlLmFkZFJlZ2lvbihyZWdpb24pO1xuICAgIHRoaXMub3duPy5hZGQocmVnaW9uLmlkKTtcbiAgfVxuXG4gIC8vIOKUgOKUgCByZW5kZXJpbmcg4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSAXG4gIC8qKiBTaG93IG9yIGhpZGUgdGhlIGRyYXduIHJlZ2lvbnMuIEEgcmVnaW9uIGJlaW5nIGRyYXduIHN0YXlzIHZpc2libGUgZWl0aGVyIHdheS4gKi9cbiAgc2V0UmVnaW9uc1Zpc2libGUodmlzaWJsZTogYm9vbGVhbik6IHZvaWQge1xuICAgIGlmICh2aXNpYmxlID09PSB0aGlzLnJlZ2lvbnNWaXNpYmxlKSByZXR1cm47XG4gICAgdGhpcy5yZWdpb25zVmlzaWJsZSA9IHZpc2libGU7XG4gICAgdGhpcy5zb3VyY2VMYXllcj8uc2V0VmlzaWJsZSh2aXNpYmxlKTtcbiAgICB0aGlzLnJlZHJhdygpO1xuICB9XG5cbiAgLyoqIEZvbGxvdyBhIGNhbWVyYSBtb3ZlOiBvbmUgdHJhbnNmb3JtIGF0dHJpYnV0ZSBwbHVzIHRoZSBzY3JlZW4tc3BhY2UgZWxlbWVudHMuICovXG4gIHByaXZhdGUgdXBkYXRlQ2FtZXJhKCk6IHZvaWQge1xuICAgIGNvbnN0IGFmZmluZSA9IHRoaXMucHJvamVjdGlvbi5hZmZpbmUoKTtcbiAgICB0aGlzLnJlbmRlcmVyLnNldENhbWVyYShhZmZpbmUpO1xuICAgIHRoaXMuc291cmNlTGF5ZXI/LnNldENhbWVyYShhZmZpbmUpO1xuICB9XG5cbiAgLyoqXG4gICAqIFJlYnVpbGQgZXZlcnkgZWxlbWVudCBmcm9tIHRoZSBzdG9yZTogdGhlIHJlZ2lvbnMgaW4gd29ybGQgY29vcmRpbmF0ZXMgKG9uZSB0cmFuc2Zvcm1lZFxuICAgKiBncm91cCksIHRoZWlyIGxhYmVscywgYW5kIHRoZSBvdmVybGF5LiBSZWFkcyBubyBsYXlvdXQ6IHRoZSBjYW1lcmEgYWZmaW5lIGlzIHRoZSB2aWV3ZXIncy5cbiAgICovXG4gIHJlZHJhdygpOiB2b2lkIHtcbiAgICB0aGlzLnVwZGF0ZUNhbWVyYSgpO1xuICAgIHRoaXMucmVuZGVyZXIucmVuZGVyKHRoaXMucmVnaW9uc1Zpc2libGUgPyB0aGlzLnN0b3JlLmdldFJlZ2lvbnMoKSA6IFtdLCB0aGlzLnNlbGVjdGVkKTtcbiAgICB0aGlzLnJlbmRlck92ZXJsYXkoKTtcbiAgfVxuXG4gIC8qKiBSZWJ1aWxkIHRoZSBzY3JlZW4tc3BhY2Ugb3ZlcmxheSBvbmx5OiB0aGUgc2VsZWN0ZWQgcmVnaW9ucycgaGFuZGxlcyBhbmQgdGhlIGRyYWZ0LiAqL1xuICBwcml2YXRlIHJlbmRlck92ZXJsYXkoKTogdm9pZCB7XG4gICAgdGhpcy5yZW5kZXJlci5yZW5kZXJPdmVybGF5KHRoaXMucmVnaW9uc1Zpc2libGUgPyB0aGlzLnN0b3JlLmdldFJlZ2lvbnMoKSA6IFtdLCB0aGlzLnNlbGVjdGVkLCB7XG4gICAgICByZWN0OiB0aGlzLmRyYWZ0UmVjdCxcbiAgICAgIHBhdGg6IHRoaXMuZHJhZnRQYXRoLFxuICAgIH0pO1xuICB9XG59XG4iXX0=
@@ -1,2 +1,2 @@
1
1
  export {};
2
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibmFwYXJpLXNjZW5lLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vc3JjL2xpYi9pbXBsZW1lbnRhdGlvbnMvbmFwYXJpLWpzL25hcGFyaS1zY2VuZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHR5cGUgeyBSZWdpb25NZXNoM0QgfSBmcm9tICcuL25hcGFyaS12b2x1bWUtcmVnaW9uLW1lc2hlcyc7XG5pbXBvcnQgdHlwZSB7IFZpZXdlciB9IGZyb20gJ25hcGFyaS1qcyc7XG5pbXBvcnQgdHlwZSB7IFZvbHVtZUZyYW1lIH0gZnJvbSAnLi9uYXBhcmktdm9sdW1lLXJlZ2lvbi1tZXNoZXMnO1xuaW1wb3J0IHR5cGUgeyBQbGFuZUF4aXMsIFNsaWNlUGxhbmVzIH0gZnJvbSAnLi9uYXBhcmktdm9sdW1lLXNsaWNlLXBsYW5lcyc7XG5cbmltcG9ydCB7IElJbWFnZUluZm8gfSBmcm9tICcuLi8uLi9jb250cmFjdHMvaW1hZ2UuY29udHJhY3QnO1xuaW1wb3J0IHsgSUhpc3RvZ3JhbSB9IGZyb20gJy4uLy4uL2NvbnRyYWN0cy9jaGFubmVsLWhpc3RvZ3JhbS1hcGkuY29udHJhY3QnO1xuaW1wb3J0IHsgSUlzb3N1cmZhY2VDb250cm9scywgSVN1cmZhY2UzZENvbnRyb2xzIH0gZnJvbSAnLi4vLi4vY29udHJhY3RzL3Zpc3VhbGl6ZXIuY29udHJhY3QnO1xuaW1wb3J0IHsgU3BhdGlhbE9ic2VydmF0aW9ucyB9IGZyb20gJy4uLy4uL2NvbnRyYWN0cy9zcGF0aWFsLWRhdGFzZXQuY29udHJhY3QnO1xuaW1wb3J0IHsgVmlzdWFsaXplclN0b3JlIH0gZnJvbSAnLi4vLi4vc3RvcmUvdmlzdWFsaXplci1zdG9yZS5zZXJ2aWNlJztcbmltcG9ydCB7IFJlZ2lvblN0b3JlIH0gZnJvbSAnLi4vLi4vc3RvcmUvcmVnaW9uLXN0b3JlLnNlcnZpY2UnO1xuaW1wb3J0IHsgTmFwYXJpVGlsZUNsaWVudCB9IGZyb20gJy4vbmFwYXJpLXRpbGUtY2xpZW50JztcbmltcG9ydCB7IE5hcGFyaURpc3BsYXlTdGF0ZSB9IGZyb20gJy4vbmFwYXJpLWRpc3BsYXktc3RhdGUnO1xuaW1wb3J0IHsgTG9hZGluZ0JhZGdlU3RhdGUgfSBmcm9tICcuL25hcGFyaS1sb2FkaW5nLXN0YXRlJztcbmltcG9ydCB7IE5hcGFyaVRvb2xCcmlkZ2UgfSBmcm9tICcuL25hcGFyaS10b29sLWJyaWRnZSc7XG5cbi8qKlxuICogV2hhdCBvbmUgYHBsb3QoKWAgbW91bnRzIGludG8gdGhlIHZpZXdlciAocmV2aWV3IEFwcGVuZGl4IEIpOiB0aGUgMkQgaW1hZ2UgKGFsb25lLCB1bmRlciB0aGVcbiAqIHJlZ2lvbi1jZW50cm9pZCBzY2F0dGVyLCBvciB1bmRlciB0aGUgc3BhdGlhbCBtYXJrZXJzKSwgYSB2b2x1bWUsIGEgc3VyZmFjZSwgYSAzRCBzY2F0dGVyIG9yIHRoZVxuICogc3BhdGlhbCAzRCBjbG91ZC4gVGhlIHNlcnZpY2UgcGlja3Mgb25lIHBlciBwbG90IHR5cGUgYW5kIHRhbGtzIHRvIGl0IHRocm91Z2ggdGhpcyBpbnRlcmZhY2VcbiAqIGluc3RlYWQgb2YgYXNraW5nIHdoaWNoIGxheWVyIGhhbmRsZSBoYXBwZW5zIHRvIGJlIG5vbi1udWxsOyBhIHNjZW5lIG93bnMgZXZlcnkgbGF5ZXIsIGtleSxcbiAqIHN1YnNjcmlwdGlvbiBhbmQgbGlzdGVuZXIgaXQgY3JlYXRlcywgYW5kIHtAbGluayBkaXNwb3NlfSBkcm9wcyB0aGVtIGFsbCDigJQgc28gYSByZS1wbG90IGNhbiBub1xuICogbG9uZ2VyIGluaGVyaXQgYSBzdGFsZSBcImFscmVhZHkgYnVpbHRcIiBrZXkgZnJvbSB0aGUgcHJldmlvdXMgb25lIChOQVBBUkktU1ZDLTEsIC04KS5cbiAqL1xuZXhwb3J0IGludGVyZmFjZSBOYXBhcmlTY2VuZSB7XG4gIC8qKiBCdWlsZCB0aGUgc2NlbmUgaW50byB0aGUgdmlld2VyLiBSZXNvbHZlcyBvbmNlIHRoZSBmaXJzdCBmcmFtZSdzIGRhdGEgaXMgaW4uICovXG4gIG1vdW50KCk6IFByb21pc2U8dm9pZD47XG4gIC8qKiBUaGUgc3RhY2sgc2xpZGVyIG1vdmVkIHRvIGB6YCAoYWxyZWFkeSByZWNvcmRlZCBhcyB0aGUgaW1hZ2UncyBzbGljZSkuICovXG4gIHNldFooejogbnVtYmVyKTogdm9pZDtcbiAgLyoqIFRoZSBoaXN0b2dyYW0gcGFuZSdzIGRpc3RyaWJ1dGlvbiBmb3IgYGNoYW5uZWxgLCBvciBudWxsIHdoZW4gdGhlcmUgaXMgbm9uZSAoeWV0KS4gKi9cbiAgaGlzdG9ncmFtKGNoYW5uZWw6IG51bWJlciwgYmluczogbnVtYmVyKTogSUhpc3RvZ3JhbSB8IG51bGw7XG4gIC8qKiBUaGUgaXNvc3VyZmFjZSB0aHJlc2hvbGQgY29udHJvbHMgKHZvbHVtZSBzY2VuZXMgb25seSkuICovXG4gIGlzb0NvbnRyb2xzPygpOiBJSXNvc3VyZmFjZUNvbnRyb2xzIHwgbnVsbDtcbiAgLyoqIFRoZSAzRCBjYW1lcmEvYXhlcy93aXJlZnJhbWUgY29udHJvbHMgKDNEIHNjZW5lcyBvbmx5KS4gKi9cbiAgc3VyZmFjZTNkQ29udHJvbHM/KCk6IElTdXJmYWNlM2RDb250cm9scyB8IG51bGw7XG4gIC8qKiBCaWxpbmVhciB2cyBuZWFyZXN0LW5laWdoYm91ciBpbWFnZSBzYW1wbGluZyBjaGFuZ2VkICgyRCBpbWFnZSBzY2VuZXMpLiAqL1xuICBzZXRJbWFnZVNtb290aGluZz8oZW5hYmxlZDogYm9vbGVhbik6IHZvaWQ7XG4gIC8qKiBUaGUgb3ZlcnZpZXcgbmF2aWdhdG9yIHdhcyBzaG93biBvciBoaWRkZW4gKDJEIGltYWdlIHNjZW5lcykuICovXG4gIHNldE5hdmlnYXRvclZpc2libGU/KHZpc2libGU6IGJvb2xlYW4pOiB2b2lkO1xuICAvKiogT2JzZXJ2YXRpb25zIHByb2plY3RlZCB0byBjYW52YXMgcGl4ZWxzICh0aGUgc3BhdGlhbCAzRCBjbG91ZCksIG9yIG51bGwuICovXG4gIHNjcmVlblByb2plY3Rpb24/KG9iczogU3BhdGlhbE9ic2VydmF0aW9ucyk6IEZsb2F0MzJBcnJheSB8IG51bGw7XG4gIC8qKiBTaG93IHRoZXNlIHJlZ2lvbiByZWNvbnN0cnVjdGlvbnMgaW4gdGhlIDNEIHZpZXcgKHZvbHVtZSBzY2VuZXMgb25seSkuICovXG4gIHNldFJlZ2lvbk1lc2hlcz8obWVzaGVzOiByZWFkb25seSBSZWdpb25NZXNoM0RbXSk6IHZvaWQ7XG4gIC8qKiBIaWdobGlnaHQgdGhlIHJlY29uc3RydWN0aW9ucyBvZiB0aGVzZSBrZXlzIChub25lOiBhbGwgYXMgdXN1YWwpLiAqL1xuICBzZXRSZWdpb25IaWdobGlnaHQ/KGtleXM6IHJlYWRvbmx5IHN0cmluZ1tdKTogdm9pZDtcbiAgLyoqIEhpZGUgdGhlIHJlY29uc3RydWN0aW9ucyBvZiB0aGVzZSBrZXlzLiAqL1xuICBzZXRSZWdpb25IaWRkZW4/KGtleXM6IHJlYWRvbmx5IHN0cmluZ1tdKTogdm9pZDtcbiAgLyoqXG4gICAqIERyYXcgdGhlIHJlZ2lvbiByZWNvbnN0cnVjdGlvbnMgdGhyb3VnaCB0aGUgdm9sdW1lIChpdCBoaWRlcyBub25lIG9mIHRoZW0pIHJhdGhlciB0aGFuIGhpZGRlblxuICAgKiB3aGVyZSBpdCBpcyBpbiBmcm9udCBvZiB0aGVtIChzZWUgVm9sdW1lU2NlbmUuc2V0UmVnaW9uc1Rocm91Z2hWb2x1bWUpLlxuICAgKi9cbiAgc2V0UmVnaW9uc1Rocm91Z2hWb2x1bWU/KHRocm91Z2g6IGJvb2xlYW4pOiB2b2lkO1xuICAvKiogU2hvdyB0aGUgcGxhbmVzIG9mIHRoZSBzZWN0aW9ucyBiZXNpZGUgdGhlIDNEIHZpZXcgKHZvbHVtZSBzY2VuZXMgb25seSkuICovXG4gIHNldFNsaWNlUGxhbmVzPyhwbGFuZXM6IFNsaWNlUGxhbmVzKTogdm9pZDtcbiAgLyoqIFRoZSBhc3NlbWJsZWQgdm9sdW1lIHRoZSBzZWN0aW9ucyBhcmUgY3V0IGZyb20gKHZvbHVtZSBzY2VuZXMgb25seSkuICovXG4gIHZvbHVtZVZveGVscz8oKTogVm9sdW1lVm94ZWxzT25TY3JlZW4gfCBudWxsO1xuICAvKiogSW1hZ2UgcHggcGVyIHZveGVsIG9mIHRoZSBhc3NlbWJsZWQgdm9sdW1lLCBpbi1wbGFuZSAodm9sdW1lIHNjZW5lcyBvbmx5KS4gKi9cbiAgdm94ZWxTdGVwPygpOiBudW1iZXIgfCBudWxsO1xuICAvKiogUmVtb3ZlIGV2ZXJ5dGhpbmcgdGhlIHNjZW5lIGFkZGVkOyBjYWxsZWQgYmVmb3JlIHRoZSB2aWV3ZXIgaXMgZGlzcG9zZWQuICovXG4gIGRpc3Bvc2UoKTogdm9pZDtcbn1cblxuLyoqIFZpZXdlciBzZXR0aW5ncyB0aGF0IG91dGxpdmUgYSBzY2VuZTogYSByZS1wbG90IGtlZXBzIHRoZW0uICovXG5leHBvcnQgaW50ZXJmYWNlIE5hcGFyaVNldHRpbmdzIHtcbiAgLyoqIERlY2ltYXRlIGZhY3RvciBmb3IgdGhlIDNEIHR5cGVzICgxID0gRnVsbCwgMiA9IMK9LCA0ID0gwrwgZGVmYXVsdCwgOCA9IOKFmykuICovXG4gIHJlc29sdXRpb25TY2FsZTogbnVtYmVyO1xuICAvKiogV2hldGhlciB0aGUgMkQgb3ZlcnZpZXcgbmF2aWdhdG9yIGlzIHNob3duICh0aGUgc2FtZSBob3N0IHNldHRpbmcgT1NEJ3MgbmF2aWdhdG9yIGhvbm91cnMpLiAqL1xuICBuYXZpZ2F0b3JWaXNpYmxlOiBib29sZWFuO1xuICAvKiogSW1hZ2Ugc21vb3RoaW5nIChiaWxpbmVhcikgdnMgbmVhcmVzdC1uZWlnaGJvdXIgKGNyaXNwIHBpeGVscywgdGhlIGRlZmF1bHQpLiAqL1xuICBpbWFnZVNtb290aGluZzogYm9vbGVhbjtcbiAgLyoqIFRoZSAzRCBheGVzIGdpem1vJ3Mgb24vb2ZmIGNob2ljZS4gKi9cbiAgYXhlc1Zpc2libGU6IGJvb2xlYW47XG4gIC8qKiBUaGUgc3VyZmFjZSdzIHdpcmVmcmFtZSBjaG9pY2UuICovXG4gIHN1cmZhY2VXaXJlZnJhbWU6IGJvb2xlYW47XG4gIC8qKiBUaGUgdm9sdW1lJ3MgdXNlciBaLWhlaWdodCBmYWN0b3IgKDEgPSB0aGUgdm9sdW1lJ3MgbmF0dXJhbCBwcm9wb3J0aW9ucykuICovXG4gIHZvbHVtZVpTY2FsZTogbnVtYmVyO1xuICAvKiogVGhlIDNEIHNwYXRpYWwgdmlldydzIFogc3RyZXRjaCAoMSA9IHRoZSBkYXRhJ3MgdHJ1ZSBwcm9wb3J0aW9ucykuICovXG4gIHNwYXRpYWxaU2NhbGU6IG51bWJlcjtcbn1cblxuLyoqIFRoZSBzdGFjay1sb2FkaW5nIGZsYWcgYW5kIHByb2dyZXNzIHRoZSBob3N0IHNob3dzIHdoaWxlIGZyYW1lcyBsb2FkLiAqL1xuZXhwb3J0IGludGVyZmFjZSBTdGFja1Byb2dyZXNzIHtcbiAgbG9hZGluZyhvbjogYm9vbGVhbik6IHZvaWQ7XG4gIHByb2dyZXNzKHBlcmNlbnQ6IG51bWJlcik6IHZvaWQ7XG59XG5cbi8qKiBFdmVyeXRoaW5nIGEgc2NlbmUgaXMgYnVpbHQgZnJvbTogdGhlIHZpZXdlciBhbmQgaXRzIERPTSwgdGhlIHNlcnZpY2UncyBjb2xsYWJvcmF0b3JzLCBhbmQgdGhlXG4gKiAgc2VydmljZSBzdGF0ZSBhIHNjZW5lIHJlYWRzIGxpdmUuICovXG4vKiogQSB2b2x1bWUgYXMgYXNzZW1ibGVkIGZvciBkaXNwbGF5ICh2b3hlbHMgcGVyIGNoYW5uZWwsIGtleSAwIHRoZSBncmF5c2NhbGUgb25lKSBhbmQgaXRzIGZyYW1lLiAqL1xuZXhwb3J0IGludGVyZmFjZSBWb2x1bWVWb3hlbHNPblNjcmVlbiB7XG4gIHdpZHRoOiBudW1iZXI7XG4gIGhlaWdodDogbnVtYmVyO1xuICBkZXB0aDogbnVtYmVyO1xuICBjaGFubmVsczogUmVhZG9ubHlNYXA8bnVtYmVyLCBVaW50OEFycmF5PjtcbiAgbXVsdGljaGFubmVsOiBib29sZWFuO1xuICBmcmFtZTogVm9sdW1lRnJhbWU7XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgU2NlbmVDb250ZXh0IHtcbiAgcmVhZG9ubHkgdmlld2VyOiBWaWV3ZXI7XG4gIHJlYWRvbmx5IGhvc3Q6IEhUTUxFbGVtZW50O1xuICByZWFkb25seSBjYW52YXM6IEhUTUxDYW52YXNFbGVtZW50O1xuICAvKiogVGhlIHNjZW5lJ3MgbGlmZXRpbWU6IGFib3J0ZWQgd2hlbiB0aGUgc2VydmljZSByZXNldHMgaW50byB0aGUgbmV4dCBzY2VuZS4gKi9cbiAgcmVhZG9ubHkgc2lnbmFsOiBBYm9ydFNpZ25hbDtcbiAgLyoqIEZyYW1lIGxvYWRpbmcgKHZvbHVtZSBhc3NlbWJseSwgc3VyZmFjZSBwcmVsb2FkKTogYWJvcnRlZCBieSBhIHJlc2V0IEFORCBieVxuICAgKiAgYGNhbmNlbExvYWRpbmcoKWAsIHdoaWNoIHJlbmV3cyBpdCDigJQgc28gcmVhZCBpdCB3aGVuIGEgbG9hZCBzdGFydHMuICovXG4gIGxvYWRpbmcoKTogQWJvcnRTaWduYWw7XG4gIC8qKiBUaGUgaW1hZ2Ugb24gc2NyZWVuIGFuZCBpdHMgY3VycmVudCBzbGljZSwgYXMgYGxvYWQoKWAvYHNldFpJbmRleCgpYCByZWNvcmRlZCB0aGVtLiAqL1xuICBpbmZvKCk6IElJbWFnZUluZm8gfCB1bmRlZmluZWQ7XG4gIHooKTogbnVtYmVyO1xuICByZWFkb25seSB0aWxlczogTmFwYXJpVGlsZUNsaWVudDtcbiAgcmVhZG9ubHkgZGlzcGxheTogTmFwYXJpRGlzcGxheVN0YXRlO1xuICByZWFkb25seSBiYWRnZTogTG9hZGluZ0JhZGdlU3RhdGU7XG4gIHJlYWRvbmx5IHRvb2xzOiBOYXBhcmlUb29sQnJpZGdlO1xuICByZWFkb25seSBzdG9yZTogVmlzdWFsaXplclN0b3JlO1xuICByZWFkb25seSByZWdpb25TdG9yZTogUmVnaW9uU3RvcmU7XG4gIHJlYWRvbmx5IHNldHRpbmdzOiBOYXBhcmlTZXR0aW5ncztcbiAgcmVhZG9ubHkgc3RhY2s6IFN0YWNrUHJvZ3Jlc3M7XG4gIC8qKiBUaGUgaW1hZ2UncyBmdWxsLXJlc29sdXRpb24gc2l6ZSBhcyB0aGUgc2NlbmUgZHJldyBpdCDigJQgcmVhZCBieSB0aGUgcmVhZGJhY2ssIHRoZSBjYW1lcmFcbiAgICogIGZpdCBhbmQgYGdldFRydWVJbWFnZVNpemUoKWA7IGl0IG91dGxpdmVzIHRoZSBzY2VuZS4gKi9cbiAgaW1hZ2VTaXplKCk6IHsgd2lkdGg6IG51bWJlcjsgaGVpZ2h0OiBudW1iZXIgfTtcbiAgc2V0SW1hZ2VTaXplKHdpZHRoOiBudW1iZXIsIGhlaWdodDogbnVtYmVyKTogdm9pZDtcbiAgLyoqIEZpdCB0aGUgMkQgY2FtZXJhIHRvIHRoZSBpbWFnZSBvbiB0aGUgbmV4dCBmcmFtZS4gKi9cbiAgZml0Q2FtZXJhU29vbigpOiB2b2lkO1xuICBvdXRzaWRlWm9uZTxUPihmbjogKCkgPT4gVCk6IFQ7XG4gIGluWm9uZTxUPihmbjogKCkgPT4gVCk6IFQ7XG4gIC8qKiBBIHJlZ2lvbiByZWNvbnN0cnVjdGlvbiB3YXMgY2xpY2tlZCAoaXRzIGtleSksIG9yIHRoZSB2b2x1bWUgYmVzaWRlIHRoZW0gKG51bGwpLiAqL1xuICByZWdpb25NZXNoUGlja2VkKGtleTogc3RyaW5nIHwgbnVsbCwgYWRkaXRpdmU6IGJvb2xlYW4pOiB2b2lkO1xuICAvKiogQSBzZWN0aW9uJ3MgcGxhbmUgZHJhZ2dlZCBpbiB0aGUgdm9sdW1lIHRvIGB2YWx1ZWAgYWxvbmcgaXRzIGF4aXMuICovXG4gIHNsaWNlUGxhbmVNb3ZlZChheGlzOiBQbGFuZUF4aXMsIHZhbHVlOiBudW1iZXIpOiB2b2lkO1xufVxuIl19
2
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibmFwYXJpLXNjZW5lLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vc3JjL2xpYi9pbXBsZW1lbnRhdGlvbnMvbmFwYXJpLWpzL25hcGFyaS1zY2VuZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHR5cGUgeyBSZWdpb25NZXNoM0QgfSBmcm9tICcuL25hcGFyaS12b2x1bWUtcmVnaW9uLW1lc2hlcyc7XG5pbXBvcnQgdHlwZSB7IFZpZXdlciB9IGZyb20gJ25hcGFyaS1qcyc7XG5pbXBvcnQgdHlwZSB7IFZvbHVtZUZyYW1lIH0gZnJvbSAnLi9uYXBhcmktdm9sdW1lLXJlZ2lvbi1tZXNoZXMnO1xuaW1wb3J0IHR5cGUgeyBQbGFuZUF4aXMsIFNsaWNlUGxhbmVzIH0gZnJvbSAnLi9uYXBhcmktdm9sdW1lLXNsaWNlLXBsYW5lcyc7XG5cbmltcG9ydCB7IElJbWFnZUluZm8gfSBmcm9tICcuLi8uLi9jb250cmFjdHMvaW1hZ2UuY29udHJhY3QnO1xuaW1wb3J0IHsgSUhpc3RvZ3JhbSB9IGZyb20gJy4uLy4uL2NvbnRyYWN0cy9jaGFubmVsLWhpc3RvZ3JhbS1hcGkuY29udHJhY3QnO1xuaW1wb3J0IHsgSUlzb3N1cmZhY2VDb250cm9scywgSVN1cmZhY2UzZENvbnRyb2xzIH0gZnJvbSAnLi4vLi4vY29udHJhY3RzL3Zpc3VhbGl6ZXIuY29udHJhY3QnO1xuaW1wb3J0IHsgU3BhdGlhbE9ic2VydmF0aW9ucyB9IGZyb20gJy4uLy4uL2NvbnRyYWN0cy9zcGF0aWFsLWRhdGFzZXQuY29udHJhY3QnO1xuaW1wb3J0IHsgVmlzdWFsaXplclN0b3JlIH0gZnJvbSAnLi4vLi4vc3RvcmUvdmlzdWFsaXplci1zdG9yZS5zZXJ2aWNlJztcbmltcG9ydCB7IFJlZ2lvblN0b3JlIH0gZnJvbSAnLi4vLi4vc3RvcmUvcmVnaW9uLXN0b3JlLnNlcnZpY2UnO1xuaW1wb3J0IHsgTmFwYXJpVGlsZUNsaWVudCB9IGZyb20gJy4vbmFwYXJpLXRpbGUtY2xpZW50JztcbmltcG9ydCB7IE5hcGFyaURpc3BsYXlTdGF0ZSB9IGZyb20gJy4vbmFwYXJpLWRpc3BsYXktc3RhdGUnO1xuaW1wb3J0IHsgTG9hZGluZ0JhZGdlU3RhdGUgfSBmcm9tICcuL25hcGFyaS1sb2FkaW5nLXN0YXRlJztcbmltcG9ydCB7IE5hcGFyaVRvb2xCcmlkZ2UgfSBmcm9tICcuL25hcGFyaS10b29sLWJyaWRnZSc7XG5cbi8qKlxuICogV2hhdCBvbmUgYHBsb3QoKWAgbW91bnRzIGludG8gdGhlIHZpZXdlciAocmV2aWV3IEFwcGVuZGl4IEIpOiB0aGUgMkQgaW1hZ2UgKGFsb25lLCB1bmRlciB0aGVcbiAqIHJlZ2lvbi1jZW50cm9pZCBzY2F0dGVyLCBvciB1bmRlciB0aGUgc3BhdGlhbCBtYXJrZXJzKSwgYSB2b2x1bWUsIGEgc3VyZmFjZSwgYSAzRCBzY2F0dGVyIG9yIHRoZVxuICogc3BhdGlhbCAzRCBjbG91ZC4gVGhlIHNlcnZpY2UgcGlja3Mgb25lIHBlciBwbG90IHR5cGUgYW5kIHRhbGtzIHRvIGl0IHRocm91Z2ggdGhpcyBpbnRlcmZhY2VcbiAqIGluc3RlYWQgb2YgYXNraW5nIHdoaWNoIGxheWVyIGhhbmRsZSBoYXBwZW5zIHRvIGJlIG5vbi1udWxsOyBhIHNjZW5lIG93bnMgZXZlcnkgbGF5ZXIsIGtleSxcbiAqIHN1YnNjcmlwdGlvbiBhbmQgbGlzdGVuZXIgaXQgY3JlYXRlcywgYW5kIHtAbGluayBkaXNwb3NlfSBkcm9wcyB0aGVtIGFsbCDigJQgc28gYSByZS1wbG90IGNhbiBub1xuICogbG9uZ2VyIGluaGVyaXQgYSBzdGFsZSBcImFscmVhZHkgYnVpbHRcIiBrZXkgZnJvbSB0aGUgcHJldmlvdXMgb25lIChOQVBBUkktU1ZDLTEsIC04KS5cbiAqL1xuZXhwb3J0IGludGVyZmFjZSBOYXBhcmlTY2VuZSB7XG4gIC8qKiBCdWlsZCB0aGUgc2NlbmUgaW50byB0aGUgdmlld2VyLiBSZXNvbHZlcyBvbmNlIHRoZSBmaXJzdCBmcmFtZSdzIGRhdGEgaXMgaW4uICovXG4gIG1vdW50KCk6IFByb21pc2U8dm9pZD47XG4gIC8qKiBUaGUgc3RhY2sgc2xpZGVyIG1vdmVkIHRvIGB6YCAoYWxyZWFkeSByZWNvcmRlZCBhcyB0aGUgaW1hZ2UncyBzbGljZSkuICovXG4gIHNldFooejogbnVtYmVyKTogdm9pZDtcbiAgLyoqIFRoZSBoaXN0b2dyYW0gcGFuZSdzIGRpc3RyaWJ1dGlvbiBmb3IgYGNoYW5uZWxgLCBvciBudWxsIHdoZW4gdGhlcmUgaXMgbm9uZSAoeWV0KS4gKi9cbiAgaGlzdG9ncmFtKGNoYW5uZWw6IG51bWJlciwgYmluczogbnVtYmVyKTogSUhpc3RvZ3JhbSB8IG51bGw7XG4gIC8qKiBUaGUgaXNvc3VyZmFjZSB0aHJlc2hvbGQgY29udHJvbHMgKHZvbHVtZSBzY2VuZXMgb25seSkuICovXG4gIGlzb0NvbnRyb2xzPygpOiBJSXNvc3VyZmFjZUNvbnRyb2xzIHwgbnVsbDtcbiAgLyoqIFRoZSAzRCBjYW1lcmEvYXhlcy93aXJlZnJhbWUgY29udHJvbHMgKDNEIHNjZW5lcyBvbmx5KS4gKi9cbiAgc3VyZmFjZTNkQ29udHJvbHM/KCk6IElTdXJmYWNlM2RDb250cm9scyB8IG51bGw7XG4gIC8qKiBCaWxpbmVhciB2cyBuZWFyZXN0LW5laWdoYm91ciBpbWFnZSBzYW1wbGluZyBjaGFuZ2VkICgyRCBpbWFnZSBzY2VuZXMpLiAqL1xuICBzZXRJbWFnZVNtb290aGluZz8oZW5hYmxlZDogYm9vbGVhbik6IHZvaWQ7XG4gIC8qKiBUaGUgb3ZlcnZpZXcgbmF2aWdhdG9yIHdhcyBzaG93biBvciBoaWRkZW4gKDJEIGltYWdlIHNjZW5lcykuICovXG4gIHNldE5hdmlnYXRvclZpc2libGU/KHZpc2libGU6IGJvb2xlYW4pOiB2b2lkO1xuICAvKiogT2JzZXJ2YXRpb25zIHByb2plY3RlZCB0byBjYW52YXMgcGl4ZWxzICh0aGUgc3BhdGlhbCAzRCBjbG91ZCksIG9yIG51bGwuICovXG4gIHNjcmVlblByb2plY3Rpb24/KG9iczogU3BhdGlhbE9ic2VydmF0aW9ucyk6IEZsb2F0MzJBcnJheSB8IG51bGw7XG4gIC8qKiBTaG93IHRoZXNlIHJlZ2lvbiByZWNvbnN0cnVjdGlvbnMgaW4gdGhlIDNEIHZpZXcgKHZvbHVtZSBzY2VuZXMgb25seSkuICovXG4gIHNldFJlZ2lvbk1lc2hlcz8obWVzaGVzOiByZWFkb25seSBSZWdpb25NZXNoM0RbXSk6IHZvaWQ7XG4gIC8qKlxuICAgKiBXaGVyZSB0aGUgcmVjb25zdHJ1Y3Rpb25zJyBzbGljZXMgYXJlLCBpbiB0aGUgb2JzZXJ2YXRpb25zJyB1bml0cywgd2hlbiB0aGVpciByZWdpb24gc2V0IHNheXNcbiAgICogKGEgM0Qgc2VnbWVudGF0aW9uJ3MgcGxhbmVzKTsgbnVsbDogdGhleSBhcmUgdGhlIHBsb3R0ZWQgc3RhY2sncyBzbGljZXMgKHNwYXRpYWwgM0Qgb25seSkuXG4gICAqL1xuICBzZXRSZWdpb25QbGFuZXM/KHo6IHJlYWRvbmx5IG51bWJlcltdIHwgbnVsbCk6IHZvaWQ7XG4gIC8qKlxuICAgKiBUaGUgcGxhbmUgb2YgdGhvc2UgKHNlZSB7QGxpbmsgc2V0UmVnaW9uUGxhbmVzfSkgdGhlIDJEIHNwYXRpYWwgdmlldyBzaG93cywgb3ZlciBhbiBpbWFnZSBvZlxuICAgKiBvbmUgcGxhbmU6IGl0cyBvYnNlcnZhdGlvbnMgYW5kIHRyYW5zY3JpcHRzIGFyZSB0aGUgb25lcyBkcmF3biAoc3BhdGlhbCAyRCBvbmx5KS5cbiAgICovXG4gIHNldFJlZ2lvblBsYW5lPyhrOiBudW1iZXIpOiB2b2lkO1xuICAvKiogRHJhdyB0aGVzZSBjbGFzc2VzIG9mIHRoZSBkYXRhc2V0J3MgcmVnaW9uIHNldCBhcyBpbmRpdmlkdWFsIGNlbGxzIChzcGF0aWFsIDNEIG9ubHkpLiAqL1xuICBzZXRSZWdpb25DZWxscz8oY2xhc3NlczogcmVhZG9ubHkgc3RyaW5nW10gfCBudWxsKTogdm9pZDtcbiAgLyoqIEhpZ2hsaWdodCB0aGUgcmVjb25zdHJ1Y3Rpb25zIG9mIHRoZXNlIGtleXMgKG5vbmU6IGFsbCBhcyB1c3VhbCkuICovXG4gIHNldFJlZ2lvbkhpZ2hsaWdodD8oa2V5czogcmVhZG9ubHkgc3RyaW5nW10pOiB2b2lkO1xuICAvKiogSGlkZSB0aGUgcmVjb25zdHJ1Y3Rpb25zIG9mIHRoZXNlIGtleXMuICovXG4gIHNldFJlZ2lvbkhpZGRlbj8oa2V5czogcmVhZG9ubHkgc3RyaW5nW10pOiB2b2lkO1xuICAvKipcbiAgICogRHJhdyB0aGUgcmVnaW9uIHJlY29uc3RydWN0aW9ucyB0aHJvdWdoIHRoZSB2b2x1bWUgKGl0IGhpZGVzIG5vbmUgb2YgdGhlbSkgcmF0aGVyIHRoYW4gaGlkZGVuXG4gICAqIHdoZXJlIGl0IGlzIGluIGZyb250IG9mIHRoZW0gKHNlZSBWb2x1bWVTY2VuZS5zZXRSZWdpb25zVGhyb3VnaFZvbHVtZSkuXG4gICAqL1xuICBzZXRSZWdpb25zVGhyb3VnaFZvbHVtZT8odGhyb3VnaDogYm9vbGVhbik6IHZvaWQ7XG4gIC8qKiBTaG93IHRoZSBwbGFuZXMgb2YgdGhlIHNlY3Rpb25zIGJlc2lkZSB0aGUgM0QgdmlldyAodm9sdW1lIHNjZW5lcyBvbmx5KS4gKi9cbiAgc2V0U2xpY2VQbGFuZXM/KHBsYW5lczogU2xpY2VQbGFuZXMpOiB2b2lkO1xuICAvKiogVGhlIGFzc2VtYmxlZCB2b2x1bWUgdGhlIHNlY3Rpb25zIGFyZSBjdXQgZnJvbSAodm9sdW1lIHNjZW5lcyBvbmx5KS4gKi9cbiAgdm9sdW1lVm94ZWxzPygpOiBWb2x1bWVWb3hlbHNPblNjcmVlbiB8IG51bGw7XG4gIC8qKiBJbWFnZSBweCBwZXIgdm94ZWwgb2YgdGhlIGFzc2VtYmxlZCB2b2x1bWUsIGluLXBsYW5lICh2b2x1bWUgc2NlbmVzIG9ubHkpLiAqL1xuICB2b3hlbFN0ZXA/KCk6IG51bWJlciB8IG51bGw7XG4gIC8qKiBSZW1vdmUgZXZlcnl0aGluZyB0aGUgc2NlbmUgYWRkZWQ7IGNhbGxlZCBiZWZvcmUgdGhlIHZpZXdlciBpcyBkaXNwb3NlZC4gKi9cbiAgZGlzcG9zZSgpOiB2b2lkO1xufVxuXG4vKiogVmlld2VyIHNldHRpbmdzIHRoYXQgb3V0bGl2ZSBhIHNjZW5lOiBhIHJlLXBsb3Qga2VlcHMgdGhlbS4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgTmFwYXJpU2V0dGluZ3Mge1xuICAvKiogRGVjaW1hdGUgZmFjdG9yIGZvciB0aGUgM0QgdHlwZXMgKDEgPSBGdWxsLCAyID0gwr0sIDQgPSDCvCBkZWZhdWx0LCA4ID0g4oWbKS4gKi9cbiAgcmVzb2x1dGlvblNjYWxlOiBudW1iZXI7XG4gIC8qKiBXaGV0aGVyIHRoZSAyRCBvdmVydmlldyBuYXZpZ2F0b3IgaXMgc2hvd24gKHRoZSBzYW1lIGhvc3Qgc2V0dGluZyBPU0QncyBuYXZpZ2F0b3IgaG9ub3VycykuICovXG4gIG5hdmlnYXRvclZpc2libGU6IGJvb2xlYW47XG4gIC8qKiBJbWFnZSBzbW9vdGhpbmcgKGJpbGluZWFyKSB2cyBuZWFyZXN0LW5laWdoYm91ciAoY3Jpc3AgcGl4ZWxzLCB0aGUgZGVmYXVsdCkuICovXG4gIGltYWdlU21vb3RoaW5nOiBib29sZWFuO1xuICAvKiogVGhlIDNEIGF4ZXMgZ2l6bW8ncyBvbi9vZmYgY2hvaWNlLiAqL1xuICBheGVzVmlzaWJsZTogYm9vbGVhbjtcbiAgLyoqIFRoZSBzdXJmYWNlJ3Mgd2lyZWZyYW1lIGNob2ljZS4gKi9cbiAgc3VyZmFjZVdpcmVmcmFtZTogYm9vbGVhbjtcbiAgLyoqIFRoZSB2b2x1bWUncyB1c2VyIFotaGVpZ2h0IGZhY3RvciAoMSA9IHRoZSB2b2x1bWUncyBuYXR1cmFsIHByb3BvcnRpb25zKS4gKi9cbiAgdm9sdW1lWlNjYWxlOiBudW1iZXI7XG4gIC8qKiBUaGUgM0Qgc3BhdGlhbCB2aWV3J3MgWiBzdHJldGNoICgxID0gdGhlIGRhdGEncyB0cnVlIHByb3BvcnRpb25zKS4gKi9cbiAgc3BhdGlhbFpTY2FsZTogbnVtYmVyO1xufVxuXG4vKiogVGhlIHN0YWNrLWxvYWRpbmcgZmxhZyBhbmQgcHJvZ3Jlc3MgdGhlIGhvc3Qgc2hvd3Mgd2hpbGUgZnJhbWVzIGxvYWQuICovXG5leHBvcnQgaW50ZXJmYWNlIFN0YWNrUHJvZ3Jlc3Mge1xuICBsb2FkaW5nKG9uOiBib29sZWFuKTogdm9pZDtcbiAgcHJvZ3Jlc3MocGVyY2VudDogbnVtYmVyKTogdm9pZDtcbn1cblxuLyoqIEV2ZXJ5dGhpbmcgYSBzY2VuZSBpcyBidWlsdCBmcm9tOiB0aGUgdmlld2VyIGFuZCBpdHMgRE9NLCB0aGUgc2VydmljZSdzIGNvbGxhYm9yYXRvcnMsIGFuZCB0aGVcbiAqICBzZXJ2aWNlIHN0YXRlIGEgc2NlbmUgcmVhZHMgbGl2ZS4gKi9cbi8qKiBBIHZvbHVtZSBhcyBhc3NlbWJsZWQgZm9yIGRpc3BsYXkgKHZveGVscyBwZXIgY2hhbm5lbCwga2V5IDAgdGhlIGdyYXlzY2FsZSBvbmUpIGFuZCBpdHMgZnJhbWUuICovXG5leHBvcnQgaW50ZXJmYWNlIFZvbHVtZVZveGVsc09uU2NyZWVuIHtcbiAgd2lkdGg6IG51bWJlcjtcbiAgaGVpZ2h0OiBudW1iZXI7XG4gIGRlcHRoOiBudW1iZXI7XG4gIGNoYW5uZWxzOiBSZWFkb25seU1hcDxudW1iZXIsIFVpbnQ4QXJyYXk+O1xuICBtdWx0aWNoYW5uZWw6IGJvb2xlYW47XG4gIGZyYW1lOiBWb2x1bWVGcmFtZTtcbn1cblxuZXhwb3J0IGludGVyZmFjZSBTY2VuZUNvbnRleHQge1xuICByZWFkb25seSB2aWV3ZXI6IFZpZXdlcjtcbiAgcmVhZG9ubHkgaG9zdDogSFRNTEVsZW1lbnQ7XG4gIHJlYWRvbmx5IGNhbnZhczogSFRNTENhbnZhc0VsZW1lbnQ7XG4gIC8qKiBUaGUgc2NlbmUncyBsaWZldGltZTogYWJvcnRlZCB3aGVuIHRoZSBzZXJ2aWNlIHJlc2V0cyBpbnRvIHRoZSBuZXh0IHNjZW5lLiAqL1xuICByZWFkb25seSBzaWduYWw6IEFib3J0U2lnbmFsO1xuICAvKiogRnJhbWUgbG9hZGluZyAodm9sdW1lIGFzc2VtYmx5LCBzdXJmYWNlIHByZWxvYWQpOiBhYm9ydGVkIGJ5IGEgcmVzZXQgQU5EIGJ5XG4gICAqICBgY2FuY2VsTG9hZGluZygpYCwgd2hpY2ggcmVuZXdzIGl0IOKAlCBzbyByZWFkIGl0IHdoZW4gYSBsb2FkIHN0YXJ0cy4gKi9cbiAgbG9hZGluZygpOiBBYm9ydFNpZ25hbDtcbiAgLyoqIFRoZSBpbWFnZSBvbiBzY3JlZW4gYW5kIGl0cyBjdXJyZW50IHNsaWNlLCBhcyBgbG9hZCgpYC9gc2V0WkluZGV4KClgIHJlY29yZGVkIHRoZW0uICovXG4gIGluZm8oKTogSUltYWdlSW5mbyB8IHVuZGVmaW5lZDtcbiAgeigpOiBudW1iZXI7XG4gIHJlYWRvbmx5IHRpbGVzOiBOYXBhcmlUaWxlQ2xpZW50O1xuICByZWFkb25seSBkaXNwbGF5OiBOYXBhcmlEaXNwbGF5U3RhdGU7XG4gIHJlYWRvbmx5IGJhZGdlOiBMb2FkaW5nQmFkZ2VTdGF0ZTtcbiAgcmVhZG9ubHkgdG9vbHM6IE5hcGFyaVRvb2xCcmlkZ2U7XG4gIHJlYWRvbmx5IHN0b3JlOiBWaXN1YWxpemVyU3RvcmU7XG4gIHJlYWRvbmx5IHJlZ2lvblN0b3JlOiBSZWdpb25TdG9yZTtcbiAgcmVhZG9ubHkgc2V0dGluZ3M6IE5hcGFyaVNldHRpbmdzO1xuICByZWFkb25seSBzdGFjazogU3RhY2tQcm9ncmVzcztcbiAgLyoqIFRoZSBpbWFnZSdzIGZ1bGwtcmVzb2x1dGlvbiBzaXplIGFzIHRoZSBzY2VuZSBkcmV3IGl0IOKAlCByZWFkIGJ5IHRoZSByZWFkYmFjaywgdGhlIGNhbWVyYVxuICAgKiAgZml0IGFuZCBgZ2V0VHJ1ZUltYWdlU2l6ZSgpYDsgaXQgb3V0bGl2ZXMgdGhlIHNjZW5lLiAqL1xuICBpbWFnZVNpemUoKTogeyB3aWR0aDogbnVtYmVyOyBoZWlnaHQ6IG51bWJlciB9O1xuICBzZXRJbWFnZVNpemUod2lkdGg6IG51bWJlciwgaGVpZ2h0OiBudW1iZXIpOiB2b2lkO1xuICAvKiogRml0IHRoZSAyRCBjYW1lcmEgdG8gdGhlIGltYWdlIG9uIHRoZSBuZXh0IGZyYW1lLiAqL1xuICBmaXRDYW1lcmFTb29uKCk6IHZvaWQ7XG4gIG91dHNpZGVab25lPFQ+KGZuOiAoKSA9PiBUKTogVDtcbiAgaW5ab25lPFQ+KGZuOiAoKSA9PiBUKTogVDtcbiAgLyoqIEEgcmVnaW9uIHJlY29uc3RydWN0aW9uIHdhcyBjbGlja2VkIChpdHMga2V5KSwgb3IgdGhlIHZvbHVtZSBiZXNpZGUgdGhlbSAobnVsbCkuICovXG4gIHJlZ2lvbk1lc2hQaWNrZWQoa2V5OiBzdHJpbmcgfCBudWxsLCBhZGRpdGl2ZTogYm9vbGVhbik6IHZvaWQ7XG4gIC8qKiBBIHNlY3Rpb24ncyBwbGFuZSBkcmFnZ2VkIGluIHRoZSB2b2x1bWUgdG8gYHZhbHVlYCBhbG9uZyBpdHMgYXhpcy4gKi9cbiAgc2xpY2VQbGFuZU1vdmVkKGF4aXM6IFBsYW5lQXhpcywgdmFsdWU6IG51bWJlcik6IHZvaWQ7XG59XG4iXX0=