@kepler.gl/deckgl-layers 3.2.5 → 3.3.0-alpha.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (55) hide show
  1. package/dist/3d-building-layer/3d-building-layer.d.ts +3 -3
  2. package/dist/3d-building-layer/3d-building-layer.js +9 -12
  3. package/dist/3d-building-layer/types.d.ts +8 -8
  4. package/dist/cluster-layer/cluster-layer.d.ts +16 -26
  5. package/dist/cluster-layer/cluster-layer.js +19 -30
  6. package/dist/column-layer/enhanced-column-layer.d.ts +4 -4
  7. package/dist/column-layer/enhanced-column-layer.js +39 -35
  8. package/dist/deckgl-extensions/filter-arrow-layer.d.ts +33 -6
  9. package/dist/deckgl-extensions/filter-arrow-layer.js +4 -12
  10. package/dist/deckgl-extensions/filter-shader-module.d.ts +32 -4
  11. package/dist/deckgl-extensions/filter-shader-module.js +3 -4
  12. package/dist/grid-layer/enhanced-cpu-grid-layer.d.ts +4906 -6
  13. package/dist/grid-layer/enhanced-cpu-grid-layer.js +46 -44
  14. package/dist/hexagon-layer/enhanced-hexagon-layer.d.ts +4903 -4
  15. package/dist/hexagon-layer/enhanced-hexagon-layer.js +61 -41
  16. package/dist/layer-utils/cpu-aggregator.d.ts +74 -27
  17. package/dist/layer-utils/cpu-aggregator.js +224 -19
  18. package/dist/line-layer/line-layer.d.ts +4 -4
  19. package/dist/line-layer/line-layer.js +29 -21
  20. package/dist/raster/images.d.ts +10 -3
  21. package/dist/raster/images.js +154 -60
  22. package/dist/raster/pipeline-validation-patch.d.ts +1 -0
  23. package/dist/raster/pipeline-validation-patch.js +60 -0
  24. package/dist/raster/raster-layer/raster-layer-shaders.d.ts +56 -0
  25. package/dist/raster/raster-layer/raster-layer-shaders.js +129 -0
  26. package/dist/raster/raster-layer/raster-layer.d.ts +6 -6
  27. package/dist/raster/raster-layer/raster-layer.js +100 -79
  28. package/dist/raster/raster-mesh-layer/matrix.d.ts +3 -1
  29. package/dist/raster/raster-mesh-layer/matrix.js +3 -3
  30. package/dist/raster/raster-mesh-layer/raster-mesh-layer-shaders.d.ts +19 -0
  31. package/dist/raster/raster-mesh-layer/raster-mesh-layer-shaders.js +38 -0
  32. package/dist/raster/raster-mesh-layer/raster-mesh-layer.d.ts +7 -6
  33. package/dist/raster/raster-mesh-layer/raster-mesh-layer.js +106 -81
  34. package/dist/raster/types.d.ts +8 -8
  35. package/dist/raster/types.js +1 -1
  36. package/dist/raster/webgl/color/colormap.js +13 -7
  37. package/dist/raster/webgl/color/filter.js +22 -12
  38. package/dist/raster/webgl/color/gamma-contrast.js +9 -3
  39. package/dist/raster/webgl/color/linear-rescale.js +9 -5
  40. package/dist/raster/webgl/color/saturation.js +7 -4
  41. package/dist/raster/webgl/color/sigmoidal-contrast.js +9 -5
  42. package/dist/raster/webgl/pansharpen/pansharpen-brovey.js +7 -4
  43. package/dist/raster/webgl/texture/combine-bands.js +1 -1
  44. package/dist/raster/webgl/texture/mask.js +27 -35
  45. package/dist/raster/webgl/texture/reorder-bands.js +8 -5
  46. package/dist/raster/webgl/texture/rgba-image.js +1 -1
  47. package/dist/raster/webgl/types.d.ts +11 -6
  48. package/dist/raster/webgl/types.js +1 -1
  49. package/dist/svg-icon-layer/scatterplot-icon-layer.d.ts +2 -4
  50. package/dist/svg-icon-layer/scatterplot-icon-layer.js +19 -25
  51. package/dist/svg-icon-layer/svg-icon-layer.d.ts +4 -6
  52. package/dist/svg-icon-layer/svg-icon-layer.js +5 -3
  53. package/dist/wms/wms-layer.d.ts +3 -3
  54. package/dist/wms/wms-layer.js +7 -7
  55. package/package.json +14 -13
@@ -13,16 +13,11 @@ var _getPrototypeOf2 = _interopRequireDefault(require("@babel/runtime/helpers/ge
13
13
  var _get2 = _interopRequireDefault(require("@babel/runtime/helpers/get"));
14
14
  var _inherits2 = _interopRequireDefault(require("@babel/runtime/helpers/inherits"));
15
15
  var _defineProperty2 = _interopRequireDefault(require("@babel/runtime/helpers/defineProperty"));
16
- var _typed = require("@deck.gl/core/typed");
17
- var _typed2 = require("@deck.gl/layers/typed");
18
- var _core = require("@luma.gl/core");
19
- var _engine = require("@luma.gl/engine");
20
- var _rasterLayerWebgl = _interopRequireDefault(require("./raster-layer-webgl1.fs"));
21
- var _rasterLayerWebgl2 = _interopRequireDefault(require("./raster-layer-webgl1.vs"));
22
- var _rasterLayerWebgl3 = _interopRequireDefault(require("./raster-layer-webgl2.fs"));
23
- var _rasterLayerWebgl4 = _interopRequireDefault(require("./raster-layer-webgl2.vs"));
16
+ var _layers = require("@deck.gl/layers");
17
+ var _rasterLayerShaders = require("./raster-layer-shaders");
24
18
  var _images = require("../images");
25
19
  var _util = require("../util");
20
+ var _pipelineValidationPatch = require("../pipeline-validation-patch");
26
21
  function _createForOfIteratorHelper(r, e) { var t = "undefined" != typeof Symbol && r[Symbol.iterator] || r["@@iterator"]; if (!t) { if (Array.isArray(r) || (t = _unsupportedIterableToArray(r)) || e && r && "number" == typeof r.length) { t && (r = t); var _n = 0, F = function F() {}; return { s: F, n: function n() { return _n >= r.length ? { done: !0 } : { done: !1, value: r[_n++] }; }, e: function e(r) { throw r; }, f: F }; } throw new TypeError("Invalid attempt to iterate non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method."); } var o, a = !0, u = !1; return { s: function s() { t = t.call(r); }, n: function n() { var r = t.next(); return a = r.done, r; }, e: function e(r) { u = !0, o = r; }, f: function f() { try { a || null == t["return"] || t["return"](); } finally { if (u) throw o; } } }; }
27
22
  function _unsupportedIterableToArray(r, a) { if (r) { if ("string" == typeof r) return _arrayLikeToArray(r, a); var t = {}.toString.call(r).slice(8, -1); return "Object" === t && r.constructor && (t = r.constructor.name), "Map" === t || "Set" === t ? Array.from(r) : "Arguments" === t || /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(t) ? _arrayLikeToArray(r, a) : void 0; } }
28
23
  function _arrayLikeToArray(r, a) { (null == a || a > r.length) && (a = r.length); for (var e = 0, n = Array(a); e < a; e++) n[e] = r[e]; return n; }
@@ -32,7 +27,7 @@ function _superPropGet(t, e, r, o) { var p = (0, _get2["default"])((0, _getProto
32
27
  function ownKeys(e, r) { var t = Object.keys(e); if (Object.getOwnPropertySymbols) { var o = Object.getOwnPropertySymbols(e); r && (o = o.filter(function (r) { return Object.getOwnPropertyDescriptor(e, r).enumerable; })), t.push.apply(t, o); } return t; }
33
28
  function _objectSpread(e) { for (var r = 1; r < arguments.length; r++) { var t = null != arguments[r] ? arguments[r] : {}; r % 2 ? ownKeys(Object(t), !0).forEach(function (r) { (0, _defineProperty2["default"])(e, r, t[r]); }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(e, Object.getOwnPropertyDescriptors(t)) : ownKeys(Object(t)).forEach(function (r) { Object.defineProperty(e, r, Object.getOwnPropertyDescriptor(t, r)); }); } return e; } // SPDX-License-Identifier: MIT
34
29
  // Copyright contributors to the kepler.gl project
35
- var defaultProps = _objectSpread(_objectSpread({}, _typed2.BitmapLayer.defaultProps), {}, {
30
+ var defaultProps = _objectSpread(_objectSpread({}, _layers.BitmapLayer.defaultProps), {}, {
36
31
  modules: {
37
32
  type: 'array',
38
33
  value: [],
@@ -47,35 +42,30 @@ var defaultProps = _objectSpread(_objectSpread({}, _typed2.BitmapLayer.defaultPr
47
42
  type: 'object',
48
43
  value: {},
49
44
  compare: true
45
+ },
46
+ onRedrawNeeded: {
47
+ type: 'function',
48
+ value: null,
49
+ compare: false
50
50
  }
51
51
  });
52
52
  var RasterLayer = exports["default"] = /*#__PURE__*/function (_BitmapLayer) {
53
53
  function RasterLayer() {
54
+ var _this;
54
55
  (0, _classCallCheck2["default"])(this, RasterLayer);
55
- return _callSuper(this, RasterLayer, arguments);
56
+ for (var _len = arguments.length, args = new Array(_len), _key = 0; _key < _len; _key++) {
57
+ args[_key] = arguments[_key];
58
+ }
59
+ _this = _callSuper(this, RasterLayer, [].concat(args));
60
+ (0, _defineProperty2["default"])(_this, "_redrawScheduled", false);
61
+ return _this;
56
62
  }
57
63
  (0, _inherits2["default"])(RasterLayer, _BitmapLayer);
58
64
  return (0, _createClass2["default"])(RasterLayer, [{
59
65
  key: "initializeState",
60
66
  value: function initializeState() {
61
- var gl = this.context.gl;
62
- var programManager = _engine.ProgramManager.getDefaultProgramManager(gl);
63
- var fsStr1 = 'fs:DECKGL_MUTATE_COLOR(inout vec4 image, in vec2 coord)';
64
- var fsStr2 = 'fs:DECKGL_CREATE_COLOR(inout vec4 image, in vec2 coord)';
65
-
66
- // Only initialize shader hook functions _once globally_
67
- // Since the program manager is shared across all layers, but many layers
68
- // might be created, this solves the performance issue of always adding new
69
- // hook functions.
70
- if (!programManager._hookFunctions.includes(fsStr1)) {
71
- programManager.addShaderHook(fsStr1);
72
- }
73
- if (!programManager._hookFunctions.includes(fsStr2)) {
74
- programManager.addShaderHook(fsStr2);
75
- }
76
-
77
- // images is a mapping from keys to Texture2D objects. The keys should match
78
- // names of uniforms in shader modules
67
+ (0, _pipelineValidationPatch.patchPipelineValidation)();
68
+ (0, _rasterLayerShaders.ensureRasterHooksRegistered)();
79
69
  this.setState({
80
70
  images: {}
81
71
  });
@@ -83,8 +73,8 @@ var RasterLayer = exports["default"] = /*#__PURE__*/function (_BitmapLayer) {
83
73
  }
84
74
  }, {
85
75
  key: "draw",
86
- value: function draw(_ref) {
87
- var uniforms = _ref.uniforms;
76
+ value: function draw(_opts) {
77
+ var _this$props$opacity;
88
78
  var _this$state = this.state,
89
79
  model = _this$state.model,
90
80
  images = _this$state.images,
@@ -95,46 +85,45 @@ var RasterLayer = exports["default"] = /*#__PURE__*/function (_BitmapLayer) {
95
85
  transparentColor = _this$props.transparentColor,
96
86
  tintColor = _this$props.tintColor,
97
87
  moduleProps = _this$props.moduleProps;
98
-
99
- // Render the image
100
88
  if (!model || !images || Object.keys(images).length === 0 || !Object.values(images).every(function (item) {
101
89
  return item;
102
90
  })) {
103
91
  return;
104
92
  }
105
- model.setUniforms(_objectSpread(_objectSpread({}, uniforms), {}, {
106
- desaturate: desaturate,
107
- transparentColor: transparentColor === null || transparentColor === void 0 ? void 0 : transparentColor.map(function (x) {
108
- return x ? x / 255 : 0;
109
- }),
110
- tintColor: tintColor === null || tintColor === void 0 ? void 0 : tintColor.slice(0, 3).map(function (x) {
111
- return x / 255;
112
- }),
113
- coordinateConversion: coordinateConversion,
114
- bounds: bounds
115
- })).updateModuleSettings(_objectSpread(_objectSpread({}, moduleProps), images)).draw();
116
- }
117
- }, {
118
- key: "getShaders",
119
- value: function getShaders() {
120
- var gl = this.context.gl;
121
- var _this$props$modules = this.props.modules,
122
- modules = _this$props$modules === void 0 ? [] : _this$props$modules;
123
- var webgl2 = (0, _core.isWebGL2)(gl);
124
93
 
125
- // Choose webgl version for module
126
- // If fs2 or fs1 keys exist, prefer them, but fall back to fs, so that
127
- // version-independent modules don't need to care
94
+ // Set UBO uniforms for the raster module
95
+ model.shaderInputs.setProps({
96
+ raster: {
97
+ desaturate: desaturate || 0,
98
+ transparentColor: (transparentColor || [0, 0, 0, 0]).map(function (x) {
99
+ return x ? x / 255 : 0;
100
+ }),
101
+ tintColor: (tintColor || [255, 255, 255]).slice(0, 3).map(function (x) {
102
+ return x / 255;
103
+ }),
104
+ coordinateConversion: coordinateConversion || 0,
105
+ bounds: bounds || [0, 0, 0, 0],
106
+ opacity: (_this$props$opacity = this.props.opacity) !== null && _this$props$opacity !== void 0 ? _this$props$opacity : 1
107
+ }
108
+ });
109
+
110
+ // Set props for each custom module through shaderInputs.
111
+ // We call getUniforms ourselves to skip modules that return null (inactive).
112
+ // Passing allModuleProps directly to setProps would cause the null-fallback
113
+ // in ShaderInputs to treat the entire props bag as uniforms/bindings,
114
+ // triggering expensive texture rebinding every frame.
115
+ var allModuleProps = _objectSpread(_objectSpread({}, moduleProps), images);
116
+ var modules = this.props.modules || [];
128
117
  var _iterator = _createForOfIteratorHelper(modules),
129
118
  _step;
130
119
  try {
131
120
  for (_iterator.s(); !(_step = _iterator.n()).done;) {
132
- var module = _step.value;
133
- module.fs = webgl2 ? module.fs2 || module.fs : module.fs1 || module.fs;
134
-
135
- // Sampler type is always float for WebGL1
136
- if (!webgl2 && module.defines) {
137
- module.defines.SAMPLER_TYPE = 'sampler2D';
121
+ var mod = _step.value;
122
+ if (mod.getUniforms) {
123
+ var result = mod.getUniforms(allModuleProps);
124
+ if (result) {
125
+ model.shaderInputs.setProps((0, _defineProperty2["default"])({}, mod.name, result));
126
+ }
138
127
  }
139
128
  }
140
129
  } catch (err) {
@@ -142,10 +131,41 @@ var RasterLayer = exports["default"] = /*#__PURE__*/function (_BitmapLayer) {
142
131
  } finally {
143
132
  _iterator.f();
144
133
  }
145
- return _objectSpread(_objectSpread({}, _superPropGet(RasterLayer, "getShaders", this, 3)([])), {}, {
146
- vs: webgl2 ? _rasterLayerWebgl4["default"] : _rasterLayerWebgl2["default"],
147
- fs: webgl2 ? _rasterLayerWebgl3["default"] : _rasterLayerWebgl["default"],
148
- modules: [_typed.project32].concat((0, _toConsumableArray2["default"])(modules))
134
+ var drawSuccess = model.draw(this.context.renderPass);
135
+ if (!drawSuccess) {
136
+ this._scheduleRedraw();
137
+ }
138
+ }
139
+ }, {
140
+ key: "_scheduleRedraw",
141
+ value: function _scheduleRedraw() {
142
+ var _this2 = this;
143
+ if (this._redrawScheduled) return;
144
+ this._redrawScheduled = true;
145
+ requestAnimationFrame(function () {
146
+ var _this2$context$layerM;
147
+ _this2._redrawScheduled = false;
148
+ if (_this2.context.deck) {
149
+ // @ts-expect-error accessing private deck.gl property
150
+ _this2.context.deck._needsRedraw = 'RasterLayer pipeline pending';
151
+ }
152
+ (_this2$context$layerM = _this2.context.layerManager) === null || _this2$context$layerM === void 0 || _this2$context$layerM.setNeedsRedraw('RasterLayer pipeline pending');
153
+ if (typeof _this2.props.onRedrawNeeded === 'function') {
154
+ _this2.props.onRedrawNeeded();
155
+ }
156
+ });
157
+ }
158
+ }, {
159
+ key: "getShaders",
160
+ value: function getShaders() {
161
+ var _this$props$modules = this.props.modules,
162
+ modules = _this$props$modules === void 0 ? [] : _this$props$modules;
163
+ var lumaModules = (0, _rasterLayerShaders.prepareLumaModules)(modules);
164
+ var parentShaders = _superPropGet(RasterLayer, "getShaders", this, 3)([]);
165
+ return _objectSpread(_objectSpread({}, parentShaders), {}, {
166
+ vs: (0, _rasterLayerShaders.buildRasterVertexShader)(),
167
+ fs: (0, _rasterLayerShaders.buildRasterFragmentShader)(),
168
+ modules: [].concat((0, _toConsumableArray2["default"])(parentShaders.modules || []), [_rasterLayerShaders.rasterUniforms], (0, _toConsumableArray2["default"])(lumaModules))
149
169
  });
150
170
  }
151
171
 
@@ -158,14 +178,11 @@ var RasterLayer = exports["default"] = /*#__PURE__*/function (_BitmapLayer) {
158
178
  changeFlags = params.changeFlags;
159
179
  var modules = props && props.modules;
160
180
  var oldModules = oldProps && oldProps.modules;
161
-
162
- // setup model first
163
- // If the list of modules changed, need to recompile the shaders
164
181
  if (changeFlags.extensionsChanged || !(0, _util.modulesEqual)(modules, oldModules)) {
165
- var _this$state$model, _this$getAttributeMan;
166
- var gl = this.context.gl;
167
- (_this$state$model = this.state.model) === null || _this$state$model === void 0 || _this$state$model["delete"]();
168
- this.state.model = this._getModel(gl);
182
+ var _this$state$model, _this$state$model$des, _this$getAttributeMan;
183
+ (_this$state$model = this.state.model) === null || _this$state$model === void 0 || (_this$state$model$des = _this$state$model.destroy) === null || _this$state$model$des === void 0 || _this$state$model$des.call(_this$state$model);
184
+ // @ts-expect-error _getModel is internal to BitmapLayer
185
+ this.state.model = this._getModel(this.context.device || this.context.gl);
169
186
  (_this$getAttributeMan = this.getAttributeManager()) === null || _this$getAttributeMan === void 0 || _this$getAttributeMan.invalidateAll();
170
187
  }
171
188
  if (props && props.images) {
@@ -194,13 +211,15 @@ var RasterLayer = exports["default"] = /*#__PURE__*/function (_BitmapLayer) {
194
211
  }
195
212
  }, {
196
213
  key: "updateImages",
197
- value: function updateImages(_ref2) {
198
- var props = _ref2.props,
199
- oldProps = _ref2.oldProps;
214
+ value: function updateImages(_ref) {
215
+ var props = _ref.props,
216
+ oldProps = _ref.oldProps;
200
217
  var images = this.state.images;
201
- var gl = this.context.gl;
218
+ var device = this.context.device;
219
+ var gl = (device === null || device === void 0 ? void 0 : device.gl) || this.context.gl;
202
220
  var newImages = (0, _images.loadImages)({
203
221
  gl: gl,
222
+ device: device,
204
223
  images: images,
205
224
  imagesData: props.images,
206
225
  oldImagesData: oldProps.images
@@ -220,16 +239,18 @@ var RasterLayer = exports["default"] = /*#__PURE__*/function (_BitmapLayer) {
220
239
  var image = _Object$values[_i];
221
240
  if (Array.isArray(image)) {
222
241
  image.map(function (x) {
223
- return x && x["delete"]();
242
+ var _x$delete;
243
+ return x && (x.destroy ? x.destroy() : (_x$delete = x["delete"]) === null || _x$delete === void 0 ? void 0 : _x$delete.call(x));
224
244
  });
225
245
  } else if (image) {
226
- image["delete"]();
246
+ var _image$delete;
247
+ image.destroy ? image.destroy() : (_image$delete = image["delete"]) === null || _image$delete === void 0 ? void 0 : _image$delete.call(image);
227
248
  }
228
249
  }
229
250
  }
230
251
  }
231
252
  }]);
232
- }(_typed2.BitmapLayer);
253
+ }(_layers.BitmapLayer);
233
254
  RasterLayer.defaultProps = defaultProps;
234
255
  RasterLayer.layerName = 'RasterLayer';
235
- //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJfdHlwZWQiLCJyZXF1aXJlIiwiX3R5cGVkMiIsIl9jb3JlIiwiX2VuZ2luZSIsIl9yYXN0ZXJMYXllcldlYmdsIiwiX2ludGVyb3BSZXF1aXJlRGVmYXVsdCIsIl9yYXN0ZXJMYXllcldlYmdsMiIsIl9yYXN0ZXJMYXllcldlYmdsMyIsIl9yYXN0ZXJMYXllcldlYmdsNCIsIl9pbWFnZXMiLCJfdXRpbCIsIl9jcmVhdGVGb3JPZkl0ZXJhdG9ySGVscGVyIiwiciIsImUiLCJ0IiwiU3ltYm9sIiwiaXRlcmF0b3IiLCJBcnJheSIsImlzQXJyYXkiLCJfdW5zdXBwb3J0ZWRJdGVyYWJsZVRvQXJyYXkiLCJsZW5ndGgiLCJfbiIsIkYiLCJzIiwibiIsImRvbmUiLCJ2YWx1ZSIsImYiLCJUeXBlRXJyb3IiLCJvIiwiYSIsInUiLCJjYWxsIiwibmV4dCIsIl9hcnJheUxpa2VUb0FycmF5IiwidG9TdHJpbmciLCJzbGljZSIsImNvbnN0cnVjdG9yIiwibmFtZSIsImZyb20iLCJ0ZXN0IiwiX2NhbGxTdXBlciIsIl9nZXRQcm90b3R5cGVPZjIiLCJfcG9zc2libGVDb25zdHJ1Y3RvclJldHVybjIiLCJfaXNOYXRpdmVSZWZsZWN0Q29uc3RydWN0IiwiUmVmbGVjdCIsImNvbnN0cnVjdCIsImFwcGx5IiwiQm9vbGVhbiIsInByb3RvdHlwZSIsInZhbHVlT2YiLCJfc3VwZXJQcm9wR2V0IiwicCIsIl9nZXQyIiwib3duS2V5cyIsIk9iamVjdCIsImtleXMiLCJnZXRPd25Qcm9wZXJ0eVN5bWJvbHMiLCJmaWx0ZXIiLCJnZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IiLCJlbnVtZXJhYmxlIiwicHVzaCIsIl9vYmplY3RTcHJlYWQiLCJhcmd1bWVudHMiLCJmb3JFYWNoIiwiX2RlZmluZVByb3BlcnR5MiIsImdldE93blByb3BlcnR5RGVzY3JpcHRvcnMiLCJkZWZpbmVQcm9wZXJ0aWVzIiwiZGVmaW5lUHJvcGVydHkiLCJkZWZhdWx0UHJvcHMiLCJCaXRtYXBMYXllciIsIm1vZHVsZXMiLCJ0eXBlIiwiY29tcGFyZSIsImltYWdlcyIsIm1vZHVsZVByb3BzIiwiUmFzdGVyTGF5ZXIiLCJleHBvcnRzIiwiX0JpdG1hcExheWVyIiwiX2NsYXNzQ2FsbENoZWNrMiIsIl9pbmhlcml0czIiLCJfY3JlYXRlQ2xhc3MyIiwia2V5IiwiaW5pdGlhbGl6ZVN0YXRlIiwiZ2wiLCJjb250ZXh0IiwicHJvZ3JhbU1hbmFnZXIiLCJQcm9ncmFtTWFuYWdlciIsImdldERlZmF1bHRQcm9ncmFtTWFuYWdlciIsImZzU3RyMSIsImZzU3RyMiIsIl9ob29rRnVuY3Rpb25zIiwiaW5jbHVkZXMiLCJhZGRTaGFkZXJIb29rIiwic2V0U3RhdGUiLCJkcmF3IiwiX3JlZiIsInVuaWZvcm1zIiwiX3RoaXMkc3RhdGUiLCJzdGF0ZSIsIm1vZGVsIiwiY29vcmRpbmF0ZUNvbnZlcnNpb24iLCJib3VuZHMiLCJfdGhpcyRwcm9wcyIsInByb3BzIiwiZGVzYXR1cmF0ZSIsInRyYW5zcGFyZW50Q29sb3IiLCJ0aW50Q29sb3IiLCJ2YWx1ZXMiLCJldmVyeSIsIml0ZW0iLCJzZXRVbmlmb3JtcyIsIm1hcCIsIngiLCJ1cGRhdGVNb2R1bGVTZXR0aW5ncyIsImdldFNoYWRlcnMiLCJfdGhpcyRwcm9wcyRtb2R1bGVzIiwid2ViZ2wyIiwiaXNXZWJHTDIiLCJfaXRlcmF0b3IiLCJfc3RlcCIsIm1vZHVsZSIsImZzIiwiZnMyIiwiZnMxIiwiZGVmaW5lcyIsIlNBTVBMRVJfVFlQRSIsImVyciIsInZzIiwidnNXZWJHTDIiLCJ2c1dlYkdMMSIsImZzV2ViR0wyIiwiZnNXZWJHTDEiLCJwcm9qZWN0MzIiLCJjb25jYXQiLCJfdG9Db25zdW1hYmxlQXJyYXkyIiwidXBkYXRlU3RhdGUiLCJwYXJhbXMiLCJvbGRQcm9wcyIsImNoYW5nZUZsYWdzIiwib2xkTW9kdWxlcyIsImV4dGVuc2lvbnNDaGFuZ2VkIiwibW9kdWxlc0VxdWFsIiwiX3RoaXMkc3RhdGUkbW9kZWwiLCJfdGhpcyRnZXRBdHRyaWJ1dGVNYW4iLCJfZ2V0TW9kZWwiLCJnZXRBdHRyaWJ1dGVNYW5hZ2VyIiwiaW52YWxpZGF0ZUFsbCIsInVwZGF0ZUltYWdlcyIsImF0dHJpYnV0ZU1hbmFnZXIiLCJfdGhpcyRzdGF0ZSRtb2RlbDIiLCJvbGRNZXNoIiwibWVzaCIsIl9jcmVhdGVNZXNoIiwic2V0VmVydGV4Q291bnQiLCJ2ZXJ0ZXhDb3VudCIsImludmFsaWRhdGUiLCJfZ2V0Q29vcmRpbmF0ZVVuaWZvcm1zIiwiX2ltYWdlQ29vcmRpbmF0ZVN5c3RlbSIsIl9yZWYyIiwibmV3SW1hZ2VzIiwibG9hZEltYWdlcyIsImltYWdlc0RhdGEiLCJvbGRJbWFnZXNEYXRhIiwiZmluYWxpemVTdGF0ZSIsIl9pIiwiX09iamVjdCR2YWx1ZXMiLCJpbWFnZSIsImxheWVyTmFtZSJdLCJzb3VyY2VzIjpbIi4uLy4uLy4uL3NyYy9yYXN0ZXIvcmFzdGVyLWxheWVyL3Jhc3Rlci1sYXllci50cyJdLCJzb3VyY2VzQ29udGVudCI6WyIvLyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogTUlUXG4vLyBDb3B5cmlnaHQgY29udHJpYnV0b3JzIHRvIHRoZSBrZXBsZXIuZ2wgcHJvamVjdFxuXG5pbXBvcnQge3Byb2plY3QzMiwgVXBkYXRlUGFyYW1ldGVyc30gZnJvbSAnQGRlY2suZ2wvY29yZS90eXBlZCc7XG5pbXBvcnQge0JpdG1hcExheWVyfSBmcm9tICdAZGVjay5nbC9sYXllcnMvdHlwZWQnO1xuaW1wb3J0IHtpc1dlYkdMMn0gZnJvbSAnQGx1bWEuZ2wvY29yZSc7XG5pbXBvcnQge1Byb2dyYW1NYW5hZ2VyfSBmcm9tICdAbHVtYS5nbC9lbmdpbmUnO1xuXG5pbXBvcnQgZnNXZWJHTDEgZnJvbSAnLi9yYXN0ZXItbGF5ZXItd2ViZ2wxLmZzJztcbmltcG9ydCB2c1dlYkdMMSBmcm9tICcuL3Jhc3Rlci1sYXllci13ZWJnbDEudnMnO1xuaW1wb3J0IGZzV2ViR0wyIGZyb20gJy4vcmFzdGVyLWxheWVyLXdlYmdsMi5mcyc7XG5pbXBvcnQgdnNXZWJHTDIgZnJvbSAnLi9yYXN0ZXItbGF5ZXItd2ViZ2wyLnZzJztcbmltcG9ydCB7bG9hZEltYWdlc30gZnJvbSAnLi4vaW1hZ2VzJztcbmltcG9ydCB0eXBlIHtSYXN0ZXJMYXllckFkZGVkUHJvcHMsIEltYWdlU3RhdGV9IGZyb20gJy4uL3R5cGVzJztcbmltcG9ydCB7bW9kdWxlc0VxdWFsfSBmcm9tICcuLi91dGlsJztcblxuY29uc3QgZGVmYXVsdFByb3BzID0ge1xuICAuLi5CaXRtYXBMYXllci5kZWZhdWx0UHJvcHMsXG4gIG1vZHVsZXM6IHt0eXBlOiAnYXJyYXknLCB2YWx1ZTogW10sIGNvbXBhcmU6IHRydWV9LFxuICBpbWFnZXM6IHt0eXBlOiAnb2JqZWN0JywgdmFsdWU6IHt9LCBjb21wYXJlOiB0cnVlfSxcbiAgbW9kdWxlUHJvcHM6IHt0eXBlOiAnb2JqZWN0JywgdmFsdWU6IHt9LCBjb21wYXJlOiB0cnVlfVxufTtcblxuZXhwb3J0IGRlZmF1bHQgY2xhc3MgUmFzdGVyTGF5ZXIgZXh0ZW5kcyBCaXRtYXBMYXllcjxSYXN0ZXJMYXllckFkZGVkUHJvcHM+IHtcbiAgZGVjbGFyZSBzdGF0ZTogQml0bWFwTGF5ZXI8UmFzdGVyTGF5ZXJBZGRlZFByb3BzPlsnc3RhdGUnXSAmIHtcbiAgICBpbWFnZXM6IEltYWdlU3RhdGU7XG4gIH07XG5cbiAgaW5pdGlhbGl6ZVN0YXRlKCk6IHZvaWQge1xuICAgIGNvbnN0IHtnbH0gPSB0aGlzLmNvbnRleHQ7XG4gICAgY29uc3QgcHJvZ3JhbU1hbmFnZXIgPSBQcm9ncmFtTWFuYWdlci5nZXREZWZhdWx0UHJvZ3JhbU1hbmFnZXIoZ2wpO1xuXG4gICAgY29uc3QgZnNTdHIxID0gJ2ZzOkRFQ0tHTF9NVVRBVEVfQ09MT1IoaW5vdXQgdmVjNCBpbWFnZSwgaW4gdmVjMiBjb29yZCknO1xuICAgIGNvbnN0IGZzU3RyMiA9ICdmczpERUNLR0xfQ1JFQVRFX0NPTE9SKGlub3V0IHZlYzQgaW1hZ2UsIGluIHZlYzIgY29vcmQpJztcblxuICAgIC8vIE9ubHkgaW5pdGlhbGl6ZSBzaGFkZXIgaG9vayBmdW5jdGlvbnMgX29uY2UgZ2xvYmFsbHlfXG4gICAgLy8gU2luY2UgdGhlIHByb2dyYW0gbWFuYWdlciBpcyBzaGFyZWQgYWNyb3NzIGFsbCBsYXllcnMsIGJ1dCBtYW55IGxheWVyc1xuICAgIC8vIG1pZ2h0IGJlIGNyZWF0ZWQsIHRoaXMgc29sdmVzIHRoZSBwZXJmb3JtYW5jZSBpc3N1ZSBvZiBhbHdheXMgYWRkaW5nIG5ld1xuICAgIC8vIGhvb2sgZnVuY3Rpb25zLlxuICAgIGlmICghcHJvZ3JhbU1hbmFnZXIuX2hvb2tGdW5jdGlvbnMuaW5jbHVkZXMoZnNTdHIxKSkge1xuICAgICAgcHJvZ3JhbU1hbmFnZXIuYWRkU2hhZGVySG9vayhmc1N0cjEpO1xuICAgIH1cbiAgICBpZiAoIXByb2dyYW1NYW5hZ2VyLl9ob29rRnVuY3Rpb25zLmluY2x1ZGVzKGZzU3RyMikpIHtcbiAgICAgIHByb2dyYW1NYW5hZ2VyLmFkZFNoYWRlckhvb2soZnNTdHIyKTtcbiAgICB9XG5cbiAgICAvLyBpbWFnZXMgaXMgYSBtYXBwaW5nIGZyb20ga2V5cyB0byBUZXh0dXJlMkQgb2JqZWN0cy4gVGhlIGtleXMgc2hvdWxkIG1hdGNoXG4gICAgLy8gbmFtZXMgb2YgdW5pZm9ybXMgaW4gc2hhZGVyIG1vZHVsZXNcbiAgICB0aGlzLnNldFN0YXRlKHtpbWFnZXM6IHt9fSk7XG5cbiAgICBzdXBlci5pbml0aWFsaXplU3RhdGUoKTtcbiAgfVxuXG4gIGRyYXcoe3VuaWZvcm1zfToge3VuaWZvcm1zOiB7W2tleTogc3RyaW5nXTogYW55fX0pOiB2b2lkIHtcbiAgICBjb25zdCB7bW9kZWwsIGltYWdlcywgY29vcmRpbmF0ZUNvbnZlcnNpb24sIGJvdW5kc30gPSB0aGlzLnN0YXRlO1xuICAgIGNvbnN0IHtkZXNhdHVyYXRlLCB0cmFuc3BhcmVudENvbG9yLCB0aW50Q29sb3IsIG1vZHVsZVByb3BzfSA9IHRoaXMucHJvcHM7XG5cbiAgICAvLyBSZW5kZXIgdGhlIGltYWdlXG4gICAgaWYgKFxuICAgICAgIW1vZGVsIHx8XG4gICAgICAhaW1hZ2VzIHx8XG4gICAgICBPYmplY3Qua2V5cyhpbWFnZXMpLmxlbmd0aCA9PT0gMCB8fFxuICAgICAgIU9iamVjdC52YWx1ZXMoaW1hZ2VzKS5ldmVyeShpdGVtID0+IGl0ZW0pXG4gICAgKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgbW9kZWxcbiAgICAgIC5zZXRVbmlmb3Jtcyh7XG4gICAgICAgIC4uLnVuaWZvcm1zLFxuICAgICAgICBkZXNhdHVyYXRlLFxuICAgICAgICB0cmFuc3BhcmVudENvbG9yOiB0cmFuc3BhcmVudENvbG9yPy5tYXAoeCA9PiAoeCA/IHggLyAyNTUgOiAwKSksXG4gICAgICAgIHRpbnRDb2xvcjogdGludENvbG9yPy5zbGljZSgwLCAzKS5tYXAoeCA9PiB4IC8gMjU1KSxcbiAgICAgICAgY29vcmRpbmF0ZUNvbnZlcnNpb24sXG4gICAgICAgIGJvdW5kc1xuICAgICAgfSlcbiAgICAgIC51cGRhdGVNb2R1bGVTZXR0aW5ncyh7XG4gICAgICAgIC4uLm1vZHVsZVByb3BzLFxuICAgICAgICAuLi5pbWFnZXNcbiAgICAgIH0pXG4gICAgICAuZHJhdygpO1xuICB9XG5cbiAgZ2V0U2hhZGVycygpOiBhbnkge1xuICAgIGNvbnN0IHtnbH0gPSB0aGlzLmNvbnRleHQ7XG4gICAgY29uc3Qge21vZHVsZXMgPSBbXX0gPSB0aGlzLnByb3BzO1xuICAgIGNvbnN0IHdlYmdsMiA9IGlzV2ViR0wyKGdsKTtcblxuICAgIC8vIENob29zZSB3ZWJnbCB2ZXJzaW9uIGZvciBtb2R1bGVcbiAgICAvLyBJZiBmczIgb3IgZnMxIGtleXMgZXhpc3QsIHByZWZlciB0aGVtLCBidXQgZmFsbCBiYWNrIHRvIGZzLCBzbyB0aGF0XG4gICAgLy8gdmVyc2lvbi1pbmRlcGVuZGVudCBtb2R1bGVzIGRvbid0IG5lZWQgdG8gY2FyZVxuICAgIGZvciAoY29uc3QgbW9kdWxlIG9mIG1vZHVsZXMpIHtcbiAgICAgIG1vZHVsZS5mcyA9IHdlYmdsMiA/IG1vZHVsZS5mczIgfHwgbW9kdWxlLmZzIDogbW9kdWxlLmZzMSB8fCBtb2R1bGUuZnM7XG5cbiAgICAgIC8vIFNhbXBsZXIgdHlwZSBpcyBhbHdheXMgZmxvYXQgZm9yIFdlYkdMMVxuICAgICAgaWYgKCF3ZWJnbDIgJiYgbW9kdWxlLmRlZmluZXMpIHtcbiAgICAgICAgbW9kdWxlLmRlZmluZXMuU0FNUExFUl9UWVBFID0gJ3NhbXBsZXIyRCc7XG4gICAgICB9XG4gICAgfVxuXG4gICAgcmV0dXJuIHtcbiAgICAgIC4uLnN1cGVyLmdldFNoYWRlcnMoKSxcbiAgICAgIHZzOiB3ZWJnbDIgPyB2c1dlYkdMMiA6IHZzV2ViR0wxLFxuICAgICAgZnM6IHdlYmdsMiA/IGZzV2ViR0wyIDogZnNXZWJHTDEsXG4gICAgICBtb2R1bGVzOiBbcHJvamVjdDMyLCAuLi5tb2R1bGVzXVxuICAgIH07XG4gIH1cblxuICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgY29tcGxleGl0eVxuICB1cGRhdGVTdGF0ZShwYXJhbXM6IFVwZGF0ZVBhcmFtZXRlcnM8Qml0bWFwTGF5ZXI8UmFzdGVyTGF5ZXJBZGRlZFByb3BzPj4pOiB2b2lkIHtcbiAgICBjb25zdCB7cHJvcHMsIG9sZFByb3BzLCBjaGFuZ2VGbGFnc30gPSBwYXJhbXM7XG4gICAgY29uc3QgbW9kdWxlcyA9IHByb3BzICYmIHByb3BzLm1vZHVsZXM7XG4gICAgY29uc3Qgb2xkTW9kdWxlcyA9IG9sZFByb3BzICYmIG9sZFByb3BzLm1vZHVsZXM7XG5cbiAgICAvLyBzZXR1cCBtb2RlbCBmaXJzdFxuICAgIC8vIElmIHRoZSBsaXN0IG9mIG1vZHVsZXMgY2hhbmdlZCwgbmVlZCB0byByZWNvbXBpbGUgdGhlIHNoYWRlcnNcbiAgICBpZiAoY2hhbmdlRmxhZ3MuZXh0ZW5zaW9uc0NoYW5nZWQgfHwgIW1vZHVsZXNFcXVhbChtb2R1bGVzLCBvbGRNb2R1bGVzKSkge1xuICAgICAgY29uc3Qge2dsfSA9IHRoaXMuY29udGV4dDtcbiAgICAgIHRoaXMuc3RhdGUubW9kZWw/LmRlbGV0ZSgpO1xuICAgICAgdGhpcy5zdGF0ZS5tb2RlbCA9IHRoaXMuX2dldE1vZGVsKGdsKTtcbiAgICAgIHRoaXMuZ2V0QXR0cmlidXRlTWFuYWdlcigpPy5pbnZhbGlkYXRlQWxsKCk7XG4gICAgfVxuXG4gICAgaWYgKHByb3BzICYmIHByb3BzLmltYWdlcykge1xuICAgICAgdGhpcy51cGRhdGVJbWFnZXMoe3Byb3BzLCBvbGRQcm9wc30pO1xuICAgIH1cblxuICAgIGNvbnN0IGF0dHJpYnV0ZU1hbmFnZXIgPSB0aGlzLmdldEF0dHJpYnV0ZU1hbmFnZXIoKTtcblxuICAgIGlmIChwcm9wcy5ib3VuZHMgIT09IG9sZFByb3BzLmJvdW5kcykge1xuICAgICAgY29uc3Qgb2xkTWVzaCA9IHRoaXMuc3RhdGUubWVzaDtcbiAgICAgIGNvbnN0IG1lc2ggPSB0aGlzLl9jcmVhdGVNZXNoKCk7XG4gICAgICB0aGlzLnN0YXRlLm1vZGVsPy5zZXRWZXJ0ZXhDb3VudChtZXNoLnZlcnRleENvdW50KTtcbiAgICAgIGZvciAoY29uc3Qga2V5IGluIG1lc2gpIHtcbiAgICAgICAgaWYgKG9sZE1lc2ggJiYgb2xkTWVzaFtrZXldICE9PSBtZXNoW2tleV0pIHtcbiAgICAgICAgICBhdHRyaWJ1dGVNYW5hZ2VyPy5pbnZhbGlkYXRlKGtleSk7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICAgIHRoaXMuc2V0U3RhdGUoe21lc2gsIC4uLnRoaXMuX2dldENvb3JkaW5hdGVVbmlmb3JtcygpfSk7XG4gICAgfSBlbHNlIGlmIChwcm9wcy5faW1hZ2VDb29yZGluYXRlU3lzdGVtICE9PSBvbGRQcm9wcy5faW1hZ2VDb29yZGluYXRlU3lzdGVtKSB7XG4gICAgICB0aGlzLnNldFN0YXRlKHRoaXMuX2dldENvb3JkaW5hdGVVbmlmb3JtcygpKTtcbiAgICB9XG4gIH1cblxuICB1cGRhdGVJbWFnZXMoe1xuICAgIHByb3BzLFxuICAgIG9sZFByb3BzXG4gIH06IHtcbiAgICBwcm9wczogUmFzdGVyTGF5ZXJBZGRlZFByb3BzO1xuICAgIG9sZFByb3BzOiBSYXN0ZXJMYXllckFkZGVkUHJvcHM7XG4gIH0pOiB2b2lkIHtcbiAgICBjb25zdCB7aW1hZ2VzfSA9IHRoaXMuc3RhdGU7XG4gICAgY29uc3Qge2dsfSA9IHRoaXMuY29udGV4dDtcblxuICAgIGNvbnN0IG5ld0ltYWdlcyA9IGxvYWRJbWFnZXMoe1xuICAgICAgZ2wsXG4gICAgICBpbWFnZXMsXG4gICAgICBpbWFnZXNEYXRhOiBwcm9wcy5pbWFnZXMsXG4gICAgICBvbGRJbWFnZXNEYXRhOiBvbGRQcm9wcy5pbWFnZXNcbiAgICB9KTtcbiAgICBpZiAobmV3SW1hZ2VzKSB7XG4gICAgICB0aGlzLnNldFN0YXRlKHtpbWFnZXM6IG5ld0ltYWdlc30pO1xuICAgIH1cbiAgfVxuXG4gIGZpbmFsaXplU3RhdGUoKTogdm9pZCB7XG4gICAgc3VwZXIuZmluYWxpemVTdGF0ZSh0aGlzLmNvbnRleHQpO1xuXG4gICAgaWYgKHRoaXMuc3RhdGUuaW1hZ2VzKSB7XG4gICAgICBmb3IgKGNvbnN0IGltYWdlIG9mIE9iamVjdC52YWx1ZXModGhpcy5zdGF0ZS5pbWFnZXMpKSB7XG4gICAgICAgIGlmIChBcnJheS5pc0FycmF5KGltYWdlKSkge1xuICAgICAgICAgIGltYWdlLm1hcCh4ID0+IHggJiYgeC5kZWxldGUoKSk7XG4gICAgICAgIH0gZWxzZSBpZiAoaW1hZ2UpIHtcbiAgICAgICAgICBpbWFnZS5kZWxldGUoKTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cbiAgfVxufVxuXG5SYXN0ZXJMYXllci5kZWZhdWx0UHJvcHMgPSBkZWZhdWx0UHJvcHM7XG5SYXN0ZXJMYXllci5sYXllck5hbWUgPSAnUmFzdGVyTGF5ZXInO1xuIl0sIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7Ozs7Ozs7QUFHQSxJQUFBQSxNQUFBLEdBQUFDLE9BQUE7QUFDQSxJQUFBQyxPQUFBLEdBQUFELE9BQUE7QUFDQSxJQUFBRSxLQUFBLEdBQUFGLE9BQUE7QUFDQSxJQUFBRyxPQUFB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
256
+ //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJfbGF5ZXJzIiwicmVxdWlyZSIsIl9yYXN0ZXJMYXllclNoYWRlcnMiLCJfaW1hZ2VzIiwiX3V0aWwiLCJfcGlwZWxpbmVWYWxpZGF0aW9uUGF0Y2giLCJfY3JlYXRlRm9yT2ZJdGVyYXRvckhlbHBlciIsInIiLCJlIiwidCIsIlN5bWJvbCIsIml0ZXJhdG9yIiwiQXJyYXkiLCJpc0FycmF5IiwiX3Vuc3VwcG9ydGVkSXRlcmFibGVUb0FycmF5IiwibGVuZ3RoIiwiX24iLCJGIiwicyIsIm4iLCJkb25lIiwidmFsdWUiLCJmIiwiVHlwZUVycm9yIiwibyIsImEiLCJ1IiwiY2FsbCIsIm5leHQiLCJfYXJyYXlMaWtlVG9BcnJheSIsInRvU3RyaW5nIiwic2xpY2UiLCJjb25zdHJ1Y3RvciIsIm5hbWUiLCJmcm9tIiwidGVzdCIsIl9jYWxsU3VwZXIiLCJfZ2V0UHJvdG90eXBlT2YyIiwiX3Bvc3NpYmxlQ29uc3RydWN0b3JSZXR1cm4yIiwiX2lzTmF0aXZlUmVmbGVjdENvbnN0cnVjdCIsIlJlZmxlY3QiLCJjb25zdHJ1Y3QiLCJhcHBseSIsIkJvb2xlYW4iLCJwcm90b3R5cGUiLCJ2YWx1ZU9mIiwiX3N1cGVyUHJvcEdldCIsInAiLCJfZ2V0MiIsIm93bktleXMiLCJPYmplY3QiLCJrZXlzIiwiZ2V0T3duUHJvcGVydHlTeW1ib2xzIiwiZmlsdGVyIiwiZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yIiwiZW51bWVyYWJsZSIsInB1c2giLCJfb2JqZWN0U3ByZWFkIiwiYXJndW1lbnRzIiwiZm9yRWFjaCIsIl9kZWZpbmVQcm9wZXJ0eTIiLCJnZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3JzIiwiZGVmaW5lUHJvcGVydGllcyIsImRlZmluZVByb3BlcnR5IiwiZGVmYXVsdFByb3BzIiwiQml0bWFwTGF5ZXIiLCJtb2R1bGVzIiwidHlwZSIsImNvbXBhcmUiLCJpbWFnZXMiLCJtb2R1bGVQcm9wcyIsIm9uUmVkcmF3TmVlZGVkIiwiUmFzdGVyTGF5ZXIiLCJleHBvcnRzIiwiX0JpdG1hcExheWVyIiwiX3RoaXMiLCJfY2xhc3NDYWxsQ2hlY2syIiwiX2xlbiIsImFyZ3MiLCJfa2V5IiwiY29uY2F0IiwiX2luaGVyaXRzMiIsIl9jcmVhdGVDbGFzczIiLCJrZXkiLCJpbml0aWFsaXplU3RhdGUiLCJwYXRjaFBpcGVsaW5lVmFsaWRhdGlvbiIsImVuc3VyZVJhc3Rlckhvb2tzUmVnaXN0ZXJlZCIsInNldFN0YXRlIiwiZHJhdyIsIl9vcHRzIiwiX3RoaXMkcHJvcHMkb3BhY2l0eSIsIl90aGlzJHN0YXRlIiwic3RhdGUiLCJtb2RlbCIsImNvb3JkaW5hdGVDb252ZXJzaW9uIiwiYm91bmRzIiwiX3RoaXMkcHJvcHMiLCJwcm9wcyIsImRlc2F0dXJhdGUiLCJ0cmFuc3BhcmVudENvbG9yIiwidGludENvbG9yIiwidmFsdWVzIiwiZXZlcnkiLCJpdGVtIiwic2hhZGVySW5wdXRzIiwic2V0UHJvcHMiLCJyYXN0ZXIiLCJtYXAiLCJ4Iiwib3BhY2l0eSIsImFsbE1vZHVsZVByb3BzIiwiX2l0ZXJhdG9yIiwiX3N0ZXAiLCJtb2QiLCJnZXRVbmlmb3JtcyIsInJlc3VsdCIsImVyciIsImRyYXdTdWNjZXNzIiwiY29udGV4dCIsInJlbmRlclBhc3MiLCJfc2NoZWR1bGVSZWRyYXciLCJfdGhpczIiLCJfcmVkcmF3U2NoZWR1bGVkIiwicmVxdWVzdEFuaW1hdGlvbkZyYW1lIiwiX3RoaXMyJGNvbnRleHQkbGF5ZXJNIiwiZGVjayIsIl9uZWVkc1JlZHJhdyIsImxheWVyTWFuYWdlciIsInNldE5lZWRzUmVkcmF3IiwiZ2V0U2hhZGVycyIsIl90aGlzJHByb3BzJG1vZHVsZXMiLCJsdW1hTW9kdWxlcyIsInByZXBhcmVMdW1hTW9kdWxlcyIsInBhcmVudFNoYWRlcnMiLCJ2cyIsImJ1aWxkUmFzdGVyVmVydGV4U2hhZGVyIiwiZnMiLCJidWlsZFJhc3RlckZyYWdtZW50U2hhZGVyIiwiX3RvQ29uc3VtYWJsZUFycmF5MiIsInJhc3RlclVuaWZvcm1zIiwidXBkYXRlU3RhdGUiLCJwYXJhbXMiLCJvbGRQcm9wcyIsImNoYW5nZUZsYWdzIiwib2xkTW9kdWxlcyIsImV4dGVuc2lvbnNDaGFuZ2VkIiwibW9kdWxlc0VxdWFsIiwiX3RoaXMkc3RhdGUkbW9kZWwiLCJfdGhpcyRzdGF0ZSRtb2RlbCRkZXMiLCJfdGhpcyRnZXRBdHRyaWJ1dGVNYW4iLCJkZXN0cm95IiwiX2dldE1vZGVsIiwiZGV2aWNlIiwiZ2wiLCJnZXRBdHRyaWJ1dGVNYW5hZ2VyIiwiaW52YWxpZGF0ZUFsbCIsInVwZGF0ZUltYWdlcyIsImF0dHJpYnV0ZU1hbmFnZXIiLCJfdGhpcyRzdGF0ZSRtb2RlbDIiLCJvbGRNZXNoIiwibWVzaCIsIl9jcmVhdGVNZXNoIiwic2V0VmVydGV4Q291bnQiLCJ2ZXJ0ZXhDb3VudCIsImludmFsaWRhdGUiLCJfZ2V0Q29vcmRpbmF0ZVVuaWZvcm1zIiwiX2ltYWdlQ29vcmRpbmF0ZVN5c3RlbSIsIl9yZWYiLCJuZXdJbWFnZXMiLCJsb2FkSW1hZ2VzIiwiaW1hZ2VzRGF0YSIsIm9sZEltYWdlc0RhdGEiLCJmaW5hbGl6ZVN0YXRlIiwiX2kiLCJfT2JqZWN0JHZhbHVlcyIsImltYWdlIiwiX3gkZGVsZXRlIiwiX2ltYWdlJGRlbGV0ZSIsImxheWVyTmFtZSJdLCJzb3VyY2VzIjpbIi4uLy4uLy4uL3NyYy9yYXN0ZXIvcmFzdGVyLWxheWVyL3Jhc3Rlci1sYXllci50cyJdLCJzb3VyY2VzQ29udGVudCI6WyIvLyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogTUlUXG4vLyBDb3B5cmlnaHQgY29udHJpYnV0b3JzIHRvIHRoZSBrZXBsZXIuZ2wgcHJvamVjdFxuXG5pbXBvcnQge1VwZGF0ZVBhcmFtZXRlcnN9IGZyb20gJ0BkZWNrLmdsL2NvcmUnO1xuaW1wb3J0IHtCaXRtYXBMYXllcn0gZnJvbSAnQGRlY2suZ2wvbGF5ZXJzJztcblxuaW1wb3J0IHtcbiAgYnVpbGRSYXN0ZXJGcmFnbWVudFNoYWRlcixcbiAgYnVpbGRSYXN0ZXJWZXJ0ZXhTaGFkZXIsXG4gIHJhc3RlclVuaWZvcm1zLFxuICBlbnN1cmVSYXN0ZXJIb29rc1JlZ2lzdGVyZWQsXG4gIHByZXBhcmVMdW1hTW9kdWxlc1xufSBmcm9tICcuL3Jhc3Rlci1sYXllci1zaGFkZXJzJztcbmltcG9ydCB7bG9hZEltYWdlc30gZnJvbSAnLi4vaW1hZ2VzJztcbmltcG9ydCB0eXBlIHtSYXN0ZXJMYXllckFkZGVkUHJvcHMsIEltYWdlU3RhdGV9IGZyb20gJy4uL3R5cGVzJztcbmltcG9ydCB7bW9kdWxlc0VxdWFsfSBmcm9tICcuLi91dGlsJztcbmltcG9ydCB7cGF0Y2hQaXBlbGluZVZhbGlkYXRpb259IGZyb20gJy4uL3BpcGVsaW5lLXZhbGlkYXRpb24tcGF0Y2gnO1xuXG5jb25zdCBkZWZhdWx0UHJvcHMgPSB7XG4gIC4uLkJpdG1hcExheWVyLmRlZmF1bHRQcm9wcyxcbiAgbW9kdWxlczoge3R5cGU6ICdhcnJheScsIHZhbHVlOiBbXSwgY29tcGFyZTogdHJ1ZX0sXG4gIGltYWdlczoge3R5cGU6ICdvYmplY3QnLCB2YWx1ZToge30sIGNvbXBhcmU6IHRydWV9LFxuICBtb2R1bGVQcm9wczoge3R5cGU6ICdvYmplY3QnLCB2YWx1ZToge30sIGNvbXBhcmU6IHRydWV9LFxuICBvblJlZHJhd05lZWRlZDoge3R5cGU6ICdmdW5jdGlvbicsIHZhbHVlOiBudWxsLCBjb21wYXJlOiBmYWxzZX1cbn07XG5cbmV4cG9ydCBkZWZhdWx0IGNsYXNzIFJhc3RlckxheWVyIGV4dGVuZHMgQml0bWFwTGF5ZXI8UmFzdGVyTGF5ZXJBZGRlZFByb3BzPiB7XG4gIGRlY2xhcmUgc3RhdGU6IEJpdG1hcExheWVyPFJhc3RlckxheWVyQWRkZWRQcm9wcz5bJ3N0YXRlJ10gJiB7XG4gICAgaW1hZ2VzOiBJbWFnZVN0YXRlO1xuICB9O1xuXG4gIF9yZWRyYXdTY2hlZHVsZWQgPSBmYWxzZTtcblxuICBpbml0aWFsaXplU3RhdGUoKTogdm9pZCB7XG4gICAgcGF0Y2hQaXBlbGluZVZhbGlkYXRpb24oKTtcbiAgICBlbnN1cmVSYXN0ZXJIb29rc1JlZ2lzdGVyZWQoKTtcbiAgICB0aGlzLnNldFN0YXRlKHtpbWFnZXM6IHt9fSk7XG4gICAgc3VwZXIuaW5pdGlhbGl6ZVN0YXRlKCk7XG4gIH1cblxuICBkcmF3KF9vcHRzOiB7c2hhZGVyTW9kdWxlUHJvcHM6IFJlY29yZDxzdHJpbmcsIHVua25vd24+fSk6IHZvaWQge1xuICAgIGNvbnN0IHttb2RlbCwgaW1hZ2VzLCBjb29yZGluYXRlQ29udmVyc2lvbiwgYm91bmRzfSA9IHRoaXMuc3RhdGU7XG4gICAgY29uc3Qge2Rlc2F0dXJhdGUsIHRyYW5zcGFyZW50Q29sb3IsIHRpbnRDb2xvciwgbW9kdWxlUHJvcHN9ID0gdGhpcy5wcm9wcztcblxuICAgIGlmIChcbiAgICAgICFtb2RlbCB8fFxuICAgICAgIWltYWdlcyB8fFxuICAgICAgT2JqZWN0LmtleXMoaW1hZ2VzKS5sZW5ndGggPT09IDAgfHxcbiAgICAgICFPYmplY3QudmFsdWVzKGltYWdlcykuZXZlcnkoaXRlbSA9PiBpdGVtKVxuICAgICkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIC8vIFNldCBVQk8gdW5pZm9ybXMgZm9yIHRoZSByYXN0ZXIgbW9kdWxlXG4gICAgbW9kZWwuc2hhZGVySW5wdXRzLnNldFByb3BzKHtcbiAgICAgIHJhc3Rlcjoge1xuICAgICAgICBkZXNhdHVyYXRlOiBkZXNhdHVyYXRlIHx8IDAsXG4gICAgICAgIHRyYW5zcGFyZW50Q29sb3I6ICh0cmFuc3BhcmVudENvbG9yIHx8IFswLCAwLCAwLCAwXSkubWFwKHggPT4gKHggPyB4IC8gMjU1IDogMCkpLFxuICAgICAgICB0aW50Q29sb3I6ICh0aW50Q29sb3IgfHwgWzI1NSwgMjU1LCAyNTVdKS5zbGljZSgwLCAzKS5tYXAoeCA9PiB4IC8gMjU1KSxcbiAgICAgICAgY29vcmRpbmF0ZUNvbnZlcnNpb246IGNvb3JkaW5hdGVDb252ZXJzaW9uIHx8IDAsXG4gICAgICAgIGJvdW5kczogYm91bmRzIHx8IFswLCAwLCAwLCAwXSxcbiAgICAgICAgb3BhY2l0eTogdGhpcy5wcm9wcy5vcGFjaXR5ID8/IDFcbiAgICAgIH1cbiAgICB9KTtcblxuICAgIC8vIFNldCBwcm9wcyBmb3IgZWFjaCBjdXN0b20gbW9kdWxlIHRocm91Z2ggc2hhZGVySW5wdXRzLlxuICAgIC8vIFdlIGNhbGwgZ2V0VW5pZm9ybXMgb3Vyc2VsdmVzIHRvIHNraXAgbW9kdWxlcyB0aGF0IHJldHVybiBudWxsIChpbmFjdGl2ZSkuXG4gICAgLy8gUGFzc2luZyBhbGxNb2R1bGVQcm9wcyBkaXJlY3RseSB0byBzZXRQcm9wcyB3b3VsZCBjYXVzZSB0aGUgbnVsbC1mYWxsYmFja1xuICAgIC8vIGluIFNoYWRlcklucHV0cyB0byB0cmVhdCB0aGUgZW50aXJlIHByb3BzIGJhZyBhcyB1bmlmb3Jtcy9iaW5kaW5ncyxcbiAgICAvLyB0cmlnZ2VyaW5nIGV4cGVuc2l2ZSB0ZXh0dXJlIHJlYmluZGluZyBldmVyeSBmcmFtZS5cbiAgICBjb25zdCBhbGxNb2R1bGVQcm9wcyA9IHsuLi5tb2R1bGVQcm9wcywgLi4uaW1hZ2VzfTtcbiAgICBjb25zdCBtb2R1bGVzID0gdGhpcy5wcm9wcy5tb2R1bGVzIHx8IFtdO1xuICAgIGZvciAoY29uc3QgbW9kIG9mIG1vZHVsZXMpIHtcbiAgICAgIGlmIChtb2QuZ2V0VW5pZm9ybXMpIHtcbiAgICAgICAgY29uc3QgcmVzdWx0ID0gbW9kLmdldFVuaWZvcm1zKGFsbE1vZHVsZVByb3BzKTtcbiAgICAgICAgaWYgKHJlc3VsdCkge1xuICAgICAgICAgIG1vZGVsLnNoYWRlcklucHV0cy5zZXRQcm9wcyh7W21vZC5uYW1lXTogcmVzdWx0fSk7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG5cbiAgICBjb25zdCBkcmF3U3VjY2VzcyA9IG1vZGVsLmRyYXcodGhpcy5jb250ZXh0LnJlbmRlclBhc3MpO1xuICAgIGlmICghZHJhd1N1Y2Nlc3MpIHtcbiAgICAgIHRoaXMuX3NjaGVkdWxlUmVkcmF3KCk7XG4gICAgfVxuICB9XG5cbiAgX3NjaGVkdWxlUmVkcmF3KCk6IHZvaWQge1xuICAgIGlmICh0aGlzLl9yZWRyYXdTY2hlZHVsZWQpIHJldHVybjtcbiAgICB0aGlzLl9yZWRyYXdTY2hlZHVsZWQgPSB0cnVlO1xuICAgIHJlcXVlc3RBbmltYXRpb25GcmFtZSgoKSA9PiB7XG4gICAgICB0aGlzLl9yZWRyYXdTY2hlZHVsZWQgPSBmYWxzZTtcbiAgICAgIGlmICh0aGlzLmNvbnRleHQuZGVjaykge1xuICAgICAgICAvLyBAdHMtZXhwZWN0LWVycm9yIGFjY2Vzc2luZyBwcml2YXRlIGRlY2suZ2wgcHJvcGVydHlcbiAgICAgICAgdGhpcy5jb250ZXh0LmRlY2suX25lZWRzUmVkcmF3ID0gJ1Jhc3RlckxheWVyIHBpcGVsaW5lIHBlbmRpbmcnO1xuICAgICAgfVxuICAgICAgdGhpcy5jb250ZXh0LmxheWVyTWFuYWdlcj8uc2V0TmVlZHNSZWRyYXcoJ1Jhc3RlckxheWVyIHBpcGVsaW5lIHBlbmRpbmcnKTtcbiAgICAgIGlmICh0eXBlb2YgdGhpcy5wcm9wcy5vblJlZHJhd05lZWRlZCA9PT0gJ2Z1bmN0aW9uJykge1xuICAgICAgICB0aGlzLnByb3BzLm9uUmVkcmF3TmVlZGVkKCk7XG4gICAgICB9XG4gICAgfSk7XG4gIH1cblxuICBnZXRTaGFkZXJzKCk6IGFueSB7XG4gICAgY29uc3Qge21vZHVsZXMgPSBbXX0gPSB0aGlzLnByb3BzO1xuXG4gICAgY29uc3QgbHVtYU1vZHVsZXMgPSBwcmVwYXJlTHVtYU1vZHVsZXMobW9kdWxlcyk7XG4gICAgY29uc3QgcGFyZW50U2hhZGVycyA9IHN1cGVyLmdldFNoYWRlcnMoKTtcblxuICAgIHJldHVybiB7XG4gICAgICAuLi5wYXJlbnRTaGFkZXJzLFxuICAgICAgdnM6IGJ1aWxkUmFzdGVyVmVydGV4U2hhZGVyKCksXG4gICAgICBmczogYnVpbGRSYXN0ZXJGcmFnbWVudFNoYWRlcigpLFxuICAgICAgbW9kdWxlczogWy4uLihwYXJlbnRTaGFkZXJzLm1vZHVsZXMgfHwgW10pLCByYXN0ZXJVbmlmb3JtcywgLi4ubHVtYU1vZHVsZXNdXG4gICAgfTtcbiAgfVxuXG4gIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBjb21wbGV4aXR5XG4gIHVwZGF0ZVN0YXRlKHBhcmFtczogVXBkYXRlUGFyYW1ldGVyczxCaXRtYXBMYXllcjxSYXN0ZXJMYXllckFkZGVkUHJvcHM+Pik6IHZvaWQge1xuICAgIGNvbnN0IHtwcm9wcywgb2xkUHJvcHMsIGNoYW5nZUZsYWdzfSA9IHBhcmFtcztcbiAgICBjb25zdCBtb2R1bGVzID0gcHJvcHMgJiYgcHJvcHMubW9kdWxlcztcbiAgICBjb25zdCBvbGRNb2R1bGVzID0gb2xkUHJvcHMgJiYgb2xkUHJvcHMubW9kdWxlcztcblxuICAgIGlmIChjaGFuZ2VGbGFncy5leHRlbnNpb25zQ2hhbmdlZCB8fCAhbW9kdWxlc0VxdWFsKG1vZHVsZXMsIG9sZE1vZHVsZXMpKSB7XG4gICAgICB0aGlzLnN0YXRlLm1vZGVsPy5kZXN0cm95Py4oKTtcbiAgICAgIC8vIEB0cy1leHBlY3QtZXJyb3IgX2dldE1vZGVsIGlzIGludGVybmFsIHRvIEJpdG1hcExheWVyXG4gICAgICB0aGlzLnN0YXRlLm1vZGVsID0gdGhpcy5fZ2V0TW9kZWwodGhpcy5jb250ZXh0LmRldmljZSB8fCB0aGlzLmNvbnRleHQuZ2wpO1xuICAgICAgdGhpcy5nZXRBdHRyaWJ1dGVNYW5hZ2VyKCk/LmludmFsaWRhdGVBbGwoKTtcbiAgICB9XG5cbiAgICBpZiAocHJvcHMgJiYgcHJvcHMuaW1hZ2VzKSB7XG4gICAgICB0aGlzLnVwZGF0ZUltYWdlcyh7cHJvcHMsIG9sZFByb3BzfSk7XG4gICAgfVxuXG4gICAgY29uc3QgYXR0cmlidXRlTWFuYWdlciA9IHRoaXMuZ2V0QXR0cmlidXRlTWFuYWdlcigpO1xuXG4gICAgaWYgKHByb3BzLmJvdW5kcyAhPT0gb2xkUHJvcHMuYm91bmRzKSB7XG4gICAgICBjb25zdCBvbGRNZXNoID0gdGhpcy5zdGF0ZS5tZXNoO1xuICAgICAgY29uc3QgbWVzaCA9IHRoaXMuX2NyZWF0ZU1lc2goKTtcbiAgICAgIHRoaXMuc3RhdGUubW9kZWw/LnNldFZlcnRleENvdW50KG1lc2gudmVydGV4Q291bnQpO1xuICAgICAgZm9yIChjb25zdCBrZXkgaW4gbWVzaCkge1xuICAgICAgICBpZiAob2xkTWVzaCAmJiBvbGRNZXNoW2tleV0gIT09IG1lc2hba2V5XSkge1xuICAgICAgICAgIGF0dHJpYnV0ZU1hbmFnZXI/LmludmFsaWRhdGUoa2V5KTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgICAgdGhpcy5zZXRTdGF0ZSh7bWVzaCwgLi4udGhpcy5fZ2V0Q29vcmRpbmF0ZVVuaWZvcm1zKCl9KTtcbiAgICB9IGVsc2UgaWYgKHByb3BzLl9pbWFnZUNvb3JkaW5hdGVTeXN0ZW0gIT09IG9sZFByb3BzLl9pbWFnZUNvb3JkaW5hdGVTeXN0ZW0pIHtcbiAgICAgIHRoaXMuc2V0U3RhdGUodGhpcy5fZ2V0Q29vcmRpbmF0ZVVuaWZvcm1zKCkpO1xuICAgIH1cbiAgfVxuXG4gIHVwZGF0ZUltYWdlcyh7XG4gICAgcHJvcHMsXG4gICAgb2xkUHJvcHNcbiAgfToge1xuICAgIHByb3BzOiBSYXN0ZXJMYXllckFkZGVkUHJvcHM7XG4gICAgb2xkUHJvcHM6IFJhc3RlckxheWVyQWRkZWRQcm9wcztcbiAgfSk6IHZvaWQge1xuICAgIGNvbnN0IHtpbWFnZXN9ID0gdGhpcy5zdGF0ZTtcbiAgICBjb25zdCBkZXZpY2UgPSB0aGlzLmNvbnRleHQuZGV2aWNlO1xuICAgIGNvbnN0IGdsID0gZGV2aWNlPy5nbCB8fCB0aGlzLmNvbnRleHQuZ2w7XG5cbiAgICBjb25zdCBuZXdJbWFnZXMgPSBsb2FkSW1hZ2VzKHtcbiAgICAgIGdsLFxuICAgICAgZGV2aWNlLFxuICAgICAgaW1hZ2VzLFxuICAgICAgaW1hZ2VzRGF0YTogcHJvcHMuaW1hZ2VzLFxuICAgICAgb2xkSW1hZ2VzRGF0YTogb2xkUHJvcHMuaW1hZ2VzXG4gICAgfSk7XG4gICAgaWYgKG5ld0ltYWdlcykge1xuICAgICAgdGhpcy5zZXRTdGF0ZSh7aW1hZ2VzOiBuZXdJbWFnZXN9KTtcbiAgICB9XG4gIH1cblxuICBmaW5hbGl6ZVN0YXRlKCk6IHZvaWQge1xuICAgIHN1cGVyLmZpbmFsaXplU3RhdGUodGhpcy5jb250ZXh0KTtcblxuICAgIGlmICh0aGlzLnN0YXRlLmltYWdlcykge1xuICAgICAgZm9yIChjb25zdCBpbWFnZSBvZiBPYmplY3QudmFsdWVzKHRoaXMuc3RhdGUuaW1hZ2VzKSkge1xuICAgICAgICBpZiAoQXJyYXkuaXNBcnJheShpbWFnZSkpIHtcbiAgICAgICAgICBpbWFnZS5tYXAoeCA9PiB4ICYmICh4LmRlc3Ryb3kgPyB4LmRlc3Ryb3koKSA6IHguZGVsZXRlPy4oKSkpO1xuICAgICAgICB9IGVsc2UgaWYgKGltYWdlKSB7XG4gICAgICAgICAgaW1hZ2UuZGVzdHJveSA/IGltYWdlLmRlc3Ryb3koKSA6IGltYWdlLmRlbGV0ZT8uKCk7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG4gIH1cbn1cblxuUmFzdGVyTGF5ZXIuZGVmYXVsdFByb3BzID0gZGVmYXVsdFByb3BzO1xuUmFzdGVyTGF5ZXIubGF5ZXJOYW1lID0gJ1Jhc3RlckxheWVyJztcbiJdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7Ozs7Ozs7O0FBSUEsSUFBQUEsT0FBQSxHQUFBQyxPQUFBO0FBRUEsSUFBQUMsbUJBQUEsR0FBQUQsT0FBQTtBQU9BLElBQUFFLE9BQUEsR0FBQUYsT0FBQTtBQUVBLElBQUFHLEtBQUEsR0FBQUgsT0FBQTtBQUNBLElBQUFJLHdCQUFBLEdBQUFKLE9BQUE7QUFBcUUsU0FBQUssMkJBQUFDLENBQUEsRUFBQUMsQ0FBQSxRQUFBQyxDQUFBLHlCQUFBQyxNQUFBLElBQUFILENBQUEsQ0FBQUcsTUFBQSxDQUFBQyxRQUFBLEtBQUFKLENBQUEscUJBQUFFLENBQUEsUUFBQUcsS0FBQSxDQUFBQyxPQUFBLENBQUFOLENBQUEsTUFBQUUsQ0FBQSxHQUFBSywyQkFBQSxDQUFBUCxDQUFBLE1BQUFDLENBQUEsSUFBQUQsQ0FBQSx1QkFBQUEsQ0FBQSxD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
@@ -1,2 +1,4 @@
1
- import { Viewport, CoordinateSystem } from '@deck.gl/core/typed';
1
+ import { Viewport } from '@deck.gl/core';
2
+ type CoordinateSystem = number;
2
3
  export declare function shouldComposeModelMatrix(viewport: Viewport, coordinateSystem: CoordinateSystem): boolean;
4
+ export {};
@@ -4,7 +4,7 @@ Object.defineProperty(exports, "__esModule", {
4
4
  value: true
5
5
  });
6
6
  exports.shouldComposeModelMatrix = shouldComposeModelMatrix;
7
- var _typed = require("@deck.gl/core/typed");
7
+ var _core = require("@deck.gl/core");
8
8
  // SPDX-License-Identifier: MIT
9
9
  // Copyright contributors to the kepler.gl project
10
10
 
@@ -13,6 +13,6 @@ var _typed = require("@deck.gl/core/typed");
13
13
  // since rotating latitude and longitude can not provide meaningful results, hence `composeModelMatrix` is disabled
14
14
  // when in LNGLAT and LNGLAT_OFFSET coordinates.
15
15
  function shouldComposeModelMatrix(viewport, coordinateSystem) {
16
- return coordinateSystem === _typed.COORDINATE_SYSTEM.CARTESIAN || coordinateSystem === _typed.COORDINATE_SYSTEM.METER_OFFSETS || coordinateSystem === _typed.COORDINATE_SYSTEM.DEFAULT && !viewport.isGeospatial;
16
+ return coordinateSystem === _core.COORDINATE_SYSTEM.CARTESIAN || coordinateSystem === _core.COORDINATE_SYSTEM.METER_OFFSETS || coordinateSystem === _core.COORDINATE_SYSTEM.DEFAULT && !viewport.isGeospatial;
17
17
  }
18
- //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJfdHlwZWQiLCJyZXF1aXJlIiwic2hvdWxkQ29tcG9zZU1vZGVsTWF0cml4Iiwidmlld3BvcnQiLCJjb29yZGluYXRlU3lzdGVtIiwiQ09PUkRJTkFURV9TWVNURU0iLCJDQVJURVNJQU4iLCJNRVRFUl9PRkZTRVRTIiwiREVGQVVMVCIsImlzR2Vvc3BhdGlhbCJdLCJzb3VyY2VzIjpbIi4uLy4uLy4uL3NyYy9yYXN0ZXIvcmFzdGVyLW1lc2gtbGF5ZXIvbWF0cml4LnRzIl0sInNvdXJjZXNDb250ZW50IjpbIi8vIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBNSVRcbi8vIENvcHlyaWdodCBjb250cmlidXRvcnMgdG8gdGhlIGtlcGxlci5nbCBwcm9qZWN0XG5cbmltcG9ydCB7Q09PUkRJTkFURV9TWVNURU0sIFZpZXdwb3J0LCBDb29yZGluYXRlU3lzdGVtfSBmcm9tICdAZGVjay5nbC9jb3JlL3R5cGVkJztcblxuLy8gb25seSBhcHBseSBjb21wb3NlTW9kZWxNYXRyaXggd2hlbiBpbiBjYXJ0ZXNpYW4gb3IgbWV0ZXJfb2Zmc2V0cyBjb29yZGluYXRlIHN5c3RlbVxuLy8gd2l0aCBgY29tcG9zZU1vZGVsTWF0cml4YCBlbmFibGVkLCB0aGUgcm90YXRpb24gcGFydCBvZiB0aGUgbGF5ZXIncyBtb2RlbE1hdHJpeCB3aWxsIGJlIGNvbXBvc2VkIHRvIGluc3RhbmNlJ3MgdHJhbnNmb3JtYXRpb25zXG4vLyBzaW5jZSByb3RhdGluZyBsYXRpdHVkZSBhbmQgbG9uZ2l0dWRlIGNhbiBub3QgcHJvdmlkZSBtZWFuaW5nZnVsIHJlc3VsdHMsIGhlbmNlIGBjb21wb3NlTW9kZWxNYXRyaXhgIGlzIGRpc2FibGVkXG4vLyB3aGVuIGluIExOR0xBVCBhbmQgTE5HTEFUX09GRlNFVCBjb29yZGluYXRlcy5cbmV4cG9ydCBmdW5jdGlvbiBzaG91bGRDb21wb3NlTW9kZWxNYXRyaXgoXG4gIHZpZXdwb3J0OiBWaWV3cG9ydCxcbiAgY29vcmRpbmF0ZVN5c3RlbTogQ29vcmRpbmF0ZVN5c3RlbVxuKTogYm9vbGVhbiB7XG4gIHJldHVybiAoXG4gICAgY29vcmRpbmF0ZVN5c3RlbSA9PT0gQ09PUkRJTkFURV9TWVNURU0uQ0FSVEVTSUFOIHx8XG4gICAgY29vcmRpbmF0ZVN5c3RlbSA9PT0gQ09PUkRJTkFURV9TWVNURU0uTUVURVJfT0ZGU0VUUyB8fFxuICAgIChjb29yZGluYXRlU3lzdGVtID09PSBDT09SRElOQVRFX1NZU1RFTS5ERUZBVUxUICYmICF2aWV3cG9ydC5pc0dlb3NwYXRpYWwpXG4gICk7XG59XG4iXSwibWFwcGluZ3MiOiI7Ozs7OztBQUdBLElBQUFBLE1BQUEsR0FBQUMsT0FBQTtBQUhBO0FBQ0E7O0FBSUE7QUFDQTtBQUNBO0FBQ0E7QUFDTyxTQUFTQyx3QkFBd0JBLENBQ3RDQyxRQUFrQixFQUNsQkMsZ0JBQWtDLEVBQ3pCO0VBQ1QsT0FDRUEsZ0JBQWdCLEtBQUtDLHdCQUFpQixDQUFDQyxTQUFTLElBQ2hERixnQkFBZ0IsS0FBS0Msd0JBQWlCLENBQUNFLGFBQWEsSUFDbkRILGdCQUFnQixLQUFLQyx3QkFBaUIsQ0FBQ0csT0FBTyxJQUFJLENBQUNMLFFBQVEsQ0FBQ00sWUFBYTtBQUU5RSIsImlnbm9yZUxpc3QiOltdfQ==
18
+ //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJfY29yZSIsInJlcXVpcmUiLCJzaG91bGRDb21wb3NlTW9kZWxNYXRyaXgiLCJ2aWV3cG9ydCIsImNvb3JkaW5hdGVTeXN0ZW0iLCJDT09SRElOQVRFX1NZU1RFTSIsIkNBUlRFU0lBTiIsIk1FVEVSX09GRlNFVFMiLCJERUZBVUxUIiwiaXNHZW9zcGF0aWFsIl0sInNvdXJjZXMiOlsiLi4vLi4vLi4vc3JjL3Jhc3Rlci9yYXN0ZXItbWVzaC1sYXllci9tYXRyaXgudHMiXSwic291cmNlc0NvbnRlbnQiOlsiLy8gU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IE1JVFxuLy8gQ29weXJpZ2h0IGNvbnRyaWJ1dG9ycyB0byB0aGUga2VwbGVyLmdsIHByb2plY3RcblxuaW1wb3J0IHtDT09SRElOQVRFX1NZU1RFTSwgVmlld3BvcnR9IGZyb20gJ0BkZWNrLmdsL2NvcmUnO1xudHlwZSBDb29yZGluYXRlU3lzdGVtID0gbnVtYmVyO1xuXG4vLyBvbmx5IGFwcGx5IGNvbXBvc2VNb2RlbE1hdHJpeCB3aGVuIGluIGNhcnRlc2lhbiBvciBtZXRlcl9vZmZzZXRzIGNvb3JkaW5hdGUgc3lzdGVtXG4vLyB3aXRoIGBjb21wb3NlTW9kZWxNYXRyaXhgIGVuYWJsZWQsIHRoZSByb3RhdGlvbiBwYXJ0IG9mIHRoZSBsYXllcidzIG1vZGVsTWF0cml4IHdpbGwgYmUgY29tcG9zZWQgdG8gaW5zdGFuY2UncyB0cmFuc2Zvcm1hdGlvbnNcbi8vIHNpbmNlIHJvdGF0aW5nIGxhdGl0dWRlIGFuZCBsb25naXR1ZGUgY2FuIG5vdCBwcm92aWRlIG1lYW5pbmdmdWwgcmVzdWx0cywgaGVuY2UgYGNvbXBvc2VNb2RlbE1hdHJpeGAgaXMgZGlzYWJsZWRcbi8vIHdoZW4gaW4gTE5HTEFUIGFuZCBMTkdMQVRfT0ZGU0VUIGNvb3JkaW5hdGVzLlxuZXhwb3J0IGZ1bmN0aW9uIHNob3VsZENvbXBvc2VNb2RlbE1hdHJpeChcbiAgdmlld3BvcnQ6IFZpZXdwb3J0LFxuICBjb29yZGluYXRlU3lzdGVtOiBDb29yZGluYXRlU3lzdGVtXG4pOiBib29sZWFuIHtcbiAgcmV0dXJuIChcbiAgICBjb29yZGluYXRlU3lzdGVtID09PSBDT09SRElOQVRFX1NZU1RFTS5DQVJURVNJQU4gfHxcbiAgICBjb29yZGluYXRlU3lzdGVtID09PSBDT09SRElOQVRFX1NZU1RFTS5NRVRFUl9PRkZTRVRTIHx8XG4gICAgKGNvb3JkaW5hdGVTeXN0ZW0gPT09IENPT1JESU5BVEVfU1lTVEVNLkRFRkFVTFQgJiYgIXZpZXdwb3J0LmlzR2Vvc3BhdGlhbClcbiAgKTtcbn1cbiJdLCJtYXBwaW5ncyI6Ijs7Ozs7O0FBR0EsSUFBQUEsS0FBQSxHQUFBQyxPQUFBO0FBSEE7QUFDQTs7QUFLQTtBQUNBO0FBQ0E7QUFDQTtBQUNPLFNBQVNDLHdCQUF3QkEsQ0FDdENDLFFBQWtCLEVBQ2xCQyxnQkFBa0MsRUFDekI7RUFDVCxPQUNFQSxnQkFBZ0IsS0FBS0MsdUJBQWlCLENBQUNDLFNBQVMsSUFDaERGLGdCQUFnQixLQUFLQyx1QkFBaUIsQ0FBQ0UsYUFBYSxJQUNuREgsZ0JBQWdCLEtBQUtDLHVCQUFpQixDQUFDRyxPQUFPLElBQUksQ0FBQ0wsUUFBUSxDQUFDTSxZQUFhO0FBRTlFIiwiaWdub3JlTGlzdCI6W119
@@ -0,0 +1,19 @@
1
+ export declare const rasterMeshUniforms: {
2
+ name: string;
3
+ vs: string;
4
+ fs: string;
5
+ uniformTypes: {
6
+ meshOpacity: string;
7
+ meshFlatShading: string;
8
+ };
9
+ };
10
+ /**
11
+ * Build the vertex shader for the raster mesh layer.
12
+ */
13
+ export declare function buildRasterMeshVertexShader(): string;
14
+ /**
15
+ * Build the fragment shader for the raster mesh layer.
16
+ * Uses DECKGL_CREATE_COLOR and DECKGL_MUTATE_COLOR hooks registered with
17
+ * the ShaderAssembler. Module inject code is assembled by luma.gl.
18
+ */
19
+ export declare function buildRasterMeshFragmentShader(): string;
@@ -0,0 +1,38 @@
1
+ "use strict";
2
+
3
+ Object.defineProperty(exports, "__esModule", {
4
+ value: true
5
+ });
6
+ exports.buildRasterMeshFragmentShader = buildRasterMeshFragmentShader;
7
+ exports.buildRasterMeshVertexShader = buildRasterMeshVertexShader;
8
+ exports.rasterMeshUniforms = void 0;
9
+ // SPDX-License-Identifier: MIT
10
+ // Copyright contributors to the kepler.gl project
11
+
12
+ var rasterMeshUniformBlock = "uniform rasterMeshUniforms {\n float meshOpacity;\n float meshFlatShading;\n} rasterMesh;\n";
13
+ var rasterMeshUniforms = exports.rasterMeshUniforms = {
14
+ name: 'rasterMesh',
15
+ vs: rasterMeshUniformBlock,
16
+ fs: rasterMeshUniformBlock,
17
+ uniformTypes: {
18
+ meshOpacity: 'f32',
19
+ meshFlatShading: 'f32'
20
+ }
21
+ };
22
+
23
+ /**
24
+ * Build the vertex shader for the raster mesh layer.
25
+ */
26
+ function buildRasterMeshVertexShader() {
27
+ return "#version 300 es\n#define SHADER_NAME raster-mesh-layer-vs\n\nin vec3 positions;\nin vec3 positions64Low;\nin vec3 normals;\nin vec3 colors;\nin vec2 texCoords;\n\nout vec2 vTexCoord;\nout vec3 cameraPosition;\nout vec3 normals_commonspace;\nout vec4 position_commonspace;\nout vec4 vColor;\n\nconst vec3 pickingColor = vec3(1.0, 0.0, 0.0);\nconst vec3 defaultNormal = vec3(0.0, 0.0, 1.0);\n\nvoid main(void) {\n geometry.worldPosition = positions;\n geometry.uv = texCoords;\n geometry.pickingColor = pickingColor;\n\n normals_commonspace = project_normal(normals);\n geometry.normal = normals_commonspace;\n\n gl_Position = project_position_to_clipspace(positions, positions64Low, vec3(0.0), geometry.position);\n position_commonspace = geometry.position;\n DECKGL_FILTER_GL_POSITION(gl_Position, geometry);\n\n vTexCoord = texCoords;\n cameraPosition = project.cameraPosition;\n\n vColor = vec4(colors, 1.0);\n DECKGL_FILTER_COLOR(vColor, geometry);\n}\n";
28
+ }
29
+
30
+ /**
31
+ * Build the fragment shader for the raster mesh layer.
32
+ * Uses DECKGL_CREATE_COLOR and DECKGL_MUTATE_COLOR hooks registered with
33
+ * the ShaderAssembler. Module inject code is assembled by luma.gl.
34
+ */
35
+ function buildRasterMeshFragmentShader() {
36
+ return "#version 300 es\n#define SHADER_NAME raster-mesh-layer-fs\n\nprecision highp float;\nprecision mediump int;\nprecision mediump usampler2D;\n\nin vec2 vTexCoord;\nin vec3 cameraPosition;\nin vec3 normals_commonspace;\nin vec4 position_commonspace;\nin vec4 vColor;\n\nout vec4 fragColor;\n\nvoid main(void) {\n geometry.uv = vTexCoord;\n vec2 coord = vTexCoord;\n vec4 image;\n\n DECKGL_CREATE_COLOR(image, coord);\n\n DECKGL_MUTATE_COLOR(image, coord);\n\n vec3 normal;\n if (rasterMesh.meshFlatShading > 0.5) {\n normal = normalize(cross(dFdx(position_commonspace.xyz), dFdy(position_commonspace.xyz)));\n } else {\n normal = normals_commonspace;\n }\n\n vec3 lightColor = lighting_getLightColor(image.rgb, cameraPosition, position_commonspace.xyz, normal);\n fragColor = vec4(lightColor, rasterMesh.meshOpacity);\n\n DECKGL_FILTER_COLOR(fragColor, geometry);\n}\n";
37
+ }
38
+ //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJyYXN0ZXJNZXNoVW5pZm9ybUJsb2NrIiwicmFzdGVyTWVzaFVuaWZvcm1zIiwiZXhwb3J0cyIsIm5hbWUiLCJ2cyIsImZzIiwidW5pZm9ybVR5cGVzIiwibWVzaE9wYWNpdHkiLCJtZXNoRmxhdFNoYWRpbmciLCJidWlsZFJhc3Rlck1lc2hWZXJ0ZXhTaGFkZXIiLCJidWlsZFJhc3Rlck1lc2hGcmFnbWVudFNoYWRlciJdLCJzb3VyY2VzIjpbIi4uLy4uLy4uL3NyYy9yYXN0ZXIvcmFzdGVyLW1lc2gtbGF5ZXIvcmFzdGVyLW1lc2gtbGF5ZXItc2hhZGVycy50cyJdLCJzb3VyY2VzQ29udGVudCI6WyIvLyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogTUlUXG4vLyBDb3B5cmlnaHQgY29udHJpYnV0b3JzIHRvIHRoZSBrZXBsZXIuZ2wgcHJvamVjdFxuXG5jb25zdCByYXN0ZXJNZXNoVW5pZm9ybUJsb2NrID0gYFxcXG51bmlmb3JtIHJhc3Rlck1lc2hVbmlmb3JtcyB7XG4gIGZsb2F0IG1lc2hPcGFjaXR5O1xuICBmbG9hdCBtZXNoRmxhdFNoYWRpbmc7XG59IHJhc3Rlck1lc2g7XG5gO1xuXG5leHBvcnQgY29uc3QgcmFzdGVyTWVzaFVuaWZvcm1zID0ge1xuICBuYW1lOiAncmFzdGVyTWVzaCcsXG4gIHZzOiByYXN0ZXJNZXNoVW5pZm9ybUJsb2NrLFxuICBmczogcmFzdGVyTWVzaFVuaWZvcm1CbG9jayxcbiAgdW5pZm9ybVR5cGVzOiB7XG4gICAgbWVzaE9wYWNpdHk6ICdmMzInLFxuICAgIG1lc2hGbGF0U2hhZGluZzogJ2YzMidcbiAgfVxufTtcblxuLyoqXG4gKiBCdWlsZCB0aGUgdmVydGV4IHNoYWRlciBmb3IgdGhlIHJhc3RlciBtZXNoIGxheWVyLlxuICovXG5leHBvcnQgZnVuY3Rpb24gYnVpbGRSYXN0ZXJNZXNoVmVydGV4U2hhZGVyKCk6IHN0cmluZyB7XG4gIHJldHVybiBgXFxcbiN2ZXJzaW9uIDMwMCBlc1xuI2RlZmluZSBTSEFERVJfTkFNRSByYXN0ZXItbWVzaC1sYXllci12c1xuXG5pbiB2ZWMzIHBvc2l0aW9ucztcbmluIHZlYzMgcG9zaXRpb25zNjRMb3c7XG5pbiB2ZWMzIG5vcm1hbHM7XG5pbiB2ZWMzIGNvbG9ycztcbmluIHZlYzIgdGV4Q29vcmRzO1xuXG5vdXQgdmVjMiB2VGV4Q29vcmQ7XG5vdXQgdmVjMyBjYW1lcmFQb3NpdGlvbjtcbm91dCB2ZWMzIG5vcm1hbHNfY29tbW9uc3BhY2U7XG5vdXQgdmVjNCBwb3NpdGlvbl9jb21tb25zcGFjZTtcbm91dCB2ZWM0IHZDb2xvcjtcblxuY29uc3QgdmVjMyBwaWNraW5nQ29sb3IgPSB2ZWMzKDEuMCwgMC4wLCAwLjApO1xuY29uc3QgdmVjMyBkZWZhdWx0Tm9ybWFsID0gdmVjMygwLjAsIDAuMCwgMS4wKTtcblxudm9pZCBtYWluKHZvaWQpIHtcbiAgZ2VvbWV0cnkud29ybGRQb3NpdGlvbiA9IHBvc2l0aW9ucztcbiAgZ2VvbWV0cnkudXYgPSB0ZXhDb29yZHM7XG4gIGdlb21ldHJ5LnBpY2tpbmdDb2xvciA9IHBpY2tpbmdDb2xvcjtcblxuICBub3JtYWxzX2NvbW1vbnNwYWNlID0gcHJvamVjdF9ub3JtYWwobm9ybWFscyk7XG4gIGdlb21ldHJ5Lm5vcm1hbCA9IG5vcm1hbHNfY29tbW9uc3BhY2U7XG5cbiAgZ2xfUG9zaXRpb24gPSBwcm9qZWN0X3Bvc2l0aW9uX3RvX2NsaXBzcGFjZShwb3NpdGlvbnMsIHBvc2l0aW9uczY0TG93LCB2ZWMzKDAuMCksIGdlb21ldHJ5LnBvc2l0aW9uKTtcbiAgcG9zaXRpb25fY29tbW9uc3BhY2UgPSBnZW9tZXRyeS5wb3NpdGlvbjtcbiAgREVDS0dMX0ZJTFRFUl9HTF9QT1NJVElPTihnbF9Qb3NpdGlvbiwgZ2VvbWV0cnkpO1xuXG4gIHZUZXhDb29yZCA9IHRleENvb3JkcztcbiAgY2FtZXJhUG9zaXRpb24gPSBwcm9qZWN0LmNhbWVyYVBvc2l0aW9uO1xuXG4gIHZDb2xvciA9IHZlYzQoY29sb3JzLCAxLjApO1xuICBERUNLR0xfRklMVEVSX0NPTE9SKHZDb2xvciwgZ2VvbWV0cnkpO1xufVxuYDtcbn1cblxuLyoqXG4gKiBCdWlsZCB0aGUgZnJhZ21lbnQgc2hhZGVyIGZvciB0aGUgcmFzdGVyIG1lc2ggbGF5ZXIuXG4gKiBVc2VzIERFQ0tHTF9DUkVBVEVfQ09MT1IgYW5kIERFQ0tHTF9NVVRBVEVfQ09MT1IgaG9va3MgcmVnaXN0ZXJlZCB3aXRoXG4gKiB0aGUgU2hhZGVyQXNzZW1ibGVyLiBNb2R1bGUgaW5qZWN0IGNvZGUgaXMgYXNzZW1ibGVkIGJ5IGx1bWEuZ2wuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBidWlsZFJhc3Rlck1lc2hGcmFnbWVudFNoYWRlcigpOiBzdHJpbmcge1xuICByZXR1cm4gYFxcXG4jdmVyc2lvbiAzMDAgZXNcbiNkZWZpbmUgU0hBREVSX05BTUUgcmFzdGVyLW1lc2gtbGF5ZXItZnNcblxucHJlY2lzaW9uIGhpZ2hwIGZsb2F0O1xucHJlY2lzaW9uIG1lZGl1bXAgaW50O1xucHJlY2lzaW9uIG1lZGl1bXAgdXNhbXBsZXIyRDtcblxuaW4gdmVjMiB2VGV4Q29vcmQ7XG5pbiB2ZWMzIGNhbWVyYVBvc2l0aW9uO1xuaW4gdmVjMyBub3JtYWxzX2NvbW1vbnNwYWNlO1xuaW4gdmVjNCBwb3NpdGlvbl9jb21tb25zcGFjZTtcbmluIHZlYzQgdkNvbG9yO1xuXG5vdXQgdmVjNCBmcmFnQ29sb3I7XG5cbnZvaWQgbWFpbih2b2lkKSB7XG4gIGdlb21ldHJ5LnV2ID0gdlRleENvb3JkO1xuICB2ZWMyIGNvb3JkID0gdlRleENvb3JkO1xuICB2ZWM0IGltYWdlO1xuXG4gIERFQ0tHTF9DUkVBVEVfQ09MT1IoaW1hZ2UsIGNvb3JkKTtcblxuICBERUNLR0xfTVVUQVRFX0NPTE9SKGltYWdlLCBjb29yZCk7XG5cbiAgdmVjMyBub3JtYWw7XG4gIGlmIChyYXN0ZXJNZXNoLm1lc2hGbGF0U2hhZGluZyA+IDAuNSkge1xuICAgIG5vcm1hbCA9IG5vcm1hbGl6ZShjcm9zcyhkRmR4KHBvc2l0aW9uX2NvbW1vbnNwYWNlLnh5eiksIGRGZHkocG9zaXRpb25fY29tbW9uc3BhY2UueHl6KSkpO1xuICB9IGVsc2Uge1xuICAgIG5vcm1hbCA9IG5vcm1hbHNfY29tbW9uc3BhY2U7XG4gIH1cblxuICB2ZWMzIGxpZ2h0Q29sb3IgPSBsaWdodGluZ19nZXRMaWdodENvbG9yKGltYWdlLnJnYiwgY2FtZXJhUG9zaXRpb24sIHBvc2l0aW9uX2NvbW1vbnNwYWNlLnh5eiwgbm9ybWFsKTtcbiAgZnJhZ0NvbG9yID0gdmVjNChsaWdodENvbG9yLCByYXN0ZXJNZXNoLm1lc2hPcGFjaXR5KTtcblxuICBERUNLR0xfRklMVEVSX0NPTE9SKGZyYWdDb2xvciwgZ2VvbWV0cnkpO1xufVxuYDtcbn1cbiJdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7QUFBQTtBQUNBOztBQUVBLElBQU1BLHNCQUFzQixrR0FLM0I7QUFFTSxJQUFNQyxrQkFBa0IsR0FBQUMsT0FBQSxDQUFBRCxrQkFBQSxHQUFHO0VBQ2hDRSxJQUFJLEVBQUUsWUFBWTtFQUNsQkMsRUFBRSxFQUFFSixzQkFBc0I7RUFDMUJLLEVBQUUsRUFBRUwsc0JBQXNCO0VBQzFCTSxZQUFZLEVBQUU7SUFDWkMsV0FBVyxFQUFFLEtBQUs7SUFDbEJDLGVBQWUsRUFBRTtFQUNuQjtBQUNGLENBQUM7O0FBRUQ7QUFDQTtBQUNBO0FBQ08sU0FBU0MsMkJBQTJCQSxDQUFBLEVBQVc7RUFDcEQ7QUFzQ0Y7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNPLFNBQVNDLDZCQUE2QkEsQ0FBQSxFQUFXO0VBQ3REO0FBc0NGIiwiaWdub3JlTGlzdCI6W119
@@ -1,13 +1,13 @@
1
- import { UpdateParameters } from '@deck.gl/core/typed';
2
- import { SimpleMeshLayer, SimpleMeshLayerProps } from '@deck.gl/mesh-layers/typed';
3
- import { Model } from '@luma.gl/core';
4
- import { UniformsOptions } from '@luma.gl/webgl/src/classes/uniforms';
1
+ import { UpdateParameters } from '@deck.gl/core';
2
+ import { SimpleMeshLayer, SimpleMeshLayerProps } from '@deck.gl/mesh-layers';
3
+ import { Model } from '@luma.gl/engine';
5
4
  import type { RasterLayerAddedProps, ImageState } from '../types';
6
- declare type Mesh = SimpleMeshLayerProps['mesh'];
5
+ type Mesh = SimpleMeshLayerProps['mesh'];
7
6
  export default class RasterMeshLayer extends SimpleMeshLayer<any, RasterLayerAddedProps> {
8
7
  state: SimpleMeshLayer<RasterLayerAddedProps>['state'] & {
9
8
  images: ImageState;
10
9
  };
10
+ _redrawScheduled: boolean;
11
11
  initializeState(): void;
12
12
  getShaders(): any;
13
13
  updateState(params: UpdateParameters<SimpleMeshLayer<any, RasterLayerAddedProps>>): void;
@@ -15,7 +15,8 @@ export default class RasterMeshLayer extends SimpleMeshLayer<any, RasterLayerAdd
15
15
  props: RasterLayerAddedProps;
16
16
  oldProps: RasterLayerAddedProps;
17
17
  }): void;
18
- draw({ uniforms }: UniformsOptions): void;
18
+ draw(_opts: Record<string, unknown>): void;
19
+ _scheduleRedraw(): void;
19
20
  finalizeState(): void;
20
21
  protected getModel(mesh: Mesh): Model;
21
22
  }