kepler.gl 3.2.1 → 3.2.2
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/dist/src/utils/src/arrow-data-container.d.ts +3 -2
- package/dist/src/utils/src/data-container-utils.d.ts +2 -0
- package/package.json +2 -2
- package/src/actions/package.json +8 -8
- package/src/ai-assistant/package.json +7 -7
- package/src/cloud-providers/package.json +2 -2
- package/src/common-utils/package.json +3 -3
- package/src/components/package.json +15 -15
- package/src/constants/dist/default-settings.js +1 -1
- package/src/constants/node_modules/.cache/terser-webpack-plugin/content-v2/sha512/1b/11/43d4199b6142de0b88c672f2b036c5aa4ca836cf35977bbafcdb1962b91e94f8336655a57f0742571ceb13fc69ef4ba0e3cb91dc9a8d61ef041c6eb15e7a +1 -0
- package/src/constants/node_modules/.cache/terser-webpack-plugin/index-v5/ac/e2/e903ec95ada0b0075fdcfb6133e2e75c9b3b0504a29ca665704aaed90b2b +2 -0
- package/src/constants/package.json +2 -2
- package/src/constants/umd/keplergl.min.js +1 -1
- package/src/deckgl-arrow-layers/package.json +2 -2
- package/src/deckgl-layers/package.json +4 -4
- package/src/duckdb/package.json +6 -6
- package/src/effects/package.json +5 -5
- package/src/layers/dist/geojson-layer/geojson-utils.js +23 -5
- package/src/layers/package.json +9 -9
- package/src/layers/src/geojson-layer/geojson-utils.ts +22 -0
- package/src/localization/package.json +1 -1
- package/src/processors/package.json +7 -7
- package/src/reducers/package.json +16 -16
- package/src/schemas/package.json +7 -7
- package/src/styles/node_modules/.cache/terser-webpack-plugin/content-v2/sha512/53/93/f8e389b6450ee0636bf336363d2d6865d8a1fe2445c15cc1e36c651e1ddf448358eb74e894f4bf6fc48ef881dc64cc221c48b133ecf0e02132f2c5fbfe11 +1 -0
- package/src/styles/node_modules/.cache/terser-webpack-plugin/index-v5/2e/45/ed6e0c1beb8bca4698a47b5feda8789a22d96978bc4839949bd26e827454 +2 -0
- package/src/styles/package.json +2 -2
- package/src/styles/umd/keplergl.min.js +1 -1
- package/src/table/dist/dataset-utils.js +18 -7
- package/src/table/dist/kepler-table.js +2 -1
- package/src/table/package.json +5 -5
- package/src/table/src/dataset-utils.ts +7 -2
- package/src/table/src/kepler-table.ts +1 -0
- package/src/tasks/package.json +2 -2
- package/src/types/actions.d.ts +1 -0
- package/src/types/package.json +1 -1
- package/src/utils/dist/arrow-data-container.d.ts +3 -2
- package/src/utils/dist/arrow-data-container.js +3 -3
- package/src/utils/dist/data-container-utils.d.ts +2 -0
- package/src/utils/dist/data-container-utils.js +3 -2
- package/src/utils/package.json +4 -4
- package/src/utils/src/arrow-data-container.ts +9 -7
- package/src/utils/src/data-container-utils.ts +3 -1
- package/umd/keplergl.min.js +642 -642
package/src/duckdb/package.json
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@kepler.gl/duckdb",
|
|
3
3
|
"author": "Shan He <heshan0131@gmail.com>",
|
|
4
|
-
"version": "3.2.
|
|
4
|
+
"version": "3.2.2",
|
|
5
5
|
"description": "DuckDB plugin for Kepler.gl",
|
|
6
6
|
"license": "MIT",
|
|
7
7
|
"main": "dist/index.js",
|
|
@@ -26,11 +26,11 @@
|
|
|
26
26
|
],
|
|
27
27
|
"dependencies": {
|
|
28
28
|
"@duckdb/duckdb-wasm": "^1.28.0",
|
|
29
|
-
"@kepler.gl/common-utils": "3.2.
|
|
30
|
-
"@kepler.gl/constants": "3.2.
|
|
31
|
-
"@kepler.gl/processors": "3.2.
|
|
32
|
-
"@kepler.gl/table": "3.2.
|
|
33
|
-
"@kepler.gl/types": "3.2.
|
|
29
|
+
"@kepler.gl/common-utils": "3.2.2",
|
|
30
|
+
"@kepler.gl/constants": "3.2.2",
|
|
31
|
+
"@kepler.gl/processors": "3.2.2",
|
|
32
|
+
"@kepler.gl/table": "3.2.2",
|
|
33
|
+
"@kepler.gl/types": "3.2.2",
|
|
34
34
|
"@monaco-editor/react": "^4.6.0",
|
|
35
35
|
"@radix-ui/react-collapsible": "^1.1.0",
|
|
36
36
|
"apache-arrow": ">=15.0.0",
|
package/src/effects/package.json
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@kepler.gl/effects",
|
|
3
3
|
"author": "Shan He <shan@uber.com>",
|
|
4
|
-
"version": "3.2.
|
|
4
|
+
"version": "3.2.2",
|
|
5
5
|
"description": "kepler.gl viaual effects",
|
|
6
6
|
"license": "MIT",
|
|
7
7
|
"main": "dist/index.js",
|
|
@@ -31,10 +31,10 @@
|
|
|
31
31
|
],
|
|
32
32
|
"dependencies": {
|
|
33
33
|
"@deck.gl/core": "^8.9.27",
|
|
34
|
-
"@kepler.gl/common-utils": "3.2.
|
|
35
|
-
"@kepler.gl/constants": "3.2.
|
|
36
|
-
"@kepler.gl/types": "3.2.
|
|
37
|
-
"@kepler.gl/utils": "3.2.
|
|
34
|
+
"@kepler.gl/common-utils": "3.2.2",
|
|
35
|
+
"@kepler.gl/constants": "3.2.2",
|
|
36
|
+
"@kepler.gl/types": "3.2.2",
|
|
37
|
+
"@kepler.gl/utils": "3.2.2",
|
|
38
38
|
"@luma.gl/core": "^8.5.20",
|
|
39
39
|
"@luma.gl/shadertools": "^8.5.20",
|
|
40
40
|
"moment-timezone": "^0.5.35",
|
|
@@ -18,8 +18,8 @@ exports.groupColumnsAsGeoJson = groupColumnsAsGeoJson;
|
|
|
18
18
|
exports.parseGeoJsonRawFeature = parseGeoJsonRawFeature;
|
|
19
19
|
var _slicedToArray2 = _interopRequireDefault(require("@babel/runtime/helpers/slicedToArray"));
|
|
20
20
|
var _toConsumableArray2 = _interopRequireDefault(require("@babel/runtime/helpers/toConsumableArray"));
|
|
21
|
-
var _defineProperty2 = _interopRequireDefault(require("@babel/runtime/helpers/defineProperty"));
|
|
22
21
|
var _typeof2 = _interopRequireDefault(require("@babel/runtime/helpers/typeof"));
|
|
22
|
+
var _defineProperty2 = _interopRequireDefault(require("@babel/runtime/helpers/defineProperty"));
|
|
23
23
|
var _buffer = require("buffer");
|
|
24
24
|
var _geojsonNormalize = _interopRequireDefault(require("@mapbox/geojson-normalize"));
|
|
25
25
|
var _bbox = _interopRequireDefault(require("@turf/bbox"));
|
|
@@ -63,17 +63,35 @@ function fieldIsGeoArrow(geoField) {
|
|
|
63
63
|
}
|
|
64
64
|
function parseGeoJsonRawFeature(rawFeature) {
|
|
65
65
|
var properties = null; // help ensure that properties is present on the returned geojson feature
|
|
66
|
+
// Support WKB geometry provided as binary (e.g., from Parquet/GeoParquet)
|
|
67
|
+
if (rawFeature instanceof Uint8Array || rawFeature instanceof ArrayBuffer) {
|
|
68
|
+
try {
|
|
69
|
+
var binaryInput = rawFeature instanceof ArrayBuffer ? rawFeature : rawFeature.buffer.slice(rawFeature.byteOffset, rawFeature.byteOffset + rawFeature.byteLength);
|
|
70
|
+
var binaryGeo = (0, _core.parseSync)(binaryInput, _wkt.WKBLoader);
|
|
71
|
+
// @ts-expect-error loaders.gl binary type to GeoJSON geometry
|
|
72
|
+
var parsedGeo = (0, _gis.binaryToGeometry)(binaryGeo);
|
|
73
|
+
var normalized = (0, _geojsonNormalize["default"])(parsedGeo);
|
|
74
|
+
if (!normalized || !Array.isArray(normalized.features) || !normalized.features.length) {
|
|
75
|
+
return null;
|
|
76
|
+
}
|
|
77
|
+
return _objectSpread({
|
|
78
|
+
properties: properties
|
|
79
|
+
}, normalized.features[0]);
|
|
80
|
+
} catch (e) {
|
|
81
|
+
return null;
|
|
82
|
+
}
|
|
83
|
+
}
|
|
66
84
|
if ((0, _typeof2["default"])(rawFeature) === 'object') {
|
|
67
85
|
// Support GeoJson feature as object
|
|
68
86
|
// probably need to normalize it as well
|
|
69
|
-
var
|
|
70
|
-
if (!
|
|
87
|
+
var _normalized = (0, _geojsonNormalize["default"])(rawFeature);
|
|
88
|
+
if (!_normalized || !Array.isArray(_normalized.features)) {
|
|
71
89
|
// fail to normalize GeoJson
|
|
72
90
|
return null;
|
|
73
91
|
}
|
|
74
92
|
return _objectSpread({
|
|
75
93
|
properties: properties
|
|
76
|
-
},
|
|
94
|
+
}, _normalized.features[0]);
|
|
77
95
|
} else if (typeof rawFeature === 'string') {
|
|
78
96
|
var parsedGeometry = parseGeometryFromString(rawFeature);
|
|
79
97
|
if (!parsedGeometry) return null;
|
|
@@ -425,4 +443,4 @@ function applyFiltersToTableColumns(dataset, dataToFeature) {
|
|
|
425
443
|
}
|
|
426
444
|
return filteredFeatures;
|
|
427
445
|
}
|
|
428
|
-
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJfYnVmZmVyIiwicmVxdWlyZSIsIl9nZW9qc29uTm9ybWFsaXplIiwiX2ludGVyb3BSZXF1aXJlRGVmYXVsdCIsIl9iYm94IiwiX2QzQXJyYXkiLCJfY2VudGVyIiwiX2NvcmUiLCJfd2t0IiwiX2dpcyIsIl91dGlscyIsIl9jb25zdGFudHMiLCJfbGF5ZXJVdGlscyIsIl9jcmVhdGVGb3JPZkl0ZXJhdG9ySGVscGVyIiwiciIsImUiLCJ0IiwiU3ltYm9sIiwiaXRlcmF0b3IiLCJBcnJheSIsImlzQXJyYXkiLCJfdW5zdXBwb3J0ZWRJdGVyYWJsZVRvQXJyYXkiLCJsZW5ndGgiLCJfbiIsIkYiLCJzIiwibiIsImRvbmUiLCJ2YWx1ZSIsImYiLCJUeXBlRXJyb3IiLCJvIiwiYSIsInUiLCJjYWxsIiwibmV4dCIsIl9hcnJheUxpa2VUb0FycmF5IiwidG9TdHJpbmciLCJzbGljZSIsImNvbnN0cnVjdG9yIiwibmFtZSIsImZyb20iLCJ0ZXN0Iiwib3duS2V5cyIsIk9iamVjdCIsImtleXMiLCJnZXRPd25Qcm9wZXJ0eVN5bWJvbHMiLCJmaWx0ZXIiLCJnZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IiLCJlbnVtZXJhYmxlIiwicHVzaCIsImFwcGx5IiwiX29iamVjdFNwcmVhZCIsImFyZ3VtZW50cyIsImZvckVhY2giLCJfZGVmaW5lUHJvcGVydHkyIiwiZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9ycyIsImRlZmluZVByb3BlcnRpZXMiLCJkZWZpbmVQcm9wZXJ0eSIsIkNPTFVNTl9NT0RFX0dFT0pTT04iLCJleHBvcnRzIiwiRmVhdHVyZVR5cGVzIiwiZmllbGRJc0dlb0Fycm93IiwiZ2VvRmllbGQiLCJfZ2VvRmllbGQkbWV0YWRhdGEiLCJCb29sZWFuIiwibWV0YWRhdGEiLCJnZXQiLCJwYXJzZUdlb0pzb25SYXdGZWF0dXJlIiwicmF3RmVhdHVyZSIsInByb3BlcnRpZXMiLCJfdHlwZW9mMiIsIm5vcm1hbGl6ZWQiLCJub3JtYWxpemUiLCJmZWF0dXJlcyIsInBhcnNlZEdlb21ldHJ5IiwicGFyc2VHZW9tZXRyeUZyb21TdHJpbmciLCJ0eXBlIiwiZ2VvbWV0cnkiLCJjb29yZGluYXRlcyIsIm1hcCIsInB0cyIsImdldEdlb2pzb25MYXllck1ldGEiLCJfcmVmIiwiZGF0YUNvbnRhaW5lciIsImdldEZlYXR1cmUiLCJjb25maWciLCJkYXRhVG9GZWF0dXJlIiwiY29sdW1uTW9kZSIsImdldEdlb2pzb25EYXRhTWFwcyIsImdyb3VwQ29sdW1uc0FzR2VvSnNvbiIsImNvbHVtbnMiLCJib3VuZHMiLCJnZXRHZW9qc29uQm91bmRzIiwiZml4ZWRSYWRpdXMiLCJmaW5kIiwiZCIsIl9kJHByb3BlcnRpZXMiLCJyYWRpdXMiLCJmZWF0dXJlVHlwZXMiLCJnZXRHZW9qc29uRmVhdHVyZVR5cGVzIiwibWVhbkNlbnRlcnMiLCJpIiwiZmVhdHVyZSIsImNlbnQiLCJjZW50ZXIiLCJjZW50cm9pZHMiLCJhY2NlcHRhYmxlVHlwZXMiLCJpbmRleCIsIm51bVJvd3MiLCJpbmNsdWRlcyIsImNsZWFuZWQiLCJnZXRHZW9qc29uUG9pbnREYXRhTWFwcyIsInJvd0FzQXJyYXkiLCJnZW9tZXRyaWVzIiwicmVkdWNlIiwiYWNjdSIsIl90b0NvbnN1bWFibGVBcnJheTIiLCJnZW9TdHJpbmciLCJwYXJzZWRHZW8iLCJKU09OIiwicGFyc2UiLCJwYXJzZVN5bmMiLCJXS1RMb2FkZXIiLCJidWZmZXIiLCJCdWZmZXIiLCJiaW5hcnlHZW8iLCJXS0JMb2FkZXIiLCJiaW5hcnlUb0dlb21ldHJ5IiwidW5kZWZpbmVkIiwibWF4Q291bnQiLCJzYW1wbGVzIiwiZ2V0U2FtcGxlRGF0YSIsInZhbGlkU2luZ2xlR2VvbWV0cnkiLCJnZW9tIiwidmFsaWRHZW9tZXRyeUNvbGxlY3Rpb24iLCJldmVyeSIsIm5vbkVtcHR5IiwiYmJveCIsImZlYXR1cmVUb0RlY2tHbEdlb1R5cGUiLCJQb2ludCIsIk11bHRpUG9pbnQiLCJMaW5lU3RyaW5nIiwiTXVsdGlMaW5lU3RyaW5nIiwiUG9seWdvbiIsIk11bHRpUG9seWdvbiIsImFsbEZlYXR1cmVzIiwiZ2VvVHlwZSIsInNvcnRCeUNvbHVtbiIsImdyb3VwZWRCeUlkIiwic29ydEJ5RmllbGRJZHgiLCJmaWVsZElkeCIsInNvcnRCeVJlcXVpcmVkIiwib3B0aW9uYWwiLCJkYXR1bSIsImlkIiwibGF0IiwibG9uIiwibG5nIiwiYWx0aXR1ZGUiLCJzb3J0QnkiLCJjb29yZHMiLCJkYXR1bUluZGV4IiwiTnVtYmVyIiwiaXNGaW5pdGUiLCJyZXN1bHQiLCJlbnRyaWVzIiwiX3JlZjIiLCJfcmVmMyIsIl9zbGljZWRUb0FycmF5MiIsIl8iLCJpdGVtcyIsInNvcnQiLCJiIiwiYXNjZW5kaW5nIiwidmFsdWVzIiwiaXRlbSIsImRldGVjdFRhYmxlQ29sdW1ucyIsImRhdGFzZXQiLCJsYXllckNvbHVtbnMiLCJmaWVsZHMiLCJmaWVsZFBhaXJzIiwiZmluZEluZGV4IiwiQUxMX0ZJRUxEX1RZUEVTIiwidGltZXN0YW1wIiwiaWRGaWVsZElkeCIsIl9mJG5hbWUiLCJ0b0xvd2VyQ2FzZSIsIm1hdGNoIiwicG9pbnRDb2x1bW5zIiwiYXNzaWduUG9pbnRQYWlyVG9MYXllckNvbHVtbiIsImNvbCIsIl9wb2ludENvbHVtbnMkY29sIiwiZ2VvanNvbiIsImxhYmVsIiwiZGVmYXVsdE5hbWUiLCJhcHBseUZpbHRlcnNUb1RhYmxlQ29sdW1ucyIsImZpbHRlcmVkSW5kZXgiLCJmaWx0ZXJlZEluZGV4U2V0IiwiU2V0IiwiZmlsdGVyZWRGZWF0dXJlcyIsIl9pdGVyYXRvciIsIl9zdGVwIiwiZmlsdGVyZWRDb29yZHMiLCJjIiwiaGFzIiwiZXJyIl0sInNvdXJjZXMiOlsiLi4vLi4vc3JjL2dlb2pzb24tbGF5ZXIvZ2VvanNvbi11dGlscy50cyJdLCJzb3VyY2VzQ29udGVudCI6WyIvLyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogTUlUXG4vLyBDb3B5cmlnaHQgY29udHJpYnV0b3JzIHRvIHRoZSBrZXBsZXIuZ2wgcHJvamVjdFxuXG5pbXBvcnQge0J1ZmZlcn0gZnJvbSAnYnVmZmVyJztcbmltcG9ydCB7RmVhdHVyZSwgUG9zaXRpb24sIEJCb3h9IGZyb20gJ2dlb2pzb24nO1xuaW1wb3J0IG5vcm1hbGl6ZSBmcm9tICdAbWFwYm94L2dlb2pzb24tbm9ybWFsaXplJztcbmltcG9ydCBiYm94IGZyb20gJ0B0dXJmL2Jib3gnO1xuaW1wb3J0IHthc2NlbmRpbmd9IGZyb20gJ2QzLWFycmF5JztcbmltcG9ydCBjZW50ZXIgZnJvbSAnQHR1cmYvY2VudGVyJztcbmltcG9ydCB7QWxsR2VvSlNPTn0gZnJvbSAnQHR1cmYvaGVscGVycyc7XG5pbXBvcnQge3BhcnNlU3luY30gZnJvbSAnQGxvYWRlcnMuZ2wvY29yZSc7XG5pbXBvcnQge1dLQkxvYWRlciwgV0tUTG9hZGVyfSBmcm9tICdAbG9hZGVycy5nbC93a3QnO1xuaW1wb3J0IHtiaW5hcnlUb0dlb21ldHJ5fSBmcm9tICdAbG9hZGVycy5nbC9naXMnO1xuaW1wb3J0IHtCaW5hcnlGZWF0dXJlQ29sbGVjdGlvbn0gZnJvbSAnQGxvYWRlcnMuZ2wvc2NoZW1hJztcbmltcG9ydCB7RGF0YUNvbnRhaW5lckludGVyZmFjZSwgZ2V0U2FtcGxlRGF0YX0gZnJvbSAnQGtlcGxlci5nbC91dGlscyc7XG5pbXBvcnQge0FMTF9GSUVMRF9UWVBFU30gZnJvbSAnQGtlcGxlci5nbC9jb25zdGFudHMnO1xuaW1wb3J0IHtMYXllckNvbHVtbnMsIFByb3RvRGF0YXNldEZpZWxkfSBmcm9tICdAa2VwbGVyLmdsL3R5cGVzJztcbmltcG9ydCB7S2VwbGVyVGFibGV9IGZyb20gJ0BrZXBsZXIuZ2wvdGFibGUnO1xuXG5pbXBvcnQge0dlb2pzb25MYXllck1ldGFQcm9wcywgYXNzaWduUG9pbnRQYWlyVG9MYXllckNvbHVtbn0gZnJvbSAnLi4vbGF5ZXItdXRpbHMnO1xuaW1wb3J0IHtMYXllckJhc2VDb25maWd9IGZyb20gJy4uL2Jhc2UtbGF5ZXInO1xuXG5leHBvcnQgdHlwZSBHZXRGZWF0dXJlID0gKGQ6IGFueSkgPT4gRmVhdHVyZTtcbmV4cG9ydCB0eXBlIEdlb2pzb25EYXRhTWFwcyA9IChGZWF0dXJlIHwgQmluYXJ5RmVhdHVyZUNvbGxlY3Rpb24gfCBudWxsKVtdO1xuZXhwb3J0IHR5cGUgR2VvanNvblBvaW50RGF0YU1hcHMgPSAobnVtYmVyW10gfCBudW1iZXJbXVtdIHwgbnVsbClbXTtcblxuZXhwb3J0IGNvbnN0IENPTFVNTl9NT0RFX0dFT0pTT04gPSAnZ2VvanNvbic7XG5cbi8qIGVzbGludC1kaXNhYmxlICovXG4vLyBUT0RPOiBSZS1lbmFibGUgZXNsaW50IHdoZW4gd2UgdXBncmFkZSB0byBoYW5kbGUgZW51bXMgYW5kIHR5cGUgbWFwc1xuZXhwb3J0IGVudW0gRmVhdHVyZVR5cGVzIHtcbiAgUG9pbnQgPSAnUG9pbnQnLFxuICBNdWx0aVBvaW50ID0gJ011bHRpUG9pbnQnLFxuICBMaW5lU3RyaW5nID0gJ0xpbmVTdHJpbmcnLFxuICBNdWx0aUxpbmVTdHJpbmcgPSAnTXVsdGlMaW5lU3RyaW5nJyxcbiAgUG9seWdvbiA9ICdQb2x5Z29uJyxcbiAgTXVsdGlQb2x5Z29uID0gJ011bHRpUG9seWdvbidcbn1cblxuLy8gQHRzLWV4cGVjdC1lcnJvciByZXR1cm4gdHlwZSBvZiBnZXRHZW9qc29uRmVhdHVyZVR5cGVzID9cbnR5cGUgRmVhdHVyZVR5cGVNYXAgPSB7XG4gIFtrZXkgaW4gRmVhdHVyZVR5cGVzXTogYm9vbGVhbjtcbn07XG5cbi8qIGVzbGludC1lbmFibGUgKi9cblxuLyoqXG4gKiBSZXR1cm5zIHRydWUgaWYgdGhlIGZpZWxkIGhhcyBnZW9hcnJvdyBleHRlbnNpb24uXG4gKiBAcGFyYW0gZ2VvRmllbGQgQSBmaWVsZCB0byB0ZXN0LlxuICogQHJldHVybnNcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGZpZWxkSXNHZW9BcnJvdyhnZW9GaWVsZD86IFByb3RvRGF0YXNldEZpZWxkIHwgbnVsbCk6IGJvb2xlYW4ge1xuICByZXR1cm4gQm9vbGVhbihnZW9GaWVsZD8ubWV0YWRhdGE/LmdldCgnQVJST1c6ZXh0ZW5zaW9uOm5hbWUnKSk7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBwYXJzZUdlb0pzb25SYXdGZWF0dXJlKHJhd0ZlYXR1cmU6IHVua25vd24pOiBGZWF0dXJlIHwgbnVsbCB7XG4gIGNvbnN0IHByb3BlcnRpZXMgPSBudWxsOyAvLyBoZWxwIGVuc3VyZSB0aGF0IHByb3BlcnRpZXMgaXMgcHJlc2VudCBvbiB0aGUgcmV0dXJuZWQgZ2VvanNvbiBmZWF0dXJlXG4gIGlmICh0eXBlb2YgcmF3RmVhdHVyZSA9PT0gJ29iamVjdCcpIHtcbiAgICAvLyBTdXBwb3J0IEdlb0pzb24gZmVhdHVyZSBhcyBvYmplY3RcbiAgICAvLyBwcm9iYWJseSBuZWVkIHRvIG5vcm1hbGl6ZSBpdCBhcyB3ZWxsXG4gICAgY29uc3Qgbm9ybWFsaXplZCA9IG5vcm1hbGl6ZShyYXdGZWF0dXJlKTtcbiAgICBpZiAoIW5vcm1hbGl6ZWQgfHwgIUFycmF5LmlzQXJyYXkobm9ybWFsaXplZC5mZWF0dXJlcykpIHtcbiAgICAgIC8vIGZhaWwgdG8gbm9ybWFsaXplIEdlb0pzb25cbiAgICAgIHJldHVybiBudWxsO1xuICAgIH1cblxuICAgIHJldHVybiB7cHJvcGVydGllcywgLi4ubm9ybWFsaXplZC5mZWF0dXJlc1swXX07XG4gIH0gZWxzZSBpZiAodHlwZW9mIHJhd0ZlYXR1cmUgPT09ICdzdHJpbmcnKSB7XG4gICAgY29uc3QgcGFyc2VkR2VvbWV0cnkgPSBwYXJzZUdlb21ldHJ5RnJvbVN0cmluZyhyYXdGZWF0dXJlKTtcbiAgICBpZiAoIXBhcnNlZEdlb21ldHJ5KSByZXR1cm4gbnVsbDtcbiAgICAvLyBAdHMtZXhwZWN0LWVycm9yIHZlcmlmeSB3aGV0aGVyIHBhcnNlZEdlb21ldHJ5IGFsd2F5cyBjb250YWlucyBwcm9wZXJ0aWVzXG4gICAgcmV0dXJuIHtwcm9wZXJ0aWVzLCAuLi5wYXJzZWRHZW9tZXRyeX07XG4gIH0gZWxzZSBpZiAoQXJyYXkuaXNBcnJheShyYXdGZWF0dXJlKSkge1xuICAgIC8vIFN1cHBvcnQgR2VvSnNvbiAgTGluZVN0cmluZyBhcyBhbiBhcnJheSBvZiBwb2ludHNcbiAgICByZXR1cm4ge1xuICAgICAgdHlwZTogJ0ZlYXR1cmUnLFxuICAgICAgZ2VvbWV0cnk6IHtcbiAgICAgICAgLy8gd2h5IGRvIHdlIG5lZWQgdG8gZmxpcCBpdC4uLlxuICAgICAgICBjb29yZGluYXRlczogcmF3RmVhdHVyZS5tYXAocHRzID0+IFtwdHNbMV0sIHB0c1swXV0pLFxuICAgICAgICB0eXBlOiAnTGluZVN0cmluZydcbiAgICAgIH0sXG4gICAgICBwcm9wZXJ0aWVzXG4gICAgfTtcbiAgfVxuXG4gIHJldHVybiBudWxsO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gZ2V0R2VvanNvbkxheWVyTWV0YSh7XG4gIGRhdGFDb250YWluZXIsXG4gIGdldEZlYXR1cmUsXG4gIGNvbmZpZ1xufToge1xuICBkYXRhQ29udGFpbmVyOiBEYXRhQ29udGFpbmVySW50ZXJmYWNlO1xuICBnZXRGZWF0dXJlOiBHZXRGZWF0dXJlO1xuICBjb25maWc6IExheWVyQmFzZUNvbmZpZztcbn0pOiBHZW9qc29uTGF5ZXJNZXRhUHJvcHMge1xuICBjb25zdCBkYXRhVG9GZWF0dXJlID1cbiAgICBjb25maWcuY29sdW1uTW9kZSA9PT0gQ09MVU1OX01PREVfR0VPSlNPTlxuICAgICAgPyBnZXRHZW9qc29uRGF0YU1hcHMoZGF0YUNvbnRhaW5lciwgZ2V0RmVhdHVyZSlcbiAgICAgIDogLy8gQ09MVU1OX01PREVfVEFCTEVcbiAgICAgICAgZ3JvdXBDb2x1bW5zQXNHZW9Kc29uKGRhdGFDb250YWluZXIsIGNvbmZpZy5jb2x1bW5zLCAnc29ydEJ5Jyk7XG5cbiAgLy8gZ2V0IGJvdW5kcyBmcm9tIGZlYXR1cmVzXG4gIGNvbnN0IGJvdW5kcyA9IGdldEdlb2pzb25Cb3VuZHMoZGF0YVRvRmVhdHVyZSk7XG4gIC8vIGlmIGFueSBvZiB0aGUgZmVhdHVyZSBoYXMgcHJvcGVydGllcy5yYWRpdXMgc2V0IHRvIGJlIHRydWVcbiAgY29uc3QgZml4ZWRSYWRpdXMgPSBCb29sZWFuKFxuICAgIGRhdGFUb0ZlYXR1cmUuZmluZChkID0+IGQgJiYgJ3Byb3BlcnRpZXMnIGluIGQgJiYgZC5wcm9wZXJ0aWVzPy5yYWRpdXMpXG4gICk7XG5cbiAgLy8ga2VlcCBhIHJlY29yZCBvZiB3aGF0IHR5cGUgb2YgZ2VvbWV0cnkgdGhlIGNvbGxlY3Rpb24gaGFzXG4gIGNvbnN0IGZlYXR1cmVUeXBlcyA9IGdldEdlb2pzb25GZWF0dXJlVHlwZXMoZGF0YVRvRmVhdHVyZSk7XG5cbiAgY29uc3QgbWVhbkNlbnRlcnM6IEFycmF5PG51bWJlcltdIHwgbnVsbD4gPSBbXTtcbiAgZm9yIChsZXQgaSA9IDA7IGkgPCBkYXRhVG9GZWF0dXJlLmxlbmd0aDsgaSsrKSB7XG4gICAgY29uc3QgZmVhdHVyZSA9IGRhdGFUb0ZlYXR1cmVbaV07XG4gICAgaWYgKGZlYXR1cmUpIHtcbiAgICAgIHRyeSB7XG4gICAgICAgIC8vIFRPRE86IHVzZSBsaW5lIGludGVycG9sYXRlIHRvIGdldCBjZW50ZXIgb2YgbGluZSBmb3IgTGluZVN0cmluZ1xuICAgICAgICBjb25zdCBjZW50ID0gY2VudGVyKGZlYXR1cmUgYXMgQWxsR2VvSlNPTik7XG4gICAgICAgIG1lYW5DZW50ZXJzLnB1c2goY2VudC5nZW9tZXRyeS5jb29yZGluYXRlcyk7XG4gICAgICB9IGNhdGNoIChlKSB7XG4gICAgICAgIG1lYW5DZW50ZXJzLnB1c2gobnVsbCk7XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgcmV0dXJuIHtcbiAgICBkYXRhVG9GZWF0dXJlLFxuICAgIGJvdW5kcyxcbiAgICBmaXhlZFJhZGl1cyxcbiAgICBmZWF0dXJlVHlwZXMsXG4gICAgY2VudHJvaWRzOiBtZWFuQ2VudGVyc1xuICB9O1xufVxuXG4vKipcbiAqIFBhcnNlIHJhdyBkYXRhIHRvIEdlb0pzb24gZmVhdHVyZVxuICovXG5leHBvcnQgZnVuY3Rpb24gZ2V0R2VvanNvbkRhdGFNYXBzKFxuICBkYXRhQ29udGFpbmVyOiBEYXRhQ29udGFpbmVySW50ZXJmYWNlLFxuICBnZXRGZWF0dXJlOiBHZXRGZWF0dXJlXG4pOiBHZW9qc29uRGF0YU1hcHMge1xuICBjb25zdCBhY2NlcHRhYmxlVHlwZXMgPSBbXG4gICAgJ1BvaW50JyxcbiAgICAnTXVsdGlQb2ludCcsXG4gICAgJ0xpbmVTdHJpbmcnLFxuICAgICdNdWx0aUxpbmVTdHJpbmcnLFxuICAgICdQb2x5Z29uJyxcbiAgICAnTXVsdGlQb2x5Z29uJyxcbiAgICAnR2VvbWV0cnlDb2xsZWN0aW9uJ1xuICBdO1xuXG4gIGNvbnN0IGRhdGFUb0ZlYXR1cmU6IEdlb2pzb25EYXRhTWFwcyA9IFtdO1xuXG4gIGZvciAobGV0IGluZGV4ID0gMDsgaW5kZXggPCBkYXRhQ29udGFpbmVyLm51bVJvd3MoKTsgaW5kZXgrKykge1xuICAgIGNvbnN0IGZlYXR1cmUgPSBwYXJzZUdlb0pzb25SYXdGZWF0dXJlKGdldEZlYXR1cmUoe2luZGV4fSkpO1xuXG4gICAgaWYgKGZlYXR1cmUgJiYgZmVhdHVyZS5nZW9tZXRyeSAmJiBhY2NlcHRhYmxlVHlwZXMuaW5jbHVkZXMoZmVhdHVyZS5nZW9tZXRyeS50eXBlKSkge1xuICAgICAgY29uc3QgY2xlYW5lZCA9IHtcbiAgICAgICAgLi4uZmVhdHVyZSxcbiAgICAgICAgLy8gc3RvcmUgaW5kZXggb2YgdGhlIGRhdGEgaW4gZmVhdHVyZSBwcm9wZXJ0aWVzXG4gICAgICAgIHByb3BlcnRpZXM6IHtcbiAgICAgICAgICAuLi5mZWF0dXJlLnByb3BlcnRpZXMsXG4gICAgICAgICAgaW5kZXhcbiAgICAgICAgfVxuICAgICAgfTtcblxuICAgICAgZGF0YVRvRmVhdHVyZVtpbmRleF0gPSBjbGVhbmVkO1xuICAgIH0gZWxzZSB7XG4gICAgICBkYXRhVG9GZWF0dXJlW2luZGV4XSA9IG51bGw7XG4gICAgfVxuICB9XG5cbiAgcmV0dXJuIGRhdGFUb0ZlYXR1cmU7XG59XG5cbi8qKlxuICogUGFyc2UgcmF3IGRhdGEgdG8gR2VvSnNvbiBwb2ludCBmZWF0dXJlIGNvb3JkaW5hdGVzXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBnZXRHZW9qc29uUG9pbnREYXRhTWFwcyhcbiAgZGF0YUNvbnRhaW5lcjogRGF0YUNvbnRhaW5lckludGVyZmFjZSxcbiAgZ2V0RmVhdHVyZTogR2V0RmVhdHVyZVxuKTogR2VvanNvblBvaW50RGF0YU1hcHMge1xuICBjb25zdCBhY2NlcHRhYmxlVHlwZXMgPSBbJ1BvaW50JywgJ011bHRpUG9pbnQnLCAnR2VvbWV0cnlDb2xsZWN0aW9uJ107XG5cbiAgY29uc3QgZGF0YVRvRmVhdHVyZTogR2VvanNvblBvaW50RGF0YU1hcHMgPSBbXTtcblxuICBmb3IgKGxldCBpbmRleCA9IDA7IGluZGV4IDwgZGF0YUNvbnRhaW5lci5udW1Sb3dzKCk7IGluZGV4KyspIHtcbiAgICBjb25zdCBmZWF0dXJlID0gcGFyc2VHZW9Kc29uUmF3RmVhdHVyZShnZXRGZWF0dXJlKGRhdGFDb250YWluZXIucm93QXNBcnJheShpbmRleCkpKTtcblxuICAgIGlmIChmZWF0dXJlICYmIGZlYXR1cmUuZ2VvbWV0cnkgJiYgYWNjZXB0YWJsZVR5cGVzLmluY2x1ZGVzKGZlYXR1cmUuZ2VvbWV0cnkudHlwZSkpIHtcbiAgICAgIGRhdGFUb0ZlYXR1cmVbaW5kZXhdID1cbiAgICAgICAgZmVhdHVyZS5nZW9tZXRyeS50eXBlID09PSAnUG9pbnQnIHx8IGZlYXR1cmUuZ2VvbWV0cnkudHlwZSA9PT0gJ011bHRpUG9pbnQnXG4gICAgICAgICAgPyBmZWF0dXJlLmdlb21ldHJ5LmNvb3JkaW5hdGVzXG4gICAgICAgICAgOiAvLyBAdHMtZXhwZWN0LWVycm9yIFByb3BlcnR5ICdnZW9tZXRyaWVzJyBkb2VzIG5vdCBleGlzdCBvbiB0eXBlICdMaW5lU3RyaW5nJ1xuICAgICAgICAgICAgKGZlYXR1cmUuZ2VvbWV0cnkuZ2VvbWV0cmllcyB8fCBbXSkucmVkdWNlKChhY2N1LCBmKSA9PiB7XG4gICAgICAgICAgICAgIGlmIChmLnR5cGUgPT09ICdQb2ludCcpIHtcbiAgICAgICAgICAgICAgICBhY2N1LnB1c2goZi5jb29yZGluYXRlcyk7XG4gICAgICAgICAgICAgIH0gZWxzZSBpZiAoZi50eXBlID09PSAnTXVsdGlQb2ludCcpIHtcbiAgICAgICAgICAgICAgICBhY2N1LnB1c2goLi4uZi5jb29yZGluYXRlcyk7XG4gICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICByZXR1cm4gYWNjdTtcbiAgICAgICAgICAgIH0sIFtdKTtcbiAgICB9IGVsc2Uge1xuICAgICAgZGF0YVRvRmVhdHVyZVtpbmRleF0gPSBudWxsO1xuICAgIH1cbiAgfVxuXG4gIHJldHVybiBkYXRhVG9GZWF0dXJlO1xufVxuXG4vKipcbiAqIFBhcnNlIGdlb2pzb24gZnJvbSBzdHJpbmdcbiAqIEBwYXJhbSB7U3RyaW5nfSBnZW9TdHJpbmdcbiAqIEByZXR1cm5zIHtudWxsIHwgT2JqZWN0fSBnZW9qc29uIG9iamVjdCBvciBudWxsIGlmIGZhaWxlZFxuICovXG5mdW5jdGlvbiBwYXJzZUdlb21ldHJ5RnJvbVN0cmluZyhnZW9TdHJpbmc6IHN0cmluZyk6IEZlYXR1cmUgfCBudWxsIHtcbiAgbGV0IHBhcnNlZEdlbztcblxuICAvLyB0cnkgcGFyc2UgYXMgZ2VvanNvbiBzdHJpbmdcbiAgLy8ge1widHlwZVwiOlwiUG9seWdvblwiLFwiY29vcmRpbmF0ZXNcIjpbW1stNzQuMTU4NDkxLDQwLjgzNTk0XV1dfVxuICB0cnkge1xuICAgIHBhcnNlZEdlbyA9IEpTT04ucGFyc2UoZ2VvU3RyaW5nKTtcbiAgfSBjYXRjaCAoZSkge1xuICAgIC8vIGtlZXAgdHJ5aW5nIHRvIHBhcnNlXG4gIH1cblxuICAvLyB0cnkgcGFyc2UgYXMgd2t0IHVzaW5nIGxvYWRlcnMuZ2wgV0tUTG9hZGVyXG4gIGlmICghcGFyc2VkR2VvKSB7XG4gICAgdHJ5IHtcbiAgICAgIHBhcnNlZEdlbyA9IHBhcnNlU3luYyhnZW9TdHJpbmcsIFdLVExvYWRlcik7XG4gICAgfSBjYXRjaCAoZSkge1xuICAgICAgcmV0dXJuIG51bGw7XG4gICAgfVxuICB9XG5cbiAgLy8gdHJ5IHBhcnNlIGFzIHdrYiB1c2luZyBsb2FkZXJzLmdsIFdLQkxvYWRlclxuICBpZiAoIXBhcnNlZEdlbykge1xuICAgIHRyeSB7XG4gICAgICBjb25zdCBidWZmZXIgPSBCdWZmZXIuZnJvbShnZW9TdHJpbmcsICdoZXgnKTtcbiAgICAgIGNvbnN0IGJpbmFyeUdlbyA9IHBhcnNlU3luYyhidWZmZXIsIFdLQkxvYWRlcik7XG4gICAgICAvLyBAdHMtZXhwZWN0LWVycm9yXG4gICAgICBwYXJzZWRHZW8gPSBiaW5hcnlUb0dlb21ldHJ5KGJpbmFyeUdlbyk7XG4gICAgfSBjYXRjaCAoZSkge1xuICAgICAgcmV0dXJuIG51bGw7XG4gICAgfVxuICB9XG5cbiAgaWYgKCFwYXJzZWRHZW8pIHtcbiAgICByZXR1cm4gbnVsbDtcbiAgfVxuXG4gIGNvbnN0IG5vcm1hbGl6ZWQgPSBub3JtYWxpemUocGFyc2VkR2VvKTtcblxuICBpZiAoIW5vcm1hbGl6ZWQgfHwgIUFycmF5LmlzQXJyYXkobm9ybWFsaXplZC5mZWF0dXJlcykpIHtcbiAgICAvLyBmYWlsIHRvIG5vcm1hbGl6ZSBnZW9qc29uXG4gICAgcmV0dXJuIG51bGw7XG4gIH1cblxuICByZXR1cm4gbm9ybWFsaXplZC5mZWF0dXJlc1swXTtcbn1cblxuLyoqXG4gKiBHZXQgZ2VvanNvbiBib3VuZHNcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGdldEdlb2pzb25Cb3VuZHMoZmVhdHVyZXM6IEdlb2pzb25EYXRhTWFwcyA9IFtdKTogQkJveCB8IG51bGwge1xuICAvLyA3MCBtcyBmb3IgMTAsMDAwIHBvbHlnb25zXG4gIC8vIGhlcmUgd2Ugb25seSBwaWNrIGNvdXBsZVxuICBjb25zdCBtYXhDb3VudCA9IDEwMDAwO1xuICBjb25zdCBzYW1wbGVzID0gZmVhdHVyZXMubGVuZ3RoID4gbWF4Q291bnQgPyBnZXRTYW1wbGVEYXRhKGZlYXR1cmVzLCBtYXhDb3VudCkgOiBmZWF0dXJlcztcblxuICBjb25zdCB2YWxpZFNpbmdsZUdlb21ldHJ5ID0gZ2VvbSA9PiBnZW9tLmNvb3JkaW5hdGVzICYmIGdlb20uY29vcmRpbmF0ZXMubGVuZ3RoO1xuICBjb25zdCB2YWxpZEdlb21ldHJ5Q29sbGVjdGlvbiA9IGdlb20gPT5cbiAgICBnZW9tLmdlb21ldHJpZXMgJiYgZ2VvbS5nZW9tZXRyaWVzLmxlbmd0aCAmJiBnZW9tLmdlb21ldHJpZXMuZXZlcnkodmFsaWRTaW5nbGVHZW9tZXRyeSk7XG4gIGNvbnN0IG5vbkVtcHR5ID0gc2FtcGxlcy5maWx0ZXIoXG4gICAgZCA9PiBkICYmIGQuZ2VvbWV0cnkgJiYgKHZhbGlkU2luZ2xlR2VvbWV0cnkoZC5nZW9tZXRyeSkgfHwgdmFsaWRHZW9tZXRyeUNvbGxlY3Rpb24oZC5nZW9tZXRyeSkpXG4gICk7XG5cbiAgdHJ5IHtcbiAgICByZXR1cm4gYmJveCh7XG4gICAgICB0eXBlOiAnRmVhdHVyZUNvbGxlY3Rpb24nLFxuICAgICAgZmVhdHVyZXM6IG5vbkVtcHR5XG4gICAgfSk7XG4gIH0gY2F0Y2ggKGUpIHtcbiAgICByZXR1cm4gbnVsbDtcbiAgfVxufVxuXG5leHBvcnQgY29uc3QgZmVhdHVyZVRvRGVja0dsR2VvVHlwZSA9IHtcbiAgUG9pbnQ6ICdwb2ludCcsXG4gIE11bHRpUG9pbnQ6ICdwb2ludCcsXG4gIExpbmVTdHJpbmc6ICdsaW5lJyxcbiAgTXVsdGlMaW5lU3RyaW5nOiAnbGluZScsXG4gIFBvbHlnb246ICdwb2x5Z29uJyxcbiAgTXVsdGlQb2x5Z29uOiAncG9seWdvbidcbn07XG5cbmV4cG9ydCB0eXBlIERlY2tHbEdlb1R5cGVzID0ge1xuICBwb2ludDogYm9vbGVhbjtcbiAgbGluZTogYm9vbGVhbjtcbiAgcG9seWdvbjogYm9vbGVhbjtcbn07XG5cbi8qKlxuICogUGFyc2UgZ2VvanNvbiBmcm9tIHN0cmluZ1xuICovXG5leHBvcnQgZnVuY3Rpb24gZ2V0R2VvanNvbkZlYXR1cmVUeXBlcyhhbGxGZWF0dXJlczogR2VvanNvbkRhdGFNYXBzKTogRGVja0dsR2VvVHlwZXMge1xuICAvLyBAdHMtZXhwZWN0LWVycm9yIHNvbWUgdGVzdCBjYXNlcyBvbmx5IGhhdmUgMSBnZW90eXBlXG4gIGNvbnN0IGZlYXR1cmVUeXBlczogRGVja0dsR2VvVHlwZXMgPSB7fTtcbiAgZm9yIChsZXQgZiA9IDA7IGYgPCBhbGxGZWF0dXJlcy5sZW5ndGg7IGYrKykge1xuICAgIGNvbnN0IGZlYXR1cmUgPSBhbGxGZWF0dXJlc1tmXTtcbiAgICBpZiAoZmVhdHVyZSAmJiAnZ2VvbWV0cnknIGluIGZlYXR1cmUpIHtcbiAgICAgIGNvbnN0IGdlb1R5cGUgPSBmZWF0dXJlVG9EZWNrR2xHZW9UeXBlW2ZlYXR1cmUuZ2VvbWV0cnkgJiYgZmVhdHVyZS5nZW9tZXRyeS50eXBlXTtcbiAgICAgIGlmIChnZW9UeXBlKSB7XG4gICAgICAgIGZlYXR1cmVUeXBlc1tnZW9UeXBlXSA9IHRydWU7XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgcmV0dXJuIGZlYXR1cmVUeXBlcztcbn1cblxudHlwZSBDb29yZHNUeXBlID0gW251bWJlciwgbnVtYmVyLCBudW1iZXIsIG51bWJlciB8IG51bGxdICYge1xuICBkYXR1bUluZGV4OiBudW1iZXI7XG4gIGRhdHVtOiBudW1iZXJbXTtcbn07XG5cbmV4cG9ydCBmdW5jdGlvbiBncm91cENvbHVtbnNBc0dlb0pzb24oXG4gIGRhdGFDb250YWluZXI6IERhdGFDb250YWluZXJJbnRlcmZhY2UsXG4gIGNvbHVtbnM6IExheWVyQ29sdW1ucyxcbiAgc29ydEJ5Q29sdW1uID0gJ3RpbWVzdGFtcCdcbik6IEZlYXR1cmVbXSB7XG4gIGNvbnN0IGdyb3VwZWRCeUlkOiB7W2tleTogc3RyaW5nXTogQ29vcmRzVHlwZVtdfSA9IHt9O1xuICBjb25zdCBzb3J0QnlGaWVsZElkeCA9IGNvbHVtbnNbc29ydEJ5Q29sdW1uXS5maWVsZElkeDtcbiAgY29uc3Qgc29ydEJ5UmVxdWlyZWQgPSAhY29sdW1uc1tzb3J0QnlDb2x1bW5dLm9wdGlvbmFsO1xuICBmb3IgKGxldCBpbmRleCA9IDA7IGluZGV4IDwgZGF0YUNvbnRhaW5lci5udW1Sb3dzKCk7IGluZGV4KyspIHtcbiAgICAvLyBub3RlOiBjYW4gbWF0ZXJpYWxpemUgdGhlIHJvd1xuICAgIGNvbnN0IGRhdHVtID0gZGF0YUNvbnRhaW5lci5yb3dBc0FycmF5KGluZGV4KTtcbiAgICBjb25zdCBpZCA9IGRhdHVtW2NvbHVtbnMuaWQuZmllbGRJZHhdO1xuICAgIGNvbnN0IGxhdCA9IGRhdHVtW2NvbHVtbnMubGF0LmZpZWxkSWR4XTtcbiAgICBjb25zdCBsb24gPSBkYXR1bVtjb2x1bW5zLmxuZy5maWVsZElkeF07XG4gICAgY29uc3QgYWx0aXR1ZGUgPSBjb2x1bW5zLmFsdGl0dWRlID8gZGF0dW1bY29sdW1ucy5hbHRpdHVkZS5maWVsZElkeF0gOiAwO1xuICAgIGNvbnN0IHNvcnRCeSA9IHNvcnRCeUZpZWxkSWR4ID4gLTEgPyBkYXR1bVtzb3J0QnlGaWVsZElkeF0gOiBudWxsO1xuICAgIC8vIEB0cy1leHBlY3QtZXJyb3JcbiAgICBjb25zdCBjb29yZHM6IENvb3Jkc1R5cGUgPSBbbG9uLCBsYXQsIGFsdGl0dWRlLCBzb3J0QnldO1xuICAgIC8vIEFkZGluZyByZWZlcmVuY2VzIHRvIHRoZSBvcmlnaW5hbCBkYXRhIHRvIHRoZSBjb29yZGluYXRlcyBhcnJheVxuICAgIGNvb3Jkcy5kYXR1bUluZGV4ID0gaW5kZXg7XG4gICAgY29vcmRzLmRhdHVtID0gZGF0dW07XG4gICAgaWYgKCFncm91cGVkQnlJZFtpZF0pIGdyb3VwZWRCeUlkW2lkXSA9IFtdO1xuXG4gICAgaWYgKFxuICAgICAgTnVtYmVyLmlzRmluaXRlKGxvbikgJiZcbiAgICAgIE51bWJlci5pc0Zpbml0ZShsYXQpICYmXG4gICAgICAoIXNvcnRCeVJlcXVpcmVkIHx8IChzb3J0QnlSZXF1aXJlZCAmJiBzb3J0QnkpKVxuICAgICkge1xuICAgICAgLy8gb25seSBwdXNoIHBvaW50cyBpZiBsYXQsbG5nLGFuZCBzb3J0YnkgZXhpc3RcbiAgICAgIGdyb3VwZWRCeUlkW2lkXS5wdXNoKGNvb3Jkcyk7XG4gICAgfVxuICB9XG5cbiAgY29uc3QgcmVzdWx0OiBGZWF0dXJlW10gPSBPYmplY3QuZW50cmllcyhncm91cGVkQnlJZCkubWFwKFxuICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBAdHlwZXNjcmlwdC1lc2xpbnQvbm8tdW51c2VkLXZhcnNcbiAgICAoW18sIGl0ZW1zXTogW3N0cmluZywgQ29vcmRzVHlwZVtdXSwgaW5kZXgpID0+ICh7XG4gICAgICB0eXBlOiAnRmVhdHVyZScgYXMgY29uc3QsXG4gICAgICBnZW9tZXRyeToge1xuICAgICAgICB0eXBlOiAnTGluZVN0cmluZycgYXMgY29uc3QsXG4gICAgICAgIC8vIFNvcnQgYnkgY29sdW1ucyBpZiBoYXMgc29ydEJ5RmllbGRcbiAgICAgICAgLy8gVE9ETzogaXRlbXMgYXJlIGV4cGVjdGVkIGluIFBvc2l0aW9uW10gZm9ybWF0P1xuICAgICAgICBjb29yZGluYXRlczogKHNvcnRCeUZpZWxkSWR4ID4gLTFcbiAgICAgICAgICA/IGl0ZW1zLnNvcnQoKGEsIGIpID0+IGFzY2VuZGluZyhhWzNdIGFzIGFueSwgYlszXSBhcyBhbnkpKVxuICAgICAgICAgIDogaXRlbXMpIGFzIFBvc2l0aW9uW11cbiAgICAgIH0sXG4gICAgICBwcm9wZXJ0aWVzOiB7XG4gICAgICAgIGluZGV4LFxuICAgICAgICAvLyB2YWx1ZXMgYXJlIHVzZWQgZm9yIHZhbHVlQWNjZXNzb3IgaW4gVHJpcExheWVyLmZvcm1hdExheWVyRGF0YSgpXG4gICAgICAgIC8vIE5vdGU6IHRoaXMgY2FuIGNhdXNlIHJvdyBtYXRlcmlhbGl6YXRpb24gaW4gY2FzZSBvZiBub24tcm93IGJhc2VkIGNvbnRhaW5lcnNcbiAgICAgICAgdmFsdWVzOiBpdGVtcy5tYXAoaXRlbSA9PiBkYXRhQ29udGFpbmVyLnJvd0FzQXJyYXkoaXRlbS5kYXR1bUluZGV4KSlcbiAgICAgIH1cbiAgICB9KVxuICApO1xuICByZXR1cm4gcmVzdWx0O1xufVxuXG4vKipcbiAqIEZpbmQgaWQgLyB0cyAvIGxhdCAvIGxuZyBjb2x1bW5zIGZyb20gYSB0YWJsZSBhbmQgYXNzaWduIGl0IHRvIGxheWVyIGNvbHVtbnNcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGRldGVjdFRhYmxlQ29sdW1ucyhcbiAgZGF0YXNldDogS2VwbGVyVGFibGUsXG4gIGxheWVyQ29sdW1uczogTGF5ZXJDb2x1bW5zLFxuICBzb3J0QnkgPSAndGltZXN0YW1wJ1xuKSB7XG4gIGNvbnN0IHtmaWVsZHMsIGZpZWxkUGFpcnN9ID0gZGF0YXNldDtcbiAgaWYgKCFmaWVsZFBhaXJzLmxlbmd0aCB8fCAhZmllbGRzLmxlbmd0aCkge1xuICAgIHJldHVybiBudWxsO1xuICB9XG4gIC8vIGZpbmQgc29ydCBieSBmaWVsZFxuICBjb25zdCBzb3J0QnlGaWVsZElkeCA9IGZpZWxkcy5maW5kSW5kZXgoZiA9PiBmLnR5cGUgPT09IEFMTF9GSUVMRF9UWVBFUy50aW1lc3RhbXApO1xuICAvLyBmaW5kIGlkIGNvbHVtblxuICBjb25zdCBpZEZpZWxkSWR4ID0gZmllbGRzLmZpbmRJbmRleChmID0+IGYubmFtZT8udG9Mb3dlckNhc2UoKS5tYXRjaCgvXihpZHx1dWlkKSQvZykpO1xuXG4gIGlmIChzb3J0QnlGaWVsZElkeCA+IC0xICYmIGlkRmllbGRJZHggPiAtMSkge1xuICAgIGNvbnN0IHBvaW50Q29sdW1ucyA9IGFzc2lnblBvaW50UGFpclRvTGF5ZXJDb2x1bW4oZmllbGRQYWlyc1swXSwgdHJ1ZSk7XG4gICAgcmV0dXJuIHtcbiAgICAgIGNvbHVtbnM6IHtcbiAgICAgICAgLi4uT2JqZWN0LmtleXMobGF5ZXJDb2x1bW5zKS5yZWR1Y2UoXG4gICAgICAgICAgKGFjY3UsIGNvbCkgPT4gKHtcbiAgICAgICAgICAgIC4uLmFjY3UsXG4gICAgICAgICAgICBbY29sXTogcG9pbnRDb2x1bW5zW2NvbF0gPz8gbGF5ZXJDb2x1bW5zW2NvbF1cbiAgICAgICAgICB9KSxcbiAgICAgICAgICB7fVxuICAgICAgICApLFxuICAgICAgICBnZW9qc29uOiB7XG4gICAgICAgICAgdmFsdWU6IG51bGwsXG4gICAgICAgICAgZmllbGRJZHg6IC0xXG4gICAgICAgICAgLy8gb3B0aW9uYWw6IHRydWVcbiAgICAgICAgfSxcbiAgICAgICAgaWQ6IHtcbiAgICAgICAgICB2YWx1ZTogZmllbGRzW2lkRmllbGRJZHhdLm5hbWUsXG4gICAgICAgICAgZmllbGRJZHg6IGlkRmllbGRJZHhcbiAgICAgICAgICAvLyBvcHRpb25hbDogZmFsc2VcbiAgICAgICAgfSxcbiAgICAgICAgW3NvcnRCeV06IHtcbiAgICAgICAgICB2YWx1ZTogZmllbGRzW3NvcnRCeUZpZWxkSWR4XS5uYW1lLFxuICAgICAgICAgIGZpZWxkSWR4OiBzb3J0QnlGaWVsZElkeFxuICAgICAgICAgIC8vIG9wdGlvbmFsOiBmYWxzZVxuICAgICAgICB9XG4gICAgICB9LFxuICAgICAgbGFiZWw6IGZpZWxkUGFpcnNbMF0uZGVmYXVsdE5hbWVcbiAgICB9O1xuICB9XG5cbiAgcmV0dXJuIG51bGw7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBhcHBseUZpbHRlcnNUb1RhYmxlQ29sdW1ucyhcbiAgZGF0YXNldDogS2VwbGVyVGFibGUsXG4gIGRhdGFUb0ZlYXR1cmU6IEdlb2pzb25EYXRhTWFwc1xuKTogR2VvanNvbkRhdGFNYXBzIHtcbiAgY29uc3Qge2RhdGFDb250YWluZXIsIGZpbHRlcmVkSW5kZXh9ID0gZGF0YXNldDtcbiAgaWYgKGZpbHRlcmVkSW5kZXgubGVuZ3RoID09PSBkYXRhQ29udGFpbmVyLm51bVJvd3MoKSkge1xuICAgIC8vIE9ubHkgYXBwbHkgdGhlIGZpbHRlcmluZyB3aGVuIHNvbWV0aGluZyBpcyB0byBiZSBmaWx0ZXJlZCBvdXRcbiAgICByZXR1cm4gZGF0YVRvRmVhdHVyZTtcbiAgfVxuXG4gIGNvbnN0IGZpbHRlcmVkSW5kZXhTZXQgPSBuZXcgU2V0KGZpbHRlcmVkSW5kZXgpO1xuICBjb25zdCBmaWx0ZXJlZEZlYXR1cmVzOiBHZW9qc29uRGF0YU1hcHMgPSBbXTtcbiAgZm9yIChjb25zdCBmZWF0dXJlIG9mIGRhdGFUb0ZlYXR1cmUpIHtcbiAgICAvLyBAdHMtZXhwZWN0LWVycm9yIGdlb21ldHJ5LmNvb3JkaW5hdGVzIG5vdCBhdmFpbGFibGUgZm9yIEdlb21ldHJ5Q29sbGVjdGlvblxuICAgIGNvbnN0IGZpbHRlcmVkQ29vcmRzID0gZmVhdHVyZS5nZW9tZXRyeS5jb29yZGluYXRlcy5maWx0ZXIoYyA9PlxuICAgICAgZmlsdGVyZWRJbmRleFNldC5oYXMoYy5kYXR1bUluZGV4KVxuICAgICk7XG4gICAgaWYgKGZpbHRlcmVkQ29vcmRzLmxlbmd0aCA+IDAgJiYgZmVhdHVyZSkge1xuICAgICAgZmlsdGVyZWRGZWF0dXJlcy5wdXNoKHtcbiAgICAgICAgLi4uZmVhdHVyZSxcbiAgICAgICAgZ2VvbWV0cnk6IHtcbiAgICAgICAgICAvLyBAdHMtZXhwZWN0LWVycm9yIEJpbmFyeUZlYXR1cmVDb2xsZWN0aW9uXG4gICAgICAgICAgLi4uZmVhdHVyZS5nZW9tZXRyeSxcbiAgICAgICAgICBjb29yZGluYXRlczogZmlsdGVyZWRDb29yZHNcbiAgICAgICAgfSxcbiAgICAgICAgcHJvcGVydGllczoge1xuICAgICAgICAgIC8vIEB0cy1leHBlY3QtZXJyb3IgQmluYXJ5RmVhdHVyZUNvbGxlY3Rpb25cbiAgICAgICAgICAuLi5mZWF0dXJlLnByb3BlcnRpZXMsXG4gICAgICAgICAgLy8gQHRzLWV4cGVjdC1lcnJvciBCaW5hcnlGZWF0dXJlQ29sbGVjdGlvblxuICAgICAgICAgIHZhbHVlczogZmVhdHVyZS5nZW9tZXRyeS5jb29yZGluYXRlcy5tYXAoYyA9PiBkYXRhQ29udGFpbmVyLnJvd0FzQXJyYXkoYy5kYXR1bUluZGV4KSlcbiAgICAgICAgfVxuICAgICAgfSk7XG4gICAgfVxuICB9XG4gIHJldHVybiBmaWx0ZXJlZEZlYXR1cmVzO1xufVxuIl0sIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0FBR0EsSUFBQUEs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
|
|
446
|
+
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJfYnVmZmVyIiwicmVxdWlyZSIsIl9nZW9qc29uTm9ybWFsaXplIiwiX2ludGVyb3BSZXF1aXJlRGVmYXVsdCIsIl9iYm94IiwiX2QzQXJyYXkiLCJfY2VudGVyIiwiX2NvcmUiLCJfd2t0IiwiX2dpcyIsIl91dGlscyIsIl9jb25zdGFudHMiLCJfbGF5ZXJVdGlscyIsIl9jcmVhdGVGb3JPZkl0ZXJhdG9ySGVscGVyIiwiciIsImUiLCJ0IiwiU3ltYm9sIiwiaXRlcmF0b3IiLCJBcnJheSIsImlzQXJyYXkiLCJfdW5zdXBwb3J0ZWRJdGVyYWJsZVRvQXJyYXkiLCJsZW5ndGgiLCJfbiIsIkYiLCJzIiwibiIsImRvbmUiLCJ2YWx1ZSIsImYiLCJUeXBlRXJyb3IiLCJvIiwiYSIsInUiLCJjYWxsIiwibmV4dCIsIl9hcnJheUxpa2VUb0FycmF5IiwidG9TdHJpbmciLCJzbGljZSIsImNvbnN0cnVjdG9yIiwibmFtZSIsImZyb20iLCJ0ZXN0Iiwib3duS2V5cyIsIk9iamVjdCIsImtleXMiLCJnZXRPd25Qcm9wZXJ0eVN5bWJvbHMiLCJmaWx0ZXIiLCJnZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IiLCJlbnVtZXJhYmxlIiwicHVzaCIsImFwcGx5IiwiX29iamVjdFNwcmVhZCIsImFyZ3VtZW50cyIsImZvckVhY2giLCJfZGVmaW5lUHJvcGVydHkyIiwiZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9ycyIsImRlZmluZVByb3BlcnRpZXMiLCJkZWZpbmVQcm9wZXJ0eSIsIkNPTFVNTl9NT0RFX0dFT0pTT04iLCJleHBvcnRzIiwiRmVhdHVyZVR5cGVzIiwiZmllbGRJc0dlb0Fycm93IiwiZ2VvRmllbGQiLCJfZ2VvRmllbGQkbWV0YWRhdGEiLCJCb29sZWFuIiwibWV0YWRhdGEiLCJnZXQiLCJwYXJzZUdlb0pzb25SYXdGZWF0dXJlIiwicmF3RmVhdHVyZSIsInByb3BlcnRpZXMiLCJVaW50OEFycmF5IiwiQXJyYXlCdWZmZXIiLCJiaW5hcnlJbnB1dCIsImJ1ZmZlciIsImJ5dGVPZmZzZXQiLCJieXRlTGVuZ3RoIiwiYmluYXJ5R2VvIiwicGFyc2VTeW5jIiwiV0tCTG9hZGVyIiwicGFyc2VkR2VvIiwiYmluYXJ5VG9HZW9tZXRyeSIsIm5vcm1hbGl6ZWQiLCJub3JtYWxpemUiLCJmZWF0dXJlcyIsIl90eXBlb2YyIiwicGFyc2VkR2VvbWV0cnkiLCJwYXJzZUdlb21ldHJ5RnJvbVN0cmluZyIsInR5cGUiLCJnZW9tZXRyeSIsImNvb3JkaW5hdGVzIiwibWFwIiwicHRzIiwiZ2V0R2VvanNvbkxheWVyTWV0YSIsIl9yZWYiLCJkYXRhQ29udGFpbmVyIiwiZ2V0RmVhdHVyZSIsImNvbmZpZyIsImRhdGFUb0ZlYXR1cmUiLCJjb2x1bW5Nb2RlIiwiZ2V0R2VvanNvbkRhdGFNYXBzIiwiZ3JvdXBDb2x1bW5zQXNHZW9Kc29uIiwiY29sdW1ucyIsImJvdW5kcyIsImdldEdlb2pzb25Cb3VuZHMiLCJmaXhlZFJhZGl1cyIsImZpbmQiLCJkIiwiX2QkcHJvcGVydGllcyIsInJhZGl1cyIsImZlYXR1cmVUeXBlcyIsImdldEdlb2pzb25GZWF0dXJlVHlwZXMiLCJtZWFuQ2VudGVycyIsImkiLCJmZWF0dXJlIiwiY2VudCIsImNlbnRlciIsImNlbnRyb2lkcyIsImFjY2VwdGFibGVUeXBlcyIsImluZGV4IiwibnVtUm93cyIsImluY2x1ZGVzIiwiY2xlYW5lZCIsImdldEdlb2pzb25Qb2ludERhdGFNYXBzIiwicm93QXNBcnJheSIsImdlb21ldHJpZXMiLCJyZWR1Y2UiLCJhY2N1IiwiX3RvQ29uc3VtYWJsZUFycmF5MiIsImdlb1N0cmluZyIsIkpTT04iLCJwYXJzZSIsIldLVExvYWRlciIsIkJ1ZmZlciIsInVuZGVmaW5lZCIsIm1heENvdW50Iiwic2FtcGxlcyIsImdldFNhbXBsZURhdGEiLCJ2YWxpZFNpbmdsZUdlb21ldHJ5IiwiZ2VvbSIsInZhbGlkR2VvbWV0cnlDb2xsZWN0aW9uIiwiZXZlcnkiLCJub25FbXB0eSIsImJib3giLCJmZWF0dXJlVG9EZWNrR2xHZW9UeXBlIiwiUG9pbnQiLCJNdWx0aVBvaW50IiwiTGluZVN0cmluZyIsIk11bHRpTGluZVN0cmluZyIsIlBvbHlnb24iLCJNdWx0aVBvbHlnb24iLCJhbGxGZWF0dXJlcyIsImdlb1R5cGUiLCJzb3J0QnlDb2x1bW4iLCJncm91cGVkQnlJZCIsInNvcnRCeUZpZWxkSWR4IiwiZmllbGRJZHgiLCJzb3J0QnlSZXF1aXJlZCIsIm9wdGlvbmFsIiwiZGF0dW0iLCJpZCIsImxhdCIsImxvbiIsImxuZyIsImFsdGl0dWRlIiwic29ydEJ5IiwiY29vcmRzIiwiZGF0dW1JbmRleCIsIk51bWJlciIsImlzRmluaXRlIiwicmVzdWx0IiwiZW50cmllcyIsIl9yZWYyIiwiX3JlZjMiLCJfc2xpY2VkVG9BcnJheTIiLCJfIiwiaXRlbXMiLCJzb3J0IiwiYiIsImFzY2VuZGluZyIsInZhbHVlcyIsIml0ZW0iLCJkZXRlY3RUYWJsZUNvbHVtbnMiLCJkYXRhc2V0IiwibGF5ZXJDb2x1bW5zIiwiZmllbGRzIiwiZmllbGRQYWlycyIsImZpbmRJbmRleCIsIkFMTF9GSUVMRF9UWVBFUyIsInRpbWVzdGFtcCIsImlkRmllbGRJZHgiLCJfZiRuYW1lIiwidG9Mb3dlckNhc2UiLCJtYXRjaCIsInBvaW50Q29sdW1ucyIsImFzc2lnblBvaW50UGFpclRvTGF5ZXJDb2x1bW4iLCJjb2wiLCJfcG9pbnRDb2x1bW5zJGNvbCIsImdlb2pzb24iLCJsYWJlbCIsImRlZmF1bHROYW1lIiwiYXBwbHlGaWx0ZXJzVG9UYWJsZUNvbHVtbnMiLCJmaWx0ZXJlZEluZGV4IiwiZmlsdGVyZWRJbmRleFNldCIsIlNldCIsImZpbHRlcmVkRmVhdHVyZXMiLCJfaXRlcmF0b3IiLCJfc3RlcCIsImZpbHRlcmVkQ29vcmRzIiwiYyIsImhhcyIsImVyciJdLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9nZW9qc29uLWxheWVyL2dlb2pzb24tdXRpbHMudHMiXSwic291cmNlc0NvbnRlbnQiOlsiLy8gU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IE1JVFxuLy8gQ29weXJpZ2h0IGNvbnRyaWJ1dG9ycyB0byB0aGUga2VwbGVyLmdsIHByb2plY3RcblxuaW1wb3J0IHtCdWZmZXJ9IGZyb20gJ2J1ZmZlcic7XG5pbXBvcnQge0ZlYXR1cmUsIFBvc2l0aW9uLCBCQm94fSBmcm9tICdnZW9qc29uJztcbmltcG9ydCBub3JtYWxpemUgZnJvbSAnQG1hcGJveC9nZW9qc29uLW5vcm1hbGl6ZSc7XG5pbXBvcnQgYmJveCBmcm9tICdAdHVyZi9iYm94JztcbmltcG9ydCB7YXNjZW5kaW5nfSBmcm9tICdkMy1hcnJheSc7XG5pbXBvcnQgY2VudGVyIGZyb20gJ0B0dXJmL2NlbnRlcic7XG5pbXBvcnQge0FsbEdlb0pTT059IGZyb20gJ0B0dXJmL2hlbHBlcnMnO1xuaW1wb3J0IHtwYXJzZVN5bmN9IGZyb20gJ0Bsb2FkZXJzLmdsL2NvcmUnO1xuaW1wb3J0IHtXS0JMb2FkZXIsIFdLVExvYWRlcn0gZnJvbSAnQGxvYWRlcnMuZ2wvd2t0JztcbmltcG9ydCB7YmluYXJ5VG9HZW9tZXRyeX0gZnJvbSAnQGxvYWRlcnMuZ2wvZ2lzJztcbmltcG9ydCB7QmluYXJ5RmVhdHVyZUNvbGxlY3Rpb259IGZyb20gJ0Bsb2FkZXJzLmdsL3NjaGVtYSc7XG5pbXBvcnQge0RhdGFDb250YWluZXJJbnRlcmZhY2UsIGdldFNhbXBsZURhdGF9IGZyb20gJ0BrZXBsZXIuZ2wvdXRpbHMnO1xuaW1wb3J0IHtBTExfRklFTERfVFlQRVN9IGZyb20gJ0BrZXBsZXIuZ2wvY29uc3RhbnRzJztcbmltcG9ydCB7TGF5ZXJDb2x1bW5zLCBQcm90b0RhdGFzZXRGaWVsZH0gZnJvbSAnQGtlcGxlci5nbC90eXBlcyc7XG5pbXBvcnQge0tlcGxlclRhYmxlfSBmcm9tICdAa2VwbGVyLmdsL3RhYmxlJztcblxuaW1wb3J0IHtHZW9qc29uTGF5ZXJNZXRhUHJvcHMsIGFzc2lnblBvaW50UGFpclRvTGF5ZXJDb2x1bW59IGZyb20gJy4uL2xheWVyLXV0aWxzJztcbmltcG9ydCB7TGF5ZXJCYXNlQ29uZmlnfSBmcm9tICcuLi9iYXNlLWxheWVyJztcblxuZXhwb3J0IHR5cGUgR2V0RmVhdHVyZSA9IChkOiBhbnkpID0+IEZlYXR1cmU7XG5leHBvcnQgdHlwZSBHZW9qc29uRGF0YU1hcHMgPSAoRmVhdHVyZSB8IEJpbmFyeUZlYXR1cmVDb2xsZWN0aW9uIHwgbnVsbClbXTtcbmV4cG9ydCB0eXBlIEdlb2pzb25Qb2ludERhdGFNYXBzID0gKG51bWJlcltdIHwgbnVtYmVyW11bXSB8IG51bGwpW107XG5cbmV4cG9ydCBjb25zdCBDT0xVTU5fTU9ERV9HRU9KU09OID0gJ2dlb2pzb24nO1xuXG4vKiBlc2xpbnQtZGlzYWJsZSAqL1xuLy8gVE9ETzogUmUtZW5hYmxlIGVzbGludCB3aGVuIHdlIHVwZ3JhZGUgdG8gaGFuZGxlIGVudW1zIGFuZCB0eXBlIG1hcHNcbmV4cG9ydCBlbnVtIEZlYXR1cmVUeXBlcyB7XG4gIFBvaW50ID0gJ1BvaW50JyxcbiAgTXVsdGlQb2ludCA9ICdNdWx0aVBvaW50JyxcbiAgTGluZVN0cmluZyA9ICdMaW5lU3RyaW5nJyxcbiAgTXVsdGlMaW5lU3RyaW5nID0gJ011bHRpTGluZVN0cmluZycsXG4gIFBvbHlnb24gPSAnUG9seWdvbicsXG4gIE11bHRpUG9seWdvbiA9ICdNdWx0aVBvbHlnb24nXG59XG5cbi8vIEB0cy1leHBlY3QtZXJyb3IgcmV0dXJuIHR5cGUgb2YgZ2V0R2VvanNvbkZlYXR1cmVUeXBlcyA/XG50eXBlIEZlYXR1cmVUeXBlTWFwID0ge1xuICBba2V5IGluIEZlYXR1cmVUeXBlc106IGJvb2xlYW47XG59O1xuXG4vKiBlc2xpbnQtZW5hYmxlICovXG5cbi8qKlxuICogUmV0dXJucyB0cnVlIGlmIHRoZSBmaWVsZCBoYXMgZ2VvYXJyb3cgZXh0ZW5zaW9uLlxuICogQHBhcmFtIGdlb0ZpZWxkIEEgZmllbGQgdG8gdGVzdC5cbiAqIEByZXR1cm5zXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBmaWVsZElzR2VvQXJyb3coZ2VvRmllbGQ/OiBQcm90b0RhdGFzZXRGaWVsZCB8IG51bGwpOiBib29sZWFuIHtcbiAgcmV0dXJuIEJvb2xlYW4oZ2VvRmllbGQ/Lm1ldGFkYXRhPy5nZXQoJ0FSUk9XOmV4dGVuc2lvbjpuYW1lJykpO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gcGFyc2VHZW9Kc29uUmF3RmVhdHVyZShyYXdGZWF0dXJlOiB1bmtub3duKTogRmVhdHVyZSB8IG51bGwge1xuICBjb25zdCBwcm9wZXJ0aWVzID0gbnVsbDsgLy8gaGVscCBlbnN1cmUgdGhhdCBwcm9wZXJ0aWVzIGlzIHByZXNlbnQgb24gdGhlIHJldHVybmVkIGdlb2pzb24gZmVhdHVyZVxuICAvLyBTdXBwb3J0IFdLQiBnZW9tZXRyeSBwcm92aWRlZCBhcyBiaW5hcnkgKGUuZy4sIGZyb20gUGFycXVldC9HZW9QYXJxdWV0KVxuICBpZiAocmF3RmVhdHVyZSBpbnN0YW5jZW9mIFVpbnQ4QXJyYXkgfHwgcmF3RmVhdHVyZSBpbnN0YW5jZW9mIEFycmF5QnVmZmVyKSB7XG4gICAgdHJ5IHtcbiAgICAgIGNvbnN0IGJpbmFyeUlucHV0ID1cbiAgICAgICAgcmF3RmVhdHVyZSBpbnN0YW5jZW9mIEFycmF5QnVmZmVyXG4gICAgICAgICAgPyByYXdGZWF0dXJlXG4gICAgICAgICAgOiAocmF3RmVhdHVyZSBhcyBVaW50OEFycmF5KS5idWZmZXIuc2xpY2UoXG4gICAgICAgICAgICAgIChyYXdGZWF0dXJlIGFzIFVpbnQ4QXJyYXkpLmJ5dGVPZmZzZXQsXG4gICAgICAgICAgICAgIChyYXdGZWF0dXJlIGFzIFVpbnQ4QXJyYXkpLmJ5dGVPZmZzZXQgKyAocmF3RmVhdHVyZSBhcyBVaW50OEFycmF5KS5ieXRlTGVuZ3RoXG4gICAgICAgICAgICApO1xuICAgICAgY29uc3QgYmluYXJ5R2VvID0gcGFyc2VTeW5jKGJpbmFyeUlucHV0IGFzIEFycmF5QnVmZmVyLCBXS0JMb2FkZXIpO1xuICAgICAgLy8gQHRzLWV4cGVjdC1lcnJvciBsb2FkZXJzLmdsIGJpbmFyeSB0eXBlIHRvIEdlb0pTT04gZ2VvbWV0cnlcbiAgICAgIGNvbnN0IHBhcnNlZEdlbyA9IGJpbmFyeVRvR2VvbWV0cnkoYmluYXJ5R2VvKTtcbiAgICAgIGNvbnN0IG5vcm1hbGl6ZWQgPSBub3JtYWxpemUocGFyc2VkR2VvKTtcbiAgICAgIGlmICghbm9ybWFsaXplZCB8fCAhQXJyYXkuaXNBcnJheShub3JtYWxpemVkLmZlYXR1cmVzKSB8fCAhbm9ybWFsaXplZC5mZWF0dXJlcy5sZW5ndGgpIHtcbiAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgICB9XG4gICAgICByZXR1cm4ge3Byb3BlcnRpZXMsIC4uLm5vcm1hbGl6ZWQuZmVhdHVyZXNbMF19O1xuICAgIH0gY2F0Y2ggKGUpIHtcbiAgICAgIHJldHVybiBudWxsO1xuICAgIH1cbiAgfVxuICBpZiAodHlwZW9mIHJhd0ZlYXR1cmUgPT09ICdvYmplY3QnKSB7XG4gICAgLy8gU3VwcG9ydCBHZW9Kc29uIGZlYXR1cmUgYXMgb2JqZWN0XG4gICAgLy8gcHJvYmFibHkgbmVlZCB0byBub3JtYWxpemUgaXQgYXMgd2VsbFxuICAgIGNvbnN0IG5vcm1hbGl6ZWQgPSBub3JtYWxpemUocmF3RmVhdHVyZSk7XG4gICAgaWYgKCFub3JtYWxpemVkIHx8ICFBcnJheS5pc0FycmF5KG5vcm1hbGl6ZWQuZmVhdHVyZXMpKSB7XG4gICAgICAvLyBmYWlsIHRvIG5vcm1hbGl6ZSBHZW9Kc29uXG4gICAgICByZXR1cm4gbnVsbDtcbiAgICB9XG5cbiAgICByZXR1cm4ge3Byb3BlcnRpZXMsIC4uLm5vcm1hbGl6ZWQuZmVhdHVyZXNbMF19O1xuICB9IGVsc2UgaWYgKHR5cGVvZiByYXdGZWF0dXJlID09PSAnc3RyaW5nJykge1xuICAgIGNvbnN0IHBhcnNlZEdlb21ldHJ5ID0gcGFyc2VHZW9tZXRyeUZyb21TdHJpbmcocmF3RmVhdHVyZSk7XG4gICAgaWYgKCFwYXJzZWRHZW9tZXRyeSkgcmV0dXJuIG51bGw7XG4gICAgLy8gQHRzLWV4cGVjdC1lcnJvciB2ZXJpZnkgd2hldGhlciBwYXJzZWRHZW9tZXRyeSBhbHdheXMgY29udGFpbnMgcHJvcGVydGllc1xuICAgIHJldHVybiB7cHJvcGVydGllcywgLi4ucGFyc2VkR2VvbWV0cnl9O1xuICB9IGVsc2UgaWYgKEFycmF5LmlzQXJyYXkocmF3RmVhdHVyZSkpIHtcbiAgICAvLyBTdXBwb3J0IEdlb0pzb24gIExpbmVTdHJpbmcgYXMgYW4gYXJyYXkgb2YgcG9pbnRzXG4gICAgcmV0dXJuIHtcbiAgICAgIHR5cGU6ICdGZWF0dXJlJyxcbiAgICAgIGdlb21ldHJ5OiB7XG4gICAgICAgIC8vIHdoeSBkbyB3ZSBuZWVkIHRvIGZsaXAgaXQuLi5cbiAgICAgICAgY29vcmRpbmF0ZXM6IHJhd0ZlYXR1cmUubWFwKHB0cyA9PiBbcHRzWzFdLCBwdHNbMF1dKSxcbiAgICAgICAgdHlwZTogJ0xpbmVTdHJpbmcnXG4gICAgICB9LFxuICAgICAgcHJvcGVydGllc1xuICAgIH07XG4gIH1cblxuICByZXR1cm4gbnVsbDtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGdldEdlb2pzb25MYXllck1ldGEoe1xuICBkYXRhQ29udGFpbmVyLFxuICBnZXRGZWF0dXJlLFxuICBjb25maWdcbn06IHtcbiAgZGF0YUNvbnRhaW5lcjogRGF0YUNvbnRhaW5lckludGVyZmFjZTtcbiAgZ2V0RmVhdHVyZTogR2V0RmVhdHVyZTtcbiAgY29uZmlnOiBMYXllckJhc2VDb25maWc7XG59KTogR2VvanNvbkxheWVyTWV0YVByb3BzIHtcbiAgY29uc3QgZGF0YVRvRmVhdHVyZSA9XG4gICAgY29uZmlnLmNvbHVtbk1vZGUgPT09IENPTFVNTl9NT0RFX0dFT0pTT05cbiAgICAgID8gZ2V0R2VvanNvbkRhdGFNYXBzKGRhdGFDb250YWluZXIsIGdldEZlYXR1cmUpXG4gICAgICA6IC8vIENPTFVNTl9NT0RFX1RBQkxFXG4gICAgICAgIGdyb3VwQ29sdW1uc0FzR2VvSnNvbihkYXRhQ29udGFpbmVyLCBjb25maWcuY29sdW1ucywgJ3NvcnRCeScpO1xuXG4gIC8vIGdldCBib3VuZHMgZnJvbSBmZWF0dXJlc1xuICBjb25zdCBib3VuZHMgPSBnZXRHZW9qc29uQm91bmRzKGRhdGFUb0ZlYXR1cmUpO1xuICAvLyBpZiBhbnkgb2YgdGhlIGZlYXR1cmUgaGFzIHByb3BlcnRpZXMucmFkaXVzIHNldCB0byBiZSB0cnVlXG4gIGNvbnN0IGZpeGVkUmFkaXVzID0gQm9vbGVhbihcbiAgICBkYXRhVG9GZWF0dXJlLmZpbmQoZCA9PiBkICYmICdwcm9wZXJ0aWVzJyBpbiBkICYmIGQucHJvcGVydGllcz8ucmFkaXVzKVxuICApO1xuXG4gIC8vIGtlZXAgYSByZWNvcmQgb2Ygd2hhdCB0eXBlIG9mIGdlb21ldHJ5IHRoZSBjb2xsZWN0aW9uIGhhc1xuICBjb25zdCBmZWF0dXJlVHlwZXMgPSBnZXRHZW9qc29uRmVhdHVyZVR5cGVzKGRhdGFUb0ZlYXR1cmUpO1xuXG4gIGNvbnN0IG1lYW5DZW50ZXJzOiBBcnJheTxudW1iZXJbXSB8IG51bGw+ID0gW107XG4gIGZvciAobGV0IGkgPSAwOyBpIDwgZGF0YVRvRmVhdHVyZS5sZW5ndGg7IGkrKykge1xuICAgIGNvbnN0IGZlYXR1cmUgPSBkYXRhVG9GZWF0dXJlW2ldO1xuICAgIGlmIChmZWF0dXJlKSB7XG4gICAgICB0cnkge1xuICAgICAgICAvLyBUT0RPOiB1c2UgbGluZSBpbnRlcnBvbGF0ZSB0byBnZXQgY2VudGVyIG9mIGxpbmUgZm9yIExpbmVTdHJpbmdcbiAgICAgICAgY29uc3QgY2VudCA9IGNlbnRlcihmZWF0dXJlIGFzIEFsbEdlb0pTT04pO1xuICAgICAgICBtZWFuQ2VudGVycy5wdXNoKGNlbnQuZ2VvbWV0cnkuY29vcmRpbmF0ZXMpO1xuICAgICAgfSBjYXRjaCAoZSkge1xuICAgICAgICBtZWFuQ2VudGVycy5wdXNoKG51bGwpO1xuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIHJldHVybiB7XG4gICAgZGF0YVRvRmVhdHVyZSxcbiAgICBib3VuZHMsXG4gICAgZml4ZWRSYWRpdXMsXG4gICAgZmVhdHVyZVR5cGVzLFxuICAgIGNlbnRyb2lkczogbWVhbkNlbnRlcnNcbiAgfTtcbn1cblxuLyoqXG4gKiBQYXJzZSByYXcgZGF0YSB0byBHZW9Kc29uIGZlYXR1cmVcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGdldEdlb2pzb25EYXRhTWFwcyhcbiAgZGF0YUNvbnRhaW5lcjogRGF0YUNvbnRhaW5lckludGVyZmFjZSxcbiAgZ2V0RmVhdHVyZTogR2V0RmVhdHVyZVxuKTogR2VvanNvbkRhdGFNYXBzIHtcbiAgY29uc3QgYWNjZXB0YWJsZVR5cGVzID0gW1xuICAgICdQb2ludCcsXG4gICAgJ011bHRpUG9pbnQnLFxuICAgICdMaW5lU3RyaW5nJyxcbiAgICAnTXVsdGlMaW5lU3RyaW5nJyxcbiAgICAnUG9seWdvbicsXG4gICAgJ011bHRpUG9seWdvbicsXG4gICAgJ0dlb21ldHJ5Q29sbGVjdGlvbidcbiAgXTtcblxuICBjb25zdCBkYXRhVG9GZWF0dXJlOiBHZW9qc29uRGF0YU1hcHMgPSBbXTtcblxuICBmb3IgKGxldCBpbmRleCA9IDA7IGluZGV4IDwgZGF0YUNvbnRhaW5lci5udW1Sb3dzKCk7IGluZGV4KyspIHtcbiAgICBjb25zdCBmZWF0dXJlID0gcGFyc2VHZW9Kc29uUmF3RmVhdHVyZShnZXRGZWF0dXJlKHtpbmRleH0pKTtcblxuICAgIGlmIChmZWF0dXJlICYmIGZlYXR1cmUuZ2VvbWV0cnkgJiYgYWNjZXB0YWJsZVR5cGVzLmluY2x1ZGVzKGZlYXR1cmUuZ2VvbWV0cnkudHlwZSkpIHtcbiAgICAgIGNvbnN0IGNsZWFuZWQgPSB7XG4gICAgICAgIC4uLmZlYXR1cmUsXG4gICAgICAgIC8vIHN0b3JlIGluZGV4IG9mIHRoZSBkYXRhIGluIGZlYXR1cmUgcHJvcGVydGllc1xuICAgICAgICBwcm9wZXJ0aWVzOiB7XG4gICAgICAgICAgLi4uZmVhdHVyZS5wcm9wZXJ0aWVzLFxuICAgICAgICAgIGluZGV4XG4gICAgICAgIH1cbiAgICAgIH07XG5cbiAgICAgIGRhdGFUb0ZlYXR1cmVbaW5kZXhdID0gY2xlYW5lZDtcbiAgICB9IGVsc2Uge1xuICAgICAgZGF0YVRvRmVhdHVyZVtpbmRleF0gPSBudWxsO1xuICAgIH1cbiAgfVxuXG4gIHJldHVybiBkYXRhVG9GZWF0dXJlO1xufVxuXG4vKipcbiAqIFBhcnNlIHJhdyBkYXRhIHRvIEdlb0pzb24gcG9pbnQgZmVhdHVyZSBjb29yZGluYXRlc1xuICovXG5leHBvcnQgZnVuY3Rpb24gZ2V0R2VvanNvblBvaW50RGF0YU1hcHMoXG4gIGRhdGFDb250YWluZXI6IERhdGFDb250YWluZXJJbnRlcmZhY2UsXG4gIGdldEZlYXR1cmU6IEdldEZlYXR1cmVcbik6IEdlb2pzb25Qb2ludERhdGFNYXBzIHtcbiAgY29uc3QgYWNjZXB0YWJsZVR5cGVzID0gWydQb2ludCcsICdNdWx0aVBvaW50JywgJ0dlb21ldHJ5Q29sbGVjdGlvbiddO1xuXG4gIGNvbnN0IGRhdGFUb0ZlYXR1cmU6IEdlb2pzb25Qb2ludERhdGFNYXBzID0gW107XG5cbiAgZm9yIChsZXQgaW5kZXggPSAwOyBpbmRleCA8IGRhdGFDb250YWluZXIubnVtUm93cygpOyBpbmRleCsrKSB7XG4gICAgY29uc3QgZmVhdHVyZSA9IHBhcnNlR2VvSnNvblJhd0ZlYXR1cmUoZ2V0RmVhdHVyZShkYXRhQ29udGFpbmVyLnJvd0FzQXJyYXkoaW5kZXgpKSk7XG5cbiAgICBpZiAoZmVhdHVyZSAmJiBmZWF0dXJlLmdlb21ldHJ5ICYmIGFjY2VwdGFibGVUeXBlcy5pbmNsdWRlcyhmZWF0dXJlLmdlb21ldHJ5LnR5cGUpKSB7XG4gICAgICBkYXRhVG9GZWF0dXJlW2luZGV4XSA9XG4gICAgICAgIGZlYXR1cmUuZ2VvbWV0cnkudHlwZSA9PT0gJ1BvaW50JyB8fCBmZWF0dXJlLmdlb21ldHJ5LnR5cGUgPT09ICdNdWx0aVBvaW50J1xuICAgICAgICAgID8gZmVhdHVyZS5nZW9tZXRyeS5jb29yZGluYXRlc1xuICAgICAgICAgIDogLy8gQHRzLWV4cGVjdC1lcnJvciBQcm9wZXJ0eSAnZ2VvbWV0cmllcycgZG9lcyBub3QgZXhpc3Qgb24gdHlwZSAnTGluZVN0cmluZydcbiAgICAgICAgICAgIChmZWF0dXJlLmdlb21ldHJ5Lmdlb21ldHJpZXMgfHwgW10pLnJlZHVjZSgoYWNjdSwgZikgPT4ge1xuICAgICAgICAgICAgICBpZiAoZi50eXBlID09PSAnUG9pbnQnKSB7XG4gICAgICAgICAgICAgICAgYWNjdS5wdXNoKGYuY29vcmRpbmF0ZXMpO1xuICAgICAgICAgICAgICB9IGVsc2UgaWYgKGYudHlwZSA9PT0gJ011bHRpUG9pbnQnKSB7XG4gICAgICAgICAgICAgICAgYWNjdS5wdXNoKC4uLmYuY29vcmRpbmF0ZXMpO1xuICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgcmV0dXJuIGFjY3U7XG4gICAgICAgICAgICB9LCBbXSk7XG4gICAgfSBlbHNlIHtcbiAgICAgIGRhdGFUb0ZlYXR1cmVbaW5kZXhdID0gbnVsbDtcbiAgICB9XG4gIH1cblxuICByZXR1cm4gZGF0YVRvRmVhdHVyZTtcbn1cblxuLyoqXG4gKiBQYXJzZSBnZW9qc29uIGZyb20gc3RyaW5nXG4gKiBAcGFyYW0ge1N0cmluZ30gZ2VvU3RyaW5nXG4gKiBAcmV0dXJucyB7bnVsbCB8IE9iamVjdH0gZ2VvanNvbiBvYmplY3Qgb3IgbnVsbCBpZiBmYWlsZWRcbiAqL1xuZnVuY3Rpb24gcGFyc2VHZW9tZXRyeUZyb21TdHJpbmcoZ2VvU3RyaW5nOiBzdHJpbmcpOiBGZWF0dXJlIHwgbnVsbCB7XG4gIGxldCBwYXJzZWRHZW87XG5cbiAgLy8gdHJ5IHBhcnNlIGFzIGdlb2pzb24gc3RyaW5nXG4gIC8vIHtcInR5cGVcIjpcIlBvbHlnb25cIixcImNvb3JkaW5hdGVzXCI6W1tbLTc0LjE1ODQ5MSw0MC44MzU5NF1dXX1cbiAgdHJ5IHtcbiAgICBwYXJzZWRHZW8gPSBKU09OLnBhcnNlKGdlb1N0cmluZyk7XG4gIH0gY2F0Y2ggKGUpIHtcbiAgICAvLyBrZWVwIHRyeWluZyB0byBwYXJzZVxuICB9XG5cbiAgLy8gdHJ5IHBhcnNlIGFzIHdrdCB1c2luZyBsb2FkZXJzLmdsIFdLVExvYWRlclxuICBpZiAoIXBhcnNlZEdlbykge1xuICAgIHRyeSB7XG4gICAgICBwYXJzZWRHZW8gPSBwYXJzZVN5bmMoZ2VvU3RyaW5nLCBXS1RMb2FkZXIpO1xuICAgIH0gY2F0Y2ggKGUpIHtcbiAgICAgIHJldHVybiBudWxsO1xuICAgIH1cbiAgfVxuXG4gIC8vIHRyeSBwYXJzZSBhcyB3a2IgdXNpbmcgbG9hZGVycy5nbCBXS0JMb2FkZXJcbiAgaWYgKCFwYXJzZWRHZW8pIHtcbiAgICB0cnkge1xuICAgICAgY29uc3QgYnVmZmVyID0gQnVmZmVyLmZyb20oZ2VvU3RyaW5nLCAnaGV4Jyk7XG4gICAgICBjb25zdCBiaW5hcnlHZW8gPSBwYXJzZVN5bmMoYnVmZmVyLCBXS0JMb2FkZXIpO1xuICAgICAgLy8gQHRzLWV4cGVjdC1lcnJvclxuICAgICAgcGFyc2VkR2VvID0gYmluYXJ5VG9HZW9tZXRyeShiaW5hcnlHZW8pO1xuICAgIH0gY2F0Y2ggKGUpIHtcbiAgICAgIHJldHVybiBudWxsO1xuICAgIH1cbiAgfVxuXG4gIGlmICghcGFyc2VkR2VvKSB7XG4gICAgcmV0dXJuIG51bGw7XG4gIH1cblxuICBjb25zdCBub3JtYWxpemVkID0gbm9ybWFsaXplKHBhcnNlZEdlbyk7XG5cbiAgaWYgKCFub3JtYWxpemVkIHx8ICFBcnJheS5pc0FycmF5KG5vcm1hbGl6ZWQuZmVhdHVyZXMpKSB7XG4gICAgLy8gZmFpbCB0byBub3JtYWxpemUgZ2VvanNvblxuICAgIHJldHVybiBudWxsO1xuICB9XG5cbiAgcmV0dXJuIG5vcm1hbGl6ZWQuZmVhdHVyZXNbMF07XG59XG5cbi8qKlxuICogR2V0IGdlb2pzb24gYm91bmRzXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBnZXRHZW9qc29uQm91bmRzKGZlYXR1cmVzOiBHZW9qc29uRGF0YU1hcHMgPSBbXSk6IEJCb3ggfCBudWxsIHtcbiAgLy8gNzAgbXMgZm9yIDEwLDAwMCBwb2x5Z29uc1xuICAvLyBoZXJlIHdlIG9ubHkgcGljayBjb3VwbGVcbiAgY29uc3QgbWF4Q291bnQgPSAxMDAwMDtcbiAgY29uc3Qgc2FtcGxlcyA9IGZlYXR1cmVzLmxlbmd0aCA+IG1heENvdW50ID8gZ2V0U2FtcGxlRGF0YShmZWF0dXJlcywgbWF4Q291bnQpIDogZmVhdHVyZXM7XG5cbiAgY29uc3QgdmFsaWRTaW5nbGVHZW9tZXRyeSA9IGdlb20gPT4gZ2VvbS5jb29yZGluYXRlcyAmJiBnZW9tLmNvb3JkaW5hdGVzLmxlbmd0aDtcbiAgY29uc3QgdmFsaWRHZW9tZXRyeUNvbGxlY3Rpb24gPSBnZW9tID0+XG4gICAgZ2VvbS5nZW9tZXRyaWVzICYmIGdlb20uZ2VvbWV0cmllcy5sZW5ndGggJiYgZ2VvbS5nZW9tZXRyaWVzLmV2ZXJ5KHZhbGlkU2luZ2xlR2VvbWV0cnkpO1xuICBjb25zdCBub25FbXB0eSA9IHNhbXBsZXMuZmlsdGVyKFxuICAgIGQgPT4gZCAmJiBkLmdlb21ldHJ5ICYmICh2YWxpZFNpbmdsZUdlb21ldHJ5KGQuZ2VvbWV0cnkpIHx8IHZhbGlkR2VvbWV0cnlDb2xsZWN0aW9uKGQuZ2VvbWV0cnkpKVxuICApO1xuXG4gIHRyeSB7XG4gICAgcmV0dXJuIGJib3goe1xuICAgICAgdHlwZTogJ0ZlYXR1cmVDb2xsZWN0aW9uJyxcbiAgICAgIGZlYXR1cmVzOiBub25FbXB0eVxuICAgIH0pO1xuICB9IGNhdGNoIChlKSB7XG4gICAgcmV0dXJuIG51bGw7XG4gIH1cbn1cblxuZXhwb3J0IGNvbnN0IGZlYXR1cmVUb0RlY2tHbEdlb1R5cGUgPSB7XG4gIFBvaW50OiAncG9pbnQnLFxuICBNdWx0aVBvaW50OiAncG9pbnQnLFxuICBMaW5lU3RyaW5nOiAnbGluZScsXG4gIE11bHRpTGluZVN0cmluZzogJ2xpbmUnLFxuICBQb2x5Z29uOiAncG9seWdvbicsXG4gIE11bHRpUG9seWdvbjogJ3BvbHlnb24nXG59O1xuXG5leHBvcnQgdHlwZSBEZWNrR2xHZW9UeXBlcyA9IHtcbiAgcG9pbnQ6IGJvb2xlYW47XG4gIGxpbmU6IGJvb2xlYW47XG4gIHBvbHlnb246IGJvb2xlYW47XG59O1xuXG4vKipcbiAqIFBhcnNlIGdlb2pzb24gZnJvbSBzdHJpbmdcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGdldEdlb2pzb25GZWF0dXJlVHlwZXMoYWxsRmVhdHVyZXM6IEdlb2pzb25EYXRhTWFwcyk6IERlY2tHbEdlb1R5cGVzIHtcbiAgLy8gQHRzLWV4cGVjdC1lcnJvciBzb21lIHRlc3QgY2FzZXMgb25seSBoYXZlIDEgZ2VvdHlwZVxuICBjb25zdCBmZWF0dXJlVHlwZXM6IERlY2tHbEdlb1R5cGVzID0ge307XG4gIGZvciAobGV0IGYgPSAwOyBmIDwgYWxsRmVhdHVyZXMubGVuZ3RoOyBmKyspIHtcbiAgICBjb25zdCBmZWF0dXJlID0gYWxsRmVhdHVyZXNbZl07XG4gICAgaWYgKGZlYXR1cmUgJiYgJ2dlb21ldHJ5JyBpbiBmZWF0dXJlKSB7XG4gICAgICBjb25zdCBnZW9UeXBlID0gZmVhdHVyZVRvRGVja0dsR2VvVHlwZVtmZWF0dXJlLmdlb21ldHJ5ICYmIGZlYXR1cmUuZ2VvbWV0cnkudHlwZV07XG4gICAgICBpZiAoZ2VvVHlwZSkge1xuICAgICAgICBmZWF0dXJlVHlwZXNbZ2VvVHlwZV0gPSB0cnVlO1xuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIHJldHVybiBmZWF0dXJlVHlwZXM7XG59XG5cbnR5cGUgQ29vcmRzVHlwZSA9IFtudW1iZXIsIG51bWJlciwgbnVtYmVyLCBudW1iZXIgfCBudWxsXSAmIHtcbiAgZGF0dW1JbmRleDogbnVtYmVyO1xuICBkYXR1bTogbnVtYmVyW107XG59O1xuXG5leHBvcnQgZnVuY3Rpb24gZ3JvdXBDb2x1bW5zQXNHZW9Kc29uKFxuICBkYXRhQ29udGFpbmVyOiBEYXRhQ29udGFpbmVySW50ZXJmYWNlLFxuICBjb2x1bW5zOiBMYXllckNvbHVtbnMsXG4gIHNvcnRCeUNvbHVtbiA9ICd0aW1lc3RhbXAnXG4pOiBGZWF0dXJlW10ge1xuICBjb25zdCBncm91cGVkQnlJZDoge1trZXk6IHN0cmluZ106IENvb3Jkc1R5cGVbXX0gPSB7fTtcbiAgY29uc3Qgc29ydEJ5RmllbGRJZHggPSBjb2x1bW5zW3NvcnRCeUNvbHVtbl0uZmllbGRJZHg7XG4gIGNvbnN0IHNvcnRCeVJlcXVpcmVkID0gIWNvbHVtbnNbc29ydEJ5Q29sdW1uXS5vcHRpb25hbDtcbiAgZm9yIChsZXQgaW5kZXggPSAwOyBpbmRleCA8IGRhdGFDb250YWluZXIubnVtUm93cygpOyBpbmRleCsrKSB7XG4gICAgLy8gbm90ZTogY2FuIG1hdGVyaWFsaXplIHRoZSByb3dcbiAgICBjb25zdCBkYXR1bSA9IGRhdGFDb250YWluZXIucm93QXNBcnJheShpbmRleCk7XG4gICAgY29uc3QgaWQgPSBkYXR1bVtjb2x1bW5zLmlkLmZpZWxkSWR4XTtcbiAgICBjb25zdCBsYXQgPSBkYXR1bVtjb2x1bW5zLmxhdC5maWVsZElkeF07XG4gICAgY29uc3QgbG9uID0gZGF0dW1bY29sdW1ucy5sbmcuZmllbGRJZHhdO1xuICAgIGNvbnN0IGFsdGl0dWRlID0gY29sdW1ucy5hbHRpdHVkZSA/IGRhdHVtW2NvbHVtbnMuYWx0aXR1ZGUuZmllbGRJZHhdIDogMDtcbiAgICBjb25zdCBzb3J0QnkgPSBzb3J0QnlGaWVsZElkeCA+IC0xID8gZGF0dW1bc29ydEJ5RmllbGRJZHhdIDogbnVsbDtcbiAgICAvLyBAdHMtZXhwZWN0LWVycm9yXG4gICAgY29uc3QgY29vcmRzOiBDb29yZHNUeXBlID0gW2xvbiwgbGF0LCBhbHRpdHVkZSwgc29ydEJ5XTtcbiAgICAvLyBBZGRpbmcgcmVmZXJlbmNlcyB0byB0aGUgb3JpZ2luYWwgZGF0YSB0byB0aGUgY29vcmRpbmF0ZXMgYXJyYXlcbiAgICBjb29yZHMuZGF0dW1JbmRleCA9IGluZGV4O1xuICAgIGNvb3Jkcy5kYXR1bSA9IGRhdHVtO1xuICAgIGlmICghZ3JvdXBlZEJ5SWRbaWRdKSBncm91cGVkQnlJZFtpZF0gPSBbXTtcblxuICAgIGlmIChcbiAgICAgIE51bWJlci5pc0Zpbml0ZShsb24pICYmXG4gICAgICBOdW1iZXIuaXNGaW5pdGUobGF0KSAmJlxuICAgICAgKCFzb3J0QnlSZXF1aXJlZCB8fCAoc29ydEJ5UmVxdWlyZWQgJiYgc29ydEJ5KSlcbiAgICApIHtcbiAgICAgIC8vIG9ubHkgcHVzaCBwb2ludHMgaWYgbGF0LGxuZyxhbmQgc29ydGJ5IGV4aXN0XG4gICAgICBncm91cGVkQnlJZFtpZF0ucHVzaChjb29yZHMpO1xuICAgIH1cbiAgfVxuXG4gIGNvbnN0IHJlc3VsdDogRmVhdHVyZVtdID0gT2JqZWN0LmVudHJpZXMoZ3JvdXBlZEJ5SWQpLm1hcChcbiAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgQHR5cGVzY3JpcHQtZXNsaW50L25vLXVudXNlZC12YXJzXG4gICAgKFtfLCBpdGVtc106IFtzdHJpbmcsIENvb3Jkc1R5cGVbXV0sIGluZGV4KSA9PiAoe1xuICAgICAgdHlwZTogJ0ZlYXR1cmUnIGFzIGNvbnN0LFxuICAgICAgZ2VvbWV0cnk6IHtcbiAgICAgICAgdHlwZTogJ0xpbmVTdHJpbmcnIGFzIGNvbnN0LFxuICAgICAgICAvLyBTb3J0IGJ5IGNvbHVtbnMgaWYgaGFzIHNvcnRCeUZpZWxkXG4gICAgICAgIC8vIFRPRE86IGl0ZW1zIGFyZSBleHBlY3RlZCBpbiBQb3NpdGlvbltdIGZvcm1hdD9cbiAgICAgICAgY29vcmRpbmF0ZXM6IChzb3J0QnlGaWVsZElkeCA+IC0xXG4gICAgICAgICAgPyBpdGVtcy5zb3J0KChhLCBiKSA9PiBhc2NlbmRpbmcoYVszXSBhcyBhbnksIGJbM10gYXMgYW55KSlcbiAgICAgICAgICA6IGl0ZW1zKSBhcyBQb3NpdGlvbltdXG4gICAgICB9LFxuICAgICAgcHJvcGVydGllczoge1xuICAgICAgICBpbmRleCxcbiAgICAgICAgLy8gdmFsdWVzIGFyZSB1c2VkIGZvciB2YWx1ZUFjY2Vzc29yIGluIFRyaXBMYXllci5mb3JtYXRMYXllckRhdGEoKVxuICAgICAgICAvLyBOb3RlOiB0aGlzIGNhbiBjYXVzZSByb3cgbWF0ZXJpYWxpemF0aW9uIGluIGNhc2Ugb2Ygbm9uLXJvdyBiYXNlZCBjb250YWluZXJzXG4gICAgICAgIHZhbHVlczogaXRlbXMubWFwKGl0ZW0gPT4gZGF0YUNvbnRhaW5lci5yb3dBc0FycmF5KGl0ZW0uZGF0dW1JbmRleCkpXG4gICAgICB9XG4gICAgfSlcbiAgKTtcbiAgcmV0dXJuIHJlc3VsdDtcbn1cblxuLyoqXG4gKiBGaW5kIGlkIC8gdHMgLyBsYXQgLyBsbmcgY29sdW1ucyBmcm9tIGEgdGFibGUgYW5kIGFzc2lnbiBpdCB0byBsYXllciBjb2x1bW5zXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBkZXRlY3RUYWJsZUNvbHVtbnMoXG4gIGRhdGFzZXQ6IEtlcGxlclRhYmxlLFxuICBsYXllckNvbHVtbnM6IExheWVyQ29sdW1ucyxcbiAgc29ydEJ5ID0gJ3RpbWVzdGFtcCdcbikge1xuICBjb25zdCB7ZmllbGRzLCBmaWVsZFBhaXJzfSA9IGRhdGFzZXQ7XG4gIGlmICghZmllbGRQYWlycy5sZW5ndGggfHwgIWZpZWxkcy5sZW5ndGgpIHtcbiAgICByZXR1cm4gbnVsbDtcbiAgfVxuICAvLyBmaW5kIHNvcnQgYnkgZmllbGRcbiAgY29uc3Qgc29ydEJ5RmllbGRJZHggPSBmaWVsZHMuZmluZEluZGV4KGYgPT4gZi50eXBlID09PSBBTExfRklFTERfVFlQRVMudGltZXN0YW1wKTtcbiAgLy8gZmluZCBpZCBjb2x1bW5cbiAgY29uc3QgaWRGaWVsZElkeCA9IGZpZWxkcy5maW5kSW5kZXgoZiA9PiBmLm5hbWU/LnRvTG93ZXJDYXNlKCkubWF0Y2goL14oaWR8dXVpZCkkL2cpKTtcblxuICBpZiAoc29ydEJ5RmllbGRJZHggPiAtMSAmJiBpZEZpZWxkSWR4ID4gLTEpIHtcbiAgICBjb25zdCBwb2ludENvbHVtbnMgPSBhc3NpZ25Qb2ludFBhaXJUb0xheWVyQ29sdW1uKGZpZWxkUGFpcnNbMF0sIHRydWUpO1xuICAgIHJldHVybiB7XG4gICAgICBjb2x1bW5zOiB7XG4gICAgICAgIC4uLk9iamVjdC5rZXlzKGxheWVyQ29sdW1ucykucmVkdWNlKFxuICAgICAgICAgIChhY2N1LCBjb2wpID0+ICh7XG4gICAgICAgICAgICAuLi5hY2N1LFxuICAgICAgICAgICAgW2NvbF06IHBvaW50Q29sdW1uc1tjb2xdID8/IGxheWVyQ29sdW1uc1tjb2xdXG4gICAgICAgICAgfSksXG4gICAgICAgICAge31cbiAgICAgICAgKSxcbiAgICAgICAgZ2VvanNvbjoge1xuICAgICAgICAgIHZhbHVlOiBudWxsLFxuICAgICAgICAgIGZpZWxkSWR4OiAtMVxuICAgICAgICAgIC8vIG9wdGlvbmFsOiB0cnVlXG4gICAgICAgIH0sXG4gICAgICAgIGlkOiB7XG4gICAgICAgICAgdmFsdWU6IGZpZWxkc1tpZEZpZWxkSWR4XS5uYW1lLFxuICAgICAgICAgIGZpZWxkSWR4OiBpZEZpZWxkSWR4XG4gICAgICAgICAgLy8gb3B0aW9uYWw6IGZhbHNlXG4gICAgICAgIH0sXG4gICAgICAgIFtzb3J0QnldOiB7XG4gICAgICAgICAgdmFsdWU6IGZpZWxkc1tzb3J0QnlGaWVsZElkeF0ubmFtZSxcbiAgICAgICAgICBmaWVsZElkeDogc29ydEJ5RmllbGRJZHhcbiAgICAgICAgICAvLyBvcHRpb25hbDogZmFsc2VcbiAgICAgICAgfVxuICAgICAgfSxcbiAgICAgIGxhYmVsOiBmaWVsZFBhaXJzWzBdLmRlZmF1bHROYW1lXG4gICAgfTtcbiAgfVxuXG4gIHJldHVybiBudWxsO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gYXBwbHlGaWx0ZXJzVG9UYWJsZUNvbHVtbnMoXG4gIGRhdGFzZXQ6IEtlcGxlclRhYmxlLFxuICBkYXRhVG9GZWF0dXJlOiBHZW9qc29uRGF0YU1hcHNcbik6IEdlb2pzb25EYXRhTWFwcyB7XG4gIGNvbnN0IHtkYXRhQ29udGFpbmVyLCBmaWx0ZXJlZEluZGV4fSA9IGRhdGFzZXQ7XG4gIGlmIChmaWx0ZXJlZEluZGV4Lmxlbmd0aCA9PT0gZGF0YUNvbnRhaW5lci5udW1Sb3dzKCkpIHtcbiAgICAvLyBPbmx5IGFwcGx5IHRoZSBmaWx0ZXJpbmcgd2hlbiBzb21ldGhpbmcgaXMgdG8gYmUgZmlsdGVyZWQgb3V0XG4gICAgcmV0dXJuIGRhdGFUb0ZlYXR1cmU7XG4gIH1cblxuICBjb25zdCBmaWx0ZXJlZEluZGV4U2V0ID0gbmV3IFNldChmaWx0ZXJlZEluZGV4KTtcbiAgY29uc3QgZmlsdGVyZWRGZWF0dXJlczogR2VvanNvbkRhdGFNYXBzID0gW107XG4gIGZvciAoY29uc3QgZmVhdHVyZSBvZiBkYXRhVG9GZWF0dXJlKSB7XG4gICAgLy8gQHRzLWV4cGVjdC1lcnJvciBnZW9tZXRyeS5jb29yZGluYXRlcyBub3QgYXZhaWxhYmxlIGZvciBHZW9tZXRyeUNvbGxlY3Rpb25cbiAgICBjb25zdCBmaWx0ZXJlZENvb3JkcyA9IGZlYXR1cmUuZ2VvbWV0cnkuY29vcmRpbmF0ZXMuZmlsdGVyKGMgPT5cbiAgICAgIGZpbHRlcmVkSW5kZXhTZXQuaGFzKGMuZGF0dW1JbmRleClcbiAgICApO1xuICAgIGlmIChmaWx0ZXJlZENvb3Jkcy5sZW5ndGggPiAwICYmIGZlYXR1cmUpIHtcbiAgICAgIGZpbHRlcmVkRmVhdHVyZXMucHVzaCh7XG4gICAgICAgIC4uLmZlYXR1cmUsXG4gICAgICAgIGdlb21ldHJ5OiB7XG4gICAgICAgICAgLy8gQHRzLWV4cGVjdC1lcnJvciBCaW5hcnlGZWF0dXJlQ29sbGVjdGlvblxuICAgICAgICAgIC4uLmZlYXR1cmUuZ2VvbWV0cnksXG4gICAgICAgICAgY29vcmRpbmF0ZXM6IGZpbHRlcmVkQ29vcmRzXG4gICAgICAgIH0sXG4gICAgICAgIHByb3BlcnRpZXM6IHtcbiAgICAgICAgICAvLyBAdHMtZXhwZWN0LWVycm9yIEJpbmFyeUZlYXR1cmVDb2xsZWN0aW9uXG4gICAgICAgICAgLi4uZmVhdHVyZS5wcm9wZXJ0aWVzLFxuICAgICAgICAgIC8vIEB0cy1leHBlY3QtZXJyb3IgQmluYXJ5RmVhdHVyZUNvbGxlY3Rpb25cbiAgICAgICAgICB2YWx1ZXM6IGZlYXR1cmUuZ2VvbWV0cnkuY29vcmRpbmF0ZXMubWFwKGMgPT4gZGF0YUNvbnRhaW5lci5yb3dBc0FycmF5KGMuZGF0dW1JbmRleCkpXG4gICAgICAgIH1cbiAgICAgIH0pO1xuICAgIH1cbiAgfVxuICByZXR1cm4gZmlsdGVyZWRGZWF0dXJlcztcbn1cbiJdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztBQUdBLElBQUFBLE9BQUEsR0FBQUMsT0FBQTtBQUVBLElBQUFDLGlCQUFBLEdBQUFDLHNCQUFBLENBQUFGLE9BQUE7QUFDQSxJQUFBRyxLQUFBLEdBQUFELHNCQUFBLENBQUFGLE9BQUE7QUFDQSxJQUFBSSxRQUFBLEdBQUFKLE9BQUE7QUFDQSxJQUFBSyxPQUFBLEdBQUFILHNCQUFBLENBQUFGLE9BQUE7QUFFQSxJQUFBTSxLQUFBLEdBQUFOLE9BQUE7QUFDQSxJQUFBTyxJQUFBLEdBQUFQLE9BQUE7QUFDQSxJQUFBUSxJQUFBLEdBQUFSLE9BQUE7QUFFQSxJQUFBUyxNQUFBLEdBQUFULE9BQUE7QUFDQSxJQUFBVSxVQUFBLEdBQUFWLE9BQUE7QUFJQSxJQUFBVyxXQUFBLEdBQUFYLE9BQUE7QUFBbUYsU0FBQVksMkJBQUFDLENBQUEsRUFBQUMsQ0FBQSxRQUFBQyxDQUFBLHlCQUFBQyxNQUFBLElBQUFILENBQUEsQ0FBQUcsTUFBQSxDQUFBQyxRQUFBLEtBQUFKLENBQUEscUJBQUFFLENBQUEsUUFBQUcsS0FBQSxDQUFBQyxPQUFBLENBQUFOLENBQUEsTUFBQUUsQ0FBQSxHQUFBSywyQkFBQSxDQUFBUCxDQUFBLE1BQUFDLENBQUEsSUFBQUQsQ0FBQSx1QkFBQUEsQ0FBQSxDQUFBUSxNQUFBLElBQUFOLENBQUEsS0FBQUYsQ0FBQSxHQUFBRSxDQUFBLE9BQUFPLEVBQUEsTUFBQUMsQ0FBQSxZQUFBQSxFQUFBLGVBQUFDLENBQUEsRUFBQUQsQ0FBQSxFQUFBRSxDQUFBLFdBQUFBLEVBQUEsV0FBQUgsRUFBQSxJQUFBVCxDQUFBLENBQUFRLE1BQUEsS0FBQUssSUFBQSxXQUFBQSxJQUFBLE1BQUFDLEtBQUEsRUFBQWQsQ0FBQSxDQUFBUyxFQUFBLFVBQUFSLENBQUEsV0FBQUEsRUFBQUQsQ0FB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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.2.
|
|
4
|
+
"version": "3.2.2",
|
|
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.2.
|
|
40
|
-
"@kepler.gl/constants": "3.2.
|
|
41
|
-
"@kepler.gl/deckgl-arrow-layers": "3.2.
|
|
42
|
-
"@kepler.gl/deckgl-layers": "3.2.
|
|
43
|
-
"@kepler.gl/localization": "3.2.
|
|
44
|
-
"@kepler.gl/table": "3.2.
|
|
45
|
-
"@kepler.gl/types": "3.2.
|
|
46
|
-
"@kepler.gl/utils": "3.2.
|
|
39
|
+
"@kepler.gl/common-utils": "3.2.2",
|
|
40
|
+
"@kepler.gl/constants": "3.2.2",
|
|
41
|
+
"@kepler.gl/deckgl-arrow-layers": "3.2.2",
|
|
42
|
+
"@kepler.gl/deckgl-layers": "3.2.2",
|
|
43
|
+
"@kepler.gl/localization": "3.2.2",
|
|
44
|
+
"@kepler.gl/table": "3.2.2",
|
|
45
|
+
"@kepler.gl/types": "3.2.2",
|
|
46
|
+
"@kepler.gl/utils": "3.2.2",
|
|
47
47
|
"@loaders.gl/arrow": "^4.3.2",
|
|
48
48
|
"@loaders.gl/core": "^4.3.2",
|
|
49
49
|
"@loaders.gl/gis": "^4.3.2",
|
|
@@ -55,6 +55,28 @@ export function fieldIsGeoArrow(geoField?: ProtoDatasetField | null): boolean {
|
|
|
55
55
|
|
|
56
56
|
export function parseGeoJsonRawFeature(rawFeature: unknown): Feature | null {
|
|
57
57
|
const properties = null; // help ensure that properties is present on the returned geojson feature
|
|
58
|
+
// Support WKB geometry provided as binary (e.g., from Parquet/GeoParquet)
|
|
59
|
+
if (rawFeature instanceof Uint8Array || rawFeature instanceof ArrayBuffer) {
|
|
60
|
+
try {
|
|
61
|
+
const binaryInput =
|
|
62
|
+
rawFeature instanceof ArrayBuffer
|
|
63
|
+
? rawFeature
|
|
64
|
+
: (rawFeature as Uint8Array).buffer.slice(
|
|
65
|
+
(rawFeature as Uint8Array).byteOffset,
|
|
66
|
+
(rawFeature as Uint8Array).byteOffset + (rawFeature as Uint8Array).byteLength
|
|
67
|
+
);
|
|
68
|
+
const binaryGeo = parseSync(binaryInput as ArrayBuffer, WKBLoader);
|
|
69
|
+
// @ts-expect-error loaders.gl binary type to GeoJSON geometry
|
|
70
|
+
const parsedGeo = binaryToGeometry(binaryGeo);
|
|
71
|
+
const normalized = normalize(parsedGeo);
|
|
72
|
+
if (!normalized || !Array.isArray(normalized.features) || !normalized.features.length) {
|
|
73
|
+
return null;
|
|
74
|
+
}
|
|
75
|
+
return {properties, ...normalized.features[0]};
|
|
76
|
+
} catch (e) {
|
|
77
|
+
return null;
|
|
78
|
+
}
|
|
79
|
+
}
|
|
58
80
|
if (typeof rawFeature === 'object') {
|
|
59
81
|
// Support GeoJson feature as object
|
|
60
82
|
// probably need to normalize it as well
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@kepler.gl/processors",
|
|
3
3
|
"author": "Shan He <shan@uber.com>",
|
|
4
|
-
"version": "3.2.
|
|
4
|
+
"version": "3.2.2",
|
|
5
5
|
"description": "kepler.gl constants used by kepler.gl components, actions and reducers",
|
|
6
6
|
"license": "MIT",
|
|
7
7
|
"main": "dist/index.js",
|
|
@@ -31,12 +31,12 @@
|
|
|
31
31
|
],
|
|
32
32
|
"dependencies": {
|
|
33
33
|
"@danmarshall/deckgl-typings": "4.9.22",
|
|
34
|
-
"@kepler.gl/common-utils": "3.2.
|
|
35
|
-
"@kepler.gl/constants": "3.2.
|
|
36
|
-
"@kepler.gl/schemas": "3.2.
|
|
37
|
-
"@kepler.gl/table": "3.2.
|
|
38
|
-
"@kepler.gl/types": "3.2.
|
|
39
|
-
"@kepler.gl/utils": "3.2.
|
|
34
|
+
"@kepler.gl/common-utils": "3.2.2",
|
|
35
|
+
"@kepler.gl/constants": "3.2.2",
|
|
36
|
+
"@kepler.gl/schemas": "3.2.2",
|
|
37
|
+
"@kepler.gl/table": "3.2.2",
|
|
38
|
+
"@kepler.gl/types": "3.2.2",
|
|
39
|
+
"@kepler.gl/utils": "3.2.2",
|
|
40
40
|
"@loaders.gl/arrow": "^4.3.2",
|
|
41
41
|
"@loaders.gl/core": "^4.3.2",
|
|
42
42
|
"@loaders.gl/csv": "^4.3.2",
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@kepler.gl/reducers",
|
|
3
3
|
"author": "Shan He <shan@uber.com>",
|
|
4
|
-
"version": "3.2.
|
|
4
|
+
"version": "3.2.2",
|
|
5
5
|
"description": "kepler.gl constants used by kepler.gl components, actions and reducers",
|
|
6
6
|
"license": "MIT",
|
|
7
7
|
"main": "dist/index.js",
|
|
@@ -30,21 +30,21 @@
|
|
|
30
30
|
"umd"
|
|
31
31
|
],
|
|
32
32
|
"dependencies": {
|
|
33
|
-
"@kepler.gl/actions": "3.2.
|
|
34
|
-
"@kepler.gl/cloud-providers": "3.2.
|
|
35
|
-
"@kepler.gl/common-utils": "3.2.
|
|
36
|
-
"@kepler.gl/constants": "3.2.
|
|
37
|
-
"@kepler.gl/deckgl-arrow-layers": "3.2.
|
|
38
|
-
"@kepler.gl/deckgl-layers": "3.2.
|
|
39
|
-
"@kepler.gl/effects": "3.2.
|
|
40
|
-
"@kepler.gl/layers": "3.2.
|
|
41
|
-
"@kepler.gl/localization": "3.2.
|
|
42
|
-
"@kepler.gl/processors": "3.2.
|
|
43
|
-
"@kepler.gl/schemas": "3.2.
|
|
44
|
-
"@kepler.gl/table": "3.2.
|
|
45
|
-
"@kepler.gl/tasks": "3.2.
|
|
46
|
-
"@kepler.gl/types": "3.2.
|
|
47
|
-
"@kepler.gl/utils": "3.2.
|
|
33
|
+
"@kepler.gl/actions": "3.2.2",
|
|
34
|
+
"@kepler.gl/cloud-providers": "3.2.2",
|
|
35
|
+
"@kepler.gl/common-utils": "3.2.2",
|
|
36
|
+
"@kepler.gl/constants": "3.2.2",
|
|
37
|
+
"@kepler.gl/deckgl-arrow-layers": "3.2.2",
|
|
38
|
+
"@kepler.gl/deckgl-layers": "3.2.2",
|
|
39
|
+
"@kepler.gl/effects": "3.2.2",
|
|
40
|
+
"@kepler.gl/layers": "3.2.2",
|
|
41
|
+
"@kepler.gl/localization": "3.2.2",
|
|
42
|
+
"@kepler.gl/processors": "3.2.2",
|
|
43
|
+
"@kepler.gl/schemas": "3.2.2",
|
|
44
|
+
"@kepler.gl/table": "3.2.2",
|
|
45
|
+
"@kepler.gl/tasks": "3.2.2",
|
|
46
|
+
"@kepler.gl/types": "3.2.2",
|
|
47
|
+
"@kepler.gl/utils": "3.2.2",
|
|
48
48
|
"@loaders.gl/loader-utils": "^4.3.2",
|
|
49
49
|
"@mapbox/geo-viewport": "^0.4.1",
|
|
50
50
|
"@math.gl/web-mercator": "^3.6.2",
|
package/src/schemas/package.json
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@kepler.gl/schemas",
|
|
3
3
|
"author": "Shan He <shan@uber.com>",
|
|
4
|
-
"version": "3.2.
|
|
4
|
+
"version": "3.2.2",
|
|
5
5
|
"description": "kepler.gl schemas used by kepler.gl components, actions and reducers",
|
|
6
6
|
"license": "MIT",
|
|
7
7
|
"main": "dist/index.js",
|
|
@@ -30,12 +30,12 @@
|
|
|
30
30
|
"umd"
|
|
31
31
|
],
|
|
32
32
|
"dependencies": {
|
|
33
|
-
"@kepler.gl/common-utils": "3.2.
|
|
34
|
-
"@kepler.gl/constants": "3.2.
|
|
35
|
-
"@kepler.gl/layers": "3.2.
|
|
36
|
-
"@kepler.gl/table": "3.2.
|
|
37
|
-
"@kepler.gl/types": "3.2.
|
|
38
|
-
"@kepler.gl/utils": "3.2.
|
|
33
|
+
"@kepler.gl/common-utils": "3.2.2",
|
|
34
|
+
"@kepler.gl/constants": "3.2.2",
|
|
35
|
+
"@kepler.gl/layers": "3.2.2",
|
|
36
|
+
"@kepler.gl/table": "3.2.2",
|
|
37
|
+
"@kepler.gl/types": "3.2.2",
|
|
38
|
+
"@kepler.gl/utils": "3.2.2",
|
|
39
39
|
"@loaders.gl/loader-utils": "^4.3.2",
|
|
40
40
|
"@types/keymirror": "^0.1.1",
|
|
41
41
|
"@types/lodash": "4.17.5",
|