@jax-data-science/sci-image-visualizer 0.9.0 → 0.11.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.
- package/esm2022/index.mjs +10 -1
- package/esm2022/lib/contracts/image.contract.mjs +1 -1
- package/esm2022/lib/contracts/ports/region-io.port.mjs +1 -1
- package/esm2022/lib/contracts/region-editor-api.contract.mjs +1 -1
- package/esm2022/lib/contracts/region-store.contract.mjs +1 -1
- package/esm2022/lib/contracts/section-view.contract.mjs +2 -0
- package/esm2022/lib/contracts/visualizer.contract.mjs +1 -1
- package/esm2022/lib/contracts/viz-config.mjs +1 -1
- package/esm2022/lib/geometry/loft.mjs +128 -0
- package/esm2022/lib/geometry/polylabel.mjs +156 -0
- package/esm2022/lib/geometry/reconstruct.mjs +315 -0
- package/esm2022/lib/geometry/reslice-image.mjs +57 -0
- package/esm2022/lib/geometry/section.mjs +215 -0
- package/esm2022/lib/implementations/napari-js/napari-loading-badge.mjs +11 -7
- package/esm2022/lib/implementations/napari-js/napari-loading-state.mjs +20 -3
- package/esm2022/lib/implementations/napari-js/napari-region-mesh-pointer.mjs +100 -0
- package/esm2022/lib/implementations/napari-js/napari-region-overlay.mjs +28 -5
- package/esm2022/lib/implementations/napari-js/napari-scene.mjs +1 -1
- package/esm2022/lib/implementations/napari-js/napari-spatial-hover.mjs +9 -2
- package/esm2022/lib/implementations/napari-js/napari-tool-bridge.mjs +5 -2
- package/esm2022/lib/implementations/napari-js/napari-visualizer.service.mjs +81 -1
- package/esm2022/lib/implementations/napari-js/napari-volume-region-meshes.mjs +129 -0
- package/esm2022/lib/implementations/napari-js/napari-volume-scene.mjs +115 -4
- package/esm2022/lib/implementations/napari-js/napari-volume-slice-planes.mjs +103 -0
- package/esm2022/lib/implementations/napari-js/region-overlay/region-svg-renderer.mjs +15 -3
- package/esm2022/lib/implementations/osd/openseadragon-viewer-options.mjs +18 -2
- package/esm2022/lib/implementations/osd/openseadragon-visualizer.service.mjs +9 -1
- package/esm2022/lib/implementations/osd/osd-region-overlay-draw.mjs +18 -7
- package/esm2022/lib/implementations/osd/osd-region-overlay.mjs +38 -8
- package/esm2022/lib/implementations/osd/osd-tile-loading.mjs +71 -0
- package/esm2022/lib/implementations/osd/osd-viewer-like.mjs +1 -1
- package/esm2022/lib/implementations/osd/slice-cache.mjs +35 -6
- package/esm2022/lib/implementations/tile-server/tile-protocol.mjs +1 -1
- package/esm2022/lib/models/class-preset.mjs +1 -1
- package/esm2022/lib/models/polygon-factory.mjs +17 -1
- package/esm2022/lib/models/region-geojson.mjs +44 -6
- package/esm2022/lib/models/region.mjs +1 -1
- package/esm2022/lib/region-editor/class-tree/class-tree.component.mjs +156 -0
- package/esm2022/lib/region-editor/class-tree/class-tree.mjs +108 -0
- package/esm2022/lib/region-editor/classes-panel/classes-panel.component.mjs +77 -13
- package/esm2022/lib/region-editor/region-editor.component.mjs +670 -42
- package/esm2022/lib/region-editor/region-metrics.mjs +20 -2
- package/esm2022/lib/region-editor/region-persistence.service.mjs +44 -10
- package/esm2022/lib/region-editor/region-table/region-table.component.mjs +24 -8
- package/esm2022/lib/region-import/label-classes.mjs +149 -0
- package/esm2022/lib/region-import/label-volume.mjs +194 -0
- package/esm2022/lib/region-import/region-import.mjs +71 -0
- package/esm2022/lib/region-overlay/region-geometry.mjs +3 -3
- package/esm2022/lib/region-overlay/region-source-layer.mjs +378 -0
- package/esm2022/lib/region-overlay/region-style.mjs +97 -0
- package/esm2022/lib/region-source/http-region-source.mjs +104 -0
- package/esm2022/lib/region-source/region-source-ops.mjs +53 -0
- package/esm2022/lib/region-source/region-source-worker.mjs +10 -0
- package/esm2022/lib/region-source/region-source.mjs +67 -0
- package/esm2022/lib/region-source/region-tiles.mjs +708 -0
- package/esm2022/lib/region-source/worker-region-source.mjs +229 -0
- package/esm2022/lib/routing-visualizer.service.mjs +510 -22
- package/esm2022/lib/section-pane/section-pane.component.mjs +299 -0
- package/esm2022/lib/store/class-color.util.mjs +10 -5
- package/esm2022/lib/store/class-signatures.mjs +63 -0
- package/esm2022/lib/store/region-scope-cache.mjs +5 -1
- package/esm2022/lib/store/region-source-scope.mjs +186 -0
- package/esm2022/lib/store/region-store.service.mjs +774 -12
- package/esm2022/lib/store/visualizer-store.service.mjs +33 -6
- package/esm2022/lib/toolbar/region-tools/region-tools.component.mjs +8 -2
- package/esm2022/lib/toolbar/stack-controls/stack-controls.component.mjs +55 -15
- package/esm2022/lib/toolbar/toolbar.component.mjs +19 -5
- package/esm2022/lib/visualizer/region-load.mjs +67 -4
- package/esm2022/lib/visualizer/volume-sections.mjs +175 -0
- package/esm2022/lib/visualizer.component.mjs +155 -7
- package/fesm2022/{jax-data-science-sci-image-visualizer-jax-data-science-sci-image-visualizer-Csxlnq7I.mjs → jax-data-science-sci-image-visualizer-jax-data-science-sci-image-visualizer-BELcx0jv.mjs} +9851 -2904
- package/fesm2022/jax-data-science-sci-image-visualizer-jax-data-science-sci-image-visualizer-BELcx0jv.mjs.map +1 -0
- package/fesm2022/{jax-data-science-sci-image-visualizer-onnx-sam-session-Bkujqg7m.mjs → jax-data-science-sci-image-visualizer-onnx-sam-session-DEDSm_NL.mjs} +4 -4
- package/fesm2022/{jax-data-science-sci-image-visualizer-onnx-sam-session-Bkujqg7m.mjs.map → jax-data-science-sci-image-visualizer-onnx-sam-session-DEDSm_NL.mjs.map} +1 -1
- package/fesm2022/jax-data-science-sci-image-visualizer-region-source-worker-CAqBjM5L.mjs +12 -0
- package/fesm2022/jax-data-science-sci-image-visualizer-region-source-worker-CAqBjM5L.mjs.map +1 -0
- package/fesm2022/jax-data-science-sci-image-visualizer.mjs +3 -3
- package/fesm2022/region-source.worker.js +1067 -0
- package/index.d.ts +12 -0
- package/lib/contracts/image.contract.d.ts +4 -0
- package/lib/contracts/ports/region-io.port.d.ts +24 -0
- package/lib/contracts/region-editor-api.contract.d.ts +102 -0
- package/lib/contracts/region-store.contract.d.ts +22 -0
- package/lib/contracts/section-view.contract.d.ts +44 -0
- package/lib/contracts/visualizer.contract.d.ts +10 -0
- package/lib/contracts/viz-config.d.ts +8 -0
- package/lib/geometry/loft.d.ts +22 -0
- package/lib/geometry/polylabel.d.ts +23 -0
- package/lib/geometry/reconstruct.d.ts +54 -0
- package/lib/geometry/reslice-image.d.ts +33 -0
- package/lib/geometry/section.d.ts +52 -0
- package/lib/implementations/napari-js/napari-loading-badge.d.ts +4 -2
- package/lib/implementations/napari-js/napari-loading-state.d.ts +8 -1
- package/lib/implementations/napari-js/napari-region-mesh-pointer.d.ts +32 -0
- package/lib/implementations/napari-js/napari-region-overlay.d.ts +6 -1
- package/lib/implementations/napari-js/napari-scene.d.ts +33 -0
- package/lib/implementations/napari-js/napari-spatial-hover.d.ts +3 -1
- package/lib/implementations/napari-js/napari-visualizer.service.d.ts +48 -0
- package/lib/implementations/napari-js/napari-volume-region-meshes.d.ts +66 -0
- package/lib/implementations/napari-js/napari-volume-scene.d.ts +45 -1
- package/lib/implementations/napari-js/napari-volume-slice-planes.d.ts +43 -0
- package/lib/implementations/osd/openseadragon-viewer-options.d.ts +2 -0
- package/lib/implementations/osd/openseadragon-visualizer.service.d.ts +2 -0
- package/lib/implementations/osd/osd-region-overlay-draw.d.ts +4 -3
- package/lib/implementations/osd/osd-region-overlay.d.ts +10 -3
- package/lib/implementations/osd/osd-tile-loading.d.ts +43 -0
- package/lib/implementations/osd/osd-viewer-like.d.ts +14 -0
- package/lib/implementations/osd/slice-cache.d.ts +13 -3
- package/lib/implementations/tile-server/tile-protocol.d.ts +3 -0
- package/lib/models/class-preset.d.ts +7 -0
- package/lib/models/polygon-factory.d.ts +5 -0
- package/lib/models/region-geojson.d.ts +40 -0
- package/lib/models/region.d.ts +19 -0
- package/lib/region-editor/class-tree/class-tree.component.d.ts +78 -0
- package/lib/region-editor/class-tree/class-tree.d.ts +31 -0
- package/lib/region-editor/classes-panel/classes-panel.component.d.ts +36 -6
- package/lib/region-editor/region-editor.component.d.ts +159 -17
- package/lib/region-editor/region-metrics.d.ts +8 -0
- package/lib/region-editor/region-persistence.service.d.ts +17 -5
- package/lib/region-editor/region-table/region-table.component.d.ts +10 -4
- package/lib/region-import/label-classes.d.ts +39 -0
- package/lib/region-import/label-volume.d.ts +31 -0
- package/lib/region-import/region-import.d.ts +46 -0
- package/lib/region-overlay/region-geometry.d.ts +4 -3
- package/lib/region-overlay/region-source-layer.d.ts +96 -0
- package/lib/region-overlay/region-style.d.ts +52 -0
- package/lib/region-source/http-region-source.d.ts +45 -0
- package/lib/region-source/region-source-ops.d.ts +89 -0
- package/lib/region-source/region-source-worker.d.ts +7 -0
- package/lib/region-source/region-source.d.ts +82 -0
- package/lib/region-source/region-tiles.d.ts +289 -0
- package/lib/region-source/worker-region-source.d.ts +65 -0
- package/lib/routing-visualizer.service.d.ts +168 -1
- package/lib/section-pane/section-pane.component.d.ts +47 -0
- package/lib/store/class-color.util.d.ts +6 -3
- package/lib/store/class-signatures.d.ts +11 -0
- package/lib/store/region-scope-cache.d.ts +2 -0
- package/lib/store/region-source-scope.d.ts +74 -0
- package/lib/store/region-store.service.d.ts +216 -2
- package/lib/store/visualizer-store.service.d.ts +10 -0
- package/lib/toolbar/region-tools/region-tools.component.d.ts +3 -1
- package/lib/toolbar/stack-controls/stack-controls.component.d.ts +20 -9
- package/lib/toolbar/toolbar.component.d.ts +9 -2
- package/lib/visualizer/region-load.d.ts +23 -4
- package/lib/visualizer/volume-sections.d.ts +64 -0
- package/lib/visualizer.component.d.ts +40 -0
- package/package.json +2 -2
- package/src/lib/assets/slice.svg +23 -0
- package/fesm2022/jax-data-science-sci-image-visualizer-jax-data-science-sci-image-visualizer-Csxlnq7I.mjs.map +0 -1
|
@@ -1,6 +1,7 @@
|
|
|
1
1
|
import { Polygon, Rectangle } from '../../../models/region';
|
|
2
2
|
import { regionBBox, ringHandles, ringOf } from '../../../region-overlay/region-geometry';
|
|
3
3
|
import { SvgRegionRenderer, svgEl } from '../../../region-overlay/svg-region-renderer';
|
|
4
|
+
import { applyPaint, isFilled, placeInsideLabel, regionLabelSpots, shapePaint, } from '../../../region-overlay/region-style';
|
|
4
5
|
const SVG_NS = 'http://www.w3.org/2000/svg';
|
|
5
6
|
/** Rendered handle size (screen px). */
|
|
6
7
|
export const HANDLE_SIZE = 7;
|
|
@@ -20,7 +21,7 @@ export class NapariRegionSvgRenderer {
|
|
|
20
21
|
rectElement: 'rect',
|
|
21
22
|
styleShape: (el, region, selected) => this.style(el, this.strokeOf(region), selected),
|
|
22
23
|
decorate: (region, _i, _selected, layer) => this.drawLabel(region, layer),
|
|
23
|
-
skip: (region) => !!region.isProfile?.(),
|
|
24
|
+
skip: (region) => !!region.isProfile?.() || store.isClassHidden(region.label),
|
|
24
25
|
});
|
|
25
26
|
}
|
|
26
27
|
/** Follow the camera: one transform attribute plus the screen-space elements. */
|
|
@@ -71,9 +72,15 @@ export class NapariRegionSvgRenderer {
|
|
|
71
72
|
}
|
|
72
73
|
/** Draw a region's classification label at its top-left, when labels are enabled (matches OSD). */
|
|
73
74
|
drawLabel(region, layer) {
|
|
74
|
-
if (!this.store.getShowShapeLabel() || region.isProfile?.())
|
|
75
|
+
if (!this.store.getShowShapeLabel() || region.isProfile?.() || this.store.isLabelCovered(region.label))
|
|
75
76
|
return;
|
|
76
77
|
const label = region.label;
|
|
78
|
+
// The filled (atlas) look labels each part inside it, where it fits.
|
|
79
|
+
if (label && isFilled(this.store.getRegionStyle())) {
|
|
80
|
+
for (const spot of regionLabelSpots(region))
|
|
81
|
+
placeInsideLabel(layer, label, spot);
|
|
82
|
+
return;
|
|
83
|
+
}
|
|
77
84
|
const bb = label ? regionBBox(region) : null;
|
|
78
85
|
if (!label || !bb)
|
|
79
86
|
return;
|
|
@@ -147,6 +154,11 @@ export class NapariRegionSvgRenderer {
|
|
|
147
154
|
layer.at(dot, handle[0], handle[1], { x: 'cx', y: 'cy' });
|
|
148
155
|
}
|
|
149
156
|
style(el, stroke, isSelected) {
|
|
157
|
+
const style = this.store.getRegionStyle();
|
|
158
|
+
if (isFilled(style)) {
|
|
159
|
+
applyPaint(el, shapePaint(stroke, isSelected, style));
|
|
160
|
+
return;
|
|
161
|
+
}
|
|
150
162
|
el.setAttribute('stroke', stroke);
|
|
151
163
|
el.setAttribute('stroke-width', isSelected ? '4' : '2');
|
|
152
164
|
el.setAttribute('fill', isSelected ? stroke : 'none');
|
|
@@ -179,4 +191,4 @@ export class NapariRegionSvgRenderer {
|
|
|
179
191
|
el.setAttribute('vector-effect', 'non-scaling-stroke');
|
|
180
192
|
}
|
|
181
193
|
}
|
|
182
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicmVnaW9uLXN2Zy1yZW5kZXJlci5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL3NyYy9saWIvaW1wbGVtZW50YXRpb25zL25hcGFyaS1qcy9yZWdpb24tb3ZlcmxheS9yZWdpb24tc3ZnLXJlbmRlcmVyLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxPQUFPLEVBQUUsU0FBUyxFQUFVLE1BQU0sd0JBQXdCLENBQUM7QUFFcEUsT0FBTyxFQUFFLFVBQVUsRUFBRSxXQUFXLEVBQUUsTUFBTSxFQUFFLE1BQU0seUNBQXlDLENBQUM7QUFDMUYsT0FBTyxFQUF1QixpQkFBaUIsRUFBRSxLQUFLLEVBQUUsTUFBTSw2Q0FBNkMsQ0FBQztBQUU1RyxNQUFNLE1BQU0sR0FBRyw0QkFBNEIsQ0FBQztBQUM1Qyx3Q0FBd0M7QUFDeEMsTUFBTSxDQUFDLE1BQU0sV0FBVyxHQUFHLENBQUMsQ0FBQztBQWdCN0I7Ozs7O0dBS0c7QUFDSCxNQUFNLE9BQU8sdUJBQXVCO0lBS2xDLFlBQ21CLEdBQWtCLEVBQ2xCLEtBQWtCO1FBRGxCLFFBQUcsR0FBSCxHQUFHLENBQWU7UUFDbEIsVUFBSyxHQUFMLEtBQUssQ0FBYTtRQUxyQyxnR0FBZ0c7UUFDeEYsY0FBUyxHQUEwQixJQUFJLENBQUM7UUFNOUMsSUFBSSxDQUFDLFFBQVEsR0FBRyxJQUFJLGlCQUFpQixDQUFDLEdBQUcsRUFBRTtZQUN6QyxXQUFXLEVBQUUsTUFBTTtZQUNuQixVQUFVLEVBQUUsQ0FBQyxFQUFFLEVBQUUsTUFBTSxFQUFFLFFBQVEsRUFBRSxFQUFFLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxFQUFFLEVBQUUsSUFBSSxDQUFDLFFBQVEsQ0FBQyxNQUFNLENBQUMsRUFBRSxRQUFRLENBQUM7WUFDckYsUUFBUSxFQUFFLENBQUMsTUFBTSxFQUFFLEVBQUUsRUFBRSxTQUFTLEVBQUUsS0FBSyxFQUFFLEVBQUUsQ0FBQyxJQUFJLENBQUMsU0FBUyxDQUFDLE1BQU0sRUFBRSxLQUFLLENBQUM7WUFDekUsSUFBSSxFQUFFLENBQUMsTUFBTSxFQUFFLEVBQUUsQ0FBQyxDQUFDLENBQUMsTUFBTSxDQUFDLFNBQVMsRUFBRSxFQUFFO1NBQ3pDLENBQUMsQ0FBQztJQUNMLENBQUM7SUFFRCxpRkFBaUY7SUFDakYsU0FBUyxDQUFDLE1BQWM7UUFDdEIsSUFBSSxDQUFDLFFBQVEsQ0FBQyxTQUFTLENBQUMsTUFBTSxDQUFDLENBQUM7SUFDbEMsQ0FBQztJQUVELDBEQUEwRDtJQUMxRCxNQUFNLENBQUMsT0FBMEIsRUFBRSxRQUEyQjtRQUM1RCxJQUFJLENBQUMsUUFBUSxDQUFDLE1BQU0sQ0FBQyxPQUFPLEVBQUUsUUFBUSxDQUFDLENBQUM7SUFDMUMsQ0FBQztJQUVELDBGQUEwRjtJQUMxRixhQUFhLENBQUMsT0FBMEIsRUFBRSxRQUEyQixFQUFFLEtBQWtCO1FBQ3ZGLElBQUksQ0FBQyxRQUFRLENBQUMsYUFBYSxDQUFDLENBQUMsS0FBSyxFQUFFLEVBQUU7WUFDcEMsS0FBSyxNQUFNLENBQUMsSUFBSSxRQUFRLEVBQUUsQ0FBQztnQkFDekIsTUFBTSxNQUFNLEdBQUcsT0FBTyxDQUFDLENBQUMsQ0FBQyxDQUFDO2dCQUMxQixJQUFJLE1BQU0sSUFBSSxDQUFDLE1BQU0sQ0FBQyxTQUFTLEVBQUUsRUFBRTtvQkFBRSxJQUFJLENBQUMsV0FBVyxDQUFDLE1BQU0sRUFBRSxLQUFLLENBQUMsQ0FBQztZQUN2RSxDQUFDO1lBQ0QsSUFBSSxDQUFDLFNBQVMsQ0FBQyxLQUFLLEVBQUUsS0FBSyxDQUFDLENBQUM7UUFDL0IsQ0FBQyxDQUFDLENBQUM7SUFDTCxDQUFDO0lBRUQsK0ZBQStGO0lBQy9GLFdBQVcsQ0FBQyxFQUFVLEVBQUUsRUFBVSxFQUFFLEVBQVUsRUFBRSxFQUFVO1FBQ3hELElBQUksQ0FBQyxJQUFJLENBQUMsU0FBUyxJQUFJLENBQUMsSUFBSSxDQUFDLFNBQVMsQ0FBQyxVQUFVLEVBQUUsQ0FBQztZQUNsRCxJQUFJLENBQUMsU0FBUyxHQUFHLFFBQVEsQ0FBQyxlQUFlLENBQUMsTUFBTSxFQUFFLE1BQU0sQ0FBQyxDQUFDO1lBQzFELElBQUksQ0FBQyxTQUFTLENBQUMsWUFBWSxDQUFDLFFBQVEsRUFBRSxTQUFTLENBQUMsQ0FBQztZQUNqRCxJQUFJLENBQUMsU0FBUyxDQUFDLFlBQVksQ0FBQyxjQUFjLEVBQUUsR0FBRyxDQUFDLENBQUM7WUFDakQsSUFBSSxDQUFDLFNBQVMsQ0FBQyxZQUFZLENBQUMsa0JBQWtCLEVBQUUsS0FBSyxDQUFDLENBQUM7WUFDdkQsSUFBSSxDQUFDLFNBQVMsQ0FBQyxZQUFZLENBQUMsTUFBTSxFQUFFLFNBQVMsQ0FBQyxDQUFDO1lBQy9DLElBQUksQ0FBQyxTQUFTLENBQUMsWUFBWSxDQUFDLGNBQWMsRUFBRSxNQUFNLENBQUMsQ0FBQztZQUNwRCxJQUFJLENBQUMsU0FBUyxDQUFDLFlBQVksQ0FBQyxlQUFlLEVBQUUsb0JBQW9CLENBQUMsQ0FBQztZQUNuRSxJQUFJLENBQUMsR0FBRyxDQUFDLFdBQVcsQ0FBQyxJQUFJLENBQUMsU0FBUyxDQUFDLENBQUM7UUFDdkMsQ0FBQztRQUNELElBQUksQ0FBQyxTQUFTLENBQUMsWUFBWSxDQUFDLEdBQUcsRUFBRSxHQUFHLEVBQUUsRUFBRSxDQUFDLENBQUM7UUFDMUMsSUFBSSxDQUFDLFNBQVMsQ0FBQyxZQUFZLENBQUMsR0FBRyxFQUFFLEdBQUcsRUFBRSxFQUFFLENBQUMsQ0FBQztRQUMxQyxJQUFJLENBQUMsU0FBUyxDQUFDLFlBQVksQ0FBQyxPQUFPLEVBQUUsR0FBRyxJQUFJLENBQUMsR0FBRyxDQUFDLEVBQUUsR0FBRyxFQUFFLENBQUMsRUFBRSxDQUFDLENBQUM7UUFDN0QsSUFBSSxDQUFDLFNBQVMsQ0FBQyxZQUFZLENBQUMsUUFBUSxFQUFFLEdBQUcsSUFBSSxDQUFDLEdBQUcsQ0FBQyxFQUFFLEdBQUcsRUFBRSxDQUFDLEVBQUUsQ0FBQyxDQUFDO0lBQ2hFLENBQUM7SUFFRCwrQ0FBK0M7SUFDL0MsWUFBWTtRQUNWLElBQUksSUFBSSxDQUFDLFNBQVMsRUFBRSxVQUFVO1lBQUUsSUFBSSxDQUFDLFNBQVMsQ0FBQyxVQUFVLENBQUMsV0FBVyxDQUFDLElBQUksQ0FBQyxTQUFTLENBQUMsQ0FBQztRQUN0RixJQUFJLENBQUMsU0FBUyxHQUFHLElBQUksQ0FBQztJQUN4QixDQUFDO0lBRUQsaUNBQWlDO0lBQ3pCLFFBQVEsQ0FBQyxNQUFjO1FBQzdCLE9BQU8sTUFBTSxDQUFDLEtBQUssSUFBSSxJQUFJLENBQUMsS0FBSyxDQUFDLGFBQWEsRUFBRSxJQUFJLFNBQVMsQ0FBQztJQUNqRSxDQUFDO0lBRUQsbUdBQW1HO0lBQzNGLFNBQVMsQ0FBQyxNQUFjLEVBQUUsS0FBa0I7UUFDbEQsSUFBSSxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsaUJBQWlCLEVBQUUsSUFBSSxNQUFNLENBQUMsU0FBUyxFQUFFLEVBQUU7WUFBRSxPQUFPO1FBQ3BFLE1BQU0sS0FBSyxHQUFHLE1BQU0sQ0FBQyxLQUFLLENBQUM7UUFDM0IsTUFBTSxFQUFFLEdBQUcsS0FBSyxDQUFDLENBQUMsQ0FBQyxVQUFVLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQztRQUM3QyxJQUFJLENBQUMsS0FBSyxJQUFJLENBQUMsRUFBRTtZQUFFLE9BQU87UUFDMUIsTUFBTSxJQUFJLEdBQUcsS0FBSyxDQUFDLE1BQU0sQ0FBQyxDQUFDO1FBQzNCLElBQUksQ0FBQyxZQUFZLENBQUMsTUFBTSxFQUFFLE1BQU0sQ0FBQyxDQUFDO1FBQ2xDLElBQUksQ0FBQyxZQUFZLENBQUMsUUFBUSxFQUFFLE1BQU0sQ0FBQyxDQUFDO1FBQ3BDLElBQUksQ0FBQyxZQUFZLENBQUMsY0FBYyxFQUFFLEdBQUcsQ0FBQyxDQUFDO1FBQ3ZDLElBQUksQ0FBQyxZQUFZLENBQUMsYUFBYSxFQUFFLFFBQVEsQ0FBQyxDQUFDO1FBQzNDLElBQUksQ0FBQyxZQUFZLENBQUMsTUFBTSxFQUFFLGlCQUFpQixDQUFDLENBQUM7UUFDN0MsSUFBSSxDQUFDLFlBQVksQ0FBQyxnQkFBZ0IsRUFBRSxNQUFNLENBQUMsQ0FBQztRQUM1QyxJQUFJLENBQUMsV0FBVyxHQUFHLEtBQUssQ0FBQztRQUN6QixLQUFLLENBQUMsRUFBRSxDQUFDLElBQUksRUFBRSxFQUFFLENBQUMsRUFBRSxFQUFFLEVBQUUsQ0FBQyxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDO0lBQzNDLENBQUM7SUFFRCxzRkFBc0Y7SUFDOUUsV0FBVyxDQUFDLE1BQWMsRUFBRSxLQUFrQjtRQUNwRCxNQUFNLENBQUMsR0FBRyxNQUFNLENBQUMsTUFBTSxDQUFDO1FBQ3hCLElBQUksQ0FBQyxDQUFDO1lBQUUsT0FBTztRQUNmLE1BQU0sTUFBTSxHQUFHLElBQUksQ0FBQyxRQUFRLENBQUMsTUFBTSxDQUFDLENBQUM7UUFDckMsTUFBTSxNQUFNLEdBQUcsQ0FBQyxJQUFZLEVBQUUsSUFBWSxFQUFRLEVBQUU7WUFDbEQsTUFBTSxFQUFFLEdBQUcsS0FBSyxDQUFDLE1BQU0sQ0FBQyxDQUFDO1lBQ3pCLEVBQUUsQ0FBQyxZQUFZLENBQUMsT0FBTyxFQUFFLEdBQUcsV0FBVyxFQUFFLENBQUMsQ0FBQztZQUMzQyxFQUFFLENBQUMsWUFBWSxDQUFDLFFBQVEsRUFBRSxHQUFHLFdBQVcsRUFBRSxDQUFDLENBQUM7WUFDNUMsRUFBRSxDQUFDLFlBQVksQ0FBQyxNQUFNLEVBQUUsTUFBTSxDQUFDLENBQUM7WUFDaEMsRUFBRSxDQUFDLFlBQVksQ0FBQyxRQUFRLEVBQUUsTUFBTSxDQUFDLENBQUM7WUFDbEMsRUFBRSxDQUFDLFlBQVksQ0FBQyxjQUFjLEVBQUUsS0FBSyxDQUFDLENBQUM7WUFDdkMsS0FBSyxDQUFDLEVBQUUsQ0FBQyxFQUFFLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxFQUFFLEVBQUUsRUFBRSxDQUFDLFdBQVcsR0FBRyxDQUFDLEVBQUUsRUFBRSxFQUFFLENBQUMsV0FBVyxHQUFHLENBQUMsRUFBRSxDQUFDLENBQUM7UUFDM0UsQ0FBQyxDQUFDO1FBQ0YsSUFBSSxDQUFDLFlBQVksU0FBUyxFQUFFLENBQUM7WUFDM0IsTUFBTSxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO1lBQ2pCLE1BQU0sQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxLQUFLLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO1lBQzNCLE1BQU0sQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxDQUFDO1lBQzVCLE1BQU0sQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxLQUFLLEVBQUUsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsTUFBTSxDQUFDLENBQUM7UUFDeEMsQ0FBQzthQUFNLElBQUksQ0FBQyxZQUFZLE9BQU8sRUFBRSxDQUFDO1lBQ2hDLEtBQUssSUFBSSxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsR0FBRyxDQUFDLENBQUMsT0FBTyxFQUFFLENBQUMsRUFBRTtnQkFBRSxNQUFNLENBQUMsQ0FBQyxDQUFDLE9BQU8sQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsT0FBTyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7WUFDdkUsS0FBSyxNQUFNLElBQUksSUFBSSxDQUFDLENBQUMsS0FBSyxJQUFJLEVBQUU7Z0JBQUUsS0FBSyxNQUFNLENBQUMsRUFBRSxFQUFFLEVBQUUsQ0FBQyxJQUFJLElBQUk7b0JBQUUsTUFBTSxDQUFDLEVBQUUsRUFBRSxFQUFFLENBQUMsQ0FBQztZQUM5RSx5RkFBeUY7WUFDekYsMEZBQTBGO1lBQzFGLGlFQUFpRTtZQUNqRSxJQUFJLENBQUMsQ0FBQyxNQUFNLEVBQUUsQ0FBQztnQkFDYixLQUFLLElBQUksSUFBSSxHQUFHLENBQUMsQ0FBQyxFQUFFLElBQUksR0FBRyxDQUFDLENBQUMsQ0FBQyxLQUFLLEVBQUUsTUFBTSxJQUFJLENBQUMsQ0FBQyxFQUFFLElBQUksRUFBRSxFQUFFLENBQUM7b0JBQzFELE1BQU0sRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEdBQUcsTUFBTSxDQUFDLENBQUMsRUFBRSxJQUFJLENBQUMsQ0FBQztvQkFDbkMsV0FBVyxDQUFDLENBQUMsRUFBRSxJQUFJLENBQUMsQ0FBQyxPQUFPLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxFQUFFLEVBQUU7d0JBQ3BDLElBQUksQ0FBQyxDQUFDLE1BQU07NEJBQUUsSUFBSSxDQUFDLGdCQUFnQixDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsRUFBRSxFQUFFLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLEdBQUcsRUFBRSxNQUFNLEVBQUUsS0FBSyxDQUFDLENBQUM7d0JBQ3hFLElBQUksQ0FBQyxDQUFDLEtBQUs7NEJBQUUsSUFBSSxDQUFDLGdCQUFnQixDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsRUFBRSxFQUFFLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsRUFBRSxNQUFNLEVBQUUsS0FBSyxDQUFDLENBQUM7b0JBQ3hFLENBQUMsQ0FBQyxDQUFDO2dCQUNMLENBQUM7WUFDSCxDQUFDO1FBQ0gsQ0FBQztJQUNILENBQUM7SUFFRDs0RUFDd0U7SUFDaEUsZ0JBQWdCLENBQ3RCLEVBQVUsRUFDVixFQUFVLEVBQ1YsTUFBd0IsRUFDeEIsTUFBYyxFQUNkLEtBQWtCO1FBRWxCLElBQUksTUFBTSxDQUFDLENBQUMsQ0FBQyxLQUFLLEVBQUUsSUFBSSxNQUFNLENBQUMsQ0FBQyxDQUFDLEtBQUssRUFBRTtZQUFFLE9BQU87UUFDakQsTUFBTSxJQUFJLEdBQUcsS0FBSyxDQUFDLElBQUksQ0FBQyxFQUFFLEVBQUUsRUFBRSxFQUFFLE1BQU0sQ0FBQyxDQUFDLENBQUMsRUFBRSxNQUFNLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztRQUN0RCxJQUFJLENBQUMsWUFBWSxDQUFDLFFBQVEsRUFBRSxNQUFNLENBQUMsQ0FBQztRQUNwQyxJQUFJLENBQUMsWUFBWSxDQUFDLGNBQWMsRUFBRSxHQUFHLENBQUMsQ0FBQztRQUN2QyxJQUFJLENBQUMsWUFBWSxDQUFDLGdCQUFnQixFQUFFLEtBQUssQ0FBQyxDQUFDO1FBQzNDLE1BQU0sR0FBRyxHQUFHLEtBQUssQ0FBQyxRQUFRLENBQUMsQ0FBQztRQUM1QixHQUFHLENBQUMsWUFBWSxDQUFDLEdBQUcsRUFBRSxHQUFHLFdBQVcsR0FBRyxDQUFDLEVBQUUsQ0FBQyxDQUFDO1FBQzVDLEdBQUcsQ0FBQyxZQUFZLENBQUMsTUFBTSxFQUFFLE1BQU0sQ0FBQyxDQUFDO1FBQ2pDLEdBQUcsQ0FBQyxZQUFZLENBQUMsUUFBUSxFQUFFLE1BQU0sQ0FBQyxDQUFDO1FBQ25DLEdBQUcsQ0FBQyxZQUFZLENBQUMsY0FBYyxFQUFFLEdBQUcsQ0FBQyxDQUFDO1FBQ3RDLEtBQUssQ0FBQyxFQUFFLENBQUMsR0FBRyxFQUFFLE1BQU0sQ0FBQyxDQUFDLENBQUMsRUFBRSxNQUFNLENBQUMsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLEVBQUUsSUFBSSxFQUFFLENBQUMsRUFBRSxJQUFJLEVBQUUsQ0FBQyxDQUFDO0lBQzVELENBQUM7SUFFTyxLQUFLLENBQUMsRUFBYyxFQUFFLE1BQWMsRUFBRSxVQUFtQjtRQUMvRCxFQUFFLENBQUMsWUFBWSxDQUFDLFFBQVEsRUFBRSxNQUFNLENBQUMsQ0FBQztRQUNsQyxFQUFFLENBQUMsWUFBWSxDQUFDLGNBQWMsRUFBRSxVQUFVLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUM7UUFDeEQsRUFBRSxDQUFDLFlBQVksQ0FBQyxNQUFNLEVBQUUsVUFBVSxDQUFDLENBQUMsQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxDQUFDO1FBQ3RELEVBQUUsQ0FBQyxZQUFZLENBQUMsY0FBYyxFQUFFLFVBQVUsQ0FBQyxDQUFDLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQztJQUM3RCxDQUFDO0lBRUQscURBQXFEO0lBQzdDLFNBQVMsQ0FBQyxLQUFrQixFQUFFLEtBQWtCO1FBQ3RELElBQUksS0FBSyxDQUFDLElBQUksRUFBRSxDQUFDO1lBQ2YsTUFBTSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxHQUFHLEtBQUssQ0FBQyxJQUFJLENBQUM7WUFDdEMsTUFBTSxFQUFFLEdBQUcsS0FBSyxDQUFDLE1BQU0sQ0FBQyxDQUFDO1lBQ3pCLEtBQUssQ0FBQyxLQUFLLENBQUMsRUFBRSxFQUFFLENBQUMsQ0FBQyxFQUFFLE9BQU8sRUFBRSxFQUFFO2dCQUM3QixNQUFNLENBQUMsRUFBRSxFQUFFLEVBQUUsQ0FBQyxHQUFHLE9BQU8sQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLEVBQUUsRUFBRSxFQUFFLENBQUMsRUFBRSxJQUFJLENBQUMsR0FBRyxDQUFDLEVBQUUsRUFBRSxFQUFFLENBQUMsQ0FBQyxDQUFDO2dCQUM3RCxNQUFNLENBQUMsRUFBRSxFQUFFLEVBQUUsQ0FBQyxHQUFHLE9BQU8sQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLEVBQUUsRUFBRSxFQUFFLENBQUMsRUFBRSxJQUFJLENBQUMsR0FBRyxDQUFDLEVBQUUsRUFBRSxFQUFFLENBQUMsQ0FBQyxDQUFDO2dCQUM3RCxDQUFDLENBQUMsWUFBWSxDQUFDLEdBQUcsRUFBRSxHQUFHLEVBQUUsRUFBRSxDQUFDLENBQUM7Z0JBQzdCLENBQUMsQ0FBQyxZQUFZLENBQUMsR0FBRyxFQUFFLEdBQUcsRUFBRSxFQUFFLENBQUMsQ0FBQztnQkFDN0IsQ0FBQyxDQUFDLFlBQVksQ0FBQyxPQUFPLEVBQUUsR0FBRyxJQUFJLENBQUMsR0FBRyxDQUFDLEVBQUUsR0FBRyxFQUFFLENBQUMsRUFBRSxDQUFDLENBQUM7Z0JBQ2hELENBQUMsQ0FBQyxZQUFZLENBQUMsUUFBUSxFQUFFLEdBQUcsSUFBSSxDQUFDLEdBQUcsQ0FBQyxFQUFFLEdBQUcsRUFBRSxDQUFDLEVBQUUsQ0FBQyxDQUFDO1lBQ25ELENBQUMsQ0FBQyxDQUFDO1lBQ0gsSUFBSSxDQUFDLFVBQVUsQ0FBQyxFQUFFLENBQUMsQ0FBQztRQUN0QixDQUFDO1FBQ0QsSUFBSSxLQUFLLENBQUMsSUFBSSxJQUFJLEtBQUssQ0FBQyxJQUFJLENBQUMsTUFBTSxFQUFFLENBQUM7WUFDcEMsSUFBSSxDQUFDLFVBQVUsQ0FDYixLQUFLLENBQUMsSUFBSSxDQUNSLFVBQVUsRUFDVixLQUFLLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FDdkMsQ0FDRixDQUFDO1FBQ0osQ0FBQztJQUNILENBQUM7SUFFTyxVQUFVLENBQUMsRUFBYztRQUMvQixFQUFFLENBQUMsWUFBWSxDQUFDLFFBQVEsRUFBRSxJQUFJLENBQUMsS0FBSyxDQUFDLGFBQWEsRUFBRSxJQUFJLFNBQVMsQ0FBQyxDQUFDO1FBQ25FLEVBQUUsQ0FBQyxZQUFZLENBQUMsY0FBYyxFQUFFLEdBQUcsQ0FBQyxDQUFDO1FBQ3JDLEVBQUUsQ0FBQyxZQUFZLENBQUMsa0JBQWtCLEVBQUUsS0FBSyxDQUFDLENBQUM7UUFDM0MsRUFBRSxDQUFDLFlBQVksQ0FBQyxNQUFNLEVBQUUsTUFBTSxDQUFDLENBQUM7UUFDaEMsRUFBRSxDQUFDLFlBQVksQ0FBQyxlQUFlLEVBQUUsb0JBQW9CLENBQUMsQ0FBQztJQUN6RCxDQUFDO0NBQ0YiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBQb2x5Z29uLCBSZWN0YW5nbGUsIFJlZ2lvbiB9IGZyb20gJy4uLy4uLy4uL21vZGVscy9yZWdpb24nO1xuaW1wb3J0IHR5cGUgeyBSZWdpb25TdG9yZSB9IGZyb20gJy4uLy4uLy4uL3N0b3JlL3JlZ2lvbi1zdG9yZS5zZXJ2aWNlJztcbmltcG9ydCB7IHJlZ2lvbkJCb3gsIHJpbmdIYW5kbGVzLCByaW5nT2YgfSBmcm9tICcuLi8uLi8uLi9yZWdpb24tb3ZlcmxheS9yZWdpb24tZ2VvbWV0cnknO1xuaW1wb3J0IHsgQWZmaW5lLCBTY3JlZW5MYXllciwgU3ZnUmVnaW9uUmVuZGVyZXIsIHN2Z0VsIH0gZnJvbSAnLi4vLi4vLi4vcmVnaW9uLW92ZXJsYXkvc3ZnLXJlZ2lvbi1yZW5kZXJlcic7XG5cbmNvbnN0IFNWR19OUyA9ICdodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Zyc7XG4vKiogUmVuZGVyZWQgaGFuZGxlIHNpemUgKHNjcmVlbiBweCkuICovXG5leHBvcnQgY29uc3QgSEFORExFX1NJWkUgPSA3O1xuXG4vKiogQW4gYXhpcy1hbGlnbmVkIGJveCBmcm9tIGEgZHJhZydzIHN0YXJ0IHRvIGl0cyBjdXJyZW50IHBvaW50IChhbnkgb3JkZXIpLiAqL1xuZXhwb3J0IGludGVyZmFjZSBEcmFnQm94IHtcbiAgeDA6IG51bWJlcjtcbiAgeTA6IG51bWJlcjtcbiAgeDE6IG51bWJlcjtcbiAgeTE6IG51bWJlcjtcbn1cblxuLyoqIEEgcmVnaW9uIGJlaW5nIGRyYXduOiBhIHJlY3RhbmdsZSBkcmFnLCBvciBhIGZyZWVoYW5kIC8gY2xpY2stcGxhY2VkIHBhdGguICovXG5leHBvcnQgaW50ZXJmYWNlIFJlZ2lvbkRyYWZ0IHtcbiAgcmVjdDogRHJhZ0JveCB8IG51bGw7XG4gIHBhdGg6IEFycmF5PFtudW1iZXIsIG51bWJlcl0+IHwgbnVsbDtcbn1cblxuLyoqXG4gKiBXaGF0IHRoZSBuYXBhcmkgcmVnaW9uIG92ZXJsYXkgZHJhd3MsIG92ZXIgdGhlIHNoYXJlZCB7QGxpbmsgU3ZnUmVnaW9uUmVuZGVyZXJ9OiB0aGUgcmVnaW9uc1xuICogaW4gd29ybGQgY29vcmRpbmF0ZXMgKHN0eWxlZCBmcm9tIHRoZSBzdG9yZSdzIGNvbG91cnMsIGxhYmVsbGVkIHdoZW4gbGFiZWxzIGFyZSBvbiksIGFuZCBpblxuICogc2NyZWVuIHNwYWNlIHRoZSBzZWxlY3RlZCByZWdpb25zJyBncmFiIGhhbmRsZXMgKGNvcm5lcnMsIHZlcnRpY2VzLCBiw6l6aWVyIGNvbnRyb2wgcG9pbnRzKSxcbiAqIHRoZSBkcmFmdCBiZWluZyBkcmF3biBhbmQgdGhlIHJ1YmJlci1iYW5kIG1hcnF1ZWUuXG4gKi9cbmV4cG9ydCBjbGFzcyBOYXBhcmlSZWdpb25TdmdSZW5kZXJlciB7XG4gIHByaXZhdGUgcmVhZG9ubHkgcmVuZGVyZXI6IFN2Z1JlZ2lvblJlbmRlcmVyO1xuICAvKiogRGVkaWNhdGVkIG1hcnF1ZWUgcmVjdCBlbGVtZW50LCB1cGRhdGVkIGRpcmVjdGx5IGR1cmluZyB0aGUgZHJhZyAobm8gZnVsbCByZWdpb24gcmVkcmF3KS4gKi9cbiAgcHJpdmF0ZSBtYXJxdWVlRWw6IFNWR1JlY3RFbGVtZW50IHwgbnVsbCA9IG51bGw7XG5cbiAgY29uc3RydWN0b3IoXG4gICAgcHJpdmF0ZSByZWFkb25seSBzdmc6IFNWR1NWR0VsZW1lbnQsXG4gICAgcHJpdmF0ZSByZWFkb25seSBzdG9yZTogUmVnaW9uU3RvcmUsXG4gICkge1xuICAgIHRoaXMucmVuZGVyZXIgPSBuZXcgU3ZnUmVnaW9uUmVuZGVyZXIoc3ZnLCB7XG4gICAgICByZWN0RWxlbWVudDogJ3JlY3QnLFxuICAgICAgc3R5bGVTaGFwZTogKGVsLCByZWdpb24sIHNlbGVjdGVkKSA9PiB0aGlzLnN0eWxlKGVsLCB0aGlzLnN0cm9rZU9mKHJlZ2lvbiksIHNlbGVjdGVkKSxcbiAgICAgIGRlY29yYXRlOiAocmVnaW9uLCBfaSwgX3NlbGVjdGVkLCBsYXllcikgPT4gdGhpcy5kcmF3TGFiZWwocmVnaW9uLCBsYXllciksXG4gICAgICBza2lwOiAocmVnaW9uKSA9PiAhIXJlZ2lvbi5pc1Byb2ZpbGU/LigpLFxuICAgIH0pO1xuICB9XG5cbiAgLyoqIEZvbGxvdyB0aGUgY2FtZXJhOiBvbmUgdHJhbnNmb3JtIGF0dHJpYnV0ZSBwbHVzIHRoZSBzY3JlZW4tc3BhY2UgZWxlbWVudHMuICovXG4gIHNldENhbWVyYShhZmZpbmU6IEFmZmluZSk6IHZvaWQge1xuICAgIHRoaXMucmVuZGVyZXIuc2V0Q2FtZXJhKGFmZmluZSk7XG4gIH1cblxuICAvKiogUmVidWlsZCB0aGUgcmVnaW9ucyAod29ybGQgc3BhY2UpIGFuZCB0aGVpciBsYWJlbHMuICovXG4gIHJlbmRlcihyZWdpb25zOiByZWFkb25seSBSZWdpb25bXSwgc2VsZWN0ZWQ6IHJlYWRvbmx5IG51bWJlcltdKTogdm9pZCB7XG4gICAgdGhpcy5yZW5kZXJlci5yZW5kZXIocmVnaW9ucywgc2VsZWN0ZWQpO1xuICB9XG5cbiAgLyoqIFJlYnVpbGQgdGhlIHNjcmVlbi1zcGFjZSBvdmVybGF5IG9ubHk6IHRoZSBzZWxlY3RlZCByZWdpb25zJyBoYW5kbGVzIGFuZCB0aGUgZHJhZnQuICovXG4gIHJlbmRlck92ZXJsYXkocmVnaW9uczogcmVhZG9ubHkgUmVnaW9uW10sIHNlbGVjdGVkOiByZWFkb25seSBudW1iZXJbXSwgZHJhZnQ6IFJlZ2lvbkRyYWZ0KTogdm9pZCB7XG4gICAgdGhpcy5yZW5kZXJlci5yZW5kZXJPdmVybGF5KChsYXllcikgPT4ge1xuICAgICAgZm9yIChjb25zdCBpIG9mIHNlbGVjdGVkKSB7XG4gICAgICAgIGNvbnN0IHJlZ2lvbiA9IHJlZ2lvbnNbaV07XG4gICAgICAgIGlmIChyZWdpb24gJiYgIXJlZ2lvbi5pc1Byb2ZpbGU/LigpKSB0aGlzLmRyYXdIYW5kbGVzKHJlZ2lvbiwgbGF5ZXIpO1xuICAgICAgfVxuICAgICAgdGhpcy5kcmF3RHJhZnQoZHJhZnQsIGxheWVyKTtcbiAgICB9KTtcbiAgfVxuXG4gIC8qKiBTaG93IHRoZSBtYXJxdWVlIG92ZXIgc3ZnLWxvY2FsIGNvcm5lcnMgYChseCwgbHkpYOKAk2AocngsIHJ5KWAsIGNyZWF0aW5nIGl0IG9uIGZpcnN0IHVzZS4gKi9cbiAgc2hvd01hcnF1ZWUobHg6IG51bWJlciwgbHk6IG51bWJlciwgcng6IG51bWJlciwgcnk6IG51bWJlcik6IHZvaWQge1xuICAgIGlmICghdGhpcy5tYXJxdWVlRWwgfHwgIXRoaXMubWFycXVlZUVsLnBhcmVudE5vZGUpIHtcbiAgICAgIHRoaXMubWFycXVlZUVsID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudE5TKFNWR19OUywgJ3JlY3QnKTtcbiAgICAgIHRoaXMubWFycXVlZUVsLnNldEF0dHJpYnV0ZSgnc3Ryb2tlJywgJyM0ZGEzZmYnKTtcbiAgICAgIHRoaXMubWFycXVlZUVsLnNldEF0dHJpYnV0ZSgnc3Ryb2tlLXdpZHRoJywgJzEnKTtcbiAgICAgIHRoaXMubWFycXVlZUVsLnNldEF0dHJpYnV0ZSgnc3Ryb2tlLWRhc2hhcnJheScsICc0IDMnKTtcbiAgICAgIHRoaXMubWFycXVlZUVsLnNldEF0dHJpYnV0ZSgnZmlsbCcsICcjNGRhM2ZmJyk7XG4gICAgICB0aGlzLm1hcnF1ZWVFbC5zZXRBdHRyaWJ1dGUoJ2ZpbGwtb3BhY2l0eScsICcwLjEyJyk7XG4gICAgICB0aGlzLm1hcnF1ZWVFbC5zZXRBdHRyaWJ1dGUoJ3ZlY3Rvci1lZmZlY3QnLCAnbm9uLXNjYWxpbmctc3Ryb2tlJyk7XG4gICAgICB0aGlzLnN2Zy5hcHBlbmRDaGlsZCh0aGlzLm1hcnF1ZWVFbCk7XG4gICAgfVxuICAgIHRoaXMubWFycXVlZUVsLnNldEF0dHJpYnV0ZSgneCcsIGAke2x4fWApO1xuICAgIHRoaXMubWFycXVlZUVsLnNldEF0dHJpYnV0ZSgneScsIGAke2x5fWApO1xuICAgIHRoaXMubWFycXVlZUVsLnNldEF0dHJpYnV0ZSgnd2lkdGgnLCBgJHtNYXRoLmFicyhyeCAtIGx4KX1gKTtcbiAgICB0aGlzLm1hcnF1ZWVFbC5zZXRBdHRyaWJ1dGUoJ2hlaWdodCcsIGAke01hdGguYWJzKHJ5IC0gbHkpfWApO1xuICB9XG5cbiAgLyoqIFJlbW92ZSB0aGUgbWFycXVlZSBlbGVtZW50IGZyb20gdGhlIFNWRy4gKi9cbiAgY2xlYXJNYXJxdWVlKCk6IHZvaWQge1xuICAgIGlmICh0aGlzLm1hcnF1ZWVFbD8ucGFyZW50Tm9kZSkgdGhpcy5tYXJxdWVlRWwucGFyZW50Tm9kZS5yZW1vdmVDaGlsZCh0aGlzLm1hcnF1ZWVFbCk7XG4gICAgdGhpcy5tYXJxdWVlRWwgPSBudWxsO1xuICB9XG5cbiAgLyoqIEEgcmVnaW9uJ3Mgb3V0bGluZSBjb2xvdXIuICovXG4gIHByaXZhdGUgc3Ryb2tlT2YocmVnaW9uOiBSZWdpb24pOiBzdHJpbmcge1xuICAgIHJldHVybiByZWdpb24uY29sb3IgfHwgdGhpcy5zdG9yZS5nZXRTaGFwZUNvbG9yKCkgfHwgJyMwMGZmZmYnO1xuICB9XG5cbiAgLyoqIERyYXcgYSByZWdpb24ncyBjbGFzc2lmaWNhdGlvbiBsYWJlbCBhdCBpdHMgdG9wLWxlZnQsIHdoZW4gbGFiZWxzIGFyZSBlbmFibGVkIChtYXRjaGVzIE9TRCkuICovXG4gIHByaXZhdGUgZHJhd0xhYmVsKHJlZ2lvbjogUmVnaW9uLCBsYXllcjogU2NyZWVuTGF5ZXIpOiB2b2lkIHtcbiAgICBpZiAoIXRoaXMuc3RvcmUuZ2V0U2hvd1NoYXBlTGFiZWwoKSB8fCByZWdpb24uaXNQcm9maWxlPy4oKSkgcmV0dXJuO1xuICAgIGNvbnN0IGxhYmVsID0gcmVnaW9uLmxhYmVsO1xuICAgIGNvbnN0IGJiID0gbGFiZWwgPyByZWdpb25CQm94KHJlZ2lvbikgOiBudWxsO1xuICAgIGlmICghbGFiZWwgfHwgIWJiKSByZXR1cm47XG4gICAgY29uc3QgdGV4dCA9IHN2Z0VsKCd0ZXh0Jyk7XG4gICAgdGV4dC5zZXRBdHRyaWJ1dGUoJ2ZpbGwnLCAnI2ZmZicpO1xuICAgIHRleHQuc2V0QXR0cmlidXRlKCdzdHJva2UnLCAnIzAwMCcpO1xuICAgIHRleHQuc2V0QXR0cmlidXRlKCdzdHJva2Utd2lkdGgnLCAnMycpO1xuICAgIHRleHQuc2V0QXR0cmlidXRlKCdwYWludC1vcmRlcicsICdzdHJva2UnKTtcbiAgICB0ZXh0LnNldEF0dHJpYnV0ZSgnZm9udCcsICcxMnB4IHNhbnMtc2VyaWYnKTtcbiAgICB0ZXh0LnNldEF0dHJpYnV0ZSgncG9pbnRlci1ldmVudHMnLCAnbm9uZScpO1xuICAgIHRleHQudGV4dENvbnRlbnQgPSBsYWJlbDtcbiAgICBsYXllci5hdCh0ZXh0LCBiYi54MCwgYmIueTAsIHsgZHk6IC00IH0pO1xuICB9XG5cbiAgLyoqIERyYXcgZ3JhYiBoYW5kbGVzIGZvciBhIHNlbGVjdGVkIHJlZ2lvbjogcmVjdGFuZ2xlIGNvcm5lcnMgb3IgcG9seWdvbiB2ZXJ0aWNlcy4gKi9cbiAgcHJpdmF0ZSBkcmF3SGFuZGxlcyhyZWdpb246IFJlZ2lvbiwgbGF5ZXI6IFNjcmVlbkxheWVyKTogdm9pZCB7XG4gICAgY29uc3QgYiA9IHJlZ2lvbi5ib3VuZHM7XG4gICAgaWYgKCFiKSByZXR1cm47XG4gICAgY29uc3Qgc3Ryb2tlID0gdGhpcy5zdHJva2VPZihyZWdpb24pO1xuICAgIGNvbnN0IGhhbmRsZSA9IChpbWdYOiBudW1iZXIsIGltZ1k6IG51bWJlcik6IHZvaWQgPT4ge1xuICAgICAgY29uc3QgZWwgPSBzdmdFbCgncmVjdCcpO1xuICAgICAgZWwuc2V0QXR0cmlidXRlKCd3aWR0aCcsIGAke0hBTkRMRV9TSVpFfWApO1xuICAgICAgZWwuc2V0QXR0cmlidXRlKCdoZWlnaHQnLCBgJHtIQU5ETEVfU0laRX1gKTtcbiAgICAgIGVsLnNldEF0dHJpYnV0ZSgnZmlsbCcsICcjZmZmJyk7XG4gICAgICBlbC5zZXRBdHRyaWJ1dGUoJ3N0cm9rZScsIHN0cm9rZSk7XG4gICAgICBlbC5zZXRBdHRyaWJ1dGUoJ3N0cm9rZS13aWR0aCcsICcxLjUnKTtcbiAgICAgIGxheWVyLmF0KGVsLCBpbWdYLCBpbWdZLCB7IGR4OiAtSEFORExFX1NJWkUgLyAyLCBkeTogLUhBTkRMRV9TSVpFIC8gMiB9KTtcbiAgICB9O1xuICAgIGlmIChiIGluc3RhbmNlb2YgUmVjdGFuZ2xlKSB7XG4gICAgICBoYW5kbGUoYi54LCBiLnkpO1xuICAgICAgaGFuZGxlKGIueCArIGIud2lkdGgsIGIueSk7XG4gICAgICBoYW5kbGUoYi54LCBiLnkgKyBiLmhlaWdodCk7XG4gICAgICBoYW5kbGUoYi54ICsgYi53aWR0aCwgYi55ICsgYi5oZWlnaHQpO1xuICAgIH0gZWxzZSBpZiAoYiBpbnN0YW5jZW9mIFBvbHlnb24pIHtcbiAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgYi5ucG9pbnRzOyBpKyspIGhhbmRsZShiLnhwb2ludHNbaV0sIGIueXBvaW50c1tpXSk7XG4gICAgICBmb3IgKGNvbnN0IHJpbmcgb2YgYi5ob2xlcyA/PyBbXSkgZm9yIChjb25zdCBbaHgsIGh5XSBvZiByaW5nKSBoYW5kbGUoaHgsIGh5KTtcbiAgICAgIC8vIEJlemllciByZWdpb25zIGFsc28gZXhwb3NlIHRoZWlyIHRhbmdlbnQgY29udHJvbCBwb2ludHMgKGNpcmNsZXMpIGpvaW5lZCB0byB0aGUgYW5jaG9yXG4gICAgICAvLyBieSBhIHRoaW4gbGluZSwgbWF0Y2hpbmcgdGhlIE9TRCBvdmVybGF5J3MgZWRpdGFibGUgYmV6aWVyIGhhbmRsZXMuIFN0b3JlZCBoYW5kbGVzIHdoZW5cbiAgICAgIC8vIHByZXNlbnQsIGVsc2UgdGhlIENhdG11bGwtUm9tIGRlZmF1bHQgdGhlIGN1cnZlIGlzIGRyYXduIHdpdGguXG4gICAgICBpZiAoYi5iZXppZXIpIHtcbiAgICAgICAgZm9yIChsZXQgcmluZyA9IC0xOyByaW5nIDwgKGIuaG9sZXM/Lmxlbmd0aCA/PyAwKTsgcmluZysrKSB7XG4gICAgICAgICAgY29uc3QgeyB4cywgeXMgfSA9IHJpbmdPZihiLCByaW5nKTtcbiAgICAgICAgICByaW5nSGFuZGxlcyhiLCByaW5nKS5mb3JFYWNoKChoLCBpKSA9PiB7XG4gICAgICAgICAgICBpZiAoaC5oYXNPdXQpIHRoaXMuZHJhd0JlemllckhhbmRsZSh4c1tpXSwgeXNbaV0sIGgub3V0LCBzdHJva2UsIGxheWVyKTtcbiAgICAgICAgICAgIGlmIChoLmhhc0luKSB0aGlzLmRyYXdCZXppZXJIYW5kbGUoeHNbaV0sIHlzW2ldLCBoLmluLCBzdHJva2UsIGxheWVyKTtcbiAgICAgICAgICB9KTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIC8qKiBEcmF3IG9uZSBiZXppZXIgY29udHJvbCBwb2ludCBhcyBhIHNtYWxsIGNpcmNsZSBjb25uZWN0ZWQgdG8gaXRzIGFuY2hvciBieSBhIHRhbmdlbnQgbGluZS5cbiAgICogIGBoYW5kbGVgIGlzIHRoZSBjb250cm9sIHBvaW50J3MgYWJzb2x1dGUgcG9zaXRpb24gaW4gaW1hZ2Ugc3BhY2UuICovXG4gIHByaXZhdGUgZHJhd0JlemllckhhbmRsZShcbiAgICBheDogbnVtYmVyLFxuICAgIGF5OiBudW1iZXIsXG4gICAgaGFuZGxlOiBbbnVtYmVyLCBudW1iZXJdLFxuICAgIHN0cm9rZTogc3RyaW5nLFxuICAgIGxheWVyOiBTY3JlZW5MYXllcixcbiAgKTogdm9pZCB7XG4gICAgaWYgKGhhbmRsZVswXSA9PT0gYXggJiYgaGFuZGxlWzFdID09PSBheSkgcmV0dXJuO1xuICAgIGNvbnN0IGxpbmUgPSBsYXllci5saW5lKGF4LCBheSwgaGFuZGxlWzBdLCBoYW5kbGVbMV0pO1xuICAgIGxpbmUuc2V0QXR0cmlidXRlKCdzdHJva2UnLCBzdHJva2UpO1xuICAgIGxpbmUuc2V0QXR0cmlidXRlKCdzdHJva2Utd2lkdGgnLCAnMScpO1xuICAgIGxpbmUuc2V0QXR0cmlidXRlKCdzdHJva2Utb3BhY2l0eScsICcwLjcnKTtcbiAgICBjb25zdCBkb3QgPSBzdmdFbCgnY2lyY2xlJyk7XG4gICAgZG90LnNldEF0dHJpYnV0ZSgncicsIGAke0hBTkRMRV9TSVpFIC8gMn1gKTtcbiAgICBkb3Quc2V0QXR0cmlidXRlKCdmaWxsJywgc3Ryb2tlKTtcbiAgICBkb3Quc2V0QXR0cmlidXRlKCdzdHJva2UnLCAnI2ZmZicpO1xuICAgIGRvdC5zZXRBdHRyaWJ1dGUoJ3N0cm9rZS13aWR0aCcsICcxJyk7XG4gICAgbGF5ZXIuYXQoZG90LCBoYW5kbGVbMF0sIGhhbmRsZVsxXSwgeyB4OiAnY3gnLCB5OiAnY3knIH0pO1xuICB9XG5cbiAgcHJpdmF0ZSBzdHlsZShlbDogU1ZHRWxlbWVudCwgc3Ryb2tlOiBzdHJpbmcsIGlzU2VsZWN0ZWQ6IGJvb2xlYW4pOiB2b2lkIHtcbiAgICBlbC5zZXRBdHRyaWJ1dGUoJ3N0cm9rZScsIHN0cm9rZSk7XG4gICAgZWwuc2V0QXR0cmlidXRlKCdzdHJva2Utd2lkdGgnLCBpc1NlbGVjdGVkID8gJzQnIDogJzInKTtcbiAgICBlbC5zZXRBdHRyaWJ1dGUoJ2ZpbGwnLCBpc1NlbGVjdGVkID8gc3Ryb2tlIDogJ25vbmUnKTtcbiAgICBlbC5zZXRBdHRyaWJ1dGUoJ2ZpbGwtb3BhY2l0eScsIGlzU2VsZWN0ZWQgPyAnMC4zNScgOiAnMCcpO1xuICB9XG5cbiAgLyoqIERyYXcgdGhlIGluLXByb2dyZXNzIHJlY3RhbmdsZSAvIHBhdGggcHJldmlldy4gKi9cbiAgcHJpdmF0ZSBkcmF3RHJhZnQoZHJhZnQ6IFJlZ2lvbkRyYWZ0LCBsYXllcjogU2NyZWVuTGF5ZXIpOiB2b2lkIHtcbiAgICBpZiAoZHJhZnQucmVjdCkge1xuICAgICAgY29uc3QgeyB4MCwgeTAsIHgxLCB5MSB9ID0gZHJhZnQucmVjdDtcbiAgICAgIGNvbnN0IGVsID0gc3ZnRWwoJ3JlY3QnKTtcbiAgICAgIGxheWVyLnBsYWNlKGVsLCAoZSwgcHJvamVjdCkgPT4ge1xuICAgICAgICBjb25zdCBbbHgsIGx5XSA9IHByb2plY3QoTWF0aC5taW4oeDAsIHgxKSwgTWF0aC5taW4oeTAsIHkxKSk7XG4gICAgICAgIGNvbnN0IFtyeCwgcnldID0gcHJvamVjdChNYXRoLm1heCh4MCwgeDEpLCBNYXRoLm1heCh5MCwgeTEpKTtcbiAgICAgICAgZS5zZXRBdHRyaWJ1dGUoJ3gnLCBgJHtseH1gKTtcbiAgICAgICAgZS5zZXRBdHRyaWJ1dGUoJ3knLCBgJHtseX1gKTtcbiAgICAgICAgZS5zZXRBdHRyaWJ1dGUoJ3dpZHRoJywgYCR7TWF0aC5hYnMocnggLSBseCl9YCk7XG4gICAgICAgIGUuc2V0QXR0cmlidXRlKCdoZWlnaHQnLCBgJHtNYXRoLmFicyhyeSAtIGx5KX1gKTtcbiAgICAgIH0pO1xuICAgICAgdGhpcy5zdHlsZURyYWZ0KGVsKTtcbiAgICB9XG4gICAgaWYgKGRyYWZ0LnBhdGggJiYgZHJhZnQucGF0aC5sZW5ndGgpIHtcbiAgICAgIHRoaXMuc3R5bGVEcmFmdChcbiAgICAgICAgbGF5ZXIucG9seShcbiAgICAgICAgICAncG9seWxpbmUnLFxuICAgICAgICAgIGRyYWZ0LnBhdGgubWFwKChbeCwgeV0pID0+ICh7IHgsIHkgfSkpLFxuICAgICAgICApLFxuICAgICAgKTtcbiAgICB9XG4gIH1cblxuICBwcml2YXRlIHN0eWxlRHJhZnQoZWw6IFNWR0VsZW1lbnQpOiB2b2lkIHtcbiAgICBlbC5zZXRBdHRyaWJ1dGUoJ3N0cm9rZScsIHRoaXMuc3RvcmUuZ2V0U2hhcGVDb2xvcigpIHx8ICcjMDBmZmZmJyk7XG4gICAgZWwuc2V0QXR0cmlidXRlKCdzdHJva2Utd2lkdGgnLCAnMicpO1xuICAgIGVsLnNldEF0dHJpYnV0ZSgnc3Ryb2tlLWRhc2hhcnJheScsICc0IDMnKTtcbiAgICBlbC5zZXRBdHRyaWJ1dGUoJ2ZpbGwnLCAnbm9uZScpO1xuICAgIGVsLnNldEF0dHJpYnV0ZSgndmVjdG9yLWVmZmVjdCcsICdub24tc2NhbGluZy1zdHJva2UnKTtcbiAgfVxufVxuIl19
|
|
194
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicmVnaW9uLXN2Zy1yZW5kZXJlci5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL3NyYy9saWIvaW1wbGVtZW50YXRpb25zL25hcGFyaS1qcy9yZWdpb24tb3ZlcmxheS9yZWdpb24tc3ZnLXJlbmRlcmVyLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxPQUFPLEVBQUUsU0FBUyxFQUFVLE1BQU0sd0JBQXdCLENBQUM7QUFFcEUsT0FBTyxFQUFFLFVBQVUsRUFBRSxXQUFXLEVBQUUsTUFBTSxFQUFFLE1BQU0seUNBQXlDLENBQUM7QUFDMUYsT0FBTyxFQUF1QixpQkFBaUIsRUFBRSxLQUFLLEVBQUUsTUFBTSw2Q0FBNkMsQ0FBQztBQUM1RyxPQUFPLEVBQ0wsVUFBVSxFQUNWLFFBQVEsRUFDUixnQkFBZ0IsRUFDaEIsZ0JBQWdCLEVBQ2hCLFVBQVUsR0FDWCxNQUFNLHNDQUFzQyxDQUFDO0FBRTlDLE1BQU0sTUFBTSxHQUFHLDRCQUE0QixDQUFDO0FBQzVDLHdDQUF3QztBQUN4QyxNQUFNLENBQUMsTUFBTSxXQUFXLEdBQUcsQ0FBQyxDQUFDO0FBZ0I3Qjs7Ozs7R0FLRztBQUNILE1BQU0sT0FBTyx1QkFBdUI7SUFLbEMsWUFDbUIsR0FBa0IsRUFDbEIsS0FBa0I7UUFEbEIsUUFBRyxHQUFILEdBQUcsQ0FBZTtRQUNsQixVQUFLLEdBQUwsS0FBSyxDQUFhO1FBTHJDLGdHQUFnRztRQUN4RixjQUFTLEdBQTBCLElBQUksQ0FBQztRQU05QyxJQUFJLENBQUMsUUFBUSxHQUFHLElBQUksaUJBQWlCLENBQUMsR0FBRyxFQUFFO1lBQ3pDLFdBQVcsRUFBRSxNQUFNO1lBQ25CLFVBQVUsRUFBRSxDQUFDLEVBQUUsRUFBRSxNQUFNLEVBQUUsUUFBUSxFQUFFLEVBQUUsQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLEVBQUUsRUFBRSxJQUFJLENBQUMsUUFBUSxDQUFDLE1BQU0sQ0FBQyxFQUFFLFFBQVEs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Q0FBQyxRQUFRLEVBQUUsSUFBSSxDQUFDLEtBQUssQ0FBQyxhQUFhLEVBQUUsSUFBSSxTQUFTLENBQUMsQ0FBQztRQUNuRSxFQUFFLENBQUMsWUFBWSxDQUFDLGNBQWMsRUFBRSxHQUFHLENBQUMsQ0FBQztRQUNyQyxFQUFFLENBQUMsWUFBWSxDQUFDLGtCQUFrQixFQUFFLEtBQUssQ0FBQyxDQUFDO1FBQzNDLEVBQUUsQ0FBQyxZQUFZLENBQUMsTUFBTSxFQUFFLE1BQU0sQ0FBQyxDQUFDO1FBQ2hDLEVBQUUsQ0FBQyxZQUFZLENBQUMsZUFBZSxFQUFFLG9CQUFvQixDQUFDLENBQUM7SUFDekQsQ0FBQztDQUNGIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgUG9seWdvbiwgUmVjdGFuZ2xlLCBSZWdpb24gfSBmcm9tICcuLi8uLi8uLi9tb2RlbHMvcmVnaW9uJztcbmltcG9ydCB0eXBlIHsgUmVnaW9uU3RvcmUgfSBmcm9tICcuLi8uLi8uLi9zdG9yZS9yZWdpb24tc3RvcmUuc2VydmljZSc7XG5pbXBvcnQgeyByZWdpb25CQm94LCByaW5nSGFuZGxlcywgcmluZ09mIH0gZnJvbSAnLi4vLi4vLi4vcmVnaW9uLW92ZXJsYXkvcmVnaW9uLWdlb21ldHJ5JztcbmltcG9ydCB7IEFmZmluZSwgU2NyZWVuTGF5ZXIsIFN2Z1JlZ2lvblJlbmRlcmVyLCBzdmdFbCB9IGZyb20gJy4uLy4uLy4uL3JlZ2lvbi1vdmVybGF5L3N2Zy1yZWdpb24tcmVuZGVyZXInO1xuaW1wb3J0IHtcbiAgYXBwbHlQYWludCxcbiAgaXNGaWxsZWQsXG4gIHBsYWNlSW5zaWRlTGFiZWwsXG4gIHJlZ2lvbkxhYmVsU3BvdHMsXG4gIHNoYXBlUGFpbnQsXG59IGZyb20gJy4uLy4uLy4uL3JlZ2lvbi1vdmVybGF5L3JlZ2lvbi1zdHlsZSc7XG5cbmNvbnN0IFNWR19OUyA9ICdodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Zyc7XG4vKiogUmVuZGVyZWQgaGFuZGxlIHNpemUgKHNjcmVlbiBweCkuICovXG5leHBvcnQgY29uc3QgSEFORExFX1NJWkUgPSA3O1xuXG4vKiogQW4gYXhpcy1hbGlnbmVkIGJveCBmcm9tIGEgZHJhZydzIHN0YXJ0IHRvIGl0cyBjdXJyZW50IHBvaW50IChhbnkgb3JkZXIpLiAqL1xuZXhwb3J0IGludGVyZmFjZSBEcmFnQm94IHtcbiAgeDA6IG51bWJlcjtcbiAgeTA6IG51bWJlcjtcbiAgeDE6IG51bWJlcjtcbiAgeTE6IG51bWJlcjtcbn1cblxuLyoqIEEgcmVnaW9uIGJlaW5nIGRyYXduOiBhIHJlY3RhbmdsZSBkcmFnLCBvciBhIGZyZWVoYW5kIC8gY2xpY2stcGxhY2VkIHBhdGguICovXG5leHBvcnQgaW50ZXJmYWNlIFJlZ2lvbkRyYWZ0IHtcbiAgcmVjdDogRHJhZ0JveCB8IG51bGw7XG4gIHBhdGg6IEFycmF5PFtudW1iZXIsIG51bWJlcl0+IHwgbnVsbDtcbn1cblxuLyoqXG4gKiBXaGF0IHRoZSBuYXBhcmkgcmVnaW9uIG92ZXJsYXkgZHJhd3MsIG92ZXIgdGhlIHNoYXJlZCB7QGxpbmsgU3ZnUmVnaW9uUmVuZGVyZXJ9OiB0aGUgcmVnaW9uc1xuICogaW4gd29ybGQgY29vcmRpbmF0ZXMgKHN0eWxlZCBmcm9tIHRoZSBzdG9yZSdzIGNvbG91cnMsIGxhYmVsbGVkIHdoZW4gbGFiZWxzIGFyZSBvbiksIGFuZCBpblxuICogc2NyZWVuIHNwYWNlIHRoZSBzZWxlY3RlZCByZWdpb25zJyBncmFiIGhhbmRsZXMgKGNvcm5lcnMsIHZlcnRpY2VzLCBiw6l6aWVyIGNvbnRyb2wgcG9pbnRzKSxcbiAqIHRoZSBkcmFmdCBiZWluZyBkcmF3biBhbmQgdGhlIHJ1YmJlci1iYW5kIG1hcnF1ZWUuXG4gKi9cbmV4cG9ydCBjbGFzcyBOYXBhcmlSZWdpb25TdmdSZW5kZXJlciB7XG4gIHByaXZhdGUgcmVhZG9ubHkgcmVuZGVyZXI6IFN2Z1JlZ2lvblJlbmRlcmVyO1xuICAvKiogRGVkaWNhdGVkIG1hcnF1ZWUgcmVjdCBlbGVtZW50LCB1cGRhdGVkIGRpcmVjdGx5IGR1cmluZyB0aGUgZHJhZyAobm8gZnVsbCByZWdpb24gcmVkcmF3KS4gKi9cbiAgcHJpdmF0ZSBtYXJxdWVlRWw6IFNWR1JlY3RFbGVtZW50IHwgbnVsbCA9IG51bGw7XG5cbiAgY29uc3RydWN0b3IoXG4gICAgcHJpdmF0ZSByZWFkb25seSBzdmc6IFNWR1NWR0VsZW1lbnQsXG4gICAgcHJpdmF0ZSByZWFkb25seSBzdG9yZTogUmVnaW9uU3RvcmUsXG4gICkge1xuICAgIHRoaXMucmVuZGVyZXIgPSBuZXcgU3ZnUmVnaW9uUmVuZGVyZXIoc3ZnLCB7XG4gICAgICByZWN0RWxlbWVudDogJ3JlY3QnLFxuICAgICAgc3R5bGVTaGFwZTogKGVsLCByZWdpb24sIHNlbGVjdGVkKSA9PiB0aGlzLnN0eWxlKGVsLCB0aGlzLnN0cm9rZU9mKHJlZ2lvbiksIHNlbGVjdGVkKSxcbiAgICAgIGRlY29yYXRlOiAocmVnaW9uLCBfaSwgX3NlbGVjdGVkLCBsYXllcikgPT4gdGhpcy5kcmF3TGFiZWwocmVnaW9uLCBsYXllciksXG4gICAgICBza2lwOiAocmVnaW9uKSA9PiAhIXJlZ2lvbi5pc1Byb2ZpbGU/LigpIHx8IHN0b3JlLmlzQ2xhc3NIaWRkZW4ocmVnaW9uLmxhYmVsKSxcbiAgICB9KTtcbiAgfVxuXG4gIC8qKiBGb2xsb3cgdGhlIGNhbWVyYTogb25lIHRyYW5zZm9ybSBhdHRyaWJ1dGUgcGx1cyB0aGUgc2NyZWVuLXNwYWNlIGVsZW1lbnRzLiAqL1xuICBzZXRDYW1lcmEoYWZmaW5lOiBBZmZpbmUpOiB2b2lkIHtcbiAgICB0aGlzLnJlbmRlcmVyLnNldENhbWVyYShhZmZpbmUpO1xuICB9XG5cbiAgLyoqIFJlYnVpbGQgdGhlIHJlZ2lvbnMgKHdvcmxkIHNwYWNlKSBhbmQgdGhlaXIgbGFiZWxzLiAqL1xuICByZW5kZXIocmVnaW9uczogcmVhZG9ubHkgUmVnaW9uW10sIHNlbGVjdGVkOiByZWFkb25seSBudW1iZXJbXSk6IHZvaWQge1xuICAgIHRoaXMucmVuZGVyZXIucmVuZGVyKHJlZ2lvbnMsIHNlbGVjdGVkKTtcbiAgfVxuXG4gIC8qKiBSZWJ1aWxkIHRoZSBzY3JlZW4tc3BhY2Ugb3ZlcmxheSBvbmx5OiB0aGUgc2VsZWN0ZWQgcmVnaW9ucycgaGFuZGxlcyBhbmQgdGhlIGRyYWZ0LiAqL1xuICByZW5kZXJPdmVybGF5KHJlZ2lvbnM6IHJlYWRvbmx5IFJlZ2lvbltdLCBzZWxlY3RlZDogcmVhZG9ubHkgbnVtYmVyW10sIGRyYWZ0OiBSZWdpb25EcmFmdCk6IHZvaWQge1xuICAgIHRoaXMucmVuZGVyZXIucmVuZGVyT3ZlcmxheSgobGF5ZXIpID0+IHtcbiAgICAgIGZvciAoY29uc3QgaSBvZiBzZWxlY3RlZCkge1xuICAgICAgICBjb25zdCByZWdpb24gPSByZWdpb25zW2ldO1xuICAgICAgICBpZiAocmVnaW9uICYmICFyZWdpb24uaXNQcm9maWxlPy4oKSkgdGhpcy5kcmF3SGFuZGxlcyhyZWdpb24sIGxheWVyKTtcbiAgICAgIH1cbiAgICAgIHRoaXMuZHJhd0RyYWZ0KGRyYWZ0LCBsYXllcik7XG4gICAgfSk7XG4gIH1cblxuICAvKiogU2hvdyB0aGUgbWFycXVlZSBvdmVyIHN2Zy1sb2NhbCBjb3JuZXJzIGAobHgsIGx5KWDigJNgKHJ4LCByeSlgLCBjcmVhdGluZyBpdCBvbiBmaXJzdCB1c2UuICovXG4gIHNob3dNYXJxdWVlKGx4OiBudW1iZXIsIGx5OiBudW1iZXIsIHJ4OiBudW1iZXIsIHJ5OiBudW1iZXIpOiB2b2lkIHtcbiAgICBpZiAoIXRoaXMubWFycXVlZUVsIHx8ICF0aGlzLm1hcnF1ZWVFbC5wYXJlbnROb2RlKSB7XG4gICAgICB0aGlzLm1hcnF1ZWVFbCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnROUyhTVkdfTlMsICdyZWN0Jyk7XG4gICAgICB0aGlzLm1hcnF1ZWVFbC5zZXRBdHRyaWJ1dGUoJ3N0cm9rZScsICcjNGRhM2ZmJyk7XG4gICAgICB0aGlzLm1hcnF1ZWVFbC5zZXRBdHRyaWJ1dGUoJ3N0cm9rZS13aWR0aCcsICcxJyk7XG4gICAgICB0aGlzLm1hcnF1ZWVFbC5zZXRBdHRyaWJ1dGUoJ3N0cm9rZS1kYXNoYXJyYXknLCAnNCAzJyk7XG4gICAgICB0aGlzLm1hcnF1ZWVFbC5zZXRBdHRyaWJ1dGUoJ2ZpbGwnLCAnIzRkYTNmZicpO1xuICAgICAgdGhpcy5tYXJxdWVlRWwuc2V0QXR0cmlidXRlKCdmaWxsLW9wYWNpdHknLCAnMC4xMicpO1xuICAgICAgdGhpcy5tYXJxdWVlRWwuc2V0QXR0cmlidXRlKCd2ZWN0b3ItZWZmZWN0JywgJ25vbi1zY2FsaW5nLXN0cm9rZScpO1xuICAgICAgdGhpcy5zdmcuYXBwZW5kQ2hpbGQodGhpcy5tYXJxdWVlRWwpO1xuICAgIH1cbiAgICB0aGlzLm1hcnF1ZWVFbC5zZXRBdHRyaWJ1dGUoJ3gnLCBgJHtseH1gKTtcbiAgICB0aGlzLm1hcnF1ZWVFbC5zZXRBdHRyaWJ1dGUoJ3knLCBgJHtseX1gKTtcbiAgICB0aGlzLm1hcnF1ZWVFbC5zZXRBdHRyaWJ1dGUoJ3dpZHRoJywgYCR7TWF0aC5hYnMocnggLSBseCl9YCk7XG4gICAgdGhpcy5tYXJxdWVlRWwuc2V0QXR0cmlidXRlKCdoZWlnaHQnLCBgJHtNYXRoLmFicyhyeSAtIGx5KX1gKTtcbiAgfVxuXG4gIC8qKiBSZW1vdmUgdGhlIG1hcnF1ZWUgZWxlbWVudCBmcm9tIHRoZSBTVkcuICovXG4gIGNsZWFyTWFycXVlZSgpOiB2b2lkIHtcbiAgICBpZiAodGhpcy5tYXJxdWVlRWw/LnBhcmVudE5vZGUpIHRoaXMubWFycXVlZUVsLnBhcmVudE5vZGUucmVtb3ZlQ2hpbGQodGhpcy5tYXJxdWVlRWwpO1xuICAgIHRoaXMubWFycXVlZUVsID0gbnVsbDtcbiAgfVxuXG4gIC8qKiBBIHJlZ2lvbidzIG91dGxpbmUgY29sb3VyLiAqL1xuICBwcml2YXRlIHN0cm9rZU9mKHJlZ2lvbjogUmVnaW9uKTogc3RyaW5nIHtcbiAgICByZXR1cm4gcmVnaW9uLmNvbG9yIHx8IHRoaXMuc3RvcmUuZ2V0U2hhcGVDb2xvcigpIHx8ICcjMDBmZmZmJztcbiAgfVxuXG4gIC8qKiBEcmF3IGEgcmVnaW9uJ3MgY2xhc3NpZmljYXRpb24gbGFiZWwgYXQgaXRzIHRvcC1sZWZ0LCB3aGVuIGxhYmVscyBhcmUgZW5hYmxlZCAobWF0Y2hlcyBPU0QpLiAqL1xuICBwcml2YXRlIGRyYXdMYWJlbChyZWdpb246IFJlZ2lvbiwgbGF5ZXI6IFNjcmVlbkxheWVyKTogdm9pZCB7XG4gICAgaWYgKCF0aGlzLnN0b3JlLmdldFNob3dTaGFwZUxhYmVsKCkgfHwgcmVnaW9uLmlzUHJvZmlsZT8uKCkgfHwgdGhpcy5zdG9yZS5pc0xhYmVsQ292ZXJlZChyZWdpb24ubGFiZWwpKSByZXR1cm47XG4gICAgY29uc3QgbGFiZWwgPSByZWdpb24ubGFiZWw7XG4gICAgLy8gVGhlIGZpbGxlZCAoYXRsYXMpIGxvb2sgbGFiZWxzIGVhY2ggcGFydCBpbnNpZGUgaXQsIHdoZXJlIGl0IGZpdHMuXG4gICAgaWYgKGxhYmVsICYmIGlzRmlsbGVkKHRoaXMuc3RvcmUuZ2V0UmVnaW9uU3R5bGUoKSkpIHtcbiAgICAgIGZvciAoY29uc3Qgc3BvdCBvZiByZWdpb25MYWJlbFNwb3RzKHJlZ2lvbikpIHBsYWNlSW5zaWRlTGFiZWwobGF5ZXIsIGxhYmVsLCBzcG90KTtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgY29uc3QgYmIgPSBsYWJlbCA/IHJlZ2lvbkJCb3gocmVnaW9uKSA6IG51bGw7XG4gICAgaWYgKCFsYWJlbCB8fCAhYmIpIHJldHVybjtcbiAgICBjb25zdCB0ZXh0ID0gc3ZnRWwoJ3RleHQnKTtcbiAgICB0ZXh0LnNldEF0dHJpYnV0ZSgnZmlsbCcsICcjZmZmJyk7XG4gICAgdGV4dC5zZXRBdHRyaWJ1dGUoJ3N0cm9rZScsICcjMDAwJyk7XG4gICAgdGV4dC5zZXRBdHRyaWJ1dGUoJ3N0cm9rZS13aWR0aCcsICczJyk7XG4gICAgdGV4dC5zZXRBdHRyaWJ1dGUoJ3BhaW50LW9yZGVyJywgJ3N0cm9rZScpO1xuICAgIHRleHQuc2V0QXR0cmlidXRlKCdmb250JywgJzEycHggc2Fucy1zZXJpZicpO1xuICAgIHRleHQuc2V0QXR0cmlidXRlKCdwb2ludGVyLWV2ZW50cycsICdub25lJyk7XG4gICAgdGV4dC50ZXh0Q29udGVudCA9IGxhYmVsO1xuICAgIGxheWVyLmF0KHRleHQsIGJiLngwLCBiYi55MCwgeyBkeTogLTQgfSk7XG4gIH1cblxuICAvKiogRHJhdyBncmFiIGhhbmRsZXMgZm9yIGEgc2VsZWN0ZWQgcmVnaW9uOiByZWN0YW5nbGUgY29ybmVycyBvciBwb2x5Z29uIHZlcnRpY2VzLiAqL1xuICBwcml2YXRlIGRyYXdIYW5kbGVzKHJlZ2lvbjogUmVnaW9uLCBsYXllcjogU2NyZWVuTGF5ZXIpOiB2b2lkIHtcbiAgICBjb25zdCBiID0gcmVnaW9uLmJvdW5kcztcbiAgICBpZiAoIWIpIHJldHVybjtcbiAgICBjb25zdCBzdHJva2UgPSB0aGlzLnN0cm9rZU9mKHJlZ2lvbik7XG4gICAgY29uc3QgaGFuZGxlID0gKGltZ1g6IG51bWJlciwgaW1nWTogbnVtYmVyKTogdm9pZCA9PiB7XG4gICAgICBjb25zdCBlbCA9IHN2Z0VsKCdyZWN0Jyk7XG4gICAgICBlbC5zZXRBdHRyaWJ1dGUoJ3dpZHRoJywgYCR7SEFORExFX1NJWkV9YCk7XG4gICAgICBlbC5zZXRBdHRyaWJ1dGUoJ2hlaWdodCcsIGAke0hBTkRMRV9TSVpFfWApO1xuICAgICAgZWwuc2V0QXR0cmlidXRlKCdmaWxsJywgJyNmZmYnKTtcbiAgICAgIGVsLnNldEF0dHJpYnV0ZSgnc3Ryb2tlJywgc3Ryb2tlKTtcbiAgICAgIGVsLnNldEF0dHJpYnV0ZSgnc3Ryb2tlLXdpZHRoJywgJzEuNScpO1xuICAgICAgbGF5ZXIuYXQoZWwsIGltZ1gsIGltZ1ksIHsgZHg6IC1IQU5ETEVfU0laRSAvIDIsIGR5OiAtSEFORExFX1NJWkUgLyAyIH0pO1xuICAgIH07XG4gICAgaWYgKGIgaW5zdGFuY2VvZiBSZWN0YW5nbGUpIHtcbiAgICAgIGhhbmRsZShiLngsIGIueSk7XG4gICAgICBoYW5kbGUoYi54ICsgYi53aWR0aCwgYi55KTtcbiAgICAgIGhhbmRsZShiLngsIGIueSArIGIuaGVpZ2h0KTtcbiAgICAgIGhhbmRsZShiLnggKyBiLndpZHRoLCBiLnkgKyBiLmhlaWdodCk7XG4gICAgfSBlbHNlIGlmIChiIGluc3RhbmNlb2YgUG9seWdvbikge1xuICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCBiLm5wb2ludHM7IGkrKykgaGFuZGxlKGIueHBvaW50c1tpXSwgYi55cG9pbnRzW2ldKTtcbiAgICAgIGZvciAoY29uc3QgcmluZyBvZiBiLmhvbGVzID8/IFtdKSBmb3IgKGNvbnN0IFtoeCwgaHldIG9mIHJpbmcpIGhhbmRsZShoeCwgaHkpO1xuICAgICAgLy8gQmV6aWVyIHJlZ2lvbnMgYWxzbyBleHBvc2UgdGhlaXIgdGFuZ2VudCBjb250cm9sIHBvaW50cyAoY2lyY2xlcykgam9pbmVkIHRvIHRoZSBhbmNob3JcbiAgICAgIC8vIGJ5IGEgdGhpbiBsaW5lLCBtYXRjaGluZyB0aGUgT1NEIG92ZXJsYXkncyBlZGl0YWJsZSBiZXppZXIgaGFuZGxlcy4gU3RvcmVkIGhhbmRsZXMgd2hlblxuICAgICAgLy8gcHJlc2VudCwgZWxzZSB0aGUgQ2F0bXVsbC1Sb20gZGVmYXVsdCB0aGUgY3VydmUgaXMgZHJhd24gd2l0aC5cbiAgICAgIGlmIChiLmJlemllcikge1xuICAgICAgICBmb3IgKGxldCByaW5nID0gLTE7IHJpbmcgPCAoYi5ob2xlcz8ubGVuZ3RoID8/IDApOyByaW5nKyspIHtcbiAgICAgICAgICBjb25zdCB7IHhzLCB5cyB9ID0gcmluZ09mKGIsIHJpbmcpO1xuICAgICAgICAgIHJpbmdIYW5kbGVzKGIsIHJpbmcpLmZvckVhY2goKGgsIGkpID0+IHtcbiAgICAgICAgICAgIGlmIChoLmhhc091dCkgdGhpcy5kcmF3QmV6aWVySGFuZGxlKHhzW2ldLCB5c1tpXSwgaC5vdXQsIHN0cm9rZSwgbGF5ZXIpO1xuICAgICAgICAgICAgaWYgKGguaGFzSW4pIHRoaXMuZHJhd0JlemllckhhbmRsZSh4c1tpXSwgeXNbaV0sIGguaW4sIHN0cm9rZSwgbGF5ZXIpO1xuICAgICAgICAgIH0pO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgLyoqIERyYXcgb25lIGJlemllciBjb250cm9sIHBvaW50IGFzIGEgc21hbGwgY2lyY2xlIGNvbm5lY3RlZCB0byBpdHMgYW5jaG9yIGJ5IGEgdGFuZ2VudCBsaW5lLlxuICAgKiAgYGhhbmRsZWAgaXMgdGhlIGNvbnRyb2wgcG9pbnQncyBhYnNvbHV0ZSBwb3NpdGlvbiBpbiBpbWFnZSBzcGFjZS4gKi9cbiAgcHJpdmF0ZSBkcmF3QmV6aWVySGFuZGxlKFxuICAgIGF4OiBudW1iZXIsXG4gICAgYXk6IG51bWJlcixcbiAgICBoYW5kbGU6IFtudW1iZXIsIG51bWJlcl0sXG4gICAgc3Ryb2tlOiBzdHJpbmcsXG4gICAgbGF5ZXI6IFNjcmVlbkxheWVyLFxuICApOiB2b2lkIHtcbiAgICBpZiAoaGFuZGxlWzBdID09PSBheCAmJiBoYW5kbGVbMV0gPT09IGF5KSByZXR1cm47XG4gICAgY29uc3QgbGluZSA9IGxheWVyLmxpbmUoYXgsIGF5LCBoYW5kbGVbMF0sIGhhbmRsZVsxXSk7XG4gICAgbGluZS5zZXRBdHRyaWJ1dGUoJ3N0cm9rZScsIHN0cm9rZSk7XG4gICAgbGluZS5zZXRBdHRyaWJ1dGUoJ3N0cm9rZS13aWR0aCcsICcxJyk7XG4gICAgbGluZS5zZXRBdHRyaWJ1dGUoJ3N0cm9rZS1vcGFjaXR5JywgJzAuNycpO1xuICAgIGNvbnN0IGRvdCA9IHN2Z0VsKCdjaXJjbGUnKTtcbiAgICBkb3Quc2V0QXR0cmlidXRlKCdyJywgYCR7SEFORExFX1NJWkUgLyAyfWApO1xuICAgIGRvdC5zZXRBdHRyaWJ1dGUoJ2ZpbGwnLCBzdHJva2UpO1xuICAgIGRvdC5zZXRBdHRyaWJ1dGUoJ3N0cm9rZScsICcjZmZmJyk7XG4gICAgZG90LnNldEF0dHJpYnV0ZSgnc3Ryb2tlLXdpZHRoJywgJzEnKTtcbiAgICBsYXllci5hdChkb3QsIGhhbmRsZVswXSwgaGFuZGxlWzFdLCB7IHg6ICdjeCcsIHk6ICdjeScgfSk7XG4gIH1cblxuICBwcml2YXRlIHN0eWxlKGVsOiBTVkdFbGVtZW50LCBzdHJva2U6IHN0cmluZywgaXNTZWxlY3RlZDogYm9vbGVhbik6IHZvaWQge1xuICAgIGNvbnN0IHN0eWxlID0gdGhpcy5zdG9yZS5nZXRSZWdpb25TdHlsZSgpO1xuICAgIGlmIChpc0ZpbGxlZChzdHlsZSkpIHtcbiAgICAgIGFwcGx5UGFpbnQoZWwsIHNoYXBlUGFpbnQoc3Ryb2tlLCBpc1NlbGVjdGVkLCBzdHlsZSkpO1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICBlbC5zZXRBdHRyaWJ1dGUoJ3N0cm9rZScsIHN0cm9rZSk7XG4gICAgZWwuc2V0QXR0cmlidXRlKCdzdHJva2Utd2lkdGgnLCBpc1NlbGVjdGVkID8gJzQnIDogJzInKTtcbiAgICBlbC5zZXRBdHRyaWJ1dGUoJ2ZpbGwnLCBpc1NlbGVjdGVkID8gc3Ryb2tlIDogJ25vbmUnKTtcbiAgICBlbC5zZXRBdHRyaWJ1dGUoJ2ZpbGwtb3BhY2l0eScsIGlzU2VsZWN0ZWQgPyAnMC4zNScgOiAnMCcpO1xuICB9XG5cbiAgLyoqIERyYXcgdGhlIGluLXByb2dyZXNzIHJlY3RhbmdsZSAvIHBhdGggcHJldmlldy4gKi9cbiAgcHJpdmF0ZSBkcmF3RHJhZnQoZHJhZnQ6IFJlZ2lvbkRyYWZ0LCBsYXllcjogU2NyZWVuTGF5ZXIpOiB2b2lkIHtcbiAgICBpZiAoZHJhZnQucmVjdCkge1xuICAgICAgY29uc3QgeyB4MCwgeTAsIHgxLCB5MSB9ID0gZHJhZnQucmVjdDtcbiAgICAgIGNvbnN0IGVsID0gc3ZnRWwoJ3JlY3QnKTtcbiAgICAgIGxheWVyLnBsYWNlKGVsLCAoZSwgcHJvamVjdCkgPT4ge1xuICAgICAgICBjb25zdCBbbHgsIGx5XSA9IHByb2plY3QoTWF0aC5taW4oeDAsIHgxKSwgTWF0aC5taW4oeTAsIHkxKSk7XG4gICAgICAgIGNvbnN0IFtyeCwgcnldID0gcHJvamVjdChNYXRoLm1heCh4MCwgeDEpLCBNYXRoLm1heCh5MCwgeTEpKTtcbiAgICAgICAgZS5zZXRBdHRyaWJ1dGUoJ3gnLCBgJHtseH1gKTtcbiAgICAgICAgZS5zZXRBdHRyaWJ1dGUoJ3knLCBgJHtseX1gKTtcbiAgICAgICAgZS5zZXRBdHRyaWJ1dGUoJ3dpZHRoJywgYCR7TWF0aC5hYnMocnggLSBseCl9YCk7XG4gICAgICAgIGUuc2V0QXR0cmlidXRlKCdoZWlnaHQnLCBgJHtNYXRoLmFicyhyeSAtIGx5KX1gKTtcbiAgICAgIH0pO1xuICAgICAgdGhpcy5zdHlsZURyYWZ0KGVsKTtcbiAgICB9XG4gICAgaWYgKGRyYWZ0LnBhdGggJiYgZHJhZnQucGF0aC5sZW5ndGgpIHtcbiAgICAgIHRoaXMuc3R5bGVEcmFmdChcbiAgICAgICAgbGF5ZXIucG9seShcbiAgICAgICAgICAncG9seWxpbmUnLFxuICAgICAgICAgIGRyYWZ0LnBhdGgubWFwKChbeCwgeV0pID0+ICh7IHgsIHkgfSkpLFxuICAgICAgICApLFxuICAgICAgKTtcbiAgICB9XG4gIH1cblxuICBwcml2YXRlIHN0eWxlRHJhZnQoZWw6IFNWR0VsZW1lbnQpOiB2b2lkIHtcbiAgICBlbC5zZXRBdHRyaWJ1dGUoJ3N0cm9rZScsIHRoaXMuc3RvcmUuZ2V0U2hhcGVDb2xvcigpIHx8ICcjMDBmZmZmJyk7XG4gICAgZWwuc2V0QXR0cmlidXRlKCdzdHJva2Utd2lkdGgnLCAnMicpO1xuICAgIGVsLnNldEF0dHJpYnV0ZSgnc3Ryb2tlLWRhc2hhcnJheScsICc0IDMnKTtcbiAgICBlbC5zZXRBdHRyaWJ1dGUoJ2ZpbGwnLCAnbm9uZScpO1xuICAgIGVsLnNldEF0dHJpYnV0ZSgndmVjdG9yLWVmZmVjdCcsICdub24tc2NhbGluZy1zdHJva2UnKTtcbiAgfVxufVxuIl19
|
|
@@ -37,6 +37,12 @@ export function silenceOsdMultiImageAdvisory() {
|
|
|
37
37
|
});
|
|
38
38
|
osd.__multiImageFilterInstalled = true;
|
|
39
39
|
}
|
|
40
|
+
/** Tile cache entries a single image keeps per tiled image (one per channel when drawn per channel). */
|
|
41
|
+
const TILES_PER_IMAGE = 150;
|
|
42
|
+
/** The most tiles a single per-channel image keeps (each a decoded 512² tile, ~1 MB). */
|
|
43
|
+
const MAX_CHANNEL_TILES = 1200;
|
|
44
|
+
/** Tile requests in flight at once for an image drawn per channel. */
|
|
45
|
+
const CHANNEL_REQUEST_LIMIT = 12;
|
|
40
46
|
/**
|
|
41
47
|
* The options object handed to the OpenSeadragon factory. Pure: every value
|
|
42
48
|
* that depends on the service comes in through `input`.
|
|
@@ -122,7 +128,17 @@ export function buildViewerOptions(input) {
|
|
|
122
128
|
// so they get a much larger tile budget — otherwise switching slices evicts
|
|
123
129
|
// each other's tiles and scrubbing back re-fetches. Scaled to the resident
|
|
124
130
|
// slice count; single images keep the lean default.
|
|
125
|
-
|
|
131
|
+
// A single image drawn per channel needs room for every visible channel's tiles in view: at
|
|
132
|
+
// 150 a 22-channel plate evicted tiles while they were still being converted.
|
|
133
|
+
maxImageCacheCount: input.sliceCount > 1
|
|
134
|
+
? Math.min(2400, Math.max(600, input.maxSlices * 40))
|
|
135
|
+
: Math.min(MAX_CHANNEL_TILES, TILES_PER_IMAGE * Math.max(1, Math.ceil((input.channelImages ?? 1) / 2))),
|
|
136
|
+
// OSD sends every tile request at once by default (imageLoaderLimit 0) and times each out
|
|
137
|
+
// after 30 s from when it is sent. A view of a 22-channel image asks for hundreds of tiles;
|
|
138
|
+
// the browser holds all but a few connections' worth back, so those timed out while still
|
|
139
|
+
// waiting their turn. Limited, they wait in OSD's queue (not timed), where a channel being
|
|
140
|
+
// hidden drops its own (SliceCache.revealChannelSlice). Single images keep OSD's default.
|
|
141
|
+
...((input.channelImages ?? 1) > 1 ? { imageLoaderLimit: CHANNEL_REQUEST_LIMIT } : {}),
|
|
126
142
|
};
|
|
127
143
|
}
|
|
128
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoib3BlbnNlYWRyYWdvbi12aWV3ZXItb3B0aW9ucy5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uL3NyYy9saWIvaW1wbGVtZW50YXRpb25zL29zZC9vcGVuc2VhZHJhZ29uLXZpZXdlci1vcHRpb25zLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxHQUFHLEVBQUUsTUFBTSxXQUFXLENBQUM7QUFDaEMsT0FBTyxFQUFFLG1CQUFtQixFQUFFLE1BQU0sWUFBWSxDQUFDO0FBRWpEOzs7Ozs7Ozs7R0FTRztBQUNILE1BQU0sVUFBVSw0QkFBNEI7SUFDMUMsTUFBTSxHQUFHLEdBQVEsR0FBVSxDQUFDO0lBQzVCLElBQUksR0FBRyxDQUFDLDJCQUEyQjtRQUFFLE9BQU87SUFDNUMsTUFBTSxJQUFJLEdBQ1IsR0FBRyxDQUFDLE9BQU8sSUFBSSxPQUFPLEdBQUcsQ0FBQyxPQUFPLENBQUMsS0FBSyxLQUFLLFVBQVU7UUFDcEQsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxPQUFPO1FBQ2IsQ0FBQyxDQUFDLE9BQU8sT0FBTyxLQUFLLFdBQVc7WUFDOUIsQ0FBQyxDQUFDLE9BQU87WUFDVCxDQUFDLENBQUMsSUFBSSxDQUFDO0lBQ2IsSUFBSSxDQUFDLElBQUk7UUFBRSxPQUFPO0lBQ2xCLE1BQU0sVUFBVSxHQUFHLENBQUMsQ0FBVSxFQUFFLEVBQUUsQ0FBQyxPQUFPLENBQUMsS0FBSyxRQUFRLElBQUksQ0FBQyxDQUFDLE9BQU8sQ0FBQywrQkFBK0IsQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDO0lBQzlHLEdBQUcsQ0FBQyxPQUFPLEdBQUcsSUFBSSxLQUFLLENBQUMsSUFBSSxFQUFFO1FBQzVCLEdBQUcsQ0FBQyxNQUFXLEVBQUUsSUFBWTtZQUMzQixNQUFNLElBQUksR0FBRyxNQUFNLENBQUMsSUFBSSxDQUFDLENBQUM7WUFDMUIsSUFBSSxDQUFDLElBQUksS0FBSyxPQUFPLElBQUksSUFBSSxLQUFLLE1BQU0s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LElBQUksRUFBRSxJQUFJLENBQUMsR0FBRyxDQUFDLEdBQUcsRUFBRSxLQUFLLENBQUMsU0FBUyxHQUFHLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUc7S0FDckcsQ0FBQztBQUNKLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBPU0QgfSBmcm9tICcuL29zZC1saWInO1xuaW1wb3J0IHsgT1NEX1pPT01fUEVSX1NDUk9MTCB9IGZyb20gJy4vb3NkLXpvb20nO1xuXG4vKipcbiAqIFF1aWV0IE9wZW5TZWFkcmFnb24ncyBcIltWaWV3cG9ydC4qXSBpcyBub3QgYWNjdXJhdGUgd2l0aCBtdWx0aS1pbWFnZVwiIGFkdmlzb3JpZXMuXG4gKiBBIG11bHRpY2hhbm5lbCBpbWFnZSBpcyBjb21wb3NpdGVkIGZyb20gb25lIFRpbGVkSW1hZ2UgcGVyIGNoYW5uZWwg4oCUIGEgbGVnaXRpbWF0ZVxuICogbXVsdGktaW1hZ2Ugd29ybGQg4oCUIGFuZCBPU0QgbG9ncyB0aGF0IGFkdmlzb3J5IChhdCBlcnJvciBsZXZlbCkgZnJvbSBpdHMgb3duXG4gKiBuYXZpZ2F0b3Ivb3ZlcnZpZXcgcmVuZGVyaW5nIG9uIGV2ZXJ5IGFuaW1hdGlvbiBmcmFtZSwgZmxvb2RpbmcgdGhlIGNvbnNvbGUuIE91clxuICogb3duIGltYWdlPC0+dmlld3BvcnQgY29udmVyc2lvbnMgYWxyZWFkeSByb3V0ZSB0aHJvdWdoIHdvcmxkIGl0ZW0gMCAoc2VlXG4gKiBvc2QtY29vcmRzKSwgc28gdGhlIHJlbWFpbmluZyBhZHZpc29yaWVzIGFyZSBPU0QtaW50ZXJuYWwgYW5kIG9ubHkgYWZmZWN0IHRoZVxuICogbWluaW1hcCdzIGJveCBhY2N1cmFjeSAoY29zbWV0aWMpLiBUaGlzIHdyYXBzIE9TRCdzIGxvZ2dlciBpbiBhIFByb3h5IHRoYXQgZHJvcHNcbiAqIG9ubHkgdGhhdCBvbmUgbWVzc2FnZSBzdHJpbmcgYW5kIGZvcndhcmRzIGV2ZXJ5IG90aGVyIGxvZyB1bnRvdWNoZWQuIElkZW1wb3RlbnQuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBzaWxlbmNlT3NkTXVsdGlJbWFnZUFkdmlzb3J5KCk6IHZvaWQge1xuICBjb25zdCBvc2Q6IGFueSA9IE9TRCBhcyBhbnk7XG4gIGlmIChvc2QuX19tdWx0aUltYWdlRmlsdGVySW5zdGFsbGVkKSByZXR1cm47XG4gIGNvbnN0IGJhc2U6IGFueSA9XG4gICAgb3NkLmNvbnNvbGUgJiYgdHlwZW9mIG9zZC5jb25zb2xlLmVycm9yID09PSAnZnVuY3Rpb24nXG4gICAgICA/IG9zZC5jb25zb2xlXG4gICAgICA6IHR5cGVvZiBjb25zb2xlICE9PSAndW5kZWZpbmVkJ1xuICAgICAgICA/IGNvbnNvbGVcbiAgICAgICAgOiBudWxsO1xuICBpZiAoIWJhc2UpIHJldHVybjtcbiAgY29uc3QgaXNBZHZpc29yeSA9IChhOiB1bmtub3duKSA9PiB0eXBlb2YgYSA9PT0gJ3N0cmluZycgJiYgYS5pbmRleE9mKCdub3QgYWNjdXJhdGUgd2l0aCBtdWx0aS1pbWFnZScpICE9PSAtMTtcbiAgb3NkLmNvbnNvbGUgPSBuZXcgUHJveHkoYmFzZSwge1xuICAgIGdldCh0YXJnZXQ6IGFueSwgcHJvcDogc3RyaW5nKSB7XG4gICAgICBjb25zdCBvcmlnID0gdGFyZ2V0W3Byb3BdO1xuICAgICAgaWYgKChwcm9wID09PSAnZXJyb3InIHx8IHByb3AgPT09ICd3YXJuJykgJiYgdHlwZW9mIG9yaWcgPT09ICdmdW5jdGlvbicpIHtcbiAgICAgICAgcmV0dXJuICguLi5hcmdzOiBhbnlbXSkgPT4ge1xuICAgICAgICAgIGlmIChpc0Fkdmlzb3J5KGFyZ3NbMF0pKSByZXR1cm47XG4gICAgICAgICAgb3JpZy5hcHBseSh0YXJnZXQsIGFyZ3MpO1xuICAgICAgICB9O1xuICAgICAgfVxuICAgICAgcmV0dXJuIHR5cGVvZiBvcmlnID09PSAnZnVuY3Rpb24nID8gb3JpZy5iaW5kKHRhcmdldCkgOiBvcmlnO1xuICAgIH0sXG4gIH0pO1xuICBvc2QuX19tdWx0aUltYWdlRmlsdGVySW5zdGFsbGVkID0gdHJ1ZTtcbn1cblxuLyoqIFdoYXQge0BsaW5rIGJ1aWxkVmlld2VyT3B0aW9uc30gbmVlZHMgdG8ga25vdyBhYm91dCB0aGUgdmlld2VyIGJlaW5nIG1vdW50ZWQuICovXG5leHBvcnQgaW50ZXJmYWNlIFZpZXdlck9wdGlvbnNJbnB1dCB7XG4gIC8qKiBUaGUgRE9NIGlkIE9TRCBtb3VudHMgaW50by4gKi9cbiAgaWQ6IHN0cmluZztcbiAgLyoqIFNob3cgdGhlIG92ZXJ2aWV3IG5hdmlnYXRvciAobWluaW1hcCkuICovXG4gIG5hdmlnYXRvclZpc2libGU6IGJvb2xlYW47XG4gIC8qKiBCaWxpbmVhciBzbW9vdGhpbmc7IGZhbHNlIGdpdmVzIGNyaXNwIG5lYXJlc3QtbmVpZ2hib3VyIHBpeGVscy4gKi9cbiAgc21vb3RoaW5nOiBib29sZWFuO1xuICAvKiogQmVhcmVyIHRva2VuIGZvciBPU0QncyBvd24gdGlsZSBmZXRjaGVzIChpdHMgbG9hZGVyIGJ5cGFzc2VzIEh0dHBDbGllbnQpLiAqL1xuICBhdXRoSGVhZGVyczogUmVjb3JkPHN0cmluZywgc3RyaW5nPjtcbiAgLyoqIFNsaWNlcyBpbiB0aGUgaW1hZ2UgKDEgZm9yIGEgc2luZ2xlIGltYWdlKS4gKi9cbiAgc2xpY2VDb3VudDogbnVtYmVyO1xuICAvKiogSG93IG1hbnkgc2xpY2VzIHRoZSBzbGljZSBjYWNoZSBrZWVwcyByZXNpZGVudCAoc2VlIFNsaWNlQ2FjaGUubWF4U2xpY2VzKS4gKi9cbiAgbWF4U2xpY2VzOiBudW1iZXI7XG59XG5cbi8qKlxuICogVGhlIG9wdGlvbnMgb2JqZWN0IGhhbmRlZCB0byB0aGUgT3BlblNlYWRyYWdvbiBmYWN0b3J5LiBQdXJlOiBldmVyeSB2YWx1ZVxuICogdGhhdCBkZXBlbmRzIG9uIHRoZSBzZXJ2aWNlIGNvbWVzIGluIHRocm91Z2ggYGlucHV0YC5cbiAqXG4gKiBUaGVzZSBhcmUgT1NEIGNvbmZpZyBrZXlzLCBub3QgbGlicmFyeSBjb2RlOiBPU0Qgc2lsZW50bHkgZmFsbHMgYmFjayB0byBpdHNcbiAqIG93biBkZWZhdWx0IHdoZW4gb25lIGlzIG1pc3NwZWxsZWQgb3IgcmVuYW1lZCB1cHN0cmVhbSwgc28gdGhlIHZhbHVlcyB3ZSByZWx5XG4gKiBvbiBhcmUgcGlubmVkIGJ5IGBvcGVuc2VhZHJhZ29uLXZpZXdlci1vcHRpb25zLnNwZWMudHNgLlxuICovXG5leHBvcnQgZnVuY3Rpb24gYnVpbGRWaWV3ZXJPcHRpb25zKGlucHV0OiBWaWV3ZXJPcHRpb25zSW5wdXQpOiBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPiB7XG4gIHJldHVybiB7XG4gICAgaWQ6IGlucHV0LmlkLFxuICAgIC8vIFNpbXBsZS1tb2RlIHotc2NydWIgY2FsbHMgdmlld2VyLm9wZW4oKSBhZ2FpbiBwZXIgc2xpY2UgKHNlZVxuICAgIC8vIHNldFpJbmRleCkg4oCUIHdpdGhvdXQgdGhpcyBpdCByZXNldHMgdG8gdGhlIGhvbWUgem9vbS9wYW4gb24gZXZlcnlcbiAgICAvLyBzbGljZSBjaGFuZ2UuIFRpbGVkIG1vZGUgbmV2ZXIgcmUtb3BlbnMgKGl0IHRvZ2dsZXMgcHJlLWFkZGVkXG4gICAgLy8gVGlsZWRJbWFnZXMnIG9wYWNpdHkgaW5zdGVhZCksIHNvIHRoaXMgaXMgYSBuby1vcCB0aGVyZS5cbiAgICBwcmVzZXJ2ZVZpZXdwb3J0OiB0cnVlLFxuICAgIC8vIFVzZSB0aGUgMkQgY2FudmFzIGRyYXdlciwgbm90IFdlYkdMOiBjcmVhdGluZy9kZXN0cm95aW5nIGEgdmlld2VyIG9uXG4gICAgLy8gZWFjaCBlbmdpbmUgdG9nZ2xlIC8gaW1hZ2UgbG9hZCBjaHVybnMgV2ViR0wgY29udGV4dHMgKGJyb3dzZXJzIGNhcFxuICAgIC8vIGhvdyBtYW55IGV4aXN0IGF0IG9uY2UpLCB3aGljaCBzdXJmYWNlcyBhcyBcIldlYkdMIGNvbnRleHQgd2FzIGxvc3RcIlxuICAgIC8vIGFuZCBibGFuayB0aWxlcy4gVGhlIGNhbnZhcyBkcmF3ZXIgaGFzIG5vIHN1Y2ggbGltaXQuXG4gICAgZHJhd2VyOiAnY2FudmFzJyxcbiAgICBzaG93TmF2aWdhdGlvbkNvbnRyb2w6IGZhbHNlLCAvLyBhdm9pZHMgbmVlZGluZyB0aGUgaWNvbi1pbWFnZSBhc3NldHNcbiAgICAvLyBPdmVydmlldyB0aHVtYm5haWwgd2l0aCB0aGUgY3VycmVudC12aWV3cG9ydCByZWN0YW5nbGUsIGJvdHRvbS1yaWdodC5cbiAgICBzaG93TmF2aWdhdG9yOiBpbnB1dC5uYXZpZ2F0b3JWaXNpYmxlLFxuICAgIC8vIE5lYXJlc3QtbmVpZ2hib3VyIHdoZW4gb2ZmIOKGkiBjcmlzcCBwaXhlbHMgb24gem9vbS1pbiAocGl4ZWwgaW5zcGVjdGlvbikuXG4gICAgaW1hZ2VTbW9vdGhpbmdFbmFibGVkOiBpbnB1dC5zbW9vdGhpbmcsXG4gICAgbmF2aWdhdG9yUG9zaXRpb246ICdCT1RUT01fUklHSFQnLFxuICAgIG5hdmlnYXRvclNpemVSYXRpbzogMC4xNixcbiAgICBuYXZpZ2F0b3JBdXRvRmFkZTogZmFsc2UsXG4gICAgbmF2aWdhdG9yQmFja2dyb3VuZDogJ3JnYmEoMCwwLDAsMC41KScsXG4gICAgbG9hZFRpbGVzV2l0aEFqYXg6IHRydWUsXG4gICAgYWpheFdpdGhDcmVkZW50aWFsczogdHJ1ZSwgLy8gY29va2llIGF1dGggKG9hdXRoMi1wcm94eSlcbiAgICBhamF4SGVhZGVyczogaW5wdXQuYXV0aEhlYWRlcnMsIC8vIGJlYXJlciBhdXRoIChBdXRoMCksIHdoZW4gYXZhaWxhYmxlXG4gICAgY3Jvc3NPcmlnaW5Qb2xpY3k6ICdBbm9ueW1vdXMnLFxuICAgIC8vIEdlbnRsZXIgem9vbTogdGhlIGRlZmF1bHQgKDEuMikgZmVlbHMgZmFzdCBhbmQgYmlnIGp1bXBzIGNyb3NzIHNldmVyYWxcbiAgICAvLyBweXJhbWlkIGxldmVscyBhdCBvbmNlLCBmaXJpbmcgYSBidXJzdCBvZiB0aWxlIHJlcXVlc3RzLiBTaGFyZWQgd2l0aCB0aGVcbiAgICAvLyByZWdpb24gb3ZlcmxheSwgd2hpY2ggdGFrZXMgdGhlIHdoZWVsIG92ZXIgd2hpbGUgYSB0b29sIGlzIGFjdGl2ZS5cbiAgICB6b29tUGVyU2Nyb2xsOiBPU0RfWk9PTV9QRVJfU0NST0xMLFxuICAgIC8vIENsaWNrLXRvLXpvb20gdG93YXJkIHRoZSBjbGlja2VkIHBvaW50IChPcGVuU2VhZHJhZ29uJ3MgZGVmYXVsdCBkZW1vXG4gICAgLy8gYmVoYXZpb3VyKS4gT25seSBhcHBsaWVzIHdoZW4gbm8gcmVnaW9uIHRvb2wgaXMgYWN0aXZlIOKAlCBhbiBhY3RpdmUgdG9vbFxuICAgIC8vIGRpc2FibGVzIE9TRCBtb3VzZS1uYXYgc28gY2xpY2tzIGRyYXcvc2VsZWN0IGluc3RlYWQgb2Ygem9vbWluZy5cbiAgICBnZXN0dXJlU2V0dGluZ3NNb3VzZTogeyBjbGlja1RvWm9vbTogdHJ1ZSwgc2Nyb2xsVG9ab29tOiB0cnVlIH0sXG4gICAgLy8gWm9vbSBsaW1pdHMgKGppdC11aSM5NCkuIERlZmF1bHQgbWluWm9vbUltYWdlUmF0aW8gKDAuOSkgc3RvcHMgeW91IGZyb21cbiAgICAvLyB6b29taW5nIHRoZSBpbWFnZSBzbWFsbGVyIHRoYW4gfmhvbWU7IGRyb3AgaXQgc28gdGhlIGltYWdlIGNhbiBiZSBzaHJ1bmtcbiAgICAvLyBmcmVlbHkgKGVmZmVjdGl2ZWx5IG5vIG1pbmltdW0pLiBEZWZhdWx0IG1heFpvb21QaXhlbFJhdGlvICgxLjEpIGNhcHNcbiAgICAvLyB6b29tLWluIGF0IH4xIHNjcmVlbiBweCBwZXIgaW1hZ2UgcHg7IHJhaXNlIGl0IHNvIHlvdSBjYW4gem9vbSBpbiB0b1xuICAgIC8vIGluc3BlY3QgaW5kaXZpZHVhbCBwaXhlbHMgKHBhaXJlZCB3aXRoIGltYWdlU21vb3RoaW5nRW5hYmxlZD1mYWxzZSBmb3JcbiAgICAvLyBjcmlzcCBuZWFyZXN0LW5laWdoYm91ciBibG9ja3MpLlxuICAgIG1pblpvb21JbWFnZVJhdGlvOiAwLjAxLFxuICAgIG1heFpvb21QaXhlbFJhdGlvOiAyMCxcbiAgICAvLyBPU0QncyBzdG9jayB2YWx1ZSwgcmVzdG9yZWQuIERPIE5PVCBSQUlTRSBJVDogdGhlIG5hbWUgcmVhZHMgbGlrZVxuICAgIC8vIFwibWluaW11bSBzaGFycG5lc3NcIiBidXQgaXQgaXMgdGhlIG9wcG9zaXRlLiBGcm9tIE9TRCdzIG93blxuICAgIC8vIFRpbGVkSW1hZ2UuX2dldExldmVsc0ludGVydmFsOlxuICAgIC8vXG4gICAgLy8gICBoaWdoZXN0TGV2ZWwgPSBmbG9vciggbG9nMiggY3VycmVudFplcm9SYXRpbyAvIG1pblBpeGVsUmF0aW8gKSApXG4gICAgLy9cbiAgICAvLyBtaW5QaXhlbFJhdGlvIGlzIGEgZmxvb3Igb24gaG93IHNtYWxsIGEgdGlsZSBwaXhlbCBtYXkgc2hyaW5rLCBhbmQgaXRcbiAgICAvLyBESVZJREVTIGludG8gdGhlIHJhdGlvIC0gc28gcmFpc2luZyBpdCBsb3dlcnMgdGhlIGNob3NlbiBsZXZlbCwgaS5lLlxuICAgIC8vIHBpY2tzIGEgQ09BUlNFUiBpbWFnZS4gT1NEJ3Mgb3duIGNvbW1lbnQgb24gdGhlIGRlZmF1bHQgc2F5cyBhcyBtdWNoOlxuICAgIC8vIFwiY2xvc2VyIHRvIDAgZHJhd3MgdGlsZXMgbWVhbnQgZm9yIGEgaGlnaGVyIHpvb20gYXQgdGhpcyB6b29tXCIuXG4gICAgLy9cbiAgICAvLyBNZWFzdXJlZCBvbiBhIGZsYXQgMjIzMDR4MjQ1MjggaW1hZ2UgKGxldmVscyA2OTcvMTM5NC8yNzg4LzU1NzYvMTExNTIvXG4gICAgLy8gMjIzMDQpLCBwcmVkaWN0ZWQgbGV2ZWwgbWF0Y2hpbmcgYWN0dWFsIGluIGFsbCBuaW5lIHRyaWFsczpcbiAgICAvL1xuICAgIC8vICAgICAgICAgICAgem9vbSAyICAgICAgICB6b29tIDggICAgICAgIH4xOjFcbiAgICAvLyAgIDEuMCAgICAgIDEuMzR4IHVwICAgICAgMS4zNHggdXAgICAgICAxLjg2eCB1cFxuICAgIC8vICAgMC41ICAgICAgMC42N3ggKG5vbmUpICAwLjY3eCAobm9uZSkgIDAuOTN4IC0+IGZ1bGwgcmVzXG4gICAgLy8gICAwLjI1ICAgICAwLjMzeCAgICAgICAgIDAuMzN4ICAgICAgICAgMC45M3hcbiAgICAvL1xuICAgIC8vIDAuNSBpcyB3aGF0IGdpdmVzIFwibmV2ZXIgdXBzY2FsZWQgYmVsb3cgbmF0aXZlLCBmdWxsIHJlc29sdXRpb24gYXQgMToxXCIuXG4gICAgLy8gMC4yNSBpcyBub3QgYmV0dGVyIC0gaXQganVtcHMgdHdvIHJ1bmdzIGZpbmVyIGFuZCBmZXRjaGVzIH40eCB0aGUgdGlsZXNcbiAgICAvLyBmb3Igbm8gdmlzaWJsZSBnYWluLCBhbmQgdGlsZXMgYXJlIG5vdCBjYWNoZWQgYnkgdGhlIGluZ3Jlc3MuXG4gICAgbWluUGl4ZWxSYXRpbzogMC41LFxuICAgIC8vIFdhaXQgZm9yIHRoZSB2aWV3IHRvIHNldHRsZSBiZWZvcmUgcHVsbGluZyBuZXcgdGlsZXMgKGxlc3MgY2h1cm4pLlxuICAgIGltbWVkaWF0ZVJlbmRlcjogZmFsc2UsXG4gICAgYW5pbWF0aW9uVGltZTogMC40LFxuICAgIC8vIFJlbGVhc2UgbWVtb3J5IGFnZ3Jlc3NpdmVseTogY2FwIHRoZSB0aWxlIGNhY2hlIHNvIHRpbGVzIG91dHNpZGUgdGhlXG4gICAgLy8gY3VycmVudCB2aWV3IChlLmcuIHRoZSBjb2Fyc2VyIGxldmVscyBsZWZ0IGJlaGluZCBhZnRlciB6b29taW5nIGluKSBhcmVcbiAgICAvLyBldmljdGVkIGluc3RlYWQgb2YgYWNjdW11bGF0aW5nLiBMYXJnZSB3aG9sZS1zbGlkZSB0aWxlcyDigJQgZG91YmxlZCB3aGVuXG4gICAgLy8gdGhlIGNvbG9ybWFwIHBpcGVsaW5lIGtlZXBzIGEgcmVjb2xvcmVkIGNvcHkg4oCUIG1ha2UgYW4gdW5ib3VuZGVkIGNhY2hlXG4gICAgLy8gY29zdGx5LiBUdW5hYmxlOyBsb3dlciA9IGxlc3MgbWVtb3J5LCBtb3JlIHJlLWZldGNoIG9uIHBhbi1iYWNrLlxuICAgIC8vIFN0YWNrcyBrZWVwIG1hbnkgc2xpY2VzIHJlc2lkZW50ICh0aGUgd2hvbGUgc3RhY2sgaXMgYmFja2dyb3VuZC1sb2FkZWQpLFxuICAgIC8vIHNvIHRoZXkgZ2V0IGEgbXVjaCBsYXJnZXIgdGlsZSBidWRnZXQg4oCUIG90aGVyd2lzZSBzd2l0Y2hpbmcgc2xpY2VzIGV2aWN0c1xuICAgIC8vIGVhY2ggb3RoZXIncyB0aWxlcyBhbmQgc2NydWJiaW5nIGJhY2sgcmUtZmV0Y2hlcy4gU2NhbGVkIHRvIHRoZSByZXNpZGVudFxuICAgIC8vIHNsaWNlIGNvdW50OyBzaW5nbGUgaW1hZ2VzIGtlZXAgdGhlIGxlYW4gZGVmYXVsdC5cbiAgICBtYXhJbWFnZUNhY2hlQ291bnQ6IGlucHV0LnNsaWNlQ291bnQgPiAxID8gTWF0aC5taW4oMjQwMCwgTWF0aC5tYXgoNjAwLCBpbnB1dC5tYXhTbGljZXMgKiA0MCkpIDogMTUwLFxuICB9O1xufVxuIl19
|
|
144
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoib3BlbnNlYWRyYWdvbi12aWV3ZXItb3B0aW9ucy5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uL3NyYy9saWIvaW1wbGVtZW50YXRpb25zL29zZC9vcGVuc2VhZHJhZ29uLXZpZXdlci1vcHRpb25zLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxHQUFHLEVBQUUsTUFBTSxXQUFXLENBQUM7QUFDaEMsT0FBTyxFQUFFLG1CQUFtQixFQUFFLE1BQU0sWUFBWSxDQUFDO0FBRWpEOzs7Ozs7Ozs7R0FTRztBQUNILE1BQU0sVUFBVSw0QkFBNEI7SUFDMUMsTUFBTSxHQUFHLEdBQVEsR0FBVSxDQUFDO0lBQzVCLElBQUksR0FBRyxDQUFDLDJCQUEyQjtRQUFFLE9BQU87SUFDNUMsTUFBTSxJQUFJLEdBQ1IsR0FBRyxDQUFDLE9BQU8sSUFBSSxPQUFPLEdBQUcsQ0FBQyxPQUFPLENBQUMsS0FBSyxLQUFLLFVBQVU7UUFDcEQsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxPQUFPO1FBQ2IsQ0FBQyxDQUFDLE9BQU8sT0FBTyxLQUFLLFdBQVc7WUFDOUIsQ0FBQyxDQUFDLE9BQU87WUFDVCxDQUFDLENBQUMsSUFBSSxDQUFDO0lBQ2IsSUFBSSxDQUFDLElBQUk7UUFBRSxPQUFPO0lBQ2xCLE1BQU0sVUFBVSxHQUFHLENBQUMsQ0FBVSxFQUFFLEVBQUUsQ0FBQyxPQUFPLENBQUMsS0FBSyxRQUFRLElBQUksQ0FBQyxDQUFDLE9BQU8sQ0FBQywrQkFBK0IsQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDO0lBQzlHLEdBQUcsQ0FBQyxPQUFPLEdBQUcsSUFBSSxLQUFLLENBQUMsSUFBSSxFQUFFO1FBQzVCLEdBQUcsQ0FBQyxNQUFXLEVBQUUsSUFBWTtZQUMzQixNQUFNLElBQUksR0FBRyxNQUFNLENBQUMsSUFBSSxDQUFDLENBQUM7WUFDMUIsSUFBSSxDQUFDLElBQUksS0FBSyxPQUFPLElBQUksSUFBSSxLQUFLLE1BQU0s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bUVBQW1FO1FBQ25FLDJFQUEyRTtRQUMzRSw0RUFBNEU7UUFDNUUsMkVBQTJFO1FBQzNFLG9EQUFvRDtRQUNwRCw0RkFBNEY7UUFDNUYsOEVBQThFO1FBQzlFLGtCQUFrQixFQUNoQixLQUFLLENBQUMsVUFBVSxHQUFHLENBQUM7WUFDbEIsQ0FBQyxDQUFDLElBQUksQ0FBQyxHQUFHLENBQUMsSUFBSSxFQUFFLElBQUksQ0FBQyxHQUFHLENBQUMsR0FBRyxFQUFFLEtBQUssQ0FBQyxTQUFTLEdBQUcsRUFBRSxDQUFDLENBQUM7WUFDckQsQ0FBQyxDQUFDLElBQUksQ0FBQyxHQUFHLENBQUMsaUJBQWlCLEVBQUUsZUFBZSxHQUFHLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQyxFQUFFLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxLQUFLLENBQUMsYUFBYSxJQUFJLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUM7UUFDM0csMEZBQTBGO1FBQzFGLDRGQUE0RjtRQUM1RiwwRkFBMEY7UUFDMUYsMkZBQTJGO1FBQzNGLDBGQUEwRjtRQUMxRixHQUFHLENBQUMsQ0FBQyxLQUFLLENBQUMsYUFBYSxJQUFJLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxnQkFBZ0IsRUFBRSxxQkFBcUIsRUFBRSxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUM7S0FDdkYsQ0FBQztBQUNKLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBPU0QgfSBmcm9tICcuL29zZC1saWInO1xuaW1wb3J0IHsgT1NEX1pPT01fUEVSX1NDUk9MTCB9IGZyb20gJy4vb3NkLXpvb20nO1xuXG4vKipcbiAqIFF1aWV0IE9wZW5TZWFkcmFnb24ncyBcIltWaWV3cG9ydC4qXSBpcyBub3QgYWNjdXJhdGUgd2l0aCBtdWx0aS1pbWFnZVwiIGFkdmlzb3JpZXMuXG4gKiBBIG11bHRpY2hhbm5lbCBpbWFnZSBpcyBjb21wb3NpdGVkIGZyb20gb25lIFRpbGVkSW1hZ2UgcGVyIGNoYW5uZWwg4oCUIGEgbGVnaXRpbWF0ZVxuICogbXVsdGktaW1hZ2Ugd29ybGQg4oCUIGFuZCBPU0QgbG9ncyB0aGF0IGFkdmlzb3J5IChhdCBlcnJvciBsZXZlbCkgZnJvbSBpdHMgb3duXG4gKiBuYXZpZ2F0b3Ivb3ZlcnZpZXcgcmVuZGVyaW5nIG9uIGV2ZXJ5IGFuaW1hdGlvbiBmcmFtZSwgZmxvb2RpbmcgdGhlIGNvbnNvbGUuIE91clxuICogb3duIGltYWdlPC0+dmlld3BvcnQgY29udmVyc2lvbnMgYWxyZWFkeSByb3V0ZSB0aHJvdWdoIHdvcmxkIGl0ZW0gMCAoc2VlXG4gKiBvc2QtY29vcmRzKSwgc28gdGhlIHJlbWFpbmluZyBhZHZpc29yaWVzIGFyZSBPU0QtaW50ZXJuYWwgYW5kIG9ubHkgYWZmZWN0IHRoZVxuICogbWluaW1hcCdzIGJveCBhY2N1cmFjeSAoY29zbWV0aWMpLiBUaGlzIHdyYXBzIE9TRCdzIGxvZ2dlciBpbiBhIFByb3h5IHRoYXQgZHJvcHNcbiAqIG9ubHkgdGhhdCBvbmUgbWVzc2FnZSBzdHJpbmcgYW5kIGZvcndhcmRzIGV2ZXJ5IG90aGVyIGxvZyB1bnRvdWNoZWQuIElkZW1wb3RlbnQuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBzaWxlbmNlT3NkTXVsdGlJbWFnZUFkdmlzb3J5KCk6IHZvaWQge1xuICBjb25zdCBvc2Q6IGFueSA9IE9TRCBhcyBhbnk7XG4gIGlmIChvc2QuX19tdWx0aUltYWdlRmlsdGVySW5zdGFsbGVkKSByZXR1cm47XG4gIGNvbnN0IGJhc2U6IGFueSA9XG4gICAgb3NkLmNvbnNvbGUgJiYgdHlwZW9mIG9zZC5jb25zb2xlLmVycm9yID09PSAnZnVuY3Rpb24nXG4gICAgICA/IG9zZC5jb25zb2xlXG4gICAgICA6IHR5cGVvZiBjb25zb2xlICE9PSAndW5kZWZpbmVkJ1xuICAgICAgICA/IGNvbnNvbGVcbiAgICAgICAgOiBudWxsO1xuICBpZiAoIWJhc2UpIHJldHVybjtcbiAgY29uc3QgaXNBZHZpc29yeSA9IChhOiB1bmtub3duKSA9PiB0eXBlb2YgYSA9PT0gJ3N0cmluZycgJiYgYS5pbmRleE9mKCdub3QgYWNjdXJhdGUgd2l0aCBtdWx0aS1pbWFnZScpICE9PSAtMTtcbiAgb3NkLmNvbnNvbGUgPSBuZXcgUHJveHkoYmFzZSwge1xuICAgIGdldCh0YXJnZXQ6IGFueSwgcHJvcDogc3RyaW5nKSB7XG4gICAgICBjb25zdCBvcmlnID0gdGFyZ2V0W3Byb3BdO1xuICAgICAgaWYgKChwcm9wID09PSAnZXJyb3InIHx8IHByb3AgPT09ICd3YXJuJykgJiYgdHlwZW9mIG9yaWcgPT09ICdmdW5jdGlvbicpIHtcbiAgICAgICAgcmV0dXJuICguLi5hcmdzOiBhbnlbXSkgPT4ge1xuICAgICAgICAgIGlmIChpc0Fkdmlzb3J5KGFyZ3NbMF0pKSByZXR1cm47XG4gICAgICAgICAgb3JpZy5hcHBseSh0YXJnZXQsIGFyZ3MpO1xuICAgICAgICB9O1xuICAgICAgfVxuICAgICAgcmV0dXJuIHR5cGVvZiBvcmlnID09PSAnZnVuY3Rpb24nID8gb3JpZy5iaW5kKHRhcmdldCkgOiBvcmlnO1xuICAgIH0sXG4gIH0pO1xuICBvc2QuX19tdWx0aUltYWdlRmlsdGVySW5zdGFsbGVkID0gdHJ1ZTtcbn1cblxuLyoqIFdoYXQge0BsaW5rIGJ1aWxkVmlld2VyT3B0aW9uc30gbmVlZHMgdG8ga25vdyBhYm91dCB0aGUgdmlld2VyIGJlaW5nIG1vdW50ZWQuICovXG5leHBvcnQgaW50ZXJmYWNlIFZpZXdlck9wdGlvbnNJbnB1dCB7XG4gIC8qKiBUaGUgRE9NIGlkIE9TRCBtb3VudHMgaW50by4gKi9cbiAgaWQ6IHN0cmluZztcbiAgLyoqIFNob3cgdGhlIG92ZXJ2aWV3IG5hdmlnYXRvciAobWluaW1hcCkuICovXG4gIG5hdmlnYXRvclZpc2libGU6IGJvb2xlYW47XG4gIC8qKiBCaWxpbmVhciBzbW9vdGhpbmc7IGZhbHNlIGdpdmVzIGNyaXNwIG5lYXJlc3QtbmVpZ2hib3VyIHBpeGVscy4gKi9cbiAgc21vb3RoaW5nOiBib29sZWFuO1xuICAvKiogQmVhcmVyIHRva2VuIGZvciBPU0QncyBvd24gdGlsZSBmZXRjaGVzIChpdHMgbG9hZGVyIGJ5cGFzc2VzIEh0dHBDbGllbnQpLiAqL1xuICBhdXRoSGVhZGVyczogUmVjb3JkPHN0cmluZywgc3RyaW5nPjtcbiAgLyoqIFNsaWNlcyBpbiB0aGUgaW1hZ2UgKDEgZm9yIGEgc2luZ2xlIGltYWdlKS4gKi9cbiAgc2xpY2VDb3VudDogbnVtYmVyO1xuICAvKiogSG93IG1hbnkgc2xpY2VzIHRoZSBzbGljZSBjYWNoZSBrZWVwcyByZXNpZGVudCAoc2VlIFNsaWNlQ2FjaGUubWF4U2xpY2VzKS4gKi9cbiAgbWF4U2xpY2VzOiBudW1iZXI7XG4gIC8qKiBUaWxlZCBpbWFnZXMgcGVyIHNsaWNlOiB0aGUgY2hhbm5lbCBjb3VudCB3aGVuIGNoYW5uZWxzIGFyZSBkcmF3biBwZXIgY2hhbm5lbCwgZWxzZSAxLiAqL1xuICBjaGFubmVsSW1hZ2VzPzogbnVtYmVyO1xufVxuXG4vKiogVGlsZSBjYWNoZSBlbnRyaWVzIGEgc2luZ2xlIGltYWdlIGtlZXBzIHBlciB0aWxlZCBpbWFnZSAob25lIHBlciBjaGFubmVsIHdoZW4gZHJhd24gcGVyIGNoYW5uZWwpLiAqL1xuY29uc3QgVElMRVNfUEVSX0lNQUdFID0gMTUwO1xuLyoqIFRoZSBtb3N0IHRpbGVzIGEgc2luZ2xlIHBlci1jaGFubmVsIGltYWdlIGtlZXBzIChlYWNoIGEgZGVjb2RlZCA1MTLCsiB0aWxlLCB+MSBNQikuICovXG5jb25zdCBNQVhfQ0hBTk5FTF9USUxFUyA9IDEyMDA7XG4vKiogVGlsZSByZXF1ZXN0cyBpbiBmbGlnaHQgYXQgb25jZSBmb3IgYW4gaW1hZ2UgZHJhd24gcGVyIGNoYW5uZWwuICovXG5jb25zdCBDSEFOTkVMX1JFUVVFU1RfTElNSVQgPSAxMjtcblxuLyoqXG4gKiBUaGUgb3B0aW9ucyBvYmplY3QgaGFuZGVkIHRvIHRoZSBPcGVuU2VhZHJhZ29uIGZhY3RvcnkuIFB1cmU6IGV2ZXJ5IHZhbHVlXG4gKiB0aGF0IGRlcGVuZHMgb24gdGhlIHNlcnZpY2UgY29tZXMgaW4gdGhyb3VnaCBgaW5wdXRgLlxuICpcbiAqIFRoZXNlIGFyZSBPU0QgY29uZmlnIGtleXMsIG5vdCBsaWJyYXJ5IGNvZGU6IE9TRCBzaWxlbnRseSBmYWxscyBiYWNrIHRvIGl0c1xuICogb3duIGRlZmF1bHQgd2hlbiBvbmUgaXMgbWlzc3BlbGxlZCBvciByZW5hbWVkIHVwc3RyZWFtLCBzbyB0aGUgdmFsdWVzIHdlIHJlbHlcbiAqIG9uIGFyZSBwaW5uZWQgYnkgYG9wZW5zZWFkcmFnb24tdmlld2VyLW9wdGlvbnMuc3BlYy50c2AuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBidWlsZFZpZXdlck9wdGlvbnMoaW5wdXQ6IFZpZXdlck9wdGlvbnNJbnB1dCk6IFJlY29yZDxzdHJpbmcsIHVua25vd24+IHtcbiAgcmV0dXJuIHtcbiAgICBpZDogaW5wdXQuaWQsXG4gICAgLy8gU2ltcGxlLW1vZGUgei1zY3J1YiBjYWxscyB2aWV3ZXIub3BlbigpIGFnYWluIHBlciBzbGljZSAoc2VlXG4gICAgLy8gc2V0WkluZGV4KSDigJQgd2l0aG91dCB0aGlzIGl0IHJlc2V0cyB0byB0aGUgaG9tZSB6b29tL3BhbiBvbiBldmVyeVxuICAgIC8vIHNsaWNlIGNoYW5nZS4gVGlsZWQgbW9kZSBuZXZlciByZS1vcGVucyAoaXQgdG9nZ2xlcyBwcmUtYWRkZWRcbiAgICAvLyBUaWxlZEltYWdlcycgb3BhY2l0eSBpbnN0ZWFkKSwgc28gdGhpcyBpcyBhIG5vLW9wIHRoZXJlLlxuICAgIHByZXNlcnZlVmlld3BvcnQ6IHRydWUsXG4gICAgLy8gVXNlIHRoZSAyRCBjYW52YXMgZHJhd2VyLCBub3QgV2ViR0w6IGNyZWF0aW5nL2Rlc3Ryb3lpbmcgYSB2aWV3ZXIgb25cbiAgICAvLyBlYWNoIGVuZ2luZSB0b2dnbGUgLyBpbWFnZSBsb2FkIGNodXJucyBXZWJHTCBjb250ZXh0cyAoYnJvd3NlcnMgY2FwXG4gICAgLy8gaG93IG1hbnkgZXhpc3QgYXQgb25jZSksIHdoaWNoIHN1cmZhY2VzIGFzIFwiV2ViR0wgY29udGV4dCB3YXMgbG9zdFwiXG4gICAgLy8gYW5kIGJsYW5rIHRpbGVzLiBUaGUgY2FudmFzIGRyYXdlciBoYXMgbm8gc3VjaCBsaW1pdC5cbiAgICBkcmF3ZXI6ICdjYW52YXMnLFxuICAgIHNob3dOYXZpZ2F0aW9uQ29udHJvbDogZmFsc2UsIC8vIGF2b2lkcyBuZWVkaW5nIHRoZSBpY29uLWltYWdlIGFzc2V0c1xuICAgIC8vIE92ZXJ2aWV3IHRodW1ibmFpbCB3aXRoIHRoZSBjdXJyZW50LXZpZXdwb3J0IHJlY3RhbmdsZSwgYm90dG9tLXJpZ2h0LlxuICAgIHNob3dOYXZpZ2F0b3I6IGlucHV0Lm5hdmlnYXRvclZpc2libGUsXG4gICAgLy8gTmVhcmVzdC1uZWlnaGJvdXIgd2hlbiBvZmYg4oaSIGNyaXNwIHBpeGVscyBvbiB6b29tLWluIChwaXhlbCBpbnNwZWN0aW9uKS5cbiAgICBpbWFnZVNtb290aGluZ0VuYWJsZWQ6IGlucHV0LnNtb290aGluZyxcbiAgICBuYXZpZ2F0b3JQb3NpdGlvbjogJ0JPVFRPTV9SSUdIVCcsXG4gICAgbmF2aWdhdG9yU2l6ZVJhdGlvOiAwLjE2LFxuICAgIG5hdmlnYXRvckF1dG9GYWRlOiBmYWxzZSxcbiAgICBuYXZpZ2F0b3JCYWNrZ3JvdW5kOiAncmdiYSgwLDAsMCwwLjUpJyxcbiAgICBsb2FkVGlsZXNXaXRoQWpheDogdHJ1ZSxcbiAgICBhamF4V2l0aENyZWRlbnRpYWxzOiB0cnVlLCAvLyBjb29raWUgYXV0aCAob2F1dGgyLXByb3h5KVxuICAgIGFqYXhIZWFkZXJzOiBpbnB1dC5hdXRoSGVhZGVycywgLy8gYmVhcmVyIGF1dGggKEF1dGgwKSwgd2hlbiBhdmFpbGFibGVcbiAgICBjcm9zc09yaWdpblBvbGljeTogJ0Fub255bW91cycsXG4gICAgLy8gR2VudGxlciB6b29tOiB0aGUgZGVmYXVsdCAoMS4yKSBmZWVscyBmYXN0IGFuZCBiaWcganVtcHMgY3Jvc3Mgc2V2ZXJhbFxuICAgIC8vIHB5cmFtaWQgbGV2ZWxzIGF0IG9uY2UsIGZpcmluZyBhIGJ1cnN0IG9mIHRpbGUgcmVxdWVzdHMuIFNoYXJlZCB3aXRoIHRoZVxuICAgIC8vIHJlZ2lvbiBvdmVybGF5LCB3aGljaCB0YWtlcyB0aGUgd2hlZWwgb3ZlciB3aGlsZSBhIHRvb2wgaXMgYWN0aXZlLlxuICAgIHpvb21QZXJTY3JvbGw6IE9TRF9aT09NX1BFUl9TQ1JPTEwsXG4gICAgLy8gQ2xpY2stdG8tem9vbSB0b3dhcmQgdGhlIGNsaWNrZWQgcG9pbnQgKE9wZW5TZWFkcmFnb24ncyBkZWZhdWx0IGRlbW9cbiAgICAvLyBiZWhhdmlvdXIpLiBPbmx5IGFwcGxpZXMgd2hlbiBubyByZWdpb24gdG9vbCBpcyBhY3RpdmUg4oCUIGFuIGFjdGl2ZSB0b29sXG4gICAgLy8gZGlzYWJsZXMgT1NEIG1vdXNlLW5hdiBzbyBjbGlja3MgZHJhdy9zZWxlY3QgaW5zdGVhZCBvZiB6b29taW5nLlxuICAgIGdlc3R1cmVTZXR0aW5nc01vdXNlOiB7IGNsaWNrVG9ab29tOiB0cnVlLCBzY3JvbGxUb1pvb206IHRydWUgfSxcbiAgICAvLyBab29tIGxpbWl0cyAoaml0LXVpIzk0KS4gRGVmYXVsdCBtaW5ab29tSW1hZ2VSYXRpbyAoMC45KSBzdG9wcyB5b3UgZnJvbVxuICAgIC8vIHpvb21pbmcgdGhlIGltYWdlIHNtYWxsZXIgdGhhbiB+aG9tZTsgZHJvcCBpdCBzbyB0aGUgaW1hZ2UgY2FuIGJlIHNocnVua1xuICAgIC8vIGZyZWVseSAoZWZmZWN0aXZlbHkgbm8gbWluaW11bSkuIERlZmF1bHQgbWF4Wm9vbVBpeGVsUmF0aW8gKDEuMSkgY2Fwc1xuICAgIC8vIHpvb20taW4gYXQgfjEgc2NyZWVuIHB4IHBlciBpbWFnZSBweDsgcmFpc2UgaXQgc28geW91IGNhbiB6b29tIGluIHRvXG4gICAgLy8gaW5zcGVjdCBpbmRpdmlkdWFsIHBpeGVscyAocGFpcmVkIHdpdGggaW1hZ2VTbW9vdGhpbmdFbmFibGVkPWZhbHNlIGZvclxuICAgIC8vIGNyaXNwIG5lYXJlc3QtbmVpZ2hib3VyIGJsb2NrcykuXG4gICAgbWluWm9vbUltYWdlUmF0aW86IDAuMDEsXG4gICAgbWF4Wm9vbVBpeGVsUmF0aW86IDIwLFxuICAgIC8vIE9TRCdzIHN0b2NrIHZhbHVlLCByZXN0b3JlZC4gRE8gTk9UIFJBSVNFIElUOiB0aGUgbmFtZSByZWFkcyBsaWtlXG4gICAgLy8gXCJtaW5pbXVtIHNoYXJwbmVzc1wiIGJ1dCBpdCBpcyB0aGUgb3Bwb3NpdGUuIEZyb20gT1NEJ3Mgb3duXG4gICAgLy8gVGlsZWRJbWFnZS5fZ2V0TGV2ZWxzSW50ZXJ2YWw6XG4gICAgLy9cbiAgICAvLyAgIGhpZ2hlc3RMZXZlbCA9IGZsb29yKCBsb2cyKCBjdXJyZW50WmVyb1JhdGlvIC8gbWluUGl4ZWxSYXRpbyApIClcbiAgICAvL1xuICAgIC8vIG1pblBpeGVsUmF0aW8gaXMgYSBmbG9vciBvbiBob3cgc21hbGwgYSB0aWxlIHBpeGVsIG1heSBzaHJpbmssIGFuZCBpdFxuICAgIC8vIERJVklERVMgaW50byB0aGUgcmF0aW8gLSBzbyByYWlzaW5nIGl0IGxvd2VycyB0aGUgY2hvc2VuIGxldmVsLCBpLmUuXG4gICAgLy8gcGlja3MgYSBDT0FSU0VSIGltYWdlLiBPU0QncyBvd24gY29tbWVudCBvbiB0aGUgZGVmYXVsdCBzYXlzIGFzIG11Y2g6XG4gICAgLy8gXCJjbG9zZXIgdG8gMCBkcmF3cyB0aWxlcyBtZWFudCBmb3IgYSBoaWdoZXIgem9vbSBhdCB0aGlzIHpvb21cIi5cbiAgICAvL1xuICAgIC8vIE1lYXN1cmVkIG9uIGEgZmxhdCAyMjMwNHgyNDUyOCBpbWFnZSAobGV2ZWxzIDY5Ny8xMzk0LzI3ODgvNTU3Ni8xMTE1Mi9cbiAgICAvLyAyMjMwNCksIHByZWRpY3RlZCBsZXZlbCBtYXRjaGluZyBhY3R1YWwgaW4gYWxsIG5pbmUgdHJpYWxzOlxuICAgIC8vXG4gICAgLy8gICAgICAgICAgICB6b29tIDIgICAgICAgIHpvb20gOCAgICAgICAgfjE6MVxuICAgIC8vICAgMS4wICAgICAgMS4zNHggdXAgICAgICAxLjM0eCB1cCAgICAgIDEuODZ4IHVwXG4gICAgLy8gICAwLjUgICAgICAwLjY3eCAobm9uZSkgIDAuNjd4IChub25lKSAgMC45M3ggLT4gZnVsbCByZXNcbiAgICAvLyAgIDAuMjUgICAgIDAuMzN4ICAgICAgICAgMC4zM3ggICAgICAgICAwLjkzeFxuICAgIC8vXG4gICAgLy8gMC41IGlzIHdoYXQgZ2l2ZXMgXCJuZXZlciB1cHNjYWxlZCBiZWxvdyBuYXRpdmUsIGZ1bGwgcmVzb2x1dGlvbiBhdCAxOjFcIi5cbiAgICAvLyAwLjI1IGlzIG5vdCBiZXR0ZXIgLSBpdCBqdW1wcyB0d28gcnVuZ3MgZmluZXIgYW5kIGZldGNoZXMgfjR4IHRoZSB0aWxlc1xuICAgIC8vIGZvciBubyB2aXNpYmxlIGdhaW4sIGFuZCB0aWxlcyBhcmUgbm90IGNhY2hlZCBieSB0aGUgaW5ncmVzcy5cbiAgICBtaW5QaXhlbFJhdGlvOiAwLjUsXG4gICAgLy8gV2FpdCBmb3IgdGhlIHZpZXcgdG8gc2V0dGxlIGJlZm9yZSBwdWxsaW5nIG5ldyB0aWxlcyAobGVzcyBjaHVybikuXG4gICAgaW1tZWRpYXRlUmVuZGVyOiBmYWxzZSxcbiAgICBhbmltYXRpb25UaW1lOiAwLjQsXG4gICAgLy8gUmVsZWFzZSBtZW1vcnkgYWdncmVzc2l2ZWx5OiBjYXAgdGhlIHRpbGUgY2FjaGUgc28gdGlsZXMgb3V0c2lkZSB0aGVcbiAgICAvLyBjdXJyZW50IHZpZXcgKGUuZy4gdGhlIGNvYXJzZXIgbGV2ZWxzIGxlZnQgYmVoaW5kIGFmdGVyIHpvb21pbmcgaW4pIGFyZVxuICAgIC8vIGV2aWN0ZWQgaW5zdGVhZCBvZiBhY2N1bXVsYXRpbmcuIExhcmdlIHdob2xlLXNsaWRlIHRpbGVzIOKAlCBkb3VibGVkIHdoZW5cbiAgICAvLyB0aGUgY29sb3JtYXAgcGlwZWxpbmUga2VlcHMgYSByZWNvbG9yZWQgY29weSDigJQgbWFrZSBhbiB1bmJvdW5kZWQgY2FjaGVcbiAgICAvLyBjb3N0bHkuIFR1bmFibGU7IGxvd2VyID0gbGVzcyBtZW1vcnksIG1vcmUgcmUtZmV0Y2ggb24gcGFuLWJhY2suXG4gICAgLy8gU3RhY2tzIGtlZXAgbWFueSBzbGljZXMgcmVzaWRlbnQgKHRoZSB3aG9sZSBzdGFjayBpcyBiYWNrZ3JvdW5kLWxvYWRlZCksXG4gICAgLy8gc28gdGhleSBnZXQgYSBtdWNoIGxhcmdlciB0aWxlIGJ1ZGdldCDigJQgb3RoZXJ3aXNlIHN3aXRjaGluZyBzbGljZXMgZXZpY3RzXG4gICAgLy8gZWFjaCBvdGhlcidzIHRpbGVzIGFuZCBzY3J1YmJpbmcgYmFjayByZS1mZXRjaGVzLiBTY2FsZWQgdG8gdGhlIHJlc2lkZW50XG4gICAgLy8gc2xpY2UgY291bnQ7IHNpbmdsZSBpbWFnZXMga2VlcCB0aGUgbGVhbiBkZWZhdWx0LlxuICAgIC8vIEEgc2luZ2xlIGltYWdlIGRyYXduIHBlciBjaGFubmVsIG5lZWRzIHJvb20gZm9yIGV2ZXJ5IHZpc2libGUgY2hhbm5lbCdzIHRpbGVzIGluIHZpZXc6IGF0XG4gICAgLy8gMTUwIGEgMjItY2hhbm5lbCBwbGF0ZSBldmljdGVkIHRpbGVzIHdoaWxlIHRoZXkgd2VyZSBzdGlsbCBiZWluZyBjb252ZXJ0ZWQuXG4gICAgbWF4SW1hZ2VDYWNoZUNvdW50OlxuICAgICAgaW5wdXQuc2xpY2VDb3VudCA+IDFcbiAgICAgICAgPyBNYXRoLm1pbigyNDAwLCBNYXRoLm1heCg2MDAsIGlucHV0Lm1heFNsaWNlcyAqIDQwKSlcbiAgICAgICAgOiBNYXRoLm1pbihNQVhfQ0hBTk5FTF9USUxFUywgVElMRVNfUEVSX0lNQUdFICogTWF0aC5tYXgoMSwgTWF0aC5jZWlsKChpbnB1dC5jaGFubmVsSW1hZ2VzID8/IDEpIC8gMikpKSxcbiAgICAvLyBPU0Qgc2VuZHMgZXZlcnkgdGlsZSByZXF1ZXN0IGF0IG9uY2UgYnkgZGVmYXVsdCAoaW1hZ2VMb2FkZXJMaW1pdCAwKSBhbmQgdGltZXMgZWFjaCBvdXRcbiAgICAvLyBhZnRlciAzMCBzIGZyb20gd2hlbiBpdCBpcyBzZW50LiBBIHZpZXcgb2YgYSAyMi1jaGFubmVsIGltYWdlIGFza3MgZm9yIGh1bmRyZWRzIG9mIHRpbGVzO1xuICAgIC8vIHRoZSBicm93c2VyIGhvbGRzIGFsbCBidXQgYSBmZXcgY29ubmVjdGlvbnMnIHdvcnRoIGJhY2ssIHNvIHRob3NlIHRpbWVkIG91dCB3aGlsZSBzdGlsbFxuICAgIC8vIHdhaXRpbmcgdGhlaXIgdHVybi4gTGltaXRlZCwgdGhleSB3YWl0IGluIE9TRCdzIHF1ZXVlIChub3QgdGltZWQpLCB3aGVyZSBhIGNoYW5uZWwgYmVpbmdcbiAgICAvLyBoaWRkZW4gZHJvcHMgaXRzIG93biAoU2xpY2VDYWNoZS5yZXZlYWxDaGFubmVsU2xpY2UpLiBTaW5nbGUgaW1hZ2VzIGtlZXAgT1NEJ3MgZGVmYXVsdC5cbiAgICAuLi4oKGlucHV0LmNoYW5uZWxJbWFnZXMgPz8gMSkgPiAxID8geyBpbWFnZUxvYWRlckxpbWl0OiBDSEFOTkVMX1JFUVVFU1RfTElNSVQgfSA6IHt9KSxcbiAgfTtcbn1cbiJdfQ==
|