@jax-data-science/sci-image-visualizer 0.13.0 → 0.15.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (67) hide show
  1. package/esm2022/lib/channel-histogram/channel-histogram.component.mjs +39 -3
  2. package/esm2022/lib/channel-histogram/channel-tree.mjs +65 -0
  3. package/esm2022/lib/contracts/channel-histogram-api.contract.mjs +19 -1
  4. package/esm2022/lib/contracts/display-types.mjs +7 -1
  5. package/esm2022/lib/contracts/image.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/implementations/napari-js/napari-image-2d-scene.mjs +17 -2
  9. package/esm2022/lib/implementations/napari-js/napari-spatial-2d-scene.mjs +88 -10
  10. package/esm2022/lib/implementations/napari-js/napari-spatial-3d-scene.mjs +62 -13
  11. package/esm2022/lib/implementations/napari-js/napari-spatial-encoding.mjs +21 -1
  12. package/esm2022/lib/implementations/napari-js/napari-spatial-scene.mjs +5 -1
  13. package/esm2022/lib/implementations/napari-js/napari-visualizer.service.mjs +4 -1
  14. package/esm2022/lib/implementations/napari-js/spatial-tiles/categorical-lookup.mjs +26 -3
  15. package/esm2022/lib/implementations/napari-js/spatial-tiles/cell-layers.mjs +7 -9
  16. package/esm2022/lib/implementations/napari-js/spatial-tiles/density-layer.mjs +20 -4
  17. package/esm2022/lib/implementations/napari-js/spatial-tiles/transcript-hover.mjs +4 -2
  18. package/esm2022/lib/implementations/napari-js/spatial-tiles/transcript-jobs.mjs +4 -2
  19. package/esm2022/lib/implementations/napari-js/spatial-tiles/transcript-layers.mjs +42 -15
  20. package/esm2022/lib/implementations/osd/openseadragon-visualizer.service.mjs +3 -1
  21. package/esm2022/lib/spatial/lod.mjs +24 -3
  22. package/esm2022/lib/spatial/spatial-controls.facade.mjs +8 -3
  23. package/esm2022/lib/spatial/spatial-gene-filter.mjs +138 -0
  24. package/esm2022/lib/spatial/spatial-tile-merge.mjs +42 -1
  25. package/esm2022/lib/spatial-controls/spatial-cells-panel/spatial-cells-panel.component.mjs +47 -10
  26. package/esm2022/lib/spatial-controls/spatial-controls.component.mjs +4 -3
  27. package/esm2022/lib/spatial-controls/spatial-gene-style/spatial-gene-style.component.mjs +66 -0
  28. package/esm2022/lib/spatial-controls/spatial-gene-tree/spatial-gene-tree.component.mjs +106 -26
  29. package/esm2022/lib/spatial-controls/spatial-groups-panel/spatial-groups-panel.component.mjs +3 -3
  30. package/esm2022/lib/spatial-controls/spatial-key/spatial-key.component.mjs +3 -3
  31. package/esm2022/lib/spatial-controls/spatial-marker-genes-form/spatial-marker-genes-form.component.mjs +3 -3
  32. package/esm2022/lib/spatial-controls/spatial-observations-panel/spatial-observations-panel.component.mjs +110 -8
  33. package/esm2022/lib/spatial-controls/spatial-transcripts-panel/spatial-transcripts-panel.component.mjs +41 -9
  34. package/esm2022/lib/store/visualizer-store.service.mjs +67 -1
  35. package/fesm2022/{jax-data-science-sci-image-visualizer-jax-data-science-sci-image-visualizer-DURPqs5a.mjs → jax-data-science-sci-image-visualizer-jax-data-science-sci-image-visualizer-qUeMuBb0.mjs} +1250 -335
  36. package/fesm2022/jax-data-science-sci-image-visualizer-jax-data-science-sci-image-visualizer-qUeMuBb0.mjs.map +1 -0
  37. package/fesm2022/{jax-data-science-sci-image-visualizer-onnx-sam-session-D0IQ6PjZ.mjs → jax-data-science-sci-image-visualizer-onnx-sam-session-U1ODcfYD.mjs} +3 -2
  38. package/fesm2022/{jax-data-science-sci-image-visualizer-onnx-sam-session-D0IQ6PjZ.mjs.map → jax-data-science-sci-image-visualizer-onnx-sam-session-U1ODcfYD.mjs.map} +1 -1
  39. package/fesm2022/jax-data-science-sci-image-visualizer.mjs +2 -1
  40. package/fesm2022/jax-data-science-sci-image-visualizer.mjs.map +1 -1
  41. package/lib/channel-histogram/channel-histogram.component.d.ts +14 -0
  42. package/lib/channel-histogram/channel-tree.d.ts +30 -0
  43. package/lib/contracts/channel-histogram-api.contract.d.ts +16 -0
  44. package/lib/contracts/display-types.d.ts +27 -0
  45. package/lib/contracts/image.contract.d.ts +8 -0
  46. package/lib/contracts/spatial-dataset.contract.d.ts +7 -0
  47. package/lib/contracts/visualizer.contract.d.ts +3 -0
  48. package/lib/implementations/napari-js/napari-image-2d-scene.d.ts +7 -0
  49. package/lib/implementations/napari-js/napari-spatial-2d-scene.d.ts +13 -2
  50. package/lib/implementations/napari-js/napari-spatial-encoding.d.ts +5 -0
  51. package/lib/implementations/napari-js/napari-spatial-scene.d.ts +4 -0
  52. package/lib/implementations/napari-js/napari-visualizer.service.d.ts +2 -0
  53. package/lib/implementations/napari-js/spatial-tiles/categorical-lookup.d.ts +6 -1
  54. package/lib/implementations/napari-js/spatial-tiles/transcript-hover.d.ts +4 -0
  55. package/lib/implementations/napari-js/spatial-tiles/transcript-layers.d.ts +3 -1
  56. package/lib/spatial/lod.d.ts +14 -2
  57. package/lib/spatial/spatial-controls.facade.d.ts +3 -0
  58. package/lib/spatial/spatial-gene-filter.d.ts +44 -0
  59. package/lib/spatial/spatial-tile-merge.d.ts +17 -0
  60. package/lib/spatial-controls/spatial-cells-panel/spatial-cells-panel.component.d.ts +18 -1
  61. package/lib/spatial-controls/spatial-gene-style/spatial-gene-style.component.d.ts +30 -0
  62. package/lib/spatial-controls/spatial-gene-tree/spatial-gene-tree.component.d.ts +39 -7
  63. package/lib/spatial-controls/spatial-observations-panel/spatial-observations-panel.component.d.ts +33 -1
  64. package/lib/spatial-controls/spatial-transcripts-panel/spatial-transcripts-panel.component.d.ts +13 -1
  65. package/lib/store/visualizer-store.service.d.ts +19 -0
  66. package/package.json +1 -1
  67. package/fesm2022/jax-data-science-sci-image-visualizer-jax-data-science-sci-image-visualizer-DURPqs5a.mjs.map +0 -1
@@ -1,8 +1,9 @@
1
1
  import { colormapFromLut } from 'napari-js';
2
2
  import { NO_CATEGORY, isCategoricalColumn, } from '../../../contracts/spatial-dataset.contract';
3
3
  import { DEFAULT_CATEGORICAL_PALETTE, MISSING_COLOR, contrastWindow, parseHex, resolveCategoryColors, } from '../../../spatial/spatial-encoding';
4
- import { POLYGON_LEVEL_MIN_CELL_PX, cellTypeColumnFor, cellsShown, polygonLevelFor, tileId, tilesInRect, typicalCellDiameter, } from '../../../spatial/lod';
4
+ import { POLYGON_LEVEL_MIN_CELL_PX, cellTypeColumnFor, cellsShown, drawnCellSets, polygonLevelFor, tileId, tilesInRect, typicalCellDiameter, } from '../../../spatial/lod';
5
5
  import { filterRings, mergePolygonTiles } from '../../../spatial/spatial-tile-merge';
6
+ import { geneFilterKey } from '../../../spatial/spatial-gene-filter';
6
7
  import { ContrastWindowCache } from '../napari-spatial-encoding';
7
8
  const MAX_CELL_TILES = 48;
8
9
  /**
@@ -198,18 +199,15 @@ export class CellLayers {
198
199
  */
199
200
  async cellGeometry(dataset, view, rect, level, hidden, ctx) {
200
201
  const tiled = dataset.polygonTiles;
201
- const hiddenKey = view.hiddenGroups.join('\u0001');
202
+ const hiddenKey = `${view.hiddenGroups.join('\u0001')}|${geneFilterKey(view)}`;
202
203
  let rings;
203
204
  let nuclei = null;
204
205
  let geometryKey;
205
206
  if (tiled) {
206
- const both = view.cellSet === 'both';
207
- const set = !both && view.cellSet && tiled.sets.some((s) => s.name === view.cellSet)
208
- ? view.cellSet
209
- : (tiled.defaultSet ?? tiled.sets[0]?.name);
210
- if (!set)
207
+ const drawn = drawnCellSets(tiled, view.cellSet);
208
+ if (!drawn)
211
209
  return null;
212
- const nucleusSet = both ? tiled.sets.find((s) => s.name !== set)?.name : undefined;
210
+ const { set, nucleusSet } = drawn;
213
211
  const keys = tilesInRect(rect, level, tiled.levels, tiled.bounds, MAX_CELL_TILES);
214
212
  geometryKey = `${dataset.id}|${set}|${nucleusSet ?? ''}|${hiddenKey}|${keys.map(tileId).join(',')}`;
215
213
  if (geometryKey === this.cellGeometryKey && this.currentRings) {
@@ -271,4 +269,4 @@ function categoryRgba(meta) {
271
269
  const hex = meta && meta.kind === 'categorical' ? resolveCategoryColors(meta) : [DEFAULT_CATEGORICAL_PALETTE[0]];
272
270
  return hex.map((h) => rgba01(parseHex(h)));
273
271
  }
274
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY2VsbC1sYXllcnMuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9zcmMvbGliL2ltcGxlbWVudGF0aW9ucy9uYXBhcmktanMvc3BhdGlhbC10aWxlcy9jZWxsLWxheWVycy50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsZUFBZSxFQUFFLE1BQU0sV0FBVyxDQUFDO0FBTTVDLE9BQU8sRUFDTCxXQUFXLEVBS1gsbUJBQW1CLEdBQ3BCLE1BQU0sNkNBQTZDLENBQUM7QUFDckQsT0FBTyxFQUNMLDJCQUEyQixFQUMzQixhQUFhLEVBQ2IsY0FBYyxFQUNkLFFBQVEsRUFDUixxQkFBcUIsR0FDdEIsTUFBTSxtQ0FBbUMsQ0FBQztBQUUzQyxPQUFPLEVBRUwseUJBQXlCLEVBQ3pCLGlCQUFpQixFQUNqQixVQUFVLEVBQ1YsZUFBZSxFQUNmLE1BQU0sRUFDTixXQUFXLEVBQ1gsbUJBQW1CLEdBQ3BCLE1BQU0sc0JBQXNCLENBQUM7QUFDOUIsT0FBTyxFQUFFLFdBQVcsRUFBRSxpQkFBaUIsRUFBRSxNQUFNLHFDQUFxQyxDQUFDO0FBQ3JGLE9BQU8sRUFBRSxtQkFBbUIsRUFBRSxNQUFNLDRCQUE0QixDQUFDO0FBS2pFLE1BQU0sY0FBYyxHQUFHLEVBQUUsQ0FBQztBQW9CMUI7Ozs7Ozs7R0FPRztBQUNILE1BQU0sT0FBTyxVQUFVO0lBY3JCLFlBQ21CLElBQXFCLEVBQ3JCLE1BQXFDLEVBQ3JDLE1BQXlCLEVBQ3pCLElBQW9CO1FBSHBCLFNBQUksR0FBSixJQUFJLENBQWlCO1FBQ3JCLFdBQU0sR0FBTixNQUFNLENBQStCO1FBQ3JDLFdBQU0sR0FBTixNQUFNLENBQW1CO1FBQ3pCLFNBQUksR0FBSixJQUFJLENBQWdCO1FBakIvQixrQkFBYSxHQUFHLEtBQUssQ0FBQztRQUM5QiwwRUFBMEU7UUFDbEUsaUJBQVksR0FBOEIsSUFBSSxDQUFDO1FBQy9DLG9CQUFlLEdBQWtCLElBQUksQ0FBQztRQUN0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cG9ydCB7IGNvbG9ybWFwRnJvbUx1dCB9IGZyb20gJ25hcGFyaS1qcyc7XG5pbXBvcnQgdHlwZSB7IENvbG9ybWFwLCBSR0JBIH0gZnJvbSAnbmFwYXJpLWpzJztcblxuaW1wb3J0IHR5cGUgeyBSZ2IgfSBmcm9tICcuLi8uLi8uLi9jb250cmFjdHMvY29sb3JtYXAtbHV0JztcbmltcG9ydCB0eXBlIHsgU3BhdGlhbERhdGFQb3J0IH0gZnJvbSAnLi4vLi4vLi4vY29udHJhY3RzL3BvcnRzL3NwYXRpYWwtZGF0YS5wb3J0JztcbmltcG9ydCB0eXBlIHsgU3BhdGlhbFZpZXdTdGF0ZSB9IGZyb20gJy4uLy4uLy4uL2NvbnRyYWN0cy9kaXNwbGF5LXR5cGVzJztcbmltcG9ydCB7XG4gIE5PX0NBVEVHT1JZLFxuICBTcGF0aWFsQ29sdW1uLFxuICBTcGF0aWFsRGF0YXNldCxcbiAgU3BhdGlhbFBvbHlnb25UaWxlLFxuICBTcGF0aWFsUG9seWdvbnMsXG4gIGlzQ2F0ZWdvcmljYWxDb2x1bW4sXG59IGZyb20gJy4uLy4uLy4uL2NvbnRyYWN0cy9zcGF0aWFsLWRhdGFzZXQuY29udHJhY3QnO1xuaW1wb3J0IHtcbiAgREVGQVVMVF9DQVRFR09SSUNBTF9QQUxFVFRFLFxuICBNSVNTSU5HX0NPTE9SLFxuICBjb250cmFzdFdpbmRvdyxcbiAgcGFyc2VIZXgsXG4gIHJlc29sdmVDYXRlZ29yeUNvbG9ycyxcbn0gZnJvbSAnLi4vLi4vLi4vc3BhdGlhbC9zcGF0aWFsLWVuY29kaW5nJztcbmltcG9ydCB7IFNwYXRpYWxTZWxlY3Rpb25NYXNrIH0gZnJvbSAnLi4vLi4vLi4vc3BhdGlhbC9zcGF0aWFsLXNlbGVjdGlvbic7XG5pbXBvcnQge1xuICBEYXRhUmVjdCxcbiAgUE9MWUdPTl9MRVZFTF9NSU5fQ0VMTF9QWCxcbiAgY2VsbFR5cGVDb2x1bW5Gb3IsXG4gIGNlbGxzU2hvd24sXG4gIHBvbHlnb25MZXZlbEZvcixcbiAgdGlsZUlkLFxuICB0aWxlc0luUmVjdCxcbiAgdHlwaWNhbENlbGxEaWFtZXRlcixcbn0gZnJvbSAnLi4vLi4vLi4vc3BhdGlhbC9sb2QnO1xuaW1wb3J0IHsgZmlsdGVyUmluZ3MsIG1lcmdlUG9seWdvblRpbGVzIH0gZnJvbSAnLi4vLi4vLi4vc3BhdGlhbC9zcGF0aWFsLXRpbGUtbWVyZ2UnO1xuaW1wb3J0IHsgQ29udHJhc3RXaW5kb3dDYWNoZSB9IGZyb20gJy4uL25hcGFyaS1zcGF0aWFsLWVuY29kaW5nJztcbmltcG9ydCB0eXBlIHsgQ2F0ZWdvcmljYWxMb29rdXAsIEhpZGRlbkNvZGVzIH0gZnJvbSAnLi9jYXRlZ29yaWNhbC1sb29rdXAnO1xuaW1wb3J0IHR5cGUgeyBPcmRlcmVkTGF5ZXJHcm91cHMsIFRpbGVHcm91cCB9IGZyb20gJy4vbGF5ZXItZ3JvdXBzJztcbmltcG9ydCB0eXBlIHsgUGxhbkNvbnRleHQgfSBmcm9tICcuL3BsYW4tY29udGV4dCc7XG5cbmNvbnN0IE1BWF9DRUxMX1RJTEVTID0gNDg7XG5cbi8qKiBUaGUgY2VsbHMnIGNvbG91cnMgYXMgYSBzaGFwZXMgbGF5ZXIgdGFrZXMgdGhlbTogcGVyLXNoYXBlIFJHQkEsIHZhbHVlcyBvdmVyIGEgY29sb3JtYXAsIG9yXG4gKiAgb25lIGNvbG91ci4gKi9cbmludGVyZmFjZSBDZWxsQ29sb3JzIHtcbiAgdmFsdWVzPzogRmxvYXQzMkFycmF5O1xuICBjb2xvcm1hcD86IENvbG9ybWFwO1xuICBjb250cmFzdExpbWl0cz86IFtudW1iZXIsIG51bWJlcl07XG4gIGNvbG9yPzogUkdCQTtcbiAgZmFjZUNvbG9yPzogRmxvYXQzMkFycmF5O1xufVxuXG4vKiogV2hhdCB0aGUgY2VsbCBsYXllcnMgbmVlZCBmcm9tIHRoZSBzZXJ2aWNlLiAqL1xuZXhwb3J0IGludGVyZmFjZSBDZWxsTGF5ZXJzSG9zdCB7XG4gIC8qKiBUaGUgY29udGludW91cyBMVVQgdGhlIHZpZXcgaXMgdXNpbmcgKHNvIGNlbGxzIGNvbG91cmVkIGJ5IGEgZ2VuZSBtYXRjaCB0aGUgbWFya2VycykuICovXG4gIGNvbnRpbnVvdXNMdXQodmlldzogU3BhdGlhbFZpZXdTdGF0ZSk6IFJnYltdO1xuICAvKiogT3V0bGluZXMgYXBwZWFyZWQgb3IgZGlzYXBwZWFyZWQ6IHRoZSBtYXJrZXJzJyB2aXNpYmlsaXR5IGZvbGxvd3MuICovXG4gIHBvbHlnb25zU2hvd25DaGFuZ2VkKHNob3duOiBib29sZWFuKTogdm9pZDtcbn1cblxuLyoqXG4gKiBUaGUgY2VsbCBvdXRsaW5lcyBvZiB0aGUgMkQgc3BhdGlhbCB2aWV3LCBhdCB0aGUgcG9seWdvbiBsZXZlbCB0aGUgem9vbSBjYWxscyBmb3I6IGEgZmlsbCxcbiAqIGFuIG91dGxpbmUgb3IgYm90aCAocGx1cyBudWNsZXVzIG91dGxpbmVzIGZvciB0aGUgXCJib3RoXCIgY2VsbCBzZXQpLCBjb2xvdXJlZCBieSB0aGUgdmlldydzXG4gKiBjZWxsLWNvbG91ciBtb2RlLCB3aXRoIHN3aXRjaGVkLW9mZiBncm91cHMgbGVmdCBvdXQgb2YgdGhlIGdlb21ldHJ5LlxuICpcbiAqIEdlb21ldHJ5IGFuZCBzdHlsZSBhcmUga2V5ZWQgYXBhcnQsIHNvIGEgcmVjb2xvdXIgKGEgbmV3IGNlbGwtdHlwZSBjb2x1bW4sIGEgc2VsZWN0aW9uKVxuICogcmV3cml0ZXMgdGhlIHBlci1zaGFwZSB2YWx1ZXMgb2YgdGhlIGV4aXN0aW5nIGxheWVycyBhbmQgbmV2ZXIgcmUtZXhwYW5kcyB0aGUgcmluZ3MuXG4gKi9cbmV4cG9ydCBjbGFzcyBDZWxsTGF5ZXJzIHtcbiAgcHJpdmF0ZSBwb2x5Z29uc1Nob3duID0gZmFsc2U7XG4gIC8qKiBSaW5ncyBjdXJyZW50bHkgZHJhd24gYW5kIHRoZSAoZGF0YXNldCwgc2V0LCB0aWxlcykgdGhleSBjYW1lIGZyb20uICovXG4gIHByaXZhdGUgY3VycmVudFJpbmdzOiBTcGF0aWFsUG9seWdvblRpbGUgfCBudWxsID0gbnVsbDtcbiAgcHJpdmF0ZSBjZWxsR2VvbWV0cnlLZXk6IHN0cmluZyB8IG51bGwgPSBudWxsO1xuICBwcml2YXRlIGN1cnJlbnROdWNsZWk6IFNwYXRpYWxQb2x5Z29uVGlsZSB8IG51bGwgPSBudWxsO1xuICBwcml2YXRlIGNlbGxTdHlsZUtleTogc3RyaW5nIHwgbnVsbCA9IG51bGw7XG4gIC8qKiBTZWxlY3Rpb24gaWRlbnRpdHkg4oaSIHJldmlzaW9uLCBzbyBhIGNoYW5nZSBrZXkgY2FuIG5hbWUgYSBzZWxlY3Rpb24gY2hlYXBseS4gKi9cbiAgcHJpdmF0ZSBsYXN0U2VsZWN0aW9uOiBTcGF0aWFsU2VsZWN0aW9uTWFzayB8IG51bGwgPSBudWxsO1xuICBwcml2YXRlIHNlbGVjdGlvblJldmlzaW9uID0gMDtcbiAgLyoqIENvbnRpbnVvdXMgY29sb3VyaW5ncycgd2luZG93cywgcGVyICh2ZWN0b3IsIGNsaXAsIGxvZyk6IGBjb250cmFzdFdpbmRvd2Agc29ydHMgZXZlcnlcbiAgICogIHZhbHVlLCBhbmQgYSBzZWxlY3Rpb24gb3Igb3BhY2l0eSBjaGFuZ2UgcmVjb2xvdXJzIHdpdGggdGhlIHZlY3RvciB1bmNoYW5nZWQgKFNQQVRJQUwtMTIpLiAqL1xuICBwcml2YXRlIHJlYWRvbmx5IGNvbnRyYXN0V2luZG93cyA9IG5ldyBDb250cmFzdFdpbmRvd0NhY2hlKCk7XG5cbiAgY29uc3RydWN0b3IoXG4gICAgcHJpdmF0ZSByZWFkb25seSBwb3J0OiBTcGF0aWFsRGF0YVBvcnQsXG4gICAgcHJpdmF0ZSByZWFkb25seSBncm91cHM6IE9yZGVyZWRMYXllckdyb3VwczxUaWxlR3JvdXA+LFxuICAgIHByaXZhdGUgcmVhZG9ubHkgbG9va3VwOiBDYXRlZ29yaWNhbExvb2t1cCxcbiAgICBwcml2YXRlIHJlYWRvbmx5IGhvc3Q6IENlbGxMYXllcnNIb3N0LFxuICApIHt9XG5cbiAgLyoqIFRydWUgd2hpbGUgb3V0bGluZXMgYXJlIG9uIHNjcmVlbiDigJQgdGhlIHNlcnZpY2UgaGlkZXMgaXRzIGRvdHMgdGhlbi4gKi9cbiAgZ2V0IG91dGxpbmVzU2hvd24oKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIHRoaXMucG9seWdvbnNTaG93bjtcbiAgfVxuXG4gIC8qKiBUaGUgdmlld2VyIHdlbnQgYXdheSAoaXRzIGxheWVycyB3aXRoIGl0KTogdGhlIG91dGxpbmVzIGFyZSBubyBsb25nZXIgc2hvd24uICovXG4gIGRldGFjaGVkKCk6IHZvaWQge1xuICAgIHRoaXMuc2V0UG9seWdvbnNTaG93bihmYWxzZSk7XG4gIH1cblxuICAvKiogRHJhdyB0aGUgY2VsbHMgY292ZXJpbmcgYHJlY3RgIGF0IHRoZSBsZXZlbCBgcHhQZXJVbml0YCBjYWxscyBmb3IsIG9yIGRyb3AgdGhlbS4gKi9cbiAgYXN5bmMgcGxhbihcbiAgICBkYXRhc2V0OiBTcGF0aWFsRGF0YXNldCxcbiAgICB2aWV3OiBTcGF0aWFsVmlld1N0YXRlLFxuICAgIHNlbGVjdGlvbjogU3BhdGlhbFNlbGVjdGlvbk1hc2ssXG4gICAgcmVjdDogRGF0YVJlY3QsXG4gICAgcHhQZXJVbml0OiBudW1iZXIsXG4gICAgY3R4OiBQbGFuQ29udGV4dCxcbiAgKTogUHJvbWlzZTx2b2lkPiB7XG4gICAgY29uc3QgdGlsZWQgPSBkYXRhc2V0LnBvbHlnb25UaWxlcztcbiAgICBjb25zdCB3aG9sZSA9ICF0aWxlZCAmJiBkYXRhc2V0LnBvbHlnb25zICYmIHRoaXMucG9ydC5nZXRQb2x5Z29ucztcbiAgICBpZiAoIWNlbGxzU2hvd24oZGF0YXNldCwgdmlldykgfHwgKCF0aWxlZCAmJiAhd2hvbGUpKSB7XG4gICAgICB0aGlzLmRyb3AoKTtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgY29uc3QgZGlhbWV0ZXIgPSB0eXBpY2FsQ2VsbERpYW1ldGVyKGRhdGFzZXQub2JzZXJ2YXRpb25zLnJhZGl1cyk7XG4gICAgLy8gV2hvbGUtZGF0YXNldCByaW5ncyBoYXZlIG9uZSBsZXZlbCBhbmQgbm8gY29hcnNlciBmYWxsYmFjaywgc28gdGhleSBhcmUgZHJhd24gYXNcbiAgICAvLyBzb29uIGFzIGEgY2VsbCBpcyBiaWcgZW5vdWdoIHRvIHJlYWQgYXMgYSBzaGFwZSByYXRoZXIgdGhhbiBhIGRvdC5cbiAgICBjb25zdCBsZXZlbCA9IHRpbGVkXG4gICAgICA/IHBvbHlnb25MZXZlbEZvcihweFBlclVuaXQsIGRpYW1ldGVyLCB0aWxlZC5sZXZlbHMubGVuZ3RoKVxuICAgICAgOiBweFBlclVuaXQgKiBkaWFtZXRlciA+PSBQT0xZR09OX0xFVkVMX01JTl9DRUxMX1BYWzJdXG4gICAgICAgID8gMFxuICAgICAgICA6IC0xO1xuICAgIGlmIChsZXZlbCA8IDApIHtcbiAgICAgIHRoaXMuZHJvcCgpO1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIC8vIEdyb3VwcyBzd2l0Y2hlZCBvZmYgaW4gdGhlIGxpc3Q6IHRoZWlyIGNlbGxzIGFyZSBsZWZ0IG91dCBvZiB0aGUgZ2VvbWV0cnkuXG4gICAgY29uc3QgaGlkZGVuID0gYXdhaXQgdGhpcy5sb29rdXAuaGlkZGVuQ29kZXMoZGF0YXNldCwgdmlldyk7XG4gICAgaWYgKGN0eC5zdGFsZSgpKSByZXR1cm47XG4gICAgY29uc3QgbGFiZWwgPSB2aWV3LmNlbGxTZXQgPT09ICdib3RoJyA/ICdDZWxscyBhbmQgbnVjbGVpJyA6IHZpZXcuY2VsbFNldCA9PT0gJ251Y2xldXMnID8gJ051Y2xlaScgOiAnQ2VsbHMnO1xuICAgIGNvbnN0IGdlb21ldHJ5ID0gYXdhaXQgY3R4LnRyYWNrKGxhYmVsLCB0aGlzLmNlbGxHZW9tZXRyeShkYXRhc2V0LCB2aWV3LCByZWN0LCBsZXZlbCwgaGlkZGVuLCBjdHgpKTtcbiAgICBpZiAoIWdlb21ldHJ5KSByZXR1cm47XG4gICAgY29uc3QgeyByaW5ncywgbnVjbGVpLCBnZW9tZXRyeUtleSB9ID0gZ2VvbWV0cnk7XG5cbiAgICBjb25zdCBnZW9tZXRyeUNoYW5nZWQgPSBnZW9tZXRyeUtleSAhPT0gdGhpcy5jZWxsR2VvbWV0cnlLZXk7XG4gICAgY29uc3Qgc3R5bGVLZXkgPSBbXG4gICAgICBnZW9tZXRyeUtleSxcbiAgICAgIHZpZXcuY2VsbENvbG9yTW9kZSxcbiAgICAgIHZpZXcuY2VsbENvbG9yR2VuZSxcbiAgICAgIHZpZXcuY2VsbFNpbmdsZUNvbG9yLFxuICAgICAgY2VsbFR5cGVDb2x1bW5Gb3IoZGF0YXNldCwgdmlldyksXG4gICAgICB0aGlzLnNlbGVjdGlvblJldihzZWxlY3Rpb24pLFxuICAgICAgdmlldy5sb2dTY2FsZSxcbiAgICAgIHZpZXcucGVyY2VudGlsZUNsaXAuam9pbigpLFxuICAgICAgSlNPTi5zdHJpbmdpZnkodmlldy5jb250aW51b3VzQ29sb3JtYXApLFxuICAgICAgdmlldy5jZWxsRHJhdyxcbiAgICAgIHZpZXcuY2VsbE9wYWNpdHksXG4gICAgXS5qb2luKCd8Jyk7XG4gICAgY29uc3QgcHJlc2VudCA9IChbJ2NlbGxGaWxsJywgJ2NlbGxPdXRsaW5lJywgJ251Y2xldXNPdXRsaW5lJ10gYXMgY29uc3QpLnNvbWUoKGcpID0+IHRoaXMuZ3JvdXBzLnNob3duKGcpKTtcbiAgICBpZiAoIWdlb21ldHJ5Q2hhbmdlZCAmJiBzdHlsZUtleSA9PT0gdGhpcy5jZWxsU3R5bGVLZXkgJiYgcHJlc2VudCkge1xuICAgICAgdGhpcy5zZXRQb2x5Z29uc1Nob3duKHRydWUpO1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICBjb25zdCBjb2xvcnMgPSBhd2FpdCB0aGlzLmNlbGxDb2xvcnMoZGF0YXNldCwgdmlldywgc2VsZWN0aW9uLCByaW5ncy5vYnNlcnZhdGlvbik7XG4gICAgaWYgKGN0eC5zdGFsZSgpKSByZXR1cm47XG5cbiAgICB0aGlzLmN1cnJlbnRSaW5ncyA9IHJpbmdzO1xuICAgIHRoaXMuY3VycmVudE51Y2xlaSA9IG51Y2xlaTtcbiAgICAvLyBBIGdlb21ldHJ5IG1pc3NpbmcgYSBmYWlsZWQgdGlsZSBpcyBkcmF3biBidXQgbm90IHJlbWVtYmVyZWQsIHNvIHRoZSByZXRyeSByZWZldGNoZXMgaXQuXG4gICAgdGhpcy5jZWxsR2VvbWV0cnlLZXkgPSBjdHguaW5jb21wbGV0ZSA/IG51bGwgOiBnZW9tZXRyeUtleTtcbiAgICB0aGlzLmNlbGxTdHlsZUtleSA9IHN0eWxlS2V5O1xuICAgIHRoaXMuZHJhd0NlbGxzKGRhdGFzZXQsIHZpZXcsIGdlb21ldHJ5LCBjb2xvcnMsIGdlb21ldHJ5Q2hhbmdlZCk7XG4gICAgdGhpcy5zZXRQb2x5Z29uc1Nob3duKHRydWUpO1xuICB9XG5cbiAgLyoqXG4gICAqIFRoZSBjZWxsIGxheWVyczogdGhlIGZpbGwgYW5kIHRoZSBvdXRsaW5lIHRoZSB2aWV3J3MgZHJhdyBtb2RlIGFza3MgZm9yLCBhbmQgd2l0aCBcImJvdGhcIiB0aGVcbiAgICogbnVjbGV1cyBvdXRsaW5lcyBvdmVyIHRoZW0uIEEgZ2VvbWV0cnkgY2hhbmdlIGJ1aWxkcyBuZXcgbGF5ZXJzOyBhIHN0eWxlIGNoYW5nZSByZXN0eWxlcyB0aGVtLlxuICAgKi9cbiAgcHJpdmF0ZSBkcmF3Q2VsbHMoXG4gICAgZGF0YXNldDogU3BhdGlhbERhdGFzZXQsXG4gICAgdmlldzogU3BhdGlhbFZpZXdTdGF0ZSxcbiAgICB7IHJpbmdzLCBudWNsZWkgfTogeyByaW5nczogU3BhdGlhbFBvbHlnb25UaWxlOyBudWNsZWk6IFNwYXRpYWxQb2x5Z29uVGlsZSB8IG51bGwgfSxcbiAgICBjb2xvcnM6IENlbGxDb2xvcnMsXG4gICAgZ2VvbWV0cnlDaGFuZ2VkOiBib29sZWFuLFxuICApOiB2b2lkIHtcbiAgICBjb25zdCByZWYgPSBkYXRhc2V0LmltYWdlUmVmO1xuICAgIGNvbnN0IGNvbW1vbiA9IHsgc2NhbGU6IHJlZj8uc2NhbGUgPz8gWzEsIDFdLCB0cmFuc2xhdGU6IHJlZj8udHJhbnNsYXRlID8/IFswLCAwXSB9IGFzIGNvbnN0O1xuICAgIGNvbnN0IGZpbGwgPSB2aWV3LmNlbGxEcmF3ICE9PSAnb3V0bGluZSc7XG4gICAgY29uc3Qgb3V0bGluZSA9IHZpZXcuY2VsbERyYXcgIT09ICdmaWxsJztcblxuICAgIHRoaXMuZ3JvdXBzLnVwc2VydFNoYXBlcygnY2VsbEZpbGwnLCBmaWxsLCBnZW9tZXRyeUNoYW5nZWQsIHJpbmdzLCB7XG4gICAgICBuYW1lOiAnY2VsbHMnLFxuICAgICAgZHJhdzogJ2ZpbGwnLFxuICAgICAgb3BhY2l0eTogdmlldy5jZWxsT3BhY2l0eSxcbiAgICAgIC4uLmNvbG9ycyxcbiAgICAgIC4uLmNvbW1vbixcbiAgICB9KTtcbiAgICB0aGlzLmdyb3Vwcy51cHNlcnRTaGFwZXMoXG4gICAgICAnY2VsbE91dGxpbmUnLFxuICAgICAgb3V0bGluZSxcbiAgICAgIGdlb21ldHJ5Q2hhbmdlZCxcbiAgICAgIHJpbmdzLFxuICAgICAgZmlsbFxuICAgICAgICA/IC8vIE92ZXIgYSBmaWxsLCBhIGRhcmsgb3V0bGluZSBzZXBhcmF0ZXMgbmVpZ2hib3VycyBvZiB0aGUgc2FtZSB0eXBlLlxuICAgICAgICAgIHsgbmFtZTogJ2NlbGwgb3V0bGluZXMnLCBkcmF3OiAnb3V0bGluZScsIGNvbG9yOiBbMC4wOCwgMC4wOCwgMC4xLCAxXSwgb3BhY2l0eTogMC43LCAuLi5jb21tb24gfVxuICAgICAgICA6IHsgbmFtZTogJ2NlbGwgb3V0bGluZXMnLCBkcmF3OiAnb3V0bGluZScsIG9wYWNpdHk6IDEsIC4uLmNvbG9ycywgLi4uY29tbW9uIH0sXG4gICAgKTtcbiAgICAvLyBcIkJvdGhcIjogbnVjbGVpIG91dGxpbmVkIG92ZXIgdGhlIGNlbGxzLCBsaWdodCBzbyB0aGV5IHJlYWQgYWdhaW5zdCBhbnkgZmlsbC5cbiAgICBpZiAobnVjbGVpKSB7XG4gICAgICB0aGlzLmdyb3Vwcy51cHNlcnRTaGFwZXMoJ251Y2xldXNPdXRsaW5lJywgdHJ1ZSwgZ2VvbWV0cnlDaGFuZ2VkLCBudWNsZWksIHtcbiAgICAgICAgbmFtZTogJ251Y2xldXMgb3V0bGluZXMnLFxuICAgICAgICBkcmF3OiAnb3V0bGluZScsXG4gICAgICAgIGNvbG9yOiBbMC45NSwgMC45NSwgMC45OCwgMV0sXG4gICAgICAgIG9wYWNpdHk6IDAuOCxcbiAgICAgICAgLi4uY29tbW9uLFxuICAgICAgfSk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHRoaXMuZ3JvdXBzLmRyb3AoJ251Y2xldXNPdXRsaW5lJyk7XG4gICAgfVxuICB9XG5cbiAgcHJpdmF0ZSBzZWxlY3Rpb25SZXYoc2VsZWN0aW9uOiBTcGF0aWFsU2VsZWN0aW9uTWFzayk6IG51bWJlciB7XG4gICAgaWYgKHNlbGVjdGlvbiAhPT0gdGhpcy5sYXN0U2VsZWN0aW9uKSB7XG4gICAgICB0aGlzLmxhc3RTZWxlY3Rpb24gPSBzZWxlY3Rpb247XG4gICAgICB0aGlzLnNlbGVjdGlvblJldmlzaW9uKys7XG4gICAgfVxuICAgIHJldHVybiB0aGlzLnNlbGVjdGlvblJldmlzaW9uO1xuICB9XG5cbiAgLyoqXG4gICAqIFRoZSByaW5ncycgY29sb3VycyBieSB0aGVpciBvd25lcnMsIGJ5IHRoZSB2aWV3J3MgY2VsbC1jb2xvdXIgbW9kZSAoWGVuaXVtIEV4cGxvcmVyJ3MgXCJDZWxsXG4gICAqIENvbG9yXCIpOiBvbmUgUkdCQSBwZXIgc2hhcGUgZm9yIGEgZ3JvdXBpbmcsIHZhbHVlcyArIGNvbG9ybWFwIGZvciBhIG1lYXN1cmVtZW50LCBvbmUgY29sb3VyXG4gICAqIGZvciBcInNpbmdsZVwiLiBBIHNlbGVjdGlvbiBtdXRlcyB3aGF0IGl0IGxlYXZlcyBvdXQuXG4gICAqL1xuICBwcml2YXRlIGFzeW5jIGNlbGxDb2xvcnMoXG4gICAgZGF0YXNldDogU3BhdGlhbERhdGFzZXQsXG4gICAgdmlldzogU3BhdGlhbFZpZXdTdGF0ZSxcbiAgICBzZWxlY3Rpb246IFNwYXRpYWxTZWxlY3Rpb25NYXNrLFxuICAgIG93bmVyczogVWludDMyQXJyYXksXG4gICk6IFByb21pc2U8Q2VsbENvbG9ycz4ge1xuICAgIGNvbnN0IG11dGVkID0gc2VsZWN0aW9uLmNvdW50ID4gMCA/IHNlbGVjdGlvbi5tYXNrIDogbnVsbDtcbiAgICBjb25zdCBtb2RlID0gdmlldy5jZWxsQ29sb3JNb2RlO1xuXG4gICAgaWYgKG1vZGUgPT09ICdzaW5nbGUnKSB7XG4gICAgICBjb25zdCBbciwgZywgYl0gPSBwYXJzZUhleCh2aWV3LmNlbGxTaW5nbGVDb2xvcik7XG4gICAgICByZXR1cm4geyBjb2xvcjogW3IgLyAyNTUsIGcgLyAyNTUsIGIgLyAyNTUsIDFdIH07XG4gICAgfVxuXG4gICAgY29uc3QgY29udGludW91cyA9IGFzeW5jIChyYXc6IEZsb2F0MzJBcnJheSwgbG9nOiBib29sZWFuKSA9PiB7XG4gICAgICBjb25zdCB2YWx1ZXMgPSBuZXcgRmxvYXQzMkFycmF5KG93bmVycy5sZW5ndGgpO1xuICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCBvd25lcnMubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgY29uc3QgdiA9IHJhd1tvd25lcnNbaV1dID8/IE5hTjtcbiAgICAgICAgdmFsdWVzW2ldID0gbG9nID8gTWF0aC5sb2cxcChNYXRoLm1heCgwLCB2KSkgOiB2O1xuICAgICAgfVxuICAgICAgY29uc3QgW2NsaXBMbywgY2xpcEhpXSA9IHZpZXcucGVyY2VudGlsZUNsaXA7XG4gICAgICAvLyBLZXllZCBieSB0aGUgU09VUkNFIHZlY3RvciAodGhlIGxvZyBjb3B5IHdvdWxkIGJlIG5ldyBvbiBldmVyeSBjYWxsKSwgYXMgdGhlIDNEIGNsb3VkJ3MuXG4gICAgICBjb25zdCBbbG8sIGhpXSA9IHRoaXMuY29udHJhc3RXaW5kb3dzLmdldChyYXcsIGNsaXBMbywgY2xpcEhpLCBsb2csICgpID0+XG4gICAgICAgIGNvbnRyYXN0V2luZG93KGxvZyA/IHJhdy5tYXAoKHYpID0+IE1hdGgubG9nMXAoTWF0aC5tYXgoMCwgdikpKSA6IHJhdywgY2xpcExvLCBjbGlwSGkpLFxuICAgICAgKTtcbiAgICAgIHJldHVybiB7XG4gICAgICAgIHZhbHVlcyxcbiAgICAgICAgY29sb3JtYXA6IGNvbG9ybWFwRnJvbUx1dCgnc3BhdGlhbC1jb250aW51b3VzJywgdGhpcy5ob3N0LmNvbnRpbnVvdXNMdXQodmlldykpLFxuICAgICAgICBjb250cmFzdExpbWl0czogW2xvLCBoaV0gYXMgW251bWJlciwgbnVtYmVyXSxcbiAgICAgIH07XG4gICAgfTtcbiAgICBpZiAobW9kZSA9PT0gJ2dlbmUnICYmIHZpZXcuY2VsbENvbG9yR2VuZSkge1xuICAgICAgcmV0dXJuIGNvbnRpbnVvdXMoYXdhaXQgdGhpcy5wb3J0LmdldEZlYXR1cmVWZWN0b3Iodmlldy5jZWxsQ29sb3JHZW5lKSwgdHJ1ZSk7XG4gICAgfVxuICAgIGlmIChtb2RlID09PSAndHJhbnNjcmlwdERlbnNpdHknICYmIGRhdGFzZXQuY29sdW1ucy5zb21lKChjKSA9PiBjLm5hbWUgPT09ICd0cmFuc2NyaXB0X2RlbnNpdHknKSkge1xuICAgICAgY29uc3QgY29sdW1uID0gYXdhaXQgdGhpcy5wb3J0LmdldENvbHVtbigndHJhbnNjcmlwdF9kZW5zaXR5Jyk7XG4gICAgICBpZiAoIWlzQ2F0ZWdvcmljYWxDb2x1bW4oY29sdW1uKSkgcmV0dXJuIGNvbnRpbnVvdXMoY29sdW1uLnZhbHVlcywgZmFsc2UpO1xuICAgIH1cblxuICAgIGNvbnN0IG5hbWUgPVxuICAgICAgbW9kZSA9PT0gJ3NlZ21lbnRhdGlvbicgJiYgZGF0YXNldC5jb2x1bW5zLnNvbWUoKGMpID0+IGMubmFtZSA9PT0gJ3NlZ21lbnRhdGlvbl9tZXRob2QnKVxuICAgICAgICA/ICdzZWdtZW50YXRpb25fbWV0aG9kJ1xuICAgICAgICA6IGNlbGxUeXBlQ29sdW1uRm9yKGRhdGFzZXQsIHZpZXcpO1xuICAgIGNvbnN0IGNvZGVzID0gbmFtZSA/IGF3YWl0IHRoaXMubG9va3VwLmNvZGVzKG5hbWUpIDogbnVsbDtcbiAgICBjb25zdCBwYWxldHRlID0gY2F0ZWdvcnlSZ2JhKGNvZGVzPy5tZXRhID8/IG51bGwpO1xuICAgIGNvbnN0IG1pc3NpbmcgPSByZ2JhMDEoTUlTU0lOR19DT0xPUik7XG4gICAgLy8gT25lIFJHQkEgcGVyIHNoYXBlIChuYXBhcmkgU2hhcGVzJyBgZmFjZV9jb2xvcmApOiBhbnkgbnVtYmVyIG9mIGNhdGVnb3JpZXMga2VlcHMgaXRzIG93blxuICAgIC8vIGNvbG91ciwgd2hlcmUgYSBjb2xvcm1hcCBiYW5kIHBlciBjYXRlZ29yeSByYW4gb3V0IG9mIExVVCBlbnRyaWVzIHBhc3QgfjEyNy5cbiAgICBjb25zdCBmYWNlQ29sb3IgPSBuZXcgRmxvYXQzMkFycmF5KG93bmVycy5sZW5ndGggKiA0KTtcbiAgICBmb3IgKGxldCBpID0gMDsgaSA8IG93bmVycy5sZW5ndGg7IGkrKykge1xuICAgICAgY29uc3QgbyA9IG93bmVyc1tpXTtcbiAgICAgIGNvbnN0IGNvZGUgPSAhY29kZXMgfHwgKG11dGVkICYmICFtdXRlZFtvXSkgPyBOT19DQVRFR09SWSA6IGNvZGVzLmNvZGVzW29dO1xuICAgICAgZmFjZUNvbG9yLnNldChwYWxldHRlW2NvZGVdID8/IG1pc3NpbmcsIGkgKiA0KTtcbiAgICB9XG4gICAgcmV0dXJuIHsgZmFjZUNvbG9yIH07XG4gIH1cblxuICAvKipcbiAgICogVGhlIGNlbGwgcmluZ3MgKGFuZCwgZm9yIFwiYm90aFwiLCB0aGUgbnVjbGV1cyByaW5ncykgY292ZXJpbmcgYHJlY3RgIGF0IGBsZXZlbGAsIG1pbnVzXG4gICAqIHRoZSBoaWRkZW4gZ3JvdXBzIOKAlCByZXVzZWQgd2hlbiBub3RoaW5nIHRoYXQgZGVjaWRlcyB0aGVtIGNoYW5nZWQuIE51bGwgd2hlbiB0aGVcbiAgICogdmlldyB3ZW50IHN0YWxlIG9yIHRoZSBkYXRhc2V0IGhhcyBubyBzZXQgdG8gZHJhdy5cbiAgICovXG4gIHByaXZhdGUgYXN5bmMgY2VsbEdlb21ldHJ5KFxuICAgIGRhdGFzZXQ6IFNwYXRpYWxEYXRhc2V0LFxuICAgIHZpZXc6IFNwYXRpYWxWaWV3U3RhdGUsXG4gICAgcmVjdDogRGF0YVJlY3QsXG4gICAgbGV2ZWw6IG51bWJlcixcbiAgICBoaWRkZW46IEhpZGRlbkNvZGVzIHwgbnVsbCxcbiAgICBjdHg6IFBsYW5Db250ZXh0LFxuICApOiBQcm9taXNlPHsgcmluZ3M6IFNwYXRpYWxQb2x5Z29uVGlsZTsgbnVjbGVpOiBTcGF0aWFsUG9seWdvblRpbGUgfCBudWxsOyBnZW9tZXRyeUtleTogc3RyaW5nIH0gfCBudWxsPiB7XG4gICAgY29uc3QgdGlsZWQgPSBkYXRhc2V0LnBvbHlnb25UaWxlcztcbiAgICBjb25zdCBoaWRkZW5LZXkgPSB2aWV3LmhpZGRlbkdyb3Vwcy5qb2luKCdcXHUwMDAxJyk7XG4gICAgbGV0IHJpbmdzOiBTcGF0aWFsUG9seWdvblRpbGU7XG4gICAgbGV0IG51Y2xlaTogU3BhdGlhbFBvbHlnb25UaWxlIHwgbnVsbCA9IG51bGw7XG4gICAgbGV0IGdlb21ldHJ5S2V5OiBzdHJpbmc7XG4gICAgaWYgKHRpbGVkKSB7XG4gICAgICBjb25zdCBib3RoID0gdmlldy5jZWxsU2V0ID09PSAnYm90aCc7XG4gICAgICBjb25zdCBzZXQgPVxuICAgICAgICAhYm90aCAmJiB2aWV3LmNlbGxTZXQgJiYgdGlsZWQuc2V0cy5zb21lKChzKSA9PiBzLm5hbWUgPT09IHZpZXcuY2VsbFNldClcbiAgICAgICAgICA/IHZpZXcuY2VsbFNldFxuICAgICAgICAgIDogKHRpbGVkLmRlZmF1bHRTZXQgPz8gdGlsZWQuc2V0c1swXT8ubmFtZSk7XG4gICAgICBpZiAoIXNldCkgcmV0dXJuIG51bGw7XG4gICAgICBjb25zdCBudWNsZXVzU2V0ID0gYm90aCA/IHRpbGVkLnNldHMuZmluZCgocykgPT4gcy5uYW1lICE9PSBzZXQpPy5uYW1lIDogdW5kZWZpbmVkO1xuICAgICAgY29uc3Qga2V5cyA9IHRpbGVzSW5SZWN0KHJlY3QsIGxldmVsLCB0aWxlZC5sZXZlbHMsIHRpbGVkLmJvdW5kcywgTUFYX0NFTExfVElMRVMpO1xuICAgICAgZ2VvbWV0cnlLZXkgPSBgJHtkYXRhc2V0LmlkfXwke3NldH18JHtudWNsZXVzU2V0ID8/ICcnfXwke2hpZGRlbktleX18JHtrZXlzLm1hcCh0aWxlSWQpLmpvaW4oJywnKX1gO1xuICAgICAgaWYgKGdlb21ldHJ5S2V5ID09PSB0aGlzLmNlbGxHZW9tZXRyeUtleSAmJiB0aGlzLmN1cnJlbnRSaW5ncykge1xuICAgICAgICByaW5ncyA9IHRoaXMuY3VycmVudFJpbmdzO1xuICAgICAgICBudWNsZWkgPSB0aGlzLmN1cnJlbnROdWNsZWk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBjb25zdCBbdGlsZXMsIG51Y2xldXNUaWxlc10gPSBhd2FpdCBQcm9taXNlLmFsbChbXG4gICAgICAgICAgY3R4LmZldGNoQWxsKGtleXMsIChrKSA9PiB0aGlzLnBvcnQuZ2V0UG9seWdvblRpbGUhKHNldCwgay5sZXZlbCwgay5neCwgay5neSkpLFxuICAgICAgICAgIG51Y2xldXNTZXRcbiAgICAgICAgICAgID8gY3R4LmZldGNoQWxsKGtleXMsIChrKSA9PiB0aGlzLnBvcnQuZ2V0UG9seWdvblRpbGUhKG51Y2xldXNTZXQsIGsubGV2ZWwsIGsuZ3gsIGsuZ3kpKVxuICAgICAgICAgICAgOiBQcm9taXNlLnJlc29sdmUobnVsbCksXG4gICAgICAgIF0pO1xuICAgICAgICBpZiAoY3R4LnN0YWxlKCkpIHJldHVybiBudWxsO1xuICAgICAgICByaW5ncyA9IGZpbHRlclJpbmdzKG1lcmdlUG9seWdvblRpbGVzKHRpbGVzKSwgaGlkZGVuKTtcbiAgICAgICAgbnVjbGVpID0gbnVjbGV1c1RpbGVzID8gZmlsdGVyUmluZ3MobWVyZ2VQb2x5Z29uVGlsZXMobnVjbGV1c1RpbGVzKSwgaGlkZGVuKSA6IG51bGw7XG4gICAgICB9XG4gICAgfSBlbHNlIHtcbiAgICAgIGdlb21ldHJ5S2V5ID0gYCR7ZGF0YXNldC5pZH18d2hvbGV8JHtoaWRkZW5LZXl9YDtcbiAgICAgIGlmIChnZW9tZXRyeUtleSA9PT0gdGhpcy5jZWxsR2VvbWV0cnlLZXkgJiYgdGhpcy5jdXJyZW50UmluZ3MpIHtcbiAgICAgICAgcmluZ3MgPSB0aGlzLmN1cnJlbnRSaW5ncztcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGNvbnN0IHBvbHlzOiBTcGF0aWFsUG9seWdvbnMgPSBhd2FpdCB0aGlzLnBvcnQuZ2V0UG9seWdvbnMhKCk7XG4gICAgICAgIGlmIChjdHguc3RhbGUoKSkgcmV0dXJuIG51bGw7XG4gICAgICAgIC8vIFdob2xlLWRhdGFzZXQgcmluZ3MgYXJlIGluZGV4LWFsaWduZWQgd2l0aCB0aGUgb2JzZXJ2YXRpb25zLlxuICAgICAgICByaW5ncyA9IGZpbHRlclJpbmdzKFxuICAgICAgICAgIHsgLi4ucG9seXMsIG9ic2VydmF0aW9uOiBVaW50MzJBcnJheS5mcm9tKHsgbGVuZ3RoOiBwb2x5cy5jb3VudCB9LCAoX3YsIGkpID0+IGkpIH0sXG4gICAgICAgICAgaGlkZGVuLFxuICAgICAgICApO1xuICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4geyByaW5ncywgbnVjbGVpLCBnZW9tZXRyeUtleSB9O1xuICB9XG5cbiAgLyoqIFJlbW92ZSB0aGUgY2VsbCBsYXllcnMgYW5kIGZvcmdldCB3aGF0IHRoZXkgc2hvd2VkLiAqL1xuICBkcm9wKCk6IHZvaWQge1xuICAgIHRoaXMuZ3JvdXBzLmRyb3AoJ2NlbGxGaWxsJyk7XG4gICAgdGhpcy5ncm91cHMuZHJvcCgnY2VsbE91dGxpbmUnKTtcbiAgICB0aGlzLmdyb3Vwcy5kcm9wKCdudWNsZXVzT3V0bGluZScpO1xuICAgIHRoaXMuY3VycmVudE51Y2xlaSA9IG51bGw7XG4gICAgdGhpcy5jZWxsR2VvbWV0cnlLZXkgPSBudWxsO1xuICAgIHRoaXMuY2VsbFN0eWxlS2V5ID0gbnVsbDtcbiAgICB0aGlzLmN1cnJlbnRSaW5ncyA9IG51bGw7XG4gICAgdGhpcy5zZXRQb2x5Z29uc1Nob3duKGZhbHNlKTtcbiAgfVxuXG4gIHByaXZhdGUgc2V0UG9seWdvbnNTaG93bihzaG93bjogYm9vbGVhbik6IHZvaWQge1xuICAgIGlmIChzaG93biA9PT0gdGhpcy5wb2x5Z29uc1Nob3duKSByZXR1cm47XG4gICAgdGhpcy5wb2x5Z29uc1Nob3duID0gc2hvd247XG4gICAgdGhpcy5ob3N0LnBvbHlnb25zU2hvd25DaGFuZ2VkKHNob3duKTtcbiAgfVxufVxuXG4vKiogQW4gOC1iaXQgUkdCIGFzIGFuIG9wYXF1ZSAwLi4xIFJHQkEuICovXG5mdW5jdGlvbiByZ2JhMDEoW3IsIGcsIGJdOiByZWFkb25seSBbbnVtYmVyLCBudW1iZXIsIG51bWJlcl0pOiBSR0JBIHtcbiAgcmV0dXJuIFtyIC8gMjU1LCBnIC8gMjU1LCBiIC8gMjU1LCAxXTtcbn1cblxuLyoqIEEgZ3JvdXBpbmcncyBjYXRlZ29yeSBjb2xvdXJzLCBhcyAwLi4xIFJHQkEgYnkgY2F0ZWdvcnkgY29kZSAob25lIGRlZmF1bHQgd2l0aG91dCBhIGdyb3VwaW5nKS4gKi9cbmZ1bmN0aW9uIGNhdGVnb3J5UmdiYShtZXRhOiBTcGF0aWFsQ29sdW1uWydtZXRhJ10gfCBudWxsKTogUkdCQVtdIHtcbiAgY29uc3QgaGV4ID0gbWV0YSAmJiBtZXRhLmtpbmQgPT09ICdjYXRlZ29yaWNhbCcgPyByZXNvbHZlQ2F0ZWdvcnlDb2xvcnMobWV0YSkgOiBbREVGQVVMVF9DQVRFR09SSUNBTF9QQUxFVFRFWzBdXTtcbiAgcmV0dXJuIGhleC5tYXAoKGgpID0+IHJnYmEwMShwYXJzZUhleChoKSkpO1xufVxuIl19
272
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY2VsbC1sYXllcnMuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9zcmMvbGliL2ltcGxlbWVudGF0aW9ucy9uYXBhcmktanMvc3BhdGlhbC10aWxlcy9jZWxsLWxheWVycy50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsZUFBZSxFQUFFLE1BQU0sV0FBVyxDQUFDO0FBTTVDLE9BQU8sRUFDTCxXQUFXLEVBS1gsbUJBQW1CLEdBQ3BCLE1BQU0sNkNBQTZDLENBQUM7QUFDckQsT0FBTyxFQUNMLDJCQUEyQixFQUMzQixhQUFhLEVBQ2IsY0FBYyxFQUNkLFFBQVEsRUFDUixxQkFBcUIsR0FDdEIsTUFBTSxtQ0FBbUMsQ0FBQztBQUUzQyxPQUFPLEVBRUwseUJBQXlCLEVBQ3pCLGlCQUFpQixFQUNqQixVQUFVLEVBQ1YsYUFBYSxFQUNiLGVBQWUsRUFDZixNQUFNLEVBQ04sV0FBVyxFQUNYLG1CQUFtQixHQUNwQixNQUFNLHNCQUFzQixDQUFDO0FBQzlCLE9BQU8sRUFBRSxXQUFXLEVBQUUsaUJBQWlCLEVBQUUsTUFBTSxxQ0FBcUMsQ0FBQztBQUNyRixPQUFPLEVBQUUsYUFBYSxFQUFFLE1BQU0sc0NBQXNDLENBQUM7QUFDckUsT0FBTyxFQUFFLG1CQUFtQixFQUFFLE1BQU0sNEJBQTRCLENBQUM7QUFLakUsTUFBTSxjQUFjLEdBQUcsRUFBRSxDQUFDO0FBb0IxQjs7Ozs7OztHQU9HO0FBQ0gsTUFBTSxPQUFPLFVBQVU7SUFjckIsWUFDbUIsSUFBcUIsRUFDckIsTUFBcUMsRUFDckMsTUFBeUIsRUFDekIsSUFBb0I7UUFIcEIsU0FBSSxHQUFKLElBQUksQ0FBaUI7UUFDckIsV0FBTSxHQUFOLE1BQU0sQ0FBK0I7UUFDckMsV0FBTSxHQUFOLE1BQU0sQ0FBbUI7UUFDekIsU0FBSSxHQUFKLElBQUksQ0FBZ0I7UUFqQi9CLGtCQUFhLEdBQUcsS0FBSyxDQUFDO1FBQzlCLDBFQUEwRTtRQUNsRSxp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SUFBSSxDQUFDLGFBQWE7WUFBRSxPQUFPO1FBQ3pDLElBQUksQ0FBQyxhQUFhLEdBQUcsS0FBSyxDQUFDO1FBQzNCLElBQUksQ0FBQyxJQUFJLENBQUMsb0JBQW9CLENBQUMsS0FBSyxDQUFDLENBQUM7SUFDeEMsQ0FBQztDQUNGO0FBRUQsMkNBQTJDO0FBQzNDLFNBQVMsTUFBTSxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLENBQW9DO0lBQzFELE9BQU8sQ0FBQyxDQUFDLEdBQUcsR0FBRyxFQUFFLENBQUMsR0FBRyxHQUFHLEVBQUUsQ0FBQyxHQUFHLEdBQUcsRUFBRSxDQUFDLENBQUMsQ0FBQztBQUN4QyxDQUFDO0FBRUQscUdBQXFHO0FBQ3JHLFNBQVMsWUFBWSxDQUFDLElBQWtDO0lBQ3RELE1BQU0sR0FBRyxHQUFHLElBQUksSUFBSSxJQUFJLENBQUMsSUFBSSxLQUFLLGFBQWEsQ0FBQyxDQUFDLENBQUMscUJBQXFCLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsMkJBQTJCLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztJQUNqSCxPQUFPLEdBQUcsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLE1BQU0sQ0FBQyxRQUFRLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO0FBQzdDLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBjb2xvcm1hcEZyb21MdXQgfSBmcm9tICduYXBhcmktanMnO1xuaW1wb3J0IHR5cGUgeyBDb2xvcm1hcCwgUkdCQSB9IGZyb20gJ25hcGFyaS1qcyc7XG5cbmltcG9ydCB0eXBlIHsgUmdiIH0gZnJvbSAnLi4vLi4vLi4vY29udHJhY3RzL2NvbG9ybWFwLWx1dCc7XG5pbXBvcnQgdHlwZSB7IFNwYXRpYWxEYXRhUG9ydCB9IGZyb20gJy4uLy4uLy4uL2NvbnRyYWN0cy9wb3J0cy9zcGF0aWFsLWRhdGEucG9ydCc7XG5pbXBvcnQgdHlwZSB7IFNwYXRpYWxWaWV3U3RhdGUgfSBmcm9tICcuLi8uLi8uLi9jb250cmFjdHMvZGlzcGxheS10eXBlcyc7XG5pbXBvcnQge1xuICBOT19DQVRFR09SWSxcbiAgU3BhdGlhbENvbHVtbixcbiAgU3BhdGlhbERhdGFzZXQsXG4gIFNwYXRpYWxQb2x5Z29uVGlsZSxcbiAgU3BhdGlhbFBvbHlnb25zLFxuICBpc0NhdGVnb3JpY2FsQ29sdW1uLFxufSBmcm9tICcuLi8uLi8uLi9jb250cmFjdHMvc3BhdGlhbC1kYXRhc2V0LmNvbnRyYWN0JztcbmltcG9ydCB7XG4gIERFRkFVTFRfQ0FURUdPUklDQUxfUEFMRVRURSxcbiAgTUlTU0lOR19DT0xPUixcbiAgY29udHJhc3RXaW5kb3csXG4gIHBhcnNlSGV4LFxuICByZXNvbHZlQ2F0ZWdvcnlDb2xvcnMsXG59IGZyb20gJy4uLy4uLy4uL3NwYXRpYWwvc3BhdGlhbC1lbmNvZGluZyc7XG5pbXBvcnQgeyBTcGF0aWFsU2VsZWN0aW9uTWFzayB9IGZyb20gJy4uLy4uLy4uL3NwYXRpYWwvc3BhdGlhbC1zZWxlY3Rpb24nO1xuaW1wb3J0IHtcbiAgRGF0YVJlY3QsXG4gIFBPTFlHT05fTEVWRUxfTUlOX0NFTExfUFgsXG4gIGNlbGxUeXBlQ29sdW1uRm9yLFxuICBjZWxsc1Nob3duLFxuICBkcmF3bkNlbGxTZXRzLFxuICBwb2x5Z29uTGV2ZWxGb3IsXG4gIHRpbGVJZCxcbiAgdGlsZXNJblJlY3QsXG4gIHR5cGljYWxDZWxsRGlhbWV0ZXIsXG59IGZyb20gJy4uLy4uLy4uL3NwYXRpYWwvbG9kJztcbmltcG9ydCB7IGZpbHRlclJpbmdzLCBtZXJnZVBvbHlnb25UaWxlcyB9IGZyb20gJy4uLy4uLy4uL3NwYXRpYWwvc3BhdGlhbC10aWxlLW1lcmdlJztcbmltcG9ydCB7IGdlbmVGaWx0ZXJLZXkgfSBmcm9tICcuLi8uLi8uLi9zcGF0aWFsL3NwYXRpYWwtZ2VuZS1maWx0ZXInO1xuaW1wb3J0IHsgQ29udHJhc3RXaW5kb3dDYWNoZSB9IGZyb20gJy4uL25hcGFyaS1zcGF0aWFsLWVuY29kaW5nJztcbmltcG9ydCB0eXBlIHsgQ2F0ZWdvcmljYWxMb29rdXAsIEhpZGRlbkNvZGVzIH0gZnJvbSAnLi9jYXRlZ29yaWNhbC1sb29rdXAnO1xuaW1wb3J0IHR5cGUgeyBPcmRlcmVkTGF5ZXJHcm91cHMsIFRpbGVHcm91cCB9IGZyb20gJy4vbGF5ZXItZ3JvdXBzJztcbmltcG9ydCB0eXBlIHsgUGxhbkNvbnRleHQgfSBmcm9tICcuL3BsYW4tY29udGV4dCc7XG5cbmNvbnN0IE1BWF9DRUxMX1RJTEVTID0gNDg7XG5cbi8qKiBUaGUgY2VsbHMnIGNvbG91cnMgYXMgYSBzaGFwZXMgbGF5ZXIgdGFrZXMgdGhlbTogcGVyLXNoYXBlIFJHQkEsIHZhbHVlcyBvdmVyIGEgY29sb3JtYXAsIG9yXG4gKiAgb25lIGNvbG91ci4gKi9cbmludGVyZmFjZSBDZWxsQ29sb3JzIHtcbiAgdmFsdWVzPzogRmxvYXQzMkFycmF5O1xuICBjb2xvcm1hcD86IENvbG9ybWFwO1xuICBjb250cmFzdExpbWl0cz86IFtudW1iZXIsIG51bWJlcl07XG4gIGNvbG9yPzogUkdCQTtcbiAgZmFjZUNvbG9yPzogRmxvYXQzMkFycmF5O1xufVxuXG4vKiogV2hhdCB0aGUgY2VsbCBsYXllcnMgbmVlZCBmcm9tIHRoZSBzZXJ2aWNlLiAqL1xuZXhwb3J0IGludGVyZmFjZSBDZWxsTGF5ZXJzSG9zdCB7XG4gIC8qKiBUaGUgY29udGludW91cyBMVVQgdGhlIHZpZXcgaXMgdXNpbmcgKHNvIGNlbGxzIGNvbG91cmVkIGJ5IGEgZ2VuZSBtYXRjaCB0aGUgbWFya2VycykuICovXG4gIGNvbnRpbnVvdXNMdXQodmlldzogU3BhdGlhbFZpZXdTdGF0ZSk6IFJnYltdO1xuICAvKiogT3V0bGluZXMgYXBwZWFyZWQgb3IgZGlzYXBwZWFyZWQ6IHRoZSBtYXJrZXJzJyB2aXNpYmlsaXR5IGZvbGxvd3MuICovXG4gIHBvbHlnb25zU2hvd25DaGFuZ2VkKHNob3duOiBib29sZWFuKTogdm9pZDtcbn1cblxuLyoqXG4gKiBUaGUgY2VsbCBvdXRsaW5lcyBvZiB0aGUgMkQgc3BhdGlhbCB2aWV3LCBhdCB0aGUgcG9seWdvbiBsZXZlbCB0aGUgem9vbSBjYWxscyBmb3I6IGEgZmlsbCxcbiAqIGFuIG91dGxpbmUgb3IgYm90aCAocGx1cyBudWNsZXVzIG91dGxpbmVzIGZvciB0aGUgXCJib3RoXCIgY2VsbCBzZXQpLCBjb2xvdXJlZCBieSB0aGUgdmlldydzXG4gKiBjZWxsLWNvbG91ciBtb2RlLCB3aXRoIHN3aXRjaGVkLW9mZiBncm91cHMgbGVmdCBvdXQgb2YgdGhlIGdlb21ldHJ5LlxuICpcbiAqIEdlb21ldHJ5IGFuZCBzdHlsZSBhcmUga2V5ZWQgYXBhcnQsIHNvIGEgcmVjb2xvdXIgKGEgbmV3IGNlbGwtdHlwZSBjb2x1bW4sIGEgc2VsZWN0aW9uKVxuICogcmV3cml0ZXMgdGhlIHBlci1zaGFwZSB2YWx1ZXMgb2YgdGhlIGV4aXN0aW5nIGxheWVycyBhbmQgbmV2ZXIgcmUtZXhwYW5kcyB0aGUgcmluZ3MuXG4gKi9cbmV4cG9ydCBjbGFzcyBDZWxsTGF5ZXJzIHtcbiAgcHJpdmF0ZSBwb2x5Z29uc1Nob3duID0gZmFsc2U7XG4gIC8qKiBSaW5ncyBjdXJyZW50bHkgZHJhd24gYW5kIHRoZSAoZGF0YXNldCwgc2V0LCB0aWxlcykgdGhleSBjYW1lIGZyb20uICovXG4gIHByaXZhdGUgY3VycmVudFJpbmdzOiBTcGF0aWFsUG9seWdvblRpbGUgfCBudWxsID0gbnVsbDtcbiAgcHJpdmF0ZSBjZWxsR2VvbWV0cnlLZXk6IHN0cmluZyB8IG51bGwgPSBudWxsO1xuICBwcml2YXRlIGN1cnJlbnROdWNsZWk6IFNwYXRpYWxQb2x5Z29uVGlsZSB8IG51bGwgPSBudWxsO1xuICBwcml2YXRlIGNlbGxTdHlsZUtleTogc3RyaW5nIHwgbnVsbCA9IG51bGw7XG4gIC8qKiBTZWxlY3Rpb24gaWRlbnRpdHkg4oaSIHJldmlzaW9uLCBzbyBhIGNoYW5nZSBrZXkgY2FuIG5hbWUgYSBzZWxlY3Rpb24gY2hlYXBseS4gKi9cbiAgcHJpdmF0ZSBsYXN0U2VsZWN0aW9uOiBTcGF0aWFsU2VsZWN0aW9uTWFzayB8IG51bGwgPSBudWxsO1xuICBwcml2YXRlIHNlbGVjdGlvblJldmlzaW9uID0gMDtcbiAgLyoqIENvbnRpbnVvdXMgY29sb3VyaW5ncycgd2luZG93cywgcGVyICh2ZWN0b3IsIGNsaXAsIGxvZyk6IGBjb250cmFzdFdpbmRvd2Agc29ydHMgZXZlcnlcbiAgICogIHZhbHVlLCBhbmQgYSBzZWxlY3Rpb24gb3Igb3BhY2l0eSBjaGFuZ2UgcmVjb2xvdXJzIHdpdGggdGhlIHZlY3RvciB1bmNoYW5nZWQgKFNQQVRJQUwtMTIpLiAqL1xuICBwcml2YXRlIHJlYWRvbmx5IGNvbnRyYXN0V2luZG93cyA9IG5ldyBDb250cmFzdFdpbmRvd0NhY2hlKCk7XG5cbiAgY29uc3RydWN0b3IoXG4gICAgcHJpdmF0ZSByZWFkb25seSBwb3J0OiBTcGF0aWFsRGF0YVBvcnQsXG4gICAgcHJpdmF0ZSByZWFkb25seSBncm91cHM6IE9yZGVyZWRMYXllckdyb3VwczxUaWxlR3JvdXA+LFxuICAgIHByaXZhdGUgcmVhZG9ubHkgbG9va3VwOiBDYXRlZ29yaWNhbExvb2t1cCxcbiAgICBwcml2YXRlIHJlYWRvbmx5IGhvc3Q6IENlbGxMYXllcnNIb3N0LFxuICApIHt9XG5cbiAgLyoqIFRydWUgd2hpbGUgb3V0bGluZXMgYXJlIG9uIHNjcmVlbiDigJQgdGhlIHNlcnZpY2UgaGlkZXMgaXRzIGRvdHMgdGhlbi4gKi9cbiAgZ2V0IG91dGxpbmVzU2hvd24oKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIHRoaXMucG9seWdvbnNTaG93bjtcbiAgfVxuXG4gIC8qKiBUaGUgdmlld2VyIHdlbnQgYXdheSAoaXRzIGxheWVycyB3aXRoIGl0KTogdGhlIG91dGxpbmVzIGFyZSBubyBsb25nZXIgc2hvd24uICovXG4gIGRldGFjaGVkKCk6IHZvaWQge1xuICAgIHRoaXMuc2V0UG9seWdvbnNTaG93bihmYWxzZSk7XG4gIH1cblxuICAvKiogRHJhdyB0aGUgY2VsbHMgY292ZXJpbmcgYHJlY3RgIGF0IHRoZSBsZXZlbCBgcHhQZXJVbml0YCBjYWxscyBmb3IsIG9yIGRyb3AgdGhlbS4gKi9cbiAgYXN5bmMgcGxhbihcbiAgICBkYXRhc2V0OiBTcGF0aWFsRGF0YXNldCxcbiAgICB2aWV3OiBTcGF0aWFsVmlld1N0YXRlLFxuICAgIHNlbGVjdGlvbjogU3BhdGlhbFNlbGVjdGlvbk1hc2ssXG4gICAgcmVjdDogRGF0YVJlY3QsXG4gICAgcHhQZXJVbml0OiBudW1iZXIsXG4gICAgY3R4OiBQbGFuQ29udGV4dCxcbiAgKTogUHJvbWlzZTx2b2lkPiB7XG4gICAgY29uc3QgdGlsZWQgPSBkYXRhc2V0LnBvbHlnb25UaWxlcztcbiAgICBjb25zdCB3aG9sZSA9ICF0aWxlZCAmJiBkYXRhc2V0LnBvbHlnb25zICYmIHRoaXMucG9ydC5nZXRQb2x5Z29ucztcbiAgICBpZiAoIWNlbGxzU2hvd24oZGF0YXNldCwgdmlldykgfHwgKCF0aWxlZCAmJiAhd2hvbGUpKSB7XG4gICAgICB0aGlzLmRyb3AoKTtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgY29uc3QgZGlhbWV0ZXIgPSB0eXBpY2FsQ2VsbERpYW1ldGVyKGRhdGFzZXQub2JzZXJ2YXRpb25zLnJhZGl1cyk7XG4gICAgLy8gV2hvbGUtZGF0YXNldCByaW5ncyBoYXZlIG9uZSBsZXZlbCBhbmQgbm8gY29hcnNlciBmYWxsYmFjaywgc28gdGhleSBhcmUgZHJhd24gYXNcbiAgICAvLyBzb29uIGFzIGEgY2VsbCBpcyBiaWcgZW5vdWdoIHRvIHJlYWQgYXMgYSBzaGFwZSByYXRoZXIgdGhhbiBhIGRvdC5cbiAgICBjb25zdCBsZXZlbCA9IHRpbGVkXG4gICAgICA/IHBvbHlnb25MZXZlbEZvcihweFBlclVuaXQsIGRpYW1ldGVyLCB0aWxlZC5sZXZlbHMubGVuZ3RoKVxuICAgICAgOiBweFBlclVuaXQgKiBkaWFtZXRlciA+PSBQT0xZR09OX0xFVkVMX01JTl9DRUxMX1BYWzJdXG4gICAgICAgID8gMFxuICAgICAgICA6IC0xO1xuICAgIGlmIChsZXZlbCA8IDApIHtcbiAgICAgIHRoaXMuZHJvcCgpO1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIC8vIEdyb3VwcyBzd2l0Y2hlZCBvZmYgaW4gdGhlIGxpc3Q6IHRoZWlyIGNlbGxzIGFyZSBsZWZ0IG91dCBvZiB0aGUgZ2VvbWV0cnkuXG4gICAgY29uc3QgaGlkZGVuID0gYXdhaXQgdGhpcy5sb29rdXAuaGlkZGVuQ29kZXMoZGF0YXNldCwgdmlldyk7XG4gICAgaWYgKGN0eC5zdGFsZSgpKSByZXR1cm47XG4gICAgY29uc3QgbGFiZWwgPSB2aWV3LmNlbGxTZXQgPT09ICdib3RoJyA/ICdDZWxscyBhbmQgbnVjbGVpJyA6IHZpZXcuY2VsbFNldCA9PT0gJ251Y2xldXMnID8gJ051Y2xlaScgOiAnQ2VsbHMnO1xuICAgIGNvbnN0IGdlb21ldHJ5ID0gYXdhaXQgY3R4LnRyYWNrKGxhYmVsLCB0aGlzLmNlbGxHZW9tZXRyeShkYXRhc2V0LCB2aWV3LCByZWN0LCBsZXZlbCwgaGlkZGVuLCBjdHgpKTtcbiAgICBpZiAoIWdlb21ldHJ5KSByZXR1cm47XG4gICAgY29uc3QgeyByaW5ncywgbnVjbGVpLCBnZW9tZXRyeUtleSB9ID0gZ2VvbWV0cnk7XG5cbiAgICBjb25zdCBnZW9tZXRyeUNoYW5nZWQgPSBnZW9tZXRyeUtleSAhPT0gdGhpcy5jZWxsR2VvbWV0cnlLZXk7XG4gICAgY29uc3Qgc3R5bGVLZXkgPSBbXG4gICAgICBnZW9tZXRyeUtleSxcbiAgICAgIHZpZXcuY2VsbENvbG9yTW9kZSxcbiAgICAgIHZpZXcuY2VsbENvbG9yR2VuZSxcbiAgICAgIHZpZXcuY2VsbFNpbmdsZUNvbG9yLFxuICAgICAgY2VsbFR5cGVDb2x1bW5Gb3IoZGF0YXNldCwgdmlldyksXG4gICAgICB0aGlzLnNlbGVjdGlvblJldihzZWxlY3Rpb24pLFxuICAgICAgdmlldy5sb2dTY2FsZSxcbiAgICAgIHZpZXcucGVyY2VudGlsZUNsaXAuam9pbigpLFxuICAgICAgSlNPTi5zdHJpbmdpZnkodmlldy5jb250aW51b3VzQ29sb3JtYXApLFxuICAgICAgdmlldy5jZWxsRHJhdyxcbiAgICAgIHZpZXcuY2VsbE9wYWNpdHksXG4gICAgXS5qb2luKCd8Jyk7XG4gICAgY29uc3QgcHJlc2VudCA9IChbJ2NlbGxGaWxsJywgJ2NlbGxPdXRsaW5lJywgJ251Y2xldXNPdXRsaW5lJ10gYXMgY29uc3QpLnNvbWUoKGcpID0+IHRoaXMuZ3JvdXBzLnNob3duKGcpKTtcbiAgICBpZiAoIWdlb21ldHJ5Q2hhbmdlZCAmJiBzdHlsZUtleSA9PT0gdGhpcy5jZWxsU3R5bGVLZXkgJiYgcHJlc2VudCkge1xuICAgICAgdGhpcy5zZXRQb2x5Z29uc1Nob3duKHRydWUpO1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICBjb25zdCBjb2xvcnMgPSBhd2FpdCB0aGlzLmNlbGxDb2xvcnMoZGF0YXNldCwgdmlldywgc2VsZWN0aW9uLCByaW5ncy5vYnNlcnZhdGlvbik7XG4gICAgaWYgKGN0eC5zdGFsZSgpKSByZXR1cm47XG5cbiAgICB0aGlzLmN1cnJlbnRSaW5ncyA9IHJpbmdzO1xuICAgIHRoaXMuY3VycmVudE51Y2xlaSA9IG51Y2xlaTtcbiAgICAvLyBBIGdlb21ldHJ5IG1pc3NpbmcgYSBmYWlsZWQgdGlsZSBpcyBkcmF3biBidXQgbm90IHJlbWVtYmVyZWQsIHNvIHRoZSByZXRyeSByZWZldGNoZXMgaXQuXG4gICAgdGhpcy5jZWxsR2VvbWV0cnlLZXkgPSBjdHguaW5jb21wbGV0ZSA/IG51bGwgOiBnZW9tZXRyeUtleTtcbiAgICB0aGlzLmNlbGxTdHlsZUtleSA9IHN0eWxlS2V5O1xuICAgIHRoaXMuZHJhd0NlbGxzKGRhdGFzZXQsIHZpZXcsIGdlb21ldHJ5LCBjb2xvcnMsIGdlb21ldHJ5Q2hhbmdlZCk7XG4gICAgdGhpcy5zZXRQb2x5Z29uc1Nob3duKHRydWUpO1xuICB9XG5cbiAgLyoqXG4gICAqIFRoZSBjZWxsIGxheWVyczogdGhlIGZpbGwgYW5kIHRoZSBvdXRsaW5lIHRoZSB2aWV3J3MgZHJhdyBtb2RlIGFza3MgZm9yLCBhbmQgd2l0aCBcImJvdGhcIiB0aGVcbiAgICogbnVjbGV1cyBvdXRsaW5lcyBvdmVyIHRoZW0uIEEgZ2VvbWV0cnkgY2hhbmdlIGJ1aWxkcyBuZXcgbGF5ZXJzOyBhIHN0eWxlIGNoYW5nZSByZXN0eWxlcyB0aGVtLlxuICAgKi9cbiAgcHJpdmF0ZSBkcmF3Q2VsbHMoXG4gICAgZGF0YXNldDogU3BhdGlhbERhdGFzZXQsXG4gICAgdmlldzogU3BhdGlhbFZpZXdTdGF0ZSxcbiAgICB7IHJpbmdzLCBudWNsZWkgfTogeyByaW5nczogU3BhdGlhbFBvbHlnb25UaWxlOyBudWNsZWk6IFNwYXRpYWxQb2x5Z29uVGlsZSB8IG51bGwgfSxcbiAgICBjb2xvcnM6IENlbGxDb2xvcnMsXG4gICAgZ2VvbWV0cnlDaGFuZ2VkOiBib29sZWFuLFxuICApOiB2b2lkIHtcbiAgICBjb25zdCByZWYgPSBkYXRhc2V0LmltYWdlUmVmO1xuICAgIGNvbnN0IGNvbW1vbiA9IHsgc2NhbGU6IHJlZj8uc2NhbGUgPz8gWzEsIDFdLCB0cmFuc2xhdGU6IHJlZj8udHJhbnNsYXRlID8/IFswLCAwXSB9IGFzIGNvbnN0O1xuICAgIGNvbnN0IGZpbGwgPSB2aWV3LmNlbGxEcmF3ICE9PSAnb3V0bGluZSc7XG4gICAgY29uc3Qgb3V0bGluZSA9IHZpZXcuY2VsbERyYXcgIT09ICdmaWxsJztcblxuICAgIHRoaXMuZ3JvdXBzLnVwc2VydFNoYXBlcygnY2VsbEZpbGwnLCBmaWxsLCBnZW9tZXRyeUNoYW5nZWQsIHJpbmdzLCB7XG4gICAgICBuYW1lOiAnY2VsbHMnLFxuICAgICAgZHJhdzogJ2ZpbGwnLFxuICAgICAgb3BhY2l0eTogdmlldy5jZWxsT3BhY2l0eSxcbiAgICAgIC4uLmNvbG9ycyxcbiAgICAgIC4uLmNvbW1vbixcbiAgICB9KTtcbiAgICB0aGlzLmdyb3Vwcy51cHNlcnRTaGFwZXMoXG4gICAgICAnY2VsbE91dGxpbmUnLFxuICAgICAgb3V0bGluZSxcbiAgICAgIGdlb21ldHJ5Q2hhbmdlZCxcbiAgICAgIHJpbmdzLFxuICAgICAgZmlsbFxuICAgICAgICA/IC8vIE92ZXIgYSBmaWxsLCBhIGRhcmsgb3V0bGluZSBzZXBhcmF0ZXMgbmVpZ2hib3VycyBvZiB0aGUgc2FtZSB0eXBlLlxuICAgICAgICAgIHsgbmFtZTogJ2NlbGwgb3V0bGluZXMnLCBkcmF3OiAnb3V0bGluZScsIGNvbG9yOiBbMC4wOCwgMC4wOCwgMC4xLCAxXSwgb3BhY2l0eTogMC43LCAuLi5jb21tb24gfVxuICAgICAgICA6IHsgbmFtZTogJ2NlbGwgb3V0bGluZXMnLCBkcmF3OiAnb3V0bGluZScsIG9wYWNpdHk6IDEsIC4uLmNvbG9ycywgLi4uY29tbW9uIH0sXG4gICAgKTtcbiAgICAvLyBcIkJvdGhcIjogbnVjbGVpIG91dGxpbmVkIG92ZXIgdGhlIGNlbGxzLCBsaWdodCBzbyB0aGV5IHJlYWQgYWdhaW5zdCBhbnkgZmlsbC5cbiAgICBpZiAobnVjbGVpKSB7XG4gICAgICB0aGlzLmdyb3Vwcy51cHNlcnRTaGFwZXMoJ251Y2xldXNPdXRsaW5lJywgdHJ1ZSwgZ2VvbWV0cnlDaGFuZ2VkLCBudWNsZWksIHtcbiAgICAgICAgbmFtZTogJ251Y2xldXMgb3V0bGluZXMnLFxuICAgICAgICBkcmF3OiAnb3V0bGluZScsXG4gICAgICAgIGNvbG9yOiBbMC45NSwgMC45NSwgMC45OCwgMV0sXG4gICAgICAgIG9wYWNpdHk6IDAuOCxcbiAgICAgICAgLi4uY29tbW9uLFxuICAgICAgfSk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHRoaXMuZ3JvdXBzLmRyb3AoJ251Y2xldXNPdXRsaW5lJyk7XG4gICAgfVxuICB9XG5cbiAgcHJpdmF0ZSBzZWxlY3Rpb25SZXYoc2VsZWN0aW9uOiBTcGF0aWFsU2VsZWN0aW9uTWFzayk6IG51bWJlciB7XG4gICAgaWYgKHNlbGVjdGlvbiAhPT0gdGhpcy5sYXN0U2VsZWN0aW9uKSB7XG4gICAgICB0aGlzLmxhc3RTZWxlY3Rpb24gPSBzZWxlY3Rpb247XG4gICAgICB0aGlzLnNlbGVjdGlvblJldmlzaW9uKys7XG4gICAgfVxuICAgIHJldHVybiB0aGlzLnNlbGVjdGlvblJldmlzaW9uO1xuICB9XG5cbiAgLyoqXG4gICAqIFRoZSByaW5ncycgY29sb3VycyBieSB0aGVpciBvd25lcnMsIGJ5IHRoZSB2aWV3J3MgY2VsbC1jb2xvdXIgbW9kZSAoWGVuaXVtIEV4cGxvcmVyJ3MgXCJDZWxsXG4gICAqIENvbG9yXCIpOiBvbmUgUkdCQSBwZXIgc2hhcGUgZm9yIGEgZ3JvdXBpbmcsIHZhbHVlcyArIGNvbG9ybWFwIGZvciBhIG1lYXN1cmVtZW50LCBvbmUgY29sb3VyXG4gICAqIGZvciBcInNpbmdsZVwiLiBBIHNlbGVjdGlvbiBtdXRlcyB3aGF0IGl0IGxlYXZlcyBvdXQuXG4gICAqL1xuICBwcml2YXRlIGFzeW5jIGNlbGxDb2xvcnMoXG4gICAgZGF0YXNldDogU3BhdGlhbERhdGFzZXQsXG4gICAgdmlldzogU3BhdGlhbFZpZXdTdGF0ZSxcbiAgICBzZWxlY3Rpb246IFNwYXRpYWxTZWxlY3Rpb25NYXNrLFxuICAgIG93bmVyczogVWludDMyQXJyYXksXG4gICk6IFByb21pc2U8Q2VsbENvbG9ycz4ge1xuICAgIGNvbnN0IG11dGVkID0gc2VsZWN0aW9uLmNvdW50ID4gMCA/IHNlbGVjdGlvbi5tYXNrIDogbnVsbDtcbiAgICBjb25zdCBtb2RlID0gdmlldy5jZWxsQ29sb3JNb2RlO1xuXG4gICAgaWYgKG1vZGUgPT09ICdzaW5nbGUnKSB7XG4gICAgICBjb25zdCBbciwgZywgYl0gPSBwYXJzZUhleCh2aWV3LmNlbGxTaW5nbGVDb2xvcik7XG4gICAgICByZXR1cm4geyBjb2xvcjogW3IgLyAyNTUsIGcgLyAyNTUsIGIgLyAyNTUsIDFdIH07XG4gICAgfVxuXG4gICAgY29uc3QgY29udGludW91cyA9IGFzeW5jIChyYXc6IEZsb2F0MzJBcnJheSwgbG9nOiBib29sZWFuKSA9PiB7XG4gICAgICBjb25zdCB2YWx1ZXMgPSBuZXcgRmxvYXQzMkFycmF5KG93bmVycy5sZW5ndGgpO1xuICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCBvd25lcnMubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgY29uc3QgdiA9IHJhd1tvd25lcnNbaV1dID8/IE5hTjtcbiAgICAgICAgdmFsdWVzW2ldID0gbG9nID8gTWF0aC5sb2cxcChNYXRoLm1heCgwLCB2KSkgOiB2O1xuICAgICAgfVxuICAgICAgY29uc3QgW2NsaXBMbywgY2xpcEhpXSA9IHZpZXcucGVyY2VudGlsZUNsaXA7XG4gICAgICAvLyBLZXllZCBieSB0aGUgU09VUkNFIHZlY3RvciAodGhlIGxvZyBjb3B5IHdvdWxkIGJlIG5ldyBvbiBldmVyeSBjYWxsKSwgYXMgdGhlIDNEIGNsb3VkJ3MuXG4gICAgICBjb25zdCBbbG8sIGhpXSA9IHRoaXMuY29udHJhc3RXaW5kb3dzLmdldChyYXcsIGNsaXBMbywgY2xpcEhpLCBsb2csICgpID0+XG4gICAgICAgIGNvbnRyYXN0V2luZG93KGxvZyA/IHJhdy5tYXAoKHYpID0+IE1hdGgubG9nMXAoTWF0aC5tYXgoMCwgdikpKSA6IHJhdywgY2xpcExvLCBjbGlwSGkpLFxuICAgICAgKTtcbiAgICAgIHJldHVybiB7XG4gICAgICAgIHZhbHVlcyxcbiAgICAgICAgY29sb3JtYXA6IGNvbG9ybWFwRnJvbUx1dCgnc3BhdGlhbC1jb250aW51b3VzJywgdGhpcy5ob3N0LmNvbnRpbnVvdXNMdXQodmlldykpLFxuICAgICAgICBjb250cmFzdExpbWl0czogW2xvLCBoaV0gYXMgW251bWJlciwgbnVtYmVyXSxcbiAgICAgIH07XG4gICAgfTtcbiAgICBpZiAobW9kZSA9PT0gJ2dlbmUnICYmIHZpZXcuY2VsbENvbG9yR2VuZSkge1xuICAgICAgcmV0dXJuIGNvbnRpbnVvdXMoYXdhaXQgdGhpcy5wb3J0LmdldEZlYXR1cmVWZWN0b3Iodmlldy5jZWxsQ29sb3JHZW5lKSwgdHJ1ZSk7XG4gICAgfVxuICAgIGlmIChtb2RlID09PSAndHJhbnNjcmlwdERlbnNpdHknICYmIGRhdGFzZXQuY29sdW1ucy5zb21lKChjKSA9PiBjLm5hbWUgPT09ICd0cmFuc2NyaXB0X2RlbnNpdHknKSkge1xuICAgICAgY29uc3QgY29sdW1uID0gYXdhaXQgdGhpcy5wb3J0LmdldENvbHVtbigndHJhbnNjcmlwdF9kZW5zaXR5Jyk7XG4gICAgICBpZiAoIWlzQ2F0ZWdvcmljYWxDb2x1bW4oY29sdW1uKSkgcmV0dXJuIGNvbnRpbnVvdXMoY29sdW1uLnZhbHVlcywgZmFsc2UpO1xuICAgIH1cblxuICAgIGNvbnN0IG5hbWUgPVxuICAgICAgbW9kZSA9PT0gJ3NlZ21lbnRhdGlvbicgJiYgZGF0YXNldC5jb2x1bW5zLnNvbWUoKGMpID0+IGMubmFtZSA9PT0gJ3NlZ21lbnRhdGlvbl9tZXRob2QnKVxuICAgICAgICA/ICdzZWdtZW50YXRpb25fbWV0aG9kJ1xuICAgICAgICA6IGNlbGxUeXBlQ29sdW1uRm9yKGRhdGFzZXQsIHZpZXcpO1xuICAgIGNvbnN0IGNvZGVzID0gbmFtZSA/IGF3YWl0IHRoaXMubG9va3VwLmNvZGVzKG5hbWUpIDogbnVsbDtcbiAgICBjb25zdCBwYWxldHRlID0gY2F0ZWdvcnlSZ2JhKGNvZGVzPy5tZXRhID8/IG51bGwpO1xuICAgIGNvbnN0IG1pc3NpbmcgPSByZ2JhMDEoTUlTU0lOR19DT0xPUik7XG4gICAgLy8gT25lIFJHQkEgcGVyIHNoYXBlIChuYXBhcmkgU2hhcGVzJyBgZmFjZV9jb2xvcmApOiBhbnkgbnVtYmVyIG9mIGNhdGVnb3JpZXMga2VlcHMgaXRzIG93blxuICAgIC8vIGNvbG91ciwgd2hlcmUgYSBjb2xvcm1hcCBiYW5kIHBlciBjYXRlZ29yeSByYW4gb3V0IG9mIExVVCBlbnRyaWVzIHBhc3QgfjEyNy5cbiAgICBjb25zdCBmYWNlQ29sb3IgPSBuZXcgRmxvYXQzMkFycmF5KG93bmVycy5sZW5ndGggKiA0KTtcbiAgICBmb3IgKGxldCBpID0gMDsgaSA8IG93bmVycy5sZW5ndGg7IGkrKykge1xuICAgICAgY29uc3QgbyA9IG93bmVyc1tpXTtcbiAgICAgIGNvbnN0IGNvZGUgPSAhY29kZXMgfHwgKG11dGVkICYmICFtdXRlZFtvXSkgPyBOT19DQVRFR09SWSA6IGNvZGVzLmNvZGVzW29dO1xuICAgICAgZmFjZUNvbG9yLnNldChwYWxldHRlW2NvZGVdID8/IG1pc3NpbmcsIGkgKiA0KTtcbiAgICB9XG4gICAgcmV0dXJuIHsgZmFjZUNvbG9yIH07XG4gIH1cblxuICAvKipcbiAgICogVGhlIGNlbGwgcmluZ3MgKGFuZCwgZm9yIFwiYm90aFwiLCB0aGUgbnVjbGV1cyByaW5ncykgY292ZXJpbmcgYHJlY3RgIGF0IGBsZXZlbGAsIG1pbnVzXG4gICAqIHRoZSBoaWRkZW4gZ3JvdXBzIOKAlCByZXVzZWQgd2hlbiBub3RoaW5nIHRoYXQgZGVjaWRlcyB0aGVtIGNoYW5nZWQuIE51bGwgd2hlbiB0aGVcbiAgICogdmlldyB3ZW50IHN0YWxlIG9yIHRoZSBkYXRhc2V0IGhhcyBubyBzZXQgdG8gZHJhdy5cbiAgICovXG4gIHByaXZhdGUgYXN5bmMgY2VsbEdlb21ldHJ5KFxuICAgIGRhdGFzZXQ6IFNwYXRpYWxEYXRhc2V0LFxuICAgIHZpZXc6IFNwYXRpYWxWaWV3U3RhdGUsXG4gICAgcmVjdDogRGF0YVJlY3QsXG4gICAgbGV2ZWw6IG51bWJlcixcbiAgICBoaWRkZW46IEhpZGRlbkNvZGVzIHwgbnVsbCxcbiAgICBjdHg6IFBsYW5Db250ZXh0LFxuICApOiBQcm9taXNlPHsgcmluZ3M6IFNwYXRpYWxQb2x5Z29uVGlsZTsgbnVjbGVpOiBTcGF0aWFsUG9seWdvblRpbGUgfCBudWxsOyBnZW9tZXRyeUtleTogc3RyaW5nIH0gfCBudWxsPiB7XG4gICAgY29uc3QgdGlsZWQgPSBkYXRhc2V0LnBvbHlnb25UaWxlcztcbiAgICBjb25zdCBoaWRkZW5LZXkgPSBgJHt2aWV3LmhpZGRlbkdyb3Vwcy5qb2luKCdcXHUwMDAxJyl9fCR7Z2VuZUZpbHRlcktleSh2aWV3KX1gO1xuICAgIGxldCByaW5nczogU3BhdGlhbFBvbHlnb25UaWxlO1xuICAgIGxldCBudWNsZWk6IFNwYXRpYWxQb2x5Z29uVGlsZSB8IG51bGwgPSBudWxsO1xuICAgIGxldCBnZW9tZXRyeUtleTogc3RyaW5nO1xuICAgIGlmICh0aWxlZCkge1xuICAgICAgY29uc3QgZHJhd24gPSBkcmF3bkNlbGxTZXRzKHRpbGVkLCB2aWV3LmNlbGxTZXQpO1xuICAgICAgaWYgKCFkcmF3bikgcmV0dXJuIG51bGw7XG4gICAgICBjb25zdCB7IHNldCwgbnVjbGV1c1NldCB9ID0gZHJhd247XG4gICAgICBjb25zdCBrZXlzID0gdGlsZXNJblJlY3QocmVjdCwgbGV2ZWwsIHRpbGVkLmxldmVscywgdGlsZWQuYm91bmRzLCBNQVhfQ0VMTF9USUxFUyk7XG4gICAgICBnZW9tZXRyeUtleSA9IGAke2RhdGFzZXQuaWR9fCR7c2V0fXwke251Y2xldXNTZXQgPz8gJyd9fCR7aGlkZGVuS2V5fXwke2tleXMubWFwKHRpbGVJZCkuam9pbignLCcpfWA7XG4gICAgICBpZiAoZ2VvbWV0cnlLZXkgPT09IHRoaXMuY2VsbEdlb21ldHJ5S2V5ICYmIHRoaXMuY3VycmVudFJpbmdzKSB7XG4gICAgICAgIHJpbmdzID0gdGhpcy5jdXJyZW50UmluZ3M7XG4gICAgICAgIG51Y2xlaSA9IHRoaXMuY3VycmVudE51Y2xlaTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGNvbnN0IFt0aWxlcywgbnVjbGV1c1RpbGVzXSA9IGF3YWl0IFByb21pc2UuYWxsKFtcbiAgICAgICAgICBjdHguZmV0Y2hBbGwoa2V5cywgKGspID0+IHRoaXMucG9ydC5nZXRQb2x5Z29uVGlsZSEoc2V0LCBrLmxldmVsLCBrLmd4LCBrLmd5KSksXG4gICAgICAgICAgbnVjbGV1c1NldFxuICAgICAgICAgICAgPyBjdHguZmV0Y2hBbGwoa2V5cywgKGspID0+IHRoaXMucG9ydC5nZXRQb2x5Z29uVGlsZSEobnVjbGV1c1NldCwgay5sZXZlbCwgay5neCwgay5neSkpXG4gICAgICAgICAgICA6IFByb21pc2UucmVzb2x2ZShudWxsKSxcbiAgICAgICAgXSk7XG4gICAgICAgIGlmIChjdHguc3RhbGUoKSkgcmV0dXJuIG51bGw7XG4gICAgICAgIHJpbmdzID0gZmlsdGVyUmluZ3MobWVyZ2VQb2x5Z29uVGlsZXModGlsZXMpLCBoaWRkZW4pO1xuICAgICAgICBudWNsZWkgPSBudWNsZXVzVGlsZXMgPyBmaWx0ZXJSaW5ncyhtZXJnZVBvbHlnb25UaWxlcyhudWNsZXVzVGlsZXMpLCBoaWRkZW4pIDogbnVsbDtcbiAgICAgIH1cbiAgICB9IGVsc2Uge1xuICAgICAgZ2VvbWV0cnlLZXkgPSBgJHtkYXRhc2V0LmlkfXx3aG9sZXwke2hpZGRlbktleX1gO1xuICAgICAgaWYgKGdlb21ldHJ5S2V5ID09PSB0aGlzLmNlbGxHZW9tZXRyeUtleSAmJiB0aGlzLmN1cnJlbnRSaW5ncykge1xuICAgICAgICByaW5ncyA9IHRoaXMuY3VycmVudFJpbmdzO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgY29uc3QgcG9seXM6IFNwYXRpYWxQb2x5Z29ucyA9IGF3YWl0IHRoaXMucG9ydC5nZXRQb2x5Z29ucyEoKTtcbiAgICAgICAgaWYgKGN0eC5zdGFsZSgpKSByZXR1cm4gbnVsbDtcbiAgICAgICAgLy8gV2hvbGUtZGF0YXNldCByaW5ncyBhcmUgaW5kZXgtYWxpZ25lZCB3aXRoIHRoZSBvYnNlcnZhdGlvbnMuXG4gICAgICAgIHJpbmdzID0gZmlsdGVyUmluZ3MoXG4gICAgICAgICAgeyAuLi5wb2x5cywgb2JzZXJ2YXRpb246IFVpbnQzMkFycmF5LmZyb20oeyBsZW5ndGg6IHBvbHlzLmNvdW50IH0sIChfdiwgaSkgPT4gaSkgfSxcbiAgICAgICAgICBoaWRkZW4sXG4gICAgICAgICk7XG4gICAgICB9XG4gICAgfVxuICAgIHJldHVybiB7IHJpbmdzLCBudWNsZWksIGdlb21ldHJ5S2V5IH07XG4gIH1cblxuICAvKiogUmVtb3ZlIHRoZSBjZWxsIGxheWVycyBhbmQgZm9yZ2V0IHdoYXQgdGhleSBzaG93ZWQuICovXG4gIGRyb3AoKTogdm9pZCB7XG4gICAgdGhpcy5ncm91cHMuZHJvcCgnY2VsbEZpbGwnKTtcbiAgICB0aGlzLmdyb3Vwcy5kcm9wKCdjZWxsT3V0bGluZScpO1xuICAgIHRoaXMuZ3JvdXBzLmRyb3AoJ251Y2xldXNPdXRsaW5lJyk7XG4gICAgdGhpcy5jdXJyZW50TnVjbGVpID0gbnVsbDtcbiAgICB0aGlzLmNlbGxHZW9tZXRyeUtleSA9IG51bGw7XG4gICAgdGhpcy5jZWxsU3R5bGVLZXkgPSBudWxsO1xuICAgIHRoaXMuY3VycmVudFJpbmdzID0gbnVsbDtcbiAgICB0aGlzLnNldFBvbHlnb25zU2hvd24oZmFsc2UpO1xuICB9XG5cbiAgcHJpdmF0ZSBzZXRQb2x5Z29uc1Nob3duKHNob3duOiBib29sZWFuKTogdm9pZCB7XG4gICAgaWYgKHNob3duID09PSB0aGlzLnBvbHlnb25zU2hvd24pIHJldHVybjtcbiAgICB0aGlzLnBvbHlnb25zU2hvd24gPSBzaG93bjtcbiAgICB0aGlzLmhvc3QucG9seWdvbnNTaG93bkNoYW5nZWQoc2hvd24pO1xuICB9XG59XG5cbi8qKiBBbiA4LWJpdCBSR0IgYXMgYW4gb3BhcXVlIDAuLjEgUkdCQS4gKi9cbmZ1bmN0aW9uIHJnYmEwMShbciwgZywgYl06IHJlYWRvbmx5IFtudW1iZXIsIG51bWJlciwgbnVtYmVyXSk6IFJHQkEge1xuICByZXR1cm4gW3IgLyAyNTUsIGcgLyAyNTUsIGIgLyAyNTUsIDFdO1xufVxuXG4vKiogQSBncm91cGluZydzIGNhdGVnb3J5IGNvbG91cnMsIGFzIDAuLjEgUkdCQSBieSBjYXRlZ29yeSBjb2RlIChvbmUgZGVmYXVsdCB3aXRob3V0IGEgZ3JvdXBpbmcpLiAqL1xuZnVuY3Rpb24gY2F0ZWdvcnlSZ2JhKG1ldGE6IFNwYXRpYWxDb2x1bW5bJ21ldGEnXSB8IG51bGwpOiBSR0JBW10ge1xuICBjb25zdCBoZXggPSBtZXRhICYmIG1ldGEua2luZCA9PT0gJ2NhdGVnb3JpY2FsJyA/IHJlc29sdmVDYXRlZ29yeUNvbG9ycyhtZXRhKSA6IFtERUZBVUxUX0NBVEVHT1JJQ0FMX1BBTEVUVEVbMF1dO1xuICByZXR1cm4gaGV4Lm1hcCgoaCkgPT4gcmdiYTAxKHBhcnNlSGV4KGgpKSk7XG59XG4iXX0=
@@ -4,6 +4,8 @@ import { ALL_GENES } from '../../../contracts/ports/spatial-data.port';
4
4
  import { lutFor } from '../../../spatial/spatial-encoding';
5
5
  import { visibleArea, visibleDataRect } from '../../../spatial/lod';
6
6
  import { densityAutoRange } from '../../../spatial/density-raster';
7
+ import { allGenesHidden } from '../../../spatial/spatial-tile-merge';
8
+ import { hasGeneFilter } from '../../../spatial/spatial-gene-filter';
7
9
  /**
8
10
  * The transcript density image of the 2D spatial view: the visible genes' summed density
9
11
  * raster, one scalar layer in the `density` group, windowed and coloured on the GPU.
@@ -27,8 +29,20 @@ export class DensityLayer {
27
29
  /** Draw the view's density, or drop it; an unchanged (genes, bin, window, colormap) is a no-op. */
28
30
  async plan(dataset, view, ctx) {
29
31
  const hiddenGenes = new Set(view.transcriptHiddenGenes);
30
- const genes = view.transcriptAllGenes ? [ALL_GENES] : view.transcriptGenes.filter((g) => !hiddenGenes.has(g));
31
- if (!dataset.density || !this.port.getDensity || view.transcriptMode !== 'density' || !genes.length) {
32
+ // Every gene's density is one raster: hiding a gene of it hides nothing, hiding all hides it.
33
+ const genes = view.transcriptAllGenes
34
+ ? allGenesHidden(view)
35
+ ? []
36
+ : [ALL_GENES]
37
+ : view.transcriptGenes.filter((g) => !hiddenGenes.has(g));
38
+ // The raster sums every cell's transcripts and carries no cells, so it cannot follow the
39
+ // observation gene filter: drawn, it would show the transcripts of the cells it hides. Not
40
+ // drawn while it is on (the Transcripts panel says so).
41
+ if (!dataset.density ||
42
+ !this.port.getDensity ||
43
+ view.transcriptMode !== 'density' ||
44
+ !genes.length ||
45
+ hasGeneFilter(view)) {
32
46
  this.groups.drop('density');
33
47
  this.stats = null;
34
48
  this.raster = null;
@@ -136,9 +150,11 @@ export class TranscriptEstimator {
136
150
  const b = counts.bounds;
137
151
  const share = Math.min(1, visibleArea(inView, b) / Math.max(1, (b[2] - b[0]) * (b[3] - b[1])));
138
152
  const selected = view.transcriptAllGenes
139
- ? counts.total
153
+ ? allGenesHidden(view)
154
+ ? 0
155
+ : counts.total
140
156
  : genes.reduce((sum, g) => sum + (counts.counts[g] ?? 0), 0);
141
157
  this.changed({ points: Math.round(selected * share), max: view.transcriptBudget });
142
158
  }
143
159
  }
144
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZGVuc2l0eS1sYXllci5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL3NyYy9saWIvaW1wbGVtZW50YXRpb25zL25hcGFyaS1qcy9zcGF0aWFsLXRpbGVzL2RlbnNpdHktbGF5ZXIudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLGVBQWUsRUFBRSxNQUFNLFdBQVcsQ0FBQztBQUU1QyxPQUFPLEVBQUUsV0FBVyxFQUFFLE1BQU0scUJBQXFCLENBQUM7QUFFbEQsT0FBTyxFQUFFLFNBQVMsRUFBd0IsTUFBTSw0Q0FBNEMsQ0FBQztBQUc3RixPQUFPLEVBQUUsTUFBTSxFQUFFLE1BQU0sbUNBQW1DLENBQUM7QUFDM0QsT0FBTyxFQUFFLFdBQVcsRUFBRSxlQUFlLEVBQUUsTUFBTSxzQkFBc0IsQ0FBQztBQUNwRSxPQUFPLEVBQUUsZ0JBQWdCLEVBQUUsTUFBTSxpQ0FBaUMsQ0FBQztBQW1CbkU7Ozs7Ozs7R0FPRztBQUNILE1BQU0sT0FBTyxZQUFZO0lBUXZCLFlBQ21CLElBQXFCLEVBQ3JCLE1BQXFDLEVBQ3JDLE9BQXNDO1FBRnRDLFNBQUksR0FBSixJQUFJLENBQWlCO1FBQ3JCLFdBQU0sR0FBTixNQUFNLENBQStCO1FBQ3JDLFlBQU8sR0FBUCxPQUFPLENBQStCO1FBVnpELHdGQUF3RjtRQUN4RixVQUFLLEdBQXdCLElBQUksQ0FBQztRQUNsQywwRkFBMEY7UUFDbEYsV0FBTSxHQUEwRSxJQUFJLENBQUM7UUFDN0Ysc0ZBQXNGO1FBQzlFLGdCQUFXLEdBQWtCLElBQUksQ0FBQztJQU12QyxDQUFDO0lBRUosbUdBQW1HO0lBQ25HLEtBQUssQ0FBQyxJQUFJLENBQUMsT0FBdUIsRUFBRSxJQUFzQixFQUFFLEdBQWdCO1FBQzFFLE1BQU0sV0FBVyxHQUFHLElBQUksR0FBRyxDQUFDLElBQUksQ0FBQyxxQkFBcUIsQ0FBQyxDQUFDO1FBQ3hELE1BQU0sS0FBSyxHQUFHLElBQUksQ0FBQyxrQkFBa0IsQ0FBQyxDQUFDLENBQUMsQ0FBQyxTQUFTLENBQUMsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLGVBQWUsQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLENBQUMsV0FBVyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO1FBQzlHLElBQUksQ0FBQyxPQUFPLENBQUMsT0FBTyxJQUFJLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxVQUFVLElBQUksSUFBSSxDQUFDLGNBQWMsS0FBSyxTQUFTLElBQUksQ0FBQyxLQUFLLENBQUMsTUFBTSxFQUFFLENBQUM7WUFDcEcsSUFBSSxDQUFDLE1BQU0sQ0FBQyxJQUFJLENBQUMsU0FBUyxDQUFDLENBQUM7WUFDNUIsSUFBSSxDQUFDLEtBQUssR0FBRyxJQUFJLENBQUM7WUFDbEIsSUFBSSxDQUFDLE1BQU0sR0FBRyxJQUFJLENBQUM7WUFDbkIsT0FBTztRQUNULENBQUM7UUFDRCxnR0FBZ0c7UUFDaEcsTUFBTSxHQUFHLEdBQUcsQ0FBQyxPQUFPLENBQUMsRUFBRSxFQUFFLEtBQUssQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLEVBQUUsSUFBSSxDQUFDLFVBQVUsQ0FBQyxDQUFDLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQztRQUNyRSwwRkFBMEY7UUFDMUYsc0NBQXNDO1FBQ3RDLElBQUksR0FBRyxLQUFLLElBQUksQ0FBQyxNQUFNLENBQUMsR0FBRyxDQUFDLFNBQVMsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLE1BQU0sQ0FBQyxLQUFLLENBQUMsU0FBUyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsTUFBTSxFQUFFLENBQUM7WUFDeEYsTUFBTSxNQUFNLEdBQUcsTUFBTSxHQUFHLENBQUMsS0FBSyxDQUFDLG9CQUFvQixFQUFFLElBQUksQ0FBQyxJQUFJLENBQUMsVUFBVSxDQUFDLEtBQUssRUFBRSxJQUFJLENBQUMsVUFBVSxDQUFDLENBQUMsQ0FBQztZQUNuRyxJQUFJLEdBQUcsQ0FBQyxLQUFLLEVBQUU7Z0JBQUUsT0FBTztZQUV4QixvRkFBb0Y7WUFDcEYsTUFBTSxJQUFJLEdBQUcsTUFBTSxDQUFDLElBQUksQ0FBQztZQUN6QixNQUFNLElBQUksR0FBRyxJQUFJLENBQUMsUUFBUSxDQUFDLENBQUMsQ0FBQyxHQUFHLElBQUksQ0FBQyxRQUFRLENBQUMsQ0FBQyxDQUFDLENBQUM7WUFDakQsTUFBTSxPQUFPLEdBQUcsTUFBTSxDQUFDLE1BQU0sQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLENBQUMsR0FBRyxJQUFJLENBQUMsQ0FBQztZQUNuRCxJQUFJLENBQUMsTUFBTSxHQUFHO2dCQUNaLE9BQU87Z0JBQ1AsR0FBRyxFQUFFLE9BQU8sQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDO2dCQUNqRCxJQUFJLEVBQUUsZ0JBQWdCLENBQUMsT0FBTyxDQUFDO2FBQ2hDLENBQUM7WUFDRixNQUFNLEdBQUcsR0FBRyxPQUFPLENBQUMsUUFBUSxDQUFDO1lBQzdCLE1BQU0sRUFBRSxHQUFHLEdBQUcsRUFBRSxLQUFLLEVBQUUsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUM7WUFDaEMsTUFBTSxFQUFFLEdBQUcsR0FBRyxFQUFFLEtBQUssRUFBRSxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQztZQUNoQyxNQUFNLEtBQUssR0FBZSxJQUFJLENBQUMsTUFBTSxDQUFDLE1BQU8sQ0FBQyxRQUFRLENBQ3BELEVBQUUsSUFBSSxFQUFFLE9BQU8sRUFBRSxLQUFLLEVBQUUsSUFBSSxDQUFDLElBQUksRUFBRSxNQUFNLEVBQUUsSUFBSSxDQUFDLElBQUksRUFBRSxRQUFRLEVBQUUsQ0FBQyxFQUFFLEtBQUssRUFBRSxTQUFTLEVBQUUsSUFBSSxFQUFFLE9BQU8sRUFBRSxFQUNwRztnQkFDRSxJQUFJLEVBQUUsYUFBYSxJQUFJLENBQUMsa0JBQWtCLENBQUMsQ0FBQyxDQUFDLFdBQVcsQ0FBQyxDQUFDLENBQUMsS0FBSyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsRUFBRTtnQkFDN0UsS0FBSyxFQUFFLENBQUMsSUFBSSxDQUFDLFFBQVEsQ0FBQyxDQUFDLENBQUMsR0FBRyxFQUFFLEVBQUUsSUFBSSxDQUFDLFFBQVEsQ0FBQyxDQUFDLENBQUMsR0FBRyxFQUFFLENBQUM7Z0JBQ3JELFNBQVMsRUFBRTtvQkFDVCxJQUFJLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQyxHQUFHLEVBQUUsR0FBRyxDQUFDLEdBQUcsRUFBRSxTQUFTLEVBQUUsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUM7b0JBQ2hELElBQUksQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDLEdBQUcsRUFBRSxHQUFHLENBQUMsR0FBRyxFQUFFLFNBQVMsRUFBRSxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQztpQkFDakQ7Z0JBQ0QsOEVBQThFO2dCQUM5RSxnQkFBZ0IsRUFBRSxJQUFJO2dCQUN0QixRQUFRLEVBQUUsYUFBYTtnQkFDdkIsYUFBYSxFQUFFLFNBQVM7YUFDekIsQ0FDRixDQUFDO1lBQ0YsSUFBSSxDQUFDLFdBQVcsR0FBRyxJQUFJLENBQUM7WUFDeEIsSUFBSSxDQUFDLE1BQU0sQ0FBQyxNQUFNLENBQUMsU0FBUyxFQUFFLEdBQUcsQ0FBQyxDQUFDO1lBQ25DLElBQUksQ0FBQyxNQUFNLENBQUMsT0FBTyxDQUFDLFNBQVMsRUFBRSxLQUFLLENBQUMsQ0FBQztRQUN4QyxDQUFDO1FBQ0QsSUFBSSxDQUFDLE9BQU8sQ0FBQyxJQUFJLENBQUMsTUFBTSxDQUFDLEtBQUssQ0FBQyxTQUFTLENBQWUsRUFBRSxJQUFJLENBQUMsQ0FBQztJQUNqRSxDQUFDO0lBRUQseUZBQXlGO0lBQ2pGLE9BQU8sQ0FBQyxLQUFpQixFQUFFLElBQXNCO1FBQ3ZELE1BQU0sTUFBTSxHQUFHLElBQUksQ0FBQyxNQUFPLENBQUM7UUFDNUIsTUFBTSxDQUFDLEVBQUUsRUFBRSxFQUFFLENBQUMsR0FBRyxJQUFJLENBQUMsWUFBWSxJQUFJLE1BQU0sQ0FBQyxJQUFJLENBQUM7UUFDbEQsS0FBSyxDQUFDLGNBQWMsR0FBRyxDQUFDLEVBQUUsRUFBRSxFQUFFLENBQUMsQ0FBQztRQUNoQyxLQUFLLENBQUMsT0FBTyxHQUFHLElBQUksQ0FBQyxjQUFjLENBQUM7UUFDcEMsTUFBTSxXQUFXLEdBQUcsSUFBSSxDQUFDLFNBQVMsQ0FBQyxJQUFJLENBQUMsZUFBZSxJQUFJLElBQUksQ0FBQyxDQUFDO1FBQ2pFLElBQUksV0FBVyxLQUFLLElBQUksQ0FBQyxXQUFXLEVBQUUsQ0FBQztZQUNyQyxJQUFJLENBQUMsV0FBVyxHQUFHLFdBQVcsQ0FBQztZQUMvQixLQUFLLENBQUMsUUFBUSxHQUFHLGVBQWUsQ0FBQyxvQkFBb0IsRUFBRSxNQUFNLENBQUMsSUFBSSxDQUFDLGVBQWUsSUFBSSxXQUFXLENBQUMsQ0FBQyxDQUFDO1FBQ3RHLENBQUM7UUFDRCxJQUFJLENBQUMsTUFBTSxDQUFDLE1BQU8sQ0FBQyxhQUFhLEVBQUUsQ0FBQztRQUNwQyxNQUFNLEtBQUssR0FBRyxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsR0FBRyxFQUFFLE1BQU0sQ0FBQyxHQUFHLEVBQUUsQ0FBQztRQUMxQyxJQUFJLElBQUksQ0FBQyxLQUFLLEVBQUUsRUFBRSxLQUFLLEVBQUUsSUFBSSxJQUFJLENBQUMsS0FBSyxDQUFDLEVBQUUsS0FBSyxFQUFFLElBQUksSUFBSSxDQUFDLEtBQUssQ0FBQyxHQUFHLEtBQUssTUFBTSxDQUFDLEdBQUc7WUFBRSxPQUFPO1FBQzNGLElBQUksQ0FBQyxLQUFLLEdBQUcsS0FBSyxDQUFDO1FBQ25CLElBQUksQ0FBQyxPQUFPLENBQUMsS0FBSyxDQUFDLENBQUM7SUFDdEIsQ0FBQztDQUNGO0FBRUQ7Ozs7R0FJRztBQUNILE1BQU0sT0FBTyxtQkFBbUI7SUFJOUIsWUFDbUIsSUFBcUIsRUFDckIsT0FBc0Q7UUFEdEQsU0FBSSxHQUFKLElBQUksQ0FBaUI7UUFDckIsWUFBTyxHQUFQLE9BQU8sQ0FBK0M7UUFMekUsaUZBQWlGO1FBQ3pFLGdCQUFXLEdBQXFFLElBQUksQ0FBQztJQUsxRixDQUFDO0lBRUo7Ozs7T0FJRztJQUNILEtBQUssQ0FBQyxJQUFJLENBQ1IsT0FBdUIsRUFDdkIsSUFBc0IsRUFDdEIsTUFBYyxFQUNkLENBQVMsRUFDVCxDQUFTLEVBQ1QsR0FBZ0I7UUFFaEIsTUFBTSxLQUFLLEdBQUcsT0FBTyxDQUFDLGVBQWUsQ0FBQztRQUN0QyxJQUFJLENBQUMsS0FBSyxJQUFJLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxtQkFBbUIsSUFBSSxJQUFJLENBQUMsY0FBYyxLQUFLLEtBQUssRUFBRSxDQUFDO1lBQzlFLElBQUksQ0FBQyxPQUFPLENBQUMsSUFBSSxDQUFDLENBQUM7WUFDbkIsT0FBTztRQUNULENBQUM7UUFDRCxNQUFNLFdBQVcsR0FBRyxJQUFJLEdBQUcsQ0FBQyxJQUFJLENBQUMscUJBQXFCLENBQUMsQ0FBQztRQUN4RCxNQUFNLEtBQUssR0FBRyxJQUFJLENBQUMsa0JBQWtCLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLGVBQWUsQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLENBQUMsV0FBVyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO1FBQ3JHLE1BQU0sR0FBRyxHQUFHLEdBQUcsT0FBTyxDQUFDLEVBQUUsSUFBSSxLQUFLLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUM7UUFDL0MsSUFBSSxJQUFJLENBQUMsV0FBVyxFQUFFLEdBQUcsS0FBSyxHQUFHLEVBQUUsQ0FBQztZQUNsQyxJQUFJLENBQUMsV0FBVyxHQUFHLEVBQUUsR0FBRyxFQUFFLE1BQU0sRUFBRSxJQUFJLENBQUMsSUFBSSxDQUFDLG1CQUFtQixDQUFDLEtBQUssQ0FBQyxFQUFFLENBQUM7UUFDM0UsQ0FBQztRQUNELElBQUksTUFBK0IsQ0FBQztRQUNwQyxJQUFJLENBQUM7WUFDSCxNQUFNLEdBQUcsTUFBTSxJQUFJLENBQUMsV0FBVyxDQUFDLE1BQU0sQ0FBQztRQUN6QyxDQUFDO1FBQUMsTUFBTSxDQUFDO1lBQ1AsSUFBSSxDQUFDLFdBQVcsR0FBRyxJQUFJLENBQUM7WUFDeEIsT0FBTztRQUNULENBQUM7UUFDRCxJQUFJLEdBQUcsQ0FBQyxLQUFLLEVBQUU7WUFBRSxPQUFPO1FBQ3hCLE1BQU0sTUFBTSxHQUFHLGVBQWUsQ0FBQyxNQUFNLENBQUMsTUFBTSxDQUFDLE1BQU0sRUFBRSxNQUFNLENBQUMsTUFBTSxDQUFDLElBQUksRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLE9BQU8sQ0FBQyxRQUFRLEVBQUUsQ0FBQyxDQUFDLENBQUM7UUFDcEcsSUFBSSxDQUFDLE1BQU07WUFBRSxPQUFPO1FBQ3BCLE1BQU0sQ0FBQyxHQUFHLE1BQU0sQ0FBQyxNQUFNLENBQUM7UUFDeEIsTUFBTSxLQUFLLEdBQUcsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDLEVBQUUsV0FBVyxDQUFDLE1BQU0sRUFBRSxDQUFDLENBQUMsR0FBRyxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7UUFDL0YsTUFBTSxRQUFRLEdBQUcsSUFBSSxDQUFDLGtCQUFrQjtZQUN0QyxDQUFDLENBQUMsTUFBTSxDQUFDLEtBQUs7WUFDZCxDQUFDLENBQUMsS0FBSyxDQUFDLE1BQU0sQ0FBQyxDQUFDLEdBQUcsRUFBRSxDQUFDLEVBQUUsRUFBRSxDQUFDLEdBQUcsR0FBRyxDQUFDLE1BQU0sQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUM7UUFDL0QsSUFBSSxDQUFDLE9BQU8sQ0FBQyxFQUFFLE1BQU0sRUFBRSxJQUFJLENBQUMsS0FBSyxDQUFDLFFBQVEsR0FBRyxLQUFLLENBQUMsRUFBRSxHQUFHLEVBQUUsSUFBSSxDQUFDLGdCQUFnQixFQUFFLENBQUMsQ0FBQztJQUNyRixDQUFDO0NBQ0YiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBjb2xvcm1hcEZyb21MdXQgfSBmcm9tICduYXBhcmktanMnO1xuaW1wb3J0IHR5cGUgeyBJbWFnZUxheWVyLCBWaWV3ZXIgfSBmcm9tICduYXBhcmktanMnO1xuaW1wb3J0IHsgSU5GRVJOT19MVVQgfSBmcm9tICduYXBhcmktanMvY29sb3JtYXBzJztcblxuaW1wb3J0IHsgQUxMX0dFTkVTLCB0eXBlIFNwYXRpYWxEYXRhUG9ydCB9IGZyb20gJy4uLy4uLy4uL2NvbnRyYWN0cy9wb3J0cy9zcGF0aWFsLWRhdGEucG9ydCc7XG5pbXBvcnQgdHlwZSB7IFNwYXRpYWxWaWV3U3RhdGUgfSBmcm9tICcuLi8uLi8uLi9jb250cmFjdHMvZGlzcGxheS10eXBlcyc7XG5pbXBvcnQgdHlwZSB7IFNwYXRpYWxEYXRhc2V0LCBTcGF0aWFsVHJhbnNjcmlwdENvdW50cyB9IGZyb20gJy4uLy4uLy4uL2NvbnRyYWN0cy9zcGF0aWFsLWRhdGFzZXQuY29udHJhY3QnO1xuaW1wb3J0IHsgbHV0Rm9yIH0gZnJvbSAnLi4vLi4vLi4vc3BhdGlhbC9zcGF0aWFsLWVuY29kaW5nJztcbmltcG9ydCB7IHZpc2libGVBcmVhLCB2aXNpYmxlRGF0YVJlY3QgfSBmcm9tICcuLi8uLi8uLi9zcGF0aWFsL2xvZCc7XG5pbXBvcnQgeyBkZW5zaXR5QXV0b1JhbmdlIH0gZnJvbSAnLi4vLi4vLi4vc3BhdGlhbC9kZW5zaXR5LXJhc3Rlcic7XG5pbXBvcnQgdHlwZSB7IE9yZGVyZWRMYXllckdyb3VwcywgVGlsZUdyb3VwIH0gZnJvbSAnLi9sYXllci1ncm91cHMnO1xuaW1wb3J0IHR5cGUgeyBQbGFuQ29udGV4dCB9IGZyb20gJy4vcGxhbi1jb250ZXh0JztcblxuLyoqIFRoZSBkZW5zaXR5IHdpbmRvdyBpbiB1c2UgYW5kIHRoZSBkZW5zZXN0IGJpbiAodHJhbnNjcmlwdHMgcGVyIHVuaXQgYXJlYSkuICovXG5leHBvcnQgaW50ZXJmYWNlIERlbnNpdHlTdGF0cyB7XG4gIGxvOiBudW1iZXI7XG4gIGhpOiBudW1iZXI7XG4gIG1heDogbnVtYmVyO1xufVxuXG4vKiogWGVuaXVtIEV4cGxvcmVyJ3MgXCJFc3RpbWF0ZWQgVHJhbnNjcmlwdCBQb2ludHNcIi4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgVHJhbnNjcmlwdEVzdGltYXRlIHtcbiAgLyoqIFRyYW5zY3JpcHRzIG9mIHRoZSB2aXNpYmxlIGdlbmVzIGVzdGltYXRlZCB0byBiZSBpbiB2aWV3LiAqL1xuICBwb2ludHM6IG51bWJlcjtcbiAgLyoqIFRoZSBtYXJrZXIgYnVkZ2V0LiAqL1xuICBtYXg6IG51bWJlcjtcbn1cblxuLyoqXG4gKiBUaGUgdHJhbnNjcmlwdCBkZW5zaXR5IGltYWdlIG9mIHRoZSAyRCBzcGF0aWFsIHZpZXc6IHRoZSB2aXNpYmxlIGdlbmVzJyBzdW1tZWQgZGVuc2l0eVxuICogcmFzdGVyLCBvbmUgc2NhbGFyIGxheWVyIGluIHRoZSBgZGVuc2l0eWAgZ3JvdXAsIHdpbmRvd2VkIGFuZCBjb2xvdXJlZCBvbiB0aGUgR1BVLlxuICpcbiAqIEJpbnMgYXQgb3IgYmVsb3cgdGhlIHdpbmRvdydzIGxvdyBlbmQgYXJlIHRyYW5zcGFyZW50IChgdHJhbnNwYXJlbnRCZWxvd2ApLCBzbyBhIHdpbmRvdyxcbiAqIGNvbG9ybWFwIG9yIG9wYWNpdHkgY2hhbmdlIGlzIGEgdW5pZm9ybSBvciBMVVQgdXBkYXRlIG9mIHRoZSBzYW1lIGxheWVyOiBvbmx5IG5ldyBnZW5lcyBvciBhXG4gKiBuZXcgYmluIHNpemUgZmV0Y2ggYW5kIHVwbG9hZCBhIHJhc3Rlci5cbiAqL1xuZXhwb3J0IGNsYXNzIERlbnNpdHlMYXllciB7XG4gIC8qKiBUaGUgZGVuc2l0eSB3aW5kb3cgaW4gdXNlIGFuZCB0aGUgZGVuc2VzdCBiaW4sIGZvciB0aGUgcGFuZWwncyB0aHJlc2hvbGQgY29udHJvbC4gKi9cbiAgc3RhdHM6IERlbnNpdHlTdGF0cyB8IG51bGwgPSBudWxsO1xuICAvKiogVGhlIGRyYXduIHJhc3RlciBpbiB0cmFuc2NyaXB0cyBwZXIgdW5pdCBhcmVhLCBpdHMgZGVuc2VzdCBiaW4gYW5kIGl0cyBhdXRvIHdpbmRvdy4gKi9cbiAgcHJpdmF0ZSByYXN0ZXI6IHsgcGVyQXJlYTogRmxvYXQzMkFycmF5OyBtYXg6IG51bWJlcjsgYXV0bzogW251bWJlciwgbnVtYmVyXSB9IHwgbnVsbCA9IG51bGw7XG4gIC8qKiBUaGUgY29sb3JtYXAgdGhlIGxheWVyIHdhcyBnaXZlbiwgc28gYW4gdW5jaGFuZ2VkIG9uZSBkb2VzIG5vdCByZWJ1aWxkIGl0cyBMVVQuICovXG4gIHByaXZhdGUgY29sb3JtYXBLZXk6IHN0cmluZyB8IG51bGwgPSBudWxsO1xuXG4gIGNvbnN0cnVjdG9yKFxuICAgIHByaXZhdGUgcmVhZG9ubHkgcG9ydDogU3BhdGlhbERhdGFQb3J0LFxuICAgIHByaXZhdGUgcmVhZG9ubHkgZ3JvdXBzOiBPcmRlcmVkTGF5ZXJHcm91cHM8VGlsZUdyb3VwPixcbiAgICBwcml2YXRlIHJlYWRvbmx5IGNoYW5nZWQ6IChzdGF0czogRGVuc2l0eVN0YXRzKSA9PiB2b2lkLFxuICApIHt9XG5cbiAgLyoqIERyYXcgdGhlIHZpZXcncyBkZW5zaXR5LCBvciBkcm9wIGl0OyBhbiB1bmNoYW5nZWQgKGdlbmVzLCBiaW4sIHdpbmRvdywgY29sb3JtYXApIGlzIGEgbm8tb3AuICovXG4gIGFzeW5jIHBsYW4oZGF0YXNldDogU3BhdGlhbERhdGFzZXQsIHZpZXc6IFNwYXRpYWxWaWV3U3RhdGUsIGN0eDogUGxhbkNvbnRleHQpOiBQcm9taXNlPHZvaWQ+IHtcbiAgICBjb25zdCBoaWRkZW5HZW5lcyA9IG5ldyBTZXQodmlldy50cmFuc2NyaXB0SGlkZGVuR2VuZXMpO1xuICAgIGNvbnN0IGdlbmVzID0gdmlldy50cmFuc2NyaXB0QWxsR2VuZXMgPyBbQUxMX0dFTkVTXSA6IHZpZXcudHJhbnNjcmlwdEdlbmVzLmZpbHRlcigoZykgPT4gIWhpZGRlbkdlbmVzLmhhcyhnKSk7XG4gICAgaWYgKCFkYXRhc2V0LmRlbnNpdHkgfHwgIXRoaXMucG9ydC5nZXREZW5zaXR5IHx8IHZpZXcudHJhbnNjcmlwdE1vZGUgIT09ICdkZW5zaXR5JyB8fCAhZ2VuZXMubGVuZ3RoKSB7XG4gICAgICB0aGlzLmdyb3Vwcy5kcm9wKCdkZW5zaXR5Jyk7XG4gICAgICB0aGlzLnN0YXRzID0gbnVsbDtcbiAgICAgIHRoaXMucmFzdGVyID0gbnVsbDtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgLy8gVGhlIHJhc3RlcidzIGtleTogd2hhdCBpdCBpcyBhIHJhc3RlciBPRi4gV2luZG93LCBjb2xvcm1hcCBhbmQgb3BhY2l0eSBhcmUgdGhlIGxheWVyJ3Mgc3R5bGUuXG4gICAgY29uc3Qga2V5ID0gW2RhdGFzZXQuaWQsIGdlbmVzLmpvaW4oJywnKSwgdmlldy5kZW5zaXR5QmluXS5qb2luKCd8Jyk7XG4gICAgLy8gYHNob3duYCwgbm90IGBoYXNgOiBhIHN0aXRjaGVkIHNsaWNlIHJlLXJlbmRlciBjbGVhcnMgdGhlIGxheWVyIGxpc3QsIGFuZCB0aGUga2V5IGFsb25lXG4gICAgLy8gd291bGQgY2FsbCB0aGUgY2xlYXJlZCBsYXllciBkcmF3bi5cbiAgICBpZiAoa2V5ICE9PSB0aGlzLmdyb3Vwcy5rZXkoJ2RlbnNpdHknKSB8fCAhdGhpcy5ncm91cHMuc2hvd24oJ2RlbnNpdHknKSB8fCAhdGhpcy5yYXN0ZXIpIHtcbiAgICAgIGNvbnN0IHJhc3RlciA9IGF3YWl0IGN0eC50cmFjaygnVHJhbnNjcmlwdCBkZW5zaXR5JywgdGhpcy5wb3J0LmdldERlbnNpdHkoZ2VuZXMsIHZpZXcuZGVuc2l0eUJpbikpO1xuICAgICAgaWYgKGN0eC5zdGFsZSgpKSByZXR1cm47XG5cbiAgICAgIC8vIEJpbnMgZHJhd24gYXMgc3F1YXJlcywgYXMgWGVuaXVtIEV4cGxvcmVyIGRvZXM7IHRoZSB3aW5kb3cgaXMgaW4gdHJhbnNjcmlwdHMvwrVtwrIuXG4gICAgICBjb25zdCBtZXRhID0gcmFzdGVyLm1ldGE7XG4gICAgICBjb25zdCBhcmVhID0gbWV0YS5ncmlkU2l6ZVswXSAqIG1ldGEuZ3JpZFNpemVbMV07XG4gICAgICBjb25zdCBwZXJBcmVhID0gcmFzdGVyLnZhbHVlcy5tYXAoKHYpID0+IHYgLyBhcmVhKTtcbiAgICAgIHRoaXMucmFzdGVyID0ge1xuICAgICAgICBwZXJBcmVhLFxuICAgICAgICBtYXg6IHBlckFyZWEucmVkdWNlKChtLCB2KSA9PiAodiA+IG0gPyB2IDogbSksIDApLFxuICAgICAgICBhdXRvOiBkZW5zaXR5QXV0b1JhbmdlKHBlckFyZWEpLFxuICAgICAgfTtcbiAgICAgIGNvbnN0IHJlZiA9IGRhdGFzZXQuaW1hZ2VSZWY7XG4gICAgICBjb25zdCBzeCA9IHJlZj8uc2NhbGU/LlswXSA/PyAxO1xuICAgICAgY29uc3Qgc3kgPSByZWY/LnNjYWxlPy5bMV0gPz8gMTtcbiAgICAgIGNvbnN0IGxheWVyOiBJbWFnZUxheWVyID0gdGhpcy5ncm91cHMudmlld2VyIS5hZGRJbWFnZShcbiAgICAgICAgeyBraW5kOiAndHlwZWQnLCB3aWR0aDogbWV0YS5jb2xzLCBoZWlnaHQ6IG1ldGEucm93cywgY2hhbm5lbHM6IDEsIGR0eXBlOiAnZmxvYXQzMicsIGRhdGE6IHBlckFyZWEgfSxcbiAgICAgICAge1xuICAgICAgICAgIG5hbWU6IGBkZW5zaXR5IMK3ICR7dmlldy50cmFuc2NyaXB0QWxsR2VuZXMgPyAnYWxsIGdlbmVzJyA6IGdlbmVzLmpvaW4oJywgJyl9YCxcbiAgICAgICAgICBzY2FsZTogW21ldGEuZ3JpZFNpemVbMF0gKiBzeCwgbWV0YS5ncmlkU2l6ZVsxXSAqIHN5XSxcbiAgICAgICAgICB0cmFuc2xhdGU6IFtcbiAgICAgICAgICAgIG1ldGEub3JpZ2luWzBdICogc3ggKyAocmVmPy50cmFuc2xhdGU/LlswXSA/PyAwKSxcbiAgICAgICAgICAgIG1ldGEub3JpZ2luWzFdICogc3kgKyAocmVmPy50cmFuc2xhdGU/LlsxXSA/PyAwKSxcbiAgICAgICAgICBdLFxuICAgICAgICAgIC8vIFhlbml1bSBFeHBsb3JlcidzIFwic2NhbGUgdGhyZXNob2xkXCI6IGVtcHR5IHRpc3N1ZSBzaG93cyB0aGUgaW1hZ2UgdW5kZXIgaXQuXG4gICAgICAgICAgdHJhbnNwYXJlbnRCZWxvdzogdHJ1ZSxcbiAgICAgICAgICBibGVuZGluZzogJ3RyYW5zbHVjZW50JyxcbiAgICAgICAgICBpbnRlcnBvbGF0aW9uOiAnbmVhcmVzdCcsXG4gICAgICAgIH0sXG4gICAgICApO1xuICAgICAgdGhpcy5jb2xvcm1hcEtleSA9IG51bGw7XG4gICAgICB0aGlzLmdyb3Vwcy5zZXRLZXkoJ2RlbnNpdHknLCBrZXkpO1xuICAgICAgdGhpcy5ncm91cHMucmVwbGFjZSgnZGVuc2l0eScsIGxheWVyKTtcbiAgICB9XG4gICAgdGhpcy5yZXN0eWxlKHRoaXMuZ3JvdXBzLmxheWVyKCdkZW5zaXR5JykgYXMgSW1hZ2VMYXllciwgdmlldyk7XG4gIH1cblxuICAvKiogV2luZG93LCBjb2xvdXIgYW5kIG9wYWNpdHkgb250byB0aGUgZHJhd24gbGF5ZXI6IHVuaWZvcm1zIGFuZCBhIExVVCwgbm8gcmUtdXBsb2FkLiAqL1xuICBwcml2YXRlIHJlc3R5bGUobGF5ZXI6IEltYWdlTGF5ZXIsIHZpZXc6IFNwYXRpYWxWaWV3U3RhdGUpOiB2b2lkIHtcbiAgICBjb25zdCByYXN0ZXIgPSB0aGlzLnJhc3RlciE7XG4gICAgY29uc3QgW2xvLCBoaV0gPSB2aWV3LmRlbnNpdHlSYW5nZSA/PyByYXN0ZXIuYXV0bztcbiAgICBsYXllci5jb250cmFzdExpbWl0cyA9IFtsbywgaGldO1xuICAgIGxheWVyLm9wYWNpdHkgPSB2aWV3LmRlbnNpdHlPcGFjaXR5O1xuICAgIGNvbnN0IGNvbG9ybWFwS2V5ID0gSlNPTi5zdHJpbmdpZnkodmlldy5kZW5zaXR5Q29sb3JtYXAgPz8gbnVsbCk7XG4gICAgaWYgKGNvbG9ybWFwS2V5ICE9PSB0aGlzLmNvbG9ybWFwS2V5KSB7XG4gICAgICB0aGlzLmNvbG9ybWFwS2V5ID0gY29sb3JtYXBLZXk7XG4gICAgICBsYXllci5jb2xvcm1hcCA9IGNvbG9ybWFwRnJvbUx1dCgndHJhbnNjcmlwdC1kZW5zaXR5JywgbHV0Rm9yKHZpZXcuZGVuc2l0eUNvbG9ybWFwID8/IElORkVSTk9fTFVUKSk7XG4gICAgfVxuICAgIHRoaXMuZ3JvdXBzLnZpZXdlciEucmVxdWVzdFJlbmRlcigpO1xuICAgIGNvbnN0IHN0YXRzID0geyBsbywgaGksIG1heDogcmFzdGVyLm1heCB9O1xuICAgIGlmICh0aGlzLnN0YXRzPy5sbyA9PT0gbG8gJiYgdGhpcy5zdGF0cy5oaSA9PT0gaGkgJiYgdGhpcy5zdGF0cy5tYXggPT09IHJhc3Rlci5tYXgpIHJldHVybjtcbiAgICB0aGlzLnN0YXRzID0gc3RhdHM7XG4gICAgdGhpcy5jaGFuZ2VkKHN0YXRzKTtcbiAgfVxufVxuXG4vKipcbiAqIFRyYW5zY3JpcHRzIGluIHZpZXcgZm9yIHRoZSB2aXNpYmxlIGdlbmVzLCBhZ2FpbnN0IHRoZSBtYXJrZXIgYnVkZ2V0IOKAlCBpdCB0ZWxscyB0aGUgdXNlclxuICogd2hldGhlciB0aGUgYnVkZ2V0IHdpbGwgZm9yY2UgZ3JvdXBpbmcuIENhY2hlcyB0aGUgcGVyLWdlbmUgZGF0YXNldCB0b3RhbHMgZm9yIHRoZSBsYXRlc3RcbiAqIGdlbmUgc2V0LlxuICovXG5leHBvcnQgY2xhc3MgVHJhbnNjcmlwdEVzdGltYXRvciB7XG4gIC8qKiBQZXItZ2VuZSBkYXRhc2V0IHRvdGFscyBmb3IgdGhlIGluLXZpZXcgZXN0aW1hdGUsIGZvciB0aGUgbGF0ZXN0IGdlbmUgc2V0LiAqL1xuICBwcml2YXRlIGNvdW50c0NhY2hlOiB7IGtleTogc3RyaW5nOyBjb3VudHM6IFByb21pc2U8U3BhdGlhbFRyYW5zY3JpcHRDb3VudHM+IH0gfCBudWxsID0gbnVsbDtcblxuICBjb25zdHJ1Y3RvcihcbiAgICBwcml2YXRlIHJlYWRvbmx5IHBvcnQ6IFNwYXRpYWxEYXRhUG9ydCxcbiAgICBwcml2YXRlIHJlYWRvbmx5IGNoYW5nZWQ6IChlc3RpbWF0ZTogVHJhbnNjcmlwdEVzdGltYXRlIHwgbnVsbCkgPT4gdm9pZCxcbiAgKSB7fVxuXG4gIC8qKlxuICAgKiBUcmFuc2NyaXB0cyBpbiB2aWV3IGZvciB0aGUgdmlzaWJsZSBnZW5lczogZWFjaCBnZW5lJ3MgZGF0YXNldCB0b3RhbCB0aW1lcyB0aGUgc2hhcmVcbiAgICogb2YgdGhlIHRpc3N1ZSBvbiBzY3JlZW4uIEFuIGVzdGltYXRlIOKAlCBleHByZXNzaW9uIGlzIG5vdCB1bmlmb3JtIOKAlCB3aGljaCBpcyBhbHNvIHdoYXRcbiAgICogWGVuaXVtIEV4cGxvcmVyIHNob3dzOyBpdCB0ZWxscyB0aGUgdXNlciB3aGV0aGVyIHRoZSBidWRnZXQgd2lsbCBmb3JjZSBncm91cGluZy5cbiAgICovXG4gIGFzeW5jIHBsYW4oXG4gICAgZGF0YXNldDogU3BhdGlhbERhdGFzZXQsXG4gICAgdmlldzogU3BhdGlhbFZpZXdTdGF0ZSxcbiAgICB2aWV3ZXI6IFZpZXdlcixcbiAgICB3OiBudW1iZXIsXG4gICAgaDogbnVtYmVyLFxuICAgIGN0eDogUGxhbkNvbnRleHQsXG4gICk6IFByb21pc2U8dm9pZD4ge1xuICAgIGNvbnN0IHRpbGVzID0gZGF0YXNldC50cmFuc2NyaXB0VGlsZXM7XG4gICAgaWYgKCF0aWxlcyB8fCAhdGhpcy5wb3J0LmdldFRyYW5zY3JpcHRDb3VudHMgfHwgdmlldy50cmFuc2NyaXB0TW9kZSA9PT0gJ29mZicpIHtcbiAgICAgIHRoaXMuY2hhbmdlZChudWxsKTtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgY29uc3QgaGlkZGVuR2VuZXMgPSBuZXcgU2V0KHZpZXcudHJhbnNjcmlwdEhpZGRlbkdlbmVzKTtcbiAgICBjb25zdCBnZW5lcyA9IHZpZXcudHJhbnNjcmlwdEFsbEdlbmVzID8gW10gOiB2aWV3LnRyYW5zY3JpcHRHZW5lcy5maWx0ZXIoKGcpID0+ICFoaWRkZW5HZW5lcy5oYXMoZykpO1xuICAgIGNvbnN0IGtleSA9IGAke2RhdGFzZXQuaWR9fCR7Z2VuZXMuam9pbignLCcpfWA7XG4gICAgaWYgKHRoaXMuY291bnRzQ2FjaGU/LmtleSAhPT0ga2V5KSB7XG4gICAgICB0aGlzLmNvdW50c0NhY2hlID0geyBrZXksIGNvdW50czogdGhpcy5wb3J0LmdldFRyYW5zY3JpcHRDb3VudHMoZ2VuZXMpIH07XG4gICAgfVxuICAgIGxldCBjb3VudHM6IFNwYXRpYWxUcmFuc2NyaXB0Q291bnRzO1xuICAgIHRyeSB7XG4gICAgICBjb3VudHMgPSBhd2FpdCB0aGlzLmNvdW50c0NhY2hlLmNvdW50cztcbiAgICB9IGNhdGNoIHtcbiAgICAgIHRoaXMuY291bnRzQ2FjaGUgPSBudWxsO1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICBpZiAoY3R4LnN0YWxlKCkpIHJldHVybjtcbiAgICBjb25zdCBpblZpZXcgPSB2aXNpYmxlRGF0YVJlY3Qodmlld2VyLmNhbWVyYS5jZW50ZXIsIHZpZXdlci5jYW1lcmEuem9vbSwgdywgaCwgZGF0YXNldC5pbWFnZVJlZiwgMCk7XG4gICAgaWYgKCFpblZpZXcpIHJldHVybjtcbiAgICBjb25zdCBiID0gY291bnRzLmJvdW5kcztcbiAgICBjb25zdCBzaGFyZSA9IE1hdGgubWluKDEsIHZpc2libGVBcmVhKGluVmlldywgYikgLyBNYXRoLm1heCgxLCAoYlsyXSAtIGJbMF0pICogKGJbM10gLSBiWzFdKSkpO1xuICAgIGNvbnN0IHNlbGVjdGVkID0gdmlldy50cmFuc2NyaXB0QWxsR2VuZXNcbiAgICAgID8gY291bnRzLnRvdGFsXG4gICAgICA6IGdlbmVzLnJlZHVjZSgoc3VtLCBnKSA9PiBzdW0gKyAoY291bnRzLmNvdW50c1tnXSA/PyAwKSwgMCk7XG4gICAgdGhpcy5jaGFuZ2VkKHsgcG9pbnRzOiBNYXRoLnJvdW5kKHNlbGVjdGVkICogc2hhcmUpLCBtYXg6IHZpZXcudHJhbnNjcmlwdEJ1ZGdldCB9KTtcbiAgfVxufVxuIl19
160
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZGVuc2l0eS1sYXllci5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL3NyYy9saWIvaW1wbGVtZW50YXRpb25zL25hcGFyaS1qcy9zcGF0aWFsLXRpbGVzL2RlbnNpdHktbGF5ZXIudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLGVBQWUsRUFBRSxNQUFNLFdBQVcsQ0FBQztBQUU1QyxPQUFPLEVBQUUsV0FBVyxFQUFFLE1BQU0scUJBQXFCLENBQUM7QUFFbEQsT0FBTyxFQUFFLFNBQVMsRUFBd0IsTUFBTSw0Q0FBNEMsQ0FBQztBQUc3RixPQUFPLEVBQUUsTUFBTSxFQUFFLE1BQU0sbUNBQW1DLENBQUM7QUFDM0QsT0FBTyxFQUFFLFdBQVcsRUFBRSxlQUFlLEVBQUUsTUFBTSxzQkFBc0IsQ0FBQztBQUNwRSxPQUFPLEVBQUUsZ0JBQWdCLEVBQUUsTUFBTSxpQ0FBaUMsQ0FBQztBQUNuRSxPQUFPLEVBQUUsY0FBYyxFQUFFLE1BQU0scUNBQXFDLENBQUM7QUFHckUsT0FBTyxFQUFFLGFBQWEsRUFBRSxNQUFNLHNDQUFzQyxDQUFDO0FBaUJyRTs7Ozs7OztHQU9HO0FBQ0gsTUFBTSxPQUFPLFlBQVk7SUFRdkIsWUFDbUIsSUFBcUIsRUFDckIsTUFBcUMsRUFDckMsT0FBc0M7UUFGdEMsU0FBSSxHQUFKLElBQUksQ0FBaUI7UUFDckIsV0FBTSxHQUFOLE1BQU0sQ0FBK0I7UUFDckMsWUFBTyxHQUFQLE9BQU8sQ0FBK0I7UUFWekQsd0ZBQXdGO1FBQ3hGLFVBQUssR0FBd0IsSUFBSSxDQUFDO1FBQ2xDLDBGQUEwRjtRQUNsRixXQUFNLEdBQTBFLElBQUksQ0FBQztRQUM3RixzRkFBc0Y7UUFDOUUsZ0JBQVcsR0FBa0IsSUFBSSxDQUFDO0lBTXZDLENBQUM7SUFFSixtR0FBbUc7SUFDbkcsS0FBSyxDQUFDLElBQUksQ0FBQyxPQUF1QixFQUFFLElBQXNCLEVBQUUsR0FBZ0I7UUFDMUUsTUFBTSxX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LGtCQUFrQjtZQUN0QyxDQUFDLENBQUMsY0FBYyxDQUFDLElBQUksQ0FBQztnQkFDcEIsQ0FBQyxDQUFDLENBQUM7Z0JBQ0gsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxLQUFLO1lBQ2hCLENBQUMsQ0FBQyxLQUFLLENBQUMsTUFBTSxDQUFDLENBQUMsR0FBRyxFQUFFLENBQUMsRUFBRSxFQUFFLENBQUMsR0FBRyxHQUFHLENBQUMsTUFBTSxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQztRQUMvRCxJQUFJLENBQUMsT0FBTyxDQUFDLEVBQUUsTUFBTSxFQUFFLElBQUksQ0FBQyxLQUFLLENBQUMsUUFBUSxHQUFHLEtBQUssQ0FBQyxFQUFFLEdBQUcsRUFBRSxJQUFJLENBQUMsZ0JBQWdCLEVBQUUsQ0FBQyxDQUFDO0lBQ3JGLENBQUM7Q0FDRiIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IGNvbG9ybWFwRnJvbUx1dCB9IGZyb20gJ25hcGFyaS1qcyc7XG5pbXBvcnQgdHlwZSB7IEltYWdlTGF5ZXIsIFZpZXdlciB9IGZyb20gJ25hcGFyaS1qcyc7XG5pbXBvcnQgeyBJTkZFUk5PX0xVVCB9IGZyb20gJ25hcGFyaS1qcy9jb2xvcm1hcHMnO1xuXG5pbXBvcnQgeyBBTExfR0VORVMsIHR5cGUgU3BhdGlhbERhdGFQb3J0IH0gZnJvbSAnLi4vLi4vLi4vY29udHJhY3RzL3BvcnRzL3NwYXRpYWwtZGF0YS5wb3J0JztcbmltcG9ydCB0eXBlIHsgU3BhdGlhbFZpZXdTdGF0ZSB9IGZyb20gJy4uLy4uLy4uL2NvbnRyYWN0cy9kaXNwbGF5LXR5cGVzJztcbmltcG9ydCB0eXBlIHsgU3BhdGlhbERhdGFzZXQsIFNwYXRpYWxUcmFuc2NyaXB0Q291bnRzIH0gZnJvbSAnLi4vLi4vLi4vY29udHJhY3RzL3NwYXRpYWwtZGF0YXNldC5jb250cmFjdCc7XG5pbXBvcnQgeyBsdXRGb3IgfSBmcm9tICcuLi8uLi8uLi9zcGF0aWFsL3NwYXRpYWwtZW5jb2RpbmcnO1xuaW1wb3J0IHsgdmlzaWJsZUFyZWEsIHZpc2libGVEYXRhUmVjdCB9IGZyb20gJy4uLy4uLy4uL3NwYXRpYWwvbG9kJztcbmltcG9ydCB7IGRlbnNpdHlBdXRvUmFuZ2UgfSBmcm9tICcuLi8uLi8uLi9zcGF0aWFsL2RlbnNpdHktcmFzdGVyJztcbmltcG9ydCB7IGFsbEdlbmVzSGlkZGVuIH0gZnJvbSAnLi4vLi4vLi4vc3BhdGlhbC9zcGF0aWFsLXRpbGUtbWVyZ2UnO1xuaW1wb3J0IHR5cGUgeyBPcmRlcmVkTGF5ZXJHcm91cHMsIFRpbGVHcm91cCB9IGZyb20gJy4vbGF5ZXItZ3JvdXBzJztcbmltcG9ydCB0eXBlIHsgUGxhbkNvbnRleHQgfSBmcm9tICcuL3BsYW4tY29udGV4dCc7XG5pbXBvcnQgeyBoYXNHZW5lRmlsdGVyIH0gZnJvbSAnLi4vLi4vLi4vc3BhdGlhbC9zcGF0aWFsLWdlbmUtZmlsdGVyJztcblxuLyoqIFRoZSBkZW5zaXR5IHdpbmRvdyBpbiB1c2UgYW5kIHRoZSBkZW5zZXN0IGJpbiAodHJhbnNjcmlwdHMgcGVyIHVuaXQgYXJlYSkuICovXG5leHBvcnQgaW50ZXJmYWNlIERlbnNpdHlTdGF0cyB7XG4gIGxvOiBudW1iZXI7XG4gIGhpOiBudW1iZXI7XG4gIG1heDogbnVtYmVyO1xufVxuXG4vKiogWGVuaXVtIEV4cGxvcmVyJ3MgXCJFc3RpbWF0ZWQgVHJhbnNjcmlwdCBQb2ludHNcIi4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgVHJhbnNjcmlwdEVzdGltYXRlIHtcbiAgLyoqIFRyYW5zY3JpcHRzIG9mIHRoZSB2aXNpYmxlIGdlbmVzIGVzdGltYXRlZCB0byBiZSBpbiB2aWV3LiAqL1xuICBwb2ludHM6IG51bWJlcjtcbiAgLyoqIFRoZSBtYXJrZXIgYnVkZ2V0LiAqL1xuICBtYXg6IG51bWJlcjtcbn1cblxuLyoqXG4gKiBUaGUgdHJhbnNjcmlwdCBkZW5zaXR5IGltYWdlIG9mIHRoZSAyRCBzcGF0aWFsIHZpZXc6IHRoZSB2aXNpYmxlIGdlbmVzJyBzdW1tZWQgZGVuc2l0eVxuICogcmFzdGVyLCBvbmUgc2NhbGFyIGxheWVyIGluIHRoZSBgZGVuc2l0eWAgZ3JvdXAsIHdpbmRvd2VkIGFuZCBjb2xvdXJlZCBvbiB0aGUgR1BVLlxuICpcbiAqIEJpbnMgYXQgb3IgYmVsb3cgdGhlIHdpbmRvdydzIGxvdyBlbmQgYXJlIHRyYW5zcGFyZW50IChgdHJhbnNwYXJlbnRCZWxvd2ApLCBzbyBhIHdpbmRvdyxcbiAqIGNvbG9ybWFwIG9yIG9wYWNpdHkgY2hhbmdlIGlzIGEgdW5pZm9ybSBvciBMVVQgdXBkYXRlIG9mIHRoZSBzYW1lIGxheWVyOiBvbmx5IG5ldyBnZW5lcyBvciBhXG4gKiBuZXcgYmluIHNpemUgZmV0Y2ggYW5kIHVwbG9hZCBhIHJhc3Rlci5cbiAqL1xuZXhwb3J0IGNsYXNzIERlbnNpdHlMYXllciB7XG4gIC8qKiBUaGUgZGVuc2l0eSB3aW5kb3cgaW4gdXNlIGFuZCB0aGUgZGVuc2VzdCBiaW4sIGZvciB0aGUgcGFuZWwncyB0aHJlc2hvbGQgY29udHJvbC4gKi9cbiAgc3RhdHM6IERlbnNpdHlTdGF0cyB8IG51bGwgPSBudWxsO1xuICAvKiogVGhlIGRyYXduIHJhc3RlciBpbiB0cmFuc2NyaXB0cyBwZXIgdW5pdCBhcmVhLCBpdHMgZGVuc2VzdCBiaW4gYW5kIGl0cyBhdXRvIHdpbmRvdy4gKi9cbiAgcHJpdmF0ZSByYXN0ZXI6IHsgcGVyQXJlYTogRmxvYXQzMkFycmF5OyBtYXg6IG51bWJlcjsgYXV0bzogW251bWJlciwgbnVtYmVyXSB9IHwgbnVsbCA9IG51bGw7XG4gIC8qKiBUaGUgY29sb3JtYXAgdGhlIGxheWVyIHdhcyBnaXZlbiwgc28gYW4gdW5jaGFuZ2VkIG9uZSBkb2VzIG5vdCByZWJ1aWxkIGl0cyBMVVQuICovXG4gIHByaXZhdGUgY29sb3JtYXBLZXk6IHN0cmluZyB8IG51bGwgPSBudWxsO1xuXG4gIGNvbnN0cnVjdG9yKFxuICAgIHByaXZhdGUgcmVhZG9ubHkgcG9ydDogU3BhdGlhbERhdGFQb3J0LFxuICAgIHByaXZhdGUgcmVhZG9ubHkgZ3JvdXBzOiBPcmRlcmVkTGF5ZXJHcm91cHM8VGlsZUdyb3VwPixcbiAgICBwcml2YXRlIHJlYWRvbmx5IGNoYW5nZWQ6IChzdGF0czogRGVuc2l0eVN0YXRzKSA9PiB2b2lkLFxuICApIHt9XG5cbiAgLyoqIERyYXcgdGhlIHZpZXcncyBkZW5zaXR5LCBvciBkcm9wIGl0OyBhbiB1bmNoYW5nZWQgKGdlbmVzLCBiaW4sIHdpbmRvdywgY29sb3JtYXApIGlzIGEgbm8tb3AuICovXG4gIGFzeW5jIHBsYW4oZGF0YXNldDogU3BhdGlhbERhdGFzZXQsIHZpZXc6IFNwYXRpYWxWaWV3U3RhdGUsIGN0eDogUGxhbkNvbnRleHQpOiBQcm9taXNlPHZvaWQ+IHtcbiAgICBjb25zdCBoaWRkZW5HZW5lcyA9IG5ldyBTZXQodmlldy50cmFuc2NyaXB0SGlkZGVuR2VuZXMpO1xuICAgIC8vIEV2ZXJ5IGdlbmUncyBkZW5zaXR5IGlzIG9uZSByYXN0ZXI6IGhpZGluZyBhIGdlbmUgb2YgaXQgaGlkZXMgbm90aGluZywgaGlkaW5nIGFsbCBoaWRlcyBpdC5cbiAgICBjb25zdCBnZW5lcyA9IHZpZXcudHJhbnNjcmlwdEFsbEdlbmVzXG4gICAgICA/IGFsbEdlbmVzSGlkZGVuKHZpZXcpXG4gICAgICAgID8gW11cbiAgICAgICAgOiBbQUxMX0dFTkVTXVxuICAgICAgOiB2aWV3LnRyYW5zY3JpcHRHZW5lcy5maWx0ZXIoKGcpID0+ICFoaWRkZW5HZW5lcy5oYXMoZykpO1xuICAgIC8vIFRoZSByYXN0ZXIgc3VtcyBldmVyeSBjZWxsJ3MgdHJhbnNjcmlwdHMgYW5kIGNhcnJpZXMgbm8gY2VsbHMsIHNvIGl0IGNhbm5vdCBmb2xsb3cgdGhlXG4gICAgLy8gb2JzZXJ2YXRpb24gZ2VuZSBmaWx0ZXI6IGRyYXduLCBpdCB3b3VsZCBzaG93IHRoZSB0cmFuc2NyaXB0cyBvZiB0aGUgY2VsbHMgaXQgaGlkZXMuIE5vdFxuICAgIC8vIGRyYXduIHdoaWxlIGl0IGlzIG9uICh0aGUgVHJhbnNjcmlwdHMgcGFuZWwgc2F5cyBzbykuXG4gICAgaWYgKFxuICAgICAgIWRhdGFzZXQuZGVuc2l0eSB8fFxuICAgICAgIXRoaXMucG9ydC5nZXREZW5zaXR5IHx8XG4gICAgICB2aWV3LnRyYW5zY3JpcHRNb2RlICE9PSAnZGVuc2l0eScgfHxcbiAgICAgICFnZW5lcy5sZW5ndGggfHxcbiAgICAgIGhhc0dlbmVGaWx0ZXIodmlldylcbiAgICApIHtcbiAgICAgIHRoaXMuZ3JvdXBzLmRyb3AoJ2RlbnNpdHknKTtcbiAgICAgIHRoaXMuc3RhdHMgPSBudWxsO1xuICAgICAgdGhpcy5yYXN0ZXIgPSBudWxsO1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICAvLyBUaGUgcmFzdGVyJ3Mga2V5OiB3aGF0IGl0IGlzIGEgcmFzdGVyIE9GLiBXaW5kb3csIGNvbG9ybWFwIGFuZCBvcGFjaXR5IGFyZSB0aGUgbGF5ZXIncyBzdHlsZS5cbiAgICBjb25zdCBrZXkgPSBbZGF0YXNldC5pZCwgZ2VuZXMuam9pbignLCcpLCB2aWV3LmRlbnNpdHlCaW5dLmpvaW4oJ3wnKTtcbiAgICAvLyBgc2hvd25gLCBub3QgYGhhc2A6IGEgc3RpdGNoZWQgc2xpY2UgcmUtcmVuZGVyIGNsZWFycyB0aGUgbGF5ZXIgbGlzdCwgYW5kIHRoZSBrZXkgYWxvbmVcbiAgICAvLyB3b3VsZCBjYWxsIHRoZSBjbGVhcmVkIGxheWVyIGRyYXduLlxuICAgIGlmIChrZXkgIT09IHRoaXMuZ3JvdXBzLmtleSgnZGVuc2l0eScpIHx8ICF0aGlzLmdyb3Vwcy5zaG93bignZGVuc2l0eScpIHx8ICF0aGlzLnJhc3Rlcikge1xuICAgICAgY29uc3QgcmFzdGVyID0gYXdhaXQgY3R4LnRyYWNrKCdUcmFuc2NyaXB0IGRlbnNpdHknLCB0aGlzLnBvcnQuZ2V0RGVuc2l0eShnZW5lcywgdmlldy5kZW5zaXR5QmluKSk7XG4gICAgICBpZiAoY3R4LnN0YWxlKCkpIHJldHVybjtcblxuICAgICAgLy8gQmlucyBkcmF3biBhcyBzcXVhcmVzLCBhcyBYZW5pdW0gRXhwbG9yZXIgZG9lczsgdGhlIHdpbmRvdyBpcyBpbiB0cmFuc2NyaXB0cy/CtW3Csi5cbiAgICAgIGNvbnN0IG1ldGEgPSByYXN0ZXIubWV0YTtcbiAgICAgIGNvbnN0IGFyZWEgPSBtZXRhLmdyaWRTaXplWzBdICogbWV0YS5ncmlkU2l6ZVsxXTtcbiAgICAgIGNvbnN0IHBlckFyZWEgPSByYXN0ZXIudmFsdWVzLm1hcCgodikgPT4gdiAvIGFyZWEpO1xuICAgICAgdGhpcy5yYXN0ZXIgPSB7XG4gICAgICAgIHBlckFyZWEsXG4gICAgICAgIG1heDogcGVyQXJlYS5yZWR1Y2UoKG0sIHYpID0+ICh2ID4gbSA/IHYgOiBtKSwgMCksXG4gICAgICAgIGF1dG86IGRlbnNpdHlBdXRvUmFuZ2UocGVyQXJlYSksXG4gICAgICB9O1xuICAgICAgY29uc3QgcmVmID0gZGF0YXNldC5pbWFnZVJlZjtcbiAgICAgIGNvbnN0IHN4ID0gcmVmPy5zY2FsZT8uWzBdID8/IDE7XG4gICAgICBjb25zdCBzeSA9IHJlZj8uc2NhbGU/LlsxXSA/PyAxO1xuICAgICAgY29uc3QgbGF5ZXI6IEltYWdlTGF5ZXIgPSB0aGlzLmdyb3Vwcy52aWV3ZXIhLmFkZEltYWdlKFxuICAgICAgICB7IGtpbmQ6ICd0eXBlZCcsIHdpZHRoOiBtZXRhLmNvbHMsIGhlaWdodDogbWV0YS5yb3dzLCBjaGFubmVsczogMSwgZHR5cGU6ICdmbG9hdDMyJywgZGF0YTogcGVyQXJlYSB9LFxuICAgICAgICB7XG4gICAgICAgICAgbmFtZTogYGRlbnNpdHkgwrcgJHt2aWV3LnRyYW5zY3JpcHRBbGxHZW5lcyA/ICdhbGwgZ2VuZXMnIDogZ2VuZXMuam9pbignLCAnKX1gLFxuICAgICAgICAgIHNjYWxlOiBbbWV0YS5ncmlkU2l6ZVswXSAqIHN4LCBtZXRhLmdyaWRTaXplWzFdICogc3ldLFxuICAgICAgICAgIHRyYW5zbGF0ZTogW1xuICAgICAgICAgICAgbWV0YS5vcmlnaW5bMF0gKiBzeCArIChyZWY/LnRyYW5zbGF0ZT8uWzBdID8/IDApLFxuICAgICAgICAgICAgbWV0YS5vcmlnaW5bMV0gKiBzeSArIChyZWY/LnRyYW5zbGF0ZT8uWzFdID8/IDApLFxuICAgICAgICAgIF0sXG4gICAgICAgICAgLy8gWGVuaXVtIEV4cGxvcmVyJ3MgXCJzY2FsZSB0aHJlc2hvbGRcIjogZW1wdHkgdGlzc3VlIHNob3dzIHRoZSBpbWFnZSB1bmRlciBpdC5cbiAgICAgICAgICB0cmFuc3BhcmVudEJlbG93OiB0cnVlLFxuICAgICAgICAgIGJsZW5kaW5nOiAndHJhbnNsdWNlbnQnLFxuICAgICAgICAgIGludGVycG9sYXRpb246ICduZWFyZXN0JyxcbiAgICAgICAgfSxcbiAgICAgICk7XG4gICAgICB0aGlzLmNvbG9ybWFwS2V5ID0gbnVsbDtcbiAgICAgIHRoaXMuZ3JvdXBzLnNldEtleSgnZGVuc2l0eScsIGtleSk7XG4gICAgICB0aGlzLmdyb3Vwcy5yZXBsYWNlKCdkZW5zaXR5JywgbGF5ZXIpO1xuICAgIH1cbiAgICB0aGlzLnJlc3R5bGUodGhpcy5ncm91cHMubGF5ZXIoJ2RlbnNpdHknKSBhcyBJbWFnZUxheWVyLCB2aWV3KTtcbiAgfVxuXG4gIC8qKiBXaW5kb3csIGNvbG91ciBhbmQgb3BhY2l0eSBvbnRvIHRoZSBkcmF3biBsYXllcjogdW5pZm9ybXMgYW5kIGEgTFVULCBubyByZS11cGxvYWQuICovXG4gIHByaXZhdGUgcmVzdHlsZShsYXllcjogSW1hZ2VMYXllciwgdmlldzogU3BhdGlhbFZpZXdTdGF0ZSk6IHZvaWQge1xuICAgIGNvbnN0IHJhc3RlciA9IHRoaXMucmFzdGVyITtcbiAgICBjb25zdCBbbG8sIGhpXSA9IHZpZXcuZGVuc2l0eVJhbmdlID8/IHJhc3Rlci5hdXRvO1xuICAgIGxheWVyLmNvbnRyYXN0TGltaXRzID0gW2xvLCBoaV07XG4gICAgbGF5ZXIub3BhY2l0eSA9IHZpZXcuZGVuc2l0eU9wYWNpdHk7XG4gICAgY29uc3QgY29sb3JtYXBLZXkgPSBKU09OLnN0cmluZ2lmeSh2aWV3LmRlbnNpdHlDb2xvcm1hcCA/PyBudWxsKTtcbiAgICBpZiAoY29sb3JtYXBLZXkgIT09IHRoaXMuY29sb3JtYXBLZXkpIHtcbiAgICAgIHRoaXMuY29sb3JtYXBLZXkgPSBjb2xvcm1hcEtleTtcbiAgICAgIGxheWVyLmNvbG9ybWFwID0gY29sb3JtYXBGcm9tTHV0KCd0cmFuc2NyaXB0LWRlbnNpdHknLCBsdXRGb3Iodmlldy5kZW5zaXR5Q29sb3JtYXAgPz8gSU5GRVJOT19MVVQpKTtcbiAgICB9XG4gICAgdGhpcy5ncm91cHMudmlld2VyIS5yZXF1ZXN0UmVuZGVyKCk7XG4gICAgY29uc3Qgc3RhdHMgPSB7IGxvLCBoaSwgbWF4OiByYXN0ZXIubWF4IH07XG4gICAgaWYgKHRoaXMuc3RhdHM/LmxvID09PSBsbyAmJiB0aGlzLnN0YXRzLmhpID09PSBoaSAmJiB0aGlzLnN0YXRzLm1heCA9PT0gcmFzdGVyLm1heCkgcmV0dXJuO1xuICAgIHRoaXMuc3RhdHMgPSBzdGF0cztcbiAgICB0aGlzLmNoYW5nZWQoc3RhdHMpO1xuICB9XG59XG5cbi8qKlxuICogVHJhbnNjcmlwdHMgaW4gdmlldyBmb3IgdGhlIHZpc2libGUgZ2VuZXMsIGFnYWluc3QgdGhlIG1hcmtlciBidWRnZXQg4oCUIGl0IHRlbGxzIHRoZSB1c2VyXG4gKiB3aGV0aGVyIHRoZSBidWRnZXQgd2lsbCBmb3JjZSBncm91cGluZy4gQ2FjaGVzIHRoZSBwZXItZ2VuZSBkYXRhc2V0IHRvdGFscyBmb3IgdGhlIGxhdGVzdFxuICogZ2VuZSBzZXQuXG4gKi9cbmV4cG9ydCBjbGFzcyBUcmFuc2NyaXB0RXN0aW1hdG9yIHtcbiAgLyoqIFBlci1nZW5lIGRhdGFzZXQgdG90YWxzIGZvciB0aGUgaW4tdmlldyBlc3RpbWF0ZSwgZm9yIHRoZSBsYXRlc3QgZ2VuZSBzZXQuICovXG4gIHByaXZhdGUgY291bnRzQ2FjaGU6IHsga2V5OiBzdHJpbmc7IGNvdW50czogUHJvbWlzZTxTcGF0aWFsVHJhbnNjcmlwdENvdW50cz4gfSB8IG51bGwgPSBudWxsO1xuXG4gIGNvbnN0cnVjdG9yKFxuICAgIHByaXZhdGUgcmVhZG9ubHkgcG9ydDogU3BhdGlhbERhdGFQb3J0LFxuICAgIHByaXZhdGUgcmVhZG9ubHkgY2hhbmdlZDogKGVzdGltYXRlOiBUcmFuc2NyaXB0RXN0aW1hdGUgfCBudWxsKSA9PiB2b2lkLFxuICApIHt9XG5cbiAgLyoqXG4gICAqIFRyYW5zY3JpcHRzIGluIHZpZXcgZm9yIHRoZSB2aXNpYmxlIGdlbmVzOiBlYWNoIGdlbmUncyBkYXRhc2V0IHRvdGFsIHRpbWVzIHRoZSBzaGFyZVxuICAgKiBvZiB0aGUgdGlzc3VlIG9uIHNjcmVlbi4gQW4gZXN0aW1hdGUg4oCUIGV4cHJlc3Npb24gaXMgbm90IHVuaWZvcm0g4oCUIHdoaWNoIGlzIGFsc28gd2hhdFxuICAgKiBYZW5pdW0gRXhwbG9yZXIgc2hvd3M7IGl0IHRlbGxzIHRoZSB1c2VyIHdoZXRoZXIgdGhlIGJ1ZGdldCB3aWxsIGZvcmNlIGdyb3VwaW5nLlxuICAgKi9cbiAgYXN5bmMgcGxhbihcbiAgICBkYXRhc2V0OiBTcGF0aWFsRGF0YXNldCxcbiAgICB2aWV3OiBTcGF0aWFsVmlld1N0YXRlLFxuICAgIHZpZXdlcjogVmlld2VyLFxuICAgIHc6IG51bWJlcixcbiAgICBoOiBudW1iZXIsXG4gICAgY3R4OiBQbGFuQ29udGV4dCxcbiAgKTogUHJvbWlzZTx2b2lkPiB7XG4gICAgY29uc3QgdGlsZXMgPSBkYXRhc2V0LnRyYW5zY3JpcHRUaWxlcztcbiAgICBpZiAoIXRpbGVzIHx8ICF0aGlzLnBvcnQuZ2V0VHJhbnNjcmlwdENvdW50cyB8fCB2aWV3LnRyYW5zY3JpcHRNb2RlID09PSAnb2ZmJykge1xuICAgICAgdGhpcy5jaGFuZ2VkKG51bGwpO1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICBjb25zdCBoaWRkZW5HZW5lcyA9IG5ldyBTZXQodmlldy50cmFuc2NyaXB0SGlkZGVuR2VuZXMpO1xuICAgIGNvbnN0IGdlbmVzID0gdmlldy50cmFuc2NyaXB0QWxsR2VuZXMgPyBbXSA6IHZpZXcudHJhbnNjcmlwdEdlbmVzLmZpbHRlcigoZykgPT4gIWhpZGRlbkdlbmVzLmhhcyhnKSk7XG4gICAgY29uc3Qga2V5ID0gYCR7ZGF0YXNldC5pZH18JHtnZW5lcy5qb2luKCcsJyl9YDtcbiAgICBpZiAodGhpcy5jb3VudHNDYWNoZT8ua2V5ICE9PSBrZXkpIHtcbiAgICAgIHRoaXMuY291bnRzQ2FjaGUgPSB7IGtleSwgY291bnRzOiB0aGlzLnBvcnQuZ2V0VHJhbnNjcmlwdENvdW50cyhnZW5lcykgfTtcbiAgICB9XG4gICAgbGV0IGNvdW50czogU3BhdGlhbFRyYW5zY3JpcHRDb3VudHM7XG4gICAgdHJ5IHtcbiAgICAgIGNvdW50cyA9IGF3YWl0IHRoaXMuY291bnRzQ2FjaGUuY291bnRzO1xuICAgIH0gY2F0Y2gge1xuICAgICAgdGhpcy5jb3VudHNDYWNoZSA9IG51bGw7XG4gICAgICByZXR1cm47XG4gICAgfVxuICAgIGlmIChjdHguc3RhbGUoKSkgcmV0dXJuO1xuICAgIGNvbnN0IGluVmlldyA9IHZpc2libGVEYXRhUmVjdCh2aWV3ZXIuY2FtZXJhLmNlbnRlciwgdmlld2VyLmNhbWVyYS56b29tLCB3LCBoLCBkYXRhc2V0LmltYWdlUmVmLCAwKTtcbiAgICBpZiAoIWluVmlldykgcmV0dXJuO1xuICAgIGNvbnN0IGIgPSBjb3VudHMuYm91bmRzO1xuICAgIGNvbnN0IHNoYXJlID0gTWF0aC5taW4oMSwgdmlzaWJsZUFyZWEoaW5WaWV3LCBiKSAvIE1hdGgubWF4KDEsIChiWzJdIC0gYlswXSkgKiAoYlszXSAtIGJbMV0pKSk7XG4gICAgY29uc3Qgc2VsZWN0ZWQgPSB2aWV3LnRyYW5zY3JpcHRBbGxHZW5lc1xuICAgICAgPyBhbGxHZW5lc0hpZGRlbih2aWV3KVxuICAgICAgICA/IDBcbiAgICAgICAgOiBjb3VudHMudG90YWxcbiAgICAgIDogZ2VuZXMucmVkdWNlKChzdW0sIGcpID0+IHN1bSArIChjb3VudHMuY291bnRzW2ddID8/IDApLCAwKTtcbiAgICB0aGlzLmNoYW5nZWQoeyBwb2ludHM6IE1hdGgucm91bmQoc2VsZWN0ZWQgKiBzaGFyZSksIG1heDogdmlldy50cmFuc2NyaXB0QnVkZ2V0IH0pO1xuICB9XG59XG4iXX0=
@@ -147,7 +147,9 @@ export class TranscriptHover {
147
147
  return lines;
148
148
  }
149
149
  if (d.kind === 'individual') {
150
- const gene = s?.topGenes?.[0]?.name;
150
+ // Named by its code when the dataset lists its genes; else by the server's summary of
151
+ // the spot, which can name a neighbour's gene.
152
+ const gene = d.genes[t.gene[i]] || s?.topGenes?.[0]?.name;
151
153
  return [
152
154
  gene ? `${gene} transcript` : 'Transcript',
153
155
  cellLine(obs, 'in cell'),
@@ -179,4 +181,4 @@ export class TranscriptHover {
179
181
  : [`${gene} transcript`, cellLine(obs, 'in cell')];
180
182
  }
181
183
  }
182
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidHJhbnNjcmlwdC1ob3Zlci5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL3NyYy9saWIvaW1wbGVtZW50YXRpb25zL25hcGFyaS1qcy9zcGF0aWFsLXRpbGVzL3RyYW5zY3JpcHQtaG92ZXIudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBR0EsT0FBTyxFQUNMLFdBQVcsRUFDWCxjQUFjLEdBR2YsTUFBTSw2Q0FBNkMsQ0FBQztBQVlyRDs7Ozs7OztHQU9HO0FBQ0gsTUFBTSxPQUFPLGVBQWU7SUFZMUIsa0dBQWtHO0lBQ2xHLFlBQ21CLElBQXFCLEVBQ3JCLFVBQXlCO1FBRHpCLFNBQUksR0FBSixJQUFJLENBQWlCO1FBQ3JCLGVBQVUsR0FBVixVQUFVLENBQWU7UUFkNUMscUZBQXFGO1FBQzdFLFVBQUssR0FBNEIsSUFBSSxDQUFDO1FBQzlDLDZEQUE2RDtRQUNyRCxVQUFLLEdBQTRCLElBQUksQ0FBQztRQUM5Qyw0RkFBNEY7UUFDcEYsbUJBQWMsR0FBa0IsSUFBSSxDQUFDO1FBQzdDLGlEQUFpRDtRQUNoQyxVQUFLLEdBQUcsSUFBSSxHQUFHLEVBQW9CLENBQUM7UUFDN0MsUUFBRyxHQUFrQixJQUFJLENBQUM7UUFDMUIsVUFBSyxHQUF5QyxJQUFJLENBQUM7SUFNeEQsQ0FBQztJQUVKLG9HQUFvRztJQUNwRyxRQUFRLENBQUMsS0FBdUIsRUFBRSxjQUE2QjtRQUM3RCxJQUFJLENBQUMsS0FBSyxHQUFHLEtBQUssQ0FBQztRQUNuQixJQUFJLENBQUMsS0FBSyxDQUFDLEtBQUssRUFBRSxDQUFDO1FBQ25CLElBQUksQ0FBQyxjQUFjLEdBQUcsY0FBYyxDQUFDO0lBQ3ZDLENBQUM7SUFFRCwyRUFBMkU7SUFDM0UsUUFBUSxDQUFDLEtBQThCO1FBQ3JDLElBQUksQ0FBQyxLQUFLLEdBQUcsS0FBSyxDQUFDO0lBQ3JCLENBQUM7SUFFRCxpQ0FBaUM7SUFDakMsS0FBSztRQUNILElBQUksQ0FBQyxLQUFLLEdBQUcs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QUFJLEVBQUUsTUFBTSxFQUFFLEdBQUcsQ0FBQyxDQUFDLEdBQUcsQ0FBQztZQUMvQixNQUFNLEVBQUUsR0FBRyxJQUFJLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsTUFBTSxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsSUFBSSxDQUFDLENBQUM7WUFDMUQsTUFBTSxFQUFFLEdBQUcsSUFBSSxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLE1BQU0sQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLElBQUksQ0FBQyxDQUFDO1lBQzFELE1BQU0sRUFBRSxHQUFHLE1BQU0sQ0FBQyxDQUFDLENBQUMsR0FBRyxFQUFFLEdBQUcsSUFBSSxDQUFDO1lBQ2pDLE1BQU0sRUFBRSxHQUFHLE1BQU0sQ0FBQyxDQUFDLENBQUMsR0FBRyxFQUFFLEdBQUcsSUFBSSxDQUFDO1lBQ2pDLEdBQUcsR0FBRyxDQUFDLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxHQUFHLElBQUksRUFBRSxFQUFFLEdBQUcsSUFBSSxDQUFDLENBQUM7UUFDdkMsQ0FBQzthQUFNLElBQUksQ0FBQyxDQUFDLElBQUksS0FBSyxZQUFZLEVBQUUsQ0FBQztZQUNuQyxNQUFNLENBQUMsR0FBRyxJQUFJLENBQUM7WUFDZixHQUFHLEdBQUcsQ0FBQyxDQUFDLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQztRQUNyRixDQUFDO1FBQ0QsTUFBTSxLQUFLLEdBQUcsQ0FB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QUFjLEVBQUUsMkJBQTJCLEVBQUUsUUFBUSxDQUFDLEdBQUcsRUFBRSxXQUFXLENBQUMsQ0FBQztZQUM5RixDQUFDLENBQUMsQ0FBQyxHQUFHLElBQUksYUFBYSxFQUFFLFFBQVEsQ0FBQyxHQUFHLEVBQUUsU0FBUyxDQUFDLENBQUMsQ0FBQztJQUN2RCxDQUFDO0NBQ0YiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgdHlwZSB7IFBvaW50c0xheWVyIH0gZnJvbSAnbmFwYXJpLWpzJztcblxuaW1wb3J0IHR5cGUgeyBTcGF0aWFsRGF0YVBvcnQgfSBmcm9tICcuLi8uLi8uLi9jb250cmFjdHMvcG9ydHMvc3BhdGlhbC1kYXRhLnBvcnQnO1xuaW1wb3J0IHtcbiAgTk9fQ0FURUdPUlksXG4gIE5PX09CU0VSVkFUSU9OLFxuICBTcGF0aWFsVHJhbnNjcmlwdFN1bW1hcnksXG4gIFNwYXRpYWxUcmFuc2NyaXB0VGlsZSxcbn0gZnJvbSAnLi4vLi4vLi4vY29udHJhY3RzL3NwYXRpYWwtZGF0YXNldC5jb250cmFjdCc7XG5pbXBvcnQgdHlwZSB7IENhdGVnb3JpY2FsQ29kZXMgfSBmcm9tICcuL2NhdGVnb3JpY2FsLWxvb2t1cCc7XG5cbi8qKiBXaGF0IG9uZSB0cmFuc2NyaXB0IGVudHJ5IGlzIOKAlCBkZWNpZGVzIHdoYXQgaG92ZXJpbmcgaXQgc2F5cy4gKi9cbmV4cG9ydCB0eXBlIFRyYW5zY3JpcHRLaW5kID0gJ2dlbmVzJyB8ICdpbmRpdmlkdWFsJyB8ICdiaW5zJztcblxuLyoqIEEgYmluIGdyaWQ6IGl0cyBzaXplIGFuZCBvcmlnaW4sIHNvIGEgaG92ZXJlZCBiaW4ncyBzcXVhcmUgY2FuIGJlIHJlY292ZXJlZC4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgVHJhbnNjcmlwdEJpbiB7XG4gIHNpemU6IG51bWJlcjtcbiAgb3JpZ2luOiBbbnVtYmVyLCBudW1iZXJdO1xufVxuXG4vKipcbiAqIFRvb2x0aXBzIGZvciB0aGUgdHJhbnNjcmlwdCBtYXJrZXJzIG9mIHRoZSAyRCBzcGF0aWFsIHZpZXcuXG4gKlxuICogUmVhZHMgb25seSB3aGF0IHRoZSB0cmFuc2NyaXB0IGxheWVyIGxhc3QgZHJldyDigJQgaGFuZGVkIG92ZXIgb25lIHdheSB0aHJvdWdoXG4gKiB7QGxpbmsgc2V0RHJhd259IC8ge0BsaW5rIHNldFR5cGVzfSDigJQgYW5kIGFza3MgdGhlIHNlcnZlciBmb3IgdGhlIHNsb3dlciBkZXRhaWxzIChkaXN0aW5jdFxuICogZ2VuZXMgaW4gYSBncm91cCwgaXRzIHRvcCBnZW5lcyBhbmQgY2VsbHMsIHRoZSBjZWxsJ3MgZGlzcGxheSBpZCkgb25jZSB0aGUgcG9pbnRlciBoYXNcbiAqIHJlc3RlZCBvbiBhIG1hcmtlciwgY2FjaGluZyB0aGVtIHVudGlsIHRoZSBuZXh0IGRyYXcuXG4gKi9cbmV4cG9ydCBjbGFzcyBUcmFuc2NyaXB0SG92ZXIge1xuICAvKiogV2hhdCB0aGUgdHJhbnNjcmlwdCBsYXllciBjdXJyZW50bHkgc2hvd3MgKHdyaXR0ZW4gYnkgZHJhd2luZywgcmVhZCBieSBob3ZlcikuICovXG4gIHByaXZhdGUgZHJhd246IERyYXduVHJhbnNjcmlwdHMgfCBudWxsID0gbnVsbDtcbiAgLyoqIFRoZSBjZWxsLXR5cGUgY29sdW1uLCB0byBuYW1lIHRoZSBjZWxsIGEgbWFya2VyIGlzIGluLiAqL1xuICBwcml2YXRlIHR5cGVzOiBDYXRlZ29yaWNhbENvZGVzIHwgbnVsbCA9IG51bGw7XG4gIC8qKiDCtW0gcGVyIG9ic2VydmF0aW9uIHVuaXQgb2YgdGhlIGRyYXduIGRhdGFzZXQsIGZvciBkZXNjcmliaW5nIGEgZ3JvdXBlZCBtYXJrZXIncyBhcmVhLiAqL1xuICBwcml2YXRlIG1pY3JvbnNQZXJVbml0OiBudW1iZXIgfCBudWxsID0gbnVsbDtcbiAgLyoqIERldGFpbHMgYWxyZWFkeSBmZXRjaGVkLCBieSBob3ZlcmVkIGVudHJ5LiAqL1xuICBwcml2YXRlIHJlYWRvbmx5IGNhY2hlID0gbmV3IE1hcDxzdHJpbmcsIHN0cmluZ1tdPigpO1xuICBwcml2YXRlIGtleTogc3RyaW5nIHwgbnVsbCA9IG51bGw7XG4gIHByaXZhdGUgdGltZXI6IFJldHVyblR5cGU8dHlwZW9mIHNldFRpbWVvdXQ+IHwgbnVsbCA9IG51bGw7XG5cbiAgLyoqIGBsYXllclNob3duYCBzYXlzIHdoZXRoZXIgdGhlIHRyYW5zY3JpcHQgbGF5ZXIgaXMgb24gc2NyZWVuIG5vdyAoaXQgbWF5IGhhdmUgYmVlbiBkcm9wcGVkKS4gKi9cbiAgY29uc3RydWN0b3IoXG4gICAgcHJpdmF0ZSByZWFkb25seSBwb3J0OiBTcGF0aWFsRGF0YVBvcnQsXG4gICAgcHJpdmF0ZSByZWFkb25seSBsYXllclNob3duOiAoKSA9PiBib29sZWFuLFxuICApIHt9XG5cbiAgLyoqIFRoZSB0cmFuc2NyaXB0IGxheWVyIHdhcyByZWRyYXduOiBob3ZlciBuYW1lcyB0aGVzZSBlbnRyaWVzIG5vdyAoY2FjaGVkIGRldGFpbHMgYXJlIGRyb3BwZWQpLiAqL1xuICBzZXREcmF3bihkcmF3bjogRHJhd25UcmFuc2NyaXB0cywgbWljcm9uc1BlclVuaXQ6IG51bWJlciB8IG51bGwpOiB2b2lkIHtcbiAgICB0aGlzLmRyYXduID0gZHJhd247XG4gICAgdGhpcy5jYWNoZS5jbGVhcigpO1xuICAgIHRoaXMubWljcm9uc1BlclVuaXQgPSBtaWNyb25zUGVyVW5pdDtcbiAgfVxuXG4gIC8qKiBUaGUgY2VsbC10eXBlIGNvbHVtbiB0aGUgZHJhd24gZW50cmllcycgY2VsbHMgYXJlIG5hbWVkIGJ5LCBvciBudWxsLiAqL1xuICBzZXRUeXBlcyh0eXBlczogQ2F0ZWdvcmljYWxDb2RlcyB8IG51bGwpOiB2b2lkIHtcbiAgICB0aGlzLnR5cGVzID0gdHlwZXM7XG4gIH1cblxuICAvKiogTm90aGluZyBpcyBkcmF3biBhbnkgbW9yZS4gKi9cbiAgY2xlYXIoKTogdm9pZCB7XG4gICAgdGhpcy5kcmF3biA9IG51bGw7XG4gIH1cblxuICAvKiogU3RvcCBhIHBlbmRpbmcgZGV0YWlscyByZXF1ZXN0IGFuZCBmb3JnZXQgd2hhdCB3YXMgZHJhd24uICovXG4gIGRpc3Bvc2UoKTogdm9pZCB7XG4gICAgaWYgKHRoaXMudGltZXIpIGNsZWFyVGltZW91dCh0aGlzLnRpbWVyKTtcbiAgICB0aGlzLnRpbWVyID0gbnVsbDtcbiAgICB0aGlzLmRyYXduID0gbnVsbDtcbiAgfVxuXG4gIC8qKlxuICAgKiBUb29sdGlwIGxpbmVzIGZvciB0aGUgdHJhbnNjcmlwdCBtYXJrZXIgdW5kZXIgd29ybGQgcG9pbnQgYCh3eCwgd3kpYCwgb3IgbnVsbC5cbiAgICpcbiAgICogVGhlIG1hcmtlciBpcyBuYXBhcmktanMncyBwaWNrIG9uIHRoZSBkcmF3biBsYXllcjogaGl0IGFueXdoZXJlIG9uIGl0LCBvciB3aXRoaW5cbiAgICogYHJhZGl1c1dvcmxkYCBvZiBpdHMgY2VudHJlIHdoZW4gaXQgaXMgc21hbGxlciB0aGFuIHRoYXQsIHRoZSBORUFSRVNUIGNlbnRyZSB3aW5uaW5nXG4gICAqIGFtb25nIHNldmVyYWwgKGFuIGV4YWN0IHRpZSwgc3VjaCBhcyB0d28gZ2VuZXMnIGdyb3VwcyBvbiBvbmUgYmluIGNlbnRyZSwgZ29lcyB0byB0aGUgb25lXG4gICAqIGRyYXduIG9uIHRvcCkuIFJldHVybnMgd2hhdCBpcyBrbm93biBhdCBvbmNlIChnZW5lLCBjb3VudCwgY2VsbCB0eXBlKTsgYW55dGhpbmcgdGhhdCBuZWVkc1xuICAgKiB0aGUgc2VydmVyIOKAlCBkaXN0aW5jdCBnZW5lcyBpbiBhIGdyb3VwLCBpdHMgdG9wIGdlbmVzIGFuZCBjZWxscywgdGhlIGNlbGwncyBkaXNwbGF5IGlkIOKAlFxuICAgKiBhcnJpdmVzIHRocm91Z2ggYG9uRGV0YWlsc2Agb25jZSB0aGUgcG9pbnRlciBoYXMgcmVzdGVkIG9uIHRoZSBtYXJrZXIgYnJpZWZseS5cbiAgICovXG4gIGhvdmVyQXQod3g6IG51bWJlciwgd3k6IG51bWJlciwgcmFkaXVzV29ybGQ6IG51bWJlciwgb25EZXRhaWxzOiAobGluZXM6IHN0cmluZ1tdKSA9PiB2b2lkKTogc3RyaW5nW10gfCBudWxsIHtcbiAgICBjb25zdCBkID0gdGhpcy5kcmF3bjtcbiAgICBpZiAoIWQgfHwgIXRoaXMubGF5ZXJTaG93bigpIHx8ICFkLm1lcmdlZC5jb3VudCkge1xuICAgICAgdGhpcy5rZXkgPSBudWxsO1xuICAgICAgcmV0dXJuIG51bGw7XG4gICAgfVxuICAgIGNvbnN0IGkgPSBkLmxheWVyLnBpY2sod3gsIHd5LCB7IHRvbGVyYW5jZTogcmFkaXVzV29ybGQsIHRpZUJyZWFrOiAnbmVhcmVzdCcgfSk7XG4gICAgaWYgKGkgPCAwKSB7XG4gICAgICB0aGlzLmtleSA9IG51bGw7XG4gICAgICByZXR1cm4gbnVsbDtcbiAgICB9XG4gICAgY29uc3Qga2V5ID0gYCR7ZC5raW5kfXwke2QubWVyZ2VkLnhbaV19fCR7ZC5tZXJnZWQueVtpXX18JHtkLm1lcmdlZC5nZW5lW2ldfWA7XG4gICAgY29uc3QgY2FjaGVkID0gdGhpcy5jYWNoZS5nZXQoa2V5KTtcbiAgICBpZiAoY2FjaGVkKSByZXR1cm4gY2FjaGVkO1xuICAgIGlmIChrZXkgIT09IHRoaXMua2V5KSB7XG4gICAgICB0aGlzLmtleSA9IGtleTtcbiAgICAgIGlmICh0aGlzLnRpbWVyKSBjbGVhclRpbWVvdXQodGhpcy50aW1lcik7XG4gICAgICB0aGlzLnRpbWVyID0gc2V0VGltZW91dCgoKSA9PiB2b2lkIHRoaXMuZmV0Y2hEZXRhaWxzKGQsIGksIGtleSwgb25EZXRhaWxzKSwgMTUwKTtcbiAgICB9XG4gICAgcmV0dXJuIHRoaXMuZGVzY3JpYmUoZCwgaSwgbnVsbCk7XG4gIH1cblxuICBwcml2YXRlIGFzeW5jIGZldGNoRGV0YWlscyhcbiAgICBkOiBEcmF3blRyYW5zY3JpcHRzLFxuICAgIGk6IG51bWJlcixcbiAgICBrZXk6IHN0cmluZyxcbiAgICBvbkRldGFpbHM6IChsaW5lczogc3RyaW5nW10pID0+IHZvaWQsXG4gICk6IFByb21pc2U8dm9pZD4ge1xuICAgIGlmICghdGhpcy5wb3J0LmdldFRyYW5zY3JpcHRTdW1tYXJ5IHx8IHRoaXMua2V5ICE9PSBrZXkpIHJldHVybjtcbiAgICBjb25zdCBvYnMgPSBkLm1lcmdlZC5vYnNlcnZhdGlvbltpXTtcbiAgICBjb25zdCBjZWxscyA9IG9icyA9PT0gTk9fT0JTRVJWQVRJT04gPyBbXSA6IFtvYnNdO1xuICAgIGxldCBib3g6IFtudW1iZXIsIG51bWJlciwgbnVtYmVyLCBudW1iZXJdIHwgdW5kZWZpbmVkO1xuICAgIGlmICgoZC5raW5kID09PSAnYmlucycgfHwgZC5raW5kID09PSAnZ2VuZXMnKSAmJiBkLmJpbikge1xuICAgICAgY29uc3QgeyBzaXplLCBvcmlnaW4gfSA9IGQuYmluO1xuICAgICAgY29uc3QgYnggPSBNYXRoLmZsb29yKChkLm1lcmdlZC54W2ldIC0gb3JpZ2luWzBdKSAvIHNpemUpO1xuICAgICAgY29uc3QgYnkgPSBNYXRoLmZsb29yKChkLm1lcmdlZC55W2ldIC0gb3JpZ2luWzFdKSAvIHNpemUpO1xuICAgICAgY29uc3QgeDAgPSBvcmlnaW5bMF0gKyBieCAqIHNpemU7XG4gICAgICBjb25zdCB5MCA9IG9yaWdpblsxXSArIGJ5ICogc2l6ZTtcbiAgICAgIGJveCA9IFt4MCwgeTAsIHgwICsgc2l6ZSwgeTAgKyBzaXplXTtcbiAgICB9IGVsc2UgaWYgKGQua2luZCA9PT0gJ2luZGl2aWR1YWwnKSB7XG4gICAgICBjb25zdCBlID0gMC4wMjtcbiAgICAgIGJveCA9IFtkLm1lcmdlZC54W2ldIC0gZSwgZC5tZXJnZWQueVtpXSAtIGUsIGQubWVyZ2VkLnhbaV0gKyBlLCBkLm1lcmdlZC55W2ldICsgZV07XG4gICAgfVxuICAgIGNvbnN0IGdlbmVzID0gZC5ncm91cEdlbmVzICYmIGQuZW50cnlHcm91cCA/IGQuZ3JvdXBHZW5lc1tkLmVudHJ5R3JvdXBbaV1dIDogdW5kZWZpbmVkO1xuICAgIHRyeSB7XG4gICAgICBjb25zdCBzdW1tYXJ5ID0gYXdhaXQgdGhpcy5wb3J0LmdldFRyYW5zY3JpcHRTdW1tYXJ5KHsgYm94LCBjZWxscywgLi4uKGdlbmVzID8geyBnZW5lcyB9IDoge30pIH0pO1xuICAgICAgY29uc3QgbGluZXMgPSB0aGlzLmRlc2NyaWJlKGQsIGksIHN1bW1hcnkpO1xuICAgICAgdGhpcy5jYWNoZS5zZXQoa2V5LCBsaW5lcyk7XG4gICAgICBpZiAodGhpcy5rZXkgPT09IGtleSkgb25EZXRhaWxzKGxpbmVzKTtcbiAgICB9IGNhdGNoIChlcnIpIHtcbiAgICAgIGNvbnNvbGUud2FybignW25hcGFyaS1qc10gdHJhbnNjcmlwdCBkZXRhaWxzIHVuYXZhaWxhYmxlJywgZXJyKTtcbiAgICB9XG4gIH1cblxuICAvKiogVGhlIHRvb2x0aXAgdGV4dCBmb3IgZW50cnkgYGlgLCB3aXRoIHRoZSBzZXJ2ZXIncyBkZXRhaWxzIHdoZW4gdGhleSBoYXZlIGFycml2ZWQuICovXG4gIHByaXZhdGUgZGVzY3JpYmUoZDogRHJhd25UcmFuc2NyaXB0cywgaTogbnVtYmVyLCBzOiBTcGF0aWFsVHJhbnNjcmlwdFN1bW1hcnkgfCBudWxsKTogc3RyaW5nW10ge1xuICAgIGNvbnN0IHQgPSBkLm1lcmdlZDtcbiAgICBjb25zdCBuID0gdC53ZWlnaHRbaV07XG4gICAgY29uc3Qgb2JzID0gdC5vYnNlcnZhdGlvbltpXTtcbiAgICBjb25zdCBmbXQgPSAodjogbnVtYmVyKSA9PiB2LnRvTG9jYWxlU3RyaW5nKCk7XG4gICAgY29uc3QgdHlwZU9mID0gKG86IG51bWJlcikgPT4ge1xuICAgICAgY29uc3QgdHlwZXMgPSB0aGlzLnR5cGVzO1xuICAgICAgaWYgKCF0eXBlcyB8fCBvID09PSBOT19PQlNFUlZBVElPTiB8fCB0eXBlcy5tZXRhLmtpbmQgIT09ICdjYXRlZ29yaWNhbCcpIHJldHVybiBudWxsO1xuICAgICAgY29uc3QgYyA9IHR5cGVzLmNvZGVzW29dO1xuICAgICAgcmV0dXJuIGMgPT09IE5PX0NBVEVHT1JZID8gbnVsbCA6ICh0eXBlcy5tZXRhLmNhdGVnb3JpZXNbY10gPz8gbnVsbCk7XG4gICAgfTtcbiAgICBjb25zdCBjZWxsTGluZSA9IChvOiBudW1iZXIsIHByZWZpeDogc3RyaW5nKSA9PiB7XG4gICAgICBpZiAobyA9PT0gTk9fT0JTRVJWQVRJT04pIHJldHVybiAnb3V0c2lkZSBhbnkgY2VsbCc7XG4gICAgICBjb25zdCBpZCA9IHM/LmNlbGxJZHM/LltvXSA/PyBgIyR7b31gO1xuICAgICAgY29uc3QgdHlwZSA9IHR5cGVPZihvKTtcbiAgICAgIHJldHVybiBgJHtwcmVmaXh9ICR7aWR9JHt0eXBlID8gYCDCtyAke3R5cGV9YCA6ICcnfWA7XG4gICAgfTtcblxuICAgIGlmIChkLmtpbmQgPT09ICdiaW5zJykge1xuICAgICAgY29uc3QgbGluZXMgPSBbYCR7Zm10KG4pfSB0cmFuc2NyaXB0cyDCtyBhbGwgZ2VuZXNgXTtcbiAgICAgIGlmIChkLmJpbikgbGluZXMucHVzaChgJHtkLmJpbi5zaXplLnRvRml4ZWQoMSl9IMOXICR7ZC5iaW4uc2l6ZS50b0ZpeGVkKDEpfSDCtW0gYXJlYWApO1xuICAgICAgaWYgKHM/LnRyYW5zY3JpcHRzICE9PSB1bmRlZmluZWQpIHtcbiAgICAgICAgbGluZXMucHVzaChcbiAgICAgICAgICBgJHtmbXQocy5nZW5lcyA/PyAwKX0gZGlzdGluY3QgZ2VuZXMgwrcgJHtmbXQocy5jZWxscyA/PyAwKX0gY2VsbCR7cy5jZWxscyA9PT0gMSA/ICcnIDogJ3MnfWAgK1xuICAgICAgICAgICAgKHMudW5hc3NpZ25lZCA/IGAgwrcgJHtmbXQocy51bmFzc2lnbmVkKX0gb3V0c2lkZSBjZWxsc2AgOiAnJyksXG4gICAgICAgICk7XG4gICAgICAgIGlmIChzLnRvcEdlbmVzPy5sZW5ndGgpIHtcbiAgICAgICAgICBsaW5lcy5wdXNoKFxuICAgICAgICAgICAgYHRvcCBnZW5lczogJHtzLnRvcEdlbmVzXG4gICAgICAgICAgICAgIC5zbGljZSgwLCA1KVxuICAgICAgICAgICAgICAubWFwKChnKSA9PiBgJHtnLm5hbWV9ICR7Zm10KGcuY291bnQpfWApXG4gICAgICAgICAgICAgIC5qb2luKCcsICcpfWAsXG4gICAgICAgICAgKTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgICAgbGluZXMucHVzaChjZWxsTGluZShvYnMsICdtb3N0bHkgY2VsbCcpKTtcbiAgICAgIGlmICghcyAmJiB0aGlzLnBvcnQuZ2V0VHJhbnNjcmlwdFN1bW1hcnkpIGxpbmVzLnB1c2goJ2xvYWRpbmcgZGV0YWlsc+KApicpO1xuICAgICAgcmV0dXJuIGxpbmVzO1xuICAgIH1cbiAgICBpZiAoZC5raW5kID09PSAnaW5kaXZpZHVhbCcpIHtcbiAgICAgIGNvbnN0IGdlbmUgPSBzPy50b3BHZW5lcz8uWzBdPy5uYW1lO1xuICAgICAgcmV0dXJuIFtcbiAgICAgICAgZ2VuZSA/IGAke2dlbmV9IHRyYW5zY3JpcHRgIDogJ1RyYW5zY3JpcHQnLFxuICAgICAgICBjZWxsTGluZShvYnMsICdpbiBjZWxsJyksXG4gICAgICAgIC4uLighcyAmJiB0aGlzLnBvcnQuZ2V0VHJhbnNjcmlwdFN1bW1hcnkgPyBbJ2xvYWRpbmcgZGV0YWlsc+KApiddIDogW10pLFxuICAgICAgXTtcbiAgICB9XG4gICAgY29uc3QgZ2VuZSA9IGQuZ2VuZXNbdC5nZW5lW2ldXSA/PyAndHJhbnNjcmlwdCc7XG4gICAgaWYgKGQuYmluKSB7XG4gICAgICBjb25zdCB1bSA9IGQuYmluLnNpemUgKiAodGhpcy5taWNyb25zUGVyVW5pdCA/PyAxKTtcbiAgICAgIGNvbnN0IGdyb3VwID0gZC5lbnRyeUdyb3VwICYmIGQuZ3JvdXBOYW1lcyA/IGQuZ3JvdXBOYW1lc1tkLmVudHJ5R3JvdXBbaV1dIDogZ2VuZTtcbiAgICAgIGNvbnN0IHRvcCA9IHM/LnRvcEdlbmVzPy5sZW5ndGhcbiAgICAgICAgPyBbXG4gICAgICAgICAgICBzLnRvcEdlbmVzXG4gICAgICAgICAgICAgIC5zbGljZSgwLCA2KVxuICAgICAgICAgICAgICAubWFwKChnKSA9PiBgJHtnLm5hbWV9ICR7Zm10KGcuY291bnQpfWApXG4gICAgICAgICAgICAgIC5qb2luKCcsICcpLFxuICAgICAgICAgIF1cbiAgICAgICAgOiBbXTtcbiAgICAgIHJldHVybiBbXG4gICAgICAgIGAke2dyb3VwfSDCtyAke2ZtdChuKX0gdHJhbnNjcmlwdCR7biA9PT0gMSA/ICcnIDogJ3MnfWAsXG4gICAgICAgIC4uLihkLmdyb3VwR2VuZXMgPyB0b3AgOiBncm91cCAhPT0gZ2VuZSA/IFtgbW9zdGx5ICR7Z2VuZX1gXSA6IFtdKSxcbiAgICAgICAgYCR7dW0udG9GaXhlZCgxKX0gw5cgJHt1bS50b0ZpeGVkKDEpfSDCtW0gYXJlYSDCtyB6b29tIGluIHRvIHNwbGl0YCxcbiAgICAgICAgLi4uKG9icyA9PT0gTk9fT0JTRVJWQVRJT04gJiYgZC5ncm91cEdlbmVzID8gW10gOiBbY2VsbExpbmUob2JzLCAnbW9zdGx5IGNlbGwnKV0pLFxuICAgICAgICAuLi4oIXMgJiYgZC5ncm91cEdlbmVzICYmIHRoaXMucG9ydC5nZXRUcmFuc2NyaXB0U3VtbWFyeSA/IFsnbG9hZGluZyBkZXRhaWxz4oCmJ10gOiBbXSksXG4gICAgICBdO1xuICAgIH1cbiAgICByZXR1cm4gbiA+IDFcbiAgICAgID8gW2Ake2dlbmV9IMK3ICR7Zm10KG4pfSB0cmFuc2NyaXB0c2AsICdncm91cGVkOiB6b29tIGluIHRvIHNwbGl0JywgY2VsbExpbmUob2JzLCAnbmVhciBjZWxsJyldXG4gICAgICA6IFtgJHtnZW5lfSB0cmFuc2NyaXB0YCwgY2VsbExpbmUob2JzLCAnaW4gY2VsbCcpXTtcbiAgfVxufVxuXG4vKiogV2hhdCB0aGUgdHJhbnNjcmlwdCBsYXllciBjdXJyZW50bHkgc2hvd3Mg4oCUIHdoYXQgaG92ZXJpbmcgbmVlZHMgdG8gbmFtZSBhIG1hcmtlci4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgRHJhd25UcmFuc2NyaXB0cyB7XG4gIGtpbmQ6IFRyYW5zY3JpcHRLaW5kO1xuICBiaW4/OiBUcmFuc2NyaXB0QmluO1xuICBtZXJnZWQ6IFNwYXRpYWxUcmFuc2NyaXB0VGlsZTtcbiAgLyoqIFRoZSBsYXllciB0aGUgZW50cmllcyBhcmUgZHJhd24gaW4sIG9uZSBtYXJrZXIgcGVyIGVudHJ5IGluIHRoZSBzYW1lIG9yZGVyLiAqL1xuICBsYXllcjogUG9pbnRzTGF5ZXI7XG4gIGdlbmVzOiBzdHJpbmdbXTtcbiAgLyoqIEZvciBhIGdyb3VwZWQgZ2VuZSBzZWxlY3Rpb246IGVhY2ggZW50cnkncyBncm91cCwgYW5kIHRoZSBncm91cHMnIG5hbWVzLiAqL1xuICBlbnRyeUdyb3VwPzogSW50MzJBcnJheTtcbiAgZ3JvdXBOYW1lcz86IHN0cmluZ1tdO1xuICAvKiogRWFjaCBncm91cCdzIGdlbmVzLCB3aGVuIHRoZSBtYXJrZXJzIGNhbWUgZnJvbSB0aGUgZGVuc2l0eSBncmlkcyAoZm9yIHRoZSBob3ZlcikuICovXG4gIGdyb3VwR2VuZXM/OiBzdHJpbmdbXVtdO1xufVxuIl19
184
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidHJhbnNjcmlwdC1ob3Zlci5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL3NyYy9saWIvaW1wbGVtZW50YXRpb25zL25hcGFyaS1qcy9zcGF0aWFsLXRpbGVzL3RyYW5zY3JpcHQtaG92ZXIudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBR0EsT0FBTyxFQUNMLFdBQVcsRUFDWCxjQUFjLEdBR2YsTUFBTSw2Q0FBNkMsQ0FBQztBQVlyRDs7Ozs7OztHQU9HO0FBQ0gsTUFBTSxPQUFPLGVBQWU7SUFZMUIsa0dBQWtHO0lBQ2xHLFlBQ21CLElBQXFCLEVBQ3JCLFVBQXlCO1FBRHpCLFNBQUksR0FBSixJQUFJLENBQWlCO1FBQ3JCLGVBQVUsR0FBVixVQUFVLENBQWU7UUFkNUMscUZBQXFGO1FBQzdFLFVBQUssR0FBNEIsSUFBSSxDQUFDO1FBQzlDLDZEQUE2RDtRQUNyRCxVQUFLLEdBQTRCLElBQUksQ0FBQztRQUM5Qyw0RkFBNEY7UUFDcEYsbUJBQWMsR0FBa0IsSUFBSSxDQUFDO1FBQzdDLGlEQUFpRDtRQUNoQyxVQUFLLEdBQUcsSUFBSSxHQUFHLEVBQW9CLENBQUM7UUFDN0MsUUFBRyxHQUFrQixJQUFJLENBQUM7UUFDMUIsVUFBSyxHQUF5QyxJQUFJLENBQUM7SUFNeEQsQ0FBQztJQUVKLG9HQUFvRztJQUNwRyxRQUFRLENBQUMsS0FBdUIsRUFBRSxjQUE2QjtRQUM3RCxJQUFJLENBQUMsS0FBSyxHQUFHLEtBQUssQ0FBQztRQUNuQixJQUFJLENBQUMsS0FBSyxDQUFDLEtBQUssRUFBRSxDQUFDO1FBQ25CLElBQUksQ0FBQyxjQUFjLEdBQUcsY0FBYyxDQUFDO0lBQ3ZDLENBQUM7SUFFRCwyRUFBMkU7SUFDM0UsUUFBUSxDQUFDLEtBQThCO1FBQ3JDLElBQUksQ0FBQyxLQUFLLEdBQUcsS0FBSyxDQUFDO0lBQ3JCLENBQUM7SUFFRCxpQ0FBaUM7SUFDakMsS0FBSztRQUNILElBQUksQ0FBQyxLQUFLLEdBQUcs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QUFJLEVBQUUsTUFBTSxFQUFFLEdBQUcsQ0FBQyxDQUFDLEdBQUcsQ0FBQztZQUMvQixNQUFNLEVBQUUsR0FBRyxJQUFJLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsTUFBTSxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsSUFBSSxDQUFDLENBQUM7WUFDMUQsTUFBTSxFQUFFLEdBQUcsSUFBSSxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLE1BQU0sQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLElBQUksQ0FBQyxDQUFDO1lBQzFELE1BQU0sRUFBRSxHQUFHLE1BQU0sQ0FBQyxDQUFDLENBQUMsR0FBRyxFQUFFLEdBQUcsSUFBSSxDQUFDO1lBQ2pDLE1BQU0sRUFBRSxHQUFHLE1BQU0sQ0FBQyxDQUFDLENBQUMsR0FBRyxFQUFFLEdBQUcsSUFBSSxDQUFDO1lBQ2pDLEdBQUcsR0FBRyxDQUFDLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxHQUFHLElBQUksRUFBRSxFQUFFLEdBQUcsSUFBSSxDQUFDLENBQUM7UUFDdkMsQ0FBQzthQUFNLElBQUksQ0FBQyxDQUFDLElBQUksS0FBSyxZQUFZLEVBQUUsQ0FBQztZQUNuQyxNQUFNLENBQUMsR0FBRyxJQUFJLENBQUM7WUFDZixHQUFHLEdBQUcsQ0FBQyxDQUFDLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQztRQUNyRixDQUFDO1FBQ0QsTUFBTSxLQUFLLEdBQUcsQ0FBQyxDQUFDLFVBQVUsSUFBSSxDQUFDLENBQUMsVUFBVSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsVUFBVSxDQUFDLENBQUMsQ0FBQyxVQUFVLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsU0FBUyxDQUFDO1FBQ3ZGLElBQUksQ0FBQztZQUNILE1BQU0sT0FBTyxHQUFHLE1BQU0sSUFBSSxDQUFDLElBQUksQ0FBQyxvQkFBb0IsQ0FBQyxFQUFFLEdBQUcsRUFBRSxLQUFLLEVBQUUsR0FBRyxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsRUFBRSxLQUFLLEVBQUUsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxDQUFDO1lBQ2xHLE1BQU0sS0FBSyxHQUFHLElBQUksQ0FBQyxRQUFRLENBQUMsQ0FBQyxFQUFFLENBQUMsRUFBRSxPQUFPLENBQUMsQ0FBQztZQUMzQyxJQUFJLENBQUMsS0FBSyxDQUFDLEdBQUcsQ0FBQyxHQUFHLEVBQUUsS0FBSyxDQUFDLENBQUM7WUFDM0IsSUFBSSxJQUFJLENBQUMsR0FBRyxLQUFLLEdBQUc7Z0JBQUUsU0FBUyxDQUFDLEtBQUssQ0FBQyxDQUFDO1FBQ3pDLENBQUM7UUFBQyxPQUFPLEdBQUcsRUFBRSxDQUFDO1lBQ2IsT0FBTyxDQUFDLElBQUksQ0FBQyw0Q0FBNEMsRUFBRSxHQUFHLENBQUMsQ0FBQztRQUNsRSxDQUFDO0lBQ0gsQ0FBQztJQUVELHdGQUF3RjtJQUNoRixRQUFRLENBQUMsQ0FBbUIsRUFBRSxDQUFTLEVBQUUsQ0FBa0M7UUFDakYsTUFBTSxDQUFDLEdBQUcsQ0FBQyxDQUFDLE1BQU0sQ0FBQztRQUNuQixNQUFNLENBQUMsR0FBRyxDQUFDLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQyxDQUFDO1FBQ3RCLE1BQU0sR0FBRyxHQUFHLENBQUMsQ0FBQyxXQUFXLENBQUMsQ0FBQyxDQUFDLENBQUM7UUFDN0IsTUFBTSxHQUFHLEdBQUcsQ0FBQyxDQUFTLEVBQUUsRUFBRSxDQUFDLENBQUMsQ0FBQyxjQUFjLEVBQUUsQ0FBQztRQUM5QyxNQUFNLE1BQU0sR0FBRyxDQUFDLENBQVMsRUFBRSxFQUFFO1lBQzNCLE1BQU0sS0FBSyxHQUFHLElBQUksQ0FBQyxLQUFLLENBQUM7WUFDekIsSUFBSSxDQUFDLEtBQUssSUFBSSxDQUFDLEtBQUssY0FBYyxJQUFJLEtBQUssQ0FBQyxJQUFJLENBQUMsSUFBSSxLQUFLLGFBQWE7Z0JBQUUsT0FBTyxJQUFJLENBQUM7WUFDckYsTUFBTSxDQUFDLEdBQUcsS0FBSyxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQztZQUN6QixPQUFPLENBQUMsS0FBSyxXQUFXLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxLQUFLLENBQUMsSUFBSSxDQUFDLFVBQVUsQ0FBQyxDQUFDLENBQUMsSUFBSSxJQUFJLENBQUMsQ0FBQztRQUN2RSxDQUFDLENBQUM7UUFDRixNQUFNLFFBQVEsR0FBRyxDQUFDLENBQVMsRUFBRSxNQUFjLEVBQUUsRUFBRTtZQUM3QyxJQUFJLENBQUMsS0FBSyxjQUFjO2dCQUFFLE9BQU8sa0JBQWtCLENBQUM7WUFDcEQsTUFBTSxFQUFFLEdBQUcsQ0FBQyxFQUFFLE9BQU8sRUFBRSxDQUFDLENBQUMsQ0FBQyxJQUFJLElBQUksQ0FBQyxFQUFFLENBQUM7WUFDdEMsTUFBTSxJQUFJLEdBQUcsTUFBTSxDQUFDLENBQUMsQ0FBQyxDQUFDO1lBQ3ZCLE9BQU8sR0FBRyxNQUFNLElBQUksRUFBRSxHQUFHLElBQUksQ0FBQyxDQUFDLENBQUMsTUFBTSxJQUFJLEVBQUUsQ0FBQyxDQUFDLENBQUMsRUFBRSxFQUFFLENBQUM7UUFDdEQsQ0FBQyxDQUFDO1FBRUYsSUFBSSxDQUFDLENBQUMsSUFBSSxLQUFLLE1BQU0sRUFBRSxDQUFDO1lBQ3RCLE1BQU0sS0FBSyxHQUFHLENBQUMsR0FBRyxHQUFHLENBQUMsQ0FBQyxDQUFDLDBCQUEwQixDQUFDLENBQUM7WUFDcEQsSUFBSSxDQUFDLENBQUMsR0FBRztnQkFBRSxLQUFLLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsT0FBTyxDQUFDLENBQUMsQ0FBQyxNQUFNLENBQUMsQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLE9BQU8sQ0FBQyxDQUFDLENBQUMsVUFBVSxDQUFDLENBQUM7WUFDckYsSUFBSSxDQUFDLEVBQUUsV0FBVyxLQUFLLFNBQVMsRUFBRSxDQUFDO2dCQUNqQyxLQUFLLENBQUMsSUFBSSxDQUNSLEdBQUcsR0FBRyxDQUFDLENBQUMsQ0FBQyxLQUFLLElBQUksQ0FBQyxDQUFDLHFCQUFxQixHQUFHLENBQUMsQ0FBQyxDQUFDLEtBQUssSUFBSSxDQUFDLENBQUMsUUFBUSxDQUFDLENBQUMsS0FBSyxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxHQUFHLEVBQUU7b0JBQzFGLENBQUMsQ0FBQyxDQUFDLFVBQVUsQ0FBQyxDQUFDLENBQUMsTUFBTSxHQUFHLENBQUMsQ0FBQyxDQUFDLFVBQVUsQ0FBQyxnQkFBZ0IsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQ2hFLENBQUM7Z0JBQ0YsSUFBSSxDQUFDLENBQUMsUUFBUSxFQUFFLE1BQU0sRUFBRSxDQUFDO29CQUN2QixLQUFLLENBQUMsSUFBSSxDQUNSLGNBQWMsQ0FBQyxDQUFDLFFBQVE7eUJBQ3JCLEtBQUssQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDO3lCQUNYLEdBQUcsQ0FBQyxDQUFDLENBQUMsRUFBRSxFQUFFLENBQUMsR0FBRyxDQUFDLENBQUMsSUFBSSxJQUFJLEdBQUcsQ0FBQyxDQUFDLENBQUMsS0FBSyxDQUFDLEVBQUUsQ0FBQzt5QkFDdkMsSUFBSSxDQUFDLElBQUksQ0FBQyxFQUFFLENBQ2hCLENBQUM7Z0JBQ0osQ0FBQztZQUNILENBQUM7WUFDRCxLQUFLLENBQUMsSUFBSSxDQUFDLFFBQVEsQ0FBQyxHQUFHLEVBQUUsYUFBYSxDQUFDLENBQUMsQ0FBQztZQUN6QyxJQUFJLENBQUMsQ0FBQyxJQUFJLElBQUksQ0FBQyxJQUFJLENBQUMsb0JBQW9CO2dCQUFFLEtBQUssQ0FBQyxJQUFJLENBQUMsa0JBQWtCLENBQUMsQ0FBQztZQUN6RSxPQUFPLEtBQUssQ0FBQztRQUNmLENBQUM7UUFDRCxJQUFJLENBQUMsQ0FBQyxJQUFJLEtBQUssWUFBWSxFQUFFLENBQUM7WUFDNUIsc0ZBQXNGO1lBQ3RGLCtDQUErQztZQUMvQyxNQUFNLElBQUksR0FBRyxDQUFDLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLEVBQUUsUUFBUSxFQUFFLENBQUMsQ0FBQyxDQUFDLEVBQUUsSUFBSSxDQUFDO1lBQzFELE9BQU87Z0JBQ0wsSUFBSSxDQUFDLENBQUMsQ0FBQyxHQUFHLElBQUksYUFBYSxDQUFDLENBQUMsQ0FBQyxZQUFZO2dCQUMxQyxRQUFRLENBQUMsR0FBRyxFQUFFLFNBQVMsQ0FBQztnQkFDeEIsR0FBRyxDQUFDLENBQUMsQ0FBQyxJQUFJLElBQUksQ0FBQyxJQUFJLENBQUMsb0JBQW9CLENBQUMsQ0FBQyxDQUFDLENBQUMsa0JBQWtCLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDO2FBQ3RFLENBQUM7UUFDSixDQUFDO1FBQ0QsTUFBTSxJQUFJLEdBQUcsQ0FBQyxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLElBQUksWUFBWSxDQUFDO1FBQ2hELElBQUksQ0FBQyxDQUFDLEdBQUcsRUFBRSxDQUFDO1lBQ1YsTUFBTSxFQUFFLEdBQUcsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxJQUFJLEdBQUcsQ0FBQyxJQUFJLENBQUMsY0FBYyxJQUFJLENBQUMsQ0FBQyxDQUFDO1lBQ25ELE1BQU0sS0FBSyxHQUFHLENBQUMsQ0FBQyxVQUFVLElBQUksQ0FBQyxDQUFDLFVBQVUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLFVBQVUsQ0FBQyxDQUFDLENBQUMsVUFBVSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQztZQUNsRixNQUFNLEdBQUcsR0FBRyxDQUFDLEVBQUUsUUFBUSxFQUFFLE1BQU07Z0JBQzdCLENBQUMsQ0FBQztvQkFDRSxDQUFDLENBQUMsUUFBUTt5QkFDUCxLQUFLLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQzt5QkFDWCxHQUFHLENBQUMsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLEdBQUcsQ0FBQyxDQUFDLElBQUksSUFBSSxHQUFHLENBQUMsQ0FBQyxDQUFDLEtBQUssQ0FBQyxFQUFFLENBQUM7eUJBQ3ZDLElBQUksQ0FBQyxJQUFJLENBQUM7aUJBQ2Q7Z0JBQ0gsQ0FBQyxDQUFDLEVBQUUsQ0FBQztZQUNQLE9BQU87Z0JBQ0wsR0FBRyxLQUFLLE1BQU0sR0FBRyxDQUFDLENBQUMsQ0FBQyxjQUFjLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsR0FBRyxFQUFFO2dCQUN0RCxHQUFHLENBQUMsQ0FBQyxDQUFDLFVBQVUsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxLQUFLLEtBQUssSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLFVBQVUsSUFBSSxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDO2dCQUNsRSxHQUFHLEVBQUUsQ0FBQyxPQUFPLENBQUMsQ0FBQyxDQUFDLE1BQU0sRUFBRSxDQUFDLE9BQU8sQ0FBQyxDQUFDLENBQUMsNkJBQTZCO2dCQUNoRSxHQUFHLENBQUMsR0FBRyxLQUFLLGNBQWMsSUFBSSxDQUFDLENBQUMsVUFBVSxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUMsUUFBUSxDQUFDLEdBQUcsRUFBRSxhQUFhLENBQUMsQ0FBQyxDQUFDO2dCQUNqRixHQUFHLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLFVBQVUsSUFBSSxJQUFJLENBQUMsSUFBSSxDQUFDLG9CQUFvQixDQUFDLENBQUMsQ0FBQyxDQUFDLGtCQUFrQixDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQzthQUN0RixDQUFDO1FBQ0osQ0FBQztRQUNELE9BQU8sQ0FBQyxHQUFHLENBQUM7WUFDVixDQUFDLENBQUMsQ0FBQyxHQUFHLElBQUksTUFBTSxHQUFHLENBQUMsQ0FBQyxDQUFDLGNBQWMsRUFBRSwyQkFBMkIsRUFBRSxRQUFRLENBQUMsR0FBRyxFQUFFLFdBQVcsQ0FBQyxDQUFDO1lBQzlGLENBQUMsQ0FBQyxDQUFDLEdBQUcsSUFBSSxhQUFhLEVBQUUsUUFBUSxDQUFDLEdBQUcsRUFBRSxTQUFTLENBQUMsQ0FBQyxDQUFDO0lBQ3ZELENBQUM7Q0FDRiIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB0eXBlIHsgUG9pbnRzTGF5ZXIgfSBmcm9tICduYXBhcmktanMnO1xuXG5pbXBvcnQgdHlwZSB7IFNwYXRpYWxEYXRhUG9ydCB9IGZyb20gJy4uLy4uLy4uL2NvbnRyYWN0cy9wb3J0cy9zcGF0aWFsLWRhdGEucG9ydCc7XG5pbXBvcnQge1xuICBOT19DQVRFR09SWSxcbiAgTk9fT0JTRVJWQVRJT04sXG4gIFNwYXRpYWxUcmFuc2NyaXB0U3VtbWFyeSxcbiAgU3BhdGlhbFRyYW5zY3JpcHRUaWxlLFxufSBmcm9tICcuLi8uLi8uLi9jb250cmFjdHMvc3BhdGlhbC1kYXRhc2V0LmNvbnRyYWN0JztcbmltcG9ydCB0eXBlIHsgQ2F0ZWdvcmljYWxDb2RlcyB9IGZyb20gJy4vY2F0ZWdvcmljYWwtbG9va3VwJztcblxuLyoqIFdoYXQgb25lIHRyYW5zY3JpcHQgZW50cnkgaXMg4oCUIGRlY2lkZXMgd2hhdCBob3ZlcmluZyBpdCBzYXlzLiAqL1xuZXhwb3J0IHR5cGUgVHJhbnNjcmlwdEtpbmQgPSAnZ2VuZXMnIHwgJ2luZGl2aWR1YWwnIHwgJ2JpbnMnO1xuXG4vKiogQSBiaW4gZ3JpZDogaXRzIHNpemUgYW5kIG9yaWdpbiwgc28gYSBob3ZlcmVkIGJpbidzIHNxdWFyZSBjYW4gYmUgcmVjb3ZlcmVkLiAqL1xuZXhwb3J0IGludGVyZmFjZSBUcmFuc2NyaXB0QmluIHtcbiAgc2l6ZTogbnVtYmVyO1xuICBvcmlnaW46IFtudW1iZXIsIG51bWJlcl07XG59XG5cbi8qKlxuICogVG9vbHRpcHMgZm9yIHRoZSB0cmFuc2NyaXB0IG1hcmtlcnMgb2YgdGhlIDJEIHNwYXRpYWwgdmlldy5cbiAqXG4gKiBSZWFkcyBvbmx5IHdoYXQgdGhlIHRyYW5zY3JpcHQgbGF5ZXIgbGFzdCBkcmV3IOKAlCBoYW5kZWQgb3ZlciBvbmUgd2F5IHRocm91Z2hcbiAqIHtAbGluayBzZXREcmF3bn0gLyB7QGxpbmsgc2V0VHlwZXN9IOKAlCBhbmQgYXNrcyB0aGUgc2VydmVyIGZvciB0aGUgc2xvd2VyIGRldGFpbHMgKGRpc3RpbmN0XG4gKiBnZW5lcyBpbiBhIGdyb3VwLCBpdHMgdG9wIGdlbmVzIGFuZCBjZWxscywgdGhlIGNlbGwncyBkaXNwbGF5IGlkKSBvbmNlIHRoZSBwb2ludGVyIGhhc1xuICogcmVzdGVkIG9uIGEgbWFya2VyLCBjYWNoaW5nIHRoZW0gdW50aWwgdGhlIG5leHQgZHJhdy5cbiAqL1xuZXhwb3J0IGNsYXNzIFRyYW5zY3JpcHRIb3ZlciB7XG4gIC8qKiBXaGF0IHRoZSB0cmFuc2NyaXB0IGxheWVyIGN1cnJlbnRseSBzaG93cyAod3JpdHRlbiBieSBkcmF3aW5nLCByZWFkIGJ5IGhvdmVyKS4gKi9cbiAgcHJpdmF0ZSBkcmF3bjogRHJhd25UcmFuc2NyaXB0cyB8IG51bGwgPSBudWxsO1xuICAvKiogVGhlIGNlbGwtdHlwZSBjb2x1bW4sIHRvIG5hbWUgdGhlIGNlbGwgYSBtYXJrZXIgaXMgaW4uICovXG4gIHByaXZhdGUgdHlwZXM6IENhdGVnb3JpY2FsQ29kZXMgfCBudWxsID0gbnVsbDtcbiAgLyoqIMK1bSBwZXIgb2JzZXJ2YXRpb24gdW5pdCBvZiB0aGUgZHJhd24gZGF0YXNldCwgZm9yIGRlc2NyaWJpbmcgYSBncm91cGVkIG1hcmtlcidzIGFyZWEuICovXG4gIHByaXZhdGUgbWljcm9uc1BlclVuaXQ6IG51bWJlciB8IG51bGwgPSBudWxsO1xuICAvKiogRGV0YWlscyBhbHJlYWR5IGZldGNoZWQsIGJ5IGhvdmVyZWQgZW50cnkuICovXG4gIHByaXZhdGUgcmVhZG9ubHkgY2FjaGUgPSBuZXcgTWFwPHN0cmluZywgc3RyaW5nW10+KCk7XG4gIHByaXZhdGUga2V5OiBzdHJpbmcgfCBudWxsID0gbnVsbDtcbiAgcHJpdmF0ZSB0aW1lcjogUmV0dXJuVHlwZTx0eXBlb2Ygc2V0VGltZW91dD4gfCBudWxsID0gbnVsbDtcblxuICAvKiogYGxheWVyU2hvd25gIHNheXMgd2hldGhlciB0aGUgdHJhbnNjcmlwdCBsYXllciBpcyBvbiBzY3JlZW4gbm93IChpdCBtYXkgaGF2ZSBiZWVuIGRyb3BwZWQpLiAqL1xuICBjb25zdHJ1Y3RvcihcbiAgICBwcml2YXRlIHJlYWRvbmx5IHBvcnQ6IFNwYXRpYWxEYXRhUG9ydCxcbiAgICBwcml2YXRlIHJlYWRvbmx5IGxheWVyU2hvd246ICgpID0+IGJvb2xlYW4sXG4gICkge31cblxuICAvKiogVGhlIHRyYW5zY3JpcHQgbGF5ZXIgd2FzIHJlZHJhd246IGhvdmVyIG5hbWVzIHRoZXNlIGVudHJpZXMgbm93IChjYWNoZWQgZGV0YWlscyBhcmUgZHJvcHBlZCkuICovXG4gIHNldERyYXduKGRyYXduOiBEcmF3blRyYW5zY3JpcHRzLCBtaWNyb25zUGVyVW5pdDogbnVtYmVyIHwgbnVsbCk6IHZvaWQge1xuICAgIHRoaXMuZHJhd24gPSBkcmF3bjtcbiAgICB0aGlzLmNhY2hlLmNsZWFyKCk7XG4gICAgdGhpcy5taWNyb25zUGVyVW5pdCA9IG1pY3JvbnNQZXJVbml0O1xuICB9XG5cbiAgLyoqIFRoZSBjZWxsLXR5cGUgY29sdW1uIHRoZSBkcmF3biBlbnRyaWVzJyBjZWxscyBhcmUgbmFtZWQgYnksIG9yIG51bGwuICovXG4gIHNldFR5cGVzKHR5cGVzOiBDYXRlZ29yaWNhbENvZGVzIHwgbnVsbCk6IHZvaWQge1xuICAgIHRoaXMudHlwZXMgPSB0eXBlcztcbiAgfVxuXG4gIC8qKiBOb3RoaW5nIGlzIGRyYXduIGFueSBtb3JlLiAqL1xuICBjbGVhcigpOiB2b2lkIHtcbiAgICB0aGlzLmRyYXduID0gbnVsbDtcbiAgfVxuXG4gIC8qKiBTdG9wIGEgcGVuZGluZyBkZXRhaWxzIHJlcXVlc3QgYW5kIGZvcmdldCB3aGF0IHdhcyBkcmF3bi4gKi9cbiAgZGlzcG9zZSgpOiB2b2lkIHtcbiAgICBpZiAodGhpcy50aW1lcikgY2xlYXJUaW1lb3V0KHRoaXMudGltZXIpO1xuICAgIHRoaXMudGltZXIgPSBudWxsO1xuICAgIHRoaXMuZHJhd24gPSBudWxsO1xuICB9XG5cbiAgLyoqXG4gICAqIFRvb2x0aXAgbGluZXMgZm9yIHRoZSB0cmFuc2NyaXB0IG1hcmtlciB1bmRlciB3b3JsZCBwb2ludCBgKHd4LCB3eSlgLCBvciBudWxsLlxuICAgKlxuICAgKiBUaGUgbWFya2VyIGlzIG5hcGFyaS1qcydzIHBpY2sgb24gdGhlIGRyYXduIGxheWVyOiBoaXQgYW55d2hlcmUgb24gaXQsIG9yIHdpdGhpblxuICAgKiBgcmFkaXVzV29ybGRgIG9mIGl0cyBjZW50cmUgd2hlbiBpdCBpcyBzbWFsbGVyIHRoYW4gdGhhdCwgdGhlIE5FQVJFU1QgY2VudHJlIHdpbm5pbmdcbiAgICogYW1vbmcgc2V2ZXJhbCAoYW4gZXhhY3QgdGllLCBzdWNoIGFzIHR3byBnZW5lcycgZ3JvdXBzIG9uIG9uZSBiaW4gY2VudHJlLCBnb2VzIHRvIHRoZSBvbmVcbiAgICogZHJhd24gb24gdG9wKS4gUmV0dXJucyB3aGF0IGlzIGtub3duIGF0IG9uY2UgKGdlbmUsIGNvdW50LCBjZWxsIHR5cGUpOyBhbnl0aGluZyB0aGF0IG5lZWRzXG4gICAqIHRoZSBzZXJ2ZXIg4oCUIGRpc3RpbmN0IGdlbmVzIGluIGEgZ3JvdXAsIGl0cyB0b3AgZ2VuZXMgYW5kIGNlbGxzLCB0aGUgY2VsbCdzIGRpc3BsYXkgaWQg4oCUXG4gICAqIGFycml2ZXMgdGhyb3VnaCBgb25EZXRhaWxzYCBvbmNlIHRoZSBwb2ludGVyIGhhcyByZXN0ZWQgb24gdGhlIG1hcmtlciBicmllZmx5LlxuICAgKi9cbiAgaG92ZXJBdCh3eDogbnVtYmVyLCB3eTogbnVtYmVyLCByYWRpdXNXb3JsZDogbnVtYmVyLCBvbkRldGFpbHM6IChsaW5lczogc3RyaW5nW10pID0+IHZvaWQpOiBzdHJpbmdbXSB8IG51bGwge1xuICAgIGNvbnN0IGQgPSB0aGlzLmRyYXduO1xuICAgIGlmICghZCB8fCAhdGhpcy5sYXllclNob3duKCkgfHwgIWQubWVyZ2VkLmNvdW50KSB7XG4gICAgICB0aGlzLmtleSA9IG51bGw7XG4gICAgICByZXR1cm4gbnVsbDtcbiAgICB9XG4gICAgY29uc3QgaSA9IGQubGF5ZXIucGljayh3eCwgd3ksIHsgdG9sZXJhbmNlOiByYWRpdXNXb3JsZCwgdGllQnJlYWs6ICduZWFyZXN0JyB9KTtcbiAgICBpZiAoaSA8IDApIHtcbiAgICAgIHRoaXMua2V5ID0gbnVsbDtcbiAgICAgIHJldHVybiBudWxsO1xuICAgIH1cbiAgICBjb25zdCBrZXkgPSBgJHtkLmtpbmR9fCR7ZC5tZXJnZWQueFtpXX18JHtkLm1lcmdlZC55W2ldfXwke2QubWVyZ2VkLmdlbmVbaV19YDtcbiAgICBjb25zdCBjYWNoZWQgPSB0aGlzLmNhY2hlLmdldChrZXkpO1xuICAgIGlmIChjYWNoZWQpIHJldHVybiBjYWNoZWQ7XG4gICAgaWYgKGtleSAhPT0gdGhpcy5rZXkpIHtcbiAgICAgIHRoaXMua2V5ID0ga2V5O1xuICAgICAgaWYgKHRoaXMudGltZXIpIGNsZWFyVGltZW91dCh0aGlzLnRpbWVyKTtcbiAgICAgIHRoaXMudGltZXIgPSBzZXRUaW1lb3V0KCgpID0+IHZvaWQgdGhpcy5mZXRjaERldGFpbHMoZCwgaSwga2V5LCBvbkRldGFpbHMpLCAxNTApO1xuICAgIH1cbiAgICByZXR1cm4gdGhpcy5kZXNjcmliZShkLCBpLCBudWxsKTtcbiAgfVxuXG4gIHByaXZhdGUgYXN5bmMgZmV0Y2hEZXRhaWxzKFxuICAgIGQ6IERyYXduVHJhbnNjcmlwdHMsXG4gICAgaTogbnVtYmVyLFxuICAgIGtleTogc3RyaW5nLFxuICAgIG9uRGV0YWlsczogKGxpbmVzOiBzdHJpbmdbXSkgPT4gdm9pZCxcbiAgKTogUHJvbWlzZTx2b2lkPiB7XG4gICAgaWYgKCF0aGlzLnBvcnQuZ2V0VHJhbnNjcmlwdFN1bW1hcnkgfHwgdGhpcy5rZXkgIT09IGtleSkgcmV0dXJuO1xuICAgIGNvbnN0IG9icyA9IGQubWVyZ2VkLm9ic2VydmF0aW9uW2ldO1xuICAgIGNvbnN0IGNlbGxzID0gb2JzID09PSBOT19PQlNFUlZBVElPTiA/IFtdIDogW29ic107XG4gICAgbGV0IGJveDogW251bWJlciwgbnVtYmVyLCBudW1iZXIsIG51bWJlcl0gfCB1bmRlZmluZWQ7XG4gICAgaWYgKChkLmtpbmQgPT09ICdiaW5zJyB8fCBkLmtpbmQgPT09ICdnZW5lcycpICYmIGQuYmluKSB7XG4gICAgICBjb25zdCB7IHNpemUsIG9yaWdpbiB9ID0gZC5iaW47XG4gICAgICBjb25zdCBieCA9IE1hdGguZmxvb3IoKGQubWVyZ2VkLnhbaV0gLSBvcmlnaW5bMF0pIC8gc2l6ZSk7XG4gICAgICBjb25zdCBieSA9IE1hdGguZmxvb3IoKGQubWVyZ2VkLnlbaV0gLSBvcmlnaW5bMV0pIC8gc2l6ZSk7XG4gICAgICBjb25zdCB4MCA9IG9yaWdpblswXSArIGJ4ICogc2l6ZTtcbiAgICAgIGNvbnN0IHkwID0gb3JpZ2luWzFdICsgYnkgKiBzaXplO1xuICAgICAgYm94ID0gW3gwLCB5MCwgeDAgKyBzaXplLCB5MCArIHNpemVdO1xuICAgIH0gZWxzZSBpZiAoZC5raW5kID09PSAnaW5kaXZpZHVhbCcpIHtcbiAgICAgIGNvbnN0IGUgPSAwLjAyO1xuICAgICAgYm94ID0gW2QubWVyZ2VkLnhbaV0gLSBlLCBkLm1lcmdlZC55W2ldIC0gZSwgZC5tZXJnZWQueFtpXSArIGUsIGQubWVyZ2VkLnlbaV0gKyBlXTtcbiAgICB9XG4gICAgY29uc3QgZ2VuZXMgPSBkLmdyb3VwR2VuZXMgJiYgZC5lbnRyeUdyb3VwID8gZC5ncm91cEdlbmVzW2QuZW50cnlHcm91cFtpXV0gOiB1bmRlZmluZWQ7XG4gICAgdHJ5IHtcbiAgICAgIGNvbnN0IHN1bW1hcnkgPSBhd2FpdCB0aGlzLnBvcnQuZ2V0VHJhbnNjcmlwdFN1bW1hcnkoeyBib3gsIGNlbGxzLCAuLi4oZ2VuZXMgPyB7IGdlbmVzIH0gOiB7fSkgfSk7XG4gICAgICBjb25zdCBsaW5lcyA9IHRoaXMuZGVzY3JpYmUoZCwgaSwgc3VtbWFyeSk7XG4gICAgICB0aGlzLmNhY2hlLnNldChrZXksIGxpbmVzKTtcbiAgICAgIGlmICh0aGlzLmtleSA9PT0ga2V5KSBvbkRldGFpbHMobGluZXMpO1xuICAgIH0gY2F0Y2ggKGVycikge1xuICAgICAgY29uc29sZS53YXJuKCdbbmFwYXJpLWpzXSB0cmFuc2NyaXB0IGRldGFpbHMgdW5hdmFpbGFibGUnLCBlcnIpO1xuICAgIH1cbiAgfVxuXG4gIC8qKiBUaGUgdG9vbHRpcCB0ZXh0IGZvciBlbnRyeSBgaWAsIHdpdGggdGhlIHNlcnZlcidzIGRldGFpbHMgd2hlbiB0aGV5IGhhdmUgYXJyaXZlZC4gKi9cbiAgcHJpdmF0ZSBkZXNjcmliZShkOiBEcmF3blRyYW5zY3JpcHRzLCBpOiBudW1iZXIsIHM6IFNwYXRpYWxUcmFuc2NyaXB0U3VtbWFyeSB8IG51bGwpOiBzdHJpbmdbXSB7XG4gICAgY29uc3QgdCA9IGQubWVyZ2VkO1xuICAgIGNvbnN0IG4gPSB0LndlaWdodFtpXTtcbiAgICBjb25zdCBvYnMgPSB0Lm9ic2VydmF0aW9uW2ldO1xuICAgIGNvbnN0IGZtdCA9ICh2OiBudW1iZXIpID0+IHYudG9Mb2NhbGVTdHJpbmcoKTtcbiAgICBjb25zdCB0eXBlT2YgPSAobzogbnVtYmVyKSA9PiB7XG4gICAgICBjb25zdCB0eXBlcyA9IHRoaXMudHlwZXM7XG4gICAgICBpZiAoIXR5cGVzIHx8IG8gPT09IE5PX09CU0VSVkFUSU9OIHx8IHR5cGVzLm1ldGEua2luZCAhPT0gJ2NhdGVnb3JpY2FsJykgcmV0dXJuIG51bGw7XG4gICAgICBjb25zdCBjID0gdHlwZXMuY29kZXNbb107XG4gICAgICByZXR1cm4gYyA9PT0gTk9fQ0FURUdPUlkgPyBudWxsIDogKHR5cGVzLm1ldGEuY2F0ZWdvcmllc1tjXSA/PyBudWxsKTtcbiAgICB9O1xuICAgIGNvbnN0IGNlbGxMaW5lID0gKG86IG51bWJlciwgcHJlZml4OiBzdHJpbmcpID0+IHtcbiAgICAgIGlmIChvID09PSBOT19PQlNFUlZBVElPTikgcmV0dXJuICdvdXRzaWRlIGFueSBjZWxsJztcbiAgICAgIGNvbnN0IGlkID0gcz8uY2VsbElkcz8uW29dID8/IGAjJHtvfWA7XG4gICAgICBjb25zdCB0eXBlID0gdHlwZU9mKG8pO1xuICAgICAgcmV0dXJuIGAke3ByZWZpeH0gJHtpZH0ke3R5cGUgPyBgIMK3ICR7dHlwZX1gIDogJyd9YDtcbiAgICB9O1xuXG4gICAgaWYgKGQua2luZCA9PT0gJ2JpbnMnKSB7XG4gICAgICBjb25zdCBsaW5lcyA9IFtgJHtmbXQobil9IHRyYW5zY3JpcHRzIMK3IGFsbCBnZW5lc2BdO1xuICAgICAgaWYgKGQuYmluKSBsaW5lcy5wdXNoKGAke2QuYmluLnNpemUudG9GaXhlZCgxKX0gw5cgJHtkLmJpbi5zaXplLnRvRml4ZWQoMSl9IMK1bSBhcmVhYCk7XG4gICAgICBpZiAocz8udHJhbnNjcmlwdHMgIT09IHVuZGVmaW5lZCkge1xuICAgICAgICBsaW5lcy5wdXNoKFxuICAgICAgICAgIGAke2ZtdChzLmdlbmVzID8/IDApfSBkaXN0aW5jdCBnZW5lcyDCtyAke2ZtdChzLmNlbGxzID8/IDApfSBjZWxsJHtzLmNlbGxzID09PSAxID8gJycgOiAncyd9YCArXG4gICAgICAgICAgICAocy51bmFzc2lnbmVkID8gYCDCtyAke2ZtdChzLnVuYXNzaWduZWQpfSBvdXRzaWRlIGNlbGxzYCA6ICcnKSxcbiAgICAgICAgKTtcbiAgICAgICAgaWYgKHMudG9wR2VuZXM/Lmxlbmd0aCkge1xuICAgICAgICAgIGxpbmVzLnB1c2goXG4gICAgICAgICAgICBgdG9wIGdlbmVzOiAke3MudG9wR2VuZXNcbiAgICAgICAgICAgICAgLnNsaWNlKDAsIDUpXG4gICAgICAgICAgICAgIC5tYXAoKGcpID0+IGAke2cubmFtZX0gJHtmbXQoZy5jb3VudCl9YClcbiAgICAgICAgICAgICAgLmpvaW4oJywgJyl9YCxcbiAgICAgICAgICApO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgICBsaW5lcy5wdXNoKGNlbGxMaW5lKG9icywgJ21vc3RseSBjZWxsJykpO1xuICAgICAgaWYgKCFzICYmIHRoaXMucG9ydC5nZXRUcmFuc2NyaXB0U3VtbWFyeSkgbGluZXMucHVzaCgnbG9hZGluZyBkZXRhaWxz4oCmJyk7XG4gICAgICByZXR1cm4gbGluZXM7XG4gICAgfVxuICAgIGlmIChkLmtpbmQgPT09ICdpbmRpdmlkdWFsJykge1xuICAgICAgLy8gTmFtZWQgYnkgaXRzIGNvZGUgd2hlbiB0aGUgZGF0YXNldCBsaXN0cyBpdHMgZ2VuZXM7IGVsc2UgYnkgdGhlIHNlcnZlcidzIHN1bW1hcnkgb2ZcbiAgICAgIC8vIHRoZSBzcG90LCB3aGljaCBjYW4gbmFtZSBhIG5laWdoYm91cidzIGdlbmUuXG4gICAgICBjb25zdCBnZW5lID0gZC5nZW5lc1t0LmdlbmVbaV1dIHx8IHM/LnRvcEdlbmVzPy5bMF0/Lm5hbWU7XG4gICAgICByZXR1cm4gW1xuICAgICAgICBnZW5lID8gYCR7Z2VuZX0gdHJhbnNjcmlwdGAgOiAnVHJhbnNjcmlwdCcsXG4gICAgICAgIGNlbGxMaW5lKG9icywgJ2luIGNlbGwnKSxcbiAgICAgICAgLi4uKCFzICYmIHRoaXMucG9ydC5nZXRUcmFuc2NyaXB0U3VtbWFyeSA/IFsnbG9hZGluZyBkZXRhaWxz4oCmJ10gOiBbXSksXG4gICAgICBdO1xuICAgIH1cbiAgICBjb25zdCBnZW5lID0gZC5nZW5lc1t0LmdlbmVbaV1dID8/ICd0cmFuc2NyaXB0JztcbiAgICBpZiAoZC5iaW4pIHtcbiAgICAgIGNvbnN0IHVtID0gZC5iaW4uc2l6ZSAqICh0aGlzLm1pY3JvbnNQZXJVbml0ID8/IDEpO1xuICAgICAgY29uc3QgZ3JvdXAgPSBkLmVudHJ5R3JvdXAgJiYgZC5ncm91cE5hbWVzID8gZC5ncm91cE5hbWVzW2QuZW50cnlHcm91cFtpXV0gOiBnZW5lO1xuICAgICAgY29uc3QgdG9wID0gcz8udG9wR2VuZXM/Lmxlbmd0aFxuICAgICAgICA/IFtcbiAgICAgICAgICAgIHMudG9wR2VuZXNcbiAgICAgICAgICAgICAgLnNsaWNlKDAsIDYpXG4gICAgICAgICAgICAgIC5tYXAoKGcpID0+IGAke2cubmFtZX0gJHtmbXQoZy5jb3VudCl9YClcbiAgICAgICAgICAgICAgLmpvaW4oJywgJyksXG4gICAgICAgICAgXVxuICAgICAgICA6IFtdO1xuICAgICAgcmV0dXJuIFtcbiAgICAgICAgYCR7Z3JvdXB9IMK3ICR7Zm10KG4pfSB0cmFuc2NyaXB0JHtuID09PSAxID8gJycgOiAncyd9YCxcbiAgICAgICAgLi4uKGQuZ3JvdXBHZW5lcyA/IHRvcCA6IGdyb3VwICE9PSBnZW5lID8gW2Btb3N0bHkgJHtnZW5lfWBdIDogW10pLFxuICAgICAgICBgJHt1bS50b0ZpeGVkKDEpfSDDlyAke3VtLnRvRml4ZWQoMSl9IMK1bSBhcmVhIMK3IHpvb20gaW4gdG8gc3BsaXRgLFxuICAgICAgICAuLi4ob2JzID09PSBOT19PQlNFUlZBVElPTiAmJiBkLmdyb3VwR2VuZXMgPyBbXSA6IFtjZWxsTGluZShvYnMsICdtb3N0bHkgY2VsbCcpXSksXG4gICAgICAgIC4uLighcyAmJiBkLmdyb3VwR2VuZXMgJiYgdGhpcy5wb3J0LmdldFRyYW5zY3JpcHRTdW1tYXJ5ID8gWydsb2FkaW5nIGRldGFpbHPigKYnXSA6IFtdKSxcbiAgICAgIF07XG4gICAgfVxuICAgIHJldHVybiBuID4gMVxuICAgICAgPyBbYCR7Z2VuZX0gwrcgJHtmbXQobil9IHRyYW5zY3JpcHRzYCwgJ2dyb3VwZWQ6IHpvb20gaW4gdG8gc3BsaXQnLCBjZWxsTGluZShvYnMsICduZWFyIGNlbGwnKV1cbiAgICAgIDogW2Ake2dlbmV9IHRyYW5zY3JpcHRgLCBjZWxsTGluZShvYnMsICdpbiBjZWxsJyldO1xuICB9XG59XG5cbi8qKiBXaGF0IHRoZSB0cmFuc2NyaXB0IGxheWVyIGN1cnJlbnRseSBzaG93cyDigJQgd2hhdCBob3ZlcmluZyBuZWVkcyB0byBuYW1lIGEgbWFya2VyLiAqL1xuZXhwb3J0IGludGVyZmFjZSBEcmF3blRyYW5zY3JpcHRzIHtcbiAga2luZDogVHJhbnNjcmlwdEtpbmQ7XG4gIGJpbj86IFRyYW5zY3JpcHRCaW47XG4gIG1lcmdlZDogU3BhdGlhbFRyYW5zY3JpcHRUaWxlO1xuICAvKiogVGhlIGxheWVyIHRoZSBlbnRyaWVzIGFyZSBkcmF3biBpbiwgb25lIG1hcmtlciBwZXIgZW50cnkgaW4gdGhlIHNhbWUgb3JkZXIuICovXG4gIGxheWVyOiBQb2ludHNMYXllcjtcbiAgLyoqXG4gICAqIFRoZSBnZW5lcyB0aGUgZW50cmllcycgYGdlbmVgIGNvZGVzIGluZGV4OiB0aGUgc2VsZWN0aW9uJ3MsIG9yIGZvciBldmVyeSBnZW5lJ3MgaW5kaXZpZHVhbFxuICAgKiB0cmFuc2NyaXB0cyB0aGUgZGF0YXNldCdzIGdlbmUgbGlzdCAoYHRyYW5zY3JpcHRUaWxlcy5nZW5lc2A7IGVtcHR5IHdpdGhvdXQgb25lKS5cbiAgICovXG4gIGdlbmVzOiBzdHJpbmdbXTtcbiAgLyoqIEZvciBhIGdyb3VwZWQgZ2VuZSBzZWxlY3Rpb246IGVhY2ggZW50cnkncyBncm91cCwgYW5kIHRoZSBncm91cHMnIG5hbWVzLiAqL1xuICBlbnRyeUdyb3VwPzogSW50MzJBcnJheTtcbiAgZ3JvdXBOYW1lcz86IHN0cmluZ1tdO1xuICAvKiogRWFjaCBncm91cCdzIGdlbmVzLCB3aGVuIHRoZSBtYXJrZXJzIGNhbWUgZnJvbSB0aGUgZGVuc2l0eSBncmlkcyAoZm9yIHRoZSBob3ZlcikuICovXG4gIGdyb3VwR2VuZXM/OiBzdHJpbmdbXVtdO1xufVxuIl19