@kepler.gl/deckgl-layers 3.3.0-alpha.3 → 3.3.0-alpha.5

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 (38) hide show
  1. package/dist/cluster-layer/cluster-layer.js +2 -3
  2. package/dist/column-layer/enhanced-column-layer.js +30 -5
  3. package/dist/globe/atmosphere-layer.d.ts +37 -0
  4. package/dist/globe/atmosphere-layer.js +220 -0
  5. package/dist/globe/enhanced-multi-icon-layer.d.ts +6 -0
  6. package/dist/globe/enhanced-multi-icon-layer.js +63 -0
  7. package/dist/globe/globe-depth-disk-layer.d.ts +19 -0
  8. package/dist/globe/globe-depth-disk-layer.js +145 -0
  9. package/dist/globe/globe-layers.d.ts +108 -0
  10. package/dist/globe/globe-layers.js +569 -0
  11. package/dist/globe/globe-stars-layer.d.ts +5 -0
  12. package/dist/globe/globe-stars-layer.js +69 -0
  13. package/dist/globe/globe-view.d.ts +23 -0
  14. package/dist/globe/globe-view.js +404 -0
  15. package/dist/globe/index.d.ts +8 -0
  16. package/dist/globe/index.js +122 -0
  17. package/dist/globe/mvt-label-layer.d.ts +7928 -0
  18. package/dist/globe/mvt-label-layer.js +190 -0
  19. package/dist/grid-layer/enhanced-cpu-grid-layer.d.ts +53 -49
  20. package/dist/grid-layer/enhanced-cpu-grid-layer.js +28 -2
  21. package/dist/hexagon-layer/enhanced-hexagon-layer.d.ts +53 -49
  22. package/dist/hexagon-layer/enhanced-hexagon-layer.js +28 -2
  23. package/dist/index.d.ts +1 -0
  24. package/dist/index.js +14 -3
  25. package/dist/layer-utils/globe-cell-utils.d.ts +30 -0
  26. package/dist/layer-utils/globe-cell-utils.js +173 -0
  27. package/dist/line-layer/line-layer.js +2 -2
  28. package/dist/raster/images.d.ts +10 -1
  29. package/dist/raster/images.js +18 -6
  30. package/dist/raster/raster-layer/raster-layer.d.ts +4 -0
  31. package/dist/raster/raster-layer/raster-layer.js +59 -9
  32. package/dist/raster/raster-mesh-layer/raster-mesh-layer.d.ts +4 -0
  33. package/dist/raster/raster-mesh-layer/raster-mesh-layer.js +59 -9
  34. package/dist/svg-icon-layer/scatterplot-icon-layer.d.ts +4 -1
  35. package/dist/svg-icon-layer/scatterplot-icon-layer.js +52 -15
  36. package/dist/wms/wms-layer.d.ts +19 -0
  37. package/dist/wms/wms-layer.js +193 -23
  38. package/package.json +8 -7
@@ -0,0 +1,220 @@
1
+ "use strict";
2
+
3
+ var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault");
4
+ Object.defineProperty(exports, "__esModule", {
5
+ value: true
6
+ });
7
+ exports.AtmosphereSkyLayerRealistic = exports.AtmosphereLayerRealistic = void 0;
8
+ exports.atmosphereZoomFade = atmosphereZoomFade;
9
+ exports.getGlobeAtmosphereSkyLayer = exports.getGlobeAtmosphereLayer = void 0;
10
+ var _classCallCheck2 = _interopRequireDefault(require("@babel/runtime/helpers/classCallCheck"));
11
+ var _createClass2 = _interopRequireDefault(require("@babel/runtime/helpers/createClass"));
12
+ var _possibleConstructorReturn2 = _interopRequireDefault(require("@babel/runtime/helpers/possibleConstructorReturn"));
13
+ var _getPrototypeOf2 = _interopRequireDefault(require("@babel/runtime/helpers/getPrototypeOf"));
14
+ var _get2 = _interopRequireDefault(require("@babel/runtime/helpers/get"));
15
+ var _inherits2 = _interopRequireDefault(require("@babel/runtime/helpers/inherits"));
16
+ var _defineProperty2 = _interopRequireDefault(require("@babel/runtime/helpers/defineProperty"));
17
+ var _core = require("@deck.gl/core");
18
+ var _meshLayers = require("@deck.gl/mesh-layers");
19
+ var _engine = require("@luma.gl/engine");
20
+ var _core2 = require("@math.gl/core");
21
+ var _sun = require("@math.gl/sun");
22
+ 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; }
23
+ 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; }
24
+ 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)); }
25
+ function _isNativeReflectConstruct() { try { var t = !Boolean.prototype.valueOf.call(Reflect.construct(Boolean, [], function () {})); } catch (t) {} return (_isNativeReflectConstruct = function _isNativeReflectConstruct() { return !!t; })(); }
26
+ function _superPropGet(t, o, e, r) { var p = (0, _get2["default"])((0, _getPrototypeOf2["default"])(1 & r ? t.prototype : t), o, e); return 2 & r && "function" == typeof p ? function (t) { return p.apply(e, t); } : p; } // SPDX-License-Identifier: MIT
27
+ // Copyright contributors to the kepler.gl project
28
+ // Shaders ported from iTowns, based on Sean O'Neil's approach in GPU Gems 2
29
+ // SEE: https://github.com/iTowns/itowns/blob/master/src/Core/Prefab/Globe/Atmosphere.js
30
+ // SEE: https://developer.nvidia.com/gpugems/gpugems2/part-ii-shading-lighting-and-shadows/chapter-16-accurate-atmospheric-scattering
31
+ var toRadians = function toRadians(degrees) {
32
+ return degrees * Math.PI / 180;
33
+ };
34
+ var angleToVec = function angleToVec(angle) {
35
+ return [Math.sin(angle), Math.cos(angle), 0];
36
+ };
37
+ var angleToSunPos = function angleToSunPos(angle) {
38
+ return new _core2.Vector3(angleToVec(angle)).normalize();
39
+ };
40
+ var GLOBE_MESH_INNER = new _engine.SphereGeometry({
41
+ radius: 6.4e6,
42
+ nlat: 100,
43
+ nlong: 100
44
+ });
45
+ var GLOBE_MESH_OUTER = new _engine.SphereGeometry({
46
+ radius: 6.7e6,
47
+ nlat: 100,
48
+ nlong: 100
49
+ });
50
+ var lon = 0,
51
+ lat = 90;
52
+ var sunPosNow = (0, _sun.getSunPosition)(Date.now(), lat, lon);
53
+ var v3SunPosNow = angleToSunPos(sunPosNow.azimuth + Math.PI);
54
+ var NUM_SAMPLE_RAYS = 3;
55
+
56
+ /**
57
+ * Zoom range over which the atmosphere effect fades out.
58
+ * Below ATMOSPHERE_FADE_ZOOM_START the effect is fully visible.
59
+ * Above ATMOSPHERE_FADE_ZOOM_END the effect is completely hidden.
60
+ */
61
+ var ATMOSPHERE_FADE_ZOOM_START = 3.5;
62
+ var ATMOSPHERE_FADE_ZOOM_END = 6;
63
+
64
+ /**
65
+ * Convert a mapState zoom level to a [0, 1] atmosphere opacity multiplier.
66
+ * Returns 1 (fully visible) below ATMOSPHERE_FADE_ZOOM_START, smoothly
67
+ * interpolates to 0 between the two thresholds, and returns 0 above
68
+ * ATMOSPHERE_FADE_ZOOM_END.
69
+ */
70
+ function atmosphereZoomFade(zoom) {
71
+ if (zoom <= ATMOSPHERE_FADE_ZOOM_START) return 1;
72
+ if (zoom >= ATMOSPHERE_FADE_ZOOM_END) return 0;
73
+ var t = (zoom - ATMOSPHERE_FADE_ZOOM_START) / (ATMOSPHERE_FADE_ZOOM_END - ATMOSPHERE_FADE_ZOOM_START);
74
+ // Smooth-step for a perceptually gentle transition.
75
+ return 1 - t * t * (3 - 2 * t);
76
+ }
77
+ var ATMOSPHERE_UNIFORMS = {
78
+ v3SunPos: v3SunPosNow,
79
+ exposure: 2,
80
+ fSamples: 3,
81
+ g: -0.65,
82
+ fKrESun: 0.00025 * 20,
83
+ fKmESun: 0.0001 * 20,
84
+ fKr4PI: 0.00025 * 4 * Math.PI,
85
+ fKm4PI: 0.0001 * 4 * Math.PI,
86
+ fScaleDepth: 0.25,
87
+ fInnerRadius: 258,
88
+ fOuterRadius: 265,
89
+ fTerminatorAttenuateFactor: 0.8,
90
+ fTerminatorOpacityFactor: 1
91
+ };
92
+ var AtmosphereLayerRealistic = exports.AtmosphereLayerRealistic = /*#__PURE__*/function (_SimpleMeshLayer) {
93
+ function AtmosphereLayerRealistic() {
94
+ (0, _classCallCheck2["default"])(this, AtmosphereLayerRealistic);
95
+ return _callSuper(this, AtmosphereLayerRealistic, arguments);
96
+ }
97
+ (0, _inherits2["default"])(AtmosphereLayerRealistic, _SimpleMeshLayer);
98
+ return (0, _createClass2["default"])(AtmosphereLayerRealistic, [{
99
+ key: "draw",
100
+ value: function draw(_ref) {
101
+ var uniforms = _ref.uniforms;
102
+ var _this$props = this.props,
103
+ config = _this$props.config,
104
+ zoomFade = _this$props.zoomFade;
105
+ var model = this.state.model;
106
+ if (model) {
107
+ model.props.uniforms = _objectSpread(_objectSpread(_objectSpread({}, model.props.uniforms), ATMOSPHERE_UNIFORMS), {}, {
108
+ fTerminatorOpacityFactor: config.terminator ? config.terminatorOpacity : 0,
109
+ v3SunPos: config.azimuth ? angleToSunPos(toRadians(config.azimuthAngle)) : v3SunPosNow,
110
+ fAtmosphereZoomFade: zoomFade
111
+ });
112
+ }
113
+ _superPropGet(AtmosphereLayerRealistic, "draw", this, 3)([{
114
+ uniforms: uniforms
115
+ }]);
116
+ }
117
+ }, {
118
+ key: "getShaders",
119
+ value: function getShaders() {
120
+ return _objectSpread(_objectSpread({}, _superPropGet(AtmosphereLayerRealistic, "getShaders", this, 3)([])), {}, {
121
+ inject: {
122
+ 'fs:#decl': "\n uniform vec3 v3SunPos;\n\n uniform float g;\n uniform float exposure;\n\n uniform float fSamples;\n\n uniform float fInnerRadius;\n uniform float fOuterRadius;\n uniform float fKrESun;\n uniform float fKmESun;\n uniform float fKr4PI;\n uniform float fKm4PI;\n uniform float fScaleDepth;\n\n uniform float fTerminatorAttenuateFactor;\n uniform float fTerminatorOpacityFactor;\n uniform float fAtmosphereZoomFade;\n\n const int nSamples = ".concat(NUM_SAMPLE_RAYS, ";\n\n float scale(float fCos) {\n float x = 1.0 - fCos;\n return fScaleDepth * exp(-0.00287 + x*(0.459 + x*(3.83 + x*(-6.8 + x*5.25))));\n }\n "),
123
+ 'fs:#main-end': "\n vec3 v3CameraPos = cameraPosition;\n vec3 v3Pos = position_commonspace.xyz;\n\n float g2 = g * g;\n\n vec3 v3InvWavelength = vec3(1.0 / pow(0.650, 4.0), 1.0 / pow(0.570, 4.0), 1.0 / pow(0.475, 4.0));\n\n float fInnerRadius2 = fInnerRadius * fInnerRadius;\n float fOuterRadius2 = fOuterRadius * fOuterRadius;\n float fScale = 1.0 / (fOuterRadius - fInnerRadius);\n float fScaleOverScaleDepth = 1.0 / (fOuterRadius - fInnerRadius) / fScaleDepth;\n\n float cameraHeight2 = length(v3CameraPos) * length(v3CameraPos);\n\n vec3 v3Ray = v3Pos - v3CameraPos;\n float fFar = length(v3Ray);\n v3Ray /= fFar;\n\n float B = 2.0 * dot(v3CameraPos, v3Ray);\n float C = cameraHeight2 - fOuterRadius2;\n float fDet = max(0.0, B*B - 4.0 * C);\n float fNear = 0.5 * (-B - sqrt(fDet));\n\n vec3 v3Start = v3CameraPos + v3Ray * fNear;\n fFar -= fNear;\n\n float fDepth = exp((fInnerRadius - fOuterRadius) / fScaleDepth);\n float fCameraAngle = dot(-v3Ray, v3Pos) / length(v3Pos);\n float fLightAngle = dot(v3SunPos, v3Pos) / length(v3Pos);\n float fCameraScale = scale(fCameraAngle);\n float fLightScale = scale(fLightAngle);\n float fCameraOffset = fDepth*fCameraScale;\n float fTemp = (fLightScale + fCameraScale);\n\n float fSampleLength = fFar / fSamples;\n float fScaledLength = fSampleLength * fScale;\n vec3 v3SampleRay = v3Ray * fSampleLength;\n vec3 v3SamplePoint = v3Start + v3SampleRay * 0.5;\n\n vec3 v3FrontColor = vec3(0.0, 0.0, 0.0);\n vec3 v3Attenuate = vec3(0.0, 0.0, 0.0);\n for(int i=0; i<nSamples; i++)\n {\n float fHeight = length(v3SamplePoint);\n float fDepth = exp(fScaleOverScaleDepth * (fInnerRadius - fHeight));\n float fScatter = fDepth*fTemp - fCameraOffset;\n v3Attenuate = exp(-fScatter * (v3InvWavelength * fKr4PI + fKm4PI));\n v3FrontColor += v3Attenuate * (fDepth * fScaledLength);\n v3SamplePoint += v3SampleRay;\n }\n\n vec3 c0 = v3Attenuate;\n vec3 c1 = v3FrontColor * (v3InvWavelength * fKrESun + fKmESun);\n\n fragColor = vec4(c1, 1.0 - c0 * fTerminatorAttenuateFactor);\n fragColor.a *= fTerminatorOpacityFactor;\n\n // Keep the day hemisphere completely unshaded \u2014 the attenuation-based\n // alpha above is non-zero even at noon, which slightly darkens the lit\n // side. Gate it with a day/night mask so darkening only appears across\n // the terminator and onto the night side.\n // fLightAngle = dot(sunDir, surfaceNormal): +1 at the subsolar point\n // (noon), 0 at the terminator, -1 at midnight. smoothstep maps the day\n // side (>= 0.2) to 0 (no darkening), ramps through the terminator, and\n // reaches full darkening on the night side (<= -0.2).\n float fNightMask = smoothstep(0.2, -0.2, fLightAngle);\n fragColor.a *= fNightMask;\n\n // Fade out the entire day/night shading effect as the user zooms in.\n // At zoom levels above ATMOSPHERE_FADE_ZOOM_END the effect is invisible,\n // so it doesn't obscure map detail at street/city scale.\n fragColor.a *= fAtmosphereZoomFade;\n ",
124
+ 'fs:DECKGL_FILTER_COLOR': ""
125
+ }
126
+ });
127
+ }
128
+ }]);
129
+ }(_meshLayers.SimpleMeshLayer);
130
+ (0, _defineProperty2["default"])(AtmosphereLayerRealistic, "layerName", 'AtmosphereLayerRealistic');
131
+ var AtmosphereSkyLayerRealistic = exports.AtmosphereSkyLayerRealistic = /*#__PURE__*/function (_SimpleMeshLayer2) {
132
+ function AtmosphereSkyLayerRealistic() {
133
+ (0, _classCallCheck2["default"])(this, AtmosphereSkyLayerRealistic);
134
+ return _callSuper(this, AtmosphereSkyLayerRealistic, arguments);
135
+ }
136
+ (0, _inherits2["default"])(AtmosphereSkyLayerRealistic, _SimpleMeshLayer2);
137
+ return (0, _createClass2["default"])(AtmosphereSkyLayerRealistic, [{
138
+ key: "draw",
139
+ value: function draw(_ref2) {
140
+ var uniforms = _ref2.uniforms;
141
+ var _this$props2 = this.props,
142
+ config = _this$props2.config,
143
+ zoomFade = _this$props2.zoomFade;
144
+ var model = this.state.model;
145
+ if (model) {
146
+ model.props.uniforms = _objectSpread(_objectSpread(_objectSpread({}, model.props.uniforms), ATMOSPHERE_UNIFORMS), {}, {
147
+ v3SunPos: config.azimuth ? angleToSunPos(toRadians(config.azimuthAngle)) : v3SunPosNow,
148
+ fAtmosphereZoomFade: zoomFade
149
+ });
150
+ }
151
+ _superPropGet(AtmosphereSkyLayerRealistic, "draw", this, 3)([{
152
+ uniforms: uniforms
153
+ }]);
154
+ }
155
+ }, {
156
+ key: "getShaders",
157
+ value: function getShaders() {
158
+ return _objectSpread(_objectSpread({}, _superPropGet(AtmosphereSkyLayerRealistic, "getShaders", this, 3)([])), {}, {
159
+ inject: {
160
+ 'fs:#decl': "\n uniform vec3 v3SunPos;\n\n uniform float g;\n uniform float exposure;\n\n uniform float fSamples;\n\n uniform float fInnerRadius;\n uniform float fOuterRadius;\n uniform float fKrESun;\n uniform float fKmESun;\n uniform float fKr4PI;\n uniform float fKm4PI;\n uniform float fScaleDepth;\n uniform float fAtmosphereZoomFade;\n\n const int nSamples = ".concat(NUM_SAMPLE_RAYS, ";\n\n float scale(float fCos) {\n float x = 1.0 - fCos;\n return fScaleDepth * exp(-0.00287 + x*(0.459 + x*(3.83 + x*(-6.8 + x*5.25))));\n }\n\n float getMiePhase(float fCos, float fCos2, float g, float g2) {\n return 1.5 * ((1.0 - g2) / (2.0 + g2)) * (1.0 + fCos2) / pow(1.0 + g2 - 2.0 * g * fCos, 1.5);\n }\n\n float getRayleighPhase(float fCos2) {\n return 0.75 + 0.75 * fCos2;\n }\n "),
161
+ 'fs:#main-end': "\n vec3 v3CameraPos = cameraPosition;\n vec3 v3Pos = position_commonspace.xyz;\n\n float g2 = g * g;\n\n vec3 v3InvWavelength = vec3(1.0 / pow(0.650, 4.0), 1.0 / pow(0.570, 4.0), 1.0 / pow(0.475, 4.0));\n\n float fInnerRadius2 = fInnerRadius * fInnerRadius;\n float fOuterRadius2 = fOuterRadius * fOuterRadius;\n float fScale = 1.0 / (fOuterRadius - fInnerRadius);\n float fScaleOverScaleDepth = 1.0 / (fOuterRadius - fInnerRadius) / fScaleDepth;\n\n float cameraHeight2 = length(v3CameraPos) * length(v3CameraPos);\n\n vec3 v3Ray = v3Pos - v3CameraPos;\n float fFar = length(v3Ray);\n v3Ray /= fFar;\n\n float B = 2.0 * dot(v3CameraPos, v3Ray);\n float C = cameraHeight2 - fOuterRadius2;\n float fDet = max(0.0, B*B - 4.0 * C);\n float fNear = 0.5 * (-B - sqrt(fDet));\n\n vec3 v3Start = v3CameraPos + v3Ray * fNear;\n fFar -= fNear;\n float fStartAngle = dot(v3Ray, v3Start) / fOuterRadius;\n float fStartDepth = exp(-1.0 / fScaleDepth);\n float fStartOffset = fStartDepth * scale(fStartAngle);\n\n float fSampleLength = fFar / fSamples;\n float fScaledLength = fSampleLength * fScale;\n vec3 v3SampleRay = v3Ray * fSampleLength;\n vec3 v3SamplePoint = v3Start + v3SampleRay * 0.5;\n\n vec3 v3FrontColor = vec3(0.0, 0.0, 0.0);\n for(int i=0; i<nSamples; i++)\n {\n float fHeight = length(v3SamplePoint);\n float fDepth = exp(fScaleOverScaleDepth * (fInnerRadius - fHeight));\n float fLightAngle = dot(v3SunPos, v3SamplePoint) / fHeight;\n float fCameraAngle = dot(v3Ray, v3SamplePoint) / fHeight;\n float fScatter = (fStartOffset + fDepth * (scale(fLightAngle) - scale(fCameraAngle)));\n vec3 v3Attenuate = exp(-fScatter * (v3InvWavelength * fKr4PI + fKm4PI));\n\n v3FrontColor += v3Attenuate * (fDepth * fScaledLength);\n v3SamplePoint += v3SampleRay;\n }\n\n vec3 c0 = v3FrontColor * (v3InvWavelength * fKrESun);\n vec3 c1 = v3FrontColor * fKmESun;\n\n vec3 v3Direction = v3CameraPos - v3Pos;\n\n float fCos = dot(v3SunPos, v3Direction) / length(v3Direction);\n float fCos2 = fCos * fCos;\n\n vec3 skyColor = getRayleighPhase(fCos2) * c0 + getMiePhase(fCos, fCos2, g, g2) * c1;\n\n fragColor = vec4(skyColor, 1.0);\n fragColor.a = fragColor.b;\n\n // Fade the sky halo out as the user zooms in past continent scale.\n fragColor.a *= fAtmosphereZoomFade;\n ",
162
+ 'fs:DECKGL_FILTER_COLOR': ""
163
+ }
164
+ });
165
+ }
166
+ }]);
167
+ }(_meshLayers.SimpleMeshLayer);
168
+ (0, _defineProperty2["default"])(AtmosphereSkyLayerRealistic, "layerName", 'AtmosphereSkyLayerRealistic');
169
+ var ATMOSPHERE_PARAMETERS = {
170
+ depthTest: false,
171
+ blendFunc: [0x0302, 0x0303, 1, 0x0303],
172
+ // SRC_ALPHA, ONE_MINUS_SRC_ALPHA, ONE, ONE_MINUS_SRC_ALPHA
173
+ blendEquation: [0x8006, 0x8006] // FUNC_ADD
174
+ };
175
+ var ATMOSPHERE_SKY_PARAMETERS = {
176
+ cullFace: 0x0404,
177
+ // GL.FRONT
178
+ depthMask: false,
179
+ blendFunc: [0x0302, 0x0303, 1, 0x0303],
180
+ blendEquation: [0x8006, 0x8006]
181
+ };
182
+ var getGlobeAtmosphereLayer = exports.getGlobeAtmosphereLayer = function getGlobeAtmosphereLayer(_ref3) {
183
+ var config = _ref3.config,
184
+ zoom = _ref3.zoom;
185
+ var zoomFade = atmosphereZoomFade(zoom !== null && zoom !== void 0 ? zoom : 0);
186
+ return new AtmosphereLayerRealistic({
187
+ id: 'atmosphere',
188
+ data: [[0, 0, 0]],
189
+ config: config,
190
+ zoomFade: zoomFade,
191
+ coordinateOrigin: [0, 0, 0],
192
+ coordinateSystem: _core.COORDINATE_SYSTEM.CARTESIAN,
193
+ getPosition: function getPosition(d) {
194
+ return d;
195
+ },
196
+ getColor: [0, 0, 0],
197
+ mesh: GLOBE_MESH_INNER,
198
+ parameters: ATMOSPHERE_PARAMETERS
199
+ });
200
+ };
201
+ var getGlobeAtmosphereSkyLayer = exports.getGlobeAtmosphereSkyLayer = function getGlobeAtmosphereSkyLayer(_ref4) {
202
+ var config = _ref4.config,
203
+ zoom = _ref4.zoom;
204
+ var zoomFade = atmosphereZoomFade(zoom !== null && zoom !== void 0 ? zoom : 0);
205
+ return new AtmosphereSkyLayerRealistic({
206
+ id: 'atmosphere-sky',
207
+ data: [[0, 0, 0]],
208
+ config: config,
209
+ zoomFade: zoomFade,
210
+ coordinateOrigin: [0, 0, 0],
211
+ coordinateSystem: _core.COORDINATE_SYSTEM.CARTESIAN,
212
+ getPosition: function getPosition(d) {
213
+ return d;
214
+ },
215
+ getColor: [0, 0, 0],
216
+ mesh: GLOBE_MESH_OUTER,
217
+ parameters: ATMOSPHERE_SKY_PARAMETERS
218
+ });
219
+ };
220
+ //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJfY29yZSIsInJlcXVpcmUiLCJfbWVzaExheWVycyIsIl9lbmdpbmUiLCJfY29yZTIiLCJfc3VuIiwib3duS2V5cyIsImUiLCJyIiwidCIsIk9iamVjdCIsImtleXMiLCJnZXRPd25Qcm9wZXJ0eVN5bWJvbHMiLCJvIiwiZmlsdGVyIiwiZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yIiwiZW51bWVyYWJsZSIsInB1c2giLCJhcHBseSIsIl9vYmplY3RTcHJlYWQiLCJhcmd1bWVudHMiLCJsZW5ndGgiLCJmb3JFYWNoIiwiX2RlZmluZVByb3BlcnR5MiIsImdldE93blByb3BlcnR5RGVzY3JpcHRvcnMiLCJkZWZpbmVQcm9wZXJ0aWVzIiwiZGVmaW5lUHJvcGVydHkiLCJfY2FsbFN1cGVyIiwiX2dldFByb3RvdHlwZU9mMiIsIl9wb3NzaWJsZUNvbnN0cnVjdG9yUmV0dXJuMiIsIl9pc05hdGl2ZVJlZmxlY3RDb25zdHJ1Y3QiLCJSZWZsZWN0IiwiY29uc3RydWN0IiwiY29uc3RydWN0b3IiLCJCb29sZWFuIiwicHJvdG90eXBlIiwidmFsdWVPZiIsImNhbGwiLCJfc3VwZXJQcm9wR2V0IiwicCIsIl9nZXQyIiwidG9SYWRpYW5zIiwiZGVncmVlcyIsIk1hdGgiLCJQSSIsImFuZ2xlVG9WZWMiLCJhbmdsZSIsInNpbiIsImNvcyIsImFuZ2xlVG9TdW5Qb3MiLCJWZWN0b3IzIiwibm9ybWFsaXplIiwiR0xPQkVfTUVTSF9JTk5FUiIsIlNwaGVyZUdlb21ldHJ5IiwicmFkaXVzIiwibmxhdCIsIm5sb25nIiwiR0xPQkVfTUVTSF9PVVRFUiIsImxvbiIsImxhdCIsInN1blBvc05vdyIsImdldFN1blBvc2l0aW9uIiwiRGF0ZSIsIm5vdyIsInYzU3VuUG9zTm93IiwiYXppbXV0aCIsIk5VTV9TQU1QTEVfUkFZUyIsIkFUTU9TUEhFUkVfRkFERV9aT09NX1NUQVJUIiwiQVRNT1NQSEVSRV9GQURFX1pPT01fRU5EIiwiYXRtb3NwaGVyZVpvb21GYWRlIiwiem9vbSIsIkFUTU9TUEhFUkVfVU5JRk9STVMiLCJ2M1N1blBvcyIsImV4cG9zdXJlIiwiZlNhbXBsZXMiLCJnIiwiZktyRVN1biIsImZLbUVTdW4iLCJmS3I0UEkiLCJmS200UEkiLCJmU2NhbGVEZXB0aCIsImZJbm5lclJhZGl1cyIsImZPdXRlclJhZGl1cyIsImZUZXJtaW5hdG9yQXR0ZW51YXRlRmFjdG9yIiwiZlRlcm1pbmF0b3JPcGFjaXR5RmFjdG9yIiwiQXRtb3NwaGVyZUxheWVyUmVhbGlzdGljIiwiZXhwb3J0cyIsIl9TaW1wbGVNZXNoTGF5ZXIiLCJfY2xhc3NDYWxsQ2hlY2syIiwiX2luaGVyaXRzMiIsIl9jcmVhdGVDbGFzczIiLCJrZXkiLCJ2YWx1ZSIsImRyYXciLCJfcmVmIiwidW5pZm9ybXMiLCJfdGhpcyRwcm9wcyIsInByb3BzIiwiY29uZmlnIiwiem9vbUZhZGUiLCJtb2RlbCIsInN0YXRlIiwidGVybWluYXRvciIsInRlcm1pbmF0b3JPcGFjaXR5IiwiYXppbXV0aEFuZ2xlIiwiZkF0bW9zcGhlcmVab29tRmFkZSIsImdldFNoYWRlcnMiLCJpbmplY3QiLCJjb25jYXQiLCJTaW1wbGVNZXNoTGF5ZXIiLCJBdG1vc3BoZXJlU2t5TGF5ZXJSZWFsaXN0aWMiLCJfU2ltcGxlTWVzaExheWVyMiIsIl9yZWYyIiwiX3RoaXMkcHJvcHMyIiwiQVRNT1NQSEVSRV9QQVJBTUVURVJTIiwiZGVwdGhUZXN0IiwiYmxlbmRGdW5jIiwiYmxlbmRFcXVhdGlvbiIsIkFUTU9TUEhFUkVfU0tZX1BBUkFNRVRFUlMiLCJjdWxsRmFjZSIsImRlcHRoTWFzayIsImdldEdsb2JlQXRtb3NwaGVyZUxheWVyIiwiX3JlZjMiLCJpZCIsImRhdGEiLCJjb29yZGluYXRlT3JpZ2luIiwiY29vcmRpbmF0ZVN5c3RlbSIsIkNPT1JESU5BVEVfU1lTVEVNIiwiQ0FSVEVTSUFOIiwiZ2V0UG9zaXRpb24iLCJkIiwiZ2V0Q29sb3IiLCJtZXNoIiwicGFyYW1ldGVycyIsImdldEdsb2JlQXRtb3NwaGVyZVNreUxheWVyIiwiX3JlZjQiXSwic291cmNlcyI6WyIuLi8uLi9zcmMvZ2xvYmUvYXRtb3NwaGVyZS1sYXllci50cyJdLCJzb3VyY2VzQ29udGVudCI6WyIvLyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogTUlUXG4vLyBDb3B5cmlnaHQgY29udHJpYnV0b3JzIHRvIHRoZSBrZXBsZXIuZ2wgcHJvamVjdFxuXG4vLyBTaGFkZXJzIHBvcnRlZCBmcm9tIGlUb3ducywgYmFzZWQgb24gU2VhbiBPJ05laWwncyBhcHByb2FjaCBpbiBHUFUgR2VtcyAyXG4vLyBTRUU6IGh0dHBzOi8vZ2l0aHViLmNvbS9pVG93bnMvaXRvd25zL2Jsb2IvbWFzdGVyL3NyYy9Db3JlL1ByZWZhYi9HbG9iZS9BdG1vc3BoZXJlLmpzXG4vLyBTRUU6IGh0dHBzOi8vZGV2ZWxvcGVyLm52aWRpYS5jb20vZ3B1Z2Vtcy9ncHVnZW1zMi9wYXJ0LWlpLXNoYWRpbmctbGlnaHRpbmctYW5kLXNoYWRvd3MvY2hhcHRlci0xNi1hY2N1cmF0ZS1hdG1vc3BoZXJpYy1zY2F0dGVyaW5nXG5cbmltcG9ydCB7Q09PUkRJTkFURV9TWVNURU19IGZyb20gJ0BkZWNrLmdsL2NvcmUnO1xuaW1wb3J0IHtTaW1wbGVNZXNoTGF5ZXJ9IGZyb20gJ0BkZWNrLmdsL21lc2gtbGF5ZXJzJztcbmltcG9ydCB7U3BoZXJlR2VvbWV0cnl9IGZyb20gJ0BsdW1hLmdsL2VuZ2luZSc7XG5pbXBvcnQge1ZlY3RvcjN9IGZyb20gJ0BtYXRoLmdsL2NvcmUnO1xuaW1wb3J0IHtnZXRTdW5Qb3NpdGlvbn0gZnJvbSAnQG1hdGguZ2wvc3VuJztcblxuaW1wb3J0IHR5cGUge0dsb2JlQ29uZmlnfSBmcm9tICdAa2VwbGVyLmdsL2NvbnN0YW50cyc7XG5cbmNvbnN0IHRvUmFkaWFucyA9IChkZWdyZWVzOiBudW1iZXIpOiBudW1iZXIgPT4gKGRlZ3JlZXMgKiBNYXRoLlBJKSAvIDE4MDtcblxuY29uc3QgYW5nbGVUb1ZlYyA9IChhbmdsZTogbnVtYmVyKTogW251bWJlciwgbnVtYmVyLCBudW1iZXJdID0+IHtcbiAgcmV0dXJuIFtNYXRoLnNpbihhbmdsZSksIE1hdGguY29zKGFuZ2xlKSwgMF07XG59O1xuXG5jb25zdCBhbmdsZVRvU3VuUG9zID0gKGFuZ2xlOiBudW1iZXIpOiBudW1iZXJbXSA9PiB7XG4gIHJldHVybiBuZXcgVmVjdG9yMyhhbmdsZVRvVmVjKGFuZ2xlKSkubm9ybWFsaXplKCkgYXMgdW5rbm93biBhcyBudW1iZXJbXTtcbn07XG5cbmNvbnN0IEdMT0JFX01FU0hfSU5ORVIgPSBuZXcgU3BoZXJlR2VvbWV0cnkoe1xuICByYWRpdXM6IDYuNGU2LFxuICBubGF0OiAxMDAsXG4gIG5sb25nOiAxMDBcbn0pO1xuXG5jb25zdCBHTE9CRV9NRVNIX09VVEVSID0gbmV3IFNwaGVyZUdlb21ldHJ5KHtcbiAgcmFkaXVzOiA2LjdlNixcbiAgbmxhdDogMTAwLFxuICBubG9uZzogMTAwXG59KTtcblxuY29uc3QgW2xvbiwgbGF0XSA9IFswLCA5MF07XG5jb25zdCBzdW5Qb3NOb3cgPSBnZXRTdW5Qb3NpdGlvbihEYXRlLm5vdygpLCBsYXQsIGxvbik7XG5jb25zdCB2M1N1blBvc05vdyA9IGFuZ2xlVG9TdW5Qb3Moc3VuUG9zTm93LmF6aW11dGggKyBNYXRoLlBJKTtcblxuY29uc3QgTlVNX1NBTVBMRV9SQVlTID0gMztcblxuLyoqXG4gKiBab29tIHJhbmdlIG92ZXIgd2hpY2ggdGhlIGF0bW9zcGhlcmUgZWZmZWN0IGZhZGVzIG91dC5cbiAqIEJlbG93IEFUTU9TUEhFUkVfRkFERV9aT09NX1NUQVJUIHRoZSBlZmZlY3QgaXMgZnVsbHkgdmlzaWJsZS5cbiAqIEFib3ZlIEFUTU9TUEhFUkVfRkFERV9aT09NX0VORCB0aGUgZWZmZWN0IGlzIGNvbXBsZXRlbHkgaGlkZGVuLlxuICovXG5jb25zdCBBVE1PU1BIRVJFX0ZBREVfWk9PTV9TVEFSVCA9IDMuNTtcbmNvbnN0IEFUTU9TUEhFUkVfRkFERV9aT09NX0VORCA9IDY7XG5cbi8qKlxuICogQ29udmVydCBhIG1hcFN0YXRlIHpvb20gbGV2ZWwgdG8gYSBbMCwgMV0gYXRtb3NwaGVyZSBvcGFjaXR5IG11bHRpcGxpZXIuXG4gKiBSZXR1cm5zIDEgKGZ1bGx5IHZpc2libGUpIGJlbG93IEFUTU9TUEhFUkVfRkFERV9aT09NX1NUQVJULCBzbW9vdGhseVxuICogaW50ZXJwb2xhdGVzIHRvIDAgYmV0d2VlbiB0aGUgdHdvIHRocmVzaG9sZHMsIGFuZCByZXR1cm5zIDAgYWJvdmVcbiAqIEFUTU9TUEhFUkVfRkFERV9aT09NX0VORC5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGF0bW9zcGhlcmVab29tRmFkZSh6b29tOiBudW1iZXIpOiBudW1iZXIge1xuICBpZiAoem9vbSA8PSBBVE1PU1BIRVJFX0ZBREVfWk9PTV9TVEFSVCkgcmV0dXJuIDE7XG4gIGlmICh6b29tID49IEFUTU9TUEhFUkVfRkFERV9aT09NX0VORCkgcmV0dXJuIDA7XG4gIGNvbnN0IHQgPSAoem9vbSAtIEFUTU9TUEhFUkVfRkFERV9aT09NX1NUQVJUKSAvIChBVE1PU1BIRVJFX0ZBREVfWk9PTV9FTkQgLSBBVE1PU1BIRVJFX0ZBREVfWk9PTV9TVEFSVCk7XG4gIC8vIFNtb290aC1zdGVwIGZvciBhIHBlcmNlcHR1YWxseSBnZW50bGUgdHJhbnNpdGlvbi5cbiAgcmV0dXJuIDEgLSB0ICogdCAqICgzIC0gMiAqIHQpO1xufVxuXG5jb25zdCBBVE1PU1BIRVJFX1VOSUZPUk1TID0ge1xuICB2M1N1blBvczogdjNTdW5Qb3NOb3csXG4gIGV4cG9zdXJlOiAyLFxuICBmU2FtcGxlczogMyxcbiAgZzogLTAuNjUsXG4gIGZLckVTdW46IDAuMDAwMjUgKiAyMCxcbiAgZkttRVN1bjogMC4wMDAxICogMjAsXG4gIGZLcjRQSTogMC4wMDAyNSAqIDQgKiBNYXRoLlBJLFxuICBmS200UEk6IDAuMDAwMSAqIDQgKiBNYXRoLlBJLFxuICBmU2NhbGVEZXB0aDogMC4yNSxcbiAgZklubmVyUmFkaXVzOiAyNTgsXG4gIGZPdXRlclJhZGl1czogMjY1LFxuICBmVGVybWluYXRvckF0dGVudWF0ZUZhY3RvcjogMC44LFxuICBmVGVybWluYXRvck9wYWNpdHlGYWN0b3I6IDFcbn07XG5cbnR5cGUgQXRtb3NwaGVyZUxheWVyUHJvcHMgPSB7XG4gIGNvbmZpZzogR2xvYmVDb25maWc7XG4gIC8qKiBQcmUtY29tcHV0ZWQgWzAsIDFdIHpvb20tZmFkZSBtdWx0aXBsaWVyOyAxID0gZnVsbHkgdmlzaWJsZSwgMCA9IGhpZGRlbi4gKi9cbiAgem9vbUZhZGU6IG51bWJlcjtcbn07XG5cbmV4cG9ydCBjbGFzcyBBdG1vc3BoZXJlTGF5ZXJSZWFsaXN0aWMgZXh0ZW5kcyBTaW1wbGVNZXNoTGF5ZXI8YW55LCBBdG1vc3BoZXJlTGF5ZXJQcm9wcz4ge1xuICBzdGF0aWMgbGF5ZXJOYW1lID0gJ0F0bW9zcGhlcmVMYXllclJlYWxpc3RpYyc7XG5cbiAgZHJhdyh7dW5pZm9ybXN9OiB7dW5pZm9ybXM6IG9iamVjdH0pOiB2b2lkIHtcbiAgICBjb25zdCB7Y29uZmlnLCB6b29tRmFkZX0gPSB0aGlzLnByb3BzO1xuICAgIGNvbnN0IG1vZGVsID0gdGhpcy5zdGF0ZS5tb2RlbDtcbiAgICBpZiAobW9kZWwpIHtcbiAgICAgIChtb2RlbCBhcyBhbnkpLnByb3BzLnVuaWZvcm1zID0ge1xuICAgICAgICAuLi4obW9kZWwgYXMgYW55KS5wcm9wcy51bmlmb3JtcyxcbiAgICAgICAgLi4uQVRNT1NQSEVSRV9VTklGT1JNUyxcbiAgICAgICAgZlRlcm1pbmF0b3JPcGFjaXR5RmFjdG9yOiBjb25maWcudGVybWluYXRvciA/IGNvbmZpZy50ZXJtaW5hdG9yT3BhY2l0eSA6IDAsXG4gICAgICAgIHYzU3VuUG9zOiBjb25maWcuYXppbXV0aCA/IGFuZ2xlVG9TdW5Qb3ModG9SYWRpYW5zKGNvbmZpZy5hemltdXRoQW5nbGUpKSA6IHYzU3VuUG9zTm93LFxuICAgICAgICBmQXRtb3NwaGVyZVpvb21GYWRlOiB6b29tRmFkZVxuICAgICAgfTtcbiAgICB9XG4gICAgc3VwZXIuZHJhdyh7dW5pZm9ybXN9KTtcbiAgfVxuXG4gIGdldFNoYWRlcnMoKTogYW55IHtcbiAgICByZXR1cm4ge1xuICAgICAgLi4uc3VwZXIuZ2V0U2hhZGVycygpLFxuICAgICAgaW5qZWN0OiB7XG4gICAgICAgICdmczojZGVjbCc6IGBcbiAgICAgICAgICB1bmlmb3JtIHZlYzMgdjNTdW5Qb3M7XG5cbiAgICAgICAgICB1bmlmb3JtIGZsb2F0IGc7XG4gICAgICAgICAgdW5pZm9ybSBmbG9hdCBleHBvc3VyZTtcblxuICAgICAgICAgIHVuaWZvcm0gZmxvYXQgZlNhbXBsZXM7XG5cbiAgICAgICAgICB1bmlmb3JtIGZsb2F0IGZJbm5lclJhZGl1cztcbiAgICAgICAgICB1bmlmb3JtIGZsb2F0IGZPdXRlclJhZGl1cztcbiAgICAgICAgICB1bmlmb3JtIGZsb2F0IGZLckVTdW47XG4gICAgICAgICAgdW5pZm9ybSBmbG9hdCBmS21FU3VuO1xuICAgICAgICAgIHVuaWZvcm0gZmxvYXQgZktyNFBJO1xuICAgICAgICAgIHVuaWZvcm0gZmxvYXQgZkttNFBJO1xuICAgICAgICAgIHVuaWZvcm0gZmxvYXQgZlNjYWxlRGVwdGg7XG5cbiAgICAgICAgICB1bmlmb3JtIGZsb2F0IGZUZXJtaW5hdG9yQXR0ZW51YXRlRmFjdG9yO1xuICAgICAgICAgIHVuaWZvcm0gZmxvYXQgZlRlcm1pbmF0b3JPcGFjaXR5RmFjdG9yO1xuICAgICAgICAgIHVuaWZvcm0gZmxvYXQgZkF0bW9zcGhlcmVab29tRmFkZTtcblxuICAgICAgICAgIGNvbnN0IGludCBuU2FtcGxlcyA9ICR7TlVNX1NBTVBMRV9SQVlTfTtcblxuICAgICAgICAgIGZsb2F0IHNjYWxlKGZsb2F0IGZDb3MpIHtcbiAgICAgICAgICAgIGZsb2F0IHggPSAxLjAgLSBmQ29zO1xuICAgICAgICAgICAgcmV0dXJuIGZTY2FsZURlcHRoICogZXhwKC0wLjAwMjg3ICsgeCooMC40NTkgKyB4KigzLjgzICsgeCooLTYuOCArIHgqNS4yNSkpKSk7XG4gICAgICAgICAgfVxuICAgICAgICBgLFxuICAgICAgICAnZnM6I21haW4tZW5kJzogYFxuICAgICAgICAgIHZlYzMgdjNDYW1lcmFQb3MgPSBjYW1lcmFQb3NpdGlvbjtcbiAgICAgICAgICB2ZWMzIHYzUG9zID0gcG9zaXRpb25fY29tbW9uc3BhY2UueHl6O1xuXG4gICAgICAgICAgZmxvYXQgZzIgPSBnICogZztcblxuICAgICAgICAgIHZlYzMgdjNJbnZXYXZlbGVuZ3RoID0gdmVjMygxLjAgLyBwb3coMC42NTAsIDQuMCksIDEuMCAvIHBvdygwLjU3MCwgNC4wKSwgMS4wIC8gcG93KDAuNDc1LCA0LjApKTtcblxuICAgICAgICAgIGZsb2F0IGZJbm5lclJhZGl1czIgPSBmSW5uZXJSYWRpdXMgKiBmSW5uZXJSYWRpdXM7XG4gICAgICAgICAgZmxvYXQgZk91dGVyUmFkaXVzMiA9IGZPdXRlclJhZGl1cyAqIGZPdXRlclJhZGl1cztcbiAgICAgICAgICBmbG9hdCBmU2NhbGUgPSAxLjAgLyAoZk91dGVyUmFkaXVzIC0gZklubmVyUmFkaXVzKTtcbiAgICAgICAgICBmbG9hdCBmU2NhbGVPdmVyU2NhbGVEZXB0aCA9IDEuMCAvIChmT3V0ZXJSYWRpdXMgLSBmSW5uZXJSYWRpdXMpIC8gZlNjYWxlRGVwdGg7XG5cbiAgICAgICAgICBmbG9hdCBjYW1lcmFIZWlnaHQyID0gbGVuZ3RoKHYzQ2FtZXJhUG9zKSAqIGxlbmd0aCh2M0NhbWVyYVBvcyk7XG5cbiAgICAgICAgICB2ZWMzIHYzUmF5ID0gdjNQb3MgLSB2M0NhbWVyYVBvcztcbiAgICAgICAgICBmbG9hdCBmRmFyID0gbGVuZ3RoKHYzUmF5KTtcbiAgICAgICAgICB2M1JheSAvPSBmRmFyO1xuXG4gICAgICAgICAgZmxvYXQgQiA9IDIuMCAqIGRvdCh2M0NhbWVyYVBvcywgdjNSYXkpO1xuICAgICAgICAgIGZsb2F0IEMgPSBjYW1lcmFIZWlnaHQyIC0gZk91dGVyUmFkaXVzMjtcbiAgICAgICAgICBmbG9hdCBmRGV0ID0gbWF4KDAuMCwgQipCIC0gNC4wICogQyk7XG4gICAgICAgICAgZmxvYXQgZk5lYXIgPSAwLjUgKiAoLUIgLSBzcXJ0KGZEZXQpKTtcblxuICAgICAgICAgIHZlYzMgdjNTdGFydCA9IHYzQ2FtZXJhUG9zICsgdjNSYXkgKiBmTmVhcjtcbiAgICAgICAgICBmRmFyIC09IGZOZWFyO1xuXG4gICAgICAgICAgZmxvYXQgZkRlcHRoID0gZXhwKChmSW5uZXJSYWRpdXMgLSBmT3V0ZXJSYWRpdXMpIC8gZlNjYWxlRGVwdGgpO1xuICAgICAgICAgIGZsb2F0IGZDYW1lcmFBbmdsZSA9IGRvdCgtdjNSYXksIHYzUG9zKSAvIGxlbmd0aCh2M1Bvcyk7XG4gICAgICAgICAgZmxvYXQgZkxpZ2h0QW5nbGUgPSBkb3QodjNTdW5Qb3MsIHYzUG9zKSAvIGxlbmd0aCh2M1Bvcyk7XG4gICAgICAgICAgZmxvYXQgZkNhbWVyYVNjYWxlID0gc2NhbGUoZkNhbWVyYUFuZ2xlKTtcbiAgICAgICAgICBmbG9hdCBmTGlnaHRTY2FsZSA9IHNjYWxlKGZMaWdodEFuZ2xlKTtcbiAgICAgICAgICBmbG9hdCBmQ2FtZXJhT2Zmc2V0ID0gZkRlcHRoKmZDYW1lcmFTY2FsZTtcbiAgICAgICAgICBmbG9hdCBmVGVtcCA9IChmTGlnaHRTY2FsZSArIGZDYW1lcmFTY2FsZSk7XG5cbiAgICAgICAgICBmbG9hdCBmU2FtcGxlTGVuZ3RoID0gZkZhciAvIGZTYW1wbGVzO1xuICAgICAgICAgIGZsb2F0IGZTY2FsZWRMZW5ndGggPSBmU2FtcGxlTGVuZ3RoICogZlNjYWxlO1xuICAgICAgICAgIHZlYzMgdjNTYW1wbGVSYXkgPSB2M1JheSAqIGZTYW1wbGVMZW5ndGg7XG4gICAgICAgICAgdmVjMyB2M1NhbXBsZVBvaW50ID0gdjNTdGFydCArIHYzU2FtcGxlUmF5ICogMC41O1xuXG4gICAgICAgICAgdmVjMyB2M0Zyb250Q29sb3IgPSB2ZWMzKDAuMCwgMC4wLCAwLjApO1xuICAgICAgICAgIHZlYzMgdjNBdHRlbnVhdGUgPSB2ZWMzKDAuMCwgMC4wLCAwLjApO1xuICAgICAgICAgIGZvcihpbnQgaT0wOyBpPG5TYW1wbGVzOyBpKyspXG4gICAgICAgICAge1xuICAgICAgICAgICAgICBmbG9hdCBmSGVpZ2h0ID0gbGVuZ3RoKHYzU2FtcGxlUG9pbnQpO1xuICAgICAgICAgICAgICBmbG9hdCBmRGVwdGggPSBleHAoZlNjYWxlT3ZlclNjYWxlRGVwdGggKiAoZklubmVyUmFkaXVzIC0gZkhlaWdodCkpO1xuICAgICAgICAgICAgICBmbG9hdCBmU2NhdHRlciA9IGZEZXB0aCpmVGVtcCAtIGZDYW1lcmFPZmZzZXQ7XG4gICAgICAgICAgICAgIHYzQXR0ZW51YXRlID0gZXhwKC1mU2NhdHRlciAqICh2M0ludldhdmVsZW5ndGggKiBmS3I0UEkgKyBmS200UEkpKTtcbiAgICAgICAgICAgICAgdjNGcm9udENvbG9yICs9IHYzQXR0ZW51YXRlICogKGZEZXB0aCAqIGZTY2FsZWRMZW5ndGgpO1xuICAgICAgICAgICAgICB2M1NhbXBsZVBvaW50ICs9IHYzU2FtcGxlUmF5O1xuICAgICAgICAgIH1cblxuICAgICAgICAgIHZlYzMgYzAgPSB2M0F0dGVudWF0ZTtcbiAgICAgICAgICB2ZWMzIGMxID0gdjNGcm9udENvbG9yICogKHYzSW52V2F2ZWxlbmd0aCAqIGZLckVTdW4gKyBmS21FU3VuKTtcblxuICAgICAgICAgIGZyYWdDb2xvciA9IHZlYzQoYzEsIDEuMCAtIGMwICogZlRlcm1pbmF0b3JBdHRlbnVhdGVGYWN0b3IpO1xuICAgICAgICAgIGZyYWdDb2xvci5hICo9IGZUZXJtaW5hdG9yT3BhY2l0eUZhY3RvcjtcblxuICAgICAgICAgIC8vIEtlZXAgdGhlIGRheSBoZW1pc3BoZXJlIGNvbXBsZXRlbHkgdW5zaGFkZWQg4oCUIHRoZSBhdHRlbnVhdGlvbi1iYXNlZFxuICAgICAgICAgIC8vIGFscGhhIGFib3ZlIGlzIG5vbi16ZXJvIGV2ZW4gYXQgbm9vbiwgd2hpY2ggc2xpZ2h0bHkgZGFya2VucyB0aGUgbGl0XG4gICAgICAgICAgLy8gc2lkZS4gR2F0ZSBpdCB3aXRoIGEgZGF5L25pZ2h0IG1hc2sgc28gZGFya2VuaW5nIG9ubHkgYXBwZWFycyBhY3Jvc3NcbiAgICAgICAgICAvLyB0aGUgdGVybWluYXRvciBhbmQgb250byB0aGUgbmlnaHQgc2lkZS5cbiAgICAgICAgICAvLyBmTGlnaHRBbmdsZSA9IGRvdChzdW5EaXIsIHN1cmZhY2VOb3JtYWwpOiArMSBhdCB0aGUgc3Vic29sYXIgcG9pbnRcbiAgICAgICAgICAvLyAobm9vbiksIDAgYXQgdGhlIHRlcm1pbmF0b3IsIC0xIGF0IG1pZG5pZ2h0LiBzbW9vdGhzdGVwIG1hcHMgdGhlIGRheVxuICAgICAgICAgIC8vIHNpZGUgKD49IDAuMikgdG8gMCAobm8gZGFya2VuaW5nKSwgcmFtcHMgdGhyb3VnaCB0aGUgdGVybWluYXRvciwgYW5kXG4gICAgICAgICAgLy8gcmVhY2hlcyBmdWxsIGRhcmtlbmluZyBvbiB0aGUgbmlnaHQgc2lkZSAoPD0gLTAuMikuXG4gICAgICAgICAgZmxvYXQgZk5pZ2h0TWFzayA9IHNtb290aHN0ZXAoMC4yLCAtMC4yLCBmTGlnaHRBbmdsZSk7XG4gICAgICAgICAgZnJhZ0NvbG9yLmEgKj0gZk5pZ2h0TWFzaztcblxuICAgICAgICAgIC8vIEZhZGUgb3V0IHRoZSBlbnRpcmUgZGF5L25pZ2h0IHNoYWRpbmcgZWZmZWN0IGFzIHRoZSB1c2VyIHpvb21zIGluLlxuICAgICAgICAgIC8vIEF0IHpvb20gbGV2ZWxzIGFib3ZlIEFUTU9TUEhFUkVfRkFERV9aT09NX0VORCB0aGUgZWZmZWN0IGlzIGludmlzaWJsZSxcbiAgICAgICAgICAvLyBzbyBpdCBkb2Vzbid0IG9ic2N1cmUgbWFwIGRldGFpbCBhdCBzdHJlZXQvY2l0eSBzY2FsZS5cbiAgICAgICAgICBmcmFnQ29sb3IuYSAqPSBmQXRtb3NwaGVyZVpvb21GYWRlO1xuICAgICAgICBgLFxuICAgICAgICAnZnM6REVDS0dMX0ZJTFRFUl9DT0xPUic6IGBgXG4gICAgICB9XG4gICAgfTtcbiAgfVxufVxuXG5leHBvcnQgY2xhc3MgQXRtb3NwaGVyZVNreUxheWVyUmVhbGlzdGljIGV4dGVuZHMgU2ltcGxlTWVzaExheWVyPGFueSwgQXRtb3NwaGVyZUxheWVyUHJvcHM+IHtcbiAgc3RhdGljIGxheWVyTmFtZSA9ICdBdG1vc3BoZXJlU2t5TGF5ZXJSZWFsaXN0aWMnO1xuXG4gIGRyYXcoe3VuaWZvcm1zfToge3VuaWZvcm1zOiBvYmplY3R9KTogdm9pZCB7XG4gICAgY29uc3Qge2NvbmZpZywgem9vbUZhZGV9ID0gdGhpcy5wcm9wcztcbiAgICBjb25zdCBtb2RlbCA9IHRoaXMuc3RhdGUubW9kZWw7XG4gICAgaWYgKG1vZGVsKSB7XG4gICAgICAobW9kZWwgYXMgYW55KS5wcm9wcy51bmlmb3JtcyA9IHtcbiAgICAgICAgLi4uKG1vZGVsIGFzIGFueSkucHJvcHMudW5pZm9ybXMsXG4gICAgICAgIC4uLkFUTU9TUEhFUkVfVU5JRk9STVMsXG4gICAgICAgIHYzU3VuUG9zOiBjb25maWcuYXppbXV0aCA/IGFuZ2xlVG9TdW5Qb3ModG9SYWRpYW5zKGNvbmZpZy5hemltdXRoQW5nbGUpKSA6IHYzU3VuUG9zTm93LFxuICAgICAgICBmQXRtb3NwaGVyZVpvb21GYWRlOiB6b29tRmFkZVxuICAgICAgfTtcbiAgICB9XG4gICAgc3VwZXIuZHJhdyh7dW5pZm9ybXN9KTtcbiAgfVxuXG4gIGdldFNoYWRlcnMoKTogYW55IHtcbiAgICByZXR1cm4ge1xuICAgICAgLi4uc3VwZXIuZ2V0U2hhZGVycygpLFxuICAgICAgaW5qZWN0OiB7XG4gICAgICAgICdmczojZGVjbCc6IGBcbiAgICAgICAgICB1bmlmb3JtIHZlYzMgdjNTdW5Qb3M7XG5cbiAgICAgICAgICB1bmlmb3JtIGZsb2F0IGc7XG4gICAgICAgICAgdW5pZm9ybSBmbG9hdCBleHBvc3VyZTtcblxuICAgICAgICAgIHVuaWZvcm0gZmxvYXQgZlNhbXBsZXM7XG5cbiAgICAgICAgICB1bmlmb3JtIGZsb2F0IGZJbm5lclJhZGl1cztcbiAgICAgICAgICB1bmlmb3JtIGZsb2F0IGZPdXRlclJhZGl1cztcbiAgICAgICAgICB1bmlmb3JtIGZsb2F0IGZLckVTdW47XG4gICAgICAgICAgdW5pZm9ybSBmbG9hdCBmS21FU3VuO1xuICAgICAgICAgIHVuaWZvcm0gZmxvYXQgZktyNFBJO1xuICAgICAgICAgIHVuaWZvcm0gZmxvYXQgZkttNFBJO1xuICAgICAgICAgIHVuaWZvcm0gZmxvYXQgZlNjYWxlRGVwdGg7XG4gICAgICAgICAgdW5pZm9ybSBmbG9hdCBmQXRtb3NwaGVyZVpvb21GYWRlO1xuXG4gICAgICAgICAgY29uc3QgaW50IG5TYW1wbGVzID0gJHtOVU1fU0FNUExFX1JBWVN9O1xuXG4gICAgICAgICAgZmxvYXQgc2NhbGUoZmxvYXQgZkNvcykge1xuICAgICAgICAgICAgZmxvYXQgeCA9IDEuMCAtIGZDb3M7XG4gICAgICAgICAgICByZXR1cm4gZlNjYWxlRGVwdGggKiBleHAoLTAuMDAyODcgKyB4KigwLjQ1OSArIHgqKDMuODMgKyB4KigtNi44ICsgeCo1LjI1KSkpKTtcbiAgICAgICAgICB9XG5cbiAgICAgICAgICBmbG9hdCBnZXRNaWVQaGFzZShmbG9hdCBmQ29zLCBmbG9hdCBmQ29zMiwgZmxvYXQgZywgZmxvYXQgZzIpIHtcbiAgICAgICAgICAgIHJldHVybiAxLjUgKiAoKDEuMCAtIGcyKSAvICgyLjAgKyBnMikpICogKDEuMCArIGZDb3MyKSAvIHBvdygxLjAgKyBnMiAtIDIuMCAqIGcgKiBmQ29zLCAxLjUpO1xuICAgICAgICAgIH1cblxuICAgICAgICAgIGZsb2F0IGdldFJheWxlaWdoUGhhc2UoZmxvYXQgZkNvczIpIHtcbiAgICAgICAgICAgIHJldHVybiAwLjc1ICsgMC43NSAqIGZDb3MyO1xuICAgICAgICAgIH1cbiAgICAgICAgYCxcbiAgICAgICAgJ2ZzOiNtYWluLWVuZCc6IGBcbiAgICAgICAgICB2ZWMzIHYzQ2FtZXJhUG9zID0gY2FtZXJhUG9zaXRpb247XG4gICAgICAgICAgdmVjMyB2M1BvcyA9IHBvc2l0aW9uX2NvbW1vbnNwYWNlLnh5ejtcblxuICAgICAgICAgIGZsb2F0IGcyID0gZyAqIGc7XG5cbiAgICAgICAgICB2ZWMzIHYzSW52V2F2ZWxlbmd0aCA9IHZlYzMoMS4wIC8gcG93KDAuNjUwLCA0LjApLCAxLjAgLyBwb3coMC41NzAsIDQuMCksIDEuMCAvIHBvdygwLjQ3NSwgNC4wKSk7XG5cbiAgICAgICAgICBmbG9hdCBmSW5uZXJSYWRpdXMyID0gZklubmVyUmFkaXVzICogZklubmVyUmFkaXVzO1xuICAgICAgICAgIGZsb2F0IGZPdXRlclJhZGl1czIgPSBmT3V0ZXJSYWRpdXMgKiBmT3V0ZXJSYWRpdXM7XG4gICAgICAgICAgZmxvYXQgZlNjYWxlID0gMS4wIC8gKGZPdXRlclJhZGl1cyAtIGZJbm5lclJhZGl1cyk7XG4gICAgICAgICAgZmxvYXQgZlNjYWxlT3ZlclNjYWxlRGVwdGggPSAxLjAgLyAoZk91dGVyUmFkaXVzIC0gZklubmVyUmFkaXVzKSAvIGZTY2FsZURlcHRoO1xuXG4gICAgICAgICAgZmxvYXQgY2FtZXJhSGVpZ2h0MiA9IGxlbmd0aCh2M0NhbWVyYVBvcykgKiBsZW5ndGgodjNDYW1lcmFQb3MpO1xuXG4gICAgICAgICAgdmVjMyB2M1JheSA9IHYzUG9zIC0gdjNDYW1lcmFQb3M7XG4gICAgICAgICAgZmxvYXQgZkZhciA9IGxlbmd0aCh2M1JheSk7XG4gICAgICAgICAgdjNSYXkgLz0gZkZhcjtcblxuICAgICAgICAgIGZsb2F0IEIgPSAyLjAgKiBkb3QodjNDYW1lcmFQb3MsIHYzUmF5KTtcbiAgICAgICAgICBmbG9hdCBDID0gY2FtZXJhSGVpZ2h0MiAtIGZPdXRlclJhZGl1czI7XG4gICAgICAgICAgZmxvYXQgZkRldCA9IG1heCgwLjAsIEIqQiAtIDQuMCAqIEMpO1xuICAgICAgICAgIGZsb2F0IGZOZWFyID0gMC41ICogKC1CIC0gc3FydChmRGV0KSk7XG5cbiAgICAgICAgICB2ZWMzIHYzU3RhcnQgPSB2M0NhbWVyYVBvcyArIHYzUmF5ICogZk5lYXI7XG4gICAgICAgICAgZkZhciAtPSBmTmVhcjtcbiAgICAgICAgICBmbG9hdCBmU3RhcnRBbmdsZSA9IGRvdCh2M1JheSwgdjNTdGFydCkgLyBmT3V0ZXJSYWRpdXM7XG4gICAgICAgICAgZmxvYXQgZlN0YXJ0RGVwdGggPSBleHAoLTEuMCAvIGZTY2FsZURlcHRoKTtcbiAgICAgICAgICBmbG9hdCBmU3RhcnRPZmZzZXQgPSBmU3RhcnREZXB0aCAqIHNjYWxlKGZTdGFydEFuZ2xlKTtcblxuICAgICAgICAgIGZsb2F0IGZTYW1wbGVMZW5ndGggPSBmRmFyIC8gZlNhbXBsZXM7XG4gICAgICAgICAgZmxvYXQgZlNjYWxlZExlbmd0aCA9IGZTYW1wbGVMZW5ndGggKiBmU2NhbGU7XG4gICAgICAgICAgdmVjMyB2M1NhbXBsZVJheSA9IHYzUmF5ICogZlNhbXBsZUxlbmd0aDtcbiAgICAgICAgICB2ZWMzIHYzU2FtcGxlUG9pbnQgPSB2M1N0YXJ0ICsgdjNTYW1wbGVSYXkgKiAwLjU7XG5cbiAgICAgICAgICB2ZWMzIHYzRnJvbnRDb2xvciA9IHZlYzMoMC4wLCAwLjAsIDAuMCk7XG4gICAgICAgICAgZm9yKGludCBpPTA7IGk8blNhbXBsZXM7IGkrKylcbiAgICAgICAgICB7XG4gICAgICAgICAgICBmbG9hdCBmSGVpZ2h0ID0gbGVuZ3RoKHYzU2FtcGxlUG9pbnQpO1xuICAgICAgICAgICAgZmxvYXQgZkRlcHRoID0gZXhwKGZTY2FsZU92ZXJTY2FsZURlcHRoICogKGZJbm5lclJhZGl1cyAtIGZIZWlnaHQpKTtcbiAgICAgICAgICAgIGZsb2F0IGZMaWdodEFuZ2xlID0gZG90KHYzU3VuUG9zLCB2M1NhbXBsZVBvaW50KSAvIGZIZWlnaHQ7XG4gICAgICAgICAgICBmbG9hdCBmQ2FtZXJhQW5nbGUgPSBkb3QodjNSYXksIHYzU2FtcGxlUG9pbnQpIC8gZkhlaWdodDtcbiAgICAgICAgICAgIGZsb2F0IGZTY2F0dGVyID0gKGZTdGFydE9mZnNldCArIGZEZXB0aCAqIChzY2FsZShmTGlnaHRBbmdsZSkgLSBzY2FsZShmQ2FtZXJhQW5nbGUpKSk7XG4gICAgICAgICAgICB2ZWMzIHYzQXR0ZW51YXRlID0gZXhwKC1mU2NhdHRlciAqICh2M0ludldhdmVsZW5ndGggKiBmS3I0UEkgKyBmS200UEkpKTtcblxuICAgICAgICAgICAgdjNGcm9udENvbG9yICs9IHYzQXR0ZW51YXRlICogKGZEZXB0aCAqIGZTY2FsZWRMZW5ndGgpO1xuICAgICAgICAgICAgdjNTYW1wbGVQb2ludCArPSB2M1NhbXBsZVJheTtcbiAgICAgICAgICB9XG5cbiAgICAgICAgICB2ZWMzIGMwID0gdjNGcm9udENvbG9yICogKHYzSW52V2F2ZWxlbmd0aCAqIGZLckVTdW4pO1xuICAgICAgICAgIHZlYzMgYzEgPSB2M0Zyb250Q29sb3IgKiBmS21FU3VuO1xuXG4gICAgICAgICAgdmVjMyB2M0RpcmVjdGlvbiA9IHYzQ2FtZXJhUG9zIC0gdjNQb3M7XG5cbiAgICAgICAgICBmbG9hdCBmQ29zID0gZG90KHYzU3VuUG9zLCB2M0RpcmVjdGlvbikgLyBsZW5ndGgodjNEaXJlY3Rpb24pO1xuICAgICAgICAgIGZsb2F0IGZDb3MyID0gZkNvcyAqIGZDb3M7XG5cbiAgICAgICAgICB2ZWMzIHNreUNvbG9yID0gZ2V0UmF5bGVpZ2hQaGFzZShmQ29zMikgKiBjMCArIGdldE1pZVBoYXNlKGZDb3MsIGZDb3MyLCBnLCBnMikgKiBjMTtcblxuICAgICAgICAgIGZyYWdDb2xvciA9IHZlYzQoc2t5Q29sb3IsIDEuMCk7XG4gICAgICAgICAgZnJhZ0NvbG9yLmEgPSBmcmFnQ29sb3IuYjtcblxuICAgICAgICAgIC8vIEZhZGUgdGhlIHNreSBoYWxvIG91dCBhcyB0aGUgdXNlciB6b29tcyBpbiBwYXN0IGNvbnRpbmVudCBzY2FsZS5cbiAgICAgICAgICBmcmFnQ29sb3IuYSAqPSBmQXRtb3NwaGVyZVpvb21GYWRlO1xuICAgICAgICBgLFxuICAgICAgICAnZnM6REVDS0dMX0ZJTFRFUl9DT0xPUic6IGBgXG4gICAgICB9XG4gICAgfTtcbiAgfVxufVxuXG5jb25zdCBBVE1PU1BIRVJFX1BBUkFNRVRFUlMgPSB7XG4gIGRlcHRoVGVzdDogZmFsc2UsXG4gIGJsZW5kRnVuYzogWzB4MDMwMiwgMHgwMzAzLCAxLCAweDAzMDNdLCAvLyBTUkNfQUxQSEEsIE9ORV9NSU5VU19TUkNfQUxQSEEsIE9ORSwgT05FX01JTlVTX1NSQ19BTFBIQVxuICBibGVuZEVxdWF0aW9uOiBbMHg4MDA2LCAweDgwMDZdIC8vIEZVTkNfQUREXG59O1xuXG5jb25zdCBBVE1PU1BIRVJFX1NLWV9QQVJBTUVURVJTID0ge1xuICBjdWxsRmFjZTogMHgwNDA0LCAvLyBHTC5GUk9OVFxuICBkZXB0aE1hc2s6IGZhbHNlLFxuICBibGVuZEZ1bmM6IFsweDAzMDIsIDB4MDMwMywgMSwgMHgwMzAzXSxcbiAgYmxlbmRFcXVhdGlvbjogWzB4ODAwNiwgMHg4MDA2XVxufTtcblxuZXhwb3J0IGNvbnN0IGdldEdsb2JlQXRtb3NwaGVyZUxheWVyID0gKHtjb25maWcsIHpvb219OiB7Y29uZmlnOiBHbG9iZUNvbmZpZzsgem9vbT86IG51bWJlcn0pID0+IHtcbiAgY29uc3Qgem9vbUZhZGUgPSBhdG1vc3BoZXJlWm9vbUZhZGUoem9vbSA/PyAwKTtcbiAgcmV0dXJuIG5ldyBBdG1vc3BoZXJlTGF5ZXJSZWFsaXN0aWMoe1xuICAgIGlkOiAnYXRtb3NwaGVyZScsXG4gICAgZGF0YTogW1swLCAwLCAwXV0sXG4gICAgY29uZmlnLFxuICAgIHpvb21GYWRlLFxuICAgIGNvb3JkaW5hdGVPcmlnaW46IFswLCAwLCAwXSxcbiAgICBjb29yZGluYXRlU3lzdGVtOiBDT09SRElOQVRFX1NZU1RFTS5DQVJURVNJQU4sXG4gICAgZ2V0UG9zaXRpb246ICgoZDogbnVtYmVyW10pID0+IGQpIGFzIGFueSxcbiAgICBnZXRDb2xvcjogWzAsIDAsIDBdLFxuICAgIG1lc2g6IEdMT0JFX01FU0hfSU5ORVIsXG4gICAgcGFyYW1ldGVyczogQVRNT1NQSEVSRV9QQVJBTUVURVJTXG4gIH0pO1xufTtcblxuZXhwb3J0IGNvbnN0IGdldEdsb2JlQXRtb3NwaGVyZVNreUxheWVyID0gKHtjb25maWcsIHpvb219OiB7Y29uZmlnOiBHbG9iZUNvbmZpZzsgem9vbT86IG51bWJlcn0pID0+IHtcbiAgY29uc3Qgem9vbUZhZGUgPSBhdG1vc3BoZXJlWm9vbUZhZGUoem9vbSA/PyAwKTtcbiAgcmV0dXJuIG5ldyBBdG1vc3BoZXJlU2t5TGF5ZXJSZWFsaXN0aWMoe1xuICAgIGlkOiAnYXRtb3NwaGVyZS1za3knLFxuICAgIGRhdGE6IFtbMCwgMCwgMF1dLFxuICAgIGNvbmZpZyxcbiAgICB6b29tRmFkZSxcbiAgICBjb29yZGluYXRlT3JpZ2luOiBbMCwgMCwgMF0sXG4gICAgY29vcmRpbmF0ZVN5c3RlbTogQ09PUkRJTkFURV9TWVNURU0uQ0FSVEVTSUFOLFxuICAgIGdldFBvc2l0aW9uOiAoKGQ6IG51bWJlcltdKSA9PiBkKSBhcyBhbnksXG4gICAgZ2V0Q29sb3I6IFswLCAwLCAwXSxcbiAgICBtZXNoOiBHTE9CRV9NRVNIX09VVEVSLFxuICAgIHBhcmFtZXRlcnM6IEFUTU9TUEhFUkVfU0tZX1BBUkFNRVRFUlNcbiAgfSk7XG59O1xuIl0sIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7Ozs7Ozs7O0FBT0EsSUFBQUEsS0FBQSxHQUFBQyxPQUFBO0FBQ0EsSUFBQUMsV0FBQSxHQUFBRCxPQUFBO0FBQ0EsSUFBQUUsT0FBQSxHQUFBRixPQUFBO0FBQ0EsSUFBQUcsTUFBQSxHQUFBSCxPQUFBO0FBQ0EsSUFBQUksSUFBQSxHQUFBSixPQUFBO0FBQTRDLFNBQUFLLFFBQUFDLENBQUEsRUFBQUMsQ0FBQSxRQUFBQyxDQUFBLEdBQUFDLE1BQUEsQ0FBQUMsSUFBQSxDQUFBSixDQUFBLE9BQUFHLE1BQUEsQ0FBQUUscUJBQUEsUUFBQUMsQ0FBQSxHQUFBSCxNQUFBLENBQUFFLHFCQUFBLENBQUFMLENBQUEsR0FBQUMsQ0FBQSxLQUFBSyxDQUFBLEdBQUFBLENBQUEsQ0FBQUMsTUFBQSxXQUFBTixDQUFBLFdBQUFFLE1BQUEsQ0FBQUssd0JBQUEsQ0FBQVIsQ0FBQSxFQUFBQyxDQUFBLEVBQUFRLFVBQUEsT0FBQVAsQ0FBQSxDQUFB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
@@ -0,0 +1,6 @@
1
+ declare const EnhancedMultiIconLayer_base: any;
2
+ export default class EnhancedMultiIconLayer extends EnhancedMultiIconLayer_base {
3
+ static layerName: string;
4
+ getShaders(): any;
5
+ }
6
+ export {};
@@ -0,0 +1,63 @@
1
+ "use strict";
2
+
3
+ var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault");
4
+ Object.defineProperty(exports, "__esModule", {
5
+ value: true
6
+ });
7
+ exports["default"] = void 0;
8
+ var _classCallCheck2 = _interopRequireDefault(require("@babel/runtime/helpers/classCallCheck"));
9
+ var _createClass2 = _interopRequireDefault(require("@babel/runtime/helpers/createClass"));
10
+ var _possibleConstructorReturn2 = _interopRequireDefault(require("@babel/runtime/helpers/possibleConstructorReturn"));
11
+ var _getPrototypeOf2 = _interopRequireDefault(require("@babel/runtime/helpers/getPrototypeOf"));
12
+ var _get2 = _interopRequireDefault(require("@babel/runtime/helpers/get"));
13
+ var _inherits2 = _interopRequireDefault(require("@babel/runtime/helpers/inherits"));
14
+ var _defineProperty2 = _interopRequireDefault(require("@babel/runtime/helpers/defineProperty"));
15
+ var _layers = require("@deck.gl/layers");
16
+ 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; }
17
+ 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; }
18
+ 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)); }
19
+ function _isNativeReflectConstruct() { try { var t = !Boolean.prototype.valueOf.call(Reflect.construct(Boolean, [], function () {})); } catch (t) {} return (_isNativeReflectConstruct = function _isNativeReflectConstruct() { return !!t; })(); }
20
+ function _superPropGet(t, o, e, r) { var p = (0, _get2["default"])((0, _getPrototypeOf2["default"])(1 & r ? t.prototype : t), o, e); return 2 & r && "function" == typeof p ? function (t) { return p.apply(e, t); } : p; } // SPDX-License-Identifier: MIT
21
+ // Copyright contributors to the kepler.gl project
22
+ // @ts-ignore _MultiIconLayer is an experimental, underscore-prefixed deck.gl export whose named type binding isn't reliably resolvable through the package barrel under this project's module resolution. Access it off the namespace with a loose type.
23
+ // Back-face culling for globe-mode text labels.
24
+ //
25
+ // deck.gl's TextLayer uses a MultiIconLayer to render glyphs; on a globe, labels
26
+ // anchored on the far hemisphere would otherwise be drawn "through" the planet.
27
+ // This subclass injects a small GLSL
28
+ // snippet into the icon vertex shader that degenerates (collapses) glyph vertices
29
+ // whose anchor is facing away from the camera, so back-side labels disappear.
30
+ //
31
+ // The test uses the true sphere-horizon condition rather than a fixed dot-product
32
+ // cutoff. In deck.gl common space the globe is a sphere centered at the origin, so:
33
+ // - the label anchor position doubles as its outward surface normal, and
34
+ // - a surface point is visible from the camera exactly when the angle between its
35
+ // normal and the camera direction is within the horizon half-angle, i.e.
36
+ // dot(normalize(anchor), normalize(cameraPos)) > R / d
37
+ // where R is the sphere radius (= |anchor|) and d = |cameraPos| is the camera
38
+ // distance from the globe center.
39
+ // This is zoom-independent: the visible cap automatically shrinks as you zoom in and
40
+ // grows as you pull back, so labels don't pop in/out at the limb while zooming.
41
+ var BACKFACE_CULL_INJECT = /* glsl */"\n // Only cull on the globe; leave web-mercator / flat views untouched.\n if (project.projectionMode == PROJECTION_MODE_GLOBE) {\n vec3 anchorCommon = geometry.position.xyz;\n float radius = length(anchorCommon);\n float camDist = length(project.cameraPosition);\n // Guard against degenerate anchors / camera at the center.\n if (radius > 0.0 && camDist > radius) {\n float cosSurface = dot(anchorCommon / radius, project.cameraPosition / camDist);\n // Cosine of the horizon half-angle. Add a tiny margin so labels are hidden just\n // before they wrap exactly onto the limb (avoids glyphs smeared along the edge).\n float cosHorizon = radius / camDist + 0.02;\n if (cosSurface < cosHorizon) {\n // Push the vertex outside clip space so this glyph is discarded. The hook\n // exposes the clip-space position as `position`, not `gl_Position`.\n position = vec4(0.0, 0.0, 2.0, 1.0);\n }\n }\n }\n";
42
+ var EnhancedMultiIconLayer = exports["default"] = /*#__PURE__*/function (_ref) {
43
+ function EnhancedMultiIconLayer() {
44
+ (0, _classCallCheck2["default"])(this, EnhancedMultiIconLayer);
45
+ return _callSuper(this, EnhancedMultiIconLayer, arguments);
46
+ }
47
+ (0, _inherits2["default"])(EnhancedMultiIconLayer, _ref);
48
+ return (0, _createClass2["default"])(EnhancedMultiIconLayer, [{
49
+ key: "getShaders",
50
+ value: function getShaders() {
51
+ var _shaders$inject;
52
+ var shaders = _superPropGet(EnhancedMultiIconLayer, "getShaders", this, 3)([]);
53
+ var existing = ((_shaders$inject = shaders.inject) === null || _shaders$inject === void 0 ? void 0 : _shaders$inject['vs:DECKGL_FILTER_GL_POSITION']) || '';
54
+ return _objectSpread(_objectSpread({}, shaders), {}, {
55
+ inject: _objectSpread(_objectSpread({}, shaders.inject || {}), {}, {
56
+ 'vs:DECKGL_FILTER_GL_POSITION': "".concat(existing, "\n").concat(BACKFACE_CULL_INJECT)
57
+ })
58
+ });
59
+ }
60
+ }]);
61
+ }(_layers._MultiIconLayer);
62
+ (0, _defineProperty2["default"])(EnhancedMultiIconLayer, "layerName", 'EnhancedMultiIconLayer');
63
+ //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJfbGF5ZXJzIiwicmVxdWlyZSIsIm93bktleXMiLCJlIiwiciIsInQiLCJPYmplY3QiLCJrZXlzIiwiZ2V0T3duUHJvcGVydHlTeW1ib2xzIiwibyIsImZpbHRlciIsImdldE93blByb3BlcnR5RGVzY3JpcHRvciIsImVudW1lcmFibGUiLCJwdXNoIiwiYXBwbHkiLCJfb2JqZWN0U3ByZWFkIiwiYXJndW1lbnRzIiwibGVuZ3RoIiwiZm9yRWFjaCIsIl9kZWZpbmVQcm9wZXJ0eTIiLCJnZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3JzIiwiZGVmaW5lUHJvcGVydGllcyIsImRlZmluZVByb3BlcnR5IiwiX2NhbGxTdXBlciIsIl9nZXRQcm90b3R5cGVPZjIiLCJfcG9zc2libGVDb25zdHJ1Y3RvclJldHVybjIiLCJfaXNOYXRpdmVSZWZsZWN0Q29uc3RydWN0IiwiUmVmbGVjdCIsImNvbnN0cnVjdCIsImNvbnN0cnVjdG9yIiwiQm9vbGVhbiIsInByb3RvdHlwZSIsInZhbHVlT2YiLCJjYWxsIiwiX3N1cGVyUHJvcEdldCIsInAiLCJfZ2V0MiIsIkJBQ0tGQUNFX0NVTExfSU5KRUNUIiwiRW5oYW5jZWRNdWx0aUljb25MYXllciIsImV4cG9ydHMiLCJfcmVmIiwiX2NsYXNzQ2FsbENoZWNrMiIsIl9pbmhlcml0czIiLCJfY3JlYXRlQ2xhc3MyIiwia2V5IiwidmFsdWUiLCJnZXRTaGFkZXJzIiwiX3NoYWRlcnMkaW5qZWN0Iiwic2hhZGVycyIsImV4aXN0aW5nIiwiaW5qZWN0IiwiY29uY2F0IiwiTXVsdGlJY29uTGF5ZXIiXSwic291cmNlcyI6WyIuLi8uLi9zcmMvZ2xvYmUvZW5oYW5jZWQtbXVsdGktaWNvbi1sYXllci50cyJdLCJzb3VyY2VzQ29udGVudCI6WyIvLyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogTUlUXG4vLyBDb3B5cmlnaHQgY29udHJpYnV0b3JzIHRvIHRoZSBrZXBsZXIuZ2wgcHJvamVjdFxuXG4vLyBAdHMtaWdub3JlIF9NdWx0aUljb25MYXllciBpcyBhbiBleHBlcmltZW50YWwsIHVuZGVyc2NvcmUtcHJlZml4ZWQgZGVjay5nbCBleHBvcnQgd2hvc2UgbmFtZWQgdHlwZSBiaW5kaW5nIGlzbid0IHJlbGlhYmx5IHJlc29sdmFibGUgdGhyb3VnaCB0aGUgcGFja2FnZSBiYXJyZWwgdW5kZXIgdGhpcyBwcm9qZWN0J3MgbW9kdWxlIHJlc29sdXRpb24uIEFjY2VzcyBpdCBvZmYgdGhlIG5hbWVzcGFjZSB3aXRoIGEgbG9vc2UgdHlwZS5cbmltcG9ydCB7X011bHRpSWNvbkxheWVyIGFzIE11bHRpSWNvbkxheWVyfSBmcm9tICdAZGVjay5nbC9sYXllcnMnO1xuXG4vLyBCYWNrLWZhY2UgY3VsbGluZyBmb3IgZ2xvYmUtbW9kZSB0ZXh0IGxhYmVscy5cbi8vXG4vLyBkZWNrLmdsJ3MgVGV4dExheWVyIHVzZXMgYSBNdWx0aUljb25MYXllciB0byByZW5kZXIgZ2x5cGhzOyBvbiBhIGdsb2JlLCBsYWJlbHNcbi8vIGFuY2hvcmVkIG9uIHRoZSBmYXIgaGVtaXNwaGVyZSB3b3VsZCBvdGhlcndpc2UgYmUgZHJhd24gXCJ0aHJvdWdoXCIgdGhlIHBsYW5ldC5cbi8vIFRoaXMgc3ViY2xhc3MgaW5qZWN0cyBhIHNtYWxsIEdMU0xcbi8vIHNuaXBwZXQgaW50byB0aGUgaWNvbiB2ZXJ0ZXggc2hhZGVyIHRoYXQgZGVnZW5lcmF0ZXMgKGNvbGxhcHNlcykgZ2x5cGggdmVydGljZXNcbi8vIHdob3NlIGFuY2hvciBpcyBmYWNpbmcgYXdheSBmcm9tIHRoZSBjYW1lcmEsIHNvIGJhY2stc2lkZSBsYWJlbHMgZGlzYXBwZWFyLlxuLy9cbi8vIFRoZSB0ZXN0IHVzZXMgdGhlIHRydWUgc3BoZXJlLWhvcml6b24gY29uZGl0aW9uIHJhdGhlciB0aGFuIGEgZml4ZWQgZG90LXByb2R1Y3Rcbi8vIGN1dG9mZi4gSW4gZGVjay5nbCBjb21tb24gc3BhY2UgdGhlIGdsb2JlIGlzIGEgc3BoZXJlIGNlbnRlcmVkIGF0IHRoZSBvcmlnaW4sIHNvOlxuLy8gICAtIHRoZSBsYWJlbCBhbmNob3IgcG9zaXRpb24gZG91YmxlcyBhcyBpdHMgb3V0d2FyZCBzdXJmYWNlIG5vcm1hbCwgYW5kXG4vLyAgIC0gYSBzdXJmYWNlIHBvaW50IGlzIHZpc2libGUgZnJvbSB0aGUgY2FtZXJhIGV4YWN0bHkgd2hlbiB0aGUgYW5nbGUgYmV0d2VlbiBpdHNcbi8vICAgICBub3JtYWwgYW5kIHRoZSBjYW1lcmEgZGlyZWN0aW9uIGlzIHdpdGhpbiB0aGUgaG9yaXpvbiBoYWxmLWFuZ2xlLCBpLmUuXG4vLyAgICAgICAgIGRvdChub3JtYWxpemUoYW5jaG9yKSwgbm9ybWFsaXplKGNhbWVyYVBvcykpID4gUiAvIGRcbi8vICAgICB3aGVyZSBSIGlzIHRoZSBzcGhlcmUgcmFkaXVzICg9IHxhbmNob3J8KSBhbmQgZCA9IHxjYW1lcmFQb3N8IGlzIHRoZSBjYW1lcmFcbi8vICAgICBkaXN0YW5jZSBmcm9tIHRoZSBnbG9iZSBjZW50ZXIuXG4vLyBUaGlzIGlzIHpvb20taW5kZXBlbmRlbnQ6IHRoZSB2aXNpYmxlIGNhcCBhdXRvbWF0aWNhbGx5IHNocmlua3MgYXMgeW91IHpvb20gaW4gYW5kXG4vLyBncm93cyBhcyB5b3UgcHVsbCBiYWNrLCBzbyBsYWJlbHMgZG9uJ3QgcG9wIGluL291dCBhdCB0aGUgbGltYiB3aGlsZSB6b29taW5nLlxuY29uc3QgQkFDS0ZBQ0VfQ1VMTF9JTkpFQ1QgPSAvKiBnbHNsICovIGBcbiAgLy8gT25seSBjdWxsIG9uIHRoZSBnbG9iZTsgbGVhdmUgd2ViLW1lcmNhdG9yIC8gZmxhdCB2aWV3cyB1bnRvdWNoZWQuXG4gIGlmIChwcm9qZWN0LnByb2plY3Rpb25Nb2RlID09IFBST0pFQ1RJT05fTU9ERV9HTE9CRSkge1xuICAgIHZlYzMgYW5jaG9yQ29tbW9uID0gZ2VvbWV0cnkucG9zaXRpb24ueHl6O1xuICAgIGZsb2F0IHJhZGl1cyA9IGxlbmd0aChhbmNob3JDb21tb24pO1xuICAgIGZsb2F0IGNhbURpc3QgPSBsZW5ndGgocHJvamVjdC5jYW1lcmFQb3NpdGlvbik7XG4gICAgLy8gR3VhcmQgYWdhaW5zdCBkZWdlbmVyYXRlIGFuY2hvcnMgLyBjYW1lcmEgYXQgdGhlIGNlbnRlci5cbiAgICBpZiAocmFkaXVzID4gMC4wICYmIGNhbURpc3QgPiByYWRpdXMpIHtcbiAgICAgIGZsb2F0IGNvc1N1cmZhY2UgPSBkb3QoYW5jaG9yQ29tbW9uIC8gcmFkaXVzLCBwcm9qZWN0LmNhbWVyYVBvc2l0aW9uIC8gY2FtRGlzdCk7XG4gICAgICAvLyBDb3NpbmUgb2YgdGhlIGhvcml6b24gaGFsZi1hbmdsZS4gQWRkIGEgdGlueSBtYXJnaW4gc28gbGFiZWxzIGFyZSBoaWRkZW4ganVzdFxuICAgICAgLy8gYmVmb3JlIHRoZXkgd3JhcCBleGFjdGx5IG9udG8gdGhlIGxpbWIgKGF2b2lkcyBnbHlwaHMgc21lYXJlZCBhbG9uZyB0aGUgZWRnZSkuXG4gICAgICBmbG9hdCBjb3NIb3Jpem9uID0gcmFkaXVzIC8gY2FtRGlzdCArIDAuMDI7XG4gICAgICBpZiAoY29zU3VyZmFjZSA8IGNvc0hvcml6b24pIHtcbiAgICAgICAgLy8gUHVzaCB0aGUgdmVydGV4IG91dHNpZGUgY2xpcCBzcGFjZSBzbyB0aGlzIGdseXBoIGlzIGRpc2NhcmRlZC4gVGhlIGhvb2tcbiAgICAgICAgLy8gZXhwb3NlcyB0aGUgY2xpcC1zcGFjZSBwb3NpdGlvbiBhcyBcXGBwb3NpdGlvblxcYCwgbm90IFxcYGdsX1Bvc2l0aW9uXFxgLlxuICAgICAgICBwb3NpdGlvbiA9IHZlYzQoMC4wLCAwLjAsIDIuMCwgMS4wKTtcbiAgICAgIH1cbiAgICB9XG4gIH1cbmA7XG5cbmV4cG9ydCBkZWZhdWx0IGNsYXNzIEVuaGFuY2VkTXVsdGlJY29uTGF5ZXIgZXh0ZW5kcyAoTXVsdGlJY29uTGF5ZXIgYXMgYW55KSB7XG4gIHN0YXRpYyBsYXllck5hbWUgPSAnRW5oYW5jZWRNdWx0aUljb25MYXllcic7XG5cbiAgZ2V0U2hhZGVycygpIHtcbiAgICBjb25zdCBzaGFkZXJzID0gc3VwZXIuZ2V0U2hhZGVycygpO1xuICAgIGNvbnN0IGV4aXN0aW5nID0gc2hhZGVycy5pbmplY3Q/LlsndnM6REVDS0dMX0ZJTFRFUl9HTF9QT1NJVElPTiddIHx8ICcnO1xuICAgIHJldHVybiB7XG4gICAgICAuLi5zaGFkZXJzLFxuICAgICAgaW5qZWN0OiB7XG4gICAgICAgIC4uLihzaGFkZXJzLmluamVjdCB8fCB7fSksXG4gICAgICAgICd2czpERUNLR0xfRklMVEVSX0dMX1BPU0lUSU9OJzogYCR7ZXhpc3Rpbmd9XFxuJHtCQUNLRkFDRV9DVUxMX0lOSkVDVH1gXG4gICAgICB9XG4gICAgfTtcbiAgfVxufVxuIl0sIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7Ozs7OztBQUlBLElBQUFBLE9BQUEsR0FBQUMsT0FBQTtBQUFrRSxTQUFBQyxRQUFBQyxDQUFBLEVBQUFDLENBQUEsUUFBQUMsQ0FBQSxHQUFBQyxNQUFBLENBQUFDLElBQUEsQ0FBQUosQ0FBQSxPQUFBRyxNQUFBLENBQUFFLHFCQUFBLFFBQUFDLENBQUEsR0FBQUgsTUFBQSxDQUFBRSxxQkFBQSxDQUFBTCxDQUFBLEdBQUFDLENBQUEsS0FBQUssQ0FBQSxHQUFBQSxDQUFBLENBQUFDLE1BQUEsV0FBQU4sQ0FBQSxXQUFBRSxNQUFBLENBQUFLLHdCQUFBLENBQUFSLENBQUEsRUFBQUMsQ0FBQSxFQUFBUSxVQUFBLE9BQUFQLENBQUEsQ0FBQVEsSUFBQSxDQUFBQyxLQUFBLENBQUFULENBQUEsRUFBQUksQ0FBQSxZQUFBSixDQUFBO0FBQUEsU0FBQVUsY0FBQVosQ0FBQSxhQUFBQyxDQUFBLE1BQUFBLENBQUEsR0FBQVksU0FBQSxDQUFBQyxNQUFBLEVBQUFiLENBQUEsVUFBQUMsQ0FBQSxXQUFBVyxTQUFBLENBQUFaLENBQUEsSUFBQVksU0FBQSxDQUFBWixDQUFBLFFBQUFBLENBQUEsT0FBQUYsT0FBQSxDQUFBSSxNQUFBLENBQUFELENBQUEsT0FBQWEsT0FBQSxXQUFBZCxDQUFBLFFBQUFlLGdCQUFBLGFBQUFoQixDQUFBLEVBQUFDLENBQUEsRUFBQUMsQ0FBQSxDQUFBRCxDQUFBLFNBQUFFLE1BQUEsQ0FBQWMseUJBQUEsR0FBQWQsTUFBQSxDQUFBZSxnQkFBQSxDQUFBbEIsQ0FBQSxFQUFBRyxNQUFBLENBQUFjLHlCQUFBLENBQUFmLENBQUEsS0FBQUgsT0FBQSxDQUFBSSxNQUFBLENBQUFELENBQUEsR0FBQWEsT0FBQSxXQUFBZCxDQUFBLElBQUFFLE1BQUEsQ0FBQWdCLGNBQUEsQ0FBQW5CLENBQUEsRUFBQUMsQ0FBQSxFQUFBRSxNQUFBLENBQUFLLHdCQUFBLENBQUFOLENBQUEsRUFBQUQsQ0FBQSxpQkFBQUQsQ0FBQTtBQUFBLFNBQUFvQixXQUFBbEIsQ0FBQSxFQUFBSSxDQUFBLEVBQUFOLENBQUEsV0FBQU0sQ0FBQSxPQUFBZSxnQkFBQSxhQUFBZixDQUFBLE9BQUFnQiwyQkFBQSxhQUFBcEIsQ0FBQSxFQUFBcUIseUJBQUEsS0FBQUMsT0FBQSxDQUFBQyxTQUFBLENBQUFuQixDQUFBLEVBQUFOLENBQUEsWUFBQXFCLGdCQUFBLGFBQUFuQixDQUFBLEVBQUF3QixXQUFBLElBQUFwQixDQUFBLENBQUFLLEtBQUEsQ0FBQVQsQ0FBQSxFQUFBRixDQUFBO0FBQUEsU0FBQXVCLDBCQUFBLGNBQUFyQixDQUFBLElBQUF5QixPQUFBLENBQUFDLFNBQUEsQ0FBQUMsT0FBQSxDQUFBQyxJQUFBLENBQUFOLE9BQUEsQ0FBQUMsU0FBQSxDQUFBRSxPQUFBLGlDQUFBekIsQ0FBQSxhQUFBcUIseUJBQUEsWUFBQUEsMEJBQUEsYUFBQXJCLENBQUE7QUFBQSxTQUFBNkIsY0FBQTdCLENBQUEsRUFBQUksQ0FBQSxFQUFBTixDQUFBLEVBQUFDLENBQUEsUUFBQStCLENBQUEsT0FBQUMsS0FBQSxpQkFBQVosZ0JBQUEsaUJBQUFwQixDQUFBLEdBQUFDLENBQUEsQ0FBQTBCLFNBQUEsR0FBQTFCLENBQUEsR0FBQUksQ0FBQSxFQUFBTixDQUFBLGNBQUFDLENBQUEseUJBQUErQixDQUFBLGFBQUE5QixDQUFBLFdBQUE4QixDQUFBLENBQUFyQixLQUFBLENBQUFYLENBQUEsRUFBQUUsQ0FBQSxPQUFBOEIsQ0FBQSxJQUpsRTtBQUNBO0FBRUE7QUFHQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxJQUFNRSxvQkFBb0IsR0FBRyxxOUJBbUI1QjtBQUFDLElBRW1CQyxzQkFBc0IsR0FBQUMsT0FBQSxxQ0FBQUMsSUFBQTtFQUFBLFNBQUFGLHVCQUFBO0lBQUEsSUFBQUcsZ0JBQUEsbUJBQUFILHNCQUFBO0lBQUEsT0FBQWYsVUFBQSxPQUFBZSxzQkFBQSxFQUFBdEIsU0FBQTtFQUFBO0VBQUEsSUFBQTBCLFVBQUEsYUFBQUosc0JBQUEsRUFBQUUsSUFBQTtFQUFBLFdBQUFHLGFBQUEsYUFBQUwsc0JBQUE7SUFBQU0sR0FBQTtJQUFBQyxLQUFBLEVBR3pDLFNBQUFDLFVBQVVBLENBQUEsRUFBRztNQUFBLElBQUFDLGVBQUE7TUFDWCxJQUFNQyxPQUFPLEdBQUFkLGFBQUEsQ0FBQUksc0JBQUEsNEJBQXFCO01BQ2xDLElBQU1XLFFBQVEsR0FBRyxFQUFBRixlQUFBLEdBQUFDLE9BQU8sQ0FBQ0UsTUFBTSxjQUFBSCxlQUFBLHVCQUFkQSxlQUFBLENBQWlCLDhCQUE4QixDQUFDLEtBQUksRUFBRTtNQUN2RSxPQUFBaEMsYUFBQSxDQUFBQSxhQUFBLEtBQ0tpQyxPQUFPO1FBQ1ZFLE1BQU0sRUFBQW5DLGFBQUEsQ0FBQUEsYUFBQSxLQUNBaUMsT0FBTyxDQUFDRSxNQUFNLElBQUksQ0FBQyxDQUFDO1VBQ3hCLDhCQUE4QixLQUFBQyxNQUFBLENBQUtGLFFBQVEsUUFBQUUsTUFBQSxDQUFLZCxvQkFBb0I7UUFBRTtNQUN2RTtJQUVMO0VBQUM7QUFBQSxFQWJrRGUsdUJBQWM7QUFBQSxJQUFBakMsZ0JBQUEsYUFBOUNtQixzQkFBc0IsZUFDdEIsd0JBQXdCIiwiaWdub3JlTGlzdCI6W119
@@ -0,0 +1,19 @@
1
+ import { SimpleMeshLayer } from '@deck.gl/mesh-layers';
2
+ import type { RGBColor } from '@kepler.gl/types';
3
+ export declare const GLOBE_COMMON_RADIUS = 256;
4
+ /**
5
+ * Creates a view-oriented disk positioned along the direction from the globe's center to the camera.
6
+ * The disk is a cross-section of the globe between the front (visible) and back side, and it fills
7
+ * the depth buffer so anything on the far side of the globe (e.g. arcs/lines) is depth-culled and
8
+ * hidden behind the planet.
9
+ */
10
+ export declare class GlobeDepthDiskLayer extends SimpleMeshLayer<any> {
11
+ static layerName: string;
12
+ getShaders(): any;
13
+ draw({ uniforms }: {
14
+ uniforms: object;
15
+ }): void;
16
+ }
17
+ export declare const getGlobeDepthDiskLayer: ({ fillColor }: {
18
+ fillColor?: RGBColor;
19
+ }) => GlobeDepthDiskLayer;
@@ -0,0 +1,145 @@
1
+ "use strict";
2
+
3
+ var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault");
4
+ Object.defineProperty(exports, "__esModule", {
5
+ value: true
6
+ });
7
+ exports.getGlobeDepthDiskLayer = exports.GlobeDepthDiskLayer = exports.GLOBE_COMMON_RADIUS = void 0;
8
+ var _classCallCheck2 = _interopRequireDefault(require("@babel/runtime/helpers/classCallCheck"));
9
+ var _createClass2 = _interopRequireDefault(require("@babel/runtime/helpers/createClass"));
10
+ var _possibleConstructorReturn2 = _interopRequireDefault(require("@babel/runtime/helpers/possibleConstructorReturn"));
11
+ var _getPrototypeOf2 = _interopRequireDefault(require("@babel/runtime/helpers/getPrototypeOf"));
12
+ var _get2 = _interopRequireDefault(require("@babel/runtime/helpers/get"));
13
+ var _inherits2 = _interopRequireDefault(require("@babel/runtime/helpers/inherits"));
14
+ var _defineProperty2 = _interopRequireDefault(require("@babel/runtime/helpers/defineProperty"));
15
+ var _core = require("@deck.gl/core");
16
+ var _meshLayers = require("@deck.gl/mesh-layers");
17
+ var _engine = require("@luma.gl/engine");
18
+ var _core2 = require("@math.gl/core");
19
+ var _shaderUtils = require("../layer-utils/shader-utils");
20
+ 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; }
21
+ 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; }
22
+ 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)); }
23
+ function _isNativeReflectConstruct() { try { var t = !Boolean.prototype.valueOf.call(Reflect.construct(Boolean, [], function () {})); } catch (t) {} return (_isNativeReflectConstruct = function _isNativeReflectConstruct() { return !!t; })(); }
24
+ function _superPropGet(t, o, e, r) { var p = (0, _get2["default"])((0, _getPrototypeOf2["default"])(1 & r ? t.prototype : t), o, e); return 2 & r && "function" == typeof p ? function (t) { return p.apply(e, t); } : p; } // SPDX-License-Identifier: MIT
25
+ // Copyright contributors to the kepler.gl project
26
+ // luma.gl 9's PlaneGeometry ignores `radius`; pass explicit type/xlen/ylen so we
27
+ // get a [-1, 1] quad (a `radius: 1` plane would only span [-0.5, 0.5]).
28
+ var PLANE_GEOMETRY = new _engine.PlaneGeometry({
29
+ type: 'x,y',
30
+ xlen: 2,
31
+ ylen: 2
32
+ });
33
+ var DEPTH_DISK_PARAMETERS = {
34
+ // Depth writes only happen with depthTest enabled. The disk is opaque-black-ish
35
+ // and used purely to fill the depth buffer so far-side geometry (arcs/lines) is
36
+ // occluded by the planet.
37
+ depthTest: true,
38
+ cull: false
39
+ };
40
+
41
+ // Earth radius in meters. The disk geometry is a [-1, 1] plane; we scale it into
42
+ // METERS in the vertex shader (like the atmosphere SphereGeometry, whose radius is
43
+ // ~6.4e6 m) and let SimpleMeshLayer's stock projection map it onto the globe —
44
+ // exactly the working path the atmosphere mesh layers use.
45
+ var DEPTH_DISK_FULL_RADIUS = 6.371e6;
46
+
47
+ // Globe common space uses GLOBE_RADIUS = 256 units (see deck.gl's project_globe_).
48
+ // The disk orientation math is done in that 256-unit common space (matching
49
+ // viewport.cameraPosition), then the resulting radius/shift ratios are converted to
50
+ // meters for the shader, since the disk geometry is expressed in meters.
51
+ var GLOBE_COMMON_RADIUS = exports.GLOBE_COMMON_RADIUS = 256;
52
+
53
+ /**
54
+ * Creates a view-oriented disk positioned along the direction from the globe's center to the camera.
55
+ * The disk is a cross-section of the globe between the front (visible) and back side, and it fills
56
+ * the depth buffer so anything on the far side of the globe (e.g. arcs/lines) is depth-culled and
57
+ * hidden behind the planet.
58
+ */
59
+ var GlobeDepthDiskLayer = exports.GlobeDepthDiskLayer = /*#__PURE__*/function (_SimpleMeshLayer) {
60
+ function GlobeDepthDiskLayer() {
61
+ (0, _classCallCheck2["default"])(this, GlobeDepthDiskLayer);
62
+ return _callSuper(this, GlobeDepthDiskLayer, arguments);
63
+ }
64
+ (0, _inherits2["default"])(GlobeDepthDiskLayer, _SimpleMeshLayer);
65
+ return (0, _createClass2["default"])(GlobeDepthDiskLayer, [{
66
+ key: "getShaders",
67
+ value: function getShaders() {
68
+ var shaders = _superPropGet(GlobeDepthDiskLayer, "getShaders", this, 3)([]);
69
+
70
+ // Override the local `pos` computation: reorient the flat [-1,1] plane to face
71
+ // the camera, scale it to meters, and shift it toward the camera along the view
72
+ // axis so it sits at the globe's silhouette cross-section. The stock
73
+ // project_position_to_clipspace call is left untouched so the disk projects onto
74
+ // the globe through the exact same (working) path the atmosphere mesh layers use.
75
+ var vs = (0, _shaderUtils.editShader)(shaders.vs, 'globe depth disk vs', 'vec3 pos = (instanceModelMatrix * positions) * simpleMesh.sizeScale + instanceTranslation;', "mat3 u_matDepthDiskOrientation = mat3(\n u_depthDiskOrientCol0,\n u_depthDiskOrientCol1,\n u_depthDiskOrientCol2\n );\n vec3 pos = (u_matDepthDiskOrientation * positions) * u_depthDiskRadius;\n vDepthDiskPos = pos;\n pos = pos + u_directionToCamera * u_depthDiskShift;\n ");
76
+ var inject = {
77
+ 'vs:#decl': "\n uniform vec3 u_depthDiskOrientCol0;\n uniform vec3 u_depthDiskOrientCol1;\n uniform vec3 u_depthDiskOrientCol2;\n uniform vec3 u_directionToCamera;\n uniform float u_depthDiskShift;\n uniform float u_depthDiskRadius;\n out vec3 vDepthDiskPos;\n ",
78
+ 'fs:#decl': "\n uniform float u_depthDiskRadius;\n in vec3 vDepthDiskPos;\n ",
79
+ 'fs:#main-start': "\n if (length(vDepthDiskPos) > u_depthDiskRadius) {\n discard;\n }\n "
80
+ };
81
+ return _objectSpread(_objectSpread({}, shaders), {}, {
82
+ vs: vs,
83
+ inject: inject
84
+ });
85
+ }
86
+ }, {
87
+ key: "draw",
88
+ value: function draw(_ref) {
89
+ var uniforms = _ref.uniforms;
90
+ var normalizedRadius = GLOBE_COMMON_RADIUS;
91
+ var camPos = new _core2.Vector3(this.context.viewport.cameraPosition);
92
+ var camDir = camPos.clone().normalize();
93
+ var topDir = new _core2.Vector3(0, 0, 1);
94
+ var sideDir = camDir.clone().cross(topDir);
95
+ var sidePoint = sideDir.clone().scale(normalizedRadius);
96
+ var camToSide = sidePoint.clone().subtract(camPos).normalize();
97
+ var adjustedSidePoint = camToSide.cross(topDir).scale(-normalizedRadius);
98
+ var shiftToCamera = camDir.dot(adjustedSidePoint);
99
+ var adjustedDiskRadius = Math.sqrt(normalizedRadius * normalizedRadius - shiftToCamera * shiftToCamera);
100
+
101
+ // Camera-facing orientation: the plane's local X/Y axes map to world `right`/`up`
102
+ // (both perpendicular to the camera direction), and local Z maps to `forward`.
103
+ // Columns are handed to the shader as vec3s to avoid Matrix3 row/column ambiguity.
104
+ var forward = camDir.clone();
105
+ var right = topDir.clone().cross(forward).normalize();
106
+ var up = forward.clone().cross(right).normalize();
107
+ var model = this.state.model;
108
+ if (model) {
109
+ // Use the same uniform-delivery mechanism as the (working) atmosphere layers:
110
+ // raw `uniform` declarations + assignment to model.props.uniforms.
111
+ model.props.uniforms = _objectSpread(_objectSpread({}, model.props.uniforms), {}, {
112
+ // mat3(col0, col1, col2) in GLSL is column-major; mat3 * (x, y, 0) = x*right + y*up.
113
+ u_depthDiskOrientCol0: [right[0], right[1], right[2]],
114
+ u_depthDiskOrientCol1: [up[0], up[1], up[2]],
115
+ u_depthDiskOrientCol2: [forward[0], forward[1], forward[2]],
116
+ u_directionToCamera: [camDir[0], camDir[1], camDir[2]],
117
+ // Convert the common-space (256-unit) radius/shift to meters, since the disk
118
+ // geometry (and therefore `pos`) is expressed in meters.
119
+ u_depthDiskShift: shiftToCamera / normalizedRadius * DEPTH_DISK_FULL_RADIUS,
120
+ u_depthDiskRadius: adjustedDiskRadius / normalizedRadius * DEPTH_DISK_FULL_RADIUS
121
+ });
122
+ }
123
+ _superPropGet(GlobeDepthDiskLayer, "draw", this, 3)([{
124
+ uniforms: uniforms
125
+ }]);
126
+ }
127
+ }]);
128
+ }(_meshLayers.SimpleMeshLayer);
129
+ (0, _defineProperty2["default"])(GlobeDepthDiskLayer, "layerName", 'GlobeDepthDiskLayer');
130
+ var getGlobeDepthDiskLayer = exports.getGlobeDepthDiskLayer = function getGlobeDepthDiskLayer(_ref2) {
131
+ var fillColor = _ref2.fillColor;
132
+ return new GlobeDepthDiskLayer({
133
+ id: 'globe-depth-disk-layer',
134
+ data: [[0, 0, 0]],
135
+ coordinateOrigin: [0, 0, 0],
136
+ coordinateSystem: _core.COORDINATE_SYSTEM.CARTESIAN,
137
+ getPosition: function getPosition(d) {
138
+ return d;
139
+ },
140
+ getColor: fillColor !== null && fillColor !== void 0 ? fillColor : [0, 0, 0],
141
+ mesh: PLANE_GEOMETRY,
142
+ parameters: DEPTH_DISK_PARAMETERS
143
+ });
144
+ };
145
+ //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJfY29yZSIsInJlcXVpcmUiLCJfbWVzaExheWVycyIsIl9lbmdpbmUiLCJfY29yZTIiLCJfc2hhZGVyVXRpbHMiLCJvd25LZXlzIiwiZSIsInIiLCJ0IiwiT2JqZWN0Iiwia2V5cyIsImdldE93blByb3BlcnR5U3ltYm9scyIsIm8iLCJmaWx0ZXIiLCJnZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IiLCJlbnVtZXJhYmxlIiwicHVzaCIsImFwcGx5IiwiX29iamVjdFNwcmVhZCIsImFyZ3VtZW50cyIsImxlbmd0aCIsImZvckVhY2giLCJfZGVmaW5lUHJvcGVydHkyIiwiZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9ycyIsImRlZmluZVByb3BlcnRpZXMiLCJkZWZpbmVQcm9wZXJ0eSIsIl9jYWxsU3VwZXIiLCJfZ2V0UHJvdG90eXBlT2YyIiwiX3Bvc3NpYmxlQ29uc3RydWN0b3JSZXR1cm4yIiwiX2lzTmF0aXZlUmVmbGVjdENvbnN0cnVjdCIsIlJlZmxlY3QiLCJjb25zdHJ1Y3QiLCJjb25zdHJ1Y3RvciIsIkJvb2xlYW4iLCJwcm90b3R5cGUiLCJ2YWx1ZU9mIiwiY2FsbCIsIl9zdXBlclByb3BHZXQiLCJwIiwiX2dldDIiLCJQTEFORV9HRU9NRVRSWSIsIlBsYW5lR2VvbWV0cnkiLCJ0eXBlIiwieGxlbiIsInlsZW4iLCJERVBUSF9ESVNLX1BBUkFNRVRFUlMiLCJkZXB0aFRlc3QiLCJjdWxsIiwiREVQVEhfRElTS19GVUxMX1JBRElVUyIsIkdMT0JFX0NPTU1PTl9SQURJVVMiLCJleHBvcnRzIiwiR2xvYmVEZXB0aERpc2tMYXllciIsIl9TaW1wbGVNZXNoTGF5ZXIiLCJfY2xhc3NDYWxsQ2hlY2syIiwiX2luaGVyaXRzMiIsIl9jcmVhdGVDbGFzczIiLCJrZXkiLCJ2YWx1ZSIsImdldFNoYWRlcnMiLCJzaGFkZXJzIiwidnMiLCJlZGl0U2hhZGVyIiwiaW5qZWN0IiwiZHJhdyIsIl9yZWYiLCJ1bmlmb3JtcyIsIm5vcm1hbGl6ZWRSYWRpdXMiLCJjYW1Qb3MiLCJWZWN0b3IzIiwiY29udGV4dCIsInZpZXdwb3J0IiwiY2FtZXJhUG9zaXRpb24iLCJjYW1EaXIiLCJjbG9uZSIsIm5vcm1hbGl6ZSIsInRvcERpciIsInNpZGVEaXIiLCJjcm9zcyIsInNpZGVQb2ludCIsInNjYWxlIiwiY2FtVG9TaWRlIiwic3VidHJhY3QiLCJhZGp1c3RlZFNpZGVQb2ludCIsInNoaWZ0VG9DYW1lcmEiLCJkb3QiLCJhZGp1c3RlZERpc2tSYWRpdXMiLCJNYXRoIiwic3FydCIsImZvcndhcmQiLCJyaWdodCIsInVwIiwibW9kZWwiLCJzdGF0ZSIsInByb3BzIiwidV9kZXB0aERpc2tPcmllbnRDb2wwIiwidV9kZXB0aERpc2tPcmllbnRDb2wxIiwidV9kZXB0aERpc2tPcmllbnRDb2wyIiwidV9kaXJlY3Rpb25Ub0NhbWVyYSIsInVfZGVwdGhEaXNrU2hpZnQiLCJ1X2RlcHRoRGlza1JhZGl1cyIsIlNpbXBsZU1lc2hMYXllciIsImdldEdsb2JlRGVwdGhEaXNrTGF5ZXIiLCJfcmVmMiIsImZpbGxDb2xvciIsImlkIiwiZGF0YSIsImNvb3JkaW5hdGVPcmlnaW4iLCJjb29yZGluYXRlU3lzdGVtIiwiQ09PUkRJTkFURV9TWVNURU0iLCJDQVJURVNJQU4iLCJnZXRQb3NpdGlvbiIsImQiLCJnZXRDb2xvciIsIm1lc2giLCJwYXJhbWV0ZXJzIl0sInNvdXJjZXMiOlsiLi4vLi4vc3JjL2dsb2JlL2dsb2JlLWRlcHRoLWRpc2stbGF5ZXIudHMiXSwic291cmNlc0NvbnRlbnQiOlsiLy8gU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IE1JVFxuLy8gQ29weXJpZ2h0IGNvbnRyaWJ1dG9ycyB0byB0aGUga2VwbGVyLmdsIHByb2plY3RcblxuaW1wb3J0IHtDT09SRElOQVRFX1NZU1RFTX0gZnJvbSAnQGRlY2suZ2wvY29yZSc7XG5pbXBvcnQge1NpbXBsZU1lc2hMYXllcn0gZnJvbSAnQGRlY2suZ2wvbWVzaC1sYXllcnMnO1xuaW1wb3J0IHtQbGFuZUdlb21ldHJ5fSBmcm9tICdAbHVtYS5nbC9lbmdpbmUnO1xuaW1wb3J0IHtWZWN0b3IzfSBmcm9tICdAbWF0aC5nbC9jb3JlJztcblxuaW1wb3J0IHtlZGl0U2hhZGVyfSBmcm9tICcuLi9sYXllci11dGlscy9zaGFkZXItdXRpbHMnO1xuaW1wb3J0IHR5cGUge1JHQkNvbG9yfSBmcm9tICdAa2VwbGVyLmdsL3R5cGVzJztcblxuLy8gbHVtYS5nbCA5J3MgUGxhbmVHZW9tZXRyeSBpZ25vcmVzIGByYWRpdXNgOyBwYXNzIGV4cGxpY2l0IHR5cGUveGxlbi95bGVuIHNvIHdlXG4vLyBnZXQgYSBbLTEsIDFdIHF1YWQgKGEgYHJhZGl1czogMWAgcGxhbmUgd291bGQgb25seSBzcGFuIFstMC41LCAwLjVdKS5cbmNvbnN0IFBMQU5FX0dFT01FVFJZID0gbmV3IFBsYW5lR2VvbWV0cnkoe1xuICB0eXBlOiAneCx5JyxcbiAgeGxlbjogMixcbiAgeWxlbjogMlxufSBhcyBhbnkpO1xuXG5jb25zdCBERVBUSF9ESVNLX1BBUkFNRVRFUlMgPSB7XG4gIC8vIERlcHRoIHdyaXRlcyBvbmx5IGhhcHBlbiB3aXRoIGRlcHRoVGVzdCBlbmFibGVkLiBUaGUgZGlzayBpcyBvcGFxdWUtYmxhY2staXNoXG4gIC8vIGFuZCB1c2VkIHB1cmVseSB0byBmaWxsIHRoZSBkZXB0aCBidWZmZXIgc28gZmFyLXNpZGUgZ2VvbWV0cnkgKGFyY3MvbGluZXMpIGlzXG4gIC8vIG9jY2x1ZGVkIGJ5IHRoZSBwbGFuZXQuXG4gIGRlcHRoVGVzdDogdHJ1ZSxcbiAgY3VsbDogZmFsc2Vcbn07XG5cbi8vIEVhcnRoIHJhZGl1cyBpbiBtZXRlcnMuIFRoZSBkaXNrIGdlb21ldHJ5IGlzIGEgWy0xLCAxXSBwbGFuZTsgd2Ugc2NhbGUgaXQgaW50b1xuLy8gTUVURVJTIGluIHRoZSB2ZXJ0ZXggc2hhZGVyIChsaWtlIHRoZSBhdG1vc3BoZXJlIFNwaGVyZUdlb21ldHJ5LCB3aG9zZSByYWRpdXMgaXNcbi8vIH42LjRlNiBtKSBhbmQgbGV0IFNpbXBsZU1lc2hMYXllcidzIHN0b2NrIHByb2plY3Rpb24gbWFwIGl0IG9udG8gdGhlIGdsb2JlIOKAlFxuLy8gZXhhY3RseSB0aGUgd29ya2luZyBwYXRoIHRoZSBhdG1vc3BoZXJlIG1lc2ggbGF5ZXJzIHVzZS5cbmNvbnN0IERFUFRIX0RJU0tfRlVMTF9SQURJVVMgPSA2LjM3MWU2O1xuXG4vLyBHbG9iZSBjb21tb24gc3BhY2UgdXNlcyBHTE9CRV9SQURJVVMgPSAyNTYgdW5pdHMgKHNlZSBkZWNrLmdsJ3MgcHJvamVjdF9nbG9iZV8pLlxuLy8gVGhlIGRpc2sgb3JpZW50YXRpb24gbWF0aCBpcyBkb25lIGluIHRoYXQgMjU2LXVuaXQgY29tbW9uIHNwYWNlIChtYXRjaGluZ1xuLy8gdmlld3BvcnQuY2FtZXJhUG9zaXRpb24pLCB0aGVuIHRoZSByZXN1bHRpbmcgcmFkaXVzL3NoaWZ0IHJhdGlvcyBhcmUgY29udmVydGVkIHRvXG4vLyBtZXRlcnMgZm9yIHRoZSBzaGFkZXIsIHNpbmNlIHRoZSBkaXNrIGdlb21ldHJ5IGlzIGV4cHJlc3NlZCBpbiBtZXRlcnMuXG5leHBvcnQgY29uc3QgR0xPQkVfQ09NTU9OX1JBRElVUyA9IDI1NjtcblxuLyoqXG4gKiBDcmVhdGVzIGEgdmlldy1vcmllbnRlZCBkaXNrIHBvc2l0aW9uZWQgYWxvbmcgdGhlIGRpcmVjdGlvbiBmcm9tIHRoZSBnbG9iZSdzIGNlbnRlciB0byB0aGUgY2FtZXJhLlxuICogVGhlIGRpc2sgaXMgYSBjcm9zcy1zZWN0aW9uIG9mIHRoZSBnbG9iZSBiZXR3ZWVuIHRoZSBmcm9udCAodmlzaWJsZSkgYW5kIGJhY2sgc2lkZSwgYW5kIGl0IGZpbGxzXG4gKiB0aGUgZGVwdGggYnVmZmVyIHNvIGFueXRoaW5nIG9uIHRoZSBmYXIgc2lkZSBvZiB0aGUgZ2xvYmUgKGUuZy4gYXJjcy9saW5lcykgaXMgZGVwdGgtY3VsbGVkIGFuZFxuICogaGlkZGVuIGJlaGluZCB0aGUgcGxhbmV0LlxuICovXG5leHBvcnQgY2xhc3MgR2xvYmVEZXB0aERpc2tMYXllciBleHRlbmRzIFNpbXBsZU1lc2hMYXllcjxhbnk+IHtcbiAgc3RhdGljIGxheWVyTmFtZSA9ICdHbG9iZURlcHRoRGlza0xheWVyJztcblxuICBnZXRTaGFkZXJzKCk6IGFueSB7XG4gICAgY29uc3Qgc2hhZGVycyA9IHN1cGVyLmdldFNoYWRlcnMoKTtcblxuICAgIC8vIE92ZXJyaWRlIHRoZSBsb2NhbCBgcG9zYCBjb21wdXRhdGlvbjogcmVvcmllbnQgdGhlIGZsYXQgWy0xLDFdIHBsYW5lIHRvIGZhY2VcbiAgICAvLyB0aGUgY2FtZXJhLCBzY2FsZSBpdCB0byBtZXRlcnMsIGFuZCBzaGlmdCBpdCB0b3dhcmQgdGhlIGNhbWVyYSBhbG9uZyB0aGUgdmlld1xuICAgIC8vIGF4aXMgc28gaXQgc2l0cyBhdCB0aGUgZ2xvYmUncyBzaWxob3VldHRlIGNyb3NzLXNlY3Rpb24uIFRoZSBzdG9ja1xuICAgIC8vIHByb2plY3RfcG9zaXRpb25fdG9fY2xpcHNwYWNlIGNhbGwgaXMgbGVmdCB1bnRvdWNoZWQgc28gdGhlIGRpc2sgcHJvamVjdHMgb250b1xuICAgIC8vIHRoZSBnbG9iZSB0aHJvdWdoIHRoZSBleGFjdCBzYW1lICh3b3JraW5nKSBwYXRoIHRoZSBhdG1vc3BoZXJlIG1lc2ggbGF5ZXJzIHVzZS5cbiAgICBjb25zdCB2cyA9IGVkaXRTaGFkZXIoXG4gICAgICBzaGFkZXJzLnZzLFxuICAgICAgJ2dsb2JlIGRlcHRoIGRpc2sgdnMnLFxuICAgICAgJ3ZlYzMgcG9zID0gKGluc3RhbmNlTW9kZWxNYXRyaXggKiBwb3NpdGlvbnMpICogc2ltcGxlTWVzaC5zaXplU2NhbGUgKyBpbnN0YW5jZVRyYW5zbGF0aW9uOycsXG4gICAgICBgbWF0MyB1X21hdERlcHRoRGlza09yaWVudGF0aW9uID0gbWF0MyhcbiAgICAgICAgIHVfZGVwdGhEaXNrT3JpZW50Q29sMCxcbiAgICAgICAgIHVfZGVwdGhEaXNrT3JpZW50Q29sMSxcbiAgICAgICAgIHVfZGVwdGhEaXNrT3JpZW50Q29sMlxuICAgICAgICk7XG4gICAgICAgdmVjMyBwb3MgPSAodV9tYXREZXB0aERpc2tPcmllbnRhdGlvbiAqIHBvc2l0aW9ucykgKiB1X2RlcHRoRGlza1JhZGl1cztcbiAgICAgICB2RGVwdGhEaXNrUG9zID0gcG9zO1xuICAgICAgIHBvcyA9IHBvcyArIHVfZGlyZWN0aW9uVG9DYW1lcmEgKiB1X2RlcHRoRGlza1NoaWZ0O1xuICAgICAgYFxuICAgICk7XG5cbiAgICBjb25zdCBpbmplY3QgPSB7XG4gICAgICAndnM6I2RlY2wnOiBgXG4gICAgICAgIHVuaWZvcm0gdmVjMyB1X2RlcHRoRGlza09yaWVudENvbDA7XG4gICAgICAgIHVuaWZvcm0gdmVjMyB1X2RlcHRoRGlza09yaWVudENvbDE7XG4gICAgICAgIHVuaWZvcm0gdmVjMyB1X2RlcHRoRGlza09yaWVudENvbDI7XG4gICAgICAgIHVuaWZvcm0gdmVjMyB1X2RpcmVjdGlvblRvQ2FtZXJhO1xuICAgICAgICB1bmlmb3JtIGZsb2F0IHVfZGVwdGhEaXNrU2hpZnQ7XG4gICAgICAgIHVuaWZvcm0gZmxvYXQgdV9kZXB0aERpc2tSYWRpdXM7XG4gICAgICAgIG91dCB2ZWMzIHZEZXB0aERpc2tQb3M7XG4gICAgICBgLFxuICAgICAgJ2ZzOiNkZWNsJzogYFxuICAgICAgICB1bmlmb3JtIGZsb2F0IHVfZGVwdGhEaXNrUmFkaXVzO1xuICAgICAgICBpbiB2ZWMzIHZEZXB0aERpc2tQb3M7XG4gICAgICBgLFxuICAgICAgJ2ZzOiNtYWluLXN0YXJ0JzogYFxuICAgICAgICBpZiAobGVuZ3RoKHZEZXB0aERpc2tQb3MpID4gdV9kZXB0aERpc2tSYWRpdXMpIHtcbiAgICAgICAgICBkaXNjYXJkO1xuICAgICAgICB9XG4gICAgICBgXG4gICAgfTtcblxuICAgIHJldHVybiB7XG4gICAgICAuLi5zaGFkZXJzLFxuICAgICAgdnMsXG4gICAgICBpbmplY3RcbiAgICB9O1xuICB9XG5cbiAgZHJhdyh7dW5pZm9ybXN9OiB7dW5pZm9ybXM6IG9iamVjdH0pOiB2b2lkIHtcbiAgICBjb25zdCBub3JtYWxpemVkUmFkaXVzID0gR0xPQkVfQ09NTU9OX1JBRElVUztcblxuICAgIGNvbnN0IGNhbVBvcyA9IG5ldyBWZWN0b3IzKCh0aGlzLmNvbnRleHQudmlld3BvcnQgYXMgYW55KS5jYW1lcmFQb3NpdGlvbik7XG4gICAgY29uc3QgY2FtRGlyID0gY2FtUG9zLmNsb25lKCkubm9ybWFsaXplKCk7XG4gICAgY29uc3QgdG9wRGlyID0gbmV3IFZlY3RvcjMoMCwgMCwgMSk7XG4gICAgY29uc3Qgc2lkZURpciA9IGNhbURpci5jbG9uZSgpLmNyb3NzKHRvcERpcik7XG4gICAgY29uc3Qgc2lkZVBvaW50ID0gc2lkZURpci5jbG9uZSgpLnNjYWxlKG5vcm1hbGl6ZWRSYWRpdXMpO1xuXG4gICAgY29uc3QgY2FtVG9TaWRlID0gc2lkZVBvaW50LmNsb25lKCkuc3VidHJhY3QoY2FtUG9zKS5ub3JtYWxpemUoKTtcbiAgICBjb25zdCBhZGp1c3RlZFNpZGVQb2ludCA9IGNhbVRvU2lkZS5jcm9zcyh0b3BEaXIpLnNjYWxlKC1ub3JtYWxpemVkUmFkaXVzKTtcblxuICAgIGNvbnN0IHNoaWZ0VG9DYW1lcmEgPSBjYW1EaXIuZG90KGFkanVzdGVkU2lkZVBvaW50KTtcbiAgICBjb25zdCBhZGp1c3RlZERpc2tSYWRpdXMgPSBNYXRoLnNxcnQoXG4gICAgICBub3JtYWxpemVkUmFkaXVzICogbm9ybWFsaXplZFJhZGl1cyAtIHNoaWZ0VG9DYW1lcmEgKiBzaGlmdFRvQ2FtZXJhXG4gICAgKTtcblxuICAgIC8vIENhbWVyYS1mYWNpbmcgb3JpZW50YXRpb246IHRoZSBwbGFuZSdzIGxvY2FsIFgvWSBheGVzIG1hcCB0byB3b3JsZCBgcmlnaHRgL2B1cGBcbiAgICAvLyAoYm90aCBwZXJwZW5kaWN1bGFyIHRvIHRoZSBjYW1lcmEgZGlyZWN0aW9uKSwgYW5kIGxvY2FsIFogbWFwcyB0byBgZm9yd2FyZGAuXG4gICAgLy8gQ29sdW1ucyBhcmUgaGFuZGVkIHRvIHRoZSBzaGFkZXIgYXMgdmVjM3MgdG8gYXZvaWQgTWF0cml4MyByb3cvY29sdW1uIGFtYmlndWl0eS5cbiAgICBjb25zdCBmb3J3YXJkID0gY2FtRGlyLmNsb25lKCk7XG4gICAgY29uc3QgcmlnaHQgPSB0b3BEaXIuY2xvbmUoKS5jcm9zcyhmb3J3YXJkKS5ub3JtYWxpemUoKTtcbiAgICBjb25zdCB1cCA9IGZvcndhcmQuY2xvbmUoKS5jcm9zcyhyaWdodCkubm9ybWFsaXplKCk7XG5cbiAgICBjb25zdCBtb2RlbCA9IHRoaXMuc3RhdGUubW9kZWw7XG4gICAgaWYgKG1vZGVsKSB7XG4gICAgICAvLyBVc2UgdGhlIHNhbWUgdW5pZm9ybS1kZWxpdmVyeSBtZWNoYW5pc20gYXMgdGhlICh3b3JraW5nKSBhdG1vc3BoZXJlIGxheWVyczpcbiAgICAgIC8vIHJhdyBgdW5pZm9ybWAgZGVjbGFyYXRpb25zICsgYXNzaWdubWVudCB0byBtb2RlbC5wcm9wcy51bmlmb3Jtcy5cbiAgICAgIChtb2RlbCBhcyBhbnkpLnByb3BzLnVuaWZvcm1zID0ge1xuICAgICAgICAuLi4obW9kZWwgYXMgYW55KS5wcm9wcy51bmlmb3JtcyxcbiAgICAgICAgLy8gbWF0Myhjb2wwLCBjb2wxLCBjb2wyKSBpbiBHTFNMIGlzIGNvbHVtbi1tYWpvcjsgbWF0MyAqICh4LCB5LCAwKSA9IHgqcmlnaHQgKyB5KnVwLlxuICAgICAgICB1X2RlcHRoRGlza09yaWVudENvbDA6IFtyaWdodFswXSwgcmlnaHRbMV0sIHJpZ2h0WzJdXSxcbiAgICAgICAgdV9kZXB0aERpc2tPcmllbnRDb2wxOiBbdXBbMF0sIHVwWzFdLCB1cFsyXV0sXG4gICAgICAgIHVfZGVwdGhEaXNrT3JpZW50Q29sMjogW2ZvcndhcmRbMF0sIGZvcndhcmRbMV0sIGZvcndhcmRbMl1dLFxuICAgICAgICB1X2RpcmVjdGlvblRvQ2FtZXJhOiBbY2FtRGlyWzBdLCBjYW1EaXJbMV0sIGNhbURpclsyXV0sXG4gICAgICAgIC8vIENvbnZlcnQgdGhlIGNvbW1vbi1zcGFjZSAoMjU2LXVuaXQpIHJhZGl1cy9zaGlmdCB0byBtZXRlcnMsIHNpbmNlIHRoZSBkaXNrXG4gICAgICAgIC8vIGdlb21ldHJ5IChhbmQgdGhlcmVmb3JlIGBwb3NgKSBpcyBleHByZXNzZWQgaW4gbWV0ZXJzLlxuICAgICAgICB1X2RlcHRoRGlza1NoaWZ0OiAoc2hpZnRUb0NhbWVyYSAvIG5vcm1hbGl6ZWRSYWRpdXMpICogREVQVEhfRElTS19GVUxMX1JBRElVUyxcbiAgICAgICAgdV9kZXB0aERpc2tSYWRpdXM6IChhZGp1c3RlZERpc2tSYWRpdXMgLyBub3JtYWxpemVkUmFkaXVzKSAqIERFUFRIX0RJU0tfRlVMTF9SQURJVVNcbiAgICAgIH07XG4gICAgfVxuICAgIHN1cGVyLmRyYXcoe3VuaWZvcm1zfSk7XG4gIH1cbn1cblxuZXhwb3J0IGNvbnN0IGdldEdsb2JlRGVwdGhEaXNrTGF5ZXIgPSAoe2ZpbGxDb2xvcn06IHtmaWxsQ29sb3I/OiBSR0JDb2xvcn0pID0+IHtcbiAgcmV0dXJuIG5ldyBHbG9iZURlcHRoRGlza0xheWVyKHtcbiAgICBpZDogJ2dsb2JlLWRlcHRoLWRpc2stbGF5ZXInLFxuICAgIGRhdGE6IFtbMCwgMCwgMF1dLFxuICAgIGNvb3JkaW5hdGVPcmlnaW46IFswLCAwLCAwXSxcbiAgICBjb29yZGluYXRlU3lzdGVtOiBDT09SRElOQVRFX1NZU1RFTS5DQVJURVNJQU4sXG4gICAgZ2V0UG9zaXRpb246IChkOiBudW1iZXJbXSkgPT4gZCxcbiAgICBnZXRDb2xvcjogKGZpbGxDb2xvciA/PyBbMCwgMCwgMF0pIGFzIGFueSxcbiAgICBtZXNoOiBQTEFORV9HRU9NRVRSWSxcbiAgICBwYXJhbWV0ZXJzOiBERVBUSF9ESVNLX1BBUkFNRVRFUlNcbiAgfSBhcyBhbnkpO1xufTtcbiJdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7Ozs7Ozs7QUFHQSxJQUFBQSxLQUFBLEdBQUFDLE9BQUE7QUFDQSxJQUFBQyxXQUFBLEdBQUFELE9BQUE7QUFDQSxJQUFBRSxPQUFBLEdBQUFGLE9BQUE7QUFDQSxJQUFBRyxNQUFBLEdBQUFILE9BQUE7QUFF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