@kepler.gl/deckgl-layers 3.2.6 → 3.3.0-alpha.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (65) 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 -33
  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 +4913 -6
  13. package/dist/grid-layer/enhanced-cpu-grid-layer.js +67 -44
  14. package/dist/hexagon-layer/enhanced-hexagon-layer.d.ts +4910 -4
  15. package/dist/hexagon-layer/enhanced-hexagon-layer.js +82 -41
  16. package/dist/index.d.ts +1 -0
  17. package/dist/index.js +13 -1
  18. package/dist/layer-utils/aggregation-utils.d.ts +44 -0
  19. package/dist/layer-utils/aggregation-utils.js +181 -0
  20. package/dist/layer-utils/cpu-aggregator.d.ts +74 -27
  21. package/dist/layer-utils/cpu-aggregator.js +224 -19
  22. package/dist/layer-utils/shader-utils.d.ts +1 -0
  23. package/dist/layer-utils/shader-utils.js +10 -1
  24. package/dist/line-layer/line-layer.d.ts +4 -4
  25. package/dist/line-layer/line-layer.js +29 -21
  26. package/dist/raster/images.d.ts +10 -3
  27. package/dist/raster/images.js +154 -60
  28. package/dist/raster/pipeline-validation-patch.d.ts +1 -0
  29. package/dist/raster/pipeline-validation-patch.js +101 -0
  30. package/dist/raster/raster-layer/raster-layer-shaders.d.ts +56 -0
  31. package/dist/raster/raster-layer/raster-layer-shaders.js +163 -0
  32. package/dist/raster/raster-layer/raster-layer.d.ts +6 -6
  33. package/dist/raster/raster-layer/raster-layer.js +90 -88
  34. package/dist/raster/raster-mesh-layer/matrix.d.ts +3 -1
  35. package/dist/raster/raster-mesh-layer/matrix.js +3 -3
  36. package/dist/raster/raster-mesh-layer/raster-mesh-layer-shaders.d.ts +19 -0
  37. package/dist/raster/raster-mesh-layer/raster-mesh-layer-shaders.js +38 -0
  38. package/dist/raster/raster-mesh-layer/raster-mesh-layer.d.ts +7 -6
  39. package/dist/raster/raster-mesh-layer/raster-mesh-layer.js +97 -83
  40. package/dist/raster/raster-processing-uniforms.d.ts +38 -0
  41. package/dist/raster/raster-processing-uniforms.js +124 -0
  42. package/dist/raster/types.d.ts +8 -8
  43. package/dist/raster/types.js +1 -1
  44. package/dist/raster/util.d.ts +15 -0
  45. package/dist/raster/util.js +113 -3
  46. package/dist/raster/webgl/color/colormap.js +13 -7
  47. package/dist/raster/webgl/color/filter.js +22 -12
  48. package/dist/raster/webgl/color/gamma-contrast.js +9 -3
  49. package/dist/raster/webgl/color/linear-rescale.js +9 -5
  50. package/dist/raster/webgl/color/saturation.js +7 -4
  51. package/dist/raster/webgl/color/sigmoidal-contrast.js +9 -5
  52. package/dist/raster/webgl/pansharpen/pansharpen-brovey.js +7 -4
  53. package/dist/raster/webgl/texture/combine-bands.js +1 -1
  54. package/dist/raster/webgl/texture/mask.js +27 -35
  55. package/dist/raster/webgl/texture/reorder-bands.js +8 -5
  56. package/dist/raster/webgl/texture/rgba-image.js +1 -1
  57. package/dist/raster/webgl/types.d.ts +11 -6
  58. package/dist/raster/webgl/types.js +1 -1
  59. package/dist/svg-icon-layer/scatterplot-icon-layer.d.ts +2 -4
  60. package/dist/svg-icon-layer/scatterplot-icon-layer.js +19 -25
  61. package/dist/svg-icon-layer/svg-icon-layer.d.ts +4 -6
  62. package/dist/svg-icon-layer/svg-icon-layer.js +5 -3
  63. package/dist/wms/wms-layer.d.ts +8 -5
  64. package/dist/wms/wms-layer.js +100 -27
  65. package/package.json +21 -17
@@ -13,20 +13,15 @@ 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/mesh-layers/typed");
18
- var _constants = _interopRequireDefault(require("@luma.gl/constants"));
19
- var _core = require("@luma.gl/core");
16
+ var _meshLayers = require("@deck.gl/mesh-layers");
20
17
  var _engine = require("@luma.gl/engine");
21
- var _rasterMeshLayerWebgl = _interopRequireDefault(require("./raster-mesh-layer-webgl1.fs"));
22
- var _rasterMeshLayerWebgl2 = _interopRequireDefault(require("./raster-mesh-layer-webgl1.vs"));
23
- var _rasterMeshLayerWebgl3 = _interopRequireDefault(require("./raster-mesh-layer-webgl2.fs"));
24
- var _rasterMeshLayerWebgl4 = _interopRequireDefault(require("./raster-mesh-layer-webgl2.vs"));
18
+ var _rasterMeshLayerShaders = require("./raster-mesh-layer-shaders");
19
+ var _rasterLayerShaders = require("../raster-layer/raster-layer-shaders");
25
20
  var _images = require("../images");
26
21
  var _util = require("../util");
27
- 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; } } }; }
28
- 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; } }
29
- 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; }
22
+ var _pipelineValidationPatch = require("../pipeline-validation-patch");
23
+ var _rasterProcessingUniforms = require("../raster-processing-uniforms");
24
+ var _constants = require("@kepler.gl/constants");
30
25
  function _callSuper(t, o, e) { return o = (0, _getPrototypeOf2["default"])(o), (0, _possibleConstructorReturn2["default"])(t, _isNativeReflectConstruct() ? Reflect.construct(o, e || [], (0, _getPrototypeOf2["default"])(t).constructor) : o.apply(t, e)); }
31
26
  function _isNativeReflectConstruct() { try { var t = !Boolean.prototype.valueOf.call(Reflect.construct(Boolean, [], function () {})); } catch (t) {} return (_isNativeReflectConstruct = function _isNativeReflectConstruct() { return !!t; })(); }
32
27
  function _superPropGet(t, e, r, o) { var p = (0, _get2["default"])((0, _getPrototypeOf2["default"])(1 & o ? t.prototype : t), e, r); return 2 & o ? function (t) { return p.apply(r, t); } : p; }
@@ -34,7 +29,9 @@ function ownKeys(e, r) { var t = Object.keys(e); if (Object.getOwnPropertySymbol
34
29
  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
35
30
  // Copyright contributors to the kepler.gl project
36
31
  function validateGeometryAttributes(attributes) {
37
- _typed.log.assert(attributes.positions || attributes.POSITION, 'RasterMeshLayer requires "postions" or "POSITION" attribute in mesh property.');
32
+ if (!(attributes.positions || attributes.POSITION)) {
33
+ throw new Error('RasterMeshLayer requires "positions" or "POSITION" attribute in mesh property.');
34
+ }
38
35
  }
39
36
 
40
37
  /*
@@ -42,21 +39,21 @@ function validateGeometryAttributes(attributes) {
42
39
  * @returns geometry
43
40
  */
44
41
  function getGeometry(data) {
45
- if (data.attributes) {
42
+ if ('attributes' in data && data.attributes) {
46
43
  validateGeometryAttributes(data.attributes);
47
- if (data instanceof _core.Geometry) {
44
+ if (data instanceof _engine.Geometry) {
48
45
  return data;
49
46
  }
50
- return new _core.Geometry(data);
51
- } else if (data.positions || data.POSITION) {
47
+ return new _engine.Geometry(data);
48
+ } else if ('positions' in data || 'POSITION' in data) {
52
49
  validateGeometryAttributes(data);
53
- return new _core.Geometry({
50
+ return new _engine.Geometry({
54
51
  attributes: data
55
52
  });
56
53
  }
57
54
  throw Error('Invalid mesh');
58
55
  }
59
- var defaultProps = _objectSpread(_objectSpread({}, _typed2.SimpleMeshLayer.defaultProps), {}, {
56
+ var defaultProps = _objectSpread(_objectSpread({}, _meshLayers.SimpleMeshLayer.defaultProps), {}, {
60
57
  modules: {
61
58
  type: 'array',
62
59
  value: [],
@@ -71,35 +68,30 @@ var defaultProps = _objectSpread(_objectSpread({}, _typed2.SimpleMeshLayer.defau
71
68
  type: 'object',
72
69
  value: {},
73
70
  compare: true
71
+ },
72
+ onRedrawNeeded: {
73
+ type: 'function',
74
+ value: null,
75
+ compare: false
74
76
  }
75
77
  });
76
78
  var RasterMeshLayer = exports["default"] = /*#__PURE__*/function (_SimpleMeshLayer) {
77
79
  function RasterMeshLayer() {
80
+ var _this;
78
81
  (0, _classCallCheck2["default"])(this, RasterMeshLayer);
79
- return _callSuper(this, RasterMeshLayer, arguments);
82
+ for (var _len = arguments.length, args = new Array(_len), _key = 0; _key < _len; _key++) {
83
+ args[_key] = arguments[_key];
84
+ }
85
+ _this = _callSuper(this, RasterMeshLayer, [].concat(args));
86
+ (0, _defineProperty2["default"])(_this, "_redrawScheduled", false);
87
+ return _this;
80
88
  }
81
89
  (0, _inherits2["default"])(RasterMeshLayer, _SimpleMeshLayer);
82
90
  return (0, _createClass2["default"])(RasterMeshLayer, [{
83
91
  key: "initializeState",
84
92
  value: function initializeState() {
85
- var gl = this.context.gl;
86
- var programManager = _engine.ProgramManager.getDefaultProgramManager(gl);
87
- var fsStr1 = 'fs:DECKGL_MUTATE_COLOR(inout vec4 image, in vec2 coord)';
88
- var fsStr2 = 'fs:DECKGL_CREATE_COLOR(inout vec4 image, in vec2 coord)';
89
-
90
- // Only initialize shader hook functions _once globally_
91
- // Since the program manager is shared across all layers, but many layers
92
- // might be created, this solves the performance issue of always adding new
93
- // hook functions.
94
- if (!programManager._hookFunctions.includes(fsStr1)) {
95
- programManager.addShaderHook(fsStr1);
96
- }
97
- if (!programManager._hookFunctions.includes(fsStr2)) {
98
- programManager.addShaderHook(fsStr2);
99
- }
100
-
101
- // images is a mapping from keys to Texture2D objects. The keys should match
102
- // names of uniforms in shader modules
93
+ (0, _pipelineValidationPatch.patchPipelineValidation)();
94
+ (0, _rasterLayerShaders.ensureRasterHooksRegistered)();
103
95
  this.setState({
104
96
  images: {}
105
97
  });
@@ -108,35 +100,21 @@ var RasterMeshLayer = exports["default"] = /*#__PURE__*/function (_SimpleMeshLay
108
100
  }, {
109
101
  key: "getShaders",
110
102
  value: function getShaders() {
111
- var gl = this.context.gl;
112
103
  var _this$props$modules = this.props.modules,
113
104
  modules = _this$props$modules === void 0 ? [] : _this$props$modules;
114
- var webgl2 = (0, _core.isWebGL2)(gl);
115
-
116
- // Choose webgl version for module
117
- // If fs2 or fs1 keys exist, prefer them, but fall back to fs, so that
118
- // version-independent modules don't need to care
119
- var _iterator = _createForOfIteratorHelper(modules),
120
- _step;
121
- try {
122
- for (_iterator.s(); !(_step = _iterator.n()).done;) {
123
- var module = _step.value;
124
- module.fs = webgl2 ? module.fs2 || module.fs : module.fs1 || module.fs;
105
+ var lumaModules = (0, _rasterLayerShaders.prepareLumaModules)(modules);
106
+ var parentShaders = _superPropGet(RasterMeshLayer, "getShaders", this, 3)([]);
125
107
 
126
- // Sampler type is always float for WebGL1
127
- if (!webgl2 && module.defines) {
128
- module.defines.SAMPLER_TYPE = 'sampler2D';
129
- }
130
- }
131
- } catch (err) {
132
- _iterator.e(err);
133
- } finally {
134
- _iterator.f();
135
- }
136
- return _objectSpread(_objectSpread({}, _superPropGet(RasterMeshLayer, "getShaders", this, 3)([])), {}, {
137
- vs: webgl2 ? _rasterMeshLayerWebgl4["default"] : _rasterMeshLayerWebgl2["default"],
138
- fs: webgl2 ? _rasterMeshLayerWebgl3["default"] : _rasterMeshLayerWebgl["default"],
139
- modules: [_typed.project32, _typed.phongLighting].concat((0, _toConsumableArray2["default"])(modules))
108
+ // Filter out simpleMeshUniforms from parent RasterMeshLayer uses its own
109
+ // shaders that don't reference SimpleMesh uniforms, and every UBO counts
110
+ // against the WebGL2 GL_MAX_FRAGMENT_UNIFORM_BUFFERS limit (typically 12).
111
+ var parentModules = (parentShaders.modules || []).filter(function (m) {
112
+ return m.name !== 'simpleMesh';
113
+ });
114
+ return _objectSpread(_objectSpread({}, parentShaders), {}, {
115
+ vs: (0, _rasterMeshLayerShaders.buildRasterMeshVertexShader)(),
116
+ fs: (0, _rasterMeshLayerShaders.buildRasterMeshFragmentShader)(),
117
+ modules: [].concat((0, _toConsumableArray2["default"])(parentModules), [_rasterMeshLayerShaders.rasterMeshUniforms, _rasterProcessingUniforms.rasterProcessingUniforms], (0, _toConsumableArray2["default"])(lumaModules))
140
118
  });
141
119
  }
142
120
 
@@ -156,12 +134,11 @@ var RasterMeshLayer = exports["default"] = /*#__PURE__*/function (_SimpleMeshLay
156
134
  }]);
157
135
  var modules = props && props.modules;
158
136
  var oldModules = oldProps && oldProps.modules;
159
-
160
- // If the list of modules changed, need to recompile the shaders
161
137
  if (props.mesh !== oldProps.mesh || changeFlags.extensionsChanged || !(0, _util.modulesEqual)(modules, oldModules)) {
162
138
  var _this$getAttributeMan;
163
139
  if (this.state.model) {
164
- this.state.model["delete"]();
140
+ var _this$state$model$des, _this$state$model;
141
+ (_this$state$model$des = (_this$state$model = this.state.model).destroy) === null || _this$state$model$des === void 0 || _this$state$model$des.call(_this$state$model);
165
142
  }
166
143
  if (props.mesh) {
167
144
  this.state.model = this.getModel(props.mesh);
@@ -179,7 +156,8 @@ var RasterMeshLayer = exports["default"] = /*#__PURE__*/function (_SimpleMeshLay
179
156
  });
180
157
  }
181
158
  if (this.state.model) {
182
- this.state.model.setDrawMode(this.props.wireframe ? _constants["default"].LINE_STRIP : _constants["default"].TRIANGLES);
159
+ var _this$state$model$set, _this$state$model2;
160
+ (_this$state$model$set = (_this$state$model2 = this.state.model).setTopology) === null || _this$state$model$set === void 0 || _this$state$model$set.call(_this$state$model2, this.props.wireframe ? _constants.TOPOLOGY.LINE_STRIP : _constants.TOPOLOGY.TRIANGLE_LIST);
183
161
  }
184
162
  }
185
163
  }, {
@@ -188,9 +166,11 @@ var RasterMeshLayer = exports["default"] = /*#__PURE__*/function (_SimpleMeshLay
188
166
  var props = _ref.props,
189
167
  oldProps = _ref.oldProps;
190
168
  var images = this.state.images;
191
- var gl = this.context.gl;
169
+ var device = this.context.device;
170
+ var gl = (device === null || device === void 0 ? void 0 : device.gl) || this.context.gl;
192
171
  var newImages = (0, _images.loadImages)({
193
172
  gl: gl,
173
+ device: device,
194
174
  images: images,
195
175
  imagesData: props.images,
196
176
  oldImagesData: oldProps.images
@@ -203,24 +183,56 @@ var RasterMeshLayer = exports["default"] = /*#__PURE__*/function (_SimpleMeshLay
203
183
  }
204
184
  }, {
205
185
  key: "draw",
206
- value: function draw(_ref2) {
207
- var uniforms = _ref2.uniforms;
186
+ value: function draw(_opts) {
187
+ var _this$props$opacity;
208
188
  var _this$state = this.state,
209
189
  model = _this$state.model,
210
190
  images = _this$state.images;
211
191
  var moduleProps = this.props.moduleProps;
212
-
213
- // Render the image
214
192
  if (!model || !images || Object.keys(images).length === 0 || !Object.values(images).every(function (item) {
215
193
  return item;
216
194
  })) {
217
195
  return;
218
196
  }
219
- var sizeScale = this.props.sizeScale;
220
- model.setUniforms(Object.assign({}, uniforms, {
221
- sizeScale: sizeScale,
222
- flatShading: !this.state.hasNormals
223
- })).updateModuleSettings(_objectSpread(_objectSpread({}, moduleProps), images)).draw();
197
+
198
+ // Set mesh-specific UBO uniforms
199
+ model.shaderInputs.setProps({
200
+ rasterMesh: {
201
+ meshOpacity: (_this$props$opacity = this.props.opacity) !== null && _this$props$opacity !== void 0 ? _this$props$opacity : 1,
202
+ meshFlatShading: !this.state.hasNormals ? 1.0 : 0.0
203
+ }
204
+ });
205
+
206
+ // Apply each custom module's uniforms/bindings to shaderInputs directly.
207
+ // We call getUniforms once per module and write the results into
208
+ // shaderInputs.moduleUniforms/moduleBindings, bypassing setProps() which
209
+ // would call getUniforms a second time on already-transformed values.
210
+ var allModuleProps = _objectSpread(_objectSpread({}, moduleProps), images);
211
+ var modules = this.props.modules || [];
212
+ (0, _util.applyModuleUniforms)(model.shaderInputs, modules, allModuleProps);
213
+ var drawSuccess = model.draw(this.context.renderPass);
214
+ if (!drawSuccess) {
215
+ this._scheduleRedraw();
216
+ }
217
+ }
218
+ }, {
219
+ key: "_scheduleRedraw",
220
+ value: function _scheduleRedraw() {
221
+ var _this2 = this;
222
+ if (this._redrawScheduled) return;
223
+ this._redrawScheduled = true;
224
+ requestAnimationFrame(function () {
225
+ var _this2$context$layerM;
226
+ _this2._redrawScheduled = false;
227
+ if (_this2.context.deck) {
228
+ // @ts-expect-error accessing private deck.gl property
229
+ _this2.context.deck._needsRedraw = 'RasterMeshLayer pipeline pending';
230
+ }
231
+ (_this2$context$layerM = _this2.context.layerManager) === null || _this2$context$layerM === void 0 || _this2$context$layerM.setNeedsRedraw('RasterMeshLayer pipeline pending');
232
+ if (typeof _this2.props.onRedrawNeeded === 'function') {
233
+ _this2.props.onRedrawNeeded();
234
+ }
235
+ });
224
236
  }
225
237
  }, {
226
238
  key: "finalizeState",
@@ -231,10 +243,12 @@ var RasterMeshLayer = exports["default"] = /*#__PURE__*/function (_SimpleMeshLay
231
243
  var image = _Object$values[_i];
232
244
  if (Array.isArray(image)) {
233
245
  image.map(function (x) {
234
- return x && x["delete"]();
246
+ var _x$delete;
247
+ return x && (x.destroy ? x.destroy() : (_x$delete = x["delete"]) === null || _x$delete === void 0 ? void 0 : _x$delete.call(x));
235
248
  });
236
249
  } else if (image) {
237
- image["delete"]();
250
+ var _image$delete;
251
+ image.destroy ? image.destroy() : (_image$delete = image["delete"]) === null || _image$delete === void 0 ? void 0 : _image$delete.call(image);
238
252
  }
239
253
  }
240
254
  }
@@ -242,8 +256,8 @@ var RasterMeshLayer = exports["default"] = /*#__PURE__*/function (_SimpleMeshLay
242
256
  }, {
243
257
  key: "getModel",
244
258
  value: function getModel(mesh) {
245
- var gl = this.context.gl;
246
- var model = new _core.Model(gl, Object.assign({}, this.getShaders(), {
259
+ var device = this.context.device || this.context.gl;
260
+ var model = new _engine.Model(device, Object.assign({}, this.getShaders(), {
247
261
  id: this.props.id,
248
262
  geometry: getGeometry(mesh),
249
263
  isInstanced: false
@@ -251,7 +265,7 @@ var RasterMeshLayer = exports["default"] = /*#__PURE__*/function (_SimpleMeshLay
251
265
  return model;
252
266
  }
253
267
  }]);
254
- }(_typed2.SimpleMeshLayer);
268
+ }(_meshLayers.SimpleMeshLayer);
255
269
  RasterMeshLayer.layerName = 'RasterMeshLayer';
256
270
  RasterMeshLayer.defaultProps = defaultProps;
257
- //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJfdHlwZWQiLCJyZXF1aXJlIiwiX3R5cGVkMiIsIl9jb25zdGFudHMiLCJfaW50ZXJvcFJlcXVpcmVEZWZhdWx0IiwiX2NvcmUiLCJfZW5naW5lIiwiX3Jhc3Rlck1lc2hMYXllcldlYmdsIiwiX3Jhc3Rlck1lc2hMYXllcldlYmdsMiIsIl9yYXN0ZXJNZXNoTGF5ZXJXZWJnbDMiLCJfcmFzdGVyTWVzaExheWVyV2ViZ2w0IiwiX2ltYWdlcyIsIl91dGlsIiwiX2NyZWF0ZUZvck9mSXRlcmF0b3JIZWxwZXIiLCJyIiwiZSIsInQiLCJTeW1ib2wiLCJpdGVyYXRvciIsIkFycmF5IiwiaXNBcnJheSIsIl91bnN1cHBvcnRlZEl0ZXJhYmxlVG9BcnJheSIsImxlbmd0aCIsIl9uIiwiRiIsInMiLCJuIiwiZG9uZSIsInZhbHVlIiwiZiIsIlR5cGVFcnJvciIsIm8iLCJhIiwidSIsImNhbGwiLCJuZXh0IiwiX2FycmF5TGlrZVRvQXJyYXkiLCJ0b1N0cmluZyIsInNsaWNlIiwiY29uc3RydWN0b3IiLCJuYW1lIiwiZnJvbSIsInRlc3QiLCJfY2FsbFN1cGVyIiwiX2dldFByb3RvdHlwZU9mMiIsIl9wb3NzaWJsZUNvbnN0cnVjdG9yUmV0dXJuMiIsIl9pc05hdGl2ZVJlZmxlY3RDb25zdHJ1Y3QiLCJSZWZsZWN0IiwiY29uc3RydWN0IiwiYXBwbHkiLCJCb29sZWFuIiwicHJvdG90eXBlIiwidmFsdWVPZiIsIl9zdXBlclByb3BHZXQiLCJwIiwiX2dldDIiLCJvd25LZXlzIiwiT2JqZWN0Iiwia2V5cyIsImdldE93blByb3BlcnR5U3ltYm9scyIsImZpbHRlciIsImdldE93blByb3BlcnR5RGVzY3JpcHRvciIsImVudW1lcmFibGUiLCJwdXNoIiwiX29iamVjdFNwcmVhZCIsImFyZ3VtZW50cyIsImZvckVhY2giLCJfZGVmaW5lUHJvcGVydHkyIiwiZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9ycyIsImRlZmluZVByb3BlcnRpZXMiLCJkZWZpbmVQcm9wZXJ0eSIsInZhbGlkYXRlR2VvbWV0cnlBdHRyaWJ1dGVzIiwiYXR0cmlidXRlcyIsImxvZyIsImFzc2VydCIsInBvc2l0aW9ucyIsIlBPU0lUSU9OIiwiZ2V0R2VvbWV0cnkiLCJkYXRhIiwiR2VvbWV0cnkiLCJFcnJvciIsImRlZmF1bHRQcm9wcyIsIlNpbXBsZU1lc2hMYXllciIsIm1vZHVsZXMiLCJ0eXBlIiwiY29tcGFyZSIsImltYWdlcyIsIm1vZHVsZVByb3BzIiwiUmFzdGVyTWVzaExheWVyIiwiZXhwb3J0cyIsIl9TaW1wbGVNZXNoTGF5ZXIiLCJfY2xhc3NDYWxsQ2hlY2syIiwiX2luaGVyaXRzMiIsIl9jcmVhdGVDbGFzczIiLCJrZXkiLCJpbml0aWFsaXplU3RhdGUiLCJnbCIsImNvbnRleHQiLCJwcm9ncmFtTWFuYWdlciIsIlByb2dyYW1NYW5hZ2VyIiwiZ2V0RGVmYXVsdFByb2dyYW1NYW5hZ2VyIiwiZnNTdHIxIiwiZnNTdHIyIiwiX2hvb2tGdW5jdGlvbnMiLCJpbmNsdWRlcyIsImFkZFNoYWRlckhvb2siLCJzZXRTdGF0ZSIsImdldFNoYWRlcnMiLCJfdGhpcyRwcm9wcyRtb2R1bGVzIiwicHJvcHMiLCJ3ZWJnbDIiLCJpc1dlYkdMMiIsIl9pdGVyYXRvciIsIl9zdGVwIiwibW9kdWxlIiwiZnMiLCJmczIiLCJmczEiLCJkZWZpbmVzIiwiU0FNUExFUl9UWVBFIiwiZXJyIiwidnMiLCJ2c1dlYkdMMiIsInZzV2ViR0wxIiwiZnNXZWJHTDIiLCJmc1dlYkdMMSIsInByb2plY3QzMiIsInBob25nTGlnaHRpbmciLCJjb25jYXQiLCJfdG9Db25zdW1hYmxlQXJyYXkyIiwidXBkYXRlU3RhdGUiLCJwYXJhbXMiLCJvbGRQcm9wcyIsImNoYW5nZUZsYWdzIiwib2xkTW9kdWxlcyIsIm1lc2giLCJleHRlbnNpb25zQ2hhbmdlZCIsIm1vZHVsZXNFcXVhbCIsIl90aGlzJGdldEF0dHJpYnV0ZU1hbiIsInN0YXRlIiwibW9kZWwiLCJnZXRNb2RlbCIsImhhc05vcm1hbHMiLCJOT1JNQUwiLCJub3JtYWxzIiwiZ2V0QXR0cmlidXRlTWFuYWdlciIsImludmFsaWRhdGVBbGwiLCJ1cGRhdGVJbWFnZXMiLCJzZXREcmF3TW9kZSIsIndpcmVmcmFtZSIsIkdMIiwiTElORV9TVFJJUCIsIlRSSUFOR0xFUyIsIl9yZWYiLCJuZXdJbWFnZXMiLCJsb2FkSW1hZ2VzIiwiaW1hZ2VzRGF0YSIsIm9sZEltYWdlc0RhdGEiLCJkcmF3IiwiX3JlZjIiLCJ1bmlmb3JtcyIsIl90aGlzJHN0YXRlIiwidmFsdWVzIiwiZXZlcnkiLCJpdGVtIiwic2l6ZVNjYWxlIiwic2V0VW5pZm9ybXMiLCJhc3NpZ24iLCJmbGF0U2hhZGluZyIsInVwZGF0ZU1vZHVsZVNldHRpbmdzIiwiZmluYWxpemVTdGF0ZSIsIl9pIiwiX09iamVjdCR2YWx1ZXMiLCJpbWFnZSIsIm1hcCIsIngiLCJNb2RlbCIsImlkIiwiZ2VvbWV0cnkiLCJpc0luc3RhbmNlZCIsImxheWVyTmFtZSJdLCJzb3VyY2VzIjpbIi4uLy4uLy4uL3NyYy9yYXN0ZXIvcmFzdGVyLW1lc2gtbGF5ZXIvcmFzdGVyLW1lc2gtbGF5ZXIudHMiXSwic291cmNlc0NvbnRlbnQiOlsiLy8gU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IE1JVFxuLy8gQ29weXJpZ2h0IGNvbnRyaWJ1dG9ycyB0byB0aGUga2VwbGVyLmdsIHByb2plY3RcblxuaW1wb3J0IHtwcm9qZWN0MzIsIHBob25nTGlnaHRpbmcsIGxvZywgVXBkYXRlUGFyYW1ldGVyc30gZnJvbSAnQGRlY2suZ2wvY29yZS90eXBlZCc7XG5pbXBvcnQge1NpbXBsZU1lc2hMYXllciwgU2ltcGxlTWVzaExheWVyUHJvcHN9IGZyb20gJ0BkZWNrLmdsL21lc2gtbGF5ZXJzL3R5cGVkJztcbmltcG9ydCBHTCBmcm9tICdAbHVtYS5nbC9jb25zdGFudHMnO1xuaW1wb3J0IHtNb2RlbCwgR2VvbWV0cnksIGlzV2ViR0wyfSBmcm9tICdAbHVtYS5nbC9jb3JlJztcbmltcG9ydCB7UHJvZ3JhbU1hbmFnZXJ9IGZyb20gJ0BsdW1hLmdsL2VuZ2luZSc7XG5pbXBvcnQge1VuaWZvcm1zT3B0aW9uc30gZnJvbSAnQGx1bWEuZ2wvd2ViZ2wvc3JjL2NsYXNzZXMvdW5pZm9ybXMnO1xuXG5pbXBvcnQgZnNXZWJHTDEgZnJvbSAnLi9yYXN0ZXItbWVzaC1sYXllci13ZWJnbDEuZnMnO1xuaW1wb3J0IHZzV2ViR0wxIGZyb20gJy4vcmFzdGVyLW1lc2gtbGF5ZXItd2ViZ2wxLnZzJztcbmltcG9ydCBmc1dlYkdMMiBmcm9tICcuL3Jhc3Rlci1tZXNoLWxheWVyLXdlYmdsMi5mcyc7XG5pbXBvcnQgdnNXZWJHTDIgZnJvbSAnLi9yYXN0ZXItbWVzaC1sYXllci13ZWJnbDIudnMnO1xuaW1wb3J0IHtsb2FkSW1hZ2VzfSBmcm9tICcuLi9pbWFnZXMnO1xuaW1wb3J0IHR5cGUge1Jhc3RlckxheWVyQWRkZWRQcm9wcywgSW1hZ2VTdGF0ZX0gZnJvbSAnLi4vdHlwZXMnO1xuaW1wb3J0IHttb2R1bGVzRXF1YWx9IGZyb20gJy4uL3V0aWwnO1xuXG50eXBlIE1lc2ggPSBTaW1wbGVNZXNoTGF5ZXJQcm9wc1snbWVzaCddO1xuXG5mdW5jdGlvbiB2YWxpZGF0ZUdlb21ldHJ5QXR0cmlidXRlcyhhdHRyaWJ1dGVzKSB7XG4gIGxvZy5hc3NlcnQoXG4gICAgYXR0cmlidXRlcy5wb3NpdGlvbnMgfHwgYXR0cmlidXRlcy5QT1NJVElPTixcbiAgICAnUmFzdGVyTWVzaExheWVyIHJlcXVpcmVzIFwicG9zdGlvbnNcIiBvciBcIlBPU0lUSU9OXCIgYXR0cmlidXRlIGluIG1lc2ggcHJvcGVydHkuJ1xuICApO1xufVxuXG4vKlxuICogQ29udmVydCBtZXNoIGRhdGEgaW50byBnZW9tZXRyeVxuICogQHJldHVybnMgZ2VvbWV0cnlcbiAqL1xuZnVuY3Rpb24gZ2V0R2VvbWV0cnkoZGF0YSk6IEdlb21ldHJ5IHtcbiAgaWYgKGRhdGEuYXR0cmlidXRlcykge1xuICAgIHZhbGlkYXRlR2VvbWV0cnlBdHRyaWJ1dGVzKGRhdGEuYXR0cmlidXRlcyk7XG4gICAgaWYgKGRhdGEgaW5zdGFuY2VvZiBHZW9tZXRyeSkge1xuICAgICAgcmV0dXJuIGRhdGE7XG4gICAgfVxuICAgIHJldHVybiBuZXcgR2VvbWV0cnkoZGF0YSk7XG4gIH0gZWxzZSBpZiAoZGF0YS5wb3NpdGlvbnMgfHwgZGF0YS5QT1NJVElPTikge1xuICAgIHZhbGlkYXRlR2VvbWV0cnlBdHRyaWJ1dGVzKGRhdGEpO1xuICAgIHJldHVybiBuZXcgR2VvbWV0cnkoe1xuICAgICAgYXR0cmlidXRlczogZGF0YVxuICAgIH0pO1xuICB9XG4gIHRocm93IEVycm9yKCdJbnZhbGlkIG1lc2gnKTtcbn1cblxuY29uc3QgZGVmYXVsdFByb3BzID0ge1xuICAuLi5TaW1wbGVNZXNoTGF5ZXIuZGVmYXVsdFByb3BzLFxuICBtb2R1bGVzOiB7dHlwZTogJ2FycmF5JywgdmFsdWU6IFtdLCBjb21wYXJlOiB0cnVlfSxcbiAgaW1hZ2VzOiB7dHlwZTogJ29iamVjdCcsIHZhbHVlOiB7fSwgY29tcGFyZTogdHJ1ZX0sXG4gIG1vZHVsZVByb3BzOiB7dHlwZTogJ29iamVjdCcsIHZhbHVlOiB7fSwgY29tcGFyZTogdHJ1ZX1cbn07XG5cbmV4cG9ydCBkZWZhdWx0IGNsYXNzIFJhc3Rlck1lc2hMYXllciBleHRlbmRzIFNpbXBsZU1lc2hMYXllcjxhbnksIFJhc3RlckxheWVyQWRkZWRQcm9wcz4ge1xuICBkZWNsYXJlIHN0YXRlOiBTaW1wbGVNZXNoTGF5ZXI8UmFzdGVyTGF5ZXJBZGRlZFByb3BzPlsnc3RhdGUnXSAmIHtcbiAgICBpbWFnZXM6IEltYWdlU3RhdGU7XG4gIH07XG5cbiAgaW5pdGlhbGl6ZVN0YXRlKCk6IHZvaWQge1xuICAgIGNvbnN0IHtnbH0gPSB0aGlzLmNvbnRleHQ7XG4gICAgY29uc3QgcHJvZ3JhbU1hbmFnZXIgPSBQcm9ncmFtTWFuYWdlci5nZXREZWZhdWx0UHJvZ3JhbU1hbmFnZXIoZ2wpO1xuXG4gICAgY29uc3QgZnNTdHIxID0gJ2ZzOkRFQ0tHTF9NVVRBVEVfQ09MT1IoaW5vdXQgdmVjNCBpbWFnZSwgaW4gdmVjMiBjb29yZCknO1xuICAgIGNvbnN0IGZzU3RyMiA9ICdmczpERUNLR0xfQ1JFQVRFX0NPTE9SKGlub3V0IHZlYzQgaW1hZ2UsIGluIHZlYzIgY29vcmQpJztcblxuICAgIC8vIE9ubHkgaW5pdGlhbGl6ZSBzaGFkZXIgaG9vayBmdW5jdGlvbnMgX29uY2UgZ2xvYmFsbHlfXG4gICAgLy8gU2luY2UgdGhlIHByb2dyYW0gbWFuYWdlciBpcyBzaGFyZWQgYWNyb3NzIGFsbCBsYXllcnMsIGJ1dCBtYW55IGxheWVyc1xuICAgIC8vIG1pZ2h0IGJlIGNyZWF0ZWQsIHRoaXMgc29sdmVzIHRoZSBwZXJmb3JtYW5jZSBpc3N1ZSBvZiBhbHdheXMgYWRkaW5nIG5ld1xuICAgIC8vIGhvb2sgZnVuY3Rpb25zLlxuICAgIGlmICghcHJvZ3JhbU1hbmFnZXIuX2hvb2tGdW5jdGlvbnMuaW5jbHVkZXMoZnNTdHIxKSkge1xuICAgICAgcHJvZ3JhbU1hbmFnZXIuYWRkU2hhZGVySG9vayhmc1N0cjEpO1xuICAgIH1cbiAgICBpZiAoIXByb2dyYW1NYW5hZ2VyLl9ob29rRnVuY3Rpb25zLmluY2x1ZGVzKGZzU3RyMikpIHtcbiAgICAgIHByb2dyYW1NYW5hZ2VyLmFkZFNoYWRlckhvb2soZnNTdHIyKTtcbiAgICB9XG5cbiAgICAvLyBpbWFnZXMgaXMgYSBtYXBwaW5nIGZyb20ga2V5cyB0byBUZXh0dXJlMkQgb2JqZWN0cy4gVGhlIGtleXMgc2hvdWxkIG1hdGNoXG4gICAgLy8gbmFtZXMgb2YgdW5pZm9ybXMgaW4gc2hhZGVyIG1vZHVsZXNcbiAgICB0aGlzLnNldFN0YXRlKHtpbWFnZXM6IHt9fSk7XG5cbiAgICBzdXBlci5pbml0aWFsaXplU3RhdGUoKTtcbiAgfVxuXG4gIGdldFNoYWRlcnMoKTogYW55IHtcbiAgICBjb25zdCB7Z2x9ID0gdGhpcy5jb250ZXh0O1xuICAgIGNvbnN0IHttb2R1bGVzID0gW119ID0gdGhpcy5wcm9wcztcbiAgICBjb25zdCB3ZWJnbDIgPSBpc1dlYkdMMihnbCk7XG5cbiAgICAvLyBDaG9vc2Ugd2ViZ2wgdmVyc2lvbiBmb3IgbW9kdWxlXG4gICAgLy8gSWYgZnMyIG9yIGZzMSBrZXlzIGV4aXN0LCBwcmVmZXIgdGhlbSwgYnV0IGZhbGwgYmFjayB0byBmcywgc28gdGhhdFxuICAgIC8vIHZlcnNpb24taW5kZXBlbmRlbnQgbW9kdWxlcyBkb24ndCBuZWVkIHRvIGNhcmVcbiAgICBmb3IgKGNvbnN0IG1vZHVsZSBvZiBtb2R1bGVzKSB7XG4gICAgICBtb2R1bGUuZnMgPSB3ZWJnbDIgPyBtb2R1bGUuZnMyIHx8IG1vZHVsZS5mcyA6IG1vZHVsZS5mczEgfHwgbW9kdWxlLmZzO1xuXG4gICAgICAvLyBTYW1wbGVyIHR5cGUgaXMgYWx3YXlzIGZsb2F0IGZvciBXZWJHTDFcbiAgICAgIGlmICghd2ViZ2wyICYmIG1vZHVsZS5kZWZpbmVzKSB7XG4gICAgICAgIG1vZHVsZS5kZWZpbmVzLlNBTVBMRVJfVFlQRSA9ICdzYW1wbGVyMkQnO1xuICAgICAgfVxuICAgIH1cblxuICAgIHJldHVybiB7XG4gICAgICAuLi5zdXBlci5nZXRTaGFkZXJzKCksXG4gICAgICB2czogd2ViZ2wyID8gdnNXZWJHTDIgOiB2c1dlYkdMMSxcbiAgICAgIGZzOiB3ZWJnbDIgPyBmc1dlYkdMMiA6IGZzV2ViR0wxLFxuICAgICAgbW9kdWxlczogW3Byb2plY3QzMiwgcGhvbmdMaWdodGluZywgLi4ubW9kdWxlc11cbiAgICB9O1xuICB9XG5cbiAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIGNvbXBsZXhpdHlcbiAgdXBkYXRlU3RhdGUocGFyYW1zOiBVcGRhdGVQYXJhbWV0ZXJzPFNpbXBsZU1lc2hMYXllcjxhbnksIFJhc3RlckxheWVyQWRkZWRQcm9wcz4+KTogdm9pZCB7XG4gICAgY29uc3Qge3Byb3BzLCBvbGRQcm9wcywgY2hhbmdlRmxhZ3MsIGNvbnRleHR9ID0gcGFyYW1zO1xuICAgIHN1cGVyLnVwZGF0ZVN0YXRlKHtwcm9wcywgb2xkUHJvcHMsIGNoYW5nZUZsYWdzLCBjb250ZXh0fSk7XG5cbiAgICBjb25zdCBtb2R1bGVzID0gcHJvcHMgJiYgcHJvcHMubW9kdWxlcztcbiAgICBjb25zdCBvbGRNb2R1bGVzID0gb2xkUHJvcHMgJiYgb2xkUHJvcHMubW9kdWxlcztcblxuICAgIC8vIElmIHRoZSBsaXN0IG9mIG1vZHVsZXMgY2hhbmdlZCwgbmVlZCB0byByZWNvbXBpbGUgdGhlIHNoYWRlcnNcbiAgICBpZiAoXG4gICAgICBwcm9wcy5tZXNoICE9PSBvbGRQcm9wcy5tZXNoIHx8XG4gICAgICBjaGFuZ2VGbGFncy5leHRlbnNpb25zQ2hhbmdlZCB8fFxuICAgICAgIW1vZHVsZXNFcXVhbChtb2R1bGVzLCBvbGRNb2R1bGVzKVxuICAgICkge1xuICAgICAgaWYgKHRoaXMuc3RhdGUubW9kZWwpIHtcbiAgICAgICAgdGhpcy5zdGF0ZS5tb2RlbC5kZWxldGUoKTtcbiAgICAgIH1cbiAgICAgIGlmIChwcm9wcy5tZXNoKSB7XG4gICAgICAgIHRoaXMuc3RhdGUubW9kZWwgPSB0aGlzLmdldE1vZGVsKHByb3BzLm1lc2ggYXMgTWVzaCk7XG5cbiAgICAgICAgY29uc3QgYXR0cmlidXRlcyA9IChwcm9wcy5tZXNoIGFzIGFueSkuYXR0cmlidXRlcyB8fCBwcm9wcy5tZXNoO1xuICAgICAgICB0aGlzLnNldFN0YXRlKHtcbiAgICAgICAgICBoYXNOb3JtYWxzOiBCb29sZWFuKGF0dHJpYnV0ZXMuTk9STUFMIHx8IGF0dHJpYnV0ZXMubm9ybWFscylcbiAgICAgICAgfSk7XG4gICAgICB9XG4gICAgICB0aGlzLmdldEF0dHJpYnV0ZU1hbmFnZXIoKT8uaW52YWxpZGF0ZUFsbCgpO1xuICAgIH1cblxuICAgIGlmIChwcm9wcyAmJiBwcm9wcy5pbWFnZXMpIHtcbiAgICAgIHRoaXMudXBkYXRlSW1hZ2VzKHtwcm9wcywgb2xkUHJvcHN9KTtcbiAgICB9XG5cbiAgICBpZiAodGhpcy5zdGF0ZS5tb2RlbCkge1xuICAgICAgdGhpcy5zdGF0ZS5tb2RlbC5zZXREcmF3TW9kZSh0aGlzLnByb3BzLndpcmVmcmFtZSA/IEdMLkxJTkVfU1RSSVAgOiBHTC5UUklBTkdMRVMpO1xuICAgIH1cbiAgfVxuXG4gIHVwZGF0ZUltYWdlcyh7XG4gICAgcHJvcHMsXG4gICAgb2xkUHJvcHNcbiAgfToge1xuICAgIHByb3BzOiBSYXN0ZXJMYXllckFkZGVkUHJvcHM7XG4gICAgb2xkUHJvcHM6IFJhc3RlckxheWVyQWRkZWRQcm9wcztcbiAgfSk6IHZvaWQge1xuICAgIGNvbnN0IHtpbWFnZXN9ID0gdGhpcy5zdGF0ZTtcbiAgICBjb25zdCB7Z2x9ID0gdGhpcy5jb250ZXh0O1xuXG4gICAgY29uc3QgbmV3SW1hZ2VzID0gbG9hZEltYWdlcyh7XG4gICAgICBnbCxcbiAgICAgIGltYWdlcyxcbiAgICAgIGltYWdlc0RhdGE6IHByb3BzLmltYWdlcyxcbiAgICAgIG9sZEltYWdlc0RhdGE6IG9sZFByb3BzLmltYWdlc1xuICAgIH0pO1xuXG4gICAgaWYgKG5ld0ltYWdlcykge1xuICAgICAgdGhpcy5zZXRTdGF0ZSh7aW1hZ2VzOiBuZXdJbWFnZXN9KTtcbiAgICB9XG4gIH1cblxuICBkcmF3KHt1bmlmb3Jtc306IFVuaWZvcm1zT3B0aW9ucyk6IHZvaWQge1xuICAgIGNvbnN0IHttb2RlbCwgaW1hZ2VzfSA9IHRoaXMuc3RhdGU7XG4gICAgY29uc3Qge21vZHVsZVByb3BzfSA9IHRoaXMucHJvcHM7XG5cbiAgICAvLyBSZW5kZXIgdGhlIGltYWdlXG4gICAgaWYgKFxuICAgICAgIW1vZGVsIHx8XG4gICAgICAhaW1hZ2VzIHx8XG4gICAgICBPYmplY3Qua2V5cyhpbWFnZXMpLmxlbmd0aCA9PT0gMCB8fFxuICAgICAgIU9iamVjdC52YWx1ZXMoaW1hZ2VzKS5ldmVyeShpdGVtID0+IGl0ZW0pXG4gICAgKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgY29uc3Qge3NpemVTY2FsZX0gPSB0aGlzLnByb3BzO1xuXG4gICAgbW9kZWxcbiAgICAgIC5zZXRVbmlmb3JtcyhcbiAgICAgICAgT2JqZWN0LmFzc2lnbih7fSwgdW5pZm9ybXMsIHtcbiAgICAgICAgICBzaXplU2NhbGUsXG4gICAgICAgICAgZmxhdFNoYWRpbmc6ICF0aGlzLnN0YXRlLmhhc05vcm1hbHNcbiAgICAgICAgfSlcbiAgICAgIClcbiAgICAgIC51cGRhdGVNb2R1bGVTZXR0aW5ncyh7XG4gICAgICAgIC4uLm1vZHVsZVByb3BzLFxuICAgICAgICAuLi5pbWFnZXNcbiAgICAgIH0pXG4gICAgICAuZHJhdygpO1xuICB9XG5cbiAgZmluYWxpemVTdGF0ZSgpOiB2b2lkIHtcbiAgICBzdXBlci5maW5hbGl6ZVN0YXRlKHRoaXMuY29udGV4dCk7XG5cbiAgICBpZiAodGhpcy5zdGF0ZS5pbWFnZXMpIHtcbiAgICAgIGZvciAoY29uc3QgaW1hZ2Ugb2YgT2JqZWN0LnZhbHVlcyh0aGlzLnN0YXRlLmltYWdlcykpIHtcbiAgICAgICAgaWYgKEFycmF5LmlzQXJyYXkoaW1hZ2UpKSB7XG4gICAgICAgICAgaW1hZ2UubWFwKHggPT4geCAmJiB4LmRlbGV0ZSgpKTtcbiAgICAgICAgfSBlbHNlIGlmIChpbWFnZSkge1xuICAgICAgICAgIGltYWdlLmRlbGV0ZSgpO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgcHJvdGVjdGVkIGdldE1vZGVsKG1lc2g6IE1lc2gpOiBNb2RlbCB7XG4gICAgY29uc3Qge2dsfSA9IHRoaXMuY29udGV4dDtcblxuICAgIGNvbnN0IG1vZGVsID0gbmV3IE1vZGVsKFxuICAgICAgZ2wsXG4gICAgICBPYmplY3QuYXNzaWduKHt9LCB0aGlzLmdldFNoYWRlcnMoKSwge1xuICAgICAgICBpZDogdGhpcy5wcm9wcy5pZCxcbiAgICAgICAgZ2VvbWV0cnk6IGdldEdlb21ldHJ5KG1lc2gpLFxuICAgICAgICBpc0luc3RhbmNlZDogZmFsc2VcbiAgICAgIH0pXG4gICAgKTtcblxuICAgIHJldHVybiBtb2RlbDtcbiAgfVxufVxuXG5SYXN0ZXJNZXNoTGF5ZXIubGF5ZXJOYW1lID0gJ1Jhc3Rlck1lc2hMYXllcic7XG5SYXN0ZXJNZXNoTGF5ZXIuZGVmYXVsdFByb3BzID0gZGVmYXVsdFByb3BzO1xuIl0sIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7Ozs7Ozs7QUFHQSxJQUFBQSxNQUFBLEdBQUFDLE9BQUE7QUFDQSxJQUFBQyxPQUFBLEdBQUFELE9BQUE7QUFDQSxJQUFBRSxVQUFBLEdBQUFDLHNCQUFBLENBQUFILE9BQUE7QUFDQSxJQUFBSSxLQUFBLEdBQUFKLE9BQUE7QUFDQSxJQUFBSyxPQUFBLEdBQUFMLE9BQUE7QUFHQSxJQUFBTSxxQkFBQSxHQUFBSCxzQkFBQSxDQUFBSCxPQUFBO0FBQ0EsSUFBQU8sc0JBQUEsR0FBQUosc0JBQUEsQ0FBQUgsT0FBQTtBQUNBLElBQUFRLHNCQUFBLEdBQUFMLHNCQUFBLENBQUFILE9BQUE7QUFDQSxJQUFBUyxzQkFBQSxHQUFBTixzQkFBQSxDQUFBSCxPQUFBO0FBQ0EsSUFBQVUsT0FBQSxHQUFBVixPQUFBO0FBRUEsSUFBQVcsS0FBQSxHQUFBWCxPQUFBO0FBQXFDLFNBQUFZLDJCQUFBQyxDQUFBLEVBQUFDLENBQUEsUUFBQUMsQ0FBQSx5QkFBQUMsTUFBQSxJQUFBSCxDQUFBLENBQUFHLE1BQUEsQ0FBQUMsUUFBQSxLQUFBSixDQUFBLHFCQUFBRSxDQUFBLFFBQUFHLEtBQUEsQ0FBQUMsT0FBQSxDQUFBTixDQUFBLE1BQUFFLENBQUEsR0FBQUssMkJBQUEsQ0FBQVAsQ0FBQSxNQUFBQyxDQUFBLElBQUFELENBQUEsdUJBQUFBLENBQUEsQ0FBQVEsTUFBQSxJQUFBTixDQUFBLEtBQUFGLENBQUEsR0FBQUUsQ0FBQSxPQUFBTyxFQUFBLE1BQUFDLENBQUEsWUFBQUEsRUFBQSxlQUFBQyxDQUFBLEVBQUFELENBQUEsRUFBQUUsQ0FBQSxXQUFBQSxFQUFBLFdBQUFILEVBQUEsSUFBQVQsQ0FBQSxDQUFBUSxNQUFBLEtBQUFLLElBQUEsV0FBQUEsSUFBQSxNQUFBQyxLQUFBLEVBQUFkLENBQUEsQ0FBQVMsRUFBQSxVQUFBUixDQUFBLFdBQUFBLEVBQUFELENBQUEsVUFBQUEsQ0FBQSxLQUFBZSxDQUFBLEVBQUFMLENBQUEsZ0JBQUFNLFNBQUEsaUpBQUFDLENBQUEsRUFBQUMsQ0FBQSxPQUFBQyxDQUFBLGdCQUFBUixDQUFBLFdBQUFBLEVBQUEsSUFBQVQsQ0FBQSxHQUFBQSxDQUFBLENBQUFrQixJQUFBLENBQUFwQixDQUFBLE1BQUFZLENBQUEsV0FBQUEsRUFBQSxRQUFBWixDQUFBLEdBQUFFLENBQUEsQ0FBQW1CLElBQUEsV0FBQUgsQ0FBQSxHQUFBbEIsQ0FBQSxDQUFBYSxJQUFBLEVBQUFiLENBQUEsS0FBQUMsQ0FBQSxXQUFBQSxFQUFBRCxDQUFBLElBQUFtQixDQUFBLE9BQUFGLENBQUEsR0FBQWpCLENBQUEsS0FBQWUsQ0FBQSxXQUFBQSxFQUFBLFVBQUFHLENBQUEsWUFBQWhCLENBQUEsY0FBQUEsQ0FBQSw4QkFBQWlCLENBQUEsUUFBQUYsQ0FBQTtBQUFBLFNBQUFWLDRCQUFBUCxDQUFBLEVBQUFrQixDQUFBLFFBQUFsQixDQUFBLDJCQUFBQSxDQUFBLFNBQUFzQixpQkFBQSxDQUFBdEIsQ0FBQSxFQUFBa0IsQ0FBQSxPQUFBaEIsQ0FBQSxNQUFBcUIsUUFBQSxDQUFBSCxJQUFBLENBQUFwQixDQUFBLEVBQUF3QixLQUFBLDZCQUFBdEIsQ0FBQSxJQUFBRixDQUFBLENBQUF5QixXQUFBLEtBQUF2QixDQUFBLEdBQUFGLENBQUEsQ0FBQXlCLFdBQUEsQ0FBQUMsSUFBQSxhQUFBeEIsQ0FBQSxjQUFBQSxDQUFBLEdBQUFHLEtBQUEsQ0FBQXNCLElBQUEsQ0FBQTNCLENBQUEsb0JBQUFFLENBQUEsK0NBQUEwQixJQUFBLENBQUExQixDQUFBLElBQUFvQixpQkFBQSxDQUFBdEIsQ0FBQSxFQUFBa0IsQ0FBQTtBQUFBLFNBQUFJLGtCQUFBdEIsQ0FBQSxFQUFBa0IsQ0FBQSxhQUFBQSxDQUFBLElBQUFBLENBQUEsR0FBQWxCLENBQUEsQ0FBQVEsTUFBQSxNQUFBVSxDQUFBLEdBQUFsQixDQUFBLENBQUFRLE1BQUEsWUFBQVAsQ0FBQSxNQUFBVyxDQUFBLEdBQUFQLEtBQUEsQ0FBQWEsQ0FBQSxHQUFBakIsQ0FBQSxHQUFBaUIsQ0FBQSxFQUFBakIsQ0FBQSxJQUFBVyxDQUFBLENBQUFYLENBQUEsSUFBQUQsQ0FBQSxDQUFBQyxDQUFBLFVBQUFXLENBQUE7QUFBQSxTQUFBaUIsV0FBQTNCLENBQUEsRUFBQWUsQ0FBQSxFQUFBaEIsQ0FBQSxXQUFBZ0IsQ0FBQSxPQUFBYSxnQkFBQSxhQUFBYixDQUFBLE9BQUFjLDJCQUFBLGFBQUE3QixDQUFBLEVBQUE4Qix5QkFBQSxLQUFBQyxPQUFBLENBQUFDLFNBQUEsQ0FBQWpCLENBQUEsRUFBQWhCLENBQUEsWUFBQTZCLGdCQUFBLGFBQUE1QixDQUFBLEVBQUF1QixXQUFBLElBQUFSLENBQUEsQ0FBQWtCLEtBQUEsQ0FBQWpDLENBQUEsRUFBQUQsQ0FBQTtBQUFBLFNBQUErQiwwQkFBQSxjQUFBOUIsQ0FBQSxJQUFBa0MsT0FBQSxDQUFBQyxTQUFBLENBQUFDLE9BQUEsQ0FBQWxCLElBQUEsQ0FBQWEsT0FBQSxDQUFBQyxTQUFBLENBQUFFLE9BQUEsaUNBQUFsQyxDQUFBLGFBQUE4Qix5QkFBQSxZQUFBQSwwQkFBQSxhQUFBOUIsQ0FBQTtBQUFBLFNBQUFxQyxjQUFBckMsQ0FBQSxFQUFBRCxDQUFBLEVBQUFELENBQUEsRUFBQWlCLENBQUEsUUFBQXVCLENBQUEsT0FBQUMsS0FBQSxpQkFBQVgsZ0JBQUEsaUJBQUFiLENBQUEsR0FBQWYsQ0FBQSxDQUFBbUMsU0FBQSxHQUFBbkMsQ0FBQSxHQUFBRCxDQUFBLEVBQUFELENBQUEsY0FBQWlCLENBQUEsYUFBQWYsQ0FBQSxXQUFBc0MsQ0FBQSxDQUFBTCxLQUFBLENBQUFuQyxDQUFBLEVBQUFFLENBQUEsT0FBQXNDLENBQUE7QUFBQSxTQUFBRSxRQUFBekMsQ0FBQSxFQUFBRCxDQUFBLFFBQUFFLENBQUEsR0FBQXlDLE1BQUEsQ0FBQUMsSUFBQSxDQUFBM0MsQ0FBQSxPQUFBMEMsTUFBQSxDQUFBRSxxQkFBQSxRQUFBNUIsQ0FBQSxHQUFBMEIsTUFBQSxDQUFBRSxxQkFBQSxDQUFBNUMsQ0FBQSxHQUFBRCxDQUFBLEtBQUFpQixDQUFBLEdBQUFBLENBQUEsQ0FBQTZCLE1BQUEsV0FBQTlDLENBQUEsV0FBQTJDLE1BQUEsQ0FBQUksd0JBQUEsQ0FBQTlDLENBQUEsRUFBQUQsQ0FBQSxFQUFBZ0QsVUFBQSxPQUFBOUMsQ0FBQSxDQUFBK0MsSUFBQSxDQUFBZCxLQUFBLENBQUFqQyxDQUFBLEVBQUFlLENBQUEsWUFBQWYsQ0FBQTtBQUFBLFNBQUFnRCxjQUFBakQsQ0FBQSxhQUFBRCxDQUFBLE1BQUFBLENBQUEsR0FBQW1ELFNBQUEsQ0FBQTNDLE1BQUEsRUFBQVIsQ0FBQSxVQUFBRSxDQUFBLFdBQUFpRCxTQUFBLENBQUFuRCxDQUFBLElBQUFtRCxTQUFBLENBQUFuRCxDQUFBLFFBQUFBLENBQUEsT0FBQTBDLE9BQUEsQ0FBQUMsTUFBQSxDQUFBekMsQ0FBQSxPQUFBa0QsT0FBQSxXQUFBcEQsQ0FBQSxRQUFBcUQsZ0JBQUEsYUFBQXBELENBQUEsRUFBQUQsQ0FBQSxFQUFBRSxDQUFBLENBQUFGLENBQUEsU0FBQTJDLE1BQUEsQ0FBQVcseUJBQUEsR0FBQVgsTUFBQSxDQUFBWSxnQkFBQSxDQUFBdEQsQ0FBQSxFQUFBMEMsTUFBQSxDQUFBVyx5QkFBQSxDQUFBcEQsQ0FBQSxLQUFBd0MsT0FBQSxDQUFBQyxNQUFBLENBQUF6QyxDQUFBLEdBQUFrRCxPQUFBLFdBQUFwRCxDQUFBLElBQUEyQyxNQUFBLENBQUFhLGNBQUEsQ0FBQXZELENBQUEsRUFBQUQsQ0FBQSxFQUFBMkMsTUFBQSxDQUFBSSx3QkFBQSxDQUFBN0MsQ0FBQSxFQUFBRixDQUFBLGlCQUFBQyxDQUFBLElBaEJyQztBQUNBO0FBbUJBLFNBQVN3RCwwQkFBMEJBLENBQUNDLFVBQVUsRUFBRTtFQUM5Q0MsVUFBRyxDQUFDQyxNQUFNLENBQ1JGLFVBQVUsQ0FBQ0csU0FBUyxJQUFJSCxVQUFVLENBQUNJLFFBQVEsRUFDM0MsK0VBQ0YsQ0FBQztBQUNIOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsU0FBU0MsV0FBV0EsQ0FBQ0MsSUFBSSxFQUFZO0VBQ25DLElBQUlBLElBQUksQ0FBQ04sVUFBVSxFQUFFO0lBQ25CRCwwQkFBMEIsQ0FBQ08sSUFBSSxDQUFDTixVQUFVLENBQUM7SUFDM0MsSUFBSU0sSUFBSSxZQUFZQyxjQUFRLEVBQUU7TUFDNUIsT0FBT0QsSUFBSTtJQUNiO0lBQ0EsT0FBTyxJQUFJQyxjQUFRLENBQUNELElBQUksQ0FBQztFQUMzQixDQUFDLE1BQU0sSUFBSUEsSUFBSSxDQUFDSCxTQUFTLElBQUlHLElBQUksQ0FBQ0YsUUFBUSxFQUFFO0lBQzFDTCwwQkFBMEIsQ0FBQ08sSUFBSSxDQUFDO0lBQ2hDLE9BQU8sSUFBSUMsY0FBUSxDQUFDO01BQ2xCUCxVQUFVLEVBQUVNO0lBQ2QsQ0FBQyxDQUFDO0VBQ0o7RUFDQSxNQUFNRSxLQUFLLENBQUMsY0FBYyxDQUFDO0FBQzdCO0FBRUEsSUFBTUMsWUFBWSxHQUFBakIsYUFBQSxDQUFBQSxhQUFBLEtBQ2JrQix1QkFBZSxDQUFDRCxZQUFZO0VBQy9CRSxPQUFPLEVBQUU7SUFBQ0MsSUFBSSxFQUFFLE9BQU87SUFBRXhELEtBQUssRUFBRSxFQUFFO0lBQUV5RCxPQUFPLEVBQUU7RUFBSSxDQUFDO0VBQ2xEQyxNQUFNLEVBQUU7SUFBQ0YsSUFBSSxFQUFFLFFBQVE7SUFBRXhELEtBQUssRUFBRSxDQUFDLENBQUM7SUFBRXlELE9BQU8sRUFBRTtFQUFJLENBQUM7RUFDbERFLFdBQVcsRUFBRTtJQUFDSCxJQUFJLEVBQUUsUUFBUTtJQUFFeEQsS0FBSyxFQUFFLENBQUMsQ0FBQztJQUFFeUQsT0FBTyxFQUFFO0VBQUk7QUFBQyxFQUN4RDtBQUFDLElBRW1CRyxlQUFlLEdBQUFDLE9BQUEscUNBQUFDLGdCQUFBO0VBQUEsU0FBQUYsZ0JBQUE7SUFBQSxJQUFBRyxnQkFBQSxtQkFBQUgsZUFBQTtJQUFBLE9BQUE3QyxVQUFBLE9BQUE2QyxlQUFBLEVBQUF2QixTQUFBO0VBQUE7RUFBQSxJQUFBMkIsVUFBQSxhQUFBSixlQUFBLEVBQUFFLGdCQUFBO0VBQUEsV0FBQUcsYUFBQSxhQUFBTCxlQUFBO0lBQUFNLEdBQUE7SUFBQWxFLEtBQUEsRUFLbEMsU0FBQW1FLGVBQWVBLENBQUEsRUFBUztNQUN0QixJQUFPQyxFQUFFLEdBQUksSUFBSSxDQUFDQyxPQUFPLENBQWxCRCxFQUFFO01BQ1QsSUFBTUUsY0FBYyxHQUFHQyxzQkFBYyxDQUFDQyx3QkFBd0IsQ0FBQ0osRUFBRSxDQUFDO01BRWxFLElBQU1LLE1BQU0sR0FBRyx5REFBeUQ7TUFDeEUsSUFBTUMsTUFBTSxHQUFHLHlEQUF5RDs7TUFFeEU7TUFDQTtNQUNBO01BQ0E7TUFDQSxJQUFJLENBQUNKLGNBQWMsQ0FBQ0ssY0FBYyxDQUFDQyxRQUFRLENBQUNILE1BQU0sQ0FBQyxFQUFFO1FBQ25ESCxjQUFjLENBQUNPLGFBQWEsQ0FBQ0osTUFBTSxDQUFDO01BQ3RDO01BQ0EsSUFBSSxDQUFDSCxjQUFjLENBQUNLLGNBQWMsQ0FBQ0MsUUFBUSxDQUFDRixNQUFNLENBQUMsRUFBRTtRQUNuREosY0FBYyxDQUFDTyxhQUFhLENBQUNILE1BQU0sQ0FBQztNQUN0Qzs7TUFFQTtNQUNBO01BQ0EsSUFBSSxDQUFDSSxRQUFRLENBQUM7UUFBQ3BCLE1BQU0sRUFBRSxDQUFDO01BQUMsQ0FBQyxDQUFDO01BRTNCakMsYUFBQSxDQUFBbUMsZUFBQTtJQUNGO0VBQUM7SUFBQU0sR0FBQTtJQUFBbEUsS0FBQSxFQUVELFNBQUErRSxVQUFVQSxDQUFBLEVBQVE7TUFDaEIsSUFBT1gsRUFBRSxHQUFJLElBQUksQ0FBQ0MsT0FBTyxDQUFsQkQsRUFBRTtNQUNULElBQUFZLG1CQUFBLEdBQXVCLElBQUksQ0FBQ0MsS0FBSyxDQUExQjFCLE9BQU87UUFBUEEsT0FBTyxHQUFBeUIsbUJBQUEsY0FBRyxFQUFFLEdBQUFBLG1CQUFBO01BQ25CLElBQU1FLE1BQU0sR0FBRyxJQUFBQyxjQUFRLEVBQUNmLEVBQUUsQ0FBQzs7TUFFM0I7TUFDQTtNQUNBO01BQUEsSUFBQWdCLFNBQUEsR0FBQW5HLDBCQUFBLENBQ3FCc0UsT0FBTztRQUFBOEIsS0FBQTtNQUFBO1FBQTVCLEtBQUFELFNBQUEsQ0FBQXZGLENBQUEsTUFBQXdGLEtBQUEsR0FBQUQsU0FBQSxDQUFBdEYsQ0FBQSxJQUFBQyxJQUFBLEdBQThCO1VBQUEsSUFBbkJ1RixNQUFNLEdBQUFELEtBQUEsQ0FBQXJGLEtBQUE7VUFDZnNGLE1BQU0sQ0FBQ0MsRUFBRSxHQUFHTCxNQUFNLEdBQUdJLE1BQU0sQ0FBQ0UsR0FBRyxJQUFJRixNQUFNLENBQUNDLEVBQUUsR0FBR0QsTUFBTSxDQUFDRyxHQUFHLElBQUlILE1BQU0sQ0FBQ0MsRUFBRTs7VUFFdEU7VUFDQSxJQUFJLENBQUNMLE1BQU0sSUFBSUksTUFBTSxDQUFDSSxPQUFPLEVBQUU7WUFDN0JKLE1BQU0sQ0FBQ0ksT0FBTyxDQUFDQyxZQUFZLEdBQUcsV0FBVztVQUMzQztRQUNGO01BQUMsU0FBQUMsR0FBQTtRQUFBUixTQUFBLENBQUFqRyxDQUFBLENBQUF5RyxHQUFBO01BQUE7UUFBQVIsU0FBQSxDQUFBbkYsQ0FBQTtNQUFBO01BRUQsT0FBQW1DLGFBQUEsQ0FBQUEsYUFBQSxLQUFBWCxhQUFBLENBQUFtQyxlQUFBO1FBRUVpQyxFQUFFLEVBQUVYLE1BQU0sR0FBR1ksaUNBQVEsR0FBR0MsaUNBQVE7UUFDaENSLEVBQUUsRUFBRUwsTUFBTSxHQUFHYyxpQ0FBUSxHQUFHQyxnQ0FBUTtRQUNoQzFDLE9BQU8sR0FBRzJDLGdCQUFTLEVBQUVDLG9CQUFhLEVBQUFDLE1BQUEsS0FBQUMsbUJBQUEsYUFBSzlDLE9BQU87TUFBQztJQUVuRDs7SUFFQTtFQUFBO0lBQUFXLEdBQUE7SUFBQWxFLEtBQUEsRUFDQSxTQUFBc0csV0FBV0EsQ0FBQ0MsTUFBcUUsRUFBUTtNQUN2RixJQUFPdEIsS0FBSyxHQUFvQ3NCLE1BQU0sQ0FBL0N0QixLQUFLO1FBQUV1QixRQUFRLEdBQTBCRCxNQUFNLENBQXhDQyxRQUFRO1FBQUVDLFdBQVcsR0FBYUYsTUFBTSxDQUE5QkUsV0FBVztRQUFFcEMsT0FBTyxHQUFJa0MsTUFBTSxDQUFqQmxDLE9BQU87TUFDNUM1QyxhQUFBLENBQUFtQyxlQUFBLDJCQUFrQjtRQUFDcUIsS0FBSyxFQUFMQSxLQUFLO1FBQUV1QixRQUFRLEVBQVJBLFFBQVE7UUFBRUMsV0FBVyxFQUFYQSxXQUFXO1FBQUVwQyxPQUFPLEVBQVBBO01BQU8sQ0FBQztNQUV6RCxJQUFNZCxPQUFPLEdBQUcwQixLQUFLLElBQUlBLEtBQUssQ0FBQzFCLE9BQU87TUFDdEMsSUFBTW1ELFVBQVUsR0FBR0YsUUFBUSxJQUFJQSxRQUFRLENBQUNqRCxPQUFPOztNQUUvQztNQUNBLElBQ0UwQixLQUFLLENBQUMwQixJQUFJLEtBQUtILFFBQVEsQ0FBQ0csSUFBSSxJQUM1QkYsV0FBVyxDQUFDRyxpQkFBaUIsSUFDN0IsQ0FBQyxJQUFBQyxrQkFBWSxFQUFDdEQsT0FBTyxFQUFFbUQsVUFBVSxDQUFDLEVBQ2xDO1FBQUEsSUFBQUkscUJBQUE7UUFDQSxJQUFJLElBQUksQ0FBQ0MsS0FBSyxDQUFDQyxLQUFLLEVBQUU7VUFDcEIsSUFBSSxDQUFDRCxLQUFLLENBQUNDLEtBQUssVUFBTyxDQUFDLENBQUM7UUFDM0I7UUFDQSxJQUFJL0IsS0FBSyxDQUFDMEIsSUFBSSxFQUFFO1VBQ2QsSUFBSSxDQUFDSSxLQUFLLENBQUNDLEtBQUssR0FBRyxJQUFJLENBQUNDLFFBQVEsQ0FBQ2hDLEtBQUssQ0FBQzBCLElBQVksQ0FBQztVQUVwRCxJQUFNL0QsVUFBVSxHQUFJcUMsS0FBSyxDQUFDMEIsSUFBSSxDQUFTL0QsVUFBVSxJQUFJcUMsS0FBSyxDQUFDMEIsSUFBSTtVQUMvRCxJQUFJLENBQUM3QixRQUFRLENBQUM7WUFDWm9DLFVBQVUsRUFBRTVGLE9BQU8sQ0FBQ3NCLFVBQVUsQ0FBQ3VFLE1BQU0sSUFBSXZFLFVBQVUsQ0FBQ3dFLE9BQU87VUFDN0QsQ0FBQyxDQUFDO1FBQ0o7UUFDQSxDQUFBTixxQkFBQSxPQUFJLENBQUNPLG1CQUFtQixDQUFDLENBQUMsY0FBQVAscUJBQUEsZUFBMUJBLHFCQUFBLENBQTRCUSxhQUFhLENBQUMsQ0FBQztNQUM3QztNQUVBLElBQUlyQyxLQUFLLElBQUlBLEtBQUssQ0FBQ3ZCLE1BQU0sRUFBRTtRQUN6QixJQUFJLENBQUM2RCxZQUFZLENBQUM7VUFBQ3RDLEtBQUssRUFBTEEsS0FBSztVQUFFdUIsUUFBUSxFQUFSQTtRQUFRLENBQUMsQ0FBQztNQUN0QztNQUVBLElBQUksSUFBSSxDQUFDTyxLQUFLLENBQUNDLEtBQUssRUFBRTtRQUNwQixJQUFJLENBQUNELEtBQUssQ0FBQ0MsS0FBSyxDQUFDUSxXQUFXLENBQUMsSUFBSSxDQUFDdkMsS0FBSyxDQUFDd0MsU0FBUyxHQUFHQyxxQkFBRSxDQUFDQyxVQUFVLEdBQUdELHFCQUFFLENBQUNFLFNBQVMsQ0FBQztNQUNuRjtJQUNGO0VBQUM7SUFBQTFELEdBQUE7SUFBQWxFLEtBQUEsRUFFRCxTQUFBdUgsWUFBWUEsQ0FBQU0sSUFBQSxFQU1IO01BQUEsSUFMUDVDLEtBQUssR0FBQTRDLElBQUEsQ0FBTDVDLEtBQUs7UUFDTHVCLFFBQVEsR0FBQXFCLElBQUEsQ0FBUnJCLFFBQVE7TUFLUixJQUFPOUMsTUFBTSxHQUFJLElBQUksQ0FBQ3FELEtBQUssQ0FBcEJyRCxNQUFNO01BQ2IsSUFBT1UsRUFBRSxHQUFJLElBQUksQ0FBQ0MsT0FBTyxDQUFsQkQsRUFBRTtNQUVULElBQU0wRCxTQUFTLEdBQUcsSUFBQUMsa0JBQVUsRUFBQztRQUMzQjNELEVBQUUsRUFBRkEsRUFBRTtRQUNGVixNQUFNLEVBQU5BLE1BQU07UUFDTnNFLFVBQVUsRUFBRS9DLEtBQUssQ0FBQ3ZCLE1BQU07UUFDeEJ1RSxhQUFhLEVBQUV6QixRQUFRLENBQUM5QztNQUMxQixDQUFDLENBQUM7TUFFRixJQUFJb0UsU0FBUyxFQUFFO1FBQ2IsSUFBSSxDQUFDaEQsUUFBUSxDQUFDO1VBQUNwQixNQUFNLEVBQUVvRTtRQUFTLENBQUMsQ0FBQztNQUNwQztJQUNGO0VBQUM7SUFBQTVELEdBQUE7SUFBQWxFLEtBQUEsRUFFRCxTQUFBa0ksSUFBSUEsQ0FBQUMsS0FBQSxFQUFvQztNQUFBLElBQWxDQyxRQUFRLEdBQUFELEtBQUEsQ0FBUkMsUUFBUTtNQUNaLElBQUFDLFdBQUEsR0FBd0IsSUFBSSxDQUFDdEIsS0FBSztRQUEzQkMsS0FBSyxHQUFBcUIsV0FBQSxDQUFMckIsS0FBSztRQUFFdEQsTUFBTSxHQUFBMkUsV0FBQSxDQUFOM0UsTUFBTTtNQUNwQixJQUFPQyxXQUFXLEdBQUksSUFBSSxDQUFDc0IsS0FBSyxDQUF6QnRCLFdBQVc7O01BRWxCO01BQ0EsSUFDRSxDQUFDcUQsS0FBSyxJQUNOLENBQUN0RCxNQUFNLElBQ1A3QixNQUFNLENBQUNDLElBQUksQ0FBQzRCLE1BQU0sQ0FBQyxDQUFDaEUsTUFBTSxLQUFLLENBQUMsSUFDaEMsQ0FBQ21DLE1BQU0sQ0FBQ3lHLE1BQU0sQ0FBQzVFLE1BQU0sQ0FBQyxDQUFDNkUsS0FBSyxDQUFDLFVBQUFDLElBQUk7UUFBQSxPQUFJQSxJQUFJO01BQUEsRUFBQyxFQUMxQztRQUNBO01BQ0Y7TUFFQSxJQUFPQyxTQUFTLEdBQUksSUFBSSxDQUFDeEQsS0FBSyxDQUF2QndELFNBQVM7TUFFaEJ6QixLQUFLLENBQ0YwQixXQUFXLENBQ1Y3RyxNQUFNLENBQUM4RyxNQUFNLENBQUMsQ0FBQyxDQUFDLEVBQUVQLFFBQVEsRUFBRTtRQUMxQkssU0FBUyxFQUFUQSxTQUFTO1FBQ1RHLFdBQVcsRUFBRSxDQUFDLElBQUksQ0FBQzdCLEtBQUssQ0FBQ0c7TUFDM0IsQ0FBQyxDQUNILENBQUMsQ0FDQTJCLG9CQUFvQixDQUFBekcsYUFBQSxDQUFBQSxhQUFBLEtBQ2hCdUIsV0FBVyxHQUNYRCxNQUFNLENBQ1YsQ0FBQyxDQUNEd0UsSUFBSSxDQUFDLENBQUM7SUFDWDtFQUFDO0lBQUFoRSxHQUFBO0lBQUFsRSxLQUFBLEVBRUQsU0FBQThJLGFBQWFBLENBQUEsRUFBUztNQUNwQnJILGFBQUEsQ0FBQW1DLGVBQUEsNkJBQW9CLElBQUksQ0FBQ1MsT0FBTztNQUVoQyxJQUFJLElBQUksQ0FBQzBDLEtBQUssQ0FBQ3JELE1BQU0sRUFBRTtRQUNyQixTQUFBcUYsRUFBQSxNQUFBQyxjQUFBLEdBQW9CbkgsTUFBTSxDQUFDeUcsTUFBTSxDQUFDLElBQUksQ0FBQ3ZCLEtBQUssQ0FBQ3JELE1BQU0sQ0FBQyxFQUFBcUYsRUFBQSxHQUFBQyxjQUFBLENBQUF0SixNQUFBLEVBQUFxSixFQUFBLElBQUU7VUFBakQsSUFBTUUsS0FBSyxHQUFBRCxjQUFBLENBQUFELEVBQUE7VUFDZCxJQUFJeEosS0FBSyxDQUFDQyxPQUFPLENBQUN5SixLQUFLLENBQUMsRUFBRTtZQUN4QkEsS0FBSyxDQUFDQyxHQUFHLENBQUMsVUFBQUMsQ0FBQztjQUFBLE9BQUlBLENBQUMsSUFBSUEsQ0FBQyxVQUFPLENBQUMsQ0FBQztZQUFBLEVBQUM7VUFDakMsQ0FBQyxNQUFNLElBQUlGLEtBQUssRUFBRTtZQUNoQkEsS0FBSyxVQUFPLENBQUMsQ0FBQztVQUNoQjtRQUNGO01BQ0Y7SUFDRjtFQUFDO0lBQUEvRSxHQUFBO0lBQUFsRSxLQUFBLEVBRUQsU0FBVWlILFFBQVFBLENBQUNOLElBQVUsRUFBUztNQUNwQyxJQUFPdkMsRUFBRSxHQUFJLElBQUksQ0FBQ0MsT0FBTyxDQUFsQkQsRUFBRTtNQUVULElBQU00QyxLQUFLLEdBQUcsSUFBSW9DLFdBQUssQ0FDckJoRixFQUFFLEVBQ0Z2QyxNQUFNLENBQUM4RyxNQUFNLENBQUMsQ0FBQyxDQUFDLEVBQUUsSUFBSSxDQUFDNUQsVUFBVSxDQUFDLENBQUMsRUFBRTtRQUNuQ3NFLEVBQUUsRUFBRSxJQUFJLENBQUNwRSxLQUFLLENBQUNvRSxFQUFFO1FBQ2pCQyxRQUFRLEVBQUVyRyxXQUFXLENBQUMwRCxJQUFJLENBQUM7UUFDM0I0QyxXQUFXLEVBQUU7TUFDZixDQUFDLENBQ0gsQ0FBQztNQUVELE9BQU92QyxLQUFLO0lBQ2Q7RUFBQztBQUFBLEVBM0swQzFELHVCQUFlO0FBOEs1RE0sZUFBZSxDQUFDNEYsU0FBUyxHQUFHLGlCQUFpQjtBQUM3QzVGLGVBQWUsQ0FBQ1AsWUFBWSxHQUFHQSxZQUFZIiwiaWdub3JlTGlzdCI6W119
271
+ //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJfbWVzaExheWVycyIsInJlcXVpcmUiLCJfZW5naW5lIiwiX3Jhc3Rlck1lc2hMYXllclNoYWRlcnMiLCJfcmFzdGVyTGF5ZXJTaGFkZXJzIiwiX2ltYWdlcyIsIl91dGlsIiwiX3BpcGVsaW5lVmFsaWRhdGlvblBhdGNoIiwiX3Jhc3RlclByb2Nlc3NpbmdVbmlmb3JtcyIsIl9jb25zdGFudHMiLCJfY2FsbFN1cGVyIiwidCIsIm8iLCJlIiwiX2dldFByb3RvdHlwZU9mMiIsIl9wb3NzaWJsZUNvbnN0cnVjdG9yUmV0dXJuMiIsIl9pc05hdGl2ZVJlZmxlY3RDb25zdHJ1Y3QiLCJSZWZsZWN0IiwiY29uc3RydWN0IiwiY29uc3RydWN0b3IiLCJhcHBseSIsIkJvb2xlYW4iLCJwcm90b3R5cGUiLCJ2YWx1ZU9mIiwiY2FsbCIsIl9zdXBlclByb3BHZXQiLCJyIiwicCIsIl9nZXQyIiwib3duS2V5cyIsIk9iamVjdCIsImtleXMiLCJnZXRPd25Qcm9wZXJ0eVN5bWJvbHMiLCJmaWx0ZXIiLCJnZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IiLCJlbnVtZXJhYmxlIiwicHVzaCIsIl9vYmplY3RTcHJlYWQiLCJhcmd1bWVudHMiLCJsZW5ndGgiLCJmb3JFYWNoIiwiX2RlZmluZVByb3BlcnR5MiIsImdldE93blByb3BlcnR5RGVzY3JpcHRvcnMiLCJkZWZpbmVQcm9wZXJ0aWVzIiwiZGVmaW5lUHJvcGVydHkiLCJ2YWxpZGF0ZUdlb21ldHJ5QXR0cmlidXRlcyIsImF0dHJpYnV0ZXMiLCJwb3NpdGlvbnMiLCJQT1NJVElPTiIsIkVycm9yIiwiZ2V0R2VvbWV0cnkiLCJkYXRhIiwiR2VvbWV0cnkiLCJkZWZhdWx0UHJvcHMiLCJTaW1wbGVNZXNoTGF5ZXIiLCJtb2R1bGVzIiwidHlwZSIsInZhbHVlIiwiY29tcGFyZSIsImltYWdlcyIsIm1vZHVsZVByb3BzIiwib25SZWRyYXdOZWVkZWQiLCJSYXN0ZXJNZXNoTGF5ZXIiLCJleHBvcnRzIiwiX1NpbXBsZU1lc2hMYXllciIsIl90aGlzIiwiX2NsYXNzQ2FsbENoZWNrMiIsIl9sZW4iLCJhcmdzIiwiQXJyYXkiLCJfa2V5IiwiY29uY2F0IiwiX2luaGVyaXRzMiIsIl9jcmVhdGVDbGFzczIiLCJrZXkiLCJpbml0aWFsaXplU3RhdGUiLCJwYXRjaFBpcGVsaW5lVmFsaWRhdGlvbiIsImVuc3VyZVJhc3Rlckhvb2tzUmVnaXN0ZXJlZCIsInNldFN0YXRlIiwiZ2V0U2hhZGVycyIsIl90aGlzJHByb3BzJG1vZHVsZXMiLCJwcm9wcyIsImx1bWFNb2R1bGVzIiwicHJlcGFyZUx1bWFNb2R1bGVzIiwicGFyZW50U2hhZGVycyIsInBhcmVudE1vZHVsZXMiLCJtIiwibmFtZSIsInZzIiwiYnVpbGRSYXN0ZXJNZXNoVmVydGV4U2hhZGVyIiwiZnMiLCJidWlsZFJhc3Rlck1lc2hGcmFnbWVudFNoYWRlciIsIl90b0NvbnN1bWFibGVBcnJheTIiLCJyYXN0ZXJNZXNoVW5pZm9ybXMiLCJyYXN0ZXJQcm9jZXNzaW5nVW5pZm9ybXMiLCJ1cGRhdGVTdGF0ZSIsInBhcmFtcyIsIm9sZFByb3BzIiwiY2hhbmdlRmxhZ3MiLCJjb250ZXh0Iiwib2xkTW9kdWxlcyIsIm1lc2giLCJleHRlbnNpb25zQ2hhbmdlZCIsIm1vZHVsZXNFcXVhbCIsIl90aGlzJGdldEF0dHJpYnV0ZU1hbiIsInN0YXRlIiwibW9kZWwiLCJfdGhpcyRzdGF0ZSRtb2RlbCRkZXMiLCJfdGhpcyRzdGF0ZSRtb2RlbCIsImRlc3Ryb3kiLCJnZXRNb2RlbCIsImhhc05vcm1hbHMiLCJOT1JNQUwiLCJub3JtYWxzIiwiZ2V0QXR0cmlidXRlTWFuYWdlciIsImludmFsaWRhdGVBbGwiLCJ1cGRhdGVJbWFnZXMiLCJfdGhpcyRzdGF0ZSRtb2RlbCRzZXQiLCJfdGhpcyRzdGF0ZSRtb2RlbDIiLCJzZXRUb3BvbG9neSIsIndpcmVmcmFtZSIsIlRPUE9MT0dZIiwiTElORV9TVFJJUCIsIlRSSUFOR0xFX0xJU1QiLCJfcmVmIiwiZGV2aWNlIiwiZ2wiLCJuZXdJbWFnZXMiLCJsb2FkSW1hZ2VzIiwiaW1hZ2VzRGF0YSIsIm9sZEltYWdlc0RhdGEiLCJkcmF3IiwiX29wdHMiLCJfdGhpcyRwcm9wcyRvcGFjaXR5IiwiX3RoaXMkc3RhdGUiLCJ2YWx1ZXMiLCJldmVyeSIsIml0ZW0iLCJzaGFkZXJJbnB1dHMiLCJzZXRQcm9wcyIsInJhc3Rlck1lc2giLCJtZXNoT3BhY2l0eSIsIm9wYWNpdHkiLCJtZXNoRmxhdFNoYWRpbmciLCJhbGxNb2R1bGVQcm9wcyIsImFwcGx5TW9kdWxlVW5pZm9ybXMiLCJkcmF3U3VjY2VzcyIsInJlbmRlclBhc3MiLCJfc2NoZWR1bGVSZWRyYXciLCJfdGhpczIiLCJfcmVkcmF3U2NoZWR1bGVkIiwicmVxdWVzdEFuaW1hdGlvbkZyYW1lIiwiX3RoaXMyJGNvbnRleHQkbGF5ZXJNIiwiZGVjayIsIl9uZWVkc1JlZHJhdyIsImxheWVyTWFuYWdlciIsInNldE5lZWRzUmVkcmF3IiwiZmluYWxpemVTdGF0ZSIsIl9pIiwiX09iamVjdCR2YWx1ZXMiLCJpbWFnZSIsImlzQXJyYXkiLCJtYXAiLCJ4IiwiX3gkZGVsZXRlIiwiX2ltYWdlJGRlbGV0ZSIsIk1vZGVsIiwiYXNzaWduIiwiaWQiLCJnZW9tZXRyeSIsImlzSW5zdGFuY2VkIiwibGF5ZXJOYW1lIl0sInNvdXJjZXMiOlsiLi4vLi4vLi4vc3JjL3Jhc3Rlci9yYXN0ZXItbWVzaC1sYXllci9yYXN0ZXItbWVzaC1sYXllci50cyJdLCJzb3VyY2VzQ29udGVudCI6WyIvLyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogTUlUXG4vLyBDb3B5cmlnaHQgY29udHJpYnV0b3JzIHRvIHRoZSBrZXBsZXIuZ2wgcHJvamVjdFxuXG5pbXBvcnQge1VwZGF0ZVBhcmFtZXRlcnN9IGZyb20gJ0BkZWNrLmdsL2NvcmUnO1xuaW1wb3J0IHtTaW1wbGVNZXNoTGF5ZXIsIFNpbXBsZU1lc2hMYXllclByb3BzfSBmcm9tICdAZGVjay5nbC9tZXNoLWxheWVycyc7XG5pbXBvcnQge0dlb21ldHJ5fSBmcm9tICdAbHVtYS5nbC9lbmdpbmUnO1xuaW1wb3J0IHtNb2RlbH0gZnJvbSAnQGx1bWEuZ2wvZW5naW5lJztcblxuaW1wb3J0IHtcbiAgYnVpbGRSYXN0ZXJNZXNoRnJhZ21lbnRTaGFkZXIsXG4gIGJ1aWxkUmFzdGVyTWVzaFZlcnRleFNoYWRlcixcbiAgcmFzdGVyTWVzaFVuaWZvcm1zXG59IGZyb20gJy4vcmFzdGVyLW1lc2gtbGF5ZXItc2hhZGVycyc7XG5pbXBvcnQge1xuICBlbnN1cmVSYXN0ZXJIb29rc1JlZ2lzdGVyZWQsXG4gIHByZXBhcmVMdW1hTW9kdWxlc1xufSBmcm9tICcuLi9yYXN0ZXItbGF5ZXIvcmFzdGVyLWxheWVyLXNoYWRlcnMnO1xuaW1wb3J0IHtsb2FkSW1hZ2VzfSBmcm9tICcuLi9pbWFnZXMnO1xuaW1wb3J0IHR5cGUge1Jhc3RlckxheWVyQWRkZWRQcm9wcywgSW1hZ2VTdGF0ZX0gZnJvbSAnLi4vdHlwZXMnO1xuaW1wb3J0IHttb2R1bGVzRXF1YWwsIGFwcGx5TW9kdWxlVW5pZm9ybXN9IGZyb20gJy4uL3V0aWwnO1xuaW1wb3J0IHtwYXRjaFBpcGVsaW5lVmFsaWRhdGlvbn0gZnJvbSAnLi4vcGlwZWxpbmUtdmFsaWRhdGlvbi1wYXRjaCc7XG5pbXBvcnQge3Jhc3RlclByb2Nlc3NpbmdVbmlmb3Jtc30gZnJvbSAnLi4vcmFzdGVyLXByb2Nlc3NpbmctdW5pZm9ybXMnO1xuaW1wb3J0IHtUT1BPTE9HWX0gZnJvbSAnQGtlcGxlci5nbC9jb25zdGFudHMnO1xuXG50eXBlIE1lc2ggPSBTaW1wbGVNZXNoTGF5ZXJQcm9wc1snbWVzaCddO1xuXG5pbnRlcmZhY2UgTWVzaERhdGEge1xuICBhdHRyaWJ1dGVzPzogUmVjb3JkPHN0cmluZywgdW5rbm93bj47XG4gIHBvc2l0aW9ucz86IHVua25vd247XG4gIFBPU0lUSU9OPzogdW5rbm93bjtcbiAgTk9STUFMPzogdW5rbm93bjtcbiAgbm9ybWFscz86IHVua25vd247XG4gIFtrZXk6IHN0cmluZ106IHVua25vd247XG59XG5cbmZ1bmN0aW9uIHZhbGlkYXRlR2VvbWV0cnlBdHRyaWJ1dGVzKGF0dHJpYnV0ZXM6IFJlY29yZDxzdHJpbmcsIHVua25vd24+KSB7XG4gIGlmICghKGF0dHJpYnV0ZXMucG9zaXRpb25zIHx8IGF0dHJpYnV0ZXMuUE9TSVRJT04pKSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKFxuICAgICAgJ1Jhc3Rlck1lc2hMYXllciByZXF1aXJlcyBcInBvc2l0aW9uc1wiIG9yIFwiUE9TSVRJT05cIiBhdHRyaWJ1dGUgaW4gbWVzaCBwcm9wZXJ0eS4nXG4gICAgKTtcbiAgfVxufVxuXG4vKlxuICogQ29udmVydCBtZXNoIGRhdGEgaW50byBnZW9tZXRyeVxuICogQHJldHVybnMgZ2VvbWV0cnlcbiAqL1xuZnVuY3Rpb24gZ2V0R2VvbWV0cnkoZGF0YTogTWVzaERhdGEgfCBHZW9tZXRyeSk6IEdlb21ldHJ5IHtcbiAgaWYgKCdhdHRyaWJ1dGVzJyBpbiBkYXRhICYmIGRhdGEuYXR0cmlidXRlcykge1xuICAgIHZhbGlkYXRlR2VvbWV0cnlBdHRyaWJ1dGVzKGRhdGEuYXR0cmlidXRlcyk7XG4gICAgaWYgKGRhdGEgaW5zdGFuY2VvZiBHZW9tZXRyeSkge1xuICAgICAgcmV0dXJuIGRhdGE7XG4gICAgfVxuICAgIHJldHVybiBuZXcgR2VvbWV0cnkoZGF0YSBhcyBDb25zdHJ1Y3RvclBhcmFtZXRlcnM8dHlwZW9mIEdlb21ldHJ5PlswXSk7XG4gIH0gZWxzZSBpZiAoJ3Bvc2l0aW9ucycgaW4gZGF0YSB8fCAnUE9TSVRJT04nIGluIGRhdGEpIHtcbiAgICB2YWxpZGF0ZUdlb21ldHJ5QXR0cmlidXRlcyhkYXRhIGFzIFJlY29yZDxzdHJpbmcsIHVua25vd24+KTtcbiAgICByZXR1cm4gbmV3IEdlb21ldHJ5KHtcbiAgICAgIGF0dHJpYnV0ZXM6IGRhdGEgYXMgUmVjb3JkPHN0cmluZywgdW5rbm93bj5cbiAgICB9IGFzIENvbnN0cnVjdG9yUGFyYW1ldGVyczx0eXBlb2YgR2VvbWV0cnk+WzBdKTtcbiAgfVxuICB0aHJvdyBFcnJvcignSW52YWxpZCBtZXNoJyk7XG59XG5cbmNvbnN0IGRlZmF1bHRQcm9wcyA9IHtcbiAgLi4uU2ltcGxlTWVzaExheWVyLmRlZmF1bHRQcm9wcyxcbiAgbW9kdWxlczoge3R5cGU6ICdhcnJheScsIHZhbHVlOiBbXSwgY29tcGFyZTogdHJ1ZX0sXG4gIGltYWdlczoge3R5cGU6ICdvYmplY3QnLCB2YWx1ZToge30sIGNvbXBhcmU6IHRydWV9LFxuICBtb2R1bGVQcm9wczoge3R5cGU6ICdvYmplY3QnLCB2YWx1ZToge30sIGNvbXBhcmU6IHRydWV9LFxuICBvblJlZHJhd05lZWRlZDoge3R5cGU6ICdmdW5jdGlvbicsIHZhbHVlOiBudWxsLCBjb21wYXJlOiBmYWxzZX1cbn07XG5cbmV4cG9ydCBkZWZhdWx0IGNsYXNzIFJhc3Rlck1lc2hMYXllciBleHRlbmRzIFNpbXBsZU1lc2hMYXllcjxhbnksIFJhc3RlckxheWVyQWRkZWRQcm9wcz4ge1xuICBkZWNsYXJlIHN0YXRlOiBTaW1wbGVNZXNoTGF5ZXI8UmFzdGVyTGF5ZXJBZGRlZFByb3BzPlsnc3RhdGUnXSAmIHtcbiAgICBpbWFnZXM6IEltYWdlU3RhdGU7XG4gIH07XG5cbiAgX3JlZHJhd1NjaGVkdWxlZCA9IGZhbHNlO1xuXG4gIGluaXRpYWxpemVTdGF0ZSgpOiB2b2lkIHtcbiAgICBwYXRjaFBpcGVsaW5lVmFsaWRhdGlvbigpO1xuICAgIGVuc3VyZVJhc3Rlckhvb2tzUmVnaXN0ZXJlZCgpO1xuICAgIHRoaXMuc2V0U3RhdGUoe2ltYWdlczoge319KTtcbiAgICBzdXBlci5pbml0aWFsaXplU3RhdGUoKTtcbiAgfVxuXG4gIGdldFNoYWRlcnMoKTogYW55IHtcbiAgICBjb25zdCB7bW9kdWxlcyA9IFtdfSA9IHRoaXMucHJvcHM7XG5cbiAgICBjb25zdCBsdW1hTW9kdWxlcyA9IHByZXBhcmVMdW1hTW9kdWxlcyhtb2R1bGVzKTtcbiAgICBjb25zdCBwYXJlbnRTaGFkZXJzID0gc3VwZXIuZ2V0U2hhZGVycygpO1xuXG4gICAgLy8gRmlsdGVyIG91dCBzaW1wbGVNZXNoVW5pZm9ybXMgZnJvbSBwYXJlbnQg4oCUIFJhc3Rlck1lc2hMYXllciB1c2VzIGl0cyBvd25cbiAgICAvLyBzaGFkZXJzIHRoYXQgZG9uJ3QgcmVmZXJlbmNlIFNpbXBsZU1lc2ggdW5pZm9ybXMsIGFuZCBldmVyeSBVQk8gY291bnRzXG4gICAgLy8gYWdhaW5zdCB0aGUgV2ViR0wyIEdMX01BWF9GUkFHTUVOVF9VTklGT1JNX0JVRkZFUlMgbGltaXQgKHR5cGljYWxseSAxMikuXG4gICAgY29uc3QgcGFyZW50TW9kdWxlcyA9IChwYXJlbnRTaGFkZXJzLm1vZHVsZXMgfHwgW10pLmZpbHRlcihcbiAgICAgIChtOiB7bmFtZT86IHN0cmluZ30pID0+IG0ubmFtZSAhPT0gJ3NpbXBsZU1lc2gnXG4gICAgKTtcblxuICAgIHJldHVybiB7XG4gICAgICAuLi5wYXJlbnRTaGFkZXJzLFxuICAgICAgdnM6IGJ1aWxkUmFzdGVyTWVzaFZlcnRleFNoYWRlcigpLFxuICAgICAgZnM6IGJ1aWxkUmFzdGVyTWVzaEZyYWdtZW50U2hhZGVyKCksXG4gICAgICBtb2R1bGVzOiBbLi4ucGFyZW50TW9kdWxlcywgcmFzdGVyTWVzaFVuaWZvcm1zLCByYXN0ZXJQcm9jZXNzaW5nVW5pZm9ybXMsIC4uLmx1bWFNb2R1bGVzXVxuICAgIH07XG4gIH1cblxuICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgY29tcGxleGl0eVxuICB1cGRhdGVTdGF0ZShwYXJhbXM6IFVwZGF0ZVBhcmFtZXRlcnM8U2ltcGxlTWVzaExheWVyPGFueSwgUmFzdGVyTGF5ZXJBZGRlZFByb3BzPj4pOiB2b2lkIHtcbiAgICBjb25zdCB7cHJvcHMsIG9sZFByb3BzLCBjaGFuZ2VGbGFncywgY29udGV4dH0gPSBwYXJhbXM7XG4gICAgc3VwZXIudXBkYXRlU3RhdGUoe3Byb3BzLCBvbGRQcm9wcywgY2hhbmdlRmxhZ3MsIGNvbnRleHR9KTtcblxuICAgIGNvbnN0IG1vZHVsZXMgPSBwcm9wcyAmJiBwcm9wcy5tb2R1bGVzO1xuICAgIGNvbnN0IG9sZE1vZHVsZXMgPSBvbGRQcm9wcyAmJiBvbGRQcm9wcy5tb2R1bGVzO1xuXG4gICAgaWYgKFxuICAgICAgcHJvcHMubWVzaCAhPT0gb2xkUHJvcHMubWVzaCB8fFxuICAgICAgY2hhbmdlRmxhZ3MuZXh0ZW5zaW9uc0NoYW5nZWQgfHxcbiAgICAgICFtb2R1bGVzRXF1YWwobW9kdWxlcywgb2xkTW9kdWxlcylcbiAgICApIHtcbiAgICAgIGlmICh0aGlzLnN0YXRlLm1vZGVsKSB7XG4gICAgICAgIHRoaXMuc3RhdGUubW9kZWwuZGVzdHJveT8uKCk7XG4gICAgICB9XG4gICAgICBpZiAocHJvcHMubWVzaCkge1xuICAgICAgICB0aGlzLnN0YXRlLm1vZGVsID0gdGhpcy5nZXRNb2RlbChwcm9wcy5tZXNoIGFzIE1lc2gpO1xuXG4gICAgICAgIGNvbnN0IGF0dHJpYnV0ZXMgPSAoKHByb3BzLm1lc2ggYXMgTWVzaERhdGEpLmF0dHJpYnV0ZXMgfHwgcHJvcHMubWVzaCkgYXMgTWVzaERhdGE7XG4gICAgICAgIHRoaXMuc2V0U3RhdGUoe1xuICAgICAgICAgIGhhc05vcm1hbHM6IEJvb2xlYW4oYXR0cmlidXRlcy5OT1JNQUwgfHwgYXR0cmlidXRlcy5ub3JtYWxzKVxuICAgICAgICB9KTtcbiAgICAgIH1cbiAgICAgIHRoaXMuZ2V0QXR0cmlidXRlTWFuYWdlcigpPy5pbnZhbGlkYXRlQWxsKCk7XG4gICAgfVxuXG4gICAgaWYgKHByb3BzICYmIHByb3BzLmltYWdlcykge1xuICAgICAgdGhpcy51cGRhdGVJbWFnZXMoe3Byb3BzLCBvbGRQcm9wc30pO1xuICAgIH1cblxuICAgIGlmICh0aGlzLnN0YXRlLm1vZGVsKSB7XG4gICAgICB0aGlzLnN0YXRlLm1vZGVsLnNldFRvcG9sb2d5Py4oXG4gICAgICAgIHRoaXMucHJvcHMud2lyZWZyYW1lID8gVE9QT0xPR1kuTElORV9TVFJJUCA6IFRPUE9MT0dZLlRSSUFOR0xFX0xJU1RcbiAgICAgICk7XG4gICAgfVxuICB9XG5cbiAgdXBkYXRlSW1hZ2VzKHtcbiAgICBwcm9wcyxcbiAgICBvbGRQcm9wc1xuICB9OiB7XG4gICAgcHJvcHM6IFJhc3RlckxheWVyQWRkZWRQcm9wcztcbiAgICBvbGRQcm9wczogUmFzdGVyTGF5ZXJBZGRlZFByb3BzO1xuICB9KTogdm9pZCB7XG4gICAgY29uc3Qge2ltYWdlc30gPSB0aGlzLnN0YXRlO1xuICAgIGNvbnN0IGRldmljZSA9IHRoaXMuY29udGV4dC5kZXZpY2U7XG4gICAgY29uc3QgZ2wgPSBkZXZpY2U/LmdsIHx8IHRoaXMuY29udGV4dC5nbDtcblxuICAgIGNvbnN0IG5ld0ltYWdlcyA9IGxvYWRJbWFnZXMoe1xuICAgICAgZ2wsXG4gICAgICBkZXZpY2UsXG4gICAgICBpbWFnZXMsXG4gICAgICBpbWFnZXNEYXRhOiBwcm9wcy5pbWFnZXMsXG4gICAgICBvbGRJbWFnZXNEYXRhOiBvbGRQcm9wcy5pbWFnZXNcbiAgICB9KTtcblxuICAgIGlmIChuZXdJbWFnZXMpIHtcbiAgICAgIHRoaXMuc2V0U3RhdGUoe2ltYWdlczogbmV3SW1hZ2VzfSk7XG4gICAgfVxuICB9XG5cbiAgZHJhdyhfb3B0czogUmVjb3JkPHN0cmluZywgdW5rbm93bj4pOiB2b2lkIHtcbiAgICBjb25zdCB7bW9kZWwsIGltYWdlc30gPSB0aGlzLnN0YXRlO1xuICAgIGNvbnN0IHttb2R1bGVQcm9wc30gPSB0aGlzLnByb3BzO1xuXG4gICAgaWYgKFxuICAgICAgIW1vZGVsIHx8XG4gICAgICAhaW1hZ2VzIHx8XG4gICAgICBPYmplY3Qua2V5cyhpbWFnZXMpLmxlbmd0aCA9PT0gMCB8fFxuICAgICAgIU9iamVjdC52YWx1ZXMoaW1hZ2VzKS5ldmVyeShpdGVtID0+IGl0ZW0pXG4gICAgKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgLy8gU2V0IG1lc2gtc3BlY2lmaWMgVUJPIHVuaWZvcm1zXG4gICAgbW9kZWwuc2hhZGVySW5wdXRzLnNldFByb3BzKHtcbiAgICAgIHJhc3Rlck1lc2g6IHtcbiAgICAgICAgbWVzaE9wYWNpdHk6IHRoaXMucHJvcHMub3BhY2l0eSA/PyAxLFxuICAgICAgICBtZXNoRmxhdFNoYWRpbmc6ICF0aGlzLnN0YXRlLmhhc05vcm1hbHMgPyAxLjAgOiAwLjBcbiAgICAgIH1cbiAgICB9KTtcblxuICAgIC8vIEFwcGx5IGVhY2ggY3VzdG9tIG1vZHVsZSdzIHVuaWZvcm1zL2JpbmRpbmdzIHRvIHNoYWRlcklucHV0cyBkaXJlY3RseS5cbiAgICAvLyBXZSBjYWxsIGdldFVuaWZvcm1zIG9uY2UgcGVyIG1vZHVsZSBhbmQgd3JpdGUgdGhlIHJlc3VsdHMgaW50b1xuICAgIC8vIHNoYWRlcklucHV0cy5tb2R1bGVVbmlmb3Jtcy9tb2R1bGVCaW5kaW5ncywgYnlwYXNzaW5nIHNldFByb3BzKCkgd2hpY2hcbiAgICAvLyB3b3VsZCBjYWxsIGdldFVuaWZvcm1zIGEgc2Vjb25kIHRpbWUgb24gYWxyZWFkeS10cmFuc2Zvcm1lZCB2YWx1ZXMuXG4gICAgY29uc3QgYWxsTW9kdWxlUHJvcHMgPSB7Li4ubW9kdWxlUHJvcHMsIC4uLmltYWdlc307XG4gICAgY29uc3QgbW9kdWxlcyA9IHRoaXMucHJvcHMubW9kdWxlcyB8fCBbXTtcbiAgICBhcHBseU1vZHVsZVVuaWZvcm1zKG1vZGVsLnNoYWRlcklucHV0cywgbW9kdWxlcywgYWxsTW9kdWxlUHJvcHMpO1xuXG4gICAgY29uc3QgZHJhd1N1Y2Nlc3MgPSBtb2RlbC5kcmF3KHRoaXMuY29udGV4dC5yZW5kZXJQYXNzKTtcbiAgICBpZiAoIWRyYXdTdWNjZXNzKSB7XG4gICAgICB0aGlzLl9zY2hlZHVsZVJlZHJhdygpO1xuICAgIH1cbiAgfVxuXG4gIF9zY2hlZHVsZVJlZHJhdygpOiB2b2lkIHtcbiAgICBpZiAodGhpcy5fcmVkcmF3U2NoZWR1bGVkKSByZXR1cm47XG4gICAgdGhpcy5fcmVkcmF3U2NoZWR1bGVkID0gdHJ1ZTtcbiAgICByZXF1ZXN0QW5pbWF0aW9uRnJhbWUoKCkgPT4ge1xuICAgICAgdGhpcy5fcmVkcmF3U2NoZWR1bGVkID0gZmFsc2U7XG4gICAgICBpZiAodGhpcy5jb250ZXh0LmRlY2spIHtcbiAgICAgICAgLy8gQHRzLWV4cGVjdC1lcnJvciBhY2Nlc3NpbmcgcHJpdmF0ZSBkZWNrLmdsIHByb3BlcnR5XG4gICAgICAgIHRoaXMuY29udGV4dC5kZWNrLl9uZWVkc1JlZHJhdyA9ICdSYXN0ZXJNZXNoTGF5ZXIgcGlwZWxpbmUgcGVuZGluZyc7XG4gICAgICB9XG4gICAgICB0aGlzLmNvbnRleHQubGF5ZXJNYW5hZ2VyPy5zZXROZWVkc1JlZHJhdygnUmFzdGVyTWVzaExheWVyIHBpcGVsaW5lIHBlbmRpbmcnKTtcbiAgICAgIGlmICh0eXBlb2YgdGhpcy5wcm9wcy5vblJlZHJhd05lZWRlZCA9PT0gJ2Z1bmN0aW9uJykge1xuICAgICAgICB0aGlzLnByb3BzLm9uUmVkcmF3TmVlZGVkKCk7XG4gICAgICB9XG4gICAgfSk7XG4gIH1cblxuICBmaW5hbGl6ZVN0YXRlKCk6IHZvaWQge1xuICAgIHN1cGVyLmZpbmFsaXplU3RhdGUodGhpcy5jb250ZXh0KTtcblxuICAgIGlmICh0aGlzLnN0YXRlLmltYWdlcykge1xuICAgICAgZm9yIChjb25zdCBpbWFnZSBvZiBPYmplY3QudmFsdWVzKHRoaXMuc3RhdGUuaW1hZ2VzKSkge1xuICAgICAgICBpZiAoQXJyYXkuaXNBcnJheShpbWFnZSkpIHtcbiAgICAgICAgICBpbWFnZS5tYXAoeCA9PiB4ICYmICh4LmRlc3Ryb3kgPyB4LmRlc3Ryb3koKSA6IHguZGVsZXRlPy4oKSkpO1xuICAgICAgICB9IGVsc2UgaWYgKGltYWdlKSB7XG4gICAgICAgICAgaW1hZ2UuZGVzdHJveSA/IGltYWdlLmRlc3Ryb3koKSA6IGltYWdlLmRlbGV0ZT8uKCk7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICBwcm90ZWN0ZWQgZ2V0TW9kZWwobWVzaDogTWVzaCk6IE1vZGVsIHtcbiAgICBjb25zdCBkZXZpY2UgPSB0aGlzLmNvbnRleHQuZGV2aWNlIHx8IHRoaXMuY29udGV4dC5nbDtcblxuICAgIGNvbnN0IG1vZGVsID0gbmV3IE1vZGVsKFxuICAgICAgZGV2aWNlLFxuICAgICAgT2JqZWN0LmFzc2lnbih7fSwgdGhpcy5nZXRTaGFkZXJzKCksIHtcbiAgICAgICAgaWQ6IHRoaXMucHJvcHMuaWQsXG4gICAgICAgIGdlb21ldHJ5OiBnZXRHZW9tZXRyeShtZXNoIGFzIE1lc2hEYXRhIHwgR2VvbWV0cnkpLFxuICAgICAgICBpc0luc3RhbmNlZDogZmFsc2VcbiAgICAgIH0pXG4gICAgKTtcblxuICAgIHJldHVybiBtb2RlbDtcbiAgfVxufVxuXG5SYXN0ZXJNZXNoTGF5ZXIubGF5ZXJOYW1lID0gJ1Jhc3Rlck1lc2hMYXllcic7XG5SYXN0ZXJNZXNoTGF5ZXIuZGVmYXVsdFByb3BzID0gZGVmYXVsdFByb3BzO1xuIl0sIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7Ozs7Ozs7QUFJQSxJQUFBQSxXQUFBLEdBQUFDLE9BQUE7QUFDQSxJQUFBQyxPQUFBLEdBQUFELE9BQUE7QUFHQSxJQUFBRSx1QkFBQSxHQUFBRixPQUFBO0FBS0EsSUFBQUcsbUJBQUEsR0FBQUgsT0FBQTtBQUlBLElBQUFJLE9BQUEsR0FBQUosT0FBQTtBQUVBLElBQUFLLEtBQUEsR0FBQUwsT0FBQTtBQUNBLElBQUFNLHdCQUFBLEdBQUFOLE9BQUE7QUFDQSxJQUFBTyx5QkFBQSxHQUFBUCxPQUFBO0FBQ0EsSUFBQVEsVUFBQSxHQUFBUixPQUFBO0FBQThDLFNBQUFTLFdBQUFDLENBQUEsRUFBQUMsQ0FBQSxFQUFBQyxDQUFBLFdBQUFELENBQUEsT0FBQUUsZ0JBQUEsYUFBQUYsQ0FBQSxPQUFBRywyQkFBQSxhQUFBSixDQUFBLEVBQUFLLHlCQUFBLEtBQUFDLE9BQUEsQ0FBQUMsU0FBQSxDQUFBTixDQUFBLEVBQUFDLENBQUEsWUFBQUMsZ0JBQUEsYUFBQUgsQ0FBQSxFQUFBUSxXQUFBLElBQUFQLENBQUEsQ0FBQVEsS0FBQSxDQUFBVCxDQUFBLEVBQUFFLENBQUE7QUFBQSxTQUFBRywwQkFBQSxj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
@@ -0,0 +1,38 @@
1
+ export declare const RASTER_PROCESSING_FS: string;
2
+ export declare const rasterProcessingUniforms: {
3
+ name: string;
4
+ fs: string;
5
+ vs: string;
6
+ uniformTypes: {
7
+ linear_rescale_scaler: string;
8
+ linear_rescale_offset: string;
9
+ gamma_contrast_gamma1: string;
10
+ gamma_contrast_gamma2: string;
11
+ gamma_contrast_gamma3: string;
12
+ gamma_contrast_gamma4: string;
13
+ sigmoidalContrast_contrast: string;
14
+ sigmoidalContrast_bias: string;
15
+ colormap_hasCategoricalColors: string;
16
+ colormap_categoricalMinValue: string;
17
+ colormap_categoricalMaxValue: string;
18
+ colormap_maxPixelValue: string;
19
+ bandFilter_min1: string;
20
+ bandFilter_max1: string;
21
+ bandFilter_min2: string;
22
+ bandFilter_max2: string;
23
+ bandFilter_min3: string;
24
+ bandFilter_max3: string;
25
+ bandFilter_min4: string;
26
+ bandFilter_max4: string;
27
+ saturation_value: string;
28
+ reorder_bands_ordering: string;
29
+ mask_keepMin: string;
30
+ mask_keepMax: string;
31
+ pansharpen_brovey_panWeight: string;
32
+ };
33
+ };
34
+ /**
35
+ * Map from original module uniform names (as returned by getUniforms) to
36
+ * the prefixed names used in the shared UBO.
37
+ */
38
+ export declare const UNIFORM_NAME_MAP: Record<string, Record<string, string>>;
@@ -0,0 +1,124 @@
1
+ "use strict";
2
+
3
+ Object.defineProperty(exports, "__esModule", {
4
+ value: true
5
+ });
6
+ exports.rasterProcessingUniforms = exports.UNIFORM_NAME_MAP = exports.RASTER_PROCESSING_FS = void 0;
7
+ // SPDX-License-Identifier: MIT
8
+ // Copyright contributors to the kepler.gl project
9
+
10
+ /**
11
+ * Shared UBO for all raster processing module uniforms.
12
+ *
13
+ * WebGL2 guarantees only 12 fragment uniform blocks (GL_MAX_FRAGMENT_UNIFORM_BUFFERS).
14
+ * Without consolidation, the base layer already uses 8–9 blocks (project, picking,
15
+ * lighting, phongMaterial, floatColors, layer, shadow, simpleMesh/rasterMesh, raster),
16
+ * leaving only 3–4 for raster processing modules. Since a typical pipeline can use
17
+ * 5–9 raster modules (combineBands, mask, reorderBands, linearRescale, gammaContrast,
18
+ * sigmoidalContrast, colormap, filter, saturation), each declaring its own UBO block
19
+ * would exceed the limit.
20
+ *
21
+ * This module declares a single UBO that contains all possible raster processing
22
+ * uniforms. Individual modules' GLSL code still references the uniforms through
23
+ * the block instance name, and prepareLumaModules() rewires the declarations.
24
+ */
25
+
26
+ var RASTER_PROCESSING_UNIFORM_BLOCK = "uniform rasterProcessingUniforms {\n // linear_rescale\n float linear_rescale_scaler;\n float linear_rescale_offset;\n\n // gamma_contrast\n float gamma_contrast_gamma1;\n float gamma_contrast_gamma2;\n float gamma_contrast_gamma3;\n float gamma_contrast_gamma4;\n\n // sigmoidalContrast\n float sigmoidalContrast_contrast;\n float sigmoidalContrast_bias;\n\n // colormap\n int colormap_hasCategoricalColors;\n int colormap_categoricalMinValue;\n int colormap_categoricalMaxValue;\n int colormap_maxPixelValue;\n\n // bandFilter\n float bandFilter_min1;\n float bandFilter_max1;\n float bandFilter_min2;\n float bandFilter_max2;\n float bandFilter_min3;\n float bandFilter_max3;\n float bandFilter_min4;\n float bandFilter_max4;\n\n // saturation\n float saturation_value;\n\n // reorder_bands\n mat4 reorder_bands_ordering;\n\n // mask (shared by mask_image_float, mask_image_uint, mask_image_int)\n float mask_keepMin;\n float mask_keepMax;\n\n // pansharpen_brovey\n float pansharpen_brovey_panWeight;\n} rasterProcessing;\n";
27
+
28
+ /**
29
+ * GLSL #define aliases that let per-module code continue referencing uniforms
30
+ * through their original block instance names (e.g. `linear_rescale.scaler`).
31
+ */
32
+ var ALIAS_DEFINES = "#define linear_rescale_scaler_ALIAS rasterProcessing.linear_rescale_scaler\n#define linear_rescale_offset_ALIAS rasterProcessing.linear_rescale_offset\n#define gamma_contrast_gamma1_ALIAS rasterProcessing.gamma_contrast_gamma1\n#define gamma_contrast_gamma2_ALIAS rasterProcessing.gamma_contrast_gamma2\n#define gamma_contrast_gamma3_ALIAS rasterProcessing.gamma_contrast_gamma3\n#define gamma_contrast_gamma4_ALIAS rasterProcessing.gamma_contrast_gamma4\n#define sigmoidalContrast_contrast_ALIAS rasterProcessing.sigmoidalContrast_contrast\n#define sigmoidalContrast_bias_ALIAS rasterProcessing.sigmoidalContrast_bias\n#define colormap_hasCategoricalColors_ALIAS rasterProcessing.colormap_hasCategoricalColors\n#define colormap_categoricalMinValue_ALIAS rasterProcessing.colormap_categoricalMinValue\n#define colormap_categoricalMaxValue_ALIAS rasterProcessing.colormap_categoricalMaxValue\n#define colormap_maxPixelValue_ALIAS rasterProcessing.colormap_maxPixelValue\n#define bandFilter_min1_ALIAS rasterProcessing.bandFilter_min1\n#define bandFilter_max1_ALIAS rasterProcessing.bandFilter_max1\n#define bandFilter_min2_ALIAS rasterProcessing.bandFilter_min2\n#define bandFilter_max2_ALIAS rasterProcessing.bandFilter_max2\n#define bandFilter_min3_ALIAS rasterProcessing.bandFilter_min3\n#define bandFilter_max3_ALIAS rasterProcessing.bandFilter_max3\n#define bandFilter_min4_ALIAS rasterProcessing.bandFilter_min4\n#define bandFilter_max4_ALIAS rasterProcessing.bandFilter_max4\n#define saturation_value_ALIAS rasterProcessing.saturation_value\n#define reorder_bands_ordering_ALIAS rasterProcessing.reorder_bands_ordering\n#define mask_keepMin_ALIAS rasterProcessing.mask_keepMin\n#define mask_keepMax_ALIAS rasterProcessing.mask_keepMax\n#define pansharpen_brovey_panWeight_ALIAS rasterProcessing.pansharpen_brovey_panWeight\n";
33
+ var RASTER_PROCESSING_FS = exports.RASTER_PROCESSING_FS = RASTER_PROCESSING_UNIFORM_BLOCK + ALIAS_DEFINES;
34
+ var rasterProcessingUniforms = exports.rasterProcessingUniforms = {
35
+ name: 'rasterProcessing',
36
+ fs: RASTER_PROCESSING_FS,
37
+ vs: '',
38
+ uniformTypes: {
39
+ linear_rescale_scaler: 'f32',
40
+ linear_rescale_offset: 'f32',
41
+ gamma_contrast_gamma1: 'f32',
42
+ gamma_contrast_gamma2: 'f32',
43
+ gamma_contrast_gamma3: 'f32',
44
+ gamma_contrast_gamma4: 'f32',
45
+ sigmoidalContrast_contrast: 'f32',
46
+ sigmoidalContrast_bias: 'f32',
47
+ colormap_hasCategoricalColors: 'i32',
48
+ colormap_categoricalMinValue: 'i32',
49
+ colormap_categoricalMaxValue: 'i32',
50
+ colormap_maxPixelValue: 'i32',
51
+ bandFilter_min1: 'f32',
52
+ bandFilter_max1: 'f32',
53
+ bandFilter_min2: 'f32',
54
+ bandFilter_max2: 'f32',
55
+ bandFilter_min3: 'f32',
56
+ bandFilter_max3: 'f32',
57
+ bandFilter_min4: 'f32',
58
+ bandFilter_max4: 'f32',
59
+ saturation_value: 'f32',
60
+ reorder_bands_ordering: 'mat4x4<f32>',
61
+ mask_keepMin: 'f32',
62
+ mask_keepMax: 'f32',
63
+ pansharpen_brovey_panWeight: 'f32'
64
+ }
65
+ };
66
+
67
+ /**
68
+ * Map from original module uniform names (as returned by getUniforms) to
69
+ * the prefixed names used in the shared UBO.
70
+ */
71
+ var UNIFORM_NAME_MAP = exports.UNIFORM_NAME_MAP = {
72
+ linear_rescale: {
73
+ scaler: 'linear_rescale_scaler',
74
+ offset: 'linear_rescale_offset'
75
+ },
76
+ gamma_contrast: {
77
+ gamma1: 'gamma_contrast_gamma1',
78
+ gamma2: 'gamma_contrast_gamma2',
79
+ gamma3: 'gamma_contrast_gamma3',
80
+ gamma4: 'gamma_contrast_gamma4'
81
+ },
82
+ sigmoidalContrast: {
83
+ contrast: 'sigmoidalContrast_contrast',
84
+ bias: 'sigmoidalContrast_bias'
85
+ },
86
+ colormap: {
87
+ hasCategoricalColors: 'colormap_hasCategoricalColors',
88
+ categoricalMinValue: 'colormap_categoricalMinValue',
89
+ categoricalMaxValue: 'colormap_categoricalMaxValue',
90
+ maxPixelValue: 'colormap_maxPixelValue'
91
+ },
92
+ bandFilter: {
93
+ min1: 'bandFilter_min1',
94
+ max1: 'bandFilter_max1',
95
+ min2: 'bandFilter_min2',
96
+ max2: 'bandFilter_max2',
97
+ min3: 'bandFilter_min3',
98
+ max3: 'bandFilter_max3',
99
+ min4: 'bandFilter_min4',
100
+ max4: 'bandFilter_max4'
101
+ },
102
+ saturation: {
103
+ value: 'saturation_value'
104
+ },
105
+ reorder_bands: {
106
+ ordering: 'reorder_bands_ordering'
107
+ },
108
+ mask_image_float: {
109
+ keepMin: 'mask_keepMin',
110
+ keepMax: 'mask_keepMax'
111
+ },
112
+ mask_image_uint: {
113
+ keepMin: 'mask_keepMin',
114
+ keepMax: 'mask_keepMax'
115
+ },
116
+ mask_image_int: {
117
+ keepMin: 'mask_keepMin',
118
+ keepMax: 'mask_keepMax'
119
+ },
120
+ pansharpen_brovey: {
121
+ panWeight: 'pansharpen_brovey_panWeight'
122
+ }
123
+ };
124
+ //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJSQVNURVJfUFJPQ0VTU0lOR19VTklGT1JNX0JMT0NLIiwiQUxJQVNfREVGSU5FUyIsIlJBU1RFUl9QUk9DRVNTSU5HX0ZTIiwiZXhwb3J0cyIsInJhc3RlclByb2Nlc3NpbmdVbmlmb3JtcyIsIm5hbWUiLCJmcyIsInZzIiwidW5pZm9ybVR5cGVzIiwibGluZWFyX3Jlc2NhbGVfc2NhbGVyIiwibGluZWFyX3Jlc2NhbGVfb2Zmc2V0IiwiZ2FtbWFfY29udHJhc3RfZ2FtbWExIiwiZ2FtbWFfY29udHJhc3RfZ2FtbWEyIiwiZ2FtbWFfY29udHJhc3RfZ2FtbWEzIiwiZ2FtbWFfY29udHJhc3RfZ2FtbWE0Iiwic2lnbW9pZGFsQ29udHJhc3RfY29udHJhc3QiLCJzaWdtb2lkYWxDb250cmFzdF9iaWFzIiwiY29sb3JtYXBfaGFzQ2F0ZWdvcmljYWxDb2xvcnMiLCJjb2xvcm1hcF9jYXRlZ29yaWNhbE1pblZhbHVlIiwiY29sb3JtYXBfY2F0ZWdvcmljYWxNYXhWYWx1ZSIsImNvbG9ybWFwX21heFBpeGVsVmFsdWUiLCJiYW5kRmlsdGVyX21pbjEiLCJiYW5kRmlsdGVyX21heDEiLCJiYW5kRmlsdGVyX21pbjIiLCJiYW5kRmlsdGVyX21heDIiLCJiYW5kRmlsdGVyX21pbjMiLCJiYW5kRmlsdGVyX21heDMiLCJiYW5kRmlsdGVyX21pbjQiLCJiYW5kRmlsdGVyX21heDQiLCJzYXR1cmF0aW9uX3ZhbHVlIiwicmVvcmRlcl9iYW5kc19vcmRlcmluZyIsIm1hc2tfa2VlcE1pbiIsIm1hc2tfa2VlcE1heCIsInBhbnNoYXJwZW5fYnJvdmV5X3BhbldlaWdodCIsIlVOSUZPUk1fTkFNRV9NQVAiLCJsaW5lYXJfcmVzY2FsZSIsInNjYWxlciIsIm9mZnNldCIsImdhbW1hX2NvbnRyYXN0IiwiZ2FtbWExIiwiZ2FtbWEyIiwiZ2FtbWEzIiwiZ2FtbWE0Iiwic2lnbW9pZGFsQ29udHJhc3QiLCJjb250cmFzdCIsImJpYXMiLCJjb2xvcm1hcCIsImhhc0NhdGVnb3JpY2FsQ29sb3JzIiwiY2F0ZWdvcmljYWxNaW5WYWx1ZSIsImNhdGVnb3JpY2FsTWF4VmFsdWUiLCJtYXhQaXhlbFZhbHVlIiwiYmFuZEZpbHRlciIsIm1pbjEiLCJtYXgxIiwibWluMiIsIm1heDIiLCJtaW4zIiwibWF4MyIsIm1pbjQiLCJtYXg0Iiwic2F0dXJhdGlvbiIsInZhbHVlIiwicmVvcmRlcl9iYW5kcyIsIm9yZGVyaW5nIiwibWFza19pbWFnZV9mbG9hdCIsImtlZXBNaW4iLCJrZWVwTWF4IiwibWFza19pbWFnZV91aW50IiwibWFza19pbWFnZV9pbnQiLCJwYW5zaGFycGVuX2Jyb3ZleSIsInBhbldlaWdodCJdLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9yYXN0ZXIvcmFzdGVyLXByb2Nlc3NpbmctdW5pZm9ybXMudHMiXSwic291cmNlc0NvbnRlbnQiOlsiLy8gU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IE1JVFxuLy8gQ29weXJpZ2h0IGNvbnRyaWJ1dG9ycyB0byB0aGUga2VwbGVyLmdsIHByb2plY3RcblxuLyoqXG4gKiBTaGFyZWQgVUJPIGZvciBhbGwgcmFzdGVyIHByb2Nlc3NpbmcgbW9kdWxlIHVuaWZvcm1zLlxuICpcbiAqIFdlYkdMMiBndWFyYW50ZWVzIG9ubHkgMTIgZnJhZ21lbnQgdW5pZm9ybSBibG9ja3MgKEdMX01BWF9GUkFHTUVOVF9VTklGT1JNX0JVRkZFUlMpLlxuICogV2l0aG91dCBjb25zb2xpZGF0aW9uLCB0aGUgYmFzZSBsYXllciBhbHJlYWR5IHVzZXMgOOKAkzkgYmxvY2tzIChwcm9qZWN0LCBwaWNraW5nLFxuICogbGlnaHRpbmcsIHBob25nTWF0ZXJpYWwsIGZsb2F0Q29sb3JzLCBsYXllciwgc2hhZG93LCBzaW1wbGVNZXNoL3Jhc3Rlck1lc2gsIHJhc3RlciksXG4gKiBsZWF2aW5nIG9ubHkgM+KAkzQgZm9yIHJhc3RlciBwcm9jZXNzaW5nIG1vZHVsZXMuIFNpbmNlIGEgdHlwaWNhbCBwaXBlbGluZSBjYW4gdXNlXG4gKiA14oCTOSByYXN0ZXIgbW9kdWxlcyAoY29tYmluZUJhbmRzLCBtYXNrLCByZW9yZGVyQmFuZHMsIGxpbmVhclJlc2NhbGUsIGdhbW1hQ29udHJhc3QsXG4gKiBzaWdtb2lkYWxDb250cmFzdCwgY29sb3JtYXAsIGZpbHRlciwgc2F0dXJhdGlvbiksIGVhY2ggZGVjbGFyaW5nIGl0cyBvd24gVUJPIGJsb2NrXG4gKiB3b3VsZCBleGNlZWQgdGhlIGxpbWl0LlxuICpcbiAqIFRoaXMgbW9kdWxlIGRlY2xhcmVzIGEgc2luZ2xlIFVCTyB0aGF0IGNvbnRhaW5zIGFsbCBwb3NzaWJsZSByYXN0ZXIgcHJvY2Vzc2luZ1xuICogdW5pZm9ybXMuIEluZGl2aWR1YWwgbW9kdWxlcycgR0xTTCBjb2RlIHN0aWxsIHJlZmVyZW5jZXMgdGhlIHVuaWZvcm1zIHRocm91Z2hcbiAqIHRoZSBibG9jayBpbnN0YW5jZSBuYW1lLCBhbmQgcHJlcGFyZUx1bWFNb2R1bGVzKCkgcmV3aXJlcyB0aGUgZGVjbGFyYXRpb25zLlxuICovXG5cbmNvbnN0IFJBU1RFUl9QUk9DRVNTSU5HX1VOSUZPUk1fQkxPQ0sgPSBgXFxcbnVuaWZvcm0gcmFzdGVyUHJvY2Vzc2luZ1VuaWZvcm1zIHtcbiAgLy8gbGluZWFyX3Jlc2NhbGVcbiAgZmxvYXQgbGluZWFyX3Jlc2NhbGVfc2NhbGVyO1xuICBmbG9hdCBsaW5lYXJfcmVzY2FsZV9vZmZzZXQ7XG5cbiAgLy8gZ2FtbWFfY29udHJhc3RcbiAgZmxvYXQgZ2FtbWFfY29udHJhc3RfZ2FtbWExO1xuICBmbG9hdCBnYW1tYV9jb250cmFzdF9nYW1tYTI7XG4gIGZsb2F0IGdhbW1hX2NvbnRyYXN0X2dhbW1hMztcbiAgZmxvYXQgZ2FtbWFfY29udHJhc3RfZ2FtbWE0O1xuXG4gIC8vIHNpZ21vaWRhbENvbnRyYXN0XG4gIGZsb2F0IHNpZ21vaWRhbENvbnRyYXN0X2NvbnRyYXN0O1xuICBmbG9hdCBzaWdtb2lkYWxDb250cmFzdF9iaWFzO1xuXG4gIC8vIGNvbG9ybWFwXG4gIGludCBjb2xvcm1hcF9oYXNDYXRlZ29yaWNhbENvbG9ycztcbiAgaW50IGNvbG9ybWFwX2NhdGVnb3JpY2FsTWluVmFsdWU7XG4gIGludCBjb2xvcm1hcF9jYXRlZ29yaWNhbE1heFZhbHVlO1xuICBpbnQgY29sb3JtYXBfbWF4UGl4ZWxWYWx1ZTtcblxuICAvLyBiYW5kRmlsdGVyXG4gIGZsb2F0IGJhbmRGaWx0ZXJfbWluMTtcbiAgZmxvYXQgYmFuZEZpbHRlcl9tYXgxO1xuICBmbG9hdCBiYW5kRmlsdGVyX21pbjI7XG4gIGZsb2F0IGJhbmRGaWx0ZXJfbWF4MjtcbiAgZmxvYXQgYmFuZEZpbHRlcl9taW4zO1xuICBmbG9hdCBiYW5kRmlsdGVyX21heDM7XG4gIGZsb2F0IGJhbmRGaWx0ZXJfbWluNDtcbiAgZmxvYXQgYmFuZEZpbHRlcl9tYXg0O1xuXG4gIC8vIHNhdHVyYXRpb25cbiAgZmxvYXQgc2F0dXJhdGlvbl92YWx1ZTtcblxuICAvLyByZW9yZGVyX2JhbmRzXG4gIG1hdDQgcmVvcmRlcl9iYW5kc19vcmRlcmluZztcblxuICAvLyBtYXNrIChzaGFyZWQgYnkgbWFza19pbWFnZV9mbG9hdCwgbWFza19pbWFnZV91aW50LCBtYXNrX2ltYWdlX2ludClcbiAgZmxvYXQgbWFza19rZWVwTWluO1xuICBmbG9hdCBtYXNrX2tlZXBNYXg7XG5cbiAgLy8gcGFuc2hhcnBlbl9icm92ZXlcbiAgZmxvYXQgcGFuc2hhcnBlbl9icm92ZXlfcGFuV2VpZ2h0O1xufSByYXN0ZXJQcm9jZXNzaW5nO1xuYDtcblxuLyoqXG4gKiBHTFNMICNkZWZpbmUgYWxpYXNlcyB0aGF0IGxldCBwZXItbW9kdWxlIGNvZGUgY29udGludWUgcmVmZXJlbmNpbmcgdW5pZm9ybXNcbiAqIHRocm91Z2ggdGhlaXIgb3JpZ2luYWwgYmxvY2sgaW5zdGFuY2UgbmFtZXMgKGUuZy4gYGxpbmVhcl9yZXNjYWxlLnNjYWxlcmApLlxuICovXG5jb25zdCBBTElBU19ERUZJTkVTID0gYFxcXG4jZGVmaW5lIGxpbmVhcl9yZXNjYWxlX3NjYWxlcl9BTElBUyByYXN0ZXJQcm9jZXNzaW5nLmxpbmVhcl9yZXNjYWxlX3NjYWxlclxuI2RlZmluZSBsaW5lYXJfcmVzY2FsZV9vZmZzZXRfQUxJQVMgcmFzdGVyUHJvY2Vzc2luZy5saW5lYXJfcmVzY2FsZV9vZmZzZXRcbiNkZWZpbmUgZ2FtbWFfY29udHJhc3RfZ2FtbWExX0FMSUFTIHJhc3RlclByb2Nlc3NpbmcuZ2FtbWFfY29udHJhc3RfZ2FtbWExXG4jZGVmaW5lIGdhbW1hX2NvbnRyYXN0X2dhbW1hMl9BTElBUyByYXN0ZXJQcm9jZXNzaW5nLmdhbW1hX2NvbnRyYXN0X2dhbW1hMlxuI2RlZmluZSBnYW1tYV9jb250cmFzdF9nYW1tYTNfQUxJQVMgcmFzdGVyUHJvY2Vzc2luZy5nYW1tYV9jb250cmFzdF9nYW1tYTNcbiNkZWZpbmUgZ2FtbWFfY29udHJhc3RfZ2FtbWE0X0FMSUFTIHJhc3RlclByb2Nlc3NpbmcuZ2FtbWFfY29udHJhc3RfZ2FtbWE0XG4jZGVmaW5lIHNpZ21vaWRhbENvbnRyYXN0X2NvbnRyYXN0X0FMSUFTIHJhc3RlclByb2Nlc3Npbmcuc2lnbW9pZGFsQ29udHJhc3RfY29udHJhc3RcbiNkZWZpbmUgc2lnbW9pZGFsQ29udHJhc3RfYmlhc19BTElBUyByYXN0ZXJQcm9jZXNzaW5nLnNpZ21vaWRhbENvbnRyYXN0X2JpYXNcbiNkZWZpbmUgY29sb3JtYXBfaGFzQ2F0ZWdvcmljYWxDb2xvcnNfQUxJQVMgcmFzdGVyUHJvY2Vzc2luZy5jb2xvcm1hcF9oYXNDYXRlZ29yaWNhbENvbG9yc1xuI2RlZmluZSBjb2xvcm1hcF9jYXRlZ29yaWNhbE1pblZhbHVlX0FMSUFTIHJhc3RlclByb2Nlc3NpbmcuY29sb3JtYXBfY2F0ZWdvcmljYWxNaW5WYWx1ZVxuI2RlZmluZSBjb2xvcm1hcF9jYXRlZ29yaWNhbE1heFZhbHVlX0FMSUFTIHJhc3RlclByb2Nlc3NpbmcuY29sb3JtYXBfY2F0ZWdvcmljYWxNYXhWYWx1ZVxuI2RlZmluZSBjb2xvcm1hcF9tYXhQaXhlbFZhbHVlX0FMSUFTIHJhc3RlclByb2Nlc3NpbmcuY29sb3JtYXBfbWF4UGl4ZWxWYWx1ZVxuI2RlZmluZSBiYW5kRmlsdGVyX21pbjFfQUxJQVMgcmFzdGVyUHJvY2Vzc2luZy5iYW5kRmlsdGVyX21pbjFcbiNkZWZpbmUgYmFuZEZpbHRlcl9tYXgxX0FMSUFTIHJhc3RlclByb2Nlc3NpbmcuYmFuZEZpbHRlcl9tYXgxXG4jZGVmaW5lIGJhbmRGaWx0ZXJfbWluMl9BTElBUyByYXN0ZXJQcm9jZXNzaW5nLmJhbmRGaWx0ZXJfbWluMlxuI2RlZmluZSBiYW5kRmlsdGVyX21heDJfQUxJQVMgcmFzdGVyUHJvY2Vzc2luZy5iYW5kRmlsdGVyX21heDJcbiNkZWZpbmUgYmFuZEZpbHRlcl9taW4zX0FMSUFTIHJhc3RlclByb2Nlc3NpbmcuYmFuZEZpbHRlcl9taW4zXG4jZGVmaW5lIGJhbmRGaWx0ZXJfbWF4M19BTElBUyByYXN0ZXJQcm9jZXNzaW5nLmJhbmRGaWx0ZXJfbWF4M1xuI2RlZmluZSBiYW5kRmlsdGVyX21pbjRfQUxJQVMgcmFzdGVyUHJvY2Vzc2luZy5iYW5kRmlsdGVyX21pbjRcbiNkZWZpbmUgYmFuZEZpbHRlcl9tYXg0X0FMSUFTIHJhc3RlclByb2Nlc3NpbmcuYmFuZEZpbHRlcl9tYXg0XG4jZGVmaW5lIHNhdHVyYXRpb25fdmFsdWVfQUxJQVMgcmFzdGVyUHJvY2Vzc2luZy5zYXR1cmF0aW9uX3ZhbHVlXG4jZGVmaW5lIHJlb3JkZXJfYmFuZHNfb3JkZXJpbmdfQUxJQVMgcmFzdGVyUHJvY2Vzc2luZy5yZW9yZGVyX2JhbmRzX29yZGVyaW5nXG4jZGVmaW5lIG1hc2tfa2VlcE1pbl9BTElBUyByYXN0ZXJQcm9jZXNzaW5nLm1hc2tfa2VlcE1pblxuI2RlZmluZSBtYXNrX2tlZXBNYXhfQUxJQVMgcmFzdGVyUHJvY2Vzc2luZy5tYXNrX2tlZXBNYXhcbiNkZWZpbmUgcGFuc2hhcnBlbl9icm92ZXlfcGFuV2VpZ2h0X0FMSUFTIHJhc3RlclByb2Nlc3NpbmcucGFuc2hhcnBlbl9icm92ZXlfcGFuV2VpZ2h0XG5gO1xuXG5leHBvcnQgY29uc3QgUkFTVEVSX1BST0NFU1NJTkdfRlMgPSBSQVNURVJfUFJPQ0VTU0lOR19VTklGT1JNX0JMT0NLICsgQUxJQVNfREVGSU5FUztcblxuZXhwb3J0IGNvbnN0IHJhc3RlclByb2Nlc3NpbmdVbmlmb3JtcyA9IHtcbiAgbmFtZTogJ3Jhc3RlclByb2Nlc3NpbmcnLFxuICBmczogUkFTVEVSX1BST0NFU1NJTkdfRlMsXG4gIHZzOiAnJyxcbiAgdW5pZm9ybVR5cGVzOiB7XG4gICAgbGluZWFyX3Jlc2NhbGVfc2NhbGVyOiAnZjMyJyxcbiAgICBsaW5lYXJfcmVzY2FsZV9vZmZzZXQ6ICdmMzInLFxuICAgIGdhbW1hX2NvbnRyYXN0X2dhbW1hMTogJ2YzMicsXG4gICAgZ2FtbWFfY29udHJhc3RfZ2FtbWEyOiAnZjMyJyxcbiAgICBnYW1tYV9jb250cmFzdF9nYW1tYTM6ICdmMzInLFxuICAgIGdhbW1hX2NvbnRyYXN0X2dhbW1hNDogJ2YzMicsXG4gICAgc2lnbW9pZGFsQ29udHJhc3RfY29udHJhc3Q6ICdmMzInLFxuICAgIHNpZ21vaWRhbENvbnRyYXN0X2JpYXM6ICdmMzInLFxuICAgIGNvbG9ybWFwX2hhc0NhdGVnb3JpY2FsQ29sb3JzOiAnaTMyJyxcbiAgICBjb2xvcm1hcF9jYXRlZ29yaWNhbE1pblZhbHVlOiAnaTMyJyxcbiAgICBjb2xvcm1hcF9jYXRlZ29yaWNhbE1heFZhbHVlOiAnaTMyJyxcbiAgICBjb2xvcm1hcF9tYXhQaXhlbFZhbHVlOiAnaTMyJyxcbiAgICBiYW5kRmlsdGVyX21pbjE6ICdmMzInLFxuICAgIGJhbmRGaWx0ZXJfbWF4MTogJ2YzMicsXG4gICAgYmFuZEZpbHRlcl9taW4yOiAnZjMyJyxcbiAgICBiYW5kRmlsdGVyX21heDI6ICdmMzInLFxuICAgIGJhbmRGaWx0ZXJfbWluMzogJ2YzMicsXG4gICAgYmFuZEZpbHRlcl9tYXgzOiAnZjMyJyxcbiAgICBiYW5kRmlsdGVyX21pbjQ6ICdmMzInLFxuICAgIGJhbmRGaWx0ZXJfbWF4NDogJ2YzMicsXG4gICAgc2F0dXJhdGlvbl92YWx1ZTogJ2YzMicsXG4gICAgcmVvcmRlcl9iYW5kc19vcmRlcmluZzogJ21hdDR4NDxmMzI+JyxcbiAgICBtYXNrX2tlZXBNaW46ICdmMzInLFxuICAgIG1hc2tfa2VlcE1heDogJ2YzMicsXG4gICAgcGFuc2hhcnBlbl9icm92ZXlfcGFuV2VpZ2h0OiAnZjMyJ1xuICB9XG59O1xuXG4vKipcbiAqIE1hcCBmcm9tIG9yaWdpbmFsIG1vZHVsZSB1bmlmb3JtIG5hbWVzIChhcyByZXR1cm5lZCBieSBnZXRVbmlmb3JtcykgdG9cbiAqIHRoZSBwcmVmaXhlZCBuYW1lcyB1c2VkIGluIHRoZSBzaGFyZWQgVUJPLlxuICovXG5leHBvcnQgY29uc3QgVU5JRk9STV9OQU1FX01BUDogUmVjb3JkPHN0cmluZywgUmVjb3JkPHN0cmluZywgc3RyaW5nPj4gPSB7XG4gIGxpbmVhcl9yZXNjYWxlOiB7XG4gICAgc2NhbGVyOiAnbGluZWFyX3Jlc2NhbGVfc2NhbGVyJyxcbiAgICBvZmZzZXQ6ICdsaW5lYXJfcmVzY2FsZV9vZmZzZXQnXG4gIH0sXG4gIGdhbW1hX2NvbnRyYXN0OiB7XG4gICAgZ2FtbWExOiAnZ2FtbWFfY29udHJhc3RfZ2FtbWExJyxcbiAgICBnYW1tYTI6ICdnYW1tYV9jb250cmFzdF9nYW1tYTInLFxuICAgIGdhbW1hMzogJ2dhbW1hX2NvbnRyYXN0X2dhbW1hMycsXG4gICAgZ2FtbWE0OiAnZ2FtbWFfY29udHJhc3RfZ2FtbWE0J1xuICB9LFxuICBzaWdtb2lkYWxDb250cmFzdDoge1xuICAgIGNvbnRyYXN0OiAnc2lnbW9pZGFsQ29udHJhc3RfY29udHJhc3QnLFxuICAgIGJpYXM6ICdzaWdtb2lkYWxDb250cmFzdF9iaWFzJ1xuICB9LFxuICBjb2xvcm1hcDoge1xuICAgIGhhc0NhdGVnb3JpY2FsQ29sb3JzOiAnY29sb3JtYXBfaGFzQ2F0ZWdvcmljYWxDb2xvcnMnLFxuICAgIGNhdGVnb3JpY2FsTWluVmFsdWU6ICdjb2xvcm1hcF9jYXRlZ29yaWNhbE1pblZhbHVlJyxcbiAgICBjYXRlZ29yaWNhbE1heFZhbHVlOiAnY29sb3JtYXBfY2F0ZWdvcmljYWxNYXhWYWx1ZScsXG4gICAgbWF4UGl4ZWxWYWx1ZTogJ2NvbG9ybWFwX21heFBpeGVsVmFsdWUnXG4gIH0sXG4gIGJhbmRGaWx0ZXI6IHtcbiAgICBtaW4xOiAnYmFuZEZpbHRlcl9taW4xJyxcbiAgICBtYXgxOiAnYmFuZEZpbHRlcl9tYXgxJyxcbiAgICBtaW4yOiAnYmFuZEZpbHRlcl9taW4yJyxcbiAgICBtYXgyOiAnYmFuZEZpbHRlcl9tYXgyJyxcbiAgICBtaW4zOiAnYmFuZEZpbHRlcl9taW4zJyxcbiAgICBtYXgzOiAnYmFuZEZpbHRlcl9tYXgzJyxcbiAgICBtaW40OiAnYmFuZEZpbHRlcl9taW40JyxcbiAgICBtYXg0OiAnYmFuZEZpbHRlcl9tYXg0J1xuICB9LFxuICBzYXR1cmF0aW9uOiB7XG4gICAgdmFsdWU6ICdzYXR1cmF0aW9uX3ZhbHVlJ1xuICB9LFxuICByZW9yZGVyX2JhbmRzOiB7XG4gICAgb3JkZXJpbmc6ICdyZW9yZGVyX2JhbmRzX29yZGVyaW5nJ1xuICB9LFxuICBtYXNrX2ltYWdlX2Zsb2F0OiB7XG4gICAga2VlcE1pbjogJ21hc2tfa2VlcE1pbicsXG4gICAga2VlcE1heDogJ21hc2tfa2VlcE1heCdcbiAgfSxcbiAgbWFza19pbWFnZV91aW50OiB7XG4gICAga2VlcE1pbjogJ21hc2tfa2VlcE1pbicsXG4gICAga2VlcE1heDogJ21hc2tfa2VlcE1heCdcbiAgfSxcbiAgbWFza19pbWFnZV9pbnQ6IHtcbiAgICBrZWVwTWluOiAnbWFza19rZWVwTWluJyxcbiAgICBrZWVwTWF4OiAnbWFza19rZWVwTWF4J1xuICB9LFxuICBwYW5zaGFycGVuX2Jyb3ZleToge1xuICAgIHBhbldlaWdodDogJ3BhbnNoYXJwZW5fYnJvdmV5X3BhbldlaWdodCdcbiAgfVxufTtcbiJdLCJtYXBwaW5ncyI6Ijs7Ozs7O0FBQUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7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
@@ -1,17 +1,17 @@
1
- /// <reference types="luma.gl__webgl" />
2
- import type { Texture2DProps, Texture2D } from '@luma.gl/webgl';
1
+ import type { Texture } from '@luma.gl/core';
3
2
  import type { ShaderModule } from './webgl';
4
- /** Allowed input for images prop
5
- * Texture2D is already on the GPU, while Texture2DProps can be data on the CPU that is not yet copied to the GPU.
3
+ /** Allowed input for images prop — either GPU-resident Texture objects or
4
+ * legacy raster texture descriptors with CPU data that will be uploaded.
6
5
  */
7
- export declare type ImageInput = Record<string, Texture2DProps | Texture2D | (Texture2DProps | Texture2D)[]>;
6
+ export type ImageInput = Record<string, Texture | Texture[] | Record<string, unknown> | Record<string, unknown>[]>;
8
7
  /** Internal storage of images
9
- * The Texture2D object references data on the GPU
8
+ * The Texture object references data on the GPU
10
9
  */
11
- export declare type ImageState = Record<string, Texture2D | Texture2D[]>;
10
+ export type ImageState = Record<string, Texture | Texture[]>;
12
11
  /** Properties added by RasterLayer. */
13
- export declare type RasterLayerAddedProps = {
12
+ export type RasterLayerAddedProps = {
14
13
  modules: ShaderModule[];
15
14
  images: ImageInput;
16
15
  moduleProps: Record<string, number>;
16
+ onRedrawNeeded?: (() => void) | null;
17
17
  };