kepler.gl 3.1.0 → 3.1.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +27 -132
- package/dist/src/common-utils/src/data-type.d.ts +9 -1
- package/dist/src/components/src/common/data-table/header-cell.d.ts +1 -0
- package/dist/src/components/src/common/data-table/index.d.ts +1 -0
- package/dist/src/components/src/common/file-uploader/file-drop.d.ts +1 -32
- package/dist/src/components/src/common/item-selector/dropdown-list.d.ts +2 -2
- package/dist/src/components/src/common/item-selector/item-selector.d.ts +1 -1
- package/dist/src/components/src/common/item-selector/typeahead.d.ts +1 -1
- package/dist/src/components/src/geocoder/geocoder.d.ts +7 -0
- package/dist/src/components/src/geocoder-panel.d.ts +2 -2
- package/dist/src/components/src/hooks/use-fetch-vector-tile-metadata.d.ts +4 -3
- package/dist/src/constants/src/default-settings.d.ts +14 -1
- package/dist/src/deckgl-arrow-layers/src/constants.d.ts +0 -12
- package/dist/src/deckgl-arrow-layers/src/index.d.ts +0 -1
- package/dist/src/deckgl-arrow-layers/src/utils/utils.d.ts +12 -1
- package/dist/src/duckdb/src/components/preview-data-panel.d.ts +7 -2
- package/dist/src/duckdb/src/components/schema-panel.d.ts +12 -3
- package/dist/src/duckdb/src/processors/data-processor.d.ts +1 -0
- package/dist/src/duckdb/src/table/duckdb-table-utils.d.ts +106 -0
- package/dist/src/duckdb/src/table/duckdb-table.d.ts +5 -3
- package/dist/src/processors/src/data-processor.d.ts +15 -1
- package/dist/src/reducers/src/provider-state-updaters.d.ts +1 -0
- package/dist/src/reducers/src/vis-state-updaters.d.ts +1 -1
- package/dist/src/table/src/dataset-utils.d.ts +1 -1
- package/dist/src/table/src/tileset/vector-tile-utils.d.ts +17 -1
- package/dist/src/utils/src/application-config.d.ts +4 -3
- package/dist/src/utils/src/data-utils.d.ts +9 -3
- package/dist/src/utils/src/indexed-data-container.d.ts +2 -2
- package/dist/src/utils/src/map-style-utils/mapbox-utils.d.ts +1 -1
- package/dist/src/utils/src/map-utils.d.ts +1 -1
- package/dist/src/utils/src/plot.d.ts +2 -2
- package/package.json +5 -5
- package/src/actions/package.json +8 -8
- package/src/ai-assistant/dist/components/ai-assistant-component.js +2 -1
- package/src/ai-assistant/package.json +7 -7
- package/src/ai-assistant/src/components/ai-assistant-component.tsx +1 -0
- package/src/cloud-providers/package.json +2 -2
- package/src/common-utils/dist/data-type.d.ts +9 -1
- package/src/common-utils/dist/data-type.js +50 -1
- package/src/common-utils/package.json +3 -3
- package/src/common-utils/src/data-type.ts +49 -1
- package/src/components/dist/common/data-table/header-cell.d.ts +1 -0
- package/src/components/dist/common/data-table/header-cell.js +2 -2
- package/src/components/dist/common/data-table/index.d.ts +1 -0
- package/src/components/dist/common/data-table/index.js +5 -1
- package/src/components/dist/common/file-uploader/file-drop.d.ts +1 -32
- package/src/components/dist/common/file-uploader/file-drop.js +152 -167
- package/src/components/dist/common/item-selector/dropdown-list.d.ts +2 -2
- package/src/components/dist/common/item-selector/dropdown-list.js +2 -3
- package/src/components/dist/common/item-selector/item-selector.d.ts +1 -1
- package/src/components/dist/common/item-selector/typeahead.d.ts +1 -1
- package/src/components/dist/common/range-brush.js +3 -3
- package/src/components/dist/geocoder/geocoder.d.ts +7 -0
- package/src/components/dist/geocoder/geocoder.js +19 -11
- package/src/components/dist/geocoder-panel.d.ts +2 -2
- package/src/components/dist/geocoder-panel.js +64 -91
- package/src/components/dist/hooks/use-fetch-vector-tile-metadata.d.ts +4 -3
- package/src/components/dist/hooks/use-fetch-vector-tile-metadata.js +35 -26
- package/src/components/dist/hooks/use-legend-position.js +8 -4
- package/src/components/dist/map/map-legend-panel.js +2 -3
- package/src/components/dist/modal-container.js +8 -8
- package/src/components/dist/modals/tilesets-modals/tileset-vector-form.js +31 -12
- package/src/components/dist/side-panel/layer-panel/color-palette-preset.js +2 -2
- package/src/components/dist/side-panel/layer-panel/color-range-selector.js +10 -11
- package/src/components/dist/side-panel/layer-panel/color-selector.js +3 -3
- package/src/components/dist/side-panel/layer-panel/custom-palette.js +1 -2
- package/src/components/dist/side-panel/layer-panel/layer-configurator.js +6 -8
- package/src/components/dist/side-panel/layer-panel/vector-tile-layer-configurator.js +1 -2
- package/src/components/package.json +16 -16
- package/src/components/src/common/data-table/header-cell.tsx +2 -1
- package/src/components/src/common/data-table/index.tsx +4 -0
- package/src/components/src/common/file-uploader/file-drop.tsx +186 -161
- package/src/components/src/common/item-selector/dropdown-list.tsx +1 -6
- package/src/components/src/common/range-brush.tsx +2 -2
- package/src/components/src/geocoder/geocoder.tsx +16 -8
- package/src/components/src/geocoder-panel.tsx +95 -85
- package/src/components/src/hooks/use-fetch-vector-tile-metadata.ts +27 -25
- package/src/components/src/hooks/use-legend-position.ts +5 -2
- package/src/components/src/map/map-legend-panel.tsx +1 -2
- package/src/components/src/modal-container.tsx +7 -7
- package/src/components/src/modals/tilesets-modals/tileset-vector-form.tsx +12 -3
- package/src/components/src/side-panel/layer-panel/color-palette-preset.tsx +1 -1
- package/src/components/src/side-panel/layer-panel/color-range-selector.tsx +6 -11
- package/src/components/src/side-panel/layer-panel/color-selector.tsx +2 -2
- package/src/components/src/side-panel/layer-panel/custom-palette.tsx +0 -1
- package/src/components/src/side-panel/layer-panel/layer-configurator.tsx +23 -33
- package/src/components/src/side-panel/layer-panel/vector-tile-layer-configurator.tsx +0 -1
- package/src/constants/dist/default-settings.d.ts +14 -1
- package/src/constants/dist/default-settings.js +20 -5
- package/src/constants/node_modules/.cache/terser-webpack-plugin/content-v2/sha512/91/4f/6c65f3a1eba584ffd2d892cabc25ab5804d4a9ef53694c98707372a83e56343a274bec04f15927a6fe7602615f0f23f73ccf599f524ef97ad6c77c8832ea +1 -0
- package/src/constants/node_modules/.cache/terser-webpack-plugin/index-v5/a6/b2/5424aa4477192fb44cc90fd80892efdc96731f2ff0f48e8f28abf64243cc +2 -0
- package/src/constants/package.json +2 -2
- package/src/constants/src/default-settings.ts +16 -1
- package/src/constants/umd/keplergl.min.js +2 -2
- package/src/deckgl-arrow-layers/dist/constants.d.ts +0 -12
- package/src/deckgl-arrow-layers/dist/constants.js +4 -15
- package/src/deckgl-arrow-layers/dist/index.d.ts +0 -1
- package/src/deckgl-arrow-layers/dist/index.js +1 -8
- package/src/deckgl-arrow-layers/dist/layers/geo-arrow-scatterplot-layer.js +4 -4
- package/src/deckgl-arrow-layers/dist/layers/geo-arrow-text-layer.js +5 -5
- package/src/deckgl-arrow-layers/dist/utils/utils.d.ts +12 -1
- package/src/deckgl-arrow-layers/dist/utils/utils.js +7 -5
- package/src/deckgl-arrow-layers/package.json +2 -1
- package/src/deckgl-arrow-layers/src/constants.ts +0 -13
- package/src/deckgl-arrow-layers/src/index.ts +0 -2
- package/src/deckgl-arrow-layers/src/layers/geo-arrow-scatterplot-layer.ts +5 -3
- package/src/deckgl-arrow-layers/src/layers/geo-arrow-text-layer.ts +8 -4
- package/src/deckgl-arrow-layers/src/utils/utils.ts +7 -5
- package/src/deckgl-layers/dist/deckgl-extensions/filter-arrow-layer.d.ts +1 -1
- package/src/deckgl-layers/dist/deckgl-extensions/filter-shader-module.d.ts +1 -1
- package/src/deckgl-layers/dist/deckgl-extensions/filter-shader-module.js +3 -3
- package/src/deckgl-layers/package.json +5 -5
- package/src/deckgl-layers/src/deckgl-extensions/filter-shader-module.ts +4 -3
- package/src/duckdb/dist/components/monaco-editor.js +4 -5
- package/src/duckdb/dist/components/preview-data-panel.d.ts +7 -2
- package/src/duckdb/dist/components/preview-data-panel.js +7 -8
- package/src/duckdb/dist/components/schema-panel.d.ts +12 -3
- package/src/duckdb/dist/components/schema-panel.js +41 -24
- package/src/duckdb/dist/components/sql-panel.js +245 -56
- package/src/duckdb/dist/init.js +20 -14
- package/src/duckdb/dist/processors/data-processor.d.ts +1 -0
- package/src/duckdb/dist/processors/data-processor.js +4 -4
- package/src/duckdb/dist/table/duckdb-table-utils.d.ts +106 -0
- package/src/duckdb/dist/table/duckdb-table-utils.js +493 -2
- package/src/duckdb/dist/table/duckdb-table.d.ts +5 -3
- package/src/duckdb/dist/table/duckdb-table.js +153 -261
- package/src/duckdb/package.json +6 -6
- package/src/duckdb/src/components/monaco-editor.tsx +3 -3
- package/src/duckdb/src/components/preview-data-panel.tsx +15 -8
- package/src/duckdb/src/components/schema-panel.tsx +92 -21
- package/src/duckdb/src/components/sql-panel.tsx +160 -22
- package/src/duckdb/src/init.ts +4 -1
- package/src/duckdb/src/processors/data-processor.ts +2 -2
- package/src/duckdb/src/table/duckdb-table-utils.ts +407 -1
- package/src/duckdb/src/table/duckdb-table.ts +61 -92
- package/src/effects/package.json +5 -5
- package/src/layers/dist/arc-layer/arc-layer.d.ts +1 -1
- package/src/layers/dist/arc-layer/arc-layer.js +2 -3
- package/src/layers/dist/base-layer.d.ts +7 -6
- package/src/layers/dist/base-layer.js +36 -19
- package/src/layers/dist/geojson-layer/geojson-layer.js +4 -2
- package/src/layers/dist/geojson-layer/geojson-utils.js +10 -3
- package/src/layers/dist/heatmap-layer/heatmap-layer.d.ts +2 -0
- package/src/layers/dist/heatmap-layer/heatmap-layer.js +16 -9
- package/src/layers/dist/icon-layer/icon-layer.d.ts +6 -3
- package/src/layers/dist/icon-layer/icon-layer.js +19 -11
- package/src/layers/dist/index.d.ts +1 -1
- package/src/layers/dist/index.js +1 -1
- package/src/layers/dist/layer-text-label.d.ts +9 -0
- package/src/layers/dist/layer-text-label.js +51 -6
- package/src/layers/dist/layer-utils.d.ts +39 -30
- package/src/layers/dist/layer-utils.js +69 -9
- package/src/layers/dist/line-layer/line-layer.d.ts +1 -1
- package/src/layers/dist/line-layer/line-layer.js +2 -3
- package/src/layers/dist/point-layer/point-layer.d.ts +10 -7
- package/src/layers/dist/point-layer/point-layer.js +16 -8
- package/src/layers/dist/trip-layer/trip-layer.d.ts +2 -2
- package/src/layers/dist/trip-layer/trip-layer.js +4 -2
- package/src/layers/dist/vector-tile/abstract-tile-layer.d.ts +3 -7
- package/src/layers/dist/vector-tile/abstract-tile-layer.js +7 -6
- package/src/layers/dist/vector-tile/vector-tile-layer.d.ts +5 -7
- package/src/layers/dist/vector-tile/vector-tile-layer.js +23 -2
- package/src/layers/package.json +11 -10
- package/src/layers/src/arc-layer/arc-layer.ts +1 -1
- package/src/layers/src/base-layer.ts +50 -9
- package/src/layers/src/geojson-layer/geojson-layer.ts +3 -1
- package/src/layers/src/geojson-layer/geojson-utils.ts +4 -1
- package/src/layers/src/heatmap-layer/heatmap-layer.ts +17 -12
- package/src/layers/src/icon-layer/icon-layer.ts +7 -3
- package/src/layers/src/index.ts +1 -2
- package/src/layers/src/layer-text-label.ts +53 -4
- package/src/layers/src/layer-utils.ts +88 -9
- package/src/layers/src/line-layer/line-layer.ts +1 -1
- package/src/layers/src/point-layer/point-layer.ts +15 -11
- package/src/layers/src/trip-layer/trip-layer.ts +4 -2
- package/src/layers/src/vector-tile/abstract-tile-layer.ts +11 -5
- package/src/layers/src/vector-tile/vector-tile-layer.ts +33 -4
- package/src/localization/package.json +1 -1
- package/src/processors/dist/data-processor.d.ts +15 -1
- package/src/processors/dist/data-processor.js +104 -11
- package/src/processors/package.json +8 -7
- package/src/processors/src/data-processor.ts +116 -13
- package/src/reducers/dist/export-utils.js +2 -2
- package/src/reducers/dist/layer-utils.js +1 -1
- package/src/reducers/dist/provider-state-updaters.d.ts +1 -0
- package/src/reducers/dist/provider-state-updaters.js +5 -2
- package/src/reducers/dist/vis-state-updaters.d.ts +1 -1
- package/src/reducers/dist/vis-state-updaters.js +23 -12
- package/src/reducers/package.json +16 -16
- package/src/reducers/src/export-utils.ts +1 -1
- package/src/reducers/src/layer-utils.ts +2 -1
- package/src/reducers/src/provider-state-updaters.ts +4 -1
- package/src/reducers/src/vis-state-updaters.ts +45 -10
- package/src/schemas/dist/dataset-schema.js +35 -6
- package/src/schemas/package.json +7 -7
- package/src/schemas/src/dataset-schema.ts +36 -8
- package/src/styles/node_modules/.cache/terser-webpack-plugin/content-v2/sha512/a3/a9/7f26bbc52905b0e21e9366a30ef0ba98f4ccf9aa8dd8326d90ba90191ba2e305323f505bf134c825356156c793bf9386ed2cef2aeb48eb327c26d106f69a +1 -0
- package/src/styles/node_modules/.cache/terser-webpack-plugin/index-v5/7e/51/b8756555a0e2e696d944445ac23f7febf769006013fbc8419f39a701649d +2 -0
- package/src/styles/package.json +2 -2
- package/src/styles/umd/keplergl.min.js +2 -2
- package/src/table/dist/dataset-utils.js +23 -14
- package/src/table/dist/src/table/src/dataset-utils.d.ts +1 -1
- package/src/table/dist/src/table/src/tileset/vector-tile-utils.d.ts +17 -1
- package/src/table/dist/tileset/vector-tile-utils.js +122 -2
- package/src/table/package.json +5 -5
- package/src/table/src/dataset-utils.ts +16 -6
- package/src/table/src/tileset/vector-tile-utils.ts +131 -8
- package/src/tasks/package.json +2 -2
- package/src/types/actions.d.ts +1 -0
- package/src/types/layers.d.ts +1 -0
- package/src/types/package.json +1 -1
- package/src/types/types.d.ts +17 -0
- package/src/utils/dist/application-config.d.ts +4 -3
- package/src/utils/dist/application-config.js +3 -2
- package/src/utils/dist/data-scale-utils.js +4 -4
- package/src/utils/dist/data-utils.d.ts +9 -3
- package/src/utils/dist/data-utils.js +40 -7
- package/src/utils/dist/dataset-utils.js +23 -8
- package/src/utils/dist/indexed-data-container.d.ts +2 -2
- package/src/utils/dist/indexed-data-container.js +1 -1
- package/src/utils/dist/map-style-utils/mapbox-utils.d.ts +1 -1
- package/src/utils/dist/map-style-utils/mapbox-utils.js +3 -3
- package/src/utils/dist/plot.d.ts +2 -2
- package/src/utils/dist/plot.js +6 -6
- package/src/utils/map-utils.spec.js +1 -2
- package/src/utils/package.json +5 -4
- package/src/utils/src/application-config.ts +11 -8
- package/src/utils/src/data-scale-utils.ts +3 -3
- package/src/utils/src/data-utils.ts +36 -7
- package/src/utils/src/dataset-utils.ts +41 -9
- package/src/utils/src/indexed-data-container.ts +1 -1
- package/src/utils/src/map-style-utils/mapbox-utils.ts +2 -2
- package/src/utils/src/plot.ts +5 -5
- package/umd/keplergl.min.js +1279 -1295
|
@@ -5,7 +5,9 @@ var _typeof = require("@babel/runtime/helpers/typeof");
|
|
|
5
5
|
Object.defineProperty(exports, "__esModule", {
|
|
6
6
|
value: true
|
|
7
7
|
});
|
|
8
|
-
exports
|
|
8
|
+
exports["default"] = exports.MAX_CACHE_SIZE_MOBILE = exports.DEFAULT_STROKE_WIDTH = exports.DEFAULT_HIGHLIGHT_STROKE_COLOR = exports.DEFAULT_HIGHLIGHT_FILL_COLOR = void 0;
|
|
9
|
+
exports.tileLayerBoundsLayer = tileLayerBoundsLayer;
|
|
10
|
+
exports.vectorTileVisConfigs = void 0;
|
|
9
11
|
var _regenerator = _interopRequireDefault(require("@babel/runtime/regenerator"));
|
|
10
12
|
var _toConsumableArray2 = _interopRequireDefault(require("@babel/runtime/helpers/toConsumableArray"));
|
|
11
13
|
var _asyncToGenerator2 = _interopRequireDefault(require("@babel/runtime/helpers/asyncToGenerator"));
|
|
@@ -74,6 +76,25 @@ var vectorTileVisConfigs = exports.vectorTileVisConfigs = _objectSpread(_objectS
|
|
|
74
76
|
step: 0.01
|
|
75
77
|
})
|
|
76
78
|
});
|
|
79
|
+
function tileLayerBoundsLayer(id, props) {
|
|
80
|
+
var bounds = props.bounds;
|
|
81
|
+
if ((bounds === null || bounds === void 0 ? void 0 : bounds.length) !== 4) return [];
|
|
82
|
+
var data = [{
|
|
83
|
+
path: [[bounds[0], bounds[1]], [bounds[2], bounds[1]], [bounds[2], bounds[3]], [bounds[0], bounds[3]], [bounds[0], bounds[1]]]
|
|
84
|
+
}];
|
|
85
|
+
var layer = new _typed.PathLayer({
|
|
86
|
+
id: "".concat(id, "-vector-tile-bounds"),
|
|
87
|
+
data: data,
|
|
88
|
+
getPath: function getPath(d) {
|
|
89
|
+
return d.path;
|
|
90
|
+
},
|
|
91
|
+
getColor: [128, 128, 128, 255],
|
|
92
|
+
getWidth: 1,
|
|
93
|
+
widthUnits: 'pixels',
|
|
94
|
+
pickable: false
|
|
95
|
+
});
|
|
96
|
+
return [layer];
|
|
97
|
+
}
|
|
77
98
|
var VectorTileLayer = exports["default"] = /*#__PURE__*/function (_AbstractTileLayer) {
|
|
78
99
|
function VectorTileLayer(props) {
|
|
79
100
|
var _this;
|
|
@@ -535,4 +556,4 @@ var VectorTileLayer = exports["default"] = /*#__PURE__*/function (_AbstractTileL
|
|
|
535
556
|
}
|
|
536
557
|
}]);
|
|
537
558
|
}(_abstractTileLayer["default"]);
|
|
538
|
-
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJfdHlwZWQiLCJyZXF1aXJlIiwiX212dCIsIl9wbXRpbGVzIiwiX2NvbnN0YW50cyIsIl9pbnRlcm9wUmVxdWlyZURlZmF1bHQiLCJfY29tbW9uVXRpbHMiLCJfY29uc3RhbnRzMiIsIl90YWJsZSIsIl9tdnRMYXllciIsIl92ZWN0b3JUaWxlSWNvbiIsIl9iYXNlTGF5ZXIiLCJfYWJzdHJhY3RUaWxlTGF5ZXIiLCJfaW50ZXJvcFJlcXVpcmVXaWxkY2FyZCIsIl90aWxlRGF0YXNldCIsIl90aWxlVXRpbHMiLCJfZ2V0UmVxdWlyZVdpbGRjYXJkQ2FjaGUiLCJlIiwiV2Vha01hcCIsInIiLCJ0IiwiX19lc01vZHVsZSIsIl90eXBlb2YiLCJoYXMiLCJnZXQiLCJuIiwiX19wcm90b19fIiwiYSIsIk9iamVjdCIsImRlZmluZVByb3BlcnR5IiwiZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yIiwidSIsImhhc093blByb3BlcnR5IiwiY2FsbCIsImkiLCJzZXQiLCJfY2FsbFN1cGVyIiwibyIsIl9nZXRQcm90b3R5cGVPZjIiLCJfcG9zc2libGVDb25zdHJ1Y3RvclJldHVybjIiLCJfaXNOYXRpdmVSZWZsZWN0Q29uc3RydWN0IiwiUmVmbGVjdCIsImNvbnN0cnVjdCIsImNvbnN0cnVjdG9yIiwiYXBwbHkiLCJCb29sZWFuIiwicHJvdG90eXBlIiwidmFsdWVPZiIsIl9zdXBlclByb3BHZXQiLCJwIiwiX2dldDIiLCJvd25LZXlzIiwia2V5cyIsImdldE93blByb3BlcnR5U3ltYm9scyIsImZpbHRlciIsImVudW1lcmFibGUiLCJwdXNoIiwiX29iamVjdFNwcmVhZCIsImFyZ3VtZW50cyIsImxlbmd0aCIsImZvckVhY2giLCJfZGVmaW5lUHJvcGVydHkyIiwiZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9ycyIsImRlZmluZVByb3BlcnRpZXMiLCJERUZBVUxUX0hJR0hMSUdIVF9GSUxMX0NPTE9SIiwiZXhwb3J0cyIsIkRFRkFVTFRfSElHSExJR0hUX1NUUk9LRV9DT0xPUiIsIk1BWF9DQUNIRV9TSVpFX01PQklMRSIsIkRFRkFVTFRfU1RST0tFX1dJRFRIIiwidmVjdG9yVGlsZVZpc0NvbmZpZ3MiLCJjb21tb25UaWxlVmlzQ29uZmlncyIsInN0cm9rZWQiLCJMQVlFUl9WSVNfQ09ORklHUyIsImRlZmF1bHRWYWx1ZSIsInN0cm9rZUNvbG9yU2NhbGUiLCJzdHJva2VDb2xvclJhbmdlIiwic2l6ZVJhbmdlIiwic3Ryb2tlV2lkdGgiLCJ0aGlja25lc3MiLCJwcm9wZXJ0eSIsImFsbG93Q3VzdG9tVmFsdWUiLCJyYWRpdXNTY2FsZSIsInJhZGl1c1JhbmdlIiwidHlwZSIsImlzUmFuZ2VkIiwicmFuZ2UiLCJzdGVwIiwiVmVjdG9yVGlsZUxheWVyIiwiX0Fic3RyYWN0VGlsZUxheWVyIiwicHJvcHMiLCJfdGhpcyIsIl9jbGFzc0NhbGxDaGVjazIiLCJyZWdpc3RlclZpc0NvbmZpZyIsInRpbGVEYXRhc2V0IiwiaW5pdFRpbGVEYXRhc2V0IiwiX2luaGVyaXRzMiIsIl9jcmVhdGVDbGFzczIiLCJrZXkiLCJ2YWx1ZSIsIlRpbGVEYXRhc2V0IiwiZ2V0VGlsZUlkIiwidGlsZSIsImlkIiwiZ2V0SXRlcmFibGUiLCJjb250ZW50Iiwic2hhcGUiLCJmZWF0dXJlcyIsImdldFJvd0NvdW50IiwiZ2V0Um93VmFsdWUiLCJhY2Nlc3NSb3dWYWx1ZSIsIkxBWUVSX1RZUEVTIiwidmVjdG9yVGlsZSIsIlZlY3RvclRpbGVJY29uIiwiRGF0YXNldFR5cGUiLCJWRUNUT1JfVElMRSIsInZpc3VhbENoYW5uZWxzIiwic3Ryb2tlQ29sb3IiLCJmaWVsZCIsInNjYWxlIiwiZG9tYWluIiwiY2hhbm5lbFNjYWxlVHlwZSIsIkNIQU5ORUxfU0NBTEVTIiwiY29sb3IiLCJhY2Nlc3NvciIsImNvbmRpdGlvbiIsImNvbmZpZyIsInZpc0NvbmZpZyIsIm51bGxWYWx1ZSIsImdldEF0dHJpYnV0ZVZhbHVlIiwic2l6ZSIsInJhZGl1cyIsImdldERlZmF1bHRMYXllckNvbmZpZyIsImRlZmF1bHRMYXllckNvbmZpZyIsImNvbG9yU2NhbGUiLCJTQ0FMRV9UWVBFUyIsInF1YW50aXplIiwic3Ryb2tlQ29sb3JGaWVsZCIsInN0cm9rZUNvbG9yRG9tYWluIiwicXVhbnRpbGUiLCJjb2xvclVJIiwiREVGQVVMVF9DT0xPUl9VSSIsInJhZGl1c0ZpZWxkIiwicmFkaXVzRG9tYWluIiwibGluZWFyIiwiZ2V0SG92ZXJEYXRhIiwib2JqZWN0IiwiZGF0YUNvbnRhaW5lciIsImZpZWxkcyIsIm1hcCIsImYiLCJfb2JqZWN0JHByb3BlcnRpZXMkZiQiLCJfb2JqZWN0JHByb3BlcnRpZXMiLCJwcm9wZXJ0aWVzIiwibmFtZSIsImNhbGN1bGF0ZUxheWVyRG9tYWluIiwiZGF0YXNldCIsInZpc3VhbENoYW5uZWwiLCJfZmllbGQkZmlsdGVyUHJvcHMiLCJfZmllbGQkZmlsdGVyUHJvcHMyIiwiX2ZpZWxkJGZpbHRlclByb3BzMyIsImRlZmF1bHREb21haW4iLCJpc0RvbWFpblF1YW50aWxlcyIsImZpbHRlclByb3BzIiwiZG9tYWluUXVhbnRpbGVzIiwiaXNEb21haW5TdG9wcyIsImRvbWFpblN0b3BzIiwiQXJyYXkiLCJpc0FycmF5IiwiZ2V0U2NhbGVPcHRpb25zIiwiY2hhbm5lbEtleSIsIl9maWVsZCRmaWx0ZXJQcm9wczQiLCJvcHRpb25zIiwiS2VwbGVyTGF5ZXIiLCJjaGFubmVsIiwiZHluYW1pY0NvbG9yIiwiaW5kZXhLZXkiLCJpc0luZGV4ZWRGaWVsZCIsIl9maWVsZCRpbmRleEJ5IiwiZmllbGROYW1lIiwiaW5kZXhCeSIsIm1hcHBlZFZhbHVlIiwiZGF0dW0iLCJmaWVsZElkeCIsInVwZGF0ZUxheWVyTWV0YSIsImRhdGFzZXRzIiwiZGF0YXNldE1ldGEiLCJtZXRhZGF0YSIsInVwZGF0ZU1ldGEiLCJkYXRhc2V0SWQiLCJib3VuZHMiLCJmb3JtYXRMYXllckRhdGEiLCJvbGRMYXllckRhdGEiLCJhbmltYXRpb25Db25maWciLCJkYXRhSWQiLCJub3ROdWxsb3JVbmRlZmluZWQiLCJ0aWxlU291cmNlIiwidGlsZXNldERhdGFVcmwiLCJkYXRhc2V0TWV0YWRhdGEiLCJyZW1vdGVUaWxlRm9ybWF0IiwiUmVtb3RlVGlsZUZvcm1hdCIsIk1WVCIsIl9kYXRhc2V0TWV0YWRhdGEkdGlsZSIsInRyYW5zZm9ybUZldGNoIiwiX3JlZiIsIl9hc3luY1RvR2VuZXJhdG9yMiIsIl9yZWdlbmVyYXRvciIsIm1hcmsiLCJfY2FsbGVlIiwiaW5wdXQiLCJpbml0IiwicmVxdWVzdERhdGEiLCJ3cmFwIiwiX2NhbGxlZSQiLCJfY29udGV4dCIsInByZXYiLCJuZXh0IiwidXJsIiwic2VhcmNoUGFyYW1zIiwiVVJMU2VhcmNoUGFyYW1zIiwiYWJydXB0IiwiZmV0Y2giLCJzdG9wIiwiX3giLCJfeDIiLCJNVlRTb3VyY2UiLCJjcmVhdGVEYXRhU291cmNlIiwiZGVjb2RlVVJJQ29tcG9uZW50IiwibXZ0IiwibWV0YWRhdGFVcmwiLCJ0aWxlc2V0TWV0YWRhdGFVcmwiLCJsb2FkT3B0aW9ucyIsIlBNVElMRVMiLCJQTVRpbGVzU291cmNlIiwiZ2V0VGlsZVVybCIsImhhc0hvdmVyZWRPYmplY3QiLCJvYmplY3RJbmZvIiwiX29iamVjdEluZm8kdGlsZSIsImluZGV4IiwicmVuZGVyU3ViTGF5ZXJzIiwiX2RhdGEiLCJfZGF0YTIiLCJkYXRhIiwiem9vbSIsInoiLCJHZW9Kc29uTGF5ZXIiLCJnZXRGaWxsQ29sb3IiLCJnZXRGaWxsQ29sb3JCeVpvb20iLCJnZXRFbGV2YXRpb24iLCJnZXRFbGV2YXRpb25CeVpvb20iLCJwb2ludFJhZGl1c1NjYWxlIiwicG9pbnRSYWRpdXNVbml0cyIsImdldFBvaW50UmFkaXVzIiwicGlja2FibGUiLCJhdXRvSGlnaGxpZ2h0Iiwid3JhcExvbmdpdHVkZSIsInJlbmRlckxheWVyIiwib3B0cyIsIm1hcFN0YXRlIiwiZ3B1RmlsdGVyIiwib2JqZWN0SG92ZXJlZCIsImxheWVyQ2FsbGJhY2tzIiwiX3RoaXMkY29uZmlnIiwiYW5pbWF0aW9uIiwic2V0TGF5ZXJEb21haW4iLCJvblNldExheWVyRG9tYWluIiwiZGVmYXVsdExheWVyUHJvcHMiLCJnZXREZWZhdWx0RGVja0xheWVyUHJvcHMiLCJlbGVab29tRmFjdG9yIiwiZ2V0RWxldmF0aW9uWm9vbUZhY3RvciIsInRyYW5zaXRpb25zIiwidHJhbnNpdGlvbiIsImR1cmF0aW9uIiwidW5kZWZpbmVkIiwiY29sb3JGaWVsZCIsImhlaWdodEZpZWxkIiwic2l6ZUZpZWxkIiwiX2RhdGEkdGlsZVNvdXJjZSIsIl9vYmplY3RIb3ZlcmVkJHNvdXJjZSIsImhvdmVyZWRPYmplY3QiLCJsYXllcnMiLCJDdXN0b21NVlRMYXllciIsIm9uVmlld3BvcnRMb2FkIiwiZ2V0VGlsZURhdGEiLCJnZXRGaWx0ZXJWYWx1ZSIsImdldEdwdUZpbHRlclZhbHVlQWNjZXNzb3IiLCJmaWx0ZXJSYW5nZSIsImxpbmVXaWR0aFVuaXRzIiwiYmluYXJ5IiwiZWxldmF0aW9uU2NhbGUiLCJleHRydWRlZCIsImVuYWJsZTNkIiwiZ2V0UG9pbnRSYWRpdXNTY2FsZUJ5Wm9vbSIsImdldFByb3BlcnR5Qnlab29tIiwicmFkaXVzQnlab29tIiwicmFkaXVzVW5pdHMiLCJwb2ludFJhZGl1c01pblBpeGVscyIsImhpZ2hsaWdodENvbG9yIiwidXBkYXRlVHJpZ2dlcnMiLCJmaWx0ZXJWYWx1ZVVwZGF0ZVRyaWdnZXJzIiwiY3VycmVudFRpbWUiLCJlbmFibGVkIiwiY29sb3JEb21haW4iLCJjb2xvclJhbmdlIiwiaGVpZ2h0U2NhbGVUeXBlIiwiaGVpZ2h0U2NhbGUiLCJoZWlnaHRSYW5nZSIsImdldExpbmVDb2xvciIsImdldExpbmVXaWR0aCIsInNpemVTY2FsZSIsInNpemVEb21haW4iLCJfc3ViTGF5ZXJQcm9wcyIsIm9wYWNpdHkiLCJzdHJva2VPcGFjaXR5IiwicGFyYW1ldGVycyIsImN1bGxGYWNlIiwiR0wiLCJCQUNLIiwiZ2V0TG9hZGVyT3B0aW9ucyIsImNvbmNhdCIsIl90b0NvbnN1bWFibGVBcnJheTIiLCJzb3VyY2VMYXllciIsImdldERlZmF1bHRIb3ZlckxheWVyUHJvcHMiLCJ2aXNpYmxlIiwiZmlsbGVkIiwiZmluZERlZmF1bHRMYXllclByb3BzIiwiQWJzdHJhY3RUaWxlTGF5ZXIiXSwic291cmNlcyI6WyIuLi8uLi9zcmMvdmVjdG9yLXRpbGUvdmVjdG9yLXRpbGUtbGF5ZXIudHMiXSwic291cmNlc0NvbnRlbnQiOlsiLy8gU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IE1JVFxuLy8gQ29weXJpZ2h0IGNvbnRyaWJ1dG9ycyB0byB0aGUga2VwbGVyLmdsIHByb2plY3RcblxuaW1wb3J0IHtGZWF0dXJlQ29sbGVjdGlvbiwgRmVhdHVyZX0gZnJvbSAnZ2VvanNvbic7XG5cbmltcG9ydCB7TGF5ZXIgYXMgRGVja0xheWVyfSBmcm9tICdAZGVjay5nbC9jb3JlL3R5cGVkJztcbmltcG9ydCB7X1RpbGUyREhlYWRlciBhcyBUaWxlMkRIZWFkZXJ9IGZyb20gJ0BkZWNrLmdsL2dlby1sYXllcnMvdHlwZWQnO1xuaW1wb3J0IHtHZW9Kc29uTGF5ZXJ9IGZyb20gJ0BkZWNrLmdsL2xheWVycy90eXBlZCc7XG5pbXBvcnQge01WVFNvdXJjZSwgTVZUVGlsZVNvdXJjZX0gZnJvbSAnQGxvYWRlcnMuZ2wvbXZ0JztcbmltcG9ydCB7UE1UaWxlc1NvdXJjZSwgUE1UaWxlc1RpbGVTb3VyY2V9IGZyb20gJ0Bsb2FkZXJzLmdsL3BtdGlsZXMnO1xuaW1wb3J0IEdMIGZyb20gJ0BsdW1hLmdsL2NvbnN0YW50cyc7XG5cbmltcG9ydCB7bm90TnVsbG9yVW5kZWZpbmVkfSBmcm9tICdAa2VwbGVyLmdsL2NvbW1vbi11dGlscyc7XG5pbXBvcnQge1xuICBEYXRhc2V0VHlwZSxcbiAgTEFZRVJfVFlQRVMsXG4gIFJlbW90ZVRpbGVGb3JtYXQsXG4gIFZlY3RvclRpbGVEYXRhc2V0TWV0YWRhdGEsXG4gIFNDQUxFX1RZUEVTLFxuICBDSEFOTkVMX1NDQUxFUyxcbiAgREVGQVVMVF9DT0xPUl9VSSxcbiAgTEFZRVJfVklTX0NPTkZJR1Ncbn0gZnJvbSAnQGtlcGxlci5nbC9jb25zdGFudHMnO1xuaW1wb3J0IHtcbiAgZ2V0VGlsZVVybCxcbiAgZ2V0TG9hZGVyT3B0aW9ucyxcbiAgS2VwbGVyVGFibGUgYXMgS2VwbGVyRGF0YXNldCxcbiAgRGF0YXNldHMgYXMgS2VwbGVyRGF0YXNldHMsXG4gIEdwdUZpbHRlcixcbiAgVmVjdG9yVGlsZU1ldGFkYXRhXG59IGZyb20gJ0BrZXBsZXIuZ2wvdGFibGUnO1xuaW1wb3J0IHtcbiAgQW5pbWF0aW9uQ29uZmlnLFxuICBGaWVsZCBhcyBLZXBsZXJGaWVsZCxcbiAgTGF5ZXJDb2xvckNvbmZpZyxcbiAgTGF5ZXJIZWlnaHRDb25maWcsXG4gIE1lcmdlLFxuICBNYXBTdGF0ZSxcbiAgQmluZGVkTGF5ZXJDYWxsYmFja3MsXG4gIFZpc0NvbmZpZ1JhbmdlLFxuICBWaXNDb25maWdOdW1iZXIsXG4gIERvbWFpblN0b3BzXG59IGZyb20gJ0BrZXBsZXIuZ2wvdHlwZXMnO1xuaW1wb3J0IHtEYXRhQ29udGFpbmVySW50ZXJmYWNlfSBmcm9tICdAa2VwbGVyLmdsL3V0aWxzJztcblxuaW1wb3J0IHtNVlRMYXllciBhcyBDdXN0b21NVlRMYXllcn0gZnJvbSAnLi9tdnQtbGF5ZXInO1xuaW1wb3J0IFZlY3RvclRpbGVJY29uIGZyb20gJy4vdmVjdG9yLXRpbGUtaWNvbic7XG5pbXBvcnQge1xuICBkZWZhdWx0IGFzIEtlcGxlckxheWVyLFxuICBMYXllckJhc2VDb25maWcsXG4gIExheWVyQmFzZUNvbmZpZ1BhcnRpYWwsXG4gIFZpc3VhbENoYW5uZWwsXG4gIFZpc3VhbENoYW5uZWxEb21haW4sXG4gIFZpc3VhbENoYW5uZWxGaWVsZFxufSBmcm9tICcuLi9iYXNlLWxheWVyJztcblxuaW1wb3J0IEFic3RyYWN0VGlsZUxheWVyLCB7XG4gIExheWVyRGF0YSBhcyBDb21tb25MYXllckRhdGEsXG4gIGNvbW1vblRpbGVWaXNDb25maWdzLFxuICBBYnN0cmFjdFRpbGVMYXllckNvbmZpZyxcbiAgQWJzdHJhY3RUaWxlTGF5ZXJWaXNDb25maWdTZXR0aW5nc1xufSBmcm9tICcuL2Fic3RyYWN0LXRpbGUtbGF5ZXInO1xuaW1wb3J0IFRpbGVEYXRhc2V0IGZyb20gJy4vY29tbW9uLXRpbGUvdGlsZS1kYXRhc2V0JztcbmltcG9ydCB7XG4gIGlzRG9tYWluU3RvcHMsXG4gIGlzRG9tYWluUXVhbnRpbGVzLFxuICBpc0luZGV4ZWRGaWVsZCxcbiAgZ2V0UHJvcGVydHlCeVpvb21cbn0gZnJvbSAnLi9jb21tb24tdGlsZS90aWxlLXV0aWxzJztcblxuZXhwb3J0IGNvbnN0IERFRkFVTFRfSElHSExJR0hUX0ZJTExfQ09MT1IgPSBbMjUyLCAyNDIsIDI2LCAxNTBdO1xuZXhwb3J0IGNvbnN0IERFRkFVTFRfSElHSExJR0hUX1NUUk9LRV9DT0xPUiA9IFsyNTIsIDI0MiwgMjYsIDI1NV07XG5leHBvcnQgY29uc3QgTUFYX0NBQ0hFX1NJWkVfTU9CSUxFID0gMTsgLy8gTWluaW1pemUgY2FjaGluZywgdmlzaWJsZSB0aWxlcyB3aWxsIGFsd2F5cyBiZSBsb2FkZWRcbmV4cG9ydCBjb25zdCBERUZBVUxUX1NUUk9LRV9XSURUSCA9IDE7XG5cbi8qKlxuICogVHlwZSBmb3IgdHJhbnNmb3JtUmVxdWVzdCByZXR1cm5lZCBwYXJhbWV0ZXJzLlxuICovXG5leHBvcnQgdHlwZSBSZXF1ZXN0UGFyYW1ldGVycyA9IHtcbiAgLyoqIFRoZSBVUkwgdG8gYmUgcmVxdWVzdGVkLiAqL1xuICB1cmw6IHN0cmluZztcbiAgLyoqIFNlYXJjaCBwYXJhbWV0ZXJzIHRvIGJlIGFkZGVkIG9udG8gdGhlIFVSTC4gKi9cbiAgc2VhcmNoUGFyYW1zOiBVUkxTZWFyY2hQYXJhbXM7XG4gIC8qKiBPcHRpb25zIHBhc3NlZCB0byBmZXRjaC4gKi9cbiAgb3B0aW9uczogUmVxdWVzdEluaXQ7XG59O1xuXG4vLyBUaGlzIHR5cGUgKnNlZW1zKiB0byBiZSB3aGF0IGxvYWRlcnMuZ2wgY3VycmVudGx5IHJldHVybnMgZm9yIHRpbGUgY29udGVudC5cbi8vIEFwcGFyZW50bHkgdGhpcyBtaWdodCBiZSBkaWZmZXJlbnQgZGVwZW5kaW5nIG9uIHRoZSBsb2FkZXJzIHZlcnNpb24sIGFuZCBmb3IuLi5cbi8vIHJlYXNvbnMgd2UgdXNlIHR3byBkaWZmZXJlbnQgdmVyc2lvbnMgb2YgbG9hZGVycyByaWdodCBub3cuXG4vLyBUT0RPOiBUaGUgRmVhdHVyZXNbXSB2ZXJzaW9uIHNob3VsZCBub3QgYmUgbmVlZGVkIHdoZW4gd2UgdXBkYXRlIHRvIGEgbmV3ZXJcbi8vIHZlcnNpb24gb2YgRGVjay5nbCBhbmQgdXNlIG9ubHkgb25lIHZlcnNpb24gb2YgbG9hZGVyc1xudHlwZSBUaWxlQ29udGVudCA9XG4gIHwgKEZlYXR1cmVDb2xsZWN0aW9uICYge3NoYXBlOiAnZ2VvanNvbi10YWJsZSd9KVxuICB8IChGZWF0dXJlW10gJiB7c2hhcGU6IHVuZGVmaW5lZH0pO1xuXG50eXBlIFZlY3RvclRpbGUgPSBUaWxlMkRIZWFkZXI8VGlsZUNvbnRlbnQ+O1xuXG50eXBlIExheWVyRGF0YSA9IENvbW1vbkxheWVyRGF0YSAmIHtcbiAgdGlsZXNldERhdGFVcmw/OiBzdHJpbmcgfCBudWxsO1xuICB0aWxlU291cmNlOiBNVlRUaWxlU291cmNlIHwgUE1UaWxlc1RpbGVTb3VyY2UgfCBudWxsO1xufTtcblxudHlwZSBWZWN0b3JUaWxlTGF5ZXJSZW5kZXJPcHRpb25zID0gTWVyZ2U8XG4gIHtcbiAgICBpZHg6IG51bWJlcjtcbiAgICB2aXNpYmxlOiBib29sZWFuO1xuICAgIG1hcFN0YXRlOiBNYXBTdGF0ZTtcbiAgICBkYXRhOiBhbnk7XG4gICAgYW5pbWF0aW9uQ29uZmlnOiBBbmltYXRpb25Db25maWc7XG4gICAgZ3B1RmlsdGVyOiBHcHVGaWx0ZXI7XG4gICAgbGF5ZXJDYWxsYmFja3M6IEJpbmRlZExheWVyQ2FsbGJhY2tzO1xuICAgIG9iamVjdEhvdmVyZWQ6IHtcbiAgICAgIGluZGV4OiBudW1iZXI7XG4gICAgICB0aWxlOiBWZWN0b3JUaWxlO1xuICAgICAgc291cmNlTGF5ZXI6IHR5cGVvZiBHZW9Kc29uTGF5ZXI7XG4gICAgfTtcbiAgfSxcbiAgTGF5ZXJEYXRhXG4+O1xuXG5leHBvcnQgY29uc3QgdmVjdG9yVGlsZVZpc0NvbmZpZ3MgPSB7XG4gIC4uLmNvbW1vblRpbGVWaXNDb25maWdzLFxuXG4gIHN0cm9rZWQ6IHtcbiAgICAuLi5MQVlFUl9WSVNfQ09ORklHUy5zdHJva2VkLFxuICAgIGRlZmF1bHRWYWx1ZTogZmFsc2VcbiAgfSxcblxuICAvLyBUT0RPIGZpZ3VyZSBvdXQgd2h5IHN0cm9rZUNvbG9yU2NhbGUgY2FuJ3QgYmUgY29uc3RcbiAgc3Ryb2tlQ29sb3JTY2FsZTogJ3N0cm9rZUNvbG9yU2NhbGUnIGFzIGFueSxcbiAgc3Ryb2tlQ29sb3JSYW5nZTogJ3N0cm9rZUNvbG9yUmFuZ2UnIGFzIGNvbnN0LFxuXG4gIHNpemVSYW5nZTogJ3N0cm9rZVdpZHRoUmFuZ2UnIGFzIGNvbnN0LFxuICBzdHJva2VXaWR0aDoge1xuICAgIC4uLkxBWUVSX1ZJU19DT05GSUdTLnRoaWNrbmVzcyxcbiAgICBwcm9wZXJ0eTogJ3N0cm9rZVdpZHRoJyxcbiAgICBkZWZhdWx0VmFsdWU6IDAuNSxcbiAgICBhbGxvd0N1c3RvbVZhbHVlOiBmYWxzZVxuICB9LFxuXG4gIHJhZGl1c1NjYWxlOiAncmFkaXVzU2NhbGUnIGFzIGFueSxcbiAgcmFkaXVzUmFuZ2U6IHtcbiAgICAuLi5MQVlFUl9WSVNfQ09ORklHUy5yYWRpdXNSYW5nZSxcbiAgICB0eXBlOiAnbnVtYmVyJyxcbiAgICBkZWZhdWx0VmFsdWU6IFswLCAxXSxcbiAgICBpc1JhbmdlZDogdHJ1ZSxcbiAgICByYW5nZTogWzAsIDFdLFxuICAgIHN0ZXA6IDAuMDFcbiAgfSBhcyBWaXNDb25maWdSYW5nZVxufTtcblxuZXhwb3J0IHR5cGUgVmVjdG9yVGlsZUxheWVyQ29uZmlnID0gTWVyZ2U8XG4gIEFic3RyYWN0VGlsZUxheWVyQ29uZmlnLFxuICB7XG4gICAgc2l6ZUZpZWxkPzogVmlzdWFsQ2hhbm5lbEZpZWxkO1xuICAgIHNpemVTY2FsZT86IHN0cmluZztcbiAgICBzaXplRG9tYWluPzogVmlzdWFsQ2hhbm5lbERvbWFpbjtcblxuICAgIHN0cm9rZUNvbG9yRmllbGQ6IFZpc3VhbENoYW5uZWxGaWVsZDtcblxuICAgIHJhZGl1c0ZpZWxkPzogVmlzdWFsQ2hhbm5lbEZpZWxkO1xuICAgIHJhZGl1c1NjYWxlPzogc3RyaW5nO1xuICAgIHJhZGl1c0RvbWFpbj86IFZpc3VhbENoYW5uZWxEb21haW47XG4gICAgcmFkaXVzUmFuZ2U/OiBhbnk7XG4gIH1cbj47XG5cbmV4cG9ydCB0eXBlIFZlY3RvclRpbGVMYXllclZpc0NvbmZpZ1NldHRpbmdzID0gTWVyZ2U8XG4gIEFic3RyYWN0VGlsZUxheWVyVmlzQ29uZmlnU2V0dGluZ3MsXG4gIHtcbiAgICBzaXplUmFuZ2U6IFZpc0NvbmZpZ1JhbmdlO1xuICAgIHN0cm9rZVdpZHRoOiBWaXNDb25maWdOdW1iZXI7XG4gIH1cbj47XG5cbmV4cG9ydCBkZWZhdWx0IGNsYXNzIFZlY3RvclRpbGVMYXllciBleHRlbmRzIEFic3RyYWN0VGlsZUxheWVyPFZlY3RvclRpbGUsIEZlYXR1cmVbXT4ge1xuICBkZWNsYXJlIGNvbmZpZzogVmVjdG9yVGlsZUxheWVyQ29uZmlnO1xuICBkZWNsYXJlIHZpc0NvbmZpZ1NldHRpbmdzOiBWZWN0b3JUaWxlTGF5ZXJWaXNDb25maWdTZXR0aW5ncztcblxuICBjb25zdHJ1Y3Rvcihwcm9wczogQ29uc3RydWN0b3JQYXJhbWV0ZXJzPHR5cGVvZiBBYnN0cmFjdFRpbGVMYXllcj5bMF0pIHtcbiAgICBzdXBlcihwcm9wcyk7XG4gICAgdGhpcy5yZWdpc3RlclZpc0NvbmZpZyh2ZWN0b3JUaWxlVmlzQ29uZmlncyk7XG4gICAgdGhpcy50aWxlRGF0YXNldCA9IHRoaXMuaW5pdFRpbGVEYXRhc2V0KCk7XG4gIH1cblxuICBtZXRhID0ge307XG5cbiAgc3RhdGljIGZpbmREZWZhdWx0TGF5ZXJQcm9wcyhkYXRhc2V0OiBLZXBsZXJEYXRhc2V0KToge1xuICAgIHByb3BzOiB7ZGF0YUlkOiBzdHJpbmc7IGxhYmVsPzogc3RyaW5nOyBpc1Zpc2libGU6IGJvb2xlYW59W107XG4gIH0ge1xuICAgIGlmIChkYXRhc2V0LnR5cGUgIT09IERhdGFzZXRUeXBlLlZFQ1RPUl9USUxFKSB7XG4gICAgICByZXR1cm4ge3Byb3BzOiBbXX07XG4gICAgfVxuICAgIHJldHVybiBzdXBlci5maW5kRGVmYXVsdExheWVyUHJvcHMoZGF0YXNldCk7XG4gIH1cblxuICBpbml0VGlsZURhdGFzZXQoKTogVGlsZURhdGFzZXQ8VmVjdG9yVGlsZSwgRmVhdHVyZVtdPiB7XG4gICAgcmV0dXJuIG5ldyBUaWxlRGF0YXNldCh7XG4gICAgICBnZXRUaWxlSWQ6ICh0aWxlOiBWZWN0b3JUaWxlKTogc3RyaW5nID0+IHRpbGUuaWQsXG4gICAgICBnZXRJdGVyYWJsZTogKHRpbGU6IFZlY3RvclRpbGUpOiBGZWF0dXJlW10gPT4ge1xuICAgICAgICBpZiAodGlsZS5jb250ZW50KSB7XG4gICAgICAgICAgcmV0dXJuIHRpbGUuY29udGVudC5zaGFwZSA9PT0gJ2dlb2pzb24tdGFibGUnID8gdGlsZS5jb250ZW50LmZlYXR1cmVzIDogdGlsZS5jb250ZW50O1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBbXTtcbiAgICAgIH0sXG4gICAgICBnZXRSb3dDb3VudDogKGZlYXR1cmVzOiBGZWF0dXJlW10pOiBudW1iZXIgPT4gZmVhdHVyZXMubGVuZ3RoLFxuICAgICAgZ2V0Um93VmFsdWU6IHRoaXMuYWNjZXNzUm93VmFsdWVcbiAgICB9KTtcbiAgfVxuXG4gIGdldCB0eXBlKCkge1xuICAgIHJldHVybiBMQVlFUl9UWVBFUy52ZWN0b3JUaWxlO1xuICB9XG5cbiAgZ2V0IG5hbWUoKTogc3RyaW5nIHtcbiAgICByZXR1cm4gJ1ZlY3RvciBUaWxlJztcbiAgfVxuXG4gIGdldCBsYXllckljb24oKTogS2VwbGVyTGF5ZXJbJ2xheWVySWNvbiddIHtcbiAgICByZXR1cm4gVmVjdG9yVGlsZUljb247XG4gIH1cblxuICBnZXQgc3VwcG9ydGVkRGF0YXNldFR5cGVzKCk6IERhdGFzZXRUeXBlW10ge1xuICAgIHJldHVybiBbRGF0YXNldFR5cGUuVkVDVE9SX1RJTEVdO1xuICB9XG5cbiAgZ2V0IHZpc3VhbENoYW5uZWxzKCk6IFJlY29yZDxzdHJpbmcsIFZpc3VhbENoYW5uZWw+IHtcbiAgICBjb25zdCB2aXN1YWxDaGFubmVscyA9IHN1cGVyLnZpc3VhbENoYW5uZWxzO1xuICAgIHJldHVybiB7XG4gICAgICAuLi52aXN1YWxDaGFubmVscyxcbiAgICAgIHN0cm9rZUNvbG9yOiB7XG4gICAgICAgIHByb3BlcnR5OiAnc3Ryb2tlQ29sb3InLFxuICAgICAgICBmaWVsZDogJ3N0cm9rZUNvbG9yRmllbGQnLFxuICAgICAgICBzY2FsZTogJ3N0cm9rZUNvbG9yU2NhbGUnLFxuICAgICAgICBkb21haW46ICdzdHJva2VDb2xvckRvbWFpbicsXG4gICAgICAgIHJhbmdlOiAnc3Ryb2tlQ29sb3JSYW5nZScsXG4gICAgICAgIGtleTogJ3N0cm9rZUNvbG9yJyxcbiAgICAgICAgY2hhbm5lbFNjYWxlVHlwZTogQ0hBTk5FTF9TQ0FMRVMuY29sb3IsXG4gICAgICAgIGFjY2Vzc29yOiAnZ2V0TGluZUNvbG9yJyxcbiAgICAgICAgY29uZGl0aW9uOiBjb25maWcgPT4gY29uZmlnLnZpc0NvbmZpZy5zdHJva2VkLFxuICAgICAgICBudWxsVmFsdWU6IHZpc3VhbENoYW5uZWxzLmNvbG9yLm51bGxWYWx1ZSxcbiAgICAgICAgZ2V0QXR0cmlidXRlVmFsdWU6IGNvbmZpZyA9PiBjb25maWcudmlzQ29uZmlnLnN0cm9rZUNvbG9yIHx8IGNvbmZpZy5jb2xvclxuICAgICAgfSxcbiAgICAgIHNpemU6IHtcbiAgICAgICAgcHJvcGVydHk6ICdzdHJva2UnLFxuICAgICAgICBmaWVsZDogJ3NpemVGaWVsZCcsXG4gICAgICAgIHNjYWxlOiAnc2l6ZVNjYWxlJyxcbiAgICAgICAgZG9tYWluOiAnc2l6ZURvbWFpbicsXG4gICAgICAgIHJhbmdlOiAnc2l6ZVJhbmdlJyxcbiAgICAgICAga2V5OiAnc2l6ZScsXG4gICAgICAgIGNoYW5uZWxTY2FsZVR5cGU6IENIQU5ORUxfU0NBTEVTLnNpemUsXG4gICAgICAgIG51bGxWYWx1ZTogMCxcbiAgICAgICAgYWNjZXNzb3I6ICdnZXRMaW5lV2lkdGgnLFxuICAgICAgICBjb25kaXRpb246IGNvbmZpZyA9PiBjb25maWcudmlzQ29uZmlnLnN0cm9rZWQsXG4gICAgICAgIGdldEF0dHJpYnV0ZVZhbHVlOiBjb25maWcgPT4gY29uZmlnLnZpc0NvbmZpZy5zdHJva2VXaWR0aCB8fCBERUZBVUxUX1NUUk9LRV9XSURUSFxuICAgICAgfSxcbiAgICAgIHJhZGl1czoge1xuICAgICAgICBwcm9wZXJ0eTogJ3JhZGl1cycsXG4gICAgICAgIGZpZWxkOiAncmFkaXVzRmllbGQnLFxuICAgICAgICBzY2FsZTogJ3JhZGl1c1NjYWxlJyxcbiAgICAgICAgZG9tYWluOiAncmFkaXVzRG9tYWluJyxcbiAgICAgICAgcmFuZ2U6ICdyYWRpdXNSYW5nZScsXG4gICAgICAgIGtleTogJ3JhZGl1cycsXG4gICAgICAgIGNoYW5uZWxTY2FsZVR5cGU6IENIQU5ORUxfU0NBTEVTLnNpemUsXG4gICAgICAgIG51bGxWYWx1ZTogMCxcbiAgICAgICAgZ2V0QXR0cmlidXRlVmFsdWU6IGNvbmZpZyA9PiB7XG4gICAgICAgICAgcmV0dXJuIGNvbmZpZy52aXNDb25maWcucmFkaXVzIHx8IGNvbmZpZy5yYWRpdXM7XG4gICAgICAgIH0sXG4gICAgICAgIGFjY2Vzc29yOiAnZ2V0UG9pbnRSYWRpdXMnLFxuICAgICAgICBkZWZhdWx0VmFsdWU6IGNvbmZpZyA9PiBjb25maWcucmFkaXVzXG4gICAgICB9XG4gICAgfTtcbiAgfVxuXG4gIGdldERlZmF1bHRMYXllckNvbmZpZyhcbiAgICBwcm9wczogTGF5ZXJCYXNlQ29uZmlnUGFydGlhbFxuICApOiBMYXllckJhc2VDb25maWcgJiBQYXJ0aWFsPExheWVyQ29sb3JDb25maWcgJiBMYXllckhlaWdodENvbmZpZz4ge1xuICAgIGNvbnN0IGRlZmF1bHRMYXllckNvbmZpZyA9IHN1cGVyLmdldERlZmF1bHRMYXllckNvbmZpZyhwcm9wcyk7XG4gICAgcmV0dXJuIHtcbiAgICAgIC4uLmRlZmF1bHRMYXllckNvbmZpZyxcbiAgICAgIGNvbG9yU2NhbGU6IFNDQUxFX1RZUEVTLnF1YW50aXplLFxuXG4gICAgICBzdHJva2VDb2xvckZpZWxkOiBudWxsLFxuICAgICAgc3Ryb2tlQ29sb3JEb21haW46IFswLCAxXSxcbiAgICAgIHN0cm9rZUNvbG9yU2NhbGU6IFNDQUxFX1RZUEVTLnF1YW50aWxlLFxuICAgICAgY29sb3JVSToge1xuICAgICAgICAuLi5kZWZhdWx0TGF5ZXJDb25maWcuY29sb3JVSSxcbiAgICAgICAgLy8gQHRzLWV4cGVjdC1lcnJvciBMYXllckNvbmZpZ1xuICAgICAgICBzdHJva2VDb2xvclJhbmdlOiBERUZBVUxUX0NPTE9SX1VJXG4gICAgICB9LFxuXG4gICAgICByYWRpdXNGaWVsZDogbnVsbCxcbiAgICAgIHJhZGl1c0RvbWFpbjogWzAsIDFdLFxuICAgICAgcmFkaXVzU2NhbGU6IFNDQUxFX1RZUEVTLmxpbmVhclxuICAgIH07XG4gIH1cblxuICBnZXRIb3ZlckRhdGEoXG4gICAgb2JqZWN0OiB7cHJvcGVydGllcz86IFJlY29yZDxzdHJpbmcsIFJlY29yZDxzdHJpbmcsIHVua25vd24+Pn0sXG4gICAgZGF0YUNvbnRhaW5lcjogRGF0YUNvbnRhaW5lckludGVyZmFjZSxcbiAgICBmaWVsZHM6IEtlcGxlckZpZWxkW11cbiAgKTogKFJlY29yZDxzdHJpbmcsIHVua25vd24+IHwgbnVsbClbXSB7XG4gICAgcmV0dXJuIGZpZWxkcy5tYXAoZiA9PiBvYmplY3QucHJvcGVydGllcz8uW2YubmFtZV0gPz8gbnVsbCk7XG4gIH1cblxuICBjYWxjdWxhdGVMYXllckRvbWFpbihcbiAgICBkYXRhc2V0OiBLZXBsZXJEYXRhc2V0LFxuICAgIHZpc3VhbENoYW5uZWw6IFZpc3VhbENoYW5uZWxcbiAgKTogRG9tYWluU3RvcHMgfCBudW1iZXJbXSB7XG4gICAgY29uc3QgZGVmYXVsdERvbWFpbiA9IFswLCAxXTtcblxuICAgIGNvbnN0IGZpZWxkID0gdGhpcy5jb25maWdbdmlzdWFsQ2hhbm5lbC5maWVsZF07XG4gICAgY29uc3Qgc2NhbGUgPSB0aGlzLmNvbmZpZ1t2aXN1YWxDaGFubmVsLnNjYWxlXTtcbiAgICBpZiAoIWZpZWxkKSB7XG4gICAgICAvLyBpZiBjb2xvckZpZWxkIG9yIHNpemVGaWVsZCB3ZXJlIHNldCBiYWNrIHRvIG51bGxcbiAgICAgIHJldHVybiBkZWZhdWx0RG9tYWluO1xuICAgIH1cbiAgICBpZiAoc2NhbGUgPT09IFNDQUxFX1RZUEVTLnF1YW50aWxlICYmIGlzRG9tYWluUXVhbnRpbGVzKGZpZWxkPy5maWx0ZXJQcm9wcz8uZG9tYWluUXVhbnRpbGVzKSkge1xuICAgICAgcmV0dXJuIGZpZWxkLmZpbHRlclByb3BzLmRvbWFpblF1YW50aWxlcztcbiAgICB9XG4gICAgaWYgKGlzRG9tYWluU3RvcHMoZmllbGQ/LmZpbHRlclByb3BzPy5kb21haW5TdG9wcykpIHtcbiAgICAgIHJldHVybiBmaWVsZC5maWx0ZXJQcm9wcy5kb21haW5TdG9wcztcbiAgICB9IGVsc2UgaWYgKEFycmF5LmlzQXJyYXkoZmllbGQ/LmZpbHRlclByb3BzPy5kb21haW4pKSB7XG4gICAgICByZXR1cm4gZmllbGQuZmlsdGVyUHJvcHMuZG9tYWluO1xuICAgIH1cblxuICAgIHJldHVybiBkZWZhdWx0RG9tYWluO1xuICB9XG5cbiAgZ2V0U2NhbGVPcHRpb25zKGNoYW5uZWxLZXk6IHN0cmluZyk6IHN0cmluZ1tdIHtcbiAgICBsZXQgb3B0aW9ucyA9IEtlcGxlckxheWVyLnByb3RvdHlwZS5nZXRTY2FsZU9wdGlvbnMuY2FsbCh0aGlzLCBjaGFubmVsS2V5KTtcblxuICAgIGNvbnN0IGNoYW5uZWwgPSB0aGlzLnZpc3VhbENoYW5uZWxzLnN0cm9rZUNvbG9yO1xuICAgIGNvbnN0IGZpZWxkID0gdGhpcy5jb25maWdbY2hhbm5lbC5maWVsZF07XG4gICAgaWYgKFxuICAgICAgIShcbiAgICAgICAgaXNEb21haW5RdWFudGlsZXMoZmllbGQ/LmZpbHRlclByb3BzPy5kb21haW5RdWFudGlsZXMpIHx8XG4gICAgICAgIHRoaXMuY29uZmlnLnZpc0NvbmZpZy5keW5hbWljQ29sb3IgfHxcbiAgICAgICAgLy8gSWYgd2UndmUgc2V0IHRoZSBzY2FsZSB0byBxdWFudGlsZSwgd2UgbmVlZCB0byBpbmNsdWRlIGl0IC0gdGhlcmUncyBhIGxvYWRpbmdcbiAgICAgICAgLy8gcGVyaW9kIGluIHdoaWNoIHRoZSB2aXNDb25maWcgaXNuJ3Qgc2V0IHlldCwgYnV0IGlmIHdlIGRvbid0IHJldHVybiB0aGUgcmlnaHRcbiAgICAgICAgLy8gc2NhbGUgdHlwZSB3ZSBsb3NlIGl0XG4gICAgICAgIHRoaXMuY29uZmlnLmNvbG9yU2NhbGUgPT09IFNDQUxFX1RZUEVTLnF1YW50aWxlXG4gICAgICApXG4gICAgKSB7XG4gICAgICBvcHRpb25zID0gb3B0aW9ucy5maWx0ZXIoc2NhbGUgPT4gc2NhbGUgIT09IFNDQUxFX1RZUEVTLnF1YW50aWxlKTtcbiAgICB9XG5cbiAgICByZXR1cm4gb3B0aW9ucztcbiAgfVxuXG4gIGFjY2Vzc1Jvd1ZhbHVlKFxuICAgIGZpZWxkPzogS2VwbGVyRmllbGQsXG4gICAgaW5kZXhLZXk/OiBudW1iZXIgfCBudWxsXG4gICk6IChmaWVsZDogS2VwbGVyRmllbGQsIGRhdHVtOiBGZWF0dXJlKSA9PiBudW1iZXIgfCBudWxsIHtcbiAgICAvLyBpZiBpcyBpbmRleGVkIGZpZWxkXG4gICAgaWYgKGlzSW5kZXhlZEZpZWxkKGZpZWxkKSAmJiBpbmRleEtleSAhPT0gbnVsbCkge1xuICAgICAgY29uc3QgZmllbGROYW1lID0gaW5kZXhLZXkgJiYgZmllbGQ/LmluZGV4Qnk/Lm1hcHBlZFZhbHVlW2luZGV4S2V5XTtcbiAgICAgIGlmIChmaWVsZE5hbWUpIHtcbiAgICAgICAgcmV0dXJuIChmLCBkYXR1bSkgPT4ge1xuICAgICAgICAgIGlmIChkYXR1bS5wcm9wZXJ0aWVzKSB7XG4gICAgICAgICAgICByZXR1cm4gZGF0dW0ucHJvcGVydGllc1tmaWVsZE5hbWVdO1xuICAgICAgICAgIH1cbiAgICAgICAgICAvLyBUT0RPIGRlYnVnIHRoaXMgd2l0aCBpbmRleGVkIHRpbGVkIGRhdGFzZXRcbiAgICAgICAgICByZXR1cm4gZGF0dW1bZmllbGROYW1lXTtcbiAgICAgICAgfTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICAvLyBkZWZhdWx0XG4gICAgcmV0dXJuIChmLCBkYXR1bSkgPT4ge1xuICAgICAgaWYgKGYgJiYgZGF0dW0ucHJvcGVydGllcykge1xuICAgICAgICByZXR1cm4gZGF0dW0ucHJvcGVydGllc1tmLm5hbWVdO1xuICAgICAgfVxuICAgICAgLy8gc3VwcG9ydCBwaWNraW5nICYgaGlnaGxpZ2h0aW5nXG4gICAgICByZXR1cm4gZiA/IGRhdHVtW2YuZmllbGRJZHhdIDogbnVsbDtcbiAgICB9O1xuICB9XG5cbiAgdXBkYXRlTGF5ZXJNZXRhKGRhdGFzZXQ6IEtlcGxlckRhdGFzZXQsIGRhdGFzZXRzOiBLZXBsZXJEYXRhc2V0cyk6IHZvaWQge1xuICAgIGlmIChkYXRhc2V0LnR5cGUgIT09IERhdGFzZXRUeXBlLlZFQ1RPUl9USUxFKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgY29uc3QgZGF0YXNldE1ldGEgPSBkYXRhc2V0Lm1ldGFkYXRhIGFzIFZlY3RvclRpbGVNZXRhZGF0YSAmIFZlY3RvclRpbGVEYXRhc2V0TWV0YWRhdGE7XG4gICAgdGhpcy51cGRhdGVNZXRhKHtcbiAgICAgIGRhdGFzZXRJZDogZGF0YXNldC5pZCxcbiAgICAgIGRhdGFzZXRzLFxuICAgICAgYm91bmRzOiBkYXRhc2V0TWV0YS5ib3VuZHNcbiAgICB9KTtcbiAgfVxuXG4gIGZvcm1hdExheWVyRGF0YShcbiAgICBkYXRhc2V0czogS2VwbGVyRGF0YXNldHMsXG4gICAgb2xkTGF5ZXJEYXRhOiB1bmtub3duLFxuICAgIGFuaW1hdGlvbkNvbmZpZzogQW5pbWF0aW9uQ29uZmlnXG4gICk6IExheWVyRGF0YSB7XG4gICAgY29uc3Qge2RhdGFJZH0gPSB0aGlzLmNvbmZpZztcbiAgICBpZiAoIW5vdE51bGxvclVuZGVmaW5lZChkYXRhSWQpKSB7XG4gICAgICByZXR1cm4ge3RpbGVTb3VyY2U6IG51bGx9O1xuICAgIH1cbiAgICBjb25zdCBkYXRhc2V0ID0gZGF0YXNldHNbZGF0YUlkXTtcblxuICAgIGxldCB0aWxlc2V0RGF0YVVybDogc3RyaW5nIHwgdW5kZWZpbmVkO1xuICAgIGxldCB0aWxlU291cmNlOiBMYXllckRhdGFbJ3RpbGVTb3VyY2UnXSA9IG51bGw7XG5cbiAgICBpZiAoZGF0YXNldD8udHlwZSA9PT0gRGF0YXNldFR5cGUuVkVDVE9SX1RJTEUpIHtcbiAgICAgIGNvbnN0IGRhdGFzZXRNZXRhZGF0YSA9IGRhdGFzZXQubWV0YWRhdGEgYXMgVmVjdG9yVGlsZU1ldGFkYXRhICYgVmVjdG9yVGlsZURhdGFzZXRNZXRhZGF0YTtcbiAgICAgIGNvbnN0IHJlbW90ZVRpbGVGb3JtYXQgPSBkYXRhc2V0TWV0YWRhdGE/LnJlbW90ZVRpbGVGb3JtYXQ7XG4gICAgICBpZiAocmVtb3RlVGlsZUZvcm1hdCA9PT0gUmVtb3RlVGlsZUZvcm1hdC5NVlQpIHtcbiAgICAgICAgY29uc3QgdHJhbnNmb3JtRmV0Y2ggPSBhc3luYyAoaW5wdXQ6IFJlcXVlc3RJbmZvIHwgVVJMLCBpbml0PzogUmVxdWVzdEluaXQgfCB1bmRlZmluZWQpID0+IHtcbiAgICAgICAgICBjb25zdCByZXF1ZXN0RGF0YTogUmVxdWVzdFBhcmFtZXRlcnMgPSB7XG4gICAgICAgICAgICB1cmw6IGlucHV0IGFzIHN0cmluZyxcbiAgICAgICAgICAgIHNlYXJjaFBhcmFtczogbmV3IFVSTFNlYXJjaFBhcmFtcygpLFxuICAgICAgICAgICAgb3B0aW9uczogaW5pdCA/PyB7fVxuICAgICAgICAgIH07XG5cbiAgICAgICAgICByZXR1cm4gZmV0Y2gocmVxdWVzdERhdGEudXJsLCByZXF1ZXN0RGF0YS5vcHRpb25zKTtcbiAgICAgICAgfTtcblxuICAgICAgICB0aWxlc2V0RGF0YVVybCA9IGRhdGFzZXRNZXRhZGF0YT8udGlsZXNldERhdGFVcmw7XG4gICAgICAgIHRpbGVTb3VyY2UgPSB0aWxlc2V0RGF0YVVybFxuICAgICAgICAgID8gTVZUU291cmNlLmNyZWF0ZURhdGFTb3VyY2UoZGVjb2RlVVJJQ29tcG9uZW50KHRpbGVzZXREYXRhVXJsKSwge1xuICAgICAgICAgICAgICBtdnQ6IHtcbiAgICAgICAgICAgICAgICBtZXRhZGF0YVVybDogZGF0YXNldE1ldGFkYXRhPy50aWxlc2V0TWV0YWRhdGFVcmwgPz8gbnVsbCxcbiAgICAgICAgICAgICAgICBsb2FkT3B0aW9uczoge1xuICAgICAgICAgICAgICAgICAgZmV0Y2g6IHRyYW5zZm9ybUZldGNoXG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9KVxuICAgICAgICAgIDogbnVsbDtcbiAgICAgIH0gZWxzZSBpZiAocmVtb3RlVGlsZUZvcm1hdCA9PT0gUmVtb3RlVGlsZUZvcm1hdC5QTVRJTEVTKSB7XG4gICAgICAgIC8vIFRPRE86IHRvIHJlbmRlciBpbWFnZSBwbXRpbGVzIG5lZWQgdG8gdXNlIFRpbGVMYXllciBhbmQgQml0bWFwTGF5ZXIgKGh0dHBzOi8vZ2l0aHViLmNvbS92aXNnbC9sb2FkZXJzLmdsL2Jsb2IvbWFzdGVyL2V4YW1wbGVzL3dlYnNpdGUvdGlsZXMvY29tcG9uZW50cy90aWxlLXNvdXJjZS1sYXllci50cylcbiAgICAgICAgdGlsZXNldERhdGFVcmwgPSBkYXRhc2V0TWV0YWRhdGE/LnRpbGVzZXREYXRhVXJsO1xuICAgICAgICB0aWxlU291cmNlID0gdGlsZXNldERhdGFVcmwgPyBQTVRpbGVzU291cmNlLmNyZWF0ZURhdGFTb3VyY2UodGlsZXNldERhdGFVcmwsIHt9KSA6IG51bGw7XG4gICAgICB9XG4gICAgfVxuXG4gICAgcmV0dXJuIHtcbiAgICAgIC4uLnN1cGVyLmZvcm1hdExheWVyRGF0YShkYXRhc2V0cywgb2xkTGF5ZXJEYXRhLCBhbmltYXRpb25Db25maWcpLFxuICAgICAgdGlsZXNldERhdGFVcmw6IHR5cGVvZiB0aWxlc2V0RGF0YVVybCA9PT0gJ3N0cmluZycgPyBnZXRUaWxlVXJsKHRpbGVzZXREYXRhVXJsKSA6IG51bGwsXG4gICAgICB0aWxlU291cmNlXG4gICAgfTtcbiAgfVxuXG4gIGhhc0hvdmVyZWRPYmplY3Qob2JqZWN0SW5mbykge1xuICAgIGlmIChzdXBlci5oYXNIb3ZlcmVkT2JqZWN0KG9iamVjdEluZm8pKSB7XG4gICAgICBjb25zdCBmZWF0dXJlcyA9IG9iamVjdEluZm8/LnRpbGU/LmNvbnRlbnQ/LmZlYXR1cmVzO1xuICAgICAgcmV0dXJuIGZlYXR1cmVzW29iamVjdEluZm8uaW5kZXhdO1xuICAgIH1cbiAgICByZXR1cm4gbnVsbDtcbiAgfVxuXG4gIHJlbmRlclN1YkxheWVycyhwcm9wczogUmVjb3JkPHN0cmluZywgYW55Pik6IERlY2tMYXllciB8IERlY2tMYXllcltdIHtcbiAgICBsZXQge2RhdGF9ID0gcHJvcHM7XG5cbiAgICBkYXRhID0gZGF0YT8uc2hhcGUgPT09ICdnZW9qc29uLXRhYmxlJyA/IGRhdGEuZmVhdHVyZXMgOiBkYXRhO1xuICAgIGlmICghZGF0YT8ubGVuZ3RoKSB7XG4gICAgICByZXR1cm4gW107XG4gICAgfVxuXG4gICAgY29uc3QgdGlsZTogVGlsZTJESGVhZGVyID0gcHJvcHMudGlsZTtcbiAgICBjb25zdCB6b29tID0gdGlsZS5pbmRleC56O1xuXG4gICAgcmV0dXJuIG5ldyBHZW9Kc29uTGF5ZXIoe1xuICAgICAgLi4ucHJvcHMsXG4gICAgICBkYXRhLFxuICAgICAgZ2V0RmlsbENvbG9yOiBwcm9wcy5nZXRGaWxsQ29sb3JCeVpvb20gPyBwcm9wcy5nZXRGaWxsQ29sb3Ioem9vbSkgOiBwcm9wcy5nZXRGaWxsQ29sb3IsXG4gICAgICBnZXRFbGV2YXRpb246IHByb3BzLmdldEVsZXZhdGlvbkJ5Wm9vbSA/IHByb3BzLmdldEVsZXZhdGlvbih6b29tKSA6IHByb3BzLmdldEVsZXZhdGlvbixcbiAgICAgIC8vIHJhZGl1cyBmb3IgcG9pbnRzXG4gICAgICBwb2ludFJhZGl1c1NjYWxlOiBwcm9wcy5wb2ludFJhZGl1c1NjYWxlLCAvLyBwcm9wcy5nZXRQb2ludFJhZGl1c1NjYWxlQnlab29tKHpvb20pLFxuICAgICAgcG9pbnRSYWRpdXNVbml0czogcHJvcHMucG9pbnRSYWRpdXNVbml0cyxcbiAgICAgIGdldFBvaW50UmFkaXVzOiBwcm9wcy5nZXRQb2ludFJhZGl1cyxcbiAgICAgIC8vIEZvciBzb21lIHJlYXNvbiB0aWxlIExheWVyIHJlc2V0IGF1dG9IaWdobGlnaHQgdG8gZmFsc2VcbiAgICAgIHBpY2thYmxlOiB0cnVlLFxuICAgICAgYXV0b0hpZ2hsaWdodDogdHJ1ZSxcbiAgICAgIHN0cm9rZWQ6IHByb3BzLnN0cm9rZWQsXG4gICAgICAvLyB3cmFwTG9uZ2l0dWRlOiB0cnVlIGNhdXNlcyBtaXNzaW5nIHNpZGUgcG9seWdvbiB3aGVuIGV4dHJ1ZGUgaXMgZW5hYmxlZFxuICAgICAgd3JhcExvbmdpdHVkZTogZmFsc2VcbiAgICB9KTtcbiAgfVxuXG4gIC8vIGdlbmVyYXRlIGEgZGVjayBsYXllclxuICByZW5kZXJMYXllcihvcHRzOiBWZWN0b3JUaWxlTGF5ZXJSZW5kZXJPcHRpb25zKTogRGVja0xheWVyW10ge1xuICAgIGNvbnN0IHttYXBTdGF0ZSwgZGF0YSwgYW5pbWF0aW9uQ29uZmlnLCBncHVGaWx0ZXIsIG9iamVjdEhvdmVyZWQsIGxheWVyQ2FsbGJhY2tzfSA9IG9wdHM7XG4gICAgY29uc3Qge2FuaW1hdGlvbiwgdmlzQ29uZmlnfSA9IHRoaXMuY29uZmlnO1xuXG4gICAgdGhpcy5zZXRMYXllckRvbWFpbiA9IGxheWVyQ2FsbGJhY2tzLm9uU2V0TGF5ZXJEb21haW47XG5cbiAgICBjb25zdCBkZWZhdWx0TGF5ZXJQcm9wcyA9IHRoaXMuZ2V0RGVmYXVsdERlY2tMYXllclByb3BzKG9wdHMpO1xuICAgIGNvbnN0IGVsZVpvb21GYWN0b3IgPSB0aGlzLmdldEVsZXZhdGlvblpvb21GYWN0b3IobWFwU3RhdGUpO1xuXG4gICAgY29uc3QgdHJhbnNpdGlvbnMgPSB0aGlzLmNvbmZpZy52aXNDb25maWcudHJhbnNpdGlvblxuICAgICAgPyB7XG4gICAgICAgICAgZ2V0RmlsbENvbG9yOiB7XG4gICAgICAgICAgICBkdXJhdGlvbjogYW5pbWF0aW9uQ29uZmlnLmR1cmF0aW9uXG4gICAgICAgICAgfSxcbiAgICAgICAgICBnZXRFbGV2YXRpb246IHtcbiAgICAgICAgICAgIGR1cmF0aW9uOiBhbmltYXRpb25Db25maWcuZHVyYXRpb25cbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIDogdW5kZWZpbmVkO1xuXG4gICAgY29uc3QgY29sb3JGaWVsZCA9IHRoaXMuY29uZmlnLmNvbG9yRmllbGQgYXMgS2VwbGVyRmllbGQ7XG4gICAgY29uc3QgaGVpZ2h0RmllbGQgPSB0aGlzLmNvbmZpZy5oZWlnaHRGaWVsZCBhcyBLZXBsZXJGaWVsZDtcbiAgICBjb25zdCBzdHJva2VDb2xvckZpZWxkID0gdGhpcy5jb25maWcuc3Ryb2tlQ29sb3JGaWVsZCBhcyBLZXBsZXJGaWVsZDtcbiAgICBjb25zdCBzaXplRmllbGQgPSB0aGlzLmNvbmZpZy5zaXplRmllbGQgYXMgS2VwbGVyRmllbGQ7XG4gICAgY29uc3QgcmFkaXVzRmllbGQgPSB0aGlzLmNvbmZpZy5yYWRpdXNGaWVsZCBhcyBLZXBsZXJGaWVsZDtcblxuICAgIGlmIChkYXRhLnRpbGVTb3VyY2UpIHtcbiAgICAgIGNvbnN0IGhvdmVyZWRPYmplY3QgPSB0aGlzLmhhc0hvdmVyZWRPYmplY3Qob2JqZWN0SG92ZXJlZCk7XG5cbiAgICAgIGNvbnN0IGxheWVycyA9IFtcbiAgICAgICAgbmV3IEN1c3RvbU1WVExheWVyKHtcbiAgICAgICAgICAuLi5kZWZhdWx0TGF5ZXJQcm9wcyxcbiAgICAgICAgICAuLi5kYXRhLFxuICAgICAgICAgIG9uVmlld3BvcnRMb2FkOiB0aGlzLm9uVmlld3BvcnRMb2FkLFxuICAgICAgICAgIGRhdGE6IGRhdGEudGlsZXNldERhdGFVcmwsXG4gICAgICAgICAgZ2V0VGlsZURhdGE6IGRhdGEudGlsZVNvdXJjZT8uZ2V0VGlsZURhdGEsXG4gICAgICAgICAgdGlsZVNvdXJjZTogZGF0YS50aWxlU291cmNlLFxuICAgICAgICAgIGdldEZpbHRlclZhbHVlOiB0aGlzLmdldEdwdUZpbHRlclZhbHVlQWNjZXNzb3Iob3B0cyksXG4gICAgICAgICAgZmlsdGVyUmFuZ2U6IGdwdUZpbHRlci5maWx0ZXJSYW5nZSxcbiAgICAgICAgICBsaW5lV2lkdGhVbml0czogJ3BpeGVscycsXG5cbiAgICAgICAgICBiaW5hcnk6IGZhbHNlLFxuICAgICAgICAgIGVsZXZhdGlvblNjYWxlOiB2aXNDb25maWcuZWxldmF0aW9uU2NhbGUgKiBlbGVab29tRmFjdG9yLFxuICAgICAgICAgIGV4dHJ1ZGVkOiB2aXNDb25maWcuZW5hYmxlM2QsXG4gICAgICAgICAgc3Ryb2tlZDogdmlzQ29uZmlnLnN0cm9rZWQsXG5cbiAgICAgICAgICAvLyBUT0RPOiB0aGlzIGlzIGhhcmQgY29kZWQsIGRlc2lnbiBhIFVJIHRvIGFsbG93IHVzZXIgYXNzaWduZWQgdW5pcXVlIHByb3BlcnR5IGlkXG4gICAgICAgICAgLy8gdW5pcXVlSWRQcm9wZXJ0eTogJ3VmaWQnLFxuICAgICAgICAgIHJlbmRlclN1YkxheWVyczogdGhpcy5yZW5kZXJTdWJMYXllcnMsXG4gICAgICAgICAgLy8gd2hlbiByYWRpdXNVbml0cyBpcyBtZXRlclxuICAgICAgICAgIGdldFBvaW50UmFkaXVzU2NhbGVCeVpvb206IGdldFByb3BlcnR5Qnlab29tKHZpc0NvbmZpZy5yYWRpdXNCeVpvb20sIHZpc0NvbmZpZy5yYWRpdXMpLFxuICAgICAgICAgIHBvaW50UmFkaXVzVW5pdHM6IHZpc0NvbmZpZy5yYWRpdXNVbml0cyA/ICdwaXhlbHMnIDogJ21ldGVycycsXG4gICAgICAgICAgcG9pbnRSYWRpdXNTY2FsZTogcmFkaXVzRmllbGQgPyB2aXNDb25maWcucmFkaXVzIDogMSxcblxuICAgICAgICAgIHBvaW50UmFkaXVzTWluUGl4ZWxzOiAxLFxuICAgICAgICAgIGF1dG9IaWdobGlnaHQ6IHRydWUsXG4gICAgICAgICAgaGlnaGxpZ2h0Q29sb3I6IERFRkFVTFRfSElHSExJR0hUX0ZJTExfQ09MT1IsXG4gICAgICAgICAgcGlja2FibGU6IHRydWUsXG4gICAgICAgICAgdHJhbnNpdGlvbnMsXG4gICAgICAgICAgdXBkYXRlVHJpZ2dlcnM6IHtcbiAgICAgICAgICAgIGdldEZpbHRlclZhbHVlOiB7XG4gICAgICAgICAgICAgIC4uLmdwdUZpbHRlci5maWx0ZXJWYWx1ZVVwZGF0ZVRyaWdnZXJzLFxuICAgICAgICAgICAgICBjdXJyZW50VGltZTogYW5pbWF0aW9uLmVuYWJsZWQgPyBhbmltYXRpb25Db25maWcuY3VycmVudFRpbWUgOiBudWxsXG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgZ2V0RmlsbENvbG9yOiB7XG4gICAgICAgICAgICAgIGNvbG9yOiB0aGlzLmNvbmZpZy5jb2xvcixcbiAgICAgICAgICAgICAgY29sb3JGaWVsZDogdGhpcy5jb25maWcuY29sb3JGaWVsZCxcbiAgICAgICAgICAgICAgY29sb3JTY2FsZTogdGhpcy5jb25maWcuY29sb3JTY2FsZSxcbiAgICAgICAgICAgICAgY29sb3JEb21haW46IHRoaXMuY29uZmlnLmNvbG9yRG9tYWluLFxuICAgICAgICAgICAgICBjb2xvclJhbmdlOiB2aXNDb25maWcuY29sb3JSYW5nZSxcbiAgICAgICAgICAgICAgY3VycmVudFRpbWU6IGlzSW5kZXhlZEZpZWxkKGNvbG9yRmllbGQpID8gYW5pbWF0aW9uQ29uZmlnLmN1cnJlbnRUaW1lIDogbnVsbFxuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIGdldEVsZXZhdGlvbjoge1xuICAgICAgICAgICAgICBoZWlnaHRGaWVsZDogdGhpcy5jb25maWcuaGVpZ2h0RmllbGQsXG4gICAgICAgICAgICAgIGhlaWdodFNjYWxlVHlwZTogdGhpcy5jb25maWcuaGVpZ2h0U2NhbGUsXG4gICAgICAgICAgICAgIGhlaWdodFJhbmdlOiB2aXNDb25maWcuaGVpZ2h0UmFuZ2UsXG4gICAgICAgICAgICAgIGN1cnJlbnRUaW1lOiBpc0luZGV4ZWRGaWVsZChoZWlnaHRGaWVsZCkgPyBhbmltYXRpb25Db25maWcuY3VycmVudFRpbWUgOiBudWxsXG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgZ2V0TGluZUNvbG9yOiB7XG4gICAgICAgICAgICAgIHN0cm9rZUNvbG9yOiB2aXNDb25maWcuc3Ryb2tlQ29sb3IsXG4gICAgICAgICAgICAgIHN0cm9rZUNvbG9yRmllbGQ6IHRoaXMuY29uZmlnLnN0cm9rZUNvbG9yRmllbGQsXG4gICAgICAgICAgICAgIC8vIEB0cy1leHBlY3QtZXJyb3IgcHJvcCBub3QgaW4gTGF5ZXJDb25maWdcbiAgICAgICAgICAgICAgc3Ryb2tlQ29sb3JTY2FsZTogdGhpcy5jb25maWcuc3Ryb2tlQ29sb3JTY2FsZSxcbiAgICAgICAgICAgICAgLy8gQHRzLWV4cGVjdC1lcnJvciBwcm9wIG5vdCBpbiBMYXllckNvbmZpZ1xuICAgICAgICAgICAgICBzdHJva2VDb2xvckRvbWFpbjogdGhpcy5jb25maWcuc3Ryb2tlQ29sb3JEb21haW4sXG4gICAgICAgICAgICAgIC8vIEZJWE1FOiBTdHJpcCBvdXQgZW1wdHkgYXJyYXlzIGZyb20gaW5kaXZpZHVhbCBjb2xvciBtYXAgc3RlcHMsIGFuZCByZXBsYWNlIHdpdGggYG51bGxgLCBvdGhlcndpc2UgdGhlIGxheWVyIG1heSBzaG93IHRoZSBpbmNvcnJlY3QgY29sb3IuXG4gICAgICAgICAgICAgIC8vIFNvIGZhciBpdCBzZWVtcyB0aGF0IGl0IHVzZXMgdGhlIHByZXZpb3VzIGNvbG9yIGNob3NlbiBpbiB0aGUgcGFsZXR0ZSByYXRoZXIgdGhhbiB0aGUgY3VycmVudGx5IGNob3NlbiBjb2xvciBmb3IgdGhlIHNwZWNpZmljIGN1c3RvbSBvcmRpbmFsIHZhbHVlIHdoZW4gdGhlcmUgYXJlIFwic3BhcnNlXCIgY29sb3IgbWFwcy5cbiAgICAgICAgICAgICAgLy8gSW4gb3RoZXIgd29yZHMsIGEgY29sb3IgbWFwIHdpdGggXCJob2xlc1wiIG9mIGNvbG9ycyB3aXRoIHVuYXNzaWduZWQgZmllbGQgdmFsdWVzLCB3aGljaCBtYXkgaGF2ZSBiZWVuIGFzc2lnbmVkIGluIHRoZSBwYXN0LlxuICAgICAgICAgICAgICAvLyBGb3IgZXhhbXBsZSBcImFiY1wiIHdhcyBncmVlbiwgc3RvcmVkIGFzIGBbXCJhYmNcIl1gLiBUaGVuIFwiYWJjXCIgd2FzIHJlYXNzaWduZWQgdG8gdGhlIHJlZCBjb2xvciBtYXAgc3RlcCwgc3RvcmVkIGFzIGBbXCJhYmNcIl1gLiBOb3cgdGhlIGdyZWVuIGNvbG9yIG1hcCBzdGVwJ3Mgc3RvcmVkIHZhbHVlIGlzIGBbXWAsIGFuZCB0aGUgbGF5ZXIgd2lsbCBpbmNvcnJlY3RseSBzdGlsbCByZW5kZXIgXCJhYmNcIiBpbiBncmVlbi5cbiAgICAgICAgICAgICAgLy8gUXVpY2sgcGF0Y2ggZXhhbXBsZTpcbiAgICAgICAgICAgICAgLy8gc3Ryb2tlQ29sb3JSYW5nZTogdmlzQ29uZmlnPy5zdHJva2VDb2xvclJhbmdlPy5jb2xvck1hcD8ubWFwKGNtID0+XG4gICAgICAgICAgICAgIC8vICAgY21bMF0/Lmxlbmd0aCA9PT0gMCA/IFtudWxsLCBjbVsxXV0gOiBjbVxuICAgICAgICAgICAgICAvLyApLFxuICAgICAgICAgICAgICAvLyBOb3RlOiBmb3IgcmVndWxhciBzY2FsZXMgdGhlIGNvbG9yTWFwIGluIHRoZSBhYm92ZSBwYXRjaCBpcyB1bmRlZmluZWQgYW5kIGJyZWFrcyBzdHJva2VDb2xvclJhbmdlIHVwZGF0ZSB0cmlnZ2VyLlxuICAgICAgICAgICAgICBzdHJva2VDb2xvclJhbmdlOiB2aXNDb25maWcuc3Ryb2tlQ29sb3JSYW5nZSxcbiAgICAgICAgICAgICAgY3VycmVudFRpbWU6IGlzSW5kZXhlZEZpZWxkKHN0cm9rZUNvbG9yRmllbGQpID8gYW5pbWF0aW9uQ29uZmlnLmN1cnJlbnRUaW1lIDogbnVsbFxuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIGdldExpbmVXaWR0aDoge1xuICAgICAgICAgICAgICBzaXplUmFuZ2U6IHZpc0NvbmZpZy5zaXplUmFuZ2UsXG4gICAgICAgICAgICAgIHN0cm9rZVdpZHRoOiB2aXNDb25maWcuc3Ryb2tlV2lkdGgsXG4gICAgICAgICAgICAgIHNpemVGaWVsZDogdGhpcy5jb25maWcuc2l6ZUZpZWxkLFxuICAgICAgICAgICAgICBzaXplU2NhbGU6IHRoaXMuY29uZmlnLnNpemVTY2FsZSxcbiAgICAgICAgICAgICAgc2l6ZURvbWFpbjogdGhpcy5jb25maWcuc2l6ZURvbWFpbixcbiAgICAgICAgICAgICAgY3VycmVudFRpbWU6IGlzSW5kZXhlZEZpZWxkKHNpemVGaWVsZCkgPyBhbmltYXRpb25Db25maWcuY3VycmVudFRpbWUgOiBudWxsXG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgZ2V0UG9pbnRSYWRpdXM6IHtcbiAgICAgICAgICAgICAgcmFkaXVzOiB2aXNDb25maWcucmFkaXVzLFxuICAgICAgICAgICAgICByYWRpdXNGaWVsZDogdGhpcy5jb25maWcucmFkaXVzRmllbGQsXG4gICAgICAgICAgICAgIHJhZGl1c1NjYWxlOiB0aGlzLmNvbmZpZy5yYWRpdXNTY2FsZSxcbiAgICAgICAgICAgICAgcmFkaXVzRG9tYWluOiB0aGlzLmNvbmZpZy5yYWRpdXNEb21haW4sXG4gICAgICAgICAgICAgIHJhZGl1c1JhbmdlOiB0aGlzLmNvbmZpZy5yYWRpdXNSYW5nZSxcbiAgICAgICAgICAgICAgY3VycmVudFRpbWU6IGlzSW5kZXhlZEZpZWxkKHJhZGl1c0ZpZWxkKSA/IGFuaW1hdGlvbkNvbmZpZy5jdXJyZW50VGltZSA6IG51bGxcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9LFxuICAgICAgICAgIF9zdWJMYXllclByb3BzOiB7XG4gICAgICAgICAgICAncG9seWdvbnMtc3Ryb2tlJzoge29wYWNpdHk6IHZpc0NvbmZpZy5zdHJva2VPcGFjaXR5fSxcbiAgICAgICAgICAgICdwb2x5Z29ucy1maWxsJzoge1xuICAgICAgICAgICAgICBwYXJhbWV0ZXJzOiB7XG4gICAgICAgICAgICAgICAgY3VsbEZhY2U6IEdMLkJBQ0tcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICAgIH0sXG4gICAgICAgICAgbG9hZE9wdGlvbnM6IHtcbiAgICAgICAgICAgIG12dDogZ2V0TG9hZGVyT3B0aW9ucygpLm12dFxuICAgICAgICAgIH1cbiAgICAgICAgfSksXG4gICAgICAgIC8vIGhvdmVyIGxheWVyXG4gICAgICAgIC4uLihob3ZlcmVkT2JqZWN0XG4gICAgICAgICAgPyBbXG4gICAgICAgICAgICAgIG5ldyBHZW9Kc29uTGF5ZXIoe1xuICAgICAgICAgICAgICAgIC8vIEB0cy1leHBlY3QtZXJyb3IgcHJvcHMgbm90IHR5cGVkP1xuICAgICAgICAgICAgICAgIC4uLm9iamVjdEhvdmVyZWQuc291cmNlTGF5ZXI/LnByb3BzLFxuICAgICAgICAgICAgICAgIC4uLih0aGlzLmdldERlZmF1bHRIb3ZlckxheWVyUHJvcHMoKSBhcyBhbnkpLFxuICAgICAgICAgICAgICAgIHZpc2libGU6IHRydWUsXG4gICAgICAgICAgICAgICAgd3JhcExvbmdpdHVkZTogZmFsc2UsXG4gICAgICAgICAgICAgICAgZGF0YTogW2hvdmVyZWRPYmplY3RdLFxuICAgICAgICAgICAgICAgIGdldExpbmVDb2xvcjogREVGQVVMVF9ISUdITElHSFRfU1RST0tFX0NPTE9SLFxuICAgICAgICAgICAgICAgIGdldEZpbGxDb2xvcjogREVGQVVMVF9ISUdITElHSFRfRklMTF9DT0xPUixcbiAgICAgICAgICAgICAgICBnZXRMaW5lV2lkdGg6IHZpc0NvbmZpZy5zdHJva2VXaWR0aCArIDEsXG4gICAgICAgICAgICAgICAgbGluZVdpZHRoVW5pdHM6ICdwaXhlbHMnLFxuICAgICAgICAgICAgICAgIHN0cm9rZWQ6IHRydWUsXG4gICAgICAgICAgICAgICAgZmlsbGVkOiB0cnVlXG4gICAgICAgICAgICAgIH0pXG4gICAgICAgICAgICBdXG4gICAgICAgICAgOiBbXSlcbiAgICAgIF07XG5cbiAgICAgIHJldHVybiBsYXllcnM7XG4gICAgfVxuICAgIHJldHVybiBbXTtcbiAgfVxufVxuIl0sIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7Ozs7Ozs7Ozs7QUFPQSxJQUFBQSxNQUFBLEdBQUFDLE9BQUE7QUFDQSxJQUFBQyxJQUFBLEdBQUFELE9BQUE7QUFDQSxJQUFBRSxRQUFBLEdBQUFGLE9BQUE7QUFDQSxJQUFBRyxVQUFBLEdBQUFDLHNCQUFBLENBQUFKLE9BQUE7QUFFQSxJQUFBSyxZQUFBLEdBQUFMLE9BQUE7QUFDQSxJQUFBTSxXQUFBLEdBQUFOLE9BQUE7QUFVQSxJQUFBTyxNQUFBLEdBQUFQLE9BQUE7QUFzQkEsSUFBQVEsU0FBQSxHQUFBUixPQUFBO0FBQ0EsSUFBQVMsZUFBQSxHQUFBTCxzQkFBQSxDQUFBSixPQUFBO0FBQ0EsSUFBQVUsVUFBQSxHQUFBTixzQkFBQSxDQUFBSixPQUFBO0FBU0EsSUFBQVcsa0JBQUEsR0FBQUMsdUJBQUEsQ0FBQVosT0FBQTtBQU1BLElBQUFhLFlBQUEsR0FBQVQsc0JBQUEsQ0FBQUosT0FBQTtBQUNBLElBQUFjLFVBQUEsR0FBQWQsT0FBQTtBQUtrQyxTQUFBZSx5QkFBQUMsQ0FBQSw2QkFBQUMsT0FBQSxtQkFBQUMsQ0FBQSxPQUFBRCxPQUFBLElBQUFFLENBQUEsT0FBQUYsT0FBQSxZQUFBRix3QkFBQSxZQUFBQSx5QkFBQUMsQ0FBQSxXQUFBQSxDQUFBLEdBQUFHLENBQUEsR0FBQUQsQ0FBQSxLQUFBRixDQUFBO0FBQUEsU0FBQUosd0JBQUFJLENBQUEsRUFBQUUs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
|
|
559
|
+
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJfdHlwZWQiLCJyZXF1aXJlIiwiX212dCIsIl9wbXRpbGVzIiwiX2NvbnN0YW50cyIsIl9pbnRlcm9wUmVxdWlyZURlZmF1bHQiLCJfY29tbW9uVXRpbHMiLCJfY29uc3RhbnRzMiIsIl90YWJsZSIsIl9tdnRMYXllciIsIl92ZWN0b3JUaWxlSWNvbiIsIl9iYXNlTGF5ZXIiLCJfYWJzdHJhY3RUaWxlTGF5ZXIiLCJfaW50ZXJvcFJlcXVpcmVXaWxkY2FyZCIsIl90aWxlRGF0YXNldCIsIl90aWxlVXRpbHMiLCJfZ2V0UmVxdWlyZVdpbGRjYXJkQ2FjaGUiLCJlIiwiV2Vha01hcCIsInIiLCJ0IiwiX19lc01vZHVsZSIsIl90eXBlb2YiLCJoYXMiLCJnZXQiLCJuIiwiX19wcm90b19fIiwiYSIsIk9iamVjdCIsImRlZmluZVByb3BlcnR5IiwiZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yIiwidSIsImhhc093blByb3BlcnR5IiwiY2FsbCIsImkiLCJzZXQiLCJfY2FsbFN1cGVyIiwibyIsIl9nZXRQcm90b3R5cGVPZjIiLCJfcG9zc2libGVDb25zdHJ1Y3RvclJldHVybjIiLCJfaXNOYXRpdmVSZWZsZWN0Q29uc3RydWN0IiwiUmVmbGVjdCIsImNvbnN0cnVjdCIsImNvbnN0cnVjdG9yIiwiYXBwbHkiLCJCb29sZWFuIiwicHJvdG90eXBlIiwidmFsdWVPZiIsIl9zdXBlclByb3BHZXQiLCJwIiwiX2dldDIiLCJvd25LZXlzIiwia2V5cyIsImdldE93blByb3BlcnR5U3ltYm9scyIsImZpbHRlciIsImVudW1lcmFibGUiLCJwdXNoIiwiX29iamVjdFNwcmVhZCIsImFyZ3VtZW50cyIsImxlbmd0aCIsImZvckVhY2giLCJfZGVmaW5lUHJvcGVydHkyIiwiZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9ycyIsImRlZmluZVByb3BlcnRpZXMiLCJERUZBVUxUX0hJR0hMSUdIVF9GSUxMX0NPTE9SIiwiZXhwb3J0cyIsIkRFRkFVTFRfSElHSExJR0hUX1NUUk9LRV9DT0xPUiIsIk1BWF9DQUNIRV9TSVpFX01PQklMRSIsIkRFRkFVTFRfU1RST0tFX1dJRFRIIiwidmVjdG9yVGlsZVZpc0NvbmZpZ3MiLCJjb21tb25UaWxlVmlzQ29uZmlncyIsInN0cm9rZWQiLCJMQVlFUl9WSVNfQ09ORklHUyIsImRlZmF1bHRWYWx1ZSIsInN0cm9rZUNvbG9yU2NhbGUiLCJzdHJva2VDb2xvclJhbmdlIiwic2l6ZVJhbmdlIiwic3Ryb2tlV2lkdGgiLCJ0aGlja25lc3MiLCJwcm9wZXJ0eSIsImFsbG93Q3VzdG9tVmFsdWUiLCJyYWRpdXNTY2FsZSIsInJhZGl1c1JhbmdlIiwidHlwZSIsImlzUmFuZ2VkIiwicmFuZ2UiLCJzdGVwIiwidGlsZUxheWVyQm91bmRzTGF5ZXIiLCJpZCIsInByb3BzIiwiYm91bmRzIiwiZGF0YSIsInBhdGgiLCJsYXllciIsIlBhdGhMYXllciIsImNvbmNhdCIsImdldFBhdGgiLCJkIiwiZ2V0Q29sb3IiLCJnZXRXaWR0aCIsIndpZHRoVW5pdHMiLCJwaWNrYWJsZSIsIlZlY3RvclRpbGVMYXllciIsIl9BYnN0cmFjdFRpbGVMYXllciIsIl90aGlzIiwiX2NsYXNzQ2FsbENoZWNrMiIsInJlZ2lzdGVyVmlzQ29uZmlnIiwidGlsZURhdGFzZXQiLCJpbml0VGlsZURhdGFzZXQiLCJfaW5oZXJpdHMyIiwiX2NyZWF0ZUNsYXNzMiIsImtleSIsInZhbHVlIiwiVGlsZURhdGFzZXQiLCJnZXRUaWxlSWQiLCJ0aWxlIiwiZ2V0SXRlcmFibGUiLCJjb250ZW50Iiwic2hhcGUiLCJmZWF0dXJlcyIsImdldFJvd0NvdW50IiwiZ2V0Um93VmFsdWUiLCJhY2Nlc3NSb3dWYWx1ZSIsIkxBWUVSX1RZUEVTIiwidmVjdG9yVGlsZSIsIlZlY3RvclRpbGVJY29uIiwiRGF0YXNldFR5cGUiLCJWRUNUT1JfVElMRSIsInZpc3VhbENoYW5uZWxzIiwic3Ryb2tlQ29sb3IiLCJmaWVsZCIsInNjYWxlIiwiZG9tYWluIiwiY2hhbm5lbFNjYWxlVHlwZSIsIkNIQU5ORUxfU0NBTEVTIiwiY29sb3IiLCJhY2Nlc3NvciIsImNvbmRpdGlvbiIsImNvbmZpZyIsInZpc0NvbmZpZyIsIm51bGxWYWx1ZSIsImdldEF0dHJpYnV0ZVZhbHVlIiwic2l6ZSIsInJhZGl1cyIsImdldERlZmF1bHRMYXllckNvbmZpZyIsImRlZmF1bHRMYXllckNvbmZpZyIsImNvbG9yU2NhbGUiLCJTQ0FMRV9UWVBFUyIsInF1YW50aXplIiwic3Ryb2tlQ29sb3JGaWVsZCIsInN0cm9rZUNvbG9yRG9tYWluIiwicXVhbnRpbGUiLCJjb2xvclVJIiwiREVGQVVMVF9DT0xPUl9VSSIsInJhZGl1c0ZpZWxkIiwicmFkaXVzRG9tYWluIiwibGluZWFyIiwiZ2V0SG92ZXJEYXRhIiwib2JqZWN0IiwiZGF0YUNvbnRhaW5lciIsImZpZWxkcyIsIm1hcCIsImYiLCJfb2JqZWN0JHByb3BlcnRpZXMkZiQiLCJfb2JqZWN0JHByb3BlcnRpZXMiLCJwcm9wZXJ0aWVzIiwibmFtZSIsImNhbGN1bGF0ZUxheWVyRG9tYWluIiwiZGF0YXNldCIsInZpc3VhbENoYW5uZWwiLCJfZmllbGQkZmlsdGVyUHJvcHMiLCJfZmllbGQkZmlsdGVyUHJvcHMyIiwiX2ZpZWxkJGZpbHRlclByb3BzMyIsImRlZmF1bHREb21haW4iLCJpc0RvbWFpblF1YW50aWxlcyIsImZpbHRlclByb3BzIiwiZG9tYWluUXVhbnRpbGVzIiwiaXNEb21haW5TdG9wcyIsImRvbWFpblN0b3BzIiwiQXJyYXkiLCJpc0FycmF5IiwiZ2V0U2NhbGVPcHRpb25zIiwiY2hhbm5lbEtleSIsIl9maWVsZCRmaWx0ZXJQcm9wczQiLCJvcHRpb25zIiwiS2VwbGVyTGF5ZXIiLCJjaGFubmVsIiwiZHluYW1pY0NvbG9yIiwiaW5kZXhLZXkiLCJpc0luZGV4ZWRGaWVsZCIsIl9maWVsZCRpbmRleEJ5IiwiZmllbGROYW1lIiwiaW5kZXhCeSIsIm1hcHBlZFZhbHVlIiwiZGF0dW0iLCJmaWVsZElkeCIsInVwZGF0ZUxheWVyTWV0YSIsImRhdGFzZXRzIiwiZGF0YXNldE1ldGEiLCJtZXRhZGF0YSIsInVwZGF0ZU1ldGEiLCJkYXRhc2V0SWQiLCJmb3JtYXRMYXllckRhdGEiLCJvbGRMYXllckRhdGEiLCJhbmltYXRpb25Db25maWciLCJkYXRhSWQiLCJub3ROdWxsb3JVbmRlZmluZWQiLCJ0aWxlU291cmNlIiwidGlsZXNldERhdGFVcmwiLCJkYXRhc2V0TWV0YWRhdGEiLCJyZW1vdGVUaWxlRm9ybWF0IiwiUmVtb3RlVGlsZUZvcm1hdCIsIk1WVCIsIl9kYXRhc2V0TWV0YWRhdGEkdGlsZSIsInRyYW5zZm9ybUZldGNoIiwiX3JlZiIsIl9hc3luY1RvR2VuZXJhdG9yMiIsIl9yZWdlbmVyYXRvciIsIm1hcmsiLCJfY2FsbGVlIiwiaW5wdXQiLCJpbml0IiwicmVxdWVzdERhdGEiLCJ3cmFwIiwiX2NhbGxlZSQiLCJfY29udGV4dCIsInByZXYiLCJuZXh0IiwidXJsIiwic2VhcmNoUGFyYW1zIiwiVVJMU2VhcmNoUGFyYW1zIiwiYWJydXB0IiwiZmV0Y2giLCJzdG9wIiwiX3giLCJfeDIiLCJNVlRTb3VyY2UiLCJjcmVhdGVEYXRhU291cmNlIiwiZGVjb2RlVVJJQ29tcG9uZW50IiwibXZ0IiwibWV0YWRhdGFVcmwiLCJ0aWxlc2V0TWV0YWRhdGFVcmwiLCJsb2FkT3B0aW9ucyIsIlBNVElMRVMiLCJQTVRpbGVzU291cmNlIiwiZ2V0VGlsZVVybCIsImhhc0hvdmVyZWRPYmplY3QiLCJvYmplY3RJbmZvIiwiX29iamVjdEluZm8kdGlsZSIsImluZGV4IiwicmVuZGVyU3ViTGF5ZXJzIiwiX2RhdGEiLCJfZGF0YTIiLCJ6b29tIiwieiIsIkdlb0pzb25MYXllciIsImdldEZpbGxDb2xvciIsImdldEZpbGxDb2xvckJ5Wm9vbSIsImdldEVsZXZhdGlvbiIsImdldEVsZXZhdGlvbkJ5Wm9vbSIsInBvaW50UmFkaXVzU2NhbGUiLCJwb2ludFJhZGl1c1VuaXRzIiwiZ2V0UG9pbnRSYWRpdXMiLCJhdXRvSGlnaGxpZ2h0Iiwid3JhcExvbmdpdHVkZSIsInJlbmRlckxheWVyIiwib3B0cyIsIm1hcFN0YXRlIiwiZ3B1RmlsdGVyIiwib2JqZWN0SG92ZXJlZCIsImxheWVyQ2FsbGJhY2tzIiwiX3RoaXMkY29uZmlnIiwiYW5pbWF0aW9uIiwic2V0TGF5ZXJEb21haW4iLCJvblNldExheWVyRG9tYWluIiwiZGVmYXVsdExheWVyUHJvcHMiLCJnZXREZWZhdWx0RGVja0xheWVyUHJvcHMiLCJlbGVab29tRmFjdG9yIiwiZ2V0RWxldmF0aW9uWm9vbUZhY3RvciIsInRyYW5zaXRpb25zIiwidHJhbnNpdGlvbiIsImR1cmF0aW9uIiwidW5kZWZpbmVkIiwiY29sb3JGaWVsZCIsImhlaWdodEZpZWxkIiwic2l6ZUZpZWxkIiwiX2RhdGEkdGlsZVNvdXJjZSIsIl9vYmplY3RIb3ZlcmVkJHNvdXJjZSIsImhvdmVyZWRPYmplY3QiLCJsYXllcnMiLCJDdXN0b21NVlRMYXllciIsIm9uVmlld3BvcnRMb2FkIiwiZ2V0VGlsZURhdGEiLCJnZXRGaWx0ZXJWYWx1ZSIsImdldEdwdUZpbHRlclZhbHVlQWNjZXNzb3IiLCJmaWx0ZXJSYW5nZSIsImxpbmVXaWR0aFVuaXRzIiwiYmluYXJ5IiwiZWxldmF0aW9uU2NhbGUiLCJleHRydWRlZCIsImVuYWJsZTNkIiwiZ2V0UG9pbnRSYWRpdXNTY2FsZUJ5Wm9vbSIsImdldFByb3BlcnR5Qnlab29tIiwicmFkaXVzQnlab29tIiwicmFkaXVzVW5pdHMiLCJwb2ludFJhZGl1c01pblBpeGVscyIsImhpZ2hsaWdodENvbG9yIiwidXBkYXRlVHJpZ2dlcnMiLCJmaWx0ZXJWYWx1ZVVwZGF0ZVRyaWdnZXJzIiwiY3VycmVudFRpbWUiLCJlbmFibGVkIiwiY29sb3JEb21haW4iLCJjb2xvclJhbmdlIiwiaGVpZ2h0U2NhbGVUeXBlIiwiaGVpZ2h0U2NhbGUiLCJoZWlnaHRSYW5nZSIsImdldExpbmVDb2xvciIsImdldExpbmVXaWR0aCIsInNpemVTY2FsZSIsInNpemVEb21haW4iLCJfc3ViTGF5ZXJQcm9wcyIsIm9wYWNpdHkiLCJzdHJva2VPcGFjaXR5IiwicGFyYW1ldGVycyIsImN1bGxGYWNlIiwiR0wiLCJCQUNLIiwiZ2V0TG9hZGVyT3B0aW9ucyIsIl90b0NvbnN1bWFibGVBcnJheTIiLCJzb3VyY2VMYXllciIsImdldERlZmF1bHRIb3ZlckxheWVyUHJvcHMiLCJ2aXNpYmxlIiwiZmlsbGVkIiwiZmluZERlZmF1bHRMYXllclByb3BzIiwiQWJzdHJhY3RUaWxlTGF5ZXIiXSwic291cmNlcyI6WyIuLi8uLi9zcmMvdmVjdG9yLXRpbGUvdmVjdG9yLXRpbGUtbGF5ZXIudHMiXSwic291cmNlc0NvbnRlbnQiOlsiLy8gU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IE1JVFxuLy8gQ29weXJpZ2h0IGNvbnRyaWJ1dG9ycyB0byB0aGUga2VwbGVyLmdsIHByb2plY3RcblxuaW1wb3J0IHtGZWF0dXJlQ29sbGVjdGlvbiwgRmVhdHVyZX0gZnJvbSAnZ2VvanNvbic7XG5cbmltcG9ydCB7TGF5ZXIgYXMgRGVja0xheWVyfSBmcm9tICdAZGVjay5nbC9jb3JlL3R5cGVkJztcbmltcG9ydCB7X1RpbGUyREhlYWRlciBhcyBUaWxlMkRIZWFkZXJ9IGZyb20gJ0BkZWNrLmdsL2dlby1sYXllcnMvdHlwZWQnO1xuaW1wb3J0IHtHZW9Kc29uTGF5ZXIsIFBhdGhMYXllcn0gZnJvbSAnQGRlY2suZ2wvbGF5ZXJzL3R5cGVkJztcbmltcG9ydCB7TVZUU291cmNlLCBNVlRUaWxlU291cmNlfSBmcm9tICdAbG9hZGVycy5nbC9tdnQnO1xuaW1wb3J0IHtQTVRpbGVzU291cmNlLCBQTVRpbGVzVGlsZVNvdXJjZX0gZnJvbSAnQGxvYWRlcnMuZ2wvcG10aWxlcyc7XG5pbXBvcnQgR0wgZnJvbSAnQGx1bWEuZ2wvY29uc3RhbnRzJztcblxuaW1wb3J0IHtub3ROdWxsb3JVbmRlZmluZWR9IGZyb20gJ0BrZXBsZXIuZ2wvY29tbW9uLXV0aWxzJztcbmltcG9ydCB7XG4gIERhdGFzZXRUeXBlLFxuICBMQVlFUl9UWVBFUyxcbiAgUmVtb3RlVGlsZUZvcm1hdCxcbiAgVmVjdG9yVGlsZURhdGFzZXRNZXRhZGF0YSxcbiAgU0NBTEVfVFlQRVMsXG4gIENIQU5ORUxfU0NBTEVTLFxuICBERUZBVUxUX0NPTE9SX1VJLFxuICBMQVlFUl9WSVNfQ09ORklHU1xufSBmcm9tICdAa2VwbGVyLmdsL2NvbnN0YW50cyc7XG5pbXBvcnQge1xuICBnZXRUaWxlVXJsLFxuICBnZXRMb2FkZXJPcHRpb25zLFxuICBLZXBsZXJUYWJsZSBhcyBLZXBsZXJEYXRhc2V0LFxuICBEYXRhc2V0cyBhcyBLZXBsZXJEYXRhc2V0cyxcbiAgR3B1RmlsdGVyLFxuICBWZWN0b3JUaWxlTWV0YWRhdGFcbn0gZnJvbSAnQGtlcGxlci5nbC90YWJsZSc7XG5pbXBvcnQge1xuICBBbmltYXRpb25Db25maWcsXG4gIEZpZWxkIGFzIEtlcGxlckZpZWxkLFxuICBMYXllckNvbG9yQ29uZmlnLFxuICBMYXllckhlaWdodENvbmZpZyxcbiAgTWVyZ2UsXG4gIE1hcFN0YXRlLFxuICBCaW5kZWRMYXllckNhbGxiYWNrcyxcbiAgVmlzQ29uZmlnUmFuZ2UsXG4gIFZpc0NvbmZpZ051bWJlcixcbiAgRG9tYWluU3RvcHNcbn0gZnJvbSAnQGtlcGxlci5nbC90eXBlcyc7XG5pbXBvcnQge0RhdGFDb250YWluZXJJbnRlcmZhY2V9IGZyb20gJ0BrZXBsZXIuZ2wvdXRpbHMnO1xuXG5pbXBvcnQge01WVExheWVyIGFzIEN1c3RvbU1WVExheWVyfSBmcm9tICcuL212dC1sYXllcic7XG5pbXBvcnQgVmVjdG9yVGlsZUljb24gZnJvbSAnLi92ZWN0b3ItdGlsZS1pY29uJztcbmltcG9ydCB7XG4gIGRlZmF1bHQgYXMgS2VwbGVyTGF5ZXIsXG4gIExheWVyQmFzZUNvbmZpZyxcbiAgTGF5ZXJCYXNlQ29uZmlnUGFydGlhbCxcbiAgVmlzdWFsQ2hhbm5lbCxcbiAgVmlzdWFsQ2hhbm5lbERvbWFpbixcbiAgVmlzdWFsQ2hhbm5lbEZpZWxkXG59IGZyb20gJy4uL2Jhc2UtbGF5ZXInO1xuaW1wb3J0IHtGaW5kRGVmYXVsdExheWVyUHJvcHNSZXR1cm5WYWx1ZX0gZnJvbSAnLi4vbGF5ZXItdXRpbHMnO1xuXG5pbXBvcnQgQWJzdHJhY3RUaWxlTGF5ZXIsIHtcbiAgTGF5ZXJEYXRhIGFzIENvbW1vbkxheWVyRGF0YSxcbiAgY29tbW9uVGlsZVZpc0NvbmZpZ3MsXG4gIEFic3RyYWN0VGlsZUxheWVyQ29uZmlnLFxuICBBYnN0cmFjdFRpbGVMYXllclZpc0NvbmZpZ1NldHRpbmdzXG59IGZyb20gJy4vYWJzdHJhY3QtdGlsZS1sYXllcic7XG5pbXBvcnQgVGlsZURhdGFzZXQgZnJvbSAnLi9jb21tb24tdGlsZS90aWxlLWRhdGFzZXQnO1xuaW1wb3J0IHtcbiAgaXNEb21haW5TdG9wcyxcbiAgaXNEb21haW5RdWFudGlsZXMsXG4gIGlzSW5kZXhlZEZpZWxkLFxuICBnZXRQcm9wZXJ0eUJ5Wm9vbVxufSBmcm9tICcuL2NvbW1vbi10aWxlL3RpbGUtdXRpbHMnO1xuXG5leHBvcnQgY29uc3QgREVGQVVMVF9ISUdITElHSFRfRklMTF9DT0xPUiA9IFsyNTIsIDI0MiwgMjYsIDE1MF07XG5leHBvcnQgY29uc3QgREVGQVVMVF9ISUdITElHSFRfU1RST0tFX0NPTE9SID0gWzI1MiwgMjQyLCAyNiwgMjU1XTtcbmV4cG9ydCBjb25zdCBNQVhfQ0FDSEVfU0laRV9NT0JJTEUgPSAxOyAvLyBNaW5pbWl6ZSBjYWNoaW5nLCB2aXNpYmxlIHRpbGVzIHdpbGwgYWx3YXlzIGJlIGxvYWRlZFxuZXhwb3J0IGNvbnN0IERFRkFVTFRfU1RST0tFX1dJRFRIID0gMTtcblxuLyoqXG4gKiBUeXBlIGZvciB0cmFuc2Zvcm1SZXF1ZXN0IHJldHVybmVkIHBhcmFtZXRlcnMuXG4gKi9cbmV4cG9ydCB0eXBlIFJlcXVlc3RQYXJhbWV0ZXJzID0ge1xuICAvKiogVGhlIFVSTCB0byBiZSByZXF1ZXN0ZWQuICovXG4gIHVybDogc3RyaW5nO1xuICAvKiogU2VhcmNoIHBhcmFtZXRlcnMgdG8gYmUgYWRkZWQgb250byB0aGUgVVJMLiAqL1xuICBzZWFyY2hQYXJhbXM6IFVSTFNlYXJjaFBhcmFtcztcbiAgLyoqIE9wdGlvbnMgcGFzc2VkIHRvIGZldGNoLiAqL1xuICBvcHRpb25zOiBSZXF1ZXN0SW5pdDtcbn07XG5cbi8vIFRoaXMgdHlwZSAqc2VlbXMqIHRvIGJlIHdoYXQgbG9hZGVycy5nbCBjdXJyZW50bHkgcmV0dXJucyBmb3IgdGlsZSBjb250ZW50LlxuLy8gQXBwYXJlbnRseSB0aGlzIG1pZ2h0IGJlIGRpZmZlcmVudCBkZXBlbmRpbmcgb24gdGhlIGxvYWRlcnMgdmVyc2lvbiwgYW5kIGZvci4uLlxuLy8gcmVhc29ucyB3ZSB1c2UgdHdvIGRpZmZlcmVudCB2ZXJzaW9ucyBvZiBsb2FkZXJzIHJpZ2h0IG5vdy5cbi8vIFRPRE86IFRoZSBGZWF0dXJlc1tdIHZlcnNpb24gc2hvdWxkIG5vdCBiZSBuZWVkZWQgd2hlbiB3ZSB1cGRhdGUgdG8gYSBuZXdlclxuLy8gdmVyc2lvbiBvZiBEZWNrLmdsIGFuZCB1c2Ugb25seSBvbmUgdmVyc2lvbiBvZiBsb2FkZXJzXG50eXBlIFRpbGVDb250ZW50ID1cbiAgfCAoRmVhdHVyZUNvbGxlY3Rpb24gJiB7c2hhcGU6ICdnZW9qc29uLXRhYmxlJ30pXG4gIHwgKEZlYXR1cmVbXSAmIHtzaGFwZTogdW5kZWZpbmVkfSk7XG5cbnR5cGUgVmVjdG9yVGlsZSA9IFRpbGUyREhlYWRlcjxUaWxlQ29udGVudD47XG5cbnR5cGUgTGF5ZXJEYXRhID0gQ29tbW9uTGF5ZXJEYXRhICYge1xuICB0aWxlc2V0RGF0YVVybD86IHN0cmluZyB8IG51bGw7XG4gIHRpbGVTb3VyY2U6IE1WVFRpbGVTb3VyY2UgfCBQTVRpbGVzVGlsZVNvdXJjZSB8IG51bGw7XG59O1xuXG50eXBlIFZlY3RvclRpbGVMYXllclJlbmRlck9wdGlvbnMgPSBNZXJnZTxcbiAge1xuICAgIGlkeDogbnVtYmVyO1xuICAgIHZpc2libGU6IGJvb2xlYW47XG4gICAgbWFwU3RhdGU6IE1hcFN0YXRlO1xuICAgIGRhdGE6IGFueTtcbiAgICBhbmltYXRpb25Db25maWc6IEFuaW1hdGlvbkNvbmZpZztcbiAgICBncHVGaWx0ZXI6IEdwdUZpbHRlcjtcbiAgICBsYXllckNhbGxiYWNrczogQmluZGVkTGF5ZXJDYWxsYmFja3M7XG4gICAgb2JqZWN0SG92ZXJlZDoge1xuICAgICAgaW5kZXg6IG51bWJlcjtcbiAgICAgIHRpbGU6IFZlY3RvclRpbGU7XG4gICAgICBzb3VyY2VMYXllcjogdHlwZW9mIEdlb0pzb25MYXllcjtcbiAgICB9O1xuICB9LFxuICBMYXllckRhdGFcbj47XG5cbmV4cG9ydCBjb25zdCB2ZWN0b3JUaWxlVmlzQ29uZmlncyA9IHtcbiAgLi4uY29tbW9uVGlsZVZpc0NvbmZpZ3MsXG5cbiAgc3Ryb2tlZDoge1xuICAgIC4uLkxBWUVSX1ZJU19DT05GSUdTLnN0cm9rZWQsXG4gICAgZGVmYXVsdFZhbHVlOiBmYWxzZVxuICB9LFxuXG4gIC8vIFRPRE8gZmlndXJlIG91dCB3aHkgc3Ryb2tlQ29sb3JTY2FsZSBjYW4ndCBiZSBjb25zdFxuICBzdHJva2VDb2xvclNjYWxlOiAnc3Ryb2tlQ29sb3JTY2FsZScgYXMgYW55LFxuICBzdHJva2VDb2xvclJhbmdlOiAnc3Ryb2tlQ29sb3JSYW5nZScgYXMgY29uc3QsXG5cbiAgc2l6ZVJhbmdlOiAnc3Ryb2tlV2lkdGhSYW5nZScgYXMgY29uc3QsXG4gIHN0cm9rZVdpZHRoOiB7XG4gICAgLi4uTEFZRVJfVklTX0NPTkZJR1MudGhpY2tuZXNzLFxuICAgIHByb3BlcnR5OiAnc3Ryb2tlV2lkdGgnLFxuICAgIGRlZmF1bHRWYWx1ZTogMC41LFxuICAgIGFsbG93Q3VzdG9tVmFsdWU6IGZhbHNlXG4gIH0sXG5cbiAgcmFkaXVzU2NhbGU6ICdyYWRpdXNTY2FsZScgYXMgYW55LFxuICByYWRpdXNSYW5nZToge1xuICAgIC4uLkxBWUVSX1ZJU19DT05GSUdTLnJhZGl1c1JhbmdlLFxuICAgIHR5cGU6ICdudW1iZXInLFxuICAgIGRlZmF1bHRWYWx1ZTogWzAsIDFdLFxuICAgIGlzUmFuZ2VkOiB0cnVlLFxuICAgIHJhbmdlOiBbMCwgMV0sXG4gICAgc3RlcDogMC4wMVxuICB9IGFzIFZpc0NvbmZpZ1JhbmdlXG59O1xuXG5leHBvcnQgdHlwZSBWZWN0b3JUaWxlTGF5ZXJDb25maWcgPSBNZXJnZTxcbiAgQWJzdHJhY3RUaWxlTGF5ZXJDb25maWcsXG4gIHtcbiAgICBzaXplRmllbGQ/OiBWaXN1YWxDaGFubmVsRmllbGQ7XG4gICAgc2l6ZVNjYWxlPzogc3RyaW5nO1xuICAgIHNpemVEb21haW4/OiBWaXN1YWxDaGFubmVsRG9tYWluO1xuXG4gICAgc3Ryb2tlQ29sb3JGaWVsZDogVmlzdWFsQ2hhbm5lbEZpZWxkO1xuXG4gICAgcmFkaXVzRmllbGQ/OiBWaXN1YWxDaGFubmVsRmllbGQ7XG4gICAgcmFkaXVzU2NhbGU/OiBzdHJpbmc7XG4gICAgcmFkaXVzRG9tYWluPzogVmlzdWFsQ2hhbm5lbERvbWFpbjtcbiAgICByYWRpdXNSYW5nZT86IGFueTtcbiAgfVxuPjtcblxuZXhwb3J0IHR5cGUgVmVjdG9yVGlsZUxheWVyVmlzQ29uZmlnU2V0dGluZ3MgPSBNZXJnZTxcbiAgQWJzdHJhY3RUaWxlTGF5ZXJWaXNDb25maWdTZXR0aW5ncyxcbiAge1xuICAgIHNpemVSYW5nZTogVmlzQ29uZmlnUmFuZ2U7XG4gICAgc3Ryb2tlV2lkdGg6IFZpc0NvbmZpZ051bWJlcjtcbiAgfVxuPjtcblxuZXhwb3J0IGZ1bmN0aW9uIHRpbGVMYXllckJvdW5kc0xheWVyKGlkOiBzdHJpbmcsIHByb3BzOiB7Ym91bmRzPzogbnVtYmVyW119KTogRGVja0xheWVyW10ge1xuICBjb25zdCB7Ym91bmRzfSA9IHByb3BzO1xuICBpZiAoYm91bmRzPy5sZW5ndGggIT09IDQpIHJldHVybiBbXTtcblxuICBjb25zdCBkYXRhID0gW1xuICAgIHtcbiAgICAgIHBhdGg6IFtcbiAgICAgICAgW2JvdW5kc1swXSwgYm91bmRzWzFdXSxcbiAgICAgICAgW2JvdW5kc1syXSwgYm91bmRzWzFdXSxcbiAgICAgICAgW2JvdW5kc1syXSwgYm91bmRzWzNdXSxcbiAgICAgICAgW2JvdW5kc1swXSwgYm91bmRzWzNdXSxcbiAgICAgICAgW2JvdW5kc1swXSwgYm91bmRzWzFdXVxuICAgICAgXVxuICAgIH1cbiAgXTtcblxuICBjb25zdCBsYXllciA9IG5ldyBQYXRoTGF5ZXIoe1xuICAgIGlkOiBgJHtpZH0tdmVjdG9yLXRpbGUtYm91bmRzYCxcbiAgICBkYXRhLFxuICAgIGdldFBhdGg6IGQgPT4gZC5wYXRoLFxuICAgIGdldENvbG9yOiBbMTI4LCAxMjgsIDEyOCwgMjU1XSxcbiAgICBnZXRXaWR0aDogMSxcbiAgICB3aWR0aFVuaXRzOiAncGl4ZWxzJyxcbiAgICBwaWNrYWJsZTogZmFsc2VcbiAgfSk7XG5cbiAgcmV0dXJuIFtsYXllcl07XG59XG5cbmV4cG9ydCBkZWZhdWx0IGNsYXNzIFZlY3RvclRpbGVMYXllciBleHRlbmRzIEFic3RyYWN0VGlsZUxheWVyPFZlY3RvclRpbGUsIEZlYXR1cmVbXT4ge1xuICBkZWNsYXJlIGNvbmZpZzogVmVjdG9yVGlsZUxheWVyQ29uZmlnO1xuICBkZWNsYXJlIHZpc0NvbmZpZ1NldHRpbmdzOiBWZWN0b3JUaWxlTGF5ZXJWaXNDb25maWdTZXR0aW5ncztcblxuICBjb25zdHJ1Y3Rvcihwcm9wczogQ29uc3RydWN0b3JQYXJhbWV0ZXJzPHR5cGVvZiBBYnN0cmFjdFRpbGVMYXllcj5bMF0pIHtcbiAgICBzdXBlcihwcm9wcyk7XG4gICAgdGhpcy5yZWdpc3RlclZpc0NvbmZpZyh2ZWN0b3JUaWxlVmlzQ29uZmlncyk7XG4gICAgdGhpcy50aWxlRGF0YXNldCA9IHRoaXMuaW5pdFRpbGVEYXRhc2V0KCk7XG4gIH1cblxuICBtZXRhID0ge307XG5cbiAgc3RhdGljIGZpbmREZWZhdWx0TGF5ZXJQcm9wcyhkYXRhc2V0OiBLZXBsZXJEYXRhc2V0KTogRmluZERlZmF1bHRMYXllclByb3BzUmV0dXJuVmFsdWUge1xuICAgIGlmIChkYXRhc2V0LnR5cGUgIT09IERhdGFzZXRUeXBlLlZFQ1RPUl9USUxFKSB7XG4gICAgICByZXR1cm4ge3Byb3BzOiBbXX07XG4gICAgfVxuICAgIHJldHVybiBzdXBlci5maW5kRGVmYXVsdExheWVyUHJvcHMoZGF0YXNldCk7XG4gIH1cblxuICBpbml0VGlsZURhdGFzZXQoKTogVGlsZURhdGFzZXQ8VmVjdG9yVGlsZSwgRmVhdHVyZVtdPiB7XG4gICAgcmV0dXJuIG5ldyBUaWxlRGF0YXNldCh7XG4gICAgICBnZXRUaWxlSWQ6ICh0aWxlOiBWZWN0b3JUaWxlKTogc3RyaW5nID0+IHRpbGUuaWQsXG4gICAgICBnZXRJdGVyYWJsZTogKHRpbGU6IFZlY3RvclRpbGUpOiBGZWF0dXJlW10gPT4ge1xuICAgICAgICBpZiAodGlsZS5jb250ZW50KSB7XG4gICAgICAgICAgcmV0dXJuIHRpbGUuY29udGVudC5zaGFwZSA9PT0gJ2dlb2pzb24tdGFibGUnID8gdGlsZS5jb250ZW50LmZlYXR1cmVzIDogdGlsZS5jb250ZW50O1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBbXTtcbiAgICAgIH0sXG4gICAgICBnZXRSb3dDb3VudDogKGZlYXR1cmVzOiBGZWF0dXJlW10pOiBudW1iZXIgPT4gZmVhdHVyZXMubGVuZ3RoLFxuICAgICAgZ2V0Um93VmFsdWU6IHRoaXMuYWNjZXNzUm93VmFsdWVcbiAgICB9KTtcbiAgfVxuXG4gIGdldCB0eXBlKCkge1xuICAgIHJldHVybiBMQVlFUl9UWVBFUy52ZWN0b3JUaWxlO1xuICB9XG5cbiAgZ2V0IG5hbWUoKTogc3RyaW5nIHtcbiAgICByZXR1cm4gJ1ZlY3RvciBUaWxlJztcbiAgfVxuXG4gIGdldCBsYXllckljb24oKTogS2VwbGVyTGF5ZXJbJ2xheWVySWNvbiddIHtcbiAgICByZXR1cm4gVmVjdG9yVGlsZUljb247XG4gIH1cblxuICBnZXQgc3VwcG9ydGVkRGF0YXNldFR5cGVzKCk6IERhdGFzZXRUeXBlW10ge1xuICAgIHJldHVybiBbRGF0YXNldFR5cGUuVkVDVE9SX1RJTEVdO1xuICB9XG5cbiAgZ2V0IHZpc3VhbENoYW5uZWxzKCk6IFJlY29yZDxzdHJpbmcsIFZpc3VhbENoYW5uZWw+IHtcbiAgICBjb25zdCB2aXN1YWxDaGFubmVscyA9IHN1cGVyLnZpc3VhbENoYW5uZWxzO1xuICAgIHJldHVybiB7XG4gICAgICAuLi52aXN1YWxDaGFubmVscyxcbiAgICAgIHN0cm9rZUNvbG9yOiB7XG4gICAgICAgIHByb3BlcnR5OiAnc3Ryb2tlQ29sb3InLFxuICAgICAgICBmaWVsZDogJ3N0cm9rZUNvbG9yRmllbGQnLFxuICAgICAgICBzY2FsZTogJ3N0cm9rZUNvbG9yU2NhbGUnLFxuICAgICAgICBkb21haW46ICdzdHJva2VDb2xvckRvbWFpbicsXG4gICAgICAgIHJhbmdlOiAnc3Ryb2tlQ29sb3JSYW5nZScsXG4gICAgICAgIGtleTogJ3N0cm9rZUNvbG9yJyxcbiAgICAgICAgY2hhbm5lbFNjYWxlVHlwZTogQ0hBTk5FTF9TQ0FMRVMuY29sb3IsXG4gICAgICAgIGFjY2Vzc29yOiAnZ2V0TGluZUNvbG9yJyxcbiAgICAgICAgY29uZGl0aW9uOiBjb25maWcgPT4gY29uZmlnLnZpc0NvbmZpZy5zdHJva2VkLFxuICAgICAgICBudWxsVmFsdWU6IHZpc3VhbENoYW5uZWxzLmNvbG9yLm51bGxWYWx1ZSxcbiAgICAgICAgZ2V0QXR0cmlidXRlVmFsdWU6IGNvbmZpZyA9PiBjb25maWcudmlzQ29uZmlnLnN0cm9rZUNvbG9yIHx8IGNvbmZpZy5jb2xvclxuICAgICAgfSxcbiAgICAgIHNpemU6IHtcbiAgICAgICAgcHJvcGVydHk6ICdzdHJva2UnLFxuICAgICAgICBmaWVsZDogJ3NpemVGaWVsZCcsXG4gICAgICAgIHNjYWxlOiAnc2l6ZVNjYWxlJyxcbiAgICAgICAgZG9tYWluOiAnc2l6ZURvbWFpbicsXG4gICAgICAgIHJhbmdlOiAnc2l6ZVJhbmdlJyxcbiAgICAgICAga2V5OiAnc2l6ZScsXG4gICAgICAgIGNoYW5uZWxTY2FsZVR5cGU6IENIQU5ORUxfU0NBTEVTLnNpemUsXG4gICAgICAgIG51bGxWYWx1ZTogMCxcbiAgICAgICAgYWNjZXNzb3I6ICdnZXRMaW5lV2lkdGgnLFxuICAgICAgICBjb25kaXRpb246IGNvbmZpZyA9PiBjb25maWcudmlzQ29uZmlnLnN0cm9rZWQsXG4gICAgICAgIGdldEF0dHJpYnV0ZVZhbHVlOiBjb25maWcgPT4gY29uZmlnLnZpc0NvbmZpZy5zdHJva2VXaWR0aCB8fCBERUZBVUxUX1NUUk9LRV9XSURUSFxuICAgICAgfSxcbiAgICAgIHJhZGl1czoge1xuICAgICAgICBwcm9wZXJ0eTogJ3JhZGl1cycsXG4gICAgICAgIGZpZWxkOiAncmFkaXVzRmllbGQnLFxuICAgICAgICBzY2FsZTogJ3JhZGl1c1NjYWxlJyxcbiAgICAgICAgZG9tYWluOiAncmFkaXVzRG9tYWluJyxcbiAgICAgICAgcmFuZ2U6ICdyYWRpdXNSYW5nZScsXG4gICAgICAgIGtleTogJ3JhZGl1cycsXG4gICAgICAgIGNoYW5uZWxTY2FsZVR5cGU6IENIQU5ORUxfU0NBTEVTLnNpemUsXG4gICAgICAgIG51bGxWYWx1ZTogMCxcbiAgICAgICAgZ2V0QXR0cmlidXRlVmFsdWU6IGNvbmZpZyA9PiB7XG4gICAgICAgICAgcmV0dXJuIGNvbmZpZy52aXNDb25maWcucmFkaXVzIHx8IGNvbmZpZy5yYWRpdXM7XG4gICAgICAgIH0sXG4gICAgICAgIGFjY2Vzc29yOiAnZ2V0UG9pbnRSYWRpdXMnLFxuICAgICAgICBkZWZhdWx0VmFsdWU6IGNvbmZpZyA9PiBjb25maWcucmFkaXVzXG4gICAgICB9XG4gICAgfTtcbiAgfVxuXG4gIGdldERlZmF1bHRMYXllckNvbmZpZyhcbiAgICBwcm9wczogTGF5ZXJCYXNlQ29uZmlnUGFydGlhbFxuICApOiBMYXllckJhc2VDb25maWcgJiBQYXJ0aWFsPExheWVyQ29sb3JDb25maWcgJiBMYXllckhlaWdodENvbmZpZz4ge1xuICAgIGNvbnN0IGRlZmF1bHRMYXllckNvbmZpZyA9IHN1cGVyLmdldERlZmF1bHRMYXllckNvbmZpZyhwcm9wcyk7XG4gICAgcmV0dXJuIHtcbiAgICAgIC4uLmRlZmF1bHRMYXllckNvbmZpZyxcbiAgICAgIGNvbG9yU2NhbGU6IFNDQUxFX1RZUEVTLnF1YW50aXplLFxuXG4gICAgICBzdHJva2VDb2xvckZpZWxkOiBudWxsLFxuICAgICAgc3Ryb2tlQ29sb3JEb21haW46IFswLCAxXSxcbiAgICAgIHN0cm9rZUNvbG9yU2NhbGU6IFNDQUxFX1RZUEVTLnF1YW50aWxlLFxuICAgICAgY29sb3JVSToge1xuICAgICAgICAuLi5kZWZhdWx0TGF5ZXJDb25maWcuY29sb3JVSSxcbiAgICAgICAgLy8gQHRzLWV4cGVjdC1lcnJvciBMYXllckNvbmZpZ1xuICAgICAgICBzdHJva2VDb2xvclJhbmdlOiBERUZBVUxUX0NPTE9SX1VJXG4gICAgICB9LFxuXG4gICAgICByYWRpdXNGaWVsZDogbnVsbCxcbiAgICAgIHJhZGl1c0RvbWFpbjogWzAsIDFdLFxuICAgICAgcmFkaXVzU2NhbGU6IFNDQUxFX1RZUEVTLmxpbmVhclxuICAgIH07XG4gIH1cblxuICBnZXRIb3ZlckRhdGEoXG4gICAgb2JqZWN0OiB7cHJvcGVydGllcz86IFJlY29yZDxzdHJpbmcsIFJlY29yZDxzdHJpbmcsIHVua25vd24+Pn0sXG4gICAgZGF0YUNvbnRhaW5lcjogRGF0YUNvbnRhaW5lckludGVyZmFjZSxcbiAgICBmaWVsZHM6IEtlcGxlckZpZWxkW11cbiAgKTogKFJlY29yZDxzdHJpbmcsIHVua25vd24+IHwgbnVsbClbXSB7XG4gICAgcmV0dXJuIGZpZWxkcy5tYXAoZiA9PiBvYmplY3QucHJvcGVydGllcz8uW2YubmFtZV0gPz8gbnVsbCk7XG4gIH1cblxuICBjYWxjdWxhdGVMYXllckRvbWFpbihcbiAgICBkYXRhc2V0OiBLZXBsZXJEYXRhc2V0LFxuICAgIHZpc3VhbENoYW5uZWw6IFZpc3VhbENoYW5uZWxcbiAgKTogRG9tYWluU3RvcHMgfCBudW1iZXJbXSB7XG4gICAgY29uc3QgZGVmYXVsdERvbWFpbiA9IFswLCAxXTtcblxuICAgIGNvbnN0IGZpZWxkID0gdGhpcy5jb25maWdbdmlzdWFsQ2hhbm5lbC5maWVsZF07XG4gICAgY29uc3Qgc2NhbGUgPSB0aGlzLmNvbmZpZ1t2aXN1YWxDaGFubmVsLnNjYWxlXTtcbiAgICBpZiAoIWZpZWxkKSB7XG4gICAgICAvLyBpZiBjb2xvckZpZWxkIG9yIHNpemVGaWVsZCB3ZXJlIHNldCBiYWNrIHRvIG51bGxcbiAgICAgIHJldHVybiBkZWZhdWx0RG9tYWluO1xuICAgIH1cbiAgICBpZiAoc2NhbGUgPT09IFNDQUxFX1RZUEVTLnF1YW50aWxlICYmIGlzRG9tYWluUXVhbnRpbGVzKGZpZWxkPy5maWx0ZXJQcm9wcz8uZG9tYWluUXVhbnRpbGVzKSkge1xuICAgICAgcmV0dXJuIGZpZWxkLmZpbHRlclByb3BzLmRvbWFpblF1YW50aWxlcztcbiAgICB9XG4gICAgaWYgKGlzRG9tYWluU3RvcHMoZmllbGQ/LmZpbHRlclByb3BzPy5kb21haW5TdG9wcykpIHtcbiAgICAgIHJldHVybiBmaWVsZC5maWx0ZXJQcm9wcy5kb21haW5TdG9wcztcbiAgICB9IGVsc2UgaWYgKEFycmF5LmlzQXJyYXkoZmllbGQ/LmZpbHRlclByb3BzPy5kb21haW4pKSB7XG4gICAgICByZXR1cm4gZmllbGQuZmlsdGVyUHJvcHMuZG9tYWluO1xuICAgIH1cblxuICAgIHJldHVybiBkZWZhdWx0RG9tYWluO1xuICB9XG5cbiAgZ2V0U2NhbGVPcHRpb25zKGNoYW5uZWxLZXk6IHN0cmluZyk6IHN0cmluZ1tdIHtcbiAgICBsZXQgb3B0aW9ucyA9IEtlcGxlckxheWVyLnByb3RvdHlwZS5nZXRTY2FsZU9wdGlvbnMuY2FsbCh0aGlzLCBjaGFubmVsS2V5KTtcblxuICAgIGNvbnN0IGNoYW5uZWwgPSB0aGlzLnZpc3VhbENoYW5uZWxzLnN0cm9rZUNvbG9yO1xuICAgIGNvbnN0IGZpZWxkID0gdGhpcy5jb25maWdbY2hhbm5lbC5maWVsZF07XG4gICAgaWYgKFxuICAgICAgIShcbiAgICAgICAgaXNEb21haW5RdWFudGlsZXMoZmllbGQ/LmZpbHRlclByb3BzPy5kb21haW5RdWFudGlsZXMpIHx8XG4gICAgICAgIHRoaXMuY29uZmlnLnZpc0NvbmZpZy5keW5hbWljQ29sb3IgfHxcbiAgICAgICAgLy8gSWYgd2UndmUgc2V0IHRoZSBzY2FsZSB0byBxdWFudGlsZSwgd2UgbmVlZCB0byBpbmNsdWRlIGl0IC0gdGhlcmUncyBhIGxvYWRpbmdcbiAgICAgICAgLy8gcGVyaW9kIGluIHdoaWNoIHRoZSB2aXNDb25maWcgaXNuJ3Qgc2V0IHlldCwgYnV0IGlmIHdlIGRvbid0IHJldHVybiB0aGUgcmlnaHRcbiAgICAgICAgLy8gc2NhbGUgdHlwZSB3ZSBsb3NlIGl0XG4gICAgICAgIHRoaXMuY29uZmlnLmNvbG9yU2NhbGUgPT09IFNDQUxFX1RZUEVTLnF1YW50aWxlXG4gICAgICApXG4gICAgKSB7XG4gICAgICBvcHRpb25zID0gb3B0aW9ucy5maWx0ZXIoc2NhbGUgPT4gc2NhbGUgIT09IFNDQUxFX1RZUEVTLnF1YW50aWxlKTtcbiAgICB9XG5cbiAgICByZXR1cm4gb3B0aW9ucztcbiAgfVxuXG4gIGFjY2Vzc1Jvd1ZhbHVlKFxuICAgIGZpZWxkPzogS2VwbGVyRmllbGQsXG4gICAgaW5kZXhLZXk/OiBudW1iZXIgfCBudWxsXG4gICk6IChmaWVsZDogS2VwbGVyRmllbGQsIGRhdHVtOiBGZWF0dXJlKSA9PiBudW1iZXIgfCBudWxsIHtcbiAgICAvLyBpZiBpcyBpbmRleGVkIGZpZWxkXG4gICAgaWYgKGlzSW5kZXhlZEZpZWxkKGZpZWxkKSAmJiBpbmRleEtleSAhPT0gbnVsbCkge1xuICAgICAgY29uc3QgZmllbGROYW1lID0gaW5kZXhLZXkgJiYgZmllbGQ/LmluZGV4Qnk/Lm1hcHBlZFZhbHVlW2luZGV4S2V5XTtcbiAgICAgIGlmIChmaWVsZE5hbWUpIHtcbiAgICAgICAgcmV0dXJuIChmLCBkYXR1bSkgPT4ge1xuICAgICAgICAgIGlmIChkYXR1bS5wcm9wZXJ0aWVzKSB7XG4gICAgICAgICAgICByZXR1cm4gZGF0dW0ucHJvcGVydGllc1tmaWVsZE5hbWVdO1xuICAgICAgICAgIH1cbiAgICAgICAgICAvLyBUT0RPIGRlYnVnIHRoaXMgd2l0aCBpbmRleGVkIHRpbGVkIGRhdGFzZXRcbiAgICAgICAgICByZXR1cm4gZGF0dW1bZmllbGROYW1lXTtcbiAgICAgICAgfTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICAvLyBkZWZhdWx0XG4gICAgcmV0dXJuIChmLCBkYXR1bSkgPT4ge1xuICAgICAgaWYgKGYgJiYgZGF0dW0ucHJvcGVydGllcykge1xuICAgICAgICByZXR1cm4gZGF0dW0ucHJvcGVydGllc1tmLm5hbWVdO1xuICAgICAgfVxuICAgICAgLy8gc3VwcG9ydCBwaWNraW5nICYgaGlnaGxpZ2h0aW5nXG4gICAgICByZXR1cm4gZiA/IGRhdHVtW2YuZmllbGRJZHhdIDogbnVsbDtcbiAgICB9O1xuICB9XG5cbiAgdXBkYXRlTGF5ZXJNZXRhKGRhdGFzZXQ6IEtlcGxlckRhdGFzZXQsIGRhdGFzZXRzOiBLZXBsZXJEYXRhc2V0cyk6IHZvaWQge1xuICAgIGlmIChkYXRhc2V0LnR5cGUgIT09IERhdGFzZXRUeXBlLlZFQ1RPUl9USUxFKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgY29uc3QgZGF0YXNldE1ldGEgPSBkYXRhc2V0Lm1ldGFkYXRhIGFzIFZlY3RvclRpbGVNZXRhZGF0YSAmIFZlY3RvclRpbGVEYXRhc2V0TWV0YWRhdGE7XG4gICAgdGhpcy51cGRhdGVNZXRhKHtcbiAgICAgIGRhdGFzZXRJZDogZGF0YXNldC5pZCxcbiAgICAgIGRhdGFzZXRzLFxuICAgICAgYm91bmRzOiBkYXRhc2V0TWV0YS5ib3VuZHNcbiAgICB9KTtcbiAgfVxuXG4gIGZvcm1hdExheWVyRGF0YShcbiAgICBkYXRhc2V0czogS2VwbGVyRGF0YXNldHMsXG4gICAgb2xkTGF5ZXJEYXRhOiB1bmtub3duLFxuICAgIGFuaW1hdGlvbkNvbmZpZzogQW5pbWF0aW9uQ29uZmlnXG4gICk6IExheWVyRGF0YSB7XG4gICAgY29uc3Qge2RhdGFJZH0gPSB0aGlzLmNvbmZpZztcbiAgICBpZiAoIW5vdE51bGxvclVuZGVmaW5lZChkYXRhSWQpKSB7XG4gICAgICByZXR1cm4ge3RpbGVTb3VyY2U6IG51bGx9O1xuICAgIH1cbiAgICBjb25zdCBkYXRhc2V0ID0gZGF0YXNldHNbZGF0YUlkXTtcblxuICAgIGxldCB0aWxlc2V0RGF0YVVybDogc3RyaW5nIHwgdW5kZWZpbmVkO1xuICAgIGxldCB0aWxlU291cmNlOiBMYXllckRhdGFbJ3RpbGVTb3VyY2UnXSA9IG51bGw7XG5cbiAgICBpZiAoZGF0YXNldD8udHlwZSA9PT0gRGF0YXNldFR5cGUuVkVDVE9SX1RJTEUpIHtcbiAgICAgIGNvbnN0IGRhdGFzZXRNZXRhZGF0YSA9IGRhdGFzZXQubWV0YWRhdGEgYXMgVmVjdG9yVGlsZU1ldGFkYXRhICYgVmVjdG9yVGlsZURhdGFzZXRNZXRhZGF0YTtcbiAgICAgIGNvbnN0IHJlbW90ZVRpbGVGb3JtYXQgPSBkYXRhc2V0TWV0YWRhdGE/LnJlbW90ZVRpbGVGb3JtYXQ7XG4gICAgICBpZiAocmVtb3RlVGlsZUZvcm1hdCA9PT0gUmVtb3RlVGlsZUZvcm1hdC5NVlQpIHtcbiAgICAgICAgY29uc3QgdHJhbnNmb3JtRmV0Y2ggPSBhc3luYyAoaW5wdXQ6IFJlcXVlc3RJbmZvIHwgVVJMLCBpbml0PzogUmVxdWVzdEluaXQgfCB1bmRlZmluZWQpID0+IHtcbiAgICAgICAgICBjb25zdCByZXF1ZXN0RGF0YTogUmVxdWVzdFBhcmFtZXRlcnMgPSB7XG4gICAgICAgICAgICB1cmw6IGlucHV0IGFzIHN0cmluZyxcbiAgICAgICAgICAgIHNlYXJjaFBhcmFtczogbmV3IFVSTFNlYXJjaFBhcmFtcygpLFxuICAgICAgICAgICAgb3B0aW9uczogaW5pdCA/PyB7fVxuICAgICAgICAgIH07XG5cbiAgICAgICAgICByZXR1cm4gZmV0Y2gocmVxdWVzdERhdGEudXJsLCByZXF1ZXN0RGF0YS5vcHRpb25zKTtcbiAgICAgICAgfTtcblxuICAgICAgICB0aWxlc2V0RGF0YVVybCA9IGRhdGFzZXRNZXRhZGF0YT8udGlsZXNldERhdGFVcmw7XG4gICAgICAgIHRpbGVTb3VyY2UgPSB0aWxlc2V0RGF0YVVybFxuICAgICAgICAgID8gTVZUU291cmNlLmNyZWF0ZURhdGFTb3VyY2UoZGVjb2RlVVJJQ29tcG9uZW50KHRpbGVzZXREYXRhVXJsKSwge1xuICAgICAgICAgICAgICBtdnQ6IHtcbiAgICAgICAgICAgICAgICBtZXRhZGF0YVVybDogZGF0YXNldE1ldGFkYXRhPy50aWxlc2V0TWV0YWRhdGFVcmwgPz8gbnVsbCxcbiAgICAgICAgICAgICAgICBsb2FkT3B0aW9uczoge1xuICAgICAgICAgICAgICAgICAgZmV0Y2g6IHRyYW5zZm9ybUZldGNoXG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9KVxuICAgICAgICAgIDogbnVsbDtcbiAgICAgIH0gZWxzZSBpZiAocmVtb3RlVGlsZUZvcm1hdCA9PT0gUmVtb3RlVGlsZUZvcm1hdC5QTVRJTEVTKSB7XG4gICAgICAgIC8vIFRPRE86IHRvIHJlbmRlciBpbWFnZSBwbXRpbGVzIG5lZWQgdG8gdXNlIFRpbGVMYXllciBhbmQgQml0bWFwTGF5ZXIgKGh0dHBzOi8vZ2l0aHViLmNvbS92aXNnbC9sb2FkZXJzLmdsL2Jsb2IvbWFzdGVyL2V4YW1wbGVzL3dlYnNpdGUvdGlsZXMvY29tcG9uZW50cy90aWxlLXNvdXJjZS1sYXllci50cylcbiAgICAgICAgdGlsZXNldERhdGFVcmwgPSBkYXRhc2V0TWV0YWRhdGE/LnRpbGVzZXREYXRhVXJsO1xuICAgICAgICB0aWxlU291cmNlID0gdGlsZXNldERhdGFVcmwgPyBQTVRpbGVzU291cmNlLmNyZWF0ZURhdGFTb3VyY2UodGlsZXNldERhdGFVcmwsIHt9KSA6IG51bGw7XG4gICAgICB9XG4gICAgfVxuXG4gICAgcmV0dXJuIHtcbiAgICAgIC4uLnN1cGVyLmZvcm1hdExheWVyRGF0YShkYXRhc2V0cywgb2xkTGF5ZXJEYXRhLCBhbmltYXRpb25Db25maWcpLFxuICAgICAgdGlsZXNldERhdGFVcmw6IHR5cGVvZiB0aWxlc2V0RGF0YVVybCA9PT0gJ3N0cmluZycgPyBnZXRUaWxlVXJsKHRpbGVzZXREYXRhVXJsKSA6IG51bGwsXG4gICAgICB0aWxlU291cmNlXG4gICAgfTtcbiAgfVxuXG4gIGhhc0hvdmVyZWRPYmplY3Qob2JqZWN0SW5mbykge1xuICAgIGlmIChzdXBlci5oYXNIb3ZlcmVkT2JqZWN0KG9iamVjdEluZm8pKSB7XG4gICAgICBjb25zdCBmZWF0dXJlcyA9IG9iamVjdEluZm8/LnRpbGU/LmNvbnRlbnQ/LmZlYXR1cmVzO1xuICAgICAgcmV0dXJuIGZlYXR1cmVzW29iamVjdEluZm8uaW5kZXhdO1xuICAgIH1cbiAgICByZXR1cm4gbnVsbDtcbiAgfVxuXG4gIHJlbmRlclN1YkxheWVycyhwcm9wczogUmVjb3JkPHN0cmluZywgYW55Pik6IERlY2tMYXllciB8IERlY2tMYXllcltdIHtcbiAgICBsZXQge2RhdGF9ID0gcHJvcHM7XG5cbiAgICBkYXRhID0gZGF0YT8uc2hhcGUgPT09ICdnZW9qc29uLXRhYmxlJyA/IGRhdGEuZmVhdHVyZXMgOiBkYXRhO1xuICAgIGlmICghZGF0YT8ubGVuZ3RoKSB7XG4gICAgICByZXR1cm4gW107XG4gICAgfVxuXG4gICAgY29uc3QgdGlsZTogVGlsZTJESGVhZGVyID0gcHJvcHMudGlsZTtcbiAgICBjb25zdCB6b29tID0gdGlsZS5pbmRleC56O1xuXG4gICAgcmV0dXJuIG5ldyBHZW9Kc29uTGF5ZXIoe1xuICAgICAgLi4ucHJvcHMsXG4gICAgICBkYXRhLFxuICAgICAgZ2V0RmlsbENvbG9yOiBwcm9wcy5nZXRGaWxsQ29sb3JCeVpvb20gPyBwcm9wcy5nZXRGaWxsQ29sb3Ioem9vbSkgOiBwcm9wcy5nZXRGaWxsQ29sb3IsXG4gICAgICBnZXRFbGV2YXRpb246IHByb3BzLmdldEVsZXZhdGlvbkJ5Wm9vbSA/IHByb3BzLmdldEVsZXZhdGlvbih6b29tKSA6IHByb3BzLmdldEVsZXZhdGlvbixcbiAgICAgIC8vIHJhZGl1cyBmb3IgcG9pbnRzXG4gICAgICBwb2ludFJhZGl1c1NjYWxlOiBwcm9wcy5wb2ludFJhZGl1c1NjYWxlLCAvLyBwcm9wcy5nZXRQb2ludFJhZGl1c1NjYWxlQnlab29tKHpvb20pLFxuICAgICAgcG9pbnRSYWRpdXNVbml0czogcHJvcHMucG9pbnRSYWRpdXNVbml0cyxcbiAgICAgIGdldFBvaW50UmFkaXVzOiBwcm9wcy5nZXRQb2ludFJhZGl1cyxcbiAgICAgIC8vIEZvciBzb21lIHJlYXNvbiB0aWxlIExheWVyIHJlc2V0IGF1dG9IaWdobGlnaHQgdG8gZmFsc2VcbiAgICAgIHBpY2thYmxlOiB0cnVlLFxuICAgICAgYXV0b0hpZ2hsaWdodDogdHJ1ZSxcbiAgICAgIHN0cm9rZWQ6IHByb3BzLnN0cm9rZWQsXG4gICAgICAvLyB3cmFwTG9uZ2l0dWRlOiB0cnVlIGNhdXNlcyBtaXNzaW5nIHNpZGUgcG9seWdvbiB3aGVuIGV4dHJ1ZGUgaXMgZW5hYmxlZFxuICAgICAgd3JhcExvbmdpdHVkZTogZmFsc2VcbiAgICB9KTtcbiAgfVxuXG4gIC8vIGdlbmVyYXRlIGEgZGVjayBsYXllclxuICByZW5kZXJMYXllcihvcHRzOiBWZWN0b3JUaWxlTGF5ZXJSZW5kZXJPcHRpb25zKTogRGVja0xheWVyW10ge1xuICAgIGNvbnN0IHttYXBTdGF0ZSwgZGF0YSwgYW5pbWF0aW9uQ29uZmlnLCBncHVGaWx0ZXIsIG9iamVjdEhvdmVyZWQsIGxheWVyQ2FsbGJhY2tzfSA9IG9wdHM7XG4gICAgY29uc3Qge2FuaW1hdGlvbiwgdmlzQ29uZmlnfSA9IHRoaXMuY29uZmlnO1xuXG4gICAgdGhpcy5zZXRMYXllckRvbWFpbiA9IGxheWVyQ2FsbGJhY2tzLm9uU2V0TGF5ZXJEb21haW47XG5cbiAgICBjb25zdCBkZWZhdWx0TGF5ZXJQcm9wcyA9IHRoaXMuZ2V0RGVmYXVsdERlY2tMYXllclByb3BzKG9wdHMpO1xuICAgIGNvbnN0IGVsZVpvb21GYWN0b3IgPSB0aGlzLmdldEVsZXZhdGlvblpvb21GYWN0b3IobWFwU3RhdGUpO1xuXG4gICAgY29uc3QgdHJhbnNpdGlvbnMgPSB0aGlzLmNvbmZpZy52aXNDb25maWcudHJhbnNpdGlvblxuICAgICAgPyB7XG4gICAgICAgICAgZ2V0RmlsbENvbG9yOiB7XG4gICAgICAgICAgICBkdXJhdGlvbjogYW5pbWF0aW9uQ29uZmlnLmR1cmF0aW9uXG4gICAgICAgICAgfSxcbiAgICAgICAgICBnZXRFbGV2YXRpb246IHtcbiAgICAgICAgICAgIGR1cmF0aW9uOiBhbmltYXRpb25Db25maWcuZHVyYXRpb25cbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIDogdW5kZWZpbmVkO1xuXG4gICAgY29uc3QgY29sb3JGaWVsZCA9IHRoaXMuY29uZmlnLmNvbG9yRmllbGQgYXMgS2VwbGVyRmllbGQ7XG4gICAgY29uc3QgaGVpZ2h0RmllbGQgPSB0aGlzLmNvbmZpZy5oZWlnaHRGaWVsZCBhcyBLZXBsZXJGaWVsZDtcbiAgICBjb25zdCBzdHJva2VDb2xvckZpZWxkID0gdGhpcy5jb25maWcuc3Ryb2tlQ29sb3JGaWVsZCBhcyBLZXBsZXJGaWVsZDtcbiAgICBjb25zdCBzaXplRmllbGQgPSB0aGlzLmNvbmZpZy5zaXplRmllbGQgYXMgS2VwbGVyRmllbGQ7XG4gICAgY29uc3QgcmFkaXVzRmllbGQgPSB0aGlzLmNvbmZpZy5yYWRpdXNGaWVsZCBhcyBLZXBsZXJGaWVsZDtcblxuICAgIGlmIChkYXRhLnRpbGVTb3VyY2UpIHtcbiAgICAgIGNvbnN0IGhvdmVyZWRPYmplY3QgPSB0aGlzLmhhc0hvdmVyZWRPYmplY3Qob2JqZWN0SG92ZXJlZCk7XG5cbiAgICAgIGNvbnN0IGxheWVycyA9IFtcbiAgICAgICAgbmV3IEN1c3RvbU1WVExheWVyKHtcbiAgICAgICAgICAuLi5kZWZhdWx0TGF5ZXJQcm9wcyxcbiAgICAgICAgICAuLi5kYXRhLFxuICAgICAgICAgIG9uVmlld3BvcnRMb2FkOiB0aGlzLm9uVmlld3BvcnRMb2FkLFxuICAgICAgICAgIGRhdGE6IGRhdGEudGlsZXNldERhdGFVcmwsXG4gICAgICAgICAgZ2V0VGlsZURhdGE6IGRhdGEudGlsZVNvdXJjZT8uZ2V0VGlsZURhdGEsXG4gICAgICAgICAgdGlsZVNvdXJjZTogZGF0YS50aWxlU291cmNlLFxuICAgICAgICAgIGdldEZpbHRlclZhbHVlOiB0aGlzLmdldEdwdUZpbHRlclZhbHVlQWNjZXNzb3Iob3B0cyksXG4gICAgICAgICAgZmlsdGVyUmFuZ2U6IGdwdUZpbHRlci5maWx0ZXJSYW5nZSxcbiAgICAgICAgICBsaW5lV2lkdGhVbml0czogJ3BpeGVscycsXG5cbiAgICAgICAgICBiaW5hcnk6IGZhbHNlLFxuICAgICAgICAgIGVsZXZhdGlvblNjYWxlOiB2aXNDb25maWcuZWxldmF0aW9uU2NhbGUgKiBlbGVab29tRmFjdG9yLFxuICAgICAgICAgIGV4dHJ1ZGVkOiB2aXNDb25maWcuZW5hYmxlM2QsXG4gICAgICAgICAgc3Ryb2tlZDogdmlzQ29uZmlnLnN0cm9rZWQsXG5cbiAgICAgICAgICAvLyBUT0RPOiB0aGlzIGlzIGhhcmQgY29kZWQsIGRlc2lnbiBhIFVJIHRvIGFsbG93IHVzZXIgYXNzaWduZWQgdW5pcXVlIHByb3BlcnR5IGlkXG4gICAgICAgICAgLy8gdW5pcXVlSWRQcm9wZXJ0eTogJ3VmaWQnLFxuICAgICAgICAgIHJlbmRlclN1YkxheWVyczogdGhpcy5yZW5kZXJTdWJMYXllcnMsXG4gICAgICAgICAgLy8gd2hlbiByYWRpdXNVbml0cyBpcyBtZXRlclxuICAgICAgICAgIGdldFBvaW50UmFkaXVzU2NhbGVCeVpvb206IGdldFByb3BlcnR5Qnlab29tKHZpc0NvbmZpZy5yYWRpdXNCeVpvb20sIHZpc0NvbmZpZy5yYWRpdXMpLFxuICAgICAgICAgIHBvaW50UmFkaXVzVW5pdHM6IHZpc0NvbmZpZy5yYWRpdXNVbml0cyA/ICdwaXhlbHMnIDogJ21ldGVycycsXG4gICAgICAgICAgcG9pbnRSYWRpdXNTY2FsZTogcmFkaXVzRmllbGQgPyB2aXNDb25maWcucmFkaXVzIDogMSxcblxuICAgICAgICAgIHBvaW50UmFkaXVzTWluUGl4ZWxzOiAxLFxuICAgICAgICAgIGF1dG9IaWdobGlnaHQ6IHRydWUsXG4gICAgICAgICAgaGlnaGxpZ2h0Q29sb3I6IERFRkFVTFRfSElHSExJR0hUX0ZJTExfQ09MT1IsXG4gICAgICAgICAgcGlja2FibGU6IHRydWUsXG4gICAgICAgICAgdHJhbnNpdGlvbnMsXG4gICAgICAgICAgdXBkYXRlVHJpZ2dlcnM6IHtcbiAgICAgICAgICAgIGdldEZpbHRlclZhbHVlOiB7XG4gICAgICAgICAgICAgIC4uLmdwdUZpbHRlci5maWx0ZXJWYWx1ZVVwZGF0ZVRyaWdnZXJzLFxuICAgICAgICAgICAgICBjdXJyZW50VGltZTogYW5pbWF0aW9uLmVuYWJsZWQgPyBhbmltYXRpb25Db25maWcuY3VycmVudFRpbWUgOiBudWxsXG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgZ2V0RmlsbENvbG9yOiB7XG4gICAgICAgICAgICAgIGNvbG9yOiB0aGlzLmNvbmZpZy5jb2xvcixcbiAgICAgICAgICAgICAgY29sb3JGaWVsZDogdGhpcy5jb25maWcuY29sb3JGaWVsZCxcbiAgICAgICAgICAgICAgY29sb3JTY2FsZTogdGhpcy5jb25maWcuY29sb3JTY2FsZSxcbiAgICAgICAgICAgICAgY29sb3JEb21haW46IHRoaXMuY29uZmlnLmNvbG9yRG9tYWluLFxuICAgICAgICAgICAgICBjb2xvclJhbmdlOiB2aXNDb25maWcuY29sb3JSYW5nZSxcbiAgICAgICAgICAgICAgY3VycmVudFRpbWU6IGlzSW5kZXhlZEZpZWxkKGNvbG9yRmllbGQpID8gYW5pbWF0aW9uQ29uZmlnLmN1cnJlbnRUaW1lIDogbnVsbFxuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIGdldEVsZXZhdGlvbjoge1xuICAgICAgICAgICAgICBoZWlnaHRGaWVsZDogdGhpcy5jb25maWcuaGVpZ2h0RmllbGQsXG4gICAgICAgICAgICAgIGhlaWdodFNjYWxlVHlwZTogdGhpcy5jb25maWcuaGVpZ2h0U2NhbGUsXG4gICAgICAgICAgICAgIGhlaWdodFJhbmdlOiB2aXNDb25maWcuaGVpZ2h0UmFuZ2UsXG4gICAgICAgICAgICAgIGN1cnJlbnRUaW1lOiBpc0luZGV4ZWRGaWVsZChoZWlnaHRGaWVsZCkgPyBhbmltYXRpb25Db25maWcuY3VycmVudFRpbWUgOiBudWxsXG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgZ2V0TGluZUNvbG9yOiB7XG4gICAgICAgICAgICAgIHN0cm9rZUNvbG9yOiB2aXNDb25maWcuc3Ryb2tlQ29sb3IsXG4gICAgICAgICAgICAgIHN0cm9rZUNvbG9yRmllbGQ6IHRoaXMuY29uZmlnLnN0cm9rZUNvbG9yRmllbGQsXG4gICAgICAgICAgICAgIC8vIEB0cy1leHBlY3QtZXJyb3IgcHJvcCBub3QgaW4gTGF5ZXJDb25maWdcbiAgICAgICAgICAgICAgc3Ryb2tlQ29sb3JTY2FsZTogdGhpcy5jb25maWcuc3Ryb2tlQ29sb3JTY2FsZSxcbiAgICAgICAgICAgICAgLy8gQHRzLWV4cGVjdC1lcnJvciBwcm9wIG5vdCBpbiBMYXllckNvbmZpZ1xuICAgICAgICAgICAgICBzdHJva2VDb2xvckRvbWFpbjogdGhpcy5jb25maWcuc3Ryb2tlQ29sb3JEb21haW4sXG4gICAgICAgICAgICAgIC8vIEZJWE1FOiBTdHJpcCBvdXQgZW1wdHkgYXJyYXlzIGZyb20gaW5kaXZpZHVhbCBjb2xvciBtYXAgc3RlcHMsIGFuZCByZXBsYWNlIHdpdGggYG51bGxgLCBvdGhlcndpc2UgdGhlIGxheWVyIG1heSBzaG93IHRoZSBpbmNvcnJlY3QgY29sb3IuXG4gICAgICAgICAgICAgIC8vIFNvIGZhciBpdCBzZWVtcyB0aGF0IGl0IHVzZXMgdGhlIHByZXZpb3VzIGNvbG9yIGNob3NlbiBpbiB0aGUgcGFsZXR0ZSByYXRoZXIgdGhhbiB0aGUgY3VycmVudGx5IGNob3NlbiBjb2xvciBmb3IgdGhlIHNwZWNpZmljIGN1c3RvbSBvcmRpbmFsIHZhbHVlIHdoZW4gdGhlcmUgYXJlIFwic3BhcnNlXCIgY29sb3IgbWFwcy5cbiAgICAgICAgICAgICAgLy8gSW4gb3RoZXIgd29yZHMsIGEgY29sb3IgbWFwIHdpdGggXCJob2xlc1wiIG9mIGNvbG9ycyB3aXRoIHVuYXNzaWduZWQgZmllbGQgdmFsdWVzLCB3aGljaCBtYXkgaGF2ZSBiZWVuIGFzc2lnbmVkIGluIHRoZSBwYXN0LlxuICAgICAgICAgICAgICAvLyBGb3IgZXhhbXBsZSBcImFiY1wiIHdhcyBncmVlbiwgc3RvcmVkIGFzIGBbXCJhYmNcIl1gLiBUaGVuIFwiYWJjXCIgd2FzIHJlYXNzaWduZWQgdG8gdGhlIHJlZCBjb2xvciBtYXAgc3RlcCwgc3RvcmVkIGFzIGBbXCJhYmNcIl1gLiBOb3cgdGhlIGdyZWVuIGNvbG9yIG1hcCBzdGVwJ3Mgc3RvcmVkIHZhbHVlIGlzIGBbXWAsIGFuZCB0aGUgbGF5ZXIgd2lsbCBpbmNvcnJlY3RseSBzdGlsbCByZW5kZXIgXCJhYmNcIiBpbiBncmVlbi5cbiAgICAgICAgICAgICAgLy8gUXVpY2sgcGF0Y2ggZXhhbXBsZTpcbiAgICAgICAgICAgICAgLy8gc3Ryb2tlQ29sb3JSYW5nZTogdmlzQ29uZmlnPy5zdHJva2VDb2xvclJhbmdlPy5jb2xvck1hcD8ubWFwKGNtID0+XG4gICAgICAgICAgICAgIC8vICAgY21bMF0/Lmxlbmd0aCA9PT0gMCA/IFtudWxsLCBjbVsxXV0gOiBjbVxuICAgICAgICAgICAgICAvLyApLFxuICAgICAgICAgICAgICAvLyBOb3RlOiBmb3IgcmVndWxhciBzY2FsZXMgdGhlIGNvbG9yTWFwIGluIHRoZSBhYm92ZSBwYXRjaCBpcyB1bmRlZmluZWQgYW5kIGJyZWFrcyBzdHJva2VDb2xvclJhbmdlIHVwZGF0ZSB0cmlnZ2VyLlxuICAgICAgICAgICAgICBzdHJva2VDb2xvclJhbmdlOiB2aXNDb25maWcuc3Ryb2tlQ29sb3JSYW5nZSxcbiAgICAgICAgICAgICAgY3VycmVudFRpbWU6IGlzSW5kZXhlZEZpZWxkKHN0cm9rZUNvbG9yRmllbGQpID8gYW5pbWF0aW9uQ29uZmlnLmN1cnJlbnRUaW1lIDogbnVsbFxuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIGdldExpbmVXaWR0aDoge1xuICAgICAgICAgICAgICBzaXplUmFuZ2U6IHZpc0NvbmZpZy5zaXplUmFuZ2UsXG4gICAgICAgICAgICAgIHN0cm9rZVdpZHRoOiB2aXNDb25maWcuc3Ryb2tlV2lkdGgsXG4gICAgICAgICAgICAgIHNpemVGaWVsZDogdGhpcy5jb25maWcuc2l6ZUZpZWxkLFxuICAgICAgICAgICAgICBzaXplU2NhbGU6IHRoaXMuY29uZmlnLnNpemVTY2FsZSxcbiAgICAgICAgICAgICAgc2l6ZURvbWFpbjogdGhpcy5jb25maWcuc2l6ZURvbWFpbixcbiAgICAgICAgICAgICAgY3VycmVudFRpbWU6IGlzSW5kZXhlZEZpZWxkKHNpemVGaWVsZCkgPyBhbmltYXRpb25Db25maWcuY3VycmVudFRpbWUgOiBudWxsXG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgZ2V0UG9pbnRSYWRpdXM6IHtcbiAgICAgICAgICAgICAgcmFkaXVzOiB2aXNDb25maWcucmFkaXVzLFxuICAgICAgICAgICAgICByYWRpdXNGaWVsZDogdGhpcy5jb25maWcucmFkaXVzRmllbGQsXG4gICAgICAgICAgICAgIHJhZGl1c1NjYWxlOiB0aGlzLmNvbmZpZy5yYWRpdXNTY2FsZSxcbiAgICAgICAgICAgICAgcmFkaXVzRG9tYWluOiB0aGlzLmNvbmZpZy5yYWRpdXNEb21haW4sXG4gICAgICAgICAgICAgIHJhZGl1c1JhbmdlOiB0aGlzLmNvbmZpZy5yYWRpdXNSYW5nZSxcbiAgICAgICAgICAgICAgY3VycmVudFRpbWU6IGlzSW5kZXhlZEZpZWxkKHJhZGl1c0ZpZWxkKSA/IGFuaW1hdGlvbkNvbmZpZy5jdXJyZW50VGltZSA6IG51bGxcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9LFxuICAgICAgICAgIF9zdWJMYXllclByb3BzOiB7XG4gICAgICAgICAgICAncG9seWdvbnMtc3Ryb2tlJzoge29wYWNpdHk6IHZpc0NvbmZpZy5zdHJva2VPcGFjaXR5fSxcbiAgICAgICAgICAgICdwb2x5Z29ucy1maWxsJzoge1xuICAgICAgICAgICAgICBwYXJhbWV0ZXJzOiB7XG4gICAgICAgICAgICAgICAgY3VsbEZhY2U6IEdMLkJBQ0tcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICAgIH0sXG4gICAgICAgICAgbG9hZE9wdGlvbnM6IHtcbiAgICAgICAgICAgIG12dDogZ2V0TG9hZGVyT3B0aW9ucygpLm12dFxuICAgICAgICAgIH1cbiAgICAgICAgfSksXG4gICAgICAgIC8vIGhvdmVyIGxheWVyXG4gICAgICAgIC4uLihob3ZlcmVkT2JqZWN0XG4gICAgICAgICAgPyBbXG4gICAgICAgICAgICAgIG5ldyBHZW9Kc29uTGF5ZXIoe1xuICAgICAgICAgICAgICAgIC8vIEB0cy1leHBlY3QtZXJyb3IgcHJvcHMgbm90IHR5cGVkP1xuICAgICAgICAgICAgICAgIC4uLm9iamVjdEhvdmVyZWQuc291cmNlTGF5ZXI/LnByb3BzLFxuICAgICAgICAgICAgICAgIC4uLih0aGlzLmdldERlZmF1bHRIb3ZlckxheWVyUHJvcHMoKSBhcyBhbnkpLFxuICAgICAgICAgICAgICAgIHZpc2libGU6IHRydWUsXG4gICAgICAgICAgICAgICAgd3JhcExvbmdpdHVkZTogZmFsc2UsXG4gICAgICAgICAgICAgICAgZGF0YTogW2hvdmVyZWRPYmplY3RdLFxuICAgICAgICAgICAgICAgIGdldExpbmVDb2xvcjogREVGQVVMVF9ISUdITElHSFRfU1RST0tFX0NPTE9SLFxuICAgICAgICAgICAgICAgIGdldEZpbGxDb2xvcjogREVGQVVMVF9ISUdITElHSFRfRklMTF9DT0xPUixcbiAgICAgICAgICAgICAgICBnZXRMaW5lV2lkdGg6IHZpc0NvbmZpZy5zdHJva2VXaWR0aCArIDEsXG4gICAgICAgICAgICAgICAgbGluZVdpZHRoVW5pdHM6ICdwaXhlbHMnLFxuICAgICAgICAgICAgICAgIHN0cm9rZWQ6IHRydWUsXG4gICAgICAgICAgICAgICAgZmlsbGVkOiB0cnVlXG4gICAgICAgICAgICAgIH0pXG4gICAgICAgICAgICBdXG4gICAgICAgICAgOiBbXSlcbiAgICAgICAgLy8gLi4udGlsZUxheWVyQm91bmRzTGF5ZXIoZGVmYXVsdExheWVyUHJvcHMuaWQsIGRhdGEpLFxuICAgICAgXTtcblxuICAgICAgcmV0dXJuIGxheWVycztcbiAgICB9XG4gICAgcmV0dXJuIFtdO1xuICB9XG59XG4iXSwibWFwcGluZ3MiOiI7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0FBT0EsSUFBQUEsTUFBQSxHQUFBQyxPQUFBO0FBQ0EsSUFBQUMsSUFBQSxHQUFBRCxPQUFBO0FBQ0EsSUFBQUUsUUFBQSxHQUFBRixPQUFBO0FBQ0EsSUFBQUcsVUFBQSxHQUFBQyxzQkFBQSxDQUFBSixPQUFBO0FBRUEsSUFBQUssWUFBQSxHQUFBTCxPQUFBO0FBQ0EsSUFBQU0sV0FBQSxHQUFBTixPQUFBO0FBVUEsSUFBQU8sTUFBQSxHQUFBUCxPQUFBO0FBc0JBLElBQUFRLFNBQUEsR0FBQVIsT0FBQTtBQUNBLElBQUFTLGVBQUEsR0FBQUwsc0JBQUEsQ0FBQUosT0FBQTtBQUNBLElBQUFVLFVBQUEsR0FBQU4sc0JBQUEsQ0FBQUosT0FBQTtBQVVBLElBQUFXLGtCQUFBLEdBQUFDLHVCQUFBLENBQUFaLE9BQUE7QUFNQSxJQUFBYSxZQUFBLEdBQUFULHNCQUFBLENBQUFKLE9BQUE7QUFDQSxJQUFBYyxVQUFBLEdBQUFkLE9BQUE7QUFLa0MsU0FBQWUseUJBQUFDLENBQUEsNkJBQUFDLE9BQUEsbUJBQUFDLENBQUEsT0FBQUQsT0FBQSxJQUFBRSxDQUFBLE9BQUFGLE9BQUEsWUFBQUYsd0JBQUEsWUFBQUEseUJBQUFDLENBQUEsV0FBQUEsQ0FBQSxHQUFBRyxDQUFBLEdBQUFELENBQUEsS0FBQUYsQ0FBQTtBQUFBLFNBQUFKLHdCQUFBSSxDQUFBLEVBQUFFLENBQUEsU0FBQUEsQ0FBQSxJQUFBRixDQUFBLElBQUFBLENBQUEsQ0FBQUksVUFBQSxTQUFBSixDQUFBLGVBQUFB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
|
package/src/layers/package.json
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@kepler.gl/layers",
|
|
3
3
|
"author": "Shan He <shan@uber.com>",
|
|
4
|
-
"version": "3.1.
|
|
4
|
+
"version": "3.1.1",
|
|
5
5
|
"description": "kepler.gl constants used by kepler.gl components, actions and reducers",
|
|
6
6
|
"license": "MIT",
|
|
7
7
|
"main": "dist/index.js",
|
|
@@ -36,14 +36,14 @@
|
|
|
36
36
|
"@deck.gl/geo-layers": "^8.9.27",
|
|
37
37
|
"@deck.gl/layers": "^8.9.27",
|
|
38
38
|
"@deck.gl/mesh-layers": "^8.9.27",
|
|
39
|
-
"@kepler.gl/common-utils": "3.1.
|
|
40
|
-
"@kepler.gl/constants": "3.1.
|
|
41
|
-
"@kepler.gl/deckgl-arrow-layers": "3.1.
|
|
42
|
-
"@kepler.gl/deckgl-layers": "3.1.
|
|
43
|
-
"@kepler.gl/localization": "3.1.
|
|
44
|
-
"@kepler.gl/table": "3.1.
|
|
45
|
-
"@kepler.gl/types": "3.1.
|
|
46
|
-
"@kepler.gl/utils": "3.1.
|
|
39
|
+
"@kepler.gl/common-utils": "3.1.1",
|
|
40
|
+
"@kepler.gl/constants": "3.1.1",
|
|
41
|
+
"@kepler.gl/deckgl-arrow-layers": "3.1.1",
|
|
42
|
+
"@kepler.gl/deckgl-layers": "3.1.1",
|
|
43
|
+
"@kepler.gl/localization": "3.1.1",
|
|
44
|
+
"@kepler.gl/table": "3.1.1",
|
|
45
|
+
"@kepler.gl/types": "3.1.1",
|
|
46
|
+
"@kepler.gl/utils": "3.1.1",
|
|
47
47
|
"@loaders.gl/arrow": "^4.3.2",
|
|
48
48
|
"@loaders.gl/core": "^4.3.2",
|
|
49
49
|
"@loaders.gl/gis": "^4.3.2",
|
|
@@ -67,6 +67,7 @@
|
|
|
67
67
|
"@types/lodash.uniq": "^4.5.7",
|
|
68
68
|
"@types/styled-components": "^5.1.32",
|
|
69
69
|
"apache-arrow": ">=15.0.0",
|
|
70
|
+
"buffer": "6.0.3",
|
|
70
71
|
"d3-array": "^2.8.0",
|
|
71
72
|
"d3-shape": "^1.2.0",
|
|
72
73
|
"global": "^4.3.0",
|
|
@@ -78,7 +79,7 @@
|
|
|
78
79
|
"prop-types": "^15.6.0",
|
|
79
80
|
"react": "^18.2.0",
|
|
80
81
|
"react-intl": "^6.3.0",
|
|
81
|
-
"react-markdown": "^
|
|
82
|
+
"react-markdown": "^10.0.0",
|
|
82
83
|
"reselect": "^4.1.0",
|
|
83
84
|
"s2-geometry": "^1.2.10",
|
|
84
85
|
"styled-components": "6.1.8",
|
|
@@ -293,7 +293,7 @@ export default class ArcLayer extends Layer {
|
|
|
293
293
|
return hasStart && hasNeibors;
|
|
294
294
|
}
|
|
295
295
|
|
|
296
|
-
static findDefaultLayerProps({
|
|
296
|
+
static findDefaultLayerProps({fieldPairs = []}: KeplerTable): {
|
|
297
297
|
props: {color?: RGBColor; columns: ArcLayerColumnsConfig; label: string}[];
|
|
298
298
|
} {
|
|
299
299
|
if (fieldPairs.length < 2) {
|
|
@@ -11,6 +11,7 @@ import React from 'react';
|
|
|
11
11
|
import * as arrow from 'apache-arrow';
|
|
12
12
|
import DefaultLayerIcon from './default-layer-icon';
|
|
13
13
|
import {diffUpdateTriggers} from './layer-update';
|
|
14
|
+
import {getSatisfiedColumnMode, FindDefaultLayerPropsReturnValue} from './layer-utils';
|
|
14
15
|
|
|
15
16
|
import {
|
|
16
17
|
CHANNEL_SCALES,
|
|
@@ -33,6 +34,7 @@ import {
|
|
|
33
34
|
import {
|
|
34
35
|
DataContainerInterface,
|
|
35
36
|
DomainQuantiles,
|
|
37
|
+
getApplicationConfig,
|
|
36
38
|
getLatLngBounds,
|
|
37
39
|
getSampleContainerData,
|
|
38
40
|
hasColorMap,
|
|
@@ -145,7 +147,7 @@ export type UpdateTrigger = {
|
|
|
145
147
|
[key: string]: any;
|
|
146
148
|
};
|
|
147
149
|
export type LayerBounds = [number, number, number, number];
|
|
148
|
-
|
|
150
|
+
|
|
149
151
|
/**
|
|
150
152
|
* Approx. number of points to sample in a large data set
|
|
151
153
|
*/
|
|
@@ -155,8 +157,9 @@ const MAX_SAMPLE_SIZE = 5000;
|
|
|
155
157
|
const defaultDomain: [number, number] = [0, 1];
|
|
156
158
|
const dataFilterExtension = new DataFilterExtension({
|
|
157
159
|
filterSize: MAX_GPU_FILTERS,
|
|
160
|
+
// `countItems` option. It enables the GPU to report the number of objects that pass the filter criteria via the `onFilteredItemsChange` callback.
|
|
158
161
|
// @ts-expect-error not typed
|
|
159
|
-
countItems:
|
|
162
|
+
countItems: getApplicationConfig().useOnFilteredItemsChange ?? false
|
|
160
163
|
});
|
|
161
164
|
|
|
162
165
|
// eslint-disable-next-line @typescript-eslint/no-unused-vars
|
|
@@ -386,6 +389,7 @@ class Layer implements KeplerLayer {
|
|
|
386
389
|
get supportedDatasetTypes(): string[] | null {
|
|
387
390
|
return null;
|
|
388
391
|
}
|
|
392
|
+
|
|
389
393
|
/*
|
|
390
394
|
* Given a dataset, automatically find props to create layer based on it
|
|
391
395
|
* and return the props and previous found layers.
|
|
@@ -564,7 +568,7 @@ class Layer implements KeplerLayer {
|
|
|
564
568
|
// key = 'lat'
|
|
565
569
|
const {pair, fieldPairKey} = this.columnPairs?.[key] || {};
|
|
566
570
|
|
|
567
|
-
if (typeof fieldPairKey === 'string' && !
|
|
571
|
+
if (typeof fieldPairKey === 'string' && !fieldPairs[fieldPairKey]) {
|
|
568
572
|
// do not allow `key: undefined` to creep into the `updatedColumn` object
|
|
569
573
|
return this.config.columns;
|
|
570
574
|
}
|
|
@@ -660,8 +664,15 @@ class Layer implements KeplerLayer {
|
|
|
660
664
|
* When change layer type, try to copy over layer configs as much as possible
|
|
661
665
|
* @param configToCopy - config to copy over
|
|
662
666
|
* @param visConfigSettings - visConfig settings of config to copy
|
|
667
|
+
* @param datasets - current datasets.
|
|
668
|
+
* @param defaultLayerProps - default layer creation configurations for current layer and datasets.
|
|
663
669
|
*/
|
|
664
|
-
assignConfigToLayer(
|
|
670
|
+
assignConfigToLayer(
|
|
671
|
+
configToCopy: LayerBaseConfig & Partial<LayerColorConfig & LayerSizeConfig>,
|
|
672
|
+
visConfigSettings: {[key: string]: ValueOf<LayerVisConfigSettings>},
|
|
673
|
+
datasets?: Datasets,
|
|
674
|
+
defaultLayerProps?: FindDefaultLayerPropsReturnValue | null
|
|
675
|
+
) {
|
|
665
676
|
// don't deep merge visualChannel field
|
|
666
677
|
// don't deep merge color range, reversed: is not a key by default
|
|
667
678
|
const shallowCopy = ['colorRange', 'strokeColorRange'].concat(
|
|
@@ -690,10 +701,40 @@ class Layer implements KeplerLayer {
|
|
|
690
701
|
|
|
691
702
|
// update columNode based on new columns
|
|
692
703
|
if (this.config.columnMode && this.supportedColumnModes) {
|
|
693
|
-
|
|
694
|
-
|
|
695
|
-
|
|
696
|
-
|
|
704
|
+
const dataset = datasets?.[this.config.dataId];
|
|
705
|
+
// try to find a mode with all requied columns from the source config
|
|
706
|
+
let satisfiedColumnMode = getSatisfiedColumnMode(
|
|
707
|
+
this.supportedColumnModes,
|
|
708
|
+
copied.columns,
|
|
709
|
+
dataset?.fields
|
|
710
|
+
);
|
|
711
|
+
|
|
712
|
+
// if no suitable column mode found or no such columMode exists for the layer
|
|
713
|
+
// then try use one of the automatically detected layer configs
|
|
714
|
+
if (!satisfiedColumnMode) {
|
|
715
|
+
const options = [
|
|
716
|
+
...(defaultLayerProps?.props || []),
|
|
717
|
+
...(defaultLayerProps?.altProps || [])
|
|
718
|
+
];
|
|
719
|
+
if (options.length) {
|
|
720
|
+
// Use the first of the default configurations
|
|
721
|
+
const defaultColumnConfig = options[0].columns;
|
|
722
|
+
|
|
723
|
+
satisfiedColumnMode = getSatisfiedColumnMode(
|
|
724
|
+
this.supportedColumnModes,
|
|
725
|
+
defaultColumnConfig,
|
|
726
|
+
dataset?.fields
|
|
727
|
+
);
|
|
728
|
+
|
|
729
|
+
if (satisfiedColumnMode) {
|
|
730
|
+
copied.columns = {
|
|
731
|
+
...copied.columns,
|
|
732
|
+
...defaultColumnConfig
|
|
733
|
+
};
|
|
734
|
+
}
|
|
735
|
+
}
|
|
736
|
+
}
|
|
737
|
+
|
|
697
738
|
copied.columnMode = satisfiedColumnMode?.key || copied.columnMode;
|
|
698
739
|
}
|
|
699
740
|
|
|
@@ -1051,7 +1092,7 @@ class Layer implements KeplerLayer {
|
|
|
1051
1092
|
return this.getVisChannelScale(colorScale, colorDomain, colorRange.colors.map(hexToRgb));
|
|
1052
1093
|
}
|
|
1053
1094
|
|
|
1054
|
-
accessVSFieldValue(
|
|
1095
|
+
accessVSFieldValue(_field, _indexKey) {
|
|
1055
1096
|
return defaultGetFieldValue;
|
|
1056
1097
|
}
|
|
1057
1098
|
/**
|
|
@@ -582,7 +582,7 @@ export default class GeoJsonLayer extends Layer {
|
|
|
582
582
|
this.updateMeta({bounds, fixedRadius, featureTypes});
|
|
583
583
|
this.dataToFeature = [...this.dataToFeature, ...dataToFeature];
|
|
584
584
|
}
|
|
585
|
-
} else if (this.dataToFeature.length === 0) {
|
|
585
|
+
} else if (this.dataToFeature.length === 0 || this.config.columnMode === COLUMN_MODE_TABLE) {
|
|
586
586
|
const getFeature = this.getPositionAccessor(dataContainer);
|
|
587
587
|
|
|
588
588
|
const {dataToFeature, bounds, fixedRadius, featureTypes, centroids} = getGeojsonLayerMeta({
|
|
@@ -612,6 +612,8 @@ export default class GeoJsonLayer extends Layer {
|
|
|
612
612
|
...columnConfig,
|
|
613
613
|
columnMode: COLUMN_MODE_TABLE
|
|
614
614
|
});
|
|
615
|
+
} else {
|
|
616
|
+
return this;
|
|
615
617
|
}
|
|
616
618
|
}
|
|
617
619
|
|
|
@@ -1,6 +1,7 @@
|
|
|
1
1
|
// SPDX-License-Identifier: MIT
|
|
2
2
|
// Copyright contributors to the kepler.gl project
|
|
3
3
|
|
|
4
|
+
import {Buffer} from 'buffer';
|
|
4
5
|
import {Feature, Position, BBox} from 'geojson';
|
|
5
6
|
import normalize from '@mapbox/geojson-normalize';
|
|
6
7
|
import bbox from '@turf/bbox';
|
|
@@ -270,8 +271,10 @@ export function getGeojsonBounds(features: GeojsonDataMaps = []): BBox | null {
|
|
|
270
271
|
const maxCount = 10000;
|
|
271
272
|
const samples = features.length > maxCount ? getSampleData(features, maxCount) : features;
|
|
272
273
|
|
|
274
|
+
const validSingleGeometry = geom => geom.coordinates && geom.coordinates.length;
|
|
275
|
+
const validGeometryCollection = geom => geom.geometries && geom.geometries.length && geom.geometries.every(validSingleGeometry);
|
|
273
276
|
const nonEmpty = samples.filter(
|
|
274
|
-
d => d && d.geometry && d.geometry
|
|
277
|
+
d => d && d.geometry && (validSingleGeometry(d.geometry) || validGeometryCollection(d.geometry))
|
|
275
278
|
);
|
|
276
279
|
|
|
277
280
|
try {
|
|
@@ -2,7 +2,7 @@
|
|
|
2
2
|
// Copyright contributors to the kepler.gl project
|
|
3
3
|
|
|
4
4
|
import {createSelector} from 'reselect';
|
|
5
|
-
import {CHANNEL_SCALES,
|
|
5
|
+
import {CHANNEL_SCALES, ALL_FIELD_TYPES} from '@kepler.gl/constants';
|
|
6
6
|
import MapboxGLLayer, {MapboxLayerGLConfig} from '../mapboxgl-layer';
|
|
7
7
|
import HeatmapLayerIcon from './heatmap-layer-icon';
|
|
8
8
|
import {LayerBaseConfigPartial, LayerWeightConfig, VisualChannels} from '../base-layer';
|
|
@@ -17,6 +17,8 @@ import {
|
|
|
17
17
|
import {hexToRgb, DataContainerInterface} from '@kepler.gl/utils';
|
|
18
18
|
import {KeplerTable} from '@kepler.gl/table';
|
|
19
19
|
|
|
20
|
+
import {getGeoArrowPointLayerProps, FindDefaultLayerPropsReturnValue} from '../layer-utils';
|
|
21
|
+
|
|
20
22
|
export type HeatmapLayerVisConfigSettings = {
|
|
21
23
|
opacity: VisConfigNumber;
|
|
22
24
|
colorRange: VisConfigColorRange;
|
|
@@ -110,20 +112,14 @@ const DEFAULT_COLUMN_MODE = COLUMN_MODE_POINTS;
|
|
|
110
112
|
* ]
|
|
111
113
|
*/
|
|
112
114
|
const heatmapDensity = (colorRange: ColorRange): (string | number)[] => {
|
|
113
|
-
const scaleFunction = SCALE_FUNC.quantize;
|
|
114
|
-
|
|
115
115
|
const colors: HexColor[] = ['#000000', ...colorRange.colors];
|
|
116
116
|
|
|
117
|
-
const
|
|
117
|
+
const colorDensity: (string | number)[] = [];
|
|
118
|
+
colors.forEach((color, index) => {
|
|
119
|
+
colorDensity.push(index / colors.length);
|
|
120
|
+
colorDensity.push(`rgb(${hexToRgb(color).join(',')})`);
|
|
121
|
+
});
|
|
118
122
|
|
|
119
|
-
const colorDensity = scale.range().reduce((bands: (string | number)[], level) => {
|
|
120
|
-
const invert = scale.invertExtent(level);
|
|
121
|
-
return [
|
|
122
|
-
...bands,
|
|
123
|
-
invert[0], // first value in the range
|
|
124
|
-
`rgb(${hexToRgb(level).join(',')})` // color
|
|
125
|
-
];
|
|
126
|
-
}, []);
|
|
127
123
|
colorDensity[1] = 'rgba(0,0,0,0)';
|
|
128
124
|
return colorDensity;
|
|
129
125
|
};
|
|
@@ -163,6 +159,15 @@ class HeatmapLayer extends MapboxGLLayer {
|
|
|
163
159
|
return super.hasAllColumns();
|
|
164
160
|
}
|
|
165
161
|
|
|
162
|
+
static findDefaultLayerProps(dataset: KeplerTable): FindDefaultLayerPropsReturnValue {
|
|
163
|
+
const altProps = getGeoArrowPointLayerProps(dataset);
|
|
164
|
+
|
|
165
|
+
return {
|
|
166
|
+
props: [],
|
|
167
|
+
altProps
|
|
168
|
+
};
|
|
169
|
+
}
|
|
170
|
+
|
|
166
171
|
get visualChannels(): VisualChannels {
|
|
167
172
|
return {
|
|
168
173
|
// @ts-expect-error
|
|
@@ -10,7 +10,7 @@ import IconLayerIcon from './icon-layer-icon';
|
|
|
10
10
|
import {ICON_FIELDS, KEPLER_UNFOLDED_BUCKET} from '@kepler.gl/constants';
|
|
11
11
|
import IconInfoModalFactory from './icon-info-modal';
|
|
12
12
|
import Layer, {LayerBaseConfig, LayerBaseConfigPartial} from '../base-layer';
|
|
13
|
-
import {assignPointPairToLayerColumn} from '../layer-utils';
|
|
13
|
+
import {assignPointPairToLayerColumn, FindDefaultLayerPropsReturnValue} from '../layer-utils';
|
|
14
14
|
import {isTest} from '@kepler.gl/utils';
|
|
15
15
|
import {getTextOffsetByRadius, formatTextLabelData} from '../layer-text-label';
|
|
16
16
|
import {default as KeplerTable} from '@kepler.gl/table';
|
|
@@ -197,6 +197,10 @@ export default class IconLayer extends Layer {
|
|
|
197
197
|
};
|
|
198
198
|
}
|
|
199
199
|
|
|
200
|
+
getZoomFactor({zoom, zoomOffset = 0}: {zoom: number, zoomOffset?: number}) {
|
|
201
|
+
return Math.pow(2, 14 - zoom + zoomOffset);
|
|
202
|
+
}
|
|
203
|
+
|
|
200
204
|
getSvgIcons() {
|
|
201
205
|
const fetchConfig = {
|
|
202
206
|
method: 'GET',
|
|
@@ -225,8 +229,8 @@ export default class IconLayer extends Layer {
|
|
|
225
229
|
this._layerInfoModal = IconInfoModalFactory(svgIcons);
|
|
226
230
|
}
|
|
227
231
|
|
|
228
|
-
static findDefaultLayerProps({fieldPairs = [], fields = []}: KeplerTable) {
|
|
229
|
-
const notFound = {props: []};
|
|
232
|
+
static findDefaultLayerProps({fieldPairs = [], fields = []}: KeplerTable): FindDefaultLayerPropsReturnValue {
|
|
233
|
+
const notFound: FindDefaultLayerPropsReturnValue = {props: []};
|
|
230
234
|
if (!fieldPairs.length || !fields.length) {
|
|
231
235
|
return notFound;
|
|
232
236
|
}
|