@kepler.gl/constants 3.3.0-alpha.4 → 3.3.0-alpha.6
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/cjs/annotation.js +45 -0
- package/dist/cjs/color-palettes.js +461 -0
- package/dist/cjs/colors-by-theme.js +519 -0
- package/dist/cjs/dataset.js +82 -0
- package/dist/cjs/default-settings.js +1729 -0
- package/dist/cjs/gpu-parameters.js +125 -0
- package/dist/cjs/index.js +149 -0
- package/dist/cjs/keyevent.js +26 -0
- package/dist/cjs/layers.js +605 -0
- package/dist/{plot.js → cjs/plot.js} +1 -1
- package/dist/cjs/time.js +194 -0
- package/dist/cjs/tooltip.js +221 -0
- package/dist/cjs/user-feedbacks.js +15 -0
- package/dist/cjs/user-guides.js +19 -0
- package/dist/esm/annotation.js +38 -0
- package/dist/esm/color-palettes.js +453 -0
- package/dist/esm/colors-by-theme.js +513 -0
- package/dist/esm/dataset.js +80 -0
- package/dist/esm/default-settings.js +1723 -0
- package/dist/esm/gpu-parameters.js +119 -0
- package/dist/esm/index.js +18 -0
- package/dist/esm/keyevent.js +19 -0
- package/dist/esm/layers.js +598 -0
- package/dist/esm/plot.js +9 -0
- package/dist/esm/time.js +190 -0
- package/dist/esm/tooltip.js +215 -0
- package/dist/esm/user-feedbacks.js +9 -0
- package/dist/esm/user-guides.js +13 -0
- package/package.json +17 -10
- package/dist/annotation.js +0 -45
- package/dist/color-palettes.js +0 -461
- package/dist/colors-by-theme.js +0 -519
- package/dist/dataset.js +0 -82
- package/dist/default-settings.js +0 -1729
- package/dist/gpu-parameters.js +0 -125
- package/dist/index.js +0 -149
- package/dist/keyevent.js +0 -26
- package/dist/layers.js +0 -605
- package/dist/time.js +0 -194
- package/dist/tooltip.js +0 -221
- package/dist/user-feedbacks.js +0 -15
- package/dist/user-guides.js +0 -19
- package/umd/keplergl.min.js +0 -2
- package/umd/keplergl.min.js.LICENSE.txt +0 -56
|
@@ -0,0 +1,1723 @@
|
|
|
1
|
+
import _toConsumableArray from "@babel/runtime/helpers/esm/toConsumableArray";
|
|
2
|
+
import _slicedToArray from "@babel/runtime/helpers/esm/slicedToArray";
|
|
3
|
+
import _defineProperty from "@babel/runtime/helpers/esm/defineProperty";
|
|
4
|
+
var _FIELD_TYPE_DISPLAY, _FIELD_OPTS;
|
|
5
|
+
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; }
|
|
6
|
+
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) { _defineProperty(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; }
|
|
7
|
+
// SPDX-License-Identifier: MIT
|
|
8
|
+
// Copyright contributors to the kepler.gl project
|
|
9
|
+
|
|
10
|
+
import keyMirror from 'keymirror';
|
|
11
|
+
import { scaleLinear, scaleLog, scaleOrdinal, scalePoint, scaleQuantile, scaleQuantize, scaleSqrt, scaleThreshold } from 'd3-scale';
|
|
12
|
+
import { TOOLTIP_FORMAT_TYPES } from './tooltip';
|
|
13
|
+
export var ACTION_PREFIX = '@@kepler.gl/';
|
|
14
|
+
export var KEPLER_UNFOLDED_BUCKET = 'https://studio-public-data.foursquare.com/statics/keplergl';
|
|
15
|
+
export var BASEMAP_ICON_PREFIX = "geodude";
|
|
16
|
+
export var DEFAULT_MAPBOX_API_URL = 'https://api.mapbox.com';
|
|
17
|
+
export var TRANSITION_DURATION = 0;
|
|
18
|
+
|
|
19
|
+
// Modal Ids
|
|
20
|
+
/**
|
|
21
|
+
* Modal id: data table
|
|
22
|
+
* @constant
|
|
23
|
+
* @type {string}
|
|
24
|
+
* @public
|
|
25
|
+
*/
|
|
26
|
+
export var DATA_TABLE_ID = 'dataTable';
|
|
27
|
+
/**
|
|
28
|
+
* Modal id: delete dataset confirm dialog
|
|
29
|
+
* @constant
|
|
30
|
+
* @type {string}
|
|
31
|
+
* @public
|
|
32
|
+
*/
|
|
33
|
+
export var DELETE_DATA_ID = 'deleteData';
|
|
34
|
+
/**
|
|
35
|
+
* Modal id: add data modal
|
|
36
|
+
* @constant
|
|
37
|
+
* @type {string}
|
|
38
|
+
* @public
|
|
39
|
+
*/
|
|
40
|
+
export var ADD_DATA_ID = 'addData';
|
|
41
|
+
/**
|
|
42
|
+
* Modal id: export image modal
|
|
43
|
+
* @constant
|
|
44
|
+
* @type {string}
|
|
45
|
+
* @public
|
|
46
|
+
*/
|
|
47
|
+
export var EXPORT_IMAGE_ID = 'exportImage';
|
|
48
|
+
/**
|
|
49
|
+
* Modal id: export data modal
|
|
50
|
+
* @constant
|
|
51
|
+
* @type {string}
|
|
52
|
+
* @public
|
|
53
|
+
*/
|
|
54
|
+
export var EXPORT_DATA_ID = 'exportData';
|
|
55
|
+
/**
|
|
56
|
+
* Modal id: add custom map style modal
|
|
57
|
+
* @constant
|
|
58
|
+
* @type {string}
|
|
59
|
+
* @public
|
|
60
|
+
*/
|
|
61
|
+
export var ADD_MAP_STYLE_ID = 'addMapStyle';
|
|
62
|
+
/**
|
|
63
|
+
* Modal id: export map modal
|
|
64
|
+
* @constant
|
|
65
|
+
* @type {string}
|
|
66
|
+
* @public
|
|
67
|
+
*/
|
|
68
|
+
export var EXPORT_MAP_ID = 'exportMap';
|
|
69
|
+
/**
|
|
70
|
+
* Modal id: export video modal
|
|
71
|
+
* @constant
|
|
72
|
+
* @type {string}
|
|
73
|
+
* @public
|
|
74
|
+
*/
|
|
75
|
+
export var EXPORT_VIDEO_ID = 'exportVideo';
|
|
76
|
+
/**
|
|
77
|
+
* Modal id: save map modal
|
|
78
|
+
* @constant
|
|
79
|
+
* @type {string}
|
|
80
|
+
* @public
|
|
81
|
+
*/
|
|
82
|
+
export var SAVE_MAP_ID = 'saveMap';
|
|
83
|
+
/**
|
|
84
|
+
* Modal id: confirm to overwrite saved map
|
|
85
|
+
* @constant
|
|
86
|
+
* @type {string}
|
|
87
|
+
* @public
|
|
88
|
+
*/
|
|
89
|
+
export var OVERWRITE_MAP_ID = 'overwriteMap';
|
|
90
|
+
/**
|
|
91
|
+
* Modal id: share map url modal
|
|
92
|
+
* @constant
|
|
93
|
+
* @type {string}
|
|
94
|
+
* @public
|
|
95
|
+
*/
|
|
96
|
+
export var SHARE_MAP_ID = 'shareMap';
|
|
97
|
+
export var KEPLER_GL_NAME = 'kepler.gl';
|
|
98
|
+
|
|
99
|
+
// __PACKAGE_VERSION__ is automatically injected by Babel/Esbuild during the build process
|
|
100
|
+
// Since we are injecting this during the build process with babel
|
|
101
|
+
// while developing VERSION is not defined, we capture the exception and return
|
|
102
|
+
// an empty string which will allow us to retrieve the latest umd version
|
|
103
|
+
export var KEPLER_GL_VERSION = "3.3.0-alpha.6";
|
|
104
|
+
export var KEPLER_GL_WEBSITE = 'http://kepler.gl/';
|
|
105
|
+
export var DIMENSIONS = {
|
|
106
|
+
sidePanel: {
|
|
107
|
+
width: 300,
|
|
108
|
+
margin: {
|
|
109
|
+
top: 12,
|
|
110
|
+
left: 12,
|
|
111
|
+
bottom: 12,
|
|
112
|
+
right: 20
|
|
113
|
+
},
|
|
114
|
+
headerHeight: 96
|
|
115
|
+
},
|
|
116
|
+
mapControl: {
|
|
117
|
+
width: 184,
|
|
118
|
+
padding: 12,
|
|
119
|
+
mapLegend: {
|
|
120
|
+
pinned: {
|
|
121
|
+
bottom: 22,
|
|
122
|
+
right: 12
|
|
123
|
+
}
|
|
124
|
+
}
|
|
125
|
+
}
|
|
126
|
+
};
|
|
127
|
+
|
|
128
|
+
/**
|
|
129
|
+
* Theme name that can be passed to `KeplerGl` `prop.theme`.
|
|
130
|
+
* Available themes are `THEME.light` and `THEME.dark`. Default theme is `THEME.dark`
|
|
131
|
+
* @constant
|
|
132
|
+
* @type {object}
|
|
133
|
+
* @public
|
|
134
|
+
* @example
|
|
135
|
+
* ```js
|
|
136
|
+
* const Map = () => <KeplerGl theme={THEME.light} id="map"/>
|
|
137
|
+
* ```
|
|
138
|
+
*/
|
|
139
|
+
export var THEME = keyMirror({
|
|
140
|
+
light: null,
|
|
141
|
+
dark: null,
|
|
142
|
+
base: null
|
|
143
|
+
});
|
|
144
|
+
export var SIDEBAR_PANELS = [{
|
|
145
|
+
id: 'layer',
|
|
146
|
+
label: 'sidebar.panels.layer',
|
|
147
|
+
onClick: null
|
|
148
|
+
}, {
|
|
149
|
+
id: 'filter',
|
|
150
|
+
label: 'sidebar.panels.filter',
|
|
151
|
+
onClick: null
|
|
152
|
+
}, {
|
|
153
|
+
id: 'interaction',
|
|
154
|
+
label: 'sidebar.panels.interaction',
|
|
155
|
+
onClick: null
|
|
156
|
+
}, {
|
|
157
|
+
id: 'map',
|
|
158
|
+
label: 'sidebar.panels.basemap',
|
|
159
|
+
onClick: null
|
|
160
|
+
}];
|
|
161
|
+
export var PANEL_VIEW_TOGGLES = keyMirror({
|
|
162
|
+
list: null,
|
|
163
|
+
byDataset: null
|
|
164
|
+
});
|
|
165
|
+
|
|
166
|
+
// backward compatibility
|
|
167
|
+
export var PANELS = SIDEBAR_PANELS;
|
|
168
|
+
|
|
169
|
+
// MAP STYLES
|
|
170
|
+
|
|
171
|
+
export var DEFAULT_BLDG_COLOR = '#D1CEC7';
|
|
172
|
+
export var DEFAULT_BACKGROUND_COLOR = '#000000';
|
|
173
|
+
|
|
174
|
+
// assists in identifying basemap background layers when auto-determining the backgroundColor
|
|
175
|
+
export var BASE_MAP_BACKGROUND_LAYER_IDS = ['background', 'bg', 'land', 'water'];
|
|
176
|
+
export var BACKGROUND_LAYER_GROUP_SLUG = 'Background';
|
|
177
|
+
export var THREE_D_BUILDING_LAYER_GROUP_SLUG = '3d building';
|
|
178
|
+
export var BACKGROUND_LAYER_GROUP = {
|
|
179
|
+
slug: BACKGROUND_LAYER_GROUP_SLUG,
|
|
180
|
+
filter: function filter() {
|
|
181
|
+
return false;
|
|
182
|
+
},
|
|
183
|
+
defaultVisibility: false,
|
|
184
|
+
isVisibilityToggleAvailable: false,
|
|
185
|
+
isMoveToTopAvailable: false,
|
|
186
|
+
isColorPickerAvailable: true
|
|
187
|
+
};
|
|
188
|
+
export var DEFAULT_LAYER_GROUPS = [{
|
|
189
|
+
slug: 'label',
|
|
190
|
+
filter: function filter(_ref) {
|
|
191
|
+
var id = _ref.id,
|
|
192
|
+
type = _ref.type;
|
|
193
|
+
return id.match(/(?=(label|place-|poi-))/) || (type === null || type === void 0 ? void 0 : type.match(/(?=(symbol))/));
|
|
194
|
+
},
|
|
195
|
+
defaultVisibility: true,
|
|
196
|
+
isVisibilityToggleAvailable: true,
|
|
197
|
+
isMoveToTopAvailable: true,
|
|
198
|
+
isColorPickerAvailable: false
|
|
199
|
+
}, {
|
|
200
|
+
slug: 'road',
|
|
201
|
+
filter: function filter(_ref2) {
|
|
202
|
+
var id = _ref2.id;
|
|
203
|
+
return id.match(/(?=(road|railway|tunnel|street|bridge))(?!.*label)/);
|
|
204
|
+
},
|
|
205
|
+
defaultVisibility: true,
|
|
206
|
+
isVisibilityToggleAvailable: true,
|
|
207
|
+
isMoveToTopAvailable: true,
|
|
208
|
+
isColorPickerAvailable: false
|
|
209
|
+
}, {
|
|
210
|
+
slug: 'border',
|
|
211
|
+
filter: function filter(_ref3) {
|
|
212
|
+
var id = _ref3.id;
|
|
213
|
+
return id.match(/border|boundaries|boundary/);
|
|
214
|
+
},
|
|
215
|
+
defaultVisibility: false,
|
|
216
|
+
isVisibilityToggleAvailable: true,
|
|
217
|
+
isMoveToTopAvailable: true,
|
|
218
|
+
isColorPickerAvailable: false
|
|
219
|
+
}, {
|
|
220
|
+
slug: 'building',
|
|
221
|
+
filter: function filter(_ref4) {
|
|
222
|
+
var id = _ref4.id;
|
|
223
|
+
return id.match(/building/);
|
|
224
|
+
},
|
|
225
|
+
defaultVisibility: true,
|
|
226
|
+
isVisibilityToggleAvailable: true,
|
|
227
|
+
isMoveToTopAvailable: true,
|
|
228
|
+
isColorPickerAvailable: false
|
|
229
|
+
}, {
|
|
230
|
+
slug: 'water',
|
|
231
|
+
filter: function filter(_ref5) {
|
|
232
|
+
var id = _ref5.id;
|
|
233
|
+
return id.match(/(?=(water|stream|ferry))/);
|
|
234
|
+
},
|
|
235
|
+
defaultVisibility: true,
|
|
236
|
+
isVisibilityToggleAvailable: true,
|
|
237
|
+
isMoveToTopAvailable: true,
|
|
238
|
+
isColorPickerAvailable: false
|
|
239
|
+
}, {
|
|
240
|
+
slug: 'land',
|
|
241
|
+
filter: function filter(_ref6) {
|
|
242
|
+
var id = _ref6.id;
|
|
243
|
+
return id.match(/(?=(parks|landcover|industrial|sand|hillshade))/);
|
|
244
|
+
},
|
|
245
|
+
defaultVisibility: true,
|
|
246
|
+
isVisibilityToggleAvailable: true,
|
|
247
|
+
isMoveToTopAvailable: true,
|
|
248
|
+
isColorPickerAvailable: false
|
|
249
|
+
}, {
|
|
250
|
+
slug: THREE_D_BUILDING_LAYER_GROUP_SLUG,
|
|
251
|
+
filter: function filter() {
|
|
252
|
+
return false;
|
|
253
|
+
},
|
|
254
|
+
defaultVisibility: false,
|
|
255
|
+
isVisibilityToggleAvailable: true,
|
|
256
|
+
isMoveToTopAvailable: true,
|
|
257
|
+
isColorPickerAvailable: true
|
|
258
|
+
}];
|
|
259
|
+
export var BASE_MAP_COLOR_MODES = keyMirror({
|
|
260
|
+
NONE: null,
|
|
261
|
+
DARK: null,
|
|
262
|
+
LIGHT: null
|
|
263
|
+
});
|
|
264
|
+
export var NO_MAP_ID = 'no_map';
|
|
265
|
+
|
|
266
|
+
// Fallback style to use when styles are being fetched, or when
|
|
267
|
+
// a style fails to fetch
|
|
268
|
+
export var EMPTY_MAPBOX_STYLE = {
|
|
269
|
+
version: 8,
|
|
270
|
+
sources: {},
|
|
271
|
+
layers: []
|
|
272
|
+
};
|
|
273
|
+
export var MAP_LIB_OPTIONS = {
|
|
274
|
+
MAPBOX: 'mapbox',
|
|
275
|
+
MAPLIBRE: 'maplibre'
|
|
276
|
+
};
|
|
277
|
+
|
|
278
|
+
/** Mapbox GL JS does not support pitch above 60 degrees */
|
|
279
|
+
export var MAPBOX_MAX_PITCH = 60;
|
|
280
|
+
export var NO_BASEMAP_ICON = "".concat(BASEMAP_ICON_PREFIX, "/NO_BASEMAP.png");
|
|
281
|
+
export var DEFAULT_BASE_MAP_STYLE = 'dark-matter';
|
|
282
|
+
export var DEFAULT_NO_BASEMAP_STYLE = {
|
|
283
|
+
id: NO_MAP_ID,
|
|
284
|
+
label: 'No Basemap',
|
|
285
|
+
url: '',
|
|
286
|
+
icon: NO_BASEMAP_ICON,
|
|
287
|
+
layerGroups: [BACKGROUND_LAYER_GROUP],
|
|
288
|
+
colorMode: BASE_MAP_COLOR_MODES.NONE,
|
|
289
|
+
style: EMPTY_MAPBOX_STYLE
|
|
290
|
+
};
|
|
291
|
+
export var DEFAULT_MAPBOX_STYLES = [{
|
|
292
|
+
id: 'dark',
|
|
293
|
+
label: 'Dark',
|
|
294
|
+
url: 'mapbox://styles/uberdata/cjoqbbf6l9k302sl96tyvka09',
|
|
295
|
+
icon: "".concat(BASEMAP_ICON_PREFIX, "/UBER_DARK_V2.png"),
|
|
296
|
+
layerGroups: DEFAULT_LAYER_GROUPS,
|
|
297
|
+
colorMode: BASE_MAP_COLOR_MODES.DARK,
|
|
298
|
+
complimentaryStyleId: 'light'
|
|
299
|
+
}, {
|
|
300
|
+
id: 'light',
|
|
301
|
+
label: 'Light',
|
|
302
|
+
url: 'mapbox://styles/uberdata/cjoqb9j339k1f2sl9t5ic5bn4',
|
|
303
|
+
icon: "".concat(BASEMAP_ICON_PREFIX, "/UBER_LIGHT_V2.png"),
|
|
304
|
+
layerGroups: DEFAULT_LAYER_GROUPS,
|
|
305
|
+
colorMode: BASE_MAP_COLOR_MODES.LIGHT,
|
|
306
|
+
complimentaryStyleId: 'dark'
|
|
307
|
+
}, {
|
|
308
|
+
id: 'muted',
|
|
309
|
+
label: 'Muted Light',
|
|
310
|
+
url: 'mapbox://styles/uberdata/cjfyl03kp1tul2smf5v2tbdd4',
|
|
311
|
+
icon: "".concat(BASEMAP_ICON_PREFIX, "/UBER_MUTED_LIGHT.png"),
|
|
312
|
+
layerGroups: DEFAULT_LAYER_GROUPS,
|
|
313
|
+
colorMode: BASE_MAP_COLOR_MODES.LIGHT,
|
|
314
|
+
complimentaryStyleId: 'muted_night'
|
|
315
|
+
}, {
|
|
316
|
+
id: 'muted_night',
|
|
317
|
+
label: 'Muted Night',
|
|
318
|
+
url: 'mapbox://styles/uberdata/cjfxhlikmaj1b2soyzevnywgs',
|
|
319
|
+
icon: "".concat(BASEMAP_ICON_PREFIX, "/UBER_MUTED_NIGHT.png"),
|
|
320
|
+
layerGroups: DEFAULT_LAYER_GROUPS,
|
|
321
|
+
colorMode: BASE_MAP_COLOR_MODES.DARK,
|
|
322
|
+
complimentaryStyleId: 'muted'
|
|
323
|
+
}];
|
|
324
|
+
export var DEFAULT_MAPBOX_SATELITE_STYLES = [{
|
|
325
|
+
id: 'satellite',
|
|
326
|
+
label: 'Satellite with streets',
|
|
327
|
+
url: "mapbox://styles/mapbox/satellite-streets-v11",
|
|
328
|
+
icon: "".concat(BASEMAP_ICON_PREFIX, "/UBER_SATELLITE.png"),
|
|
329
|
+
layerGroups: DEFAULT_LAYER_GROUPS,
|
|
330
|
+
colorMode: BASE_MAP_COLOR_MODES.NONE
|
|
331
|
+
}];
|
|
332
|
+
export var DEFAULT_MAPLIBRE_STYLES = [{
|
|
333
|
+
id: 'dark-matter',
|
|
334
|
+
label: 'DarkMatter',
|
|
335
|
+
url: 'https://basemaps.cartocdn.com/gl/dark-matter-gl-style/style.json',
|
|
336
|
+
icon: "".concat(BASEMAP_ICON_PREFIX, "/DARKMATTER.png"),
|
|
337
|
+
layerGroups: DEFAULT_LAYER_GROUPS,
|
|
338
|
+
colorMode: BASE_MAP_COLOR_MODES.DARK,
|
|
339
|
+
complimentaryStyleId: 'positron'
|
|
340
|
+
}, {
|
|
341
|
+
id: 'positron',
|
|
342
|
+
label: 'Positron',
|
|
343
|
+
url: 'https://basemaps.cartocdn.com/gl/positron-gl-style/style.json',
|
|
344
|
+
icon: "".concat(BASEMAP_ICON_PREFIX, "/POSITRON.png"),
|
|
345
|
+
layerGroups: DEFAULT_LAYER_GROUPS,
|
|
346
|
+
colorMode: BASE_MAP_COLOR_MODES.LIGHT,
|
|
347
|
+
complimentaryStyleId: 'dark-matter'
|
|
348
|
+
}, {
|
|
349
|
+
id: 'voyager',
|
|
350
|
+
label: 'Voyager',
|
|
351
|
+
url: 'https://basemaps.cartocdn.com/gl/voyager-gl-style/style.json',
|
|
352
|
+
icon: "".concat(BASEMAP_ICON_PREFIX, "/VOYAGER.png"),
|
|
353
|
+
layerGroups: DEFAULT_LAYER_GROUPS,
|
|
354
|
+
colorMode: BASE_MAP_COLOR_MODES.LIGHT,
|
|
355
|
+
complimentaryStyleId: 'dark-matter'
|
|
356
|
+
}];
|
|
357
|
+
export var DEFAULT_MAP_STYLES = [DEFAULT_NO_BASEMAP_STYLE].concat(DEFAULT_MAPLIBRE_STYLES, DEFAULT_MAPBOX_SATELITE_STYLES, DEFAULT_MAPBOX_STYLES);
|
|
358
|
+
export var GEOJSON_FIELDS = {
|
|
359
|
+
geojson: ['_geojson', 'all_points', 'geojson']
|
|
360
|
+
};
|
|
361
|
+
export var ICON_FIELDS = {
|
|
362
|
+
icon: ['icon']
|
|
363
|
+
};
|
|
364
|
+
export var TRIP_POINT_FIELDS = [['lat', 'lng'], ['lat', 'lon'], ['lat', 'long'], ['latitude', 'longitude']];
|
|
365
|
+
export var ALTITUDE_FIELDS = ['alt', 'altitude'];
|
|
366
|
+
export var TRIP_ARC_FIELDS = {
|
|
367
|
+
lat0: 'begintrip',
|
|
368
|
+
lng0: 'begintrip',
|
|
369
|
+
lat1: 'dropoff',
|
|
370
|
+
lng1: 'dropoff'
|
|
371
|
+
};
|
|
372
|
+
export var FILTER_TYPES = keyMirror({
|
|
373
|
+
range: null,
|
|
374
|
+
select: null,
|
|
375
|
+
input: null,
|
|
376
|
+
timeRange: null,
|
|
377
|
+
multiSelect: null,
|
|
378
|
+
polygon: null
|
|
379
|
+
});
|
|
380
|
+
export var FILTER_VIEW_TYPES = keyMirror({
|
|
381
|
+
side: null,
|
|
382
|
+
enlarged: null,
|
|
383
|
+
minified: null
|
|
384
|
+
});
|
|
385
|
+
export var DEFAULT_FILTER_VIEW_TYPE = FILTER_VIEW_TYPES.side;
|
|
386
|
+
export var SCALE_TYPES = keyMirror({
|
|
387
|
+
ordinal: null,
|
|
388
|
+
quantile: null,
|
|
389
|
+
quantize: null,
|
|
390
|
+
linear: null,
|
|
391
|
+
sqrt: null,
|
|
392
|
+
log: null,
|
|
393
|
+
threshold: null,
|
|
394
|
+
custom: null,
|
|
395
|
+
customOrdinal: null,
|
|
396
|
+
// ordinal domain to linear range
|
|
397
|
+
point: null
|
|
398
|
+
});
|
|
399
|
+
export var SCALE_TYPE_NAMES = {
|
|
400
|
+
ordinal: 'Ordinal',
|
|
401
|
+
quantile: 'Quantile',
|
|
402
|
+
quantize: 'Quantize',
|
|
403
|
+
linear: 'Linear',
|
|
404
|
+
sqrt: 'Sqrt',
|
|
405
|
+
log: 'Log',
|
|
406
|
+
threshold: 'Threshold',
|
|
407
|
+
custom: 'Custom Breaks',
|
|
408
|
+
customOrdinal: 'Custom Ordinal',
|
|
409
|
+
point: 'Point'
|
|
410
|
+
};
|
|
411
|
+
export var SCALE_FUNC = _defineProperty(_defineProperty(_defineProperty(_defineProperty(_defineProperty(_defineProperty(_defineProperty(_defineProperty(_defineProperty(_defineProperty({}, SCALE_TYPES.linear, scaleLinear), SCALE_TYPES.quantize, scaleQuantize), SCALE_TYPES.quantile, scaleQuantile), SCALE_TYPES.ordinal, scaleOrdinal), SCALE_TYPES.sqrt, scaleSqrt), SCALE_TYPES.log, scaleLog), SCALE_TYPES.point, scalePoint), SCALE_TYPES.threshold, scaleThreshold), SCALE_TYPES.custom, scaleThreshold), SCALE_TYPES.customOrdinal, scaleOrdinal);
|
|
412
|
+
export var ALL_FIELD_TYPES = keyMirror({
|
|
413
|
+
"boolean": null,
|
|
414
|
+
date: null,
|
|
415
|
+
geojson: null,
|
|
416
|
+
integer: null,
|
|
417
|
+
real: null,
|
|
418
|
+
string: null,
|
|
419
|
+
timestamp: null,
|
|
420
|
+
point: null,
|
|
421
|
+
array: null,
|
|
422
|
+
object: null,
|
|
423
|
+
geoarrow: null,
|
|
424
|
+
h3: null
|
|
425
|
+
});
|
|
426
|
+
|
|
427
|
+
// Data Table
|
|
428
|
+
export var SORT_ORDER = keyMirror({
|
|
429
|
+
ASCENDING: null,
|
|
430
|
+
DESCENDING: null,
|
|
431
|
+
UNSORT: null
|
|
432
|
+
});
|
|
433
|
+
export var TABLE_OPTION = keyMirror({
|
|
434
|
+
SORT_ASC: null,
|
|
435
|
+
SORT_DES: null,
|
|
436
|
+
UNSORT: null,
|
|
437
|
+
PIN: null,
|
|
438
|
+
UNPIN: null,
|
|
439
|
+
COPY: null,
|
|
440
|
+
FORMAT_COLUMN: null
|
|
441
|
+
});
|
|
442
|
+
export var TABLE_OPTION_LIST = [{
|
|
443
|
+
value: TABLE_OPTION.SORT_ASC,
|
|
444
|
+
display: 'Sort Ascending',
|
|
445
|
+
icon: 'ArrowUp',
|
|
446
|
+
condition: function condition(props) {
|
|
447
|
+
return props.sortTableColumn && props.sortMode !== SORT_ORDER.ASCENDING;
|
|
448
|
+
}
|
|
449
|
+
}, {
|
|
450
|
+
value: TABLE_OPTION.SORT_DES,
|
|
451
|
+
display: 'Sort Descending',
|
|
452
|
+
icon: 'ArrowDown',
|
|
453
|
+
condition: function condition(props) {
|
|
454
|
+
return props.sortTableColumn && props.sortMode !== SORT_ORDER.DESCENDING;
|
|
455
|
+
}
|
|
456
|
+
}, {
|
|
457
|
+
value: TABLE_OPTION.UNSORT,
|
|
458
|
+
display: 'Unsort Column',
|
|
459
|
+
icon: 'Cancel',
|
|
460
|
+
condition: function condition(props) {
|
|
461
|
+
return props.isSorted;
|
|
462
|
+
}
|
|
463
|
+
}, {
|
|
464
|
+
value: TABLE_OPTION.PIN,
|
|
465
|
+
display: 'Pin Column',
|
|
466
|
+
icon: 'Pin',
|
|
467
|
+
condition: function condition(props) {
|
|
468
|
+
return !props.isPinned;
|
|
469
|
+
}
|
|
470
|
+
}, {
|
|
471
|
+
value: TABLE_OPTION.UNPIN,
|
|
472
|
+
display: 'Unpin Column',
|
|
473
|
+
icon: 'Cancel',
|
|
474
|
+
condition: function condition(props) {
|
|
475
|
+
return props.isPinned;
|
|
476
|
+
}
|
|
477
|
+
}, {
|
|
478
|
+
value: TABLE_OPTION.COPY,
|
|
479
|
+
display: 'Copy Column',
|
|
480
|
+
icon: 'Clipboard'
|
|
481
|
+
}, {
|
|
482
|
+
value: TABLE_OPTION.FORMAT_COLUMN,
|
|
483
|
+
display: 'Format Column',
|
|
484
|
+
icon: 'Hash',
|
|
485
|
+
condition: function condition(props) {
|
|
486
|
+
return props.setDisplayFormat;
|
|
487
|
+
}
|
|
488
|
+
}];
|
|
489
|
+
var YELLOW = '248, 194, 28';
|
|
490
|
+
var PINK = '242, 152, 163';
|
|
491
|
+
var PURPLE = '160, 106, 206';
|
|
492
|
+
var BLUE = '140, 210, 205';
|
|
493
|
+
var BLUE2 = '106, 160, 206';
|
|
494
|
+
var BLUE3 = '0, 172, 237';
|
|
495
|
+
var GREEN = '106, 160, 56';
|
|
496
|
+
var GREEN2 = '74, 165, 150';
|
|
497
|
+
var RED = '237, 88, 106';
|
|
498
|
+
var ORANGE = '231, 110, 58';
|
|
499
|
+
export var FIELD_TYPE_DISPLAY = (_FIELD_TYPE_DISPLAY = {}, _defineProperty(_defineProperty(_defineProperty(_defineProperty(_defineProperty(_defineProperty(_defineProperty(_defineProperty(_defineProperty(_defineProperty(_FIELD_TYPE_DISPLAY, ALL_FIELD_TYPES["boolean"], {
|
|
500
|
+
label: 'bool',
|
|
501
|
+
color: PINK
|
|
502
|
+
}), ALL_FIELD_TYPES.date, {
|
|
503
|
+
label: 'date',
|
|
504
|
+
color: PURPLE
|
|
505
|
+
}), ALL_FIELD_TYPES.geojson, {
|
|
506
|
+
label: 'geo',
|
|
507
|
+
color: BLUE2
|
|
508
|
+
}), ALL_FIELD_TYPES.geoarrow, {
|
|
509
|
+
label: 'geo',
|
|
510
|
+
color: BLUE2
|
|
511
|
+
}), ALL_FIELD_TYPES.integer, {
|
|
512
|
+
label: 'int',
|
|
513
|
+
color: YELLOW
|
|
514
|
+
}), ALL_FIELD_TYPES.real, {
|
|
515
|
+
label: 'float',
|
|
516
|
+
color: YELLOW
|
|
517
|
+
}), ALL_FIELD_TYPES.string, {
|
|
518
|
+
label: 'string',
|
|
519
|
+
color: BLUE
|
|
520
|
+
}), ALL_FIELD_TYPES.timestamp, {
|
|
521
|
+
label: 'time',
|
|
522
|
+
color: GREEN
|
|
523
|
+
}), ALL_FIELD_TYPES.point, {
|
|
524
|
+
label: 'point',
|
|
525
|
+
color: BLUE3
|
|
526
|
+
}), ALL_FIELD_TYPES.array, {
|
|
527
|
+
label: 'array',
|
|
528
|
+
color: ORANGE
|
|
529
|
+
}), _defineProperty(_defineProperty(_FIELD_TYPE_DISPLAY, ALL_FIELD_TYPES.object, {
|
|
530
|
+
label: 'object',
|
|
531
|
+
color: GREEN2
|
|
532
|
+
}), ALL_FIELD_TYPES.h3, {
|
|
533
|
+
label: 'h3',
|
|
534
|
+
color: BLUE
|
|
535
|
+
}));
|
|
536
|
+
export var FIELD_COLORS = {
|
|
537
|
+
"default": RED
|
|
538
|
+
};
|
|
539
|
+
export var HIGHLIGH_COLOR_3D = [255, 255, 255, 60];
|
|
540
|
+
export var CHANNEL_SCALES = keyMirror({
|
|
541
|
+
color: null,
|
|
542
|
+
radius: null,
|
|
543
|
+
size: null,
|
|
544
|
+
colorAggr: null,
|
|
545
|
+
sizeAggr: null,
|
|
546
|
+
angle: null
|
|
547
|
+
});
|
|
548
|
+
export var AGGREGATION_TYPES = {
|
|
549
|
+
// default
|
|
550
|
+
count: 'count',
|
|
551
|
+
// linear
|
|
552
|
+
average: 'average',
|
|
553
|
+
maximum: 'maximum',
|
|
554
|
+
minimum: 'minimum',
|
|
555
|
+
median: 'median',
|
|
556
|
+
stdev: 'stdev',
|
|
557
|
+
sum: 'sum',
|
|
558
|
+
variance: 'variance',
|
|
559
|
+
// ordinal
|
|
560
|
+
mode: 'mode',
|
|
561
|
+
countUnique: 'countUnique'
|
|
562
|
+
};
|
|
563
|
+
export var AGGREGATION_TYPE_OPTIONS = Object.entries(AGGREGATION_TYPES).map(function (_ref7) {
|
|
564
|
+
var _ref8 = _slicedToArray(_ref7, 2),
|
|
565
|
+
key = _ref8[0],
|
|
566
|
+
value = _ref8[1];
|
|
567
|
+
return {
|
|
568
|
+
id: key,
|
|
569
|
+
label: key === 'stdev' ? 'Std Deviation' : key === 'countUnique' ? 'Count Unique' : typeof value === 'string' ? value.charAt(0).toUpperCase() + value.slice(1) : value
|
|
570
|
+
};
|
|
571
|
+
});
|
|
572
|
+
export var linearFieldScaleFunctions = _defineProperty(_defineProperty(_defineProperty(_defineProperty({}, CHANNEL_SCALES.color, [SCALE_TYPES.quantize, SCALE_TYPES.quantile, SCALE_TYPES.custom]), CHANNEL_SCALES.radius, [SCALE_TYPES.sqrt]), CHANNEL_SCALES.size, [SCALE_TYPES.linear, SCALE_TYPES.sqrt, SCALE_TYPES.log]), CHANNEL_SCALES.angle, [SCALE_TYPES.linear]);
|
|
573
|
+
var DEFAULT_AGGREGATION_COLOR_SCALES = [SCALE_TYPES.quantize, SCALE_TYPES.quantile, SCALE_TYPES.custom];
|
|
574
|
+
export var linearFieldAggrScaleFunctions = _defineProperty(_defineProperty({}, CHANNEL_SCALES.colorAggr, [AGGREGATION_TYPES.average, AGGREGATION_TYPES.maximum, AGGREGATION_TYPES.minimum, AGGREGATION_TYPES.median, AGGREGATION_TYPES.stdev, AGGREGATION_TYPES.sum, AGGREGATION_TYPES.variance, AGGREGATION_TYPES.count].reduce(function (prev, cur) {
|
|
575
|
+
prev[cur] = DEFAULT_AGGREGATION_COLOR_SCALES;
|
|
576
|
+
return prev;
|
|
577
|
+
}, {})), CHANNEL_SCALES.sizeAggr, _defineProperty(_defineProperty(_defineProperty(_defineProperty(_defineProperty(_defineProperty(_defineProperty({}, AGGREGATION_TYPES.average, [SCALE_TYPES.linear, SCALE_TYPES.sqrt, SCALE_TYPES.log]), AGGREGATION_TYPES.maximum, [SCALE_TYPES.linear, SCALE_TYPES.sqrt, SCALE_TYPES.log]), AGGREGATION_TYPES.minimum, [SCALE_TYPES.linear, SCALE_TYPES.sqrt, SCALE_TYPES.log]), AGGREGATION_TYPES.median, [SCALE_TYPES.linear, SCALE_TYPES.sqrt, SCALE_TYPES.log]), AGGREGATION_TYPES.stdev, [SCALE_TYPES.linear, SCALE_TYPES.sqrt, SCALE_TYPES.log]), AGGREGATION_TYPES.sum, [SCALE_TYPES.linear, SCALE_TYPES.sqrt, SCALE_TYPES.log]), AGGREGATION_TYPES.variance, [SCALE_TYPES.linear, SCALE_TYPES.sqrt, SCALE_TYPES.log]));
|
|
578
|
+
export var ordinalFieldScaleFunctions = _defineProperty(_defineProperty(_defineProperty({}, CHANNEL_SCALES.color, [SCALE_TYPES.ordinal, SCALE_TYPES.customOrdinal]), CHANNEL_SCALES.radius, [SCALE_TYPES.point]), CHANNEL_SCALES.size, [SCALE_TYPES.point]);
|
|
579
|
+
export var ordinalFieldAggrScaleFunctions = _defineProperty(_defineProperty({}, CHANNEL_SCALES.colorAggr, _defineProperty(_defineProperty({}, AGGREGATION_TYPES.mode, [SCALE_TYPES.ordinal]), AGGREGATION_TYPES.countUnique, [SCALE_TYPES.quantize, SCALE_TYPES.quantile])), CHANNEL_SCALES.sizeAggr, {});
|
|
580
|
+
export var notSupportedScaleOpts = _defineProperty(_defineProperty(_defineProperty({}, CHANNEL_SCALES.color, []), CHANNEL_SCALES.radius, []), CHANNEL_SCALES.size, []);
|
|
581
|
+
export var notSupportAggrOpts = _defineProperty(_defineProperty({}, CHANNEL_SCALES.colorAggr, {}), CHANNEL_SCALES.sizeAggr, {});
|
|
582
|
+
|
|
583
|
+
/**
|
|
584
|
+
* Default aggregation are based on ocunt
|
|
585
|
+
*/
|
|
586
|
+
export var DEFAULT_AGGREGATION = _defineProperty(_defineProperty({}, CHANNEL_SCALES.colorAggr, _defineProperty({}, AGGREGATION_TYPES.count, DEFAULT_AGGREGATION_COLOR_SCALES)), CHANNEL_SCALES.sizeAggr, _defineProperty({}, AGGREGATION_TYPES.count, [SCALE_TYPES.linear, SCALE_TYPES.sqrt, SCALE_TYPES.log]));
|
|
587
|
+
|
|
588
|
+
/**
|
|
589
|
+
* Define what type of scale operation is allowed on each type of fields
|
|
590
|
+
*/
|
|
591
|
+
export var FIELD_OPTS = (_FIELD_OPTS = {}, _defineProperty(_defineProperty(_defineProperty(_defineProperty(_defineProperty(_defineProperty(_defineProperty(_defineProperty(_defineProperty(_defineProperty(_FIELD_OPTS, ALL_FIELD_TYPES.string, {
|
|
592
|
+
type: 'categorical',
|
|
593
|
+
scale: _objectSpread(_objectSpread({}, ordinalFieldScaleFunctions), ordinalFieldAggrScaleFunctions),
|
|
594
|
+
format: {
|
|
595
|
+
legend: function legend(d) {
|
|
596
|
+
return d;
|
|
597
|
+
},
|
|
598
|
+
tooltip: []
|
|
599
|
+
}
|
|
600
|
+
}), ALL_FIELD_TYPES.real, {
|
|
601
|
+
type: 'numerical',
|
|
602
|
+
scale: _objectSpread(_objectSpread({}, linearFieldScaleFunctions), linearFieldAggrScaleFunctions),
|
|
603
|
+
format: {
|
|
604
|
+
legend: function legend(d) {
|
|
605
|
+
return d;
|
|
606
|
+
},
|
|
607
|
+
tooltip: [TOOLTIP_FORMAT_TYPES.NONE, TOOLTIP_FORMAT_TYPES.DECIMAL, TOOLTIP_FORMAT_TYPES.PERCENTAGE]
|
|
608
|
+
}
|
|
609
|
+
}), ALL_FIELD_TYPES.timestamp, {
|
|
610
|
+
type: 'time',
|
|
611
|
+
scale: _objectSpread(_objectSpread({}, linearFieldScaleFunctions), notSupportAggrOpts),
|
|
612
|
+
format: {
|
|
613
|
+
legend: function legend(d) {
|
|
614
|
+
return d;
|
|
615
|
+
},
|
|
616
|
+
tooltip: [TOOLTIP_FORMAT_TYPES.NONE, TOOLTIP_FORMAT_TYPES.DATE, TOOLTIP_FORMAT_TYPES.DATE_TIME]
|
|
617
|
+
}
|
|
618
|
+
}), ALL_FIELD_TYPES.integer, {
|
|
619
|
+
type: 'numerical',
|
|
620
|
+
scale: _objectSpread(_objectSpread({}, _objectSpread(_objectSpread({}, linearFieldScaleFunctions), {}, _defineProperty({}, CHANNEL_SCALES.color, [].concat(_toConsumableArray(linearFieldScaleFunctions[CHANNEL_SCALES.color]), [SCALE_TYPES.customOrdinal])))), linearFieldAggrScaleFunctions),
|
|
621
|
+
format: {
|
|
622
|
+
legend: function legend(d) {
|
|
623
|
+
return d;
|
|
624
|
+
},
|
|
625
|
+
tooltip: [TOOLTIP_FORMAT_TYPES.NONE, TOOLTIP_FORMAT_TYPES.DECIMAL, TOOLTIP_FORMAT_TYPES.PERCENTAGE]
|
|
626
|
+
}
|
|
627
|
+
}), ALL_FIELD_TYPES["boolean"], {
|
|
628
|
+
type: 'boolean',
|
|
629
|
+
scale: _objectSpread(_objectSpread({}, ordinalFieldScaleFunctions), ordinalFieldAggrScaleFunctions),
|
|
630
|
+
format: {
|
|
631
|
+
legend: function legend(d) {
|
|
632
|
+
return d;
|
|
633
|
+
},
|
|
634
|
+
tooltip: [TOOLTIP_FORMAT_TYPES.NONE, TOOLTIP_FORMAT_TYPES.BOOLEAN]
|
|
635
|
+
}
|
|
636
|
+
}), ALL_FIELD_TYPES.date, {
|
|
637
|
+
type: 'time',
|
|
638
|
+
scale: _objectSpread(_objectSpread({}, ordinalFieldScaleFunctions), ordinalFieldAggrScaleFunctions),
|
|
639
|
+
format: {
|
|
640
|
+
legend: function legend(d) {
|
|
641
|
+
return d;
|
|
642
|
+
},
|
|
643
|
+
tooltip: [TOOLTIP_FORMAT_TYPES.NONE, TOOLTIP_FORMAT_TYPES.DATE]
|
|
644
|
+
}
|
|
645
|
+
}), ALL_FIELD_TYPES.geojson, {
|
|
646
|
+
type: 'geometry',
|
|
647
|
+
scale: _objectSpread(_objectSpread({}, notSupportedScaleOpts), notSupportAggrOpts),
|
|
648
|
+
format: {
|
|
649
|
+
legend: function legend() {
|
|
650
|
+
return '...';
|
|
651
|
+
},
|
|
652
|
+
tooltip: []
|
|
653
|
+
}
|
|
654
|
+
}), ALL_FIELD_TYPES.geoarrow, {
|
|
655
|
+
type: 'geometry',
|
|
656
|
+
scale: _objectSpread(_objectSpread({}, notSupportedScaleOpts), notSupportAggrOpts),
|
|
657
|
+
format: {
|
|
658
|
+
legend: function legend() {
|
|
659
|
+
return '...';
|
|
660
|
+
},
|
|
661
|
+
tooltip: []
|
|
662
|
+
}
|
|
663
|
+
}), ALL_FIELD_TYPES.object, {
|
|
664
|
+
type: 'numerical',
|
|
665
|
+
scale: {},
|
|
666
|
+
format: {
|
|
667
|
+
legend: function legend() {
|
|
668
|
+
return '...';
|
|
669
|
+
},
|
|
670
|
+
tooltip: []
|
|
671
|
+
}
|
|
672
|
+
}), ALL_FIELD_TYPES.array, {
|
|
673
|
+
type: 'numerical',
|
|
674
|
+
scale: {},
|
|
675
|
+
format: {
|
|
676
|
+
legend: function legend() {
|
|
677
|
+
return '...';
|
|
678
|
+
},
|
|
679
|
+
tooltip: []
|
|
680
|
+
}
|
|
681
|
+
}), _defineProperty(_FIELD_OPTS, ALL_FIELD_TYPES.h3, {
|
|
682
|
+
type: 'h3',
|
|
683
|
+
scale: _objectSpread(_objectSpread({}, notSupportedScaleOpts), notSupportAggrOpts),
|
|
684
|
+
format: {
|
|
685
|
+
legend: function legend() {
|
|
686
|
+
return '...';
|
|
687
|
+
},
|
|
688
|
+
tooltip: []
|
|
689
|
+
}
|
|
690
|
+
}));
|
|
691
|
+
export var CHANNEL_SCALE_SUPPORTED_FIELDS = Object.keys(CHANNEL_SCALES).reduce(function (accu, key) {
|
|
692
|
+
return _objectSpread(_objectSpread({}, accu), {}, _defineProperty({}, key, Object.keys(FIELD_OPTS).filter(function (ft) {
|
|
693
|
+
return FIELD_OPTS[ft].scale[key] && Object.keys(FIELD_OPTS[ft].scale[key]).length;
|
|
694
|
+
})));
|
|
695
|
+
}, {});
|
|
696
|
+
export var DEFAULT_LAYER_COLOR = {
|
|
697
|
+
tripArc: '#9226C6',
|
|
698
|
+
begintrip_lat: '#1E96BE',
|
|
699
|
+
dropoff_lat: '#FF991F',
|
|
700
|
+
request_lat: '#52A353'
|
|
701
|
+
};
|
|
702
|
+
export var DEFAULT_LAYER_COLOR_PALETTE = 'Global Warming';
|
|
703
|
+
export var DEFAULT_LAYER_COLOR_PALETTE_STEPS = 6;
|
|
704
|
+
|
|
705
|
+
// let user pass in default tooltip fields
|
|
706
|
+
export var DEFAULT_TOOLTIP_FIELDS = [];
|
|
707
|
+
export var NO_VALUE_COLOR = [0, 0, 0, 0];
|
|
708
|
+
export var DEFAULT_PICKING_RADIUS = 3;
|
|
709
|
+
export var OVERLAY_BLENDINGS = {
|
|
710
|
+
normal: {
|
|
711
|
+
label: 'overlayBlending.normal',
|
|
712
|
+
value: 'normal'
|
|
713
|
+
},
|
|
714
|
+
screen: {
|
|
715
|
+
label: 'overlayBlending.screen',
|
|
716
|
+
value: 'screen'
|
|
717
|
+
},
|
|
718
|
+
darken: {
|
|
719
|
+
label: 'overlayBlending.darken',
|
|
720
|
+
value: 'darken'
|
|
721
|
+
}
|
|
722
|
+
};
|
|
723
|
+
export var LAYER_BLENDINGS = {
|
|
724
|
+
additive: {
|
|
725
|
+
label: 'layerBlending.additive',
|
|
726
|
+
blendFunc: ['SRC_ALPHA', 'DST_ALPHA'],
|
|
727
|
+
blendEquation: 'FUNC_ADD'
|
|
728
|
+
},
|
|
729
|
+
normal: {
|
|
730
|
+
// reference to
|
|
731
|
+
// https://limnu.com/webgl-blending-youre-probably-wrong/
|
|
732
|
+
label: 'layerBlending.normal',
|
|
733
|
+
blendFunc: ['SRC_ALPHA', 'ONE_MINUS_SRC_ALPHA', 'ONE', 'ONE_MINUS_SRC_ALPHA'],
|
|
734
|
+
blendEquation: ['FUNC_ADD', 'FUNC_ADD']
|
|
735
|
+
},
|
|
736
|
+
subtractive: {
|
|
737
|
+
label: 'layerBlending.subtractive',
|
|
738
|
+
blendFunc: ['ONE', 'ONE_MINUS_DST_COLOR', 'SRC_ALPHA', 'DST_ALPHA'],
|
|
739
|
+
blendEquation: ['FUNC_SUBTRACT', 'FUNC_ADD']
|
|
740
|
+
}
|
|
741
|
+
};
|
|
742
|
+
export var MAX_DEFAULT_TOOLTIPS = 5;
|
|
743
|
+
export var RESOLUTIONS = keyMirror({
|
|
744
|
+
ONE_X: null,
|
|
745
|
+
TWO_X: null
|
|
746
|
+
});
|
|
747
|
+
export var EXPORT_IMG_RATIOS = keyMirror({
|
|
748
|
+
SCREEN: null,
|
|
749
|
+
FOUR_BY_THREE: null,
|
|
750
|
+
SIXTEEN_BY_NINE: null,
|
|
751
|
+
CUSTOM: null
|
|
752
|
+
});
|
|
753
|
+
export var ScreenRatioOption = {
|
|
754
|
+
id: EXPORT_IMG_RATIOS.SCREEN,
|
|
755
|
+
label: 'modal.exportImage.ratioOriginalScreen',
|
|
756
|
+
getSize: function getSize(screenW, screenH) {
|
|
757
|
+
return {
|
|
758
|
+
width: screenW,
|
|
759
|
+
height: screenH
|
|
760
|
+
};
|
|
761
|
+
}
|
|
762
|
+
};
|
|
763
|
+
export var CustomRatioOption = {
|
|
764
|
+
id: EXPORT_IMG_RATIOS.CUSTOM,
|
|
765
|
+
hidden: true,
|
|
766
|
+
label: 'modal.exportImage.ratioCustom',
|
|
767
|
+
getSize: function getSize(mapW, mapH) {
|
|
768
|
+
return {
|
|
769
|
+
width: mapW,
|
|
770
|
+
height: mapH
|
|
771
|
+
};
|
|
772
|
+
}
|
|
773
|
+
};
|
|
774
|
+
export var FourByThreeRatioOption = {
|
|
775
|
+
id: EXPORT_IMG_RATIOS.FOUR_BY_THREE,
|
|
776
|
+
label: 'modal.exportImage.ratio4_3',
|
|
777
|
+
getSize: function getSize(screenW) {
|
|
778
|
+
return {
|
|
779
|
+
width: screenW,
|
|
780
|
+
height: Math.round(screenW * 0.75)
|
|
781
|
+
};
|
|
782
|
+
}
|
|
783
|
+
};
|
|
784
|
+
export var SixteenByNineRatioOption = {
|
|
785
|
+
id: EXPORT_IMG_RATIOS.SIXTEEN_BY_NINE,
|
|
786
|
+
label: 'modal.exportImage.ratio16_9',
|
|
787
|
+
getSize: function getSize(screenW) {
|
|
788
|
+
return {
|
|
789
|
+
width: screenW,
|
|
790
|
+
height: Math.round(screenW * 0.5625)
|
|
791
|
+
};
|
|
792
|
+
}
|
|
793
|
+
};
|
|
794
|
+
export var EXPORT_IMG_RATIO_OPTIONS = [ScreenRatioOption, FourByThreeRatioOption, SixteenByNineRatioOption, CustomRatioOption];
|
|
795
|
+
export var OneXResolutionOption = {
|
|
796
|
+
id: RESOLUTIONS.ONE_X,
|
|
797
|
+
label: '1x',
|
|
798
|
+
available: true,
|
|
799
|
+
scale: 1,
|
|
800
|
+
getSize: function getSize(screenW, screenH) {
|
|
801
|
+
return {
|
|
802
|
+
width: screenW,
|
|
803
|
+
height: screenH
|
|
804
|
+
};
|
|
805
|
+
}
|
|
806
|
+
};
|
|
807
|
+
export var TwoXResolutionOption = {
|
|
808
|
+
id: RESOLUTIONS.TWO_X,
|
|
809
|
+
label: '2x',
|
|
810
|
+
available: true,
|
|
811
|
+
scale: 2,
|
|
812
|
+
getSize: function getSize(screenW, screenH) {
|
|
813
|
+
return {
|
|
814
|
+
width: screenW * 2,
|
|
815
|
+
height: screenH * 2
|
|
816
|
+
};
|
|
817
|
+
}
|
|
818
|
+
};
|
|
819
|
+
|
|
820
|
+
// Fixed dimension options
|
|
821
|
+
export var Resolution1920x1080Option = {
|
|
822
|
+
id: '1920x1080',
|
|
823
|
+
label: '1920 × 1080 (16:9)',
|
|
824
|
+
available: true,
|
|
825
|
+
getSize: function getSize() {
|
|
826
|
+
return {
|
|
827
|
+
width: 1920,
|
|
828
|
+
height: 1080
|
|
829
|
+
};
|
|
830
|
+
}
|
|
831
|
+
};
|
|
832
|
+
export var Resolution1280x720Option = {
|
|
833
|
+
id: '1280x720',
|
|
834
|
+
label: '1280 × 720 (16:9)',
|
|
835
|
+
available: true,
|
|
836
|
+
getSize: function getSize() {
|
|
837
|
+
return {
|
|
838
|
+
width: 1280,
|
|
839
|
+
height: 720
|
|
840
|
+
};
|
|
841
|
+
}
|
|
842
|
+
};
|
|
843
|
+
export var Resolution2560x1440Option = {
|
|
844
|
+
id: '2560x1440',
|
|
845
|
+
label: '2560 × 1440 (16:9)',
|
|
846
|
+
available: true,
|
|
847
|
+
getSize: function getSize() {
|
|
848
|
+
return {
|
|
849
|
+
width: 2560,
|
|
850
|
+
height: 1440
|
|
851
|
+
};
|
|
852
|
+
}
|
|
853
|
+
};
|
|
854
|
+
export var Resolution1600x900Option = {
|
|
855
|
+
id: '1600x900',
|
|
856
|
+
label: '1600 × 900 (16:9)',
|
|
857
|
+
available: true,
|
|
858
|
+
getSize: function getSize() {
|
|
859
|
+
return {
|
|
860
|
+
width: 1600,
|
|
861
|
+
height: 900
|
|
862
|
+
};
|
|
863
|
+
}
|
|
864
|
+
};
|
|
865
|
+
export var Resolution1024x768Option = {
|
|
866
|
+
id: '1024x768',
|
|
867
|
+
label: '1024 × 768 (4:3)',
|
|
868
|
+
available: true,
|
|
869
|
+
getSize: function getSize() {
|
|
870
|
+
return {
|
|
871
|
+
width: 1024,
|
|
872
|
+
height: 768
|
|
873
|
+
};
|
|
874
|
+
}
|
|
875
|
+
};
|
|
876
|
+
export var Resolution1280x960Option = {
|
|
877
|
+
id: '1280x960',
|
|
878
|
+
label: '1280 × 960 (4:3)',
|
|
879
|
+
available: true,
|
|
880
|
+
getSize: function getSize() {
|
|
881
|
+
return {
|
|
882
|
+
width: 1280,
|
|
883
|
+
height: 960
|
|
884
|
+
};
|
|
885
|
+
}
|
|
886
|
+
};
|
|
887
|
+
export var Resolution1600x1200Option = {
|
|
888
|
+
id: '1600x1200',
|
|
889
|
+
label: '1600 × 1200 (4:3)',
|
|
890
|
+
available: true,
|
|
891
|
+
getSize: function getSize() {
|
|
892
|
+
return {
|
|
893
|
+
width: 1600,
|
|
894
|
+
height: 1200
|
|
895
|
+
};
|
|
896
|
+
}
|
|
897
|
+
};
|
|
898
|
+
export var Resolution1920x1440Option = {
|
|
899
|
+
id: '1920x1440',
|
|
900
|
+
label: '1920 × 1440 (4:3)',
|
|
901
|
+
available: true,
|
|
902
|
+
getSize: function getSize() {
|
|
903
|
+
return {
|
|
904
|
+
width: 1920,
|
|
905
|
+
height: 1440
|
|
906
|
+
};
|
|
907
|
+
}
|
|
908
|
+
};
|
|
909
|
+
export var EXPORT_IMG_RESOLUTION_OPTIONS = [OneXResolutionOption, TwoXResolutionOption, Resolution1280x720Option, Resolution1920x1080Option, Resolution2560x1440Option, Resolution1600x900Option, Resolution1024x768Option, Resolution1280x960Option, Resolution1600x1200Option, Resolution1920x1440Option];
|
|
910
|
+
export var EXPORT_DATA_TYPE = keyMirror({
|
|
911
|
+
CSV: null
|
|
912
|
+
// SHAPEFILE: null,
|
|
913
|
+
// JSON: null,
|
|
914
|
+
// GEOJSON: null,
|
|
915
|
+
// TOPOJSON: null
|
|
916
|
+
});
|
|
917
|
+
export var EXPORT_DATA_TYPE_OPTIONS = [{
|
|
918
|
+
id: EXPORT_DATA_TYPE.CSV,
|
|
919
|
+
label: EXPORT_DATA_TYPE.CSV.toLowerCase(),
|
|
920
|
+
available: true
|
|
921
|
+
}
|
|
922
|
+
// {
|
|
923
|
+
// id: EXPORT_DATA_TYPE.SHAPEFILE,
|
|
924
|
+
// label: 'shapefile',
|
|
925
|
+
// available: false
|
|
926
|
+
// },
|
|
927
|
+
// {
|
|
928
|
+
// id: EXPORT_DATA_TYPE.JSON,
|
|
929
|
+
// label: 'json',
|
|
930
|
+
// available: false
|
|
931
|
+
// },
|
|
932
|
+
// {
|
|
933
|
+
// id: EXPORT_DATA_TYPE.GEOJSON,
|
|
934
|
+
// label: 'geojson',
|
|
935
|
+
// available: false
|
|
936
|
+
// },
|
|
937
|
+
// {
|
|
938
|
+
// id: EXPORT_DATA_TYPE.TOPOJSON,
|
|
939
|
+
// label: 'topojson',
|
|
940
|
+
// available: false
|
|
941
|
+
// }
|
|
942
|
+
];
|
|
943
|
+
|
|
944
|
+
// Export map types
|
|
945
|
+
export var EXPORT_MAP_FORMATS = keyMirror({
|
|
946
|
+
HTML: null,
|
|
947
|
+
JSON: null
|
|
948
|
+
});
|
|
949
|
+
export var EXPORT_HTML_MAP_MODES = keyMirror({
|
|
950
|
+
READ: null,
|
|
951
|
+
EDIT: null
|
|
952
|
+
});
|
|
953
|
+
|
|
954
|
+
// Export map options
|
|
955
|
+
export var EXPORT_MAP_FORMAT_OPTIONS = Object.entries(EXPORT_MAP_FORMATS).map(function (entry) {
|
|
956
|
+
return {
|
|
957
|
+
id: entry[0],
|
|
958
|
+
label: entry[1].toLowerCase(),
|
|
959
|
+
available: true
|
|
960
|
+
};
|
|
961
|
+
});
|
|
962
|
+
export function getHTMLMapModeTileUrl(mode) {
|
|
963
|
+
return "https://d1a3f4spazzrp4.cloudfront.net/kepler.gl/documentation/map-".concat(mode.toLowerCase(), "-mode.png");
|
|
964
|
+
}
|
|
965
|
+
export var EXPORT_HTML_MAP_MODE_OPTIONS = Object.entries(EXPORT_HTML_MAP_MODES).map(function (entry) {
|
|
966
|
+
return {
|
|
967
|
+
id: entry[0],
|
|
968
|
+
label: "modal.exportMap.html.".concat(entry[1].toLowerCase()),
|
|
969
|
+
available: true,
|
|
970
|
+
url: getHTMLMapModeTileUrl(entry[1])
|
|
971
|
+
};
|
|
972
|
+
});
|
|
973
|
+
export var DEFAULT_UUID_COUNT = 6;
|
|
974
|
+
export var DEFAULT_NOTIFICATION_MESSAGE = 'MESSAGE_NOT_PROVIDED';
|
|
975
|
+
export var DEFAULT_NOTIFICATION_TYPES = keyMirror({
|
|
976
|
+
info: null,
|
|
977
|
+
error: null,
|
|
978
|
+
warning: null,
|
|
979
|
+
success: null
|
|
980
|
+
});
|
|
981
|
+
export var DEFAULT_NOTIFICATION_TOPICS = keyMirror({
|
|
982
|
+
global: null,
|
|
983
|
+
file: null
|
|
984
|
+
});
|
|
985
|
+
|
|
986
|
+
// Minimum time between identical notifications about deck.gl errors
|
|
987
|
+
export var THROTTLE_NOTIFICATION_TIME = 330;
|
|
988
|
+
|
|
989
|
+
// Animation
|
|
990
|
+
export var BASE_SPEED = 600;
|
|
991
|
+
export var FPS = 60;
|
|
992
|
+
|
|
993
|
+
/**
|
|
994
|
+
* 4 Animation Window Types
|
|
995
|
+
* 1. free
|
|
996
|
+
* |-> |->
|
|
997
|
+
* Current time is a fixed range, animation controller calls next animation frames continuously to animation a moving window
|
|
998
|
+
* The increment id based on domain / BASE_SPEED * SPEED
|
|
999
|
+
*
|
|
1000
|
+
* 2. incremental
|
|
1001
|
+
* | |->
|
|
1002
|
+
* Same as free, current time is a growing range, only the max value of range increment during animation.
|
|
1003
|
+
* The increment is also based on domain / BASE_SPEED * SPEED
|
|
1004
|
+
*
|
|
1005
|
+
* 3. point
|
|
1006
|
+
* o -> o
|
|
1007
|
+
* Current time is a point, animation controller calls next animation frame continuously to animation a moving point
|
|
1008
|
+
* The increment is based on domain / BASE_SPEED * SPEED
|
|
1009
|
+
*
|
|
1010
|
+
* 4. interval
|
|
1011
|
+
* o ~> o
|
|
1012
|
+
* Current time is a point. An array of sorted time steps need to be provided.
|
|
1013
|
+
* animation controller calls next animation at a interval when the point jumps to the next step
|
|
1014
|
+
*/
|
|
1015
|
+
export var ANIMATION_WINDOW = keyMirror({
|
|
1016
|
+
free: null,
|
|
1017
|
+
incremental: null,
|
|
1018
|
+
point: null,
|
|
1019
|
+
interval: null
|
|
1020
|
+
});
|
|
1021
|
+
export var DEFAULT_TIME_FORMAT = 'MM/DD/YY HH:mm:ssa';
|
|
1022
|
+
export var SPEED_CONTROL_RANGE = [0, 10];
|
|
1023
|
+
export var SPEED_CONTROL_STEP = 0.001;
|
|
1024
|
+
|
|
1025
|
+
// Geocoder
|
|
1026
|
+
export var GEOCODER_DATASET_NAME = 'geocoder_dataset';
|
|
1027
|
+
export var GEOCODER_LAYER_ID = 'geocoder_layer';
|
|
1028
|
+
export var GEOCODER_GEO_OFFSET = 0.05;
|
|
1029
|
+
export var GEOCODER_ICON_COLOR = [255, 0, 0];
|
|
1030
|
+
// Base icon size before anchor normalization. The geocoder pin icon is bottom-anchored
|
|
1031
|
+
// and scaled to fit the ScatterplotLayer unit circle (~0.5x), so the rendered size is
|
|
1032
|
+
// compensated here (80 * 2 = 160).
|
|
1033
|
+
export var GEOCODER_ICON_SIZE = 160;
|
|
1034
|
+
|
|
1035
|
+
// Editor
|
|
1036
|
+
export var EDITOR_LAYER_ID = 'kepler_editor_layer';
|
|
1037
|
+
export var EDITOR_LAYER_PICKING_RADIUS = 6;
|
|
1038
|
+
export var EDITOR_MODES = {
|
|
1039
|
+
DRAW_POLYGON: 'DRAW_POLYGON',
|
|
1040
|
+
DRAW_RECTANGLE: 'DRAW_RECTANGLE',
|
|
1041
|
+
EDIT: 'EDIT_VERTEX'
|
|
1042
|
+
};
|
|
1043
|
+
export var PLOT_TYPES = keyMirror({
|
|
1044
|
+
histogram: null,
|
|
1045
|
+
lineChart: null
|
|
1046
|
+
});
|
|
1047
|
+
|
|
1048
|
+
// Filter
|
|
1049
|
+
export var INIT_FILTER_ITEMS_IN_DROPDOWN = 100;
|
|
1050
|
+
|
|
1051
|
+
// GPU Filtering
|
|
1052
|
+
/**
|
|
1053
|
+
* Max number of filter value buffers that deck.gl provides
|
|
1054
|
+
*/
|
|
1055
|
+
export var MAX_GPU_FILTERS = 4;
|
|
1056
|
+
export var MAP_THUMBNAIL_DIMENSION = {
|
|
1057
|
+
width: 300,
|
|
1058
|
+
height: 200
|
|
1059
|
+
};
|
|
1060
|
+
export var MAP_INFO_CHARACTER = {
|
|
1061
|
+
title: 100,
|
|
1062
|
+
description: 100
|
|
1063
|
+
};
|
|
1064
|
+
|
|
1065
|
+
// Load data
|
|
1066
|
+
export var LOADING_METHODS = keyMirror({
|
|
1067
|
+
upload: null,
|
|
1068
|
+
storage: null,
|
|
1069
|
+
tileset: null
|
|
1070
|
+
});
|
|
1071
|
+
export var DEFAULT_FEATURE_FLAGS = {};
|
|
1072
|
+
export var DATASET_FORMATS = keyMirror({
|
|
1073
|
+
row: null,
|
|
1074
|
+
geojson: null,
|
|
1075
|
+
csv: null,
|
|
1076
|
+
keplergl: null,
|
|
1077
|
+
arrow: null,
|
|
1078
|
+
duckdb: null
|
|
1079
|
+
});
|
|
1080
|
+
export var MAP_CONTROLS = keyMirror({
|
|
1081
|
+
visibleLayers: null,
|
|
1082
|
+
mapLegend: null,
|
|
1083
|
+
toggle3d: null,
|
|
1084
|
+
splitMap: null,
|
|
1085
|
+
mapDraw: null,
|
|
1086
|
+
mapLocale: null,
|
|
1087
|
+
effect: null,
|
|
1088
|
+
annotation: null,
|
|
1089
|
+
aiAssistant: null
|
|
1090
|
+
});
|
|
1091
|
+
export var MapViewMode = /*#__PURE__*/function (MapViewMode) {
|
|
1092
|
+
MapViewMode["MODE_2D"] = "MODE_2D";
|
|
1093
|
+
MapViewMode["MODE_3D"] = "MODE_3D";
|
|
1094
|
+
MapViewMode["MODE_GLOBE"] = "MODE_GLOBE";
|
|
1095
|
+
return MapViewMode;
|
|
1096
|
+
}({});
|
|
1097
|
+
|
|
1098
|
+
/**
|
|
1099
|
+
* Minimum zoom level allowed in globe mode. Negative values let the user zoom
|
|
1100
|
+
* out further than the web-mercator default of 0, so the whole globe can be
|
|
1101
|
+
* pulled back to appear smaller on screen.
|
|
1102
|
+
*/
|
|
1103
|
+
export var GLOBE_MIN_ZOOM = 2;
|
|
1104
|
+
|
|
1105
|
+
/**
|
|
1106
|
+
* Maximum zoom in globe mode.
|
|
1107
|
+
*
|
|
1108
|
+
* The previous "empty rectangles" at high zoom were caused by the vector basemap
|
|
1109
|
+
* layer declaring `maxZoom: 23` while the raw tile endpoints only have data to
|
|
1110
|
+
* z16 (mapbox-streets-v8) / z14 (CARTO) — deck then requested non-existent tiles
|
|
1111
|
+
* that 404. That is fixed in `getGlobeBaseLayers` by setting `maxZoom` to each
|
|
1112
|
+
* source's true data max so deck overzooms instead.
|
|
1113
|
+
*
|
|
1114
|
+
* The remaining practical ceiling is float32 precision: deck's globe places
|
|
1115
|
+
* geometry in common space on a sphere of radius 256 with no fp64/relative-to-
|
|
1116
|
+
* center trick, so beyond ~visual-zoom 16 (roughly this mapState zoom minus
|
|
1117
|
+
* `zoomAdjust(lat)` ≈ 1.65 at the equator) geometry starts to jitter/drift.
|
|
1118
|
+
*/
|
|
1119
|
+
export var GLOBE_MAX_ZOOM = 16;
|
|
1120
|
+
|
|
1121
|
+
/**
|
|
1122
|
+
* Maximum absolute center latitude allowed in globe mode. Constrains the camera
|
|
1123
|
+
* target to a band around the equator so the view can't be centered on the
|
|
1124
|
+
* poles (deck.gl's default clamps to ~85°, which lets the camera stare straight
|
|
1125
|
+
* down at a pole). Applies symmetrically to the northern and southern hemisphere.
|
|
1126
|
+
*/
|
|
1127
|
+
export var GLOBE_MAX_LATITUDE = 75;
|
|
1128
|
+
export var DEFAULT_GLOBE_CONFIG = {
|
|
1129
|
+
atmosphere: true,
|
|
1130
|
+
azimuth: false,
|
|
1131
|
+
azimuthAngle: 45,
|
|
1132
|
+
terminator: true,
|
|
1133
|
+
terminatorOpacity: 0.35,
|
|
1134
|
+
basemap: true,
|
|
1135
|
+
labels: false,
|
|
1136
|
+
labelsColor: [114.75, 114.75, 114.75],
|
|
1137
|
+
adminLines: true,
|
|
1138
|
+
adminLinesColor: [40, 63, 93],
|
|
1139
|
+
water: true,
|
|
1140
|
+
waterColor: [17, 35, 48],
|
|
1141
|
+
surface: true,
|
|
1142
|
+
surfaceColor: [9, 16, 29],
|
|
1143
|
+
// Color of the empty space rendered around the globe (deck.gl clear color).
|
|
1144
|
+
// Matches the previous hardcoded clear color [0.015, 0.035, 0.065] in 0-1 space.
|
|
1145
|
+
backgroundColor: [4, 9, 17],
|
|
1146
|
+
stars: false
|
|
1147
|
+
};
|
|
1148
|
+
export var GLOBE_SUPPORTED_LAYERS = {
|
|
1149
|
+
point: true,
|
|
1150
|
+
arc: true,
|
|
1151
|
+
grid: true,
|
|
1152
|
+
hexagon: true,
|
|
1153
|
+
geojson: true,
|
|
1154
|
+
cluster: true,
|
|
1155
|
+
icon: true,
|
|
1156
|
+
hexagonId: true,
|
|
1157
|
+
'3D': true,
|
|
1158
|
+
vectorTile: true,
|
|
1159
|
+
hexTile: true,
|
|
1160
|
+
line: true,
|
|
1161
|
+
trip: true,
|
|
1162
|
+
rasterTile: true,
|
|
1163
|
+
heatmap: true,
|
|
1164
|
+
s2: false,
|
|
1165
|
+
tile3d: false,
|
|
1166
|
+
// Flow arrows are flat quads in common space (equatorial plane) and collapse when
|
|
1167
|
+
// viewed edge-on on the globe, so the flow layer is not supported in Globe mode.
|
|
1168
|
+
flow: false
|
|
1169
|
+
};
|
|
1170
|
+
export var MapSplitMode = /*#__PURE__*/function (MapSplitMode) {
|
|
1171
|
+
MapSplitMode["SINGLE_MAP"] = "SINGLE_MAP";
|
|
1172
|
+
MapSplitMode["DUAL_MAP"] = "DUAL_MAP";
|
|
1173
|
+
MapSplitMode["SWIPE_COMPARE"] = "SWIPE_COMPARE";
|
|
1174
|
+
return MapSplitMode;
|
|
1175
|
+
}({});
|
|
1176
|
+
|
|
1177
|
+
/**
|
|
1178
|
+
* A multiplier for screen-space width/scale for Arc, Line, Icon and Text layers.
|
|
1179
|
+
* Required in order to maintain the same appearance after upgrading to deck.gl v8.5.
|
|
1180
|
+
* https://github.com/visgl/deck.gl/blob/master/docs/upgrade-guide.md
|
|
1181
|
+
*/
|
|
1182
|
+
export var PROJECTED_PIXEL_SIZE_MULTIPLIER = 2 / 3;
|
|
1183
|
+
|
|
1184
|
+
/**
|
|
1185
|
+
* Maximum value for text outline width
|
|
1186
|
+
*/
|
|
1187
|
+
export var TEXT_OUTLINE_MULTIPLIER = 5;
|
|
1188
|
+
export var dataTestIds = {
|
|
1189
|
+
infoIcon: 'info-icon',
|
|
1190
|
+
warningIcon: 'warning-icon',
|
|
1191
|
+
errorIcon: 'error-icon',
|
|
1192
|
+
successIcon: 'success-icon',
|
|
1193
|
+
checkmarkIcon: 'checkmark-icon',
|
|
1194
|
+
sortableLayerItem: 'sortable-layer-item',
|
|
1195
|
+
staticLayerItem: 'static-layer-item',
|
|
1196
|
+
layerTitleEditor: 'layer__title__editor',
|
|
1197
|
+
removeLayerAction: 'remove-layer-action',
|
|
1198
|
+
layerPanel: 'layer-panel',
|
|
1199
|
+
sortableEffectItem: 'sortable-effect-item',
|
|
1200
|
+
staticEffectItem: 'static-effect-item',
|
|
1201
|
+
providerLoading: 'provider-loading',
|
|
1202
|
+
providerMapInfoPanel: 'provider-map-info-panel',
|
|
1203
|
+
providerSelect: 'provider-select',
|
|
1204
|
+
cloudHeader: 'cloud-header',
|
|
1205
|
+
providerShareMap: 'provider-share-map'
|
|
1206
|
+
};
|
|
1207
|
+
|
|
1208
|
+
// Effects
|
|
1209
|
+
export var DEFAULT_TIMEZONE = 'UTC';
|
|
1210
|
+
export var DEFAULT_POST_PROCESSING_EFFECT_TYPE = 'ink';
|
|
1211
|
+
export var DEFAULT_LIGHT_COLOR = [255, 255, 255];
|
|
1212
|
+
export var DEFAULT_LIGHT_INTENSITY = 1;
|
|
1213
|
+
export var DEFAULT_SHADOW_INTENSITY = 0.5;
|
|
1214
|
+
export var DEFAULT_SHADOW_COLOR = [0, 0, 0];
|
|
1215
|
+
export var LIGHT_AND_SHADOW_EFFECT_TIME_MODES = {
|
|
1216
|
+
pick: 'pick',
|
|
1217
|
+
current: 'current',
|
|
1218
|
+
animation: 'animation'
|
|
1219
|
+
};
|
|
1220
|
+
export var DEFAULT_LIGHT_AND_SHADOW_PROPS = {
|
|
1221
|
+
timestamp: Date.now(),
|
|
1222
|
+
timeMode: LIGHT_AND_SHADOW_EFFECT_TIME_MODES.pick,
|
|
1223
|
+
shadowIntensity: DEFAULT_SHADOW_INTENSITY,
|
|
1224
|
+
shadowColor: [].concat(DEFAULT_SHADOW_COLOR),
|
|
1225
|
+
sunLightColor: [].concat(DEFAULT_LIGHT_COLOR),
|
|
1226
|
+
sunLightIntensity: DEFAULT_LIGHT_INTENSITY,
|
|
1227
|
+
ambientLightColor: [].concat(DEFAULT_LIGHT_COLOR),
|
|
1228
|
+
ambientLightIntensity: DEFAULT_LIGHT_INTENSITY
|
|
1229
|
+
};
|
|
1230
|
+
export var LIGHT_AND_SHADOW_EFFECT = {
|
|
1231
|
+
type: 'lightAndShadow',
|
|
1232
|
+
name: 'Light & Shadow',
|
|
1233
|
+
description: 'effectDescription.lightAndShadow',
|
|
1234
|
+
parameters: [{
|
|
1235
|
+
name: 'timestamp',
|
|
1236
|
+
min: 0,
|
|
1237
|
+
max: Number.MAX_SAFE_INTEGER
|
|
1238
|
+
}, {
|
|
1239
|
+
name: 'shadowIntensity',
|
|
1240
|
+
min: 0,
|
|
1241
|
+
max: 1,
|
|
1242
|
+
defaultValue: DEFAULT_SHADOW_INTENSITY
|
|
1243
|
+
}, {
|
|
1244
|
+
name: 'sunLightIntensity',
|
|
1245
|
+
min: 0,
|
|
1246
|
+
max: 5,
|
|
1247
|
+
defaultValue: DEFAULT_LIGHT_INTENSITY
|
|
1248
|
+
}, {
|
|
1249
|
+
name: 'ambientLightIntensity',
|
|
1250
|
+
min: 0,
|
|
1251
|
+
max: 5,
|
|
1252
|
+
defaultValue: DEFAULT_LIGHT_INTENSITY
|
|
1253
|
+
}, {
|
|
1254
|
+
name: 'shadowColor',
|
|
1255
|
+
type: 'color',
|
|
1256
|
+
min: 0,
|
|
1257
|
+
max: 255,
|
|
1258
|
+
defaultValue: DEFAULT_SHADOW_COLOR
|
|
1259
|
+
}, {
|
|
1260
|
+
name: 'sunLightColor',
|
|
1261
|
+
type: 'color',
|
|
1262
|
+
min: 0,
|
|
1263
|
+
max: 255,
|
|
1264
|
+
defaultValue: DEFAULT_LIGHT_COLOR
|
|
1265
|
+
}, {
|
|
1266
|
+
name: 'ambientLightColor',
|
|
1267
|
+
type: 'color',
|
|
1268
|
+
min: 0,
|
|
1269
|
+
max: 255,
|
|
1270
|
+
defaultValue: DEFAULT_LIGHT_COLOR
|
|
1271
|
+
}]
|
|
1272
|
+
};
|
|
1273
|
+
export var DISTANCE_FOG_TYPE = 'distanceFog';
|
|
1274
|
+
export var SURFACE_FOG_TYPE = 'surfaceFog';
|
|
1275
|
+
export var POSTPROCESSING_EFFECTS = {
|
|
1276
|
+
ink: {
|
|
1277
|
+
type: 'ink',
|
|
1278
|
+
name: 'Ink',
|
|
1279
|
+
description: 'effectDescription.ink',
|
|
1280
|
+
parameters: [{
|
|
1281
|
+
name: 'strength',
|
|
1282
|
+
min: 0,
|
|
1283
|
+
max: 1
|
|
1284
|
+
}]
|
|
1285
|
+
},
|
|
1286
|
+
brightnessContrast: {
|
|
1287
|
+
type: 'brightnessContrast',
|
|
1288
|
+
name: 'Brightness & Contrast',
|
|
1289
|
+
description: 'effectDescription.brightnessContrast',
|
|
1290
|
+
parameters: [{
|
|
1291
|
+
name: 'brightness',
|
|
1292
|
+
min: -1,
|
|
1293
|
+
max: 1
|
|
1294
|
+
}, {
|
|
1295
|
+
name: 'contrast',
|
|
1296
|
+
min: -1,
|
|
1297
|
+
max: 1
|
|
1298
|
+
}]
|
|
1299
|
+
},
|
|
1300
|
+
hueSaturation: {
|
|
1301
|
+
type: 'hueSaturation',
|
|
1302
|
+
name: 'Hue & Saturation',
|
|
1303
|
+
description: 'effectDescription.hueSaturation',
|
|
1304
|
+
parameters: [{
|
|
1305
|
+
name: 'hue',
|
|
1306
|
+
min: -1,
|
|
1307
|
+
max: 1
|
|
1308
|
+
}, {
|
|
1309
|
+
name: 'saturation',
|
|
1310
|
+
defaultValue: 0.25,
|
|
1311
|
+
min: -1,
|
|
1312
|
+
max: 1
|
|
1313
|
+
}]
|
|
1314
|
+
},
|
|
1315
|
+
vibrance: {
|
|
1316
|
+
type: 'vibrance',
|
|
1317
|
+
name: 'Vibrance',
|
|
1318
|
+
description: 'effectDescription.vibrance',
|
|
1319
|
+
parameters: [{
|
|
1320
|
+
name: 'amount',
|
|
1321
|
+
defaultValue: 0.5,
|
|
1322
|
+
min: -1,
|
|
1323
|
+
max: 1
|
|
1324
|
+
}]
|
|
1325
|
+
},
|
|
1326
|
+
sepia: {
|
|
1327
|
+
type: 'sepia',
|
|
1328
|
+
name: 'Sepia',
|
|
1329
|
+
description: 'effectDescription.sepia',
|
|
1330
|
+
parameters: [{
|
|
1331
|
+
name: 'amount',
|
|
1332
|
+
min: 0,
|
|
1333
|
+
max: 1
|
|
1334
|
+
}]
|
|
1335
|
+
},
|
|
1336
|
+
dotScreen: {
|
|
1337
|
+
type: 'dotScreen',
|
|
1338
|
+
name: 'Dot Screen',
|
|
1339
|
+
description: 'effectDescription.dotScreen',
|
|
1340
|
+
parameters: [{
|
|
1341
|
+
name: 'angle',
|
|
1342
|
+
min: 0,
|
|
1343
|
+
max: Math.PI / 2
|
|
1344
|
+
}, {
|
|
1345
|
+
name: 'size',
|
|
1346
|
+
min: 1,
|
|
1347
|
+
max: 20
|
|
1348
|
+
}, {
|
|
1349
|
+
name: 'center',
|
|
1350
|
+
type: 'array',
|
|
1351
|
+
label: ['Center X', 'Center Y'],
|
|
1352
|
+
defaultValue: [0.5, 0.5],
|
|
1353
|
+
min: 0,
|
|
1354
|
+
max: 1
|
|
1355
|
+
}]
|
|
1356
|
+
},
|
|
1357
|
+
colorHalftone: {
|
|
1358
|
+
type: 'colorHalftone',
|
|
1359
|
+
name: 'Color Halftone',
|
|
1360
|
+
description: 'effectDescription.colorHalftone',
|
|
1361
|
+
parameters: [{
|
|
1362
|
+
name: 'angle',
|
|
1363
|
+
min: 0,
|
|
1364
|
+
max: Math.PI / 2
|
|
1365
|
+
}, {
|
|
1366
|
+
name: 'size',
|
|
1367
|
+
min: 1,
|
|
1368
|
+
max: 20
|
|
1369
|
+
}, {
|
|
1370
|
+
name: 'center',
|
|
1371
|
+
type: 'array',
|
|
1372
|
+
label: ['Center X', 'Center Y'],
|
|
1373
|
+
defaultValue: [0.5, 0.5],
|
|
1374
|
+
min: 0,
|
|
1375
|
+
max: 1
|
|
1376
|
+
}]
|
|
1377
|
+
},
|
|
1378
|
+
noise: {
|
|
1379
|
+
type: 'noise',
|
|
1380
|
+
name: 'Noise',
|
|
1381
|
+
description: 'effectDescription.noise',
|
|
1382
|
+
parameters: [{
|
|
1383
|
+
name: 'amount',
|
|
1384
|
+
min: 0,
|
|
1385
|
+
max: 1
|
|
1386
|
+
}]
|
|
1387
|
+
},
|
|
1388
|
+
triangleBlur: {
|
|
1389
|
+
type: 'triangleBlur',
|
|
1390
|
+
name: 'Blur (Triangle)',
|
|
1391
|
+
description: 'effectDescription.triangleBlur',
|
|
1392
|
+
parameters: [{
|
|
1393
|
+
name: 'radius',
|
|
1394
|
+
min: 0,
|
|
1395
|
+
max: 100
|
|
1396
|
+
}]
|
|
1397
|
+
},
|
|
1398
|
+
zoomBlur: {
|
|
1399
|
+
type: 'zoomBlur',
|
|
1400
|
+
name: 'Blur (Zoom)',
|
|
1401
|
+
description: 'effectDescription.zoomBlur',
|
|
1402
|
+
parameters: [{
|
|
1403
|
+
name: 'strength',
|
|
1404
|
+
defaultValue: 0.05,
|
|
1405
|
+
min: 0,
|
|
1406
|
+
max: 1
|
|
1407
|
+
}, {
|
|
1408
|
+
name: 'center',
|
|
1409
|
+
type: 'array',
|
|
1410
|
+
label: ['Center X', 'Center Y'],
|
|
1411
|
+
defaultValue: [0.5, 0.5],
|
|
1412
|
+
min: 0,
|
|
1413
|
+
max: 1
|
|
1414
|
+
}]
|
|
1415
|
+
},
|
|
1416
|
+
tiltShift: {
|
|
1417
|
+
type: 'tiltShift',
|
|
1418
|
+
name: 'Blur (Tilt Shift)',
|
|
1419
|
+
description: 'effectDescription.tiltShift',
|
|
1420
|
+
parameters: [{
|
|
1421
|
+
name: 'blurRadius',
|
|
1422
|
+
label: 'Blur',
|
|
1423
|
+
min: 0,
|
|
1424
|
+
max: 50
|
|
1425
|
+
}, {
|
|
1426
|
+
name: 'gradientRadius',
|
|
1427
|
+
label: 'Gradient',
|
|
1428
|
+
min: 0,
|
|
1429
|
+
max: 400
|
|
1430
|
+
}, {
|
|
1431
|
+
name: 'start',
|
|
1432
|
+
type: 'array',
|
|
1433
|
+
label: ['Start', false],
|
|
1434
|
+
defaultValue: [0.0, 0.0],
|
|
1435
|
+
min: 0,
|
|
1436
|
+
max: 1
|
|
1437
|
+
}, {
|
|
1438
|
+
name: 'end',
|
|
1439
|
+
type: 'array',
|
|
1440
|
+
label: ['End', false],
|
|
1441
|
+
defaultValue: [1, 1],
|
|
1442
|
+
min: 0,
|
|
1443
|
+
max: 1
|
|
1444
|
+
}]
|
|
1445
|
+
},
|
|
1446
|
+
edgeWork: {
|
|
1447
|
+
type: 'edgeWork',
|
|
1448
|
+
name: 'Edge work',
|
|
1449
|
+
description: 'effectDescription.edgeWork',
|
|
1450
|
+
parameters: [{
|
|
1451
|
+
name: 'radius',
|
|
1452
|
+
min: 1,
|
|
1453
|
+
max: 50
|
|
1454
|
+
}]
|
|
1455
|
+
},
|
|
1456
|
+
vignette: {
|
|
1457
|
+
type: 'vignette',
|
|
1458
|
+
name: 'Vignette',
|
|
1459
|
+
description: 'effectDescription.vignette',
|
|
1460
|
+
parameters: [{
|
|
1461
|
+
name: 'amount',
|
|
1462
|
+
min: 0,
|
|
1463
|
+
max: 1
|
|
1464
|
+
}, {
|
|
1465
|
+
name: 'radius',
|
|
1466
|
+
min: 0,
|
|
1467
|
+
max: 1
|
|
1468
|
+
}]
|
|
1469
|
+
},
|
|
1470
|
+
magnify: {
|
|
1471
|
+
type: 'magnify',
|
|
1472
|
+
name: 'Magnify',
|
|
1473
|
+
description: 'effectDescription.magnify',
|
|
1474
|
+
parameters: [{
|
|
1475
|
+
name: 'screenXY',
|
|
1476
|
+
type: 'array',
|
|
1477
|
+
label: ['Position X', 'Position Y'],
|
|
1478
|
+
defaultValue: [0.5, 0.5],
|
|
1479
|
+
min: 0,
|
|
1480
|
+
max: 1
|
|
1481
|
+
}, {
|
|
1482
|
+
name: 'radiusPixels',
|
|
1483
|
+
label: 'Size',
|
|
1484
|
+
min: 10,
|
|
1485
|
+
max: 500
|
|
1486
|
+
}, {
|
|
1487
|
+
name: 'zoom',
|
|
1488
|
+
min: 0.5,
|
|
1489
|
+
max: 50
|
|
1490
|
+
}, {
|
|
1491
|
+
name: 'borderWidthPixels',
|
|
1492
|
+
label: 'Border Width',
|
|
1493
|
+
defaultValue: 3,
|
|
1494
|
+
min: 0,
|
|
1495
|
+
max: 50
|
|
1496
|
+
}]
|
|
1497
|
+
},
|
|
1498
|
+
hexagonalPixelate: {
|
|
1499
|
+
type: 'hexagonalPixelate',
|
|
1500
|
+
name: 'Hexagonal Pixelate',
|
|
1501
|
+
description: 'effectDescription.hexagonalPixelate',
|
|
1502
|
+
parameters: [{
|
|
1503
|
+
name: 'scale',
|
|
1504
|
+
defaultValue: 20,
|
|
1505
|
+
min: 1,
|
|
1506
|
+
max: 50
|
|
1507
|
+
}]
|
|
1508
|
+
},
|
|
1509
|
+
distanceFog: {
|
|
1510
|
+
type: DISTANCE_FOG_TYPE,
|
|
1511
|
+
name: 'Distance Fog',
|
|
1512
|
+
description: 'effectDescription.distanceFog',
|
|
1513
|
+
parameters: [{
|
|
1514
|
+
name: 'density',
|
|
1515
|
+
defaultValue: 0.5,
|
|
1516
|
+
min: 0,
|
|
1517
|
+
max: 1
|
|
1518
|
+
}, {
|
|
1519
|
+
name: 'fogStart',
|
|
1520
|
+
label: 'Start',
|
|
1521
|
+
defaultValue: 0.3,
|
|
1522
|
+
min: 0,
|
|
1523
|
+
max: 1
|
|
1524
|
+
}, {
|
|
1525
|
+
name: 'fogRange',
|
|
1526
|
+
label: 'Range',
|
|
1527
|
+
defaultValue: 0.5,
|
|
1528
|
+
min: 0.01,
|
|
1529
|
+
max: 1
|
|
1530
|
+
}, {
|
|
1531
|
+
name: 'fogColor',
|
|
1532
|
+
type: 'color',
|
|
1533
|
+
min: 0,
|
|
1534
|
+
max: 255,
|
|
1535
|
+
defaultValue: [217, 222, 230]
|
|
1536
|
+
}]
|
|
1537
|
+
},
|
|
1538
|
+
surfaceFog: {
|
|
1539
|
+
type: SURFACE_FOG_TYPE,
|
|
1540
|
+
name: 'Surface Fog',
|
|
1541
|
+
description: 'effectDescription.surfaceFog',
|
|
1542
|
+
parameters: [{
|
|
1543
|
+
name: 'density',
|
|
1544
|
+
defaultValue: 0.6,
|
|
1545
|
+
min: 0,
|
|
1546
|
+
max: 1
|
|
1547
|
+
}, {
|
|
1548
|
+
name: 'height',
|
|
1549
|
+
label: 'Elevation (m)',
|
|
1550
|
+
defaultValue: 50,
|
|
1551
|
+
min: -200,
|
|
1552
|
+
max: 6000
|
|
1553
|
+
}, {
|
|
1554
|
+
name: 'animateHeight',
|
|
1555
|
+
type: 'checkbox',
|
|
1556
|
+
label: 'Animate Elevation',
|
|
1557
|
+
tooltip: 'Animates elevation from start to end value during video export preview and recording.',
|
|
1558
|
+
defaultValue: false,
|
|
1559
|
+
min: 0,
|
|
1560
|
+
max: 1
|
|
1561
|
+
}, {
|
|
1562
|
+
name: 'heightEnd',
|
|
1563
|
+
label: 'End Elevation (m)',
|
|
1564
|
+
defaultValue: 100,
|
|
1565
|
+
min: -200,
|
|
1566
|
+
max: 6000
|
|
1567
|
+
}, {
|
|
1568
|
+
name: 'linearEasing',
|
|
1569
|
+
type: 'checkbox',
|
|
1570
|
+
label: 'Linear Easing',
|
|
1571
|
+
tooltip: 'Uses constant speed instead of smooth ease-in / ease-out during elevation animation.',
|
|
1572
|
+
defaultValue: false,
|
|
1573
|
+
min: 0,
|
|
1574
|
+
max: 1
|
|
1575
|
+
}, {
|
|
1576
|
+
name: 'thickness',
|
|
1577
|
+
label: 'Transition (m)',
|
|
1578
|
+
defaultValue: 50,
|
|
1579
|
+
min: 0,
|
|
1580
|
+
max: 1000
|
|
1581
|
+
}, {
|
|
1582
|
+
name: 'fogColor',
|
|
1583
|
+
type: 'color',
|
|
1584
|
+
label: 'Fog Color',
|
|
1585
|
+
min: 0,
|
|
1586
|
+
max: 255,
|
|
1587
|
+
defaultValue: [230, 235, 242]
|
|
1588
|
+
}, {
|
|
1589
|
+
name: 'pattern',
|
|
1590
|
+
type: 'checkbox',
|
|
1591
|
+
label: 'Pattern',
|
|
1592
|
+
tooltip: 'Adds a noise pattern to the fog for a more natural, volumetric look.',
|
|
1593
|
+
defaultValue: false,
|
|
1594
|
+
min: 0,
|
|
1595
|
+
max: 1
|
|
1596
|
+
}]
|
|
1597
|
+
}
|
|
1598
|
+
};
|
|
1599
|
+
export var EFFECT_DESCRIPTIONS = [LIGHT_AND_SHADOW_EFFECT].concat(_toConsumableArray(Object.keys(POSTPROCESSING_EFFECTS).map(function (keyName) {
|
|
1600
|
+
return POSTPROCESSING_EFFECTS[keyName];
|
|
1601
|
+
})));
|
|
1602
|
+
export var SYNC_TIMELINE_MODES = {
|
|
1603
|
+
start: 0,
|
|
1604
|
+
end: 1
|
|
1605
|
+
};
|
|
1606
|
+
export var GEOARROW_METADATA_KEY = 'ARROW:extension:name';
|
|
1607
|
+
|
|
1608
|
+
/**
|
|
1609
|
+
* Enum holding GeoArrow extension type names
|
|
1610
|
+
*/
|
|
1611
|
+
export var GEOARROW_EXTENSIONS = /*#__PURE__*/function (GEOARROW_EXTENSIONS) {
|
|
1612
|
+
GEOARROW_EXTENSIONS["POINT"] = "geoarrow.point";
|
|
1613
|
+
GEOARROW_EXTENSIONS["LINESTRING"] = "geoarrow.linestring";
|
|
1614
|
+
GEOARROW_EXTENSIONS["POLYGON"] = "geoarrow.polygon";
|
|
1615
|
+
GEOARROW_EXTENSIONS["MULTIPOINT"] = "geoarrow.multipoint";
|
|
1616
|
+
GEOARROW_EXTENSIONS["MULTILINESTRING"] = "geoarrow.multilinestring";
|
|
1617
|
+
GEOARROW_EXTENSIONS["MULTIPOLYGON"] = "geoarrow.multipolygon";
|
|
1618
|
+
GEOARROW_EXTENSIONS["WKB"] = "geoarrow.wkb";
|
|
1619
|
+
return GEOARROW_EXTENSIONS;
|
|
1620
|
+
}({});
|
|
1621
|
+
export var LOADERS_CDN_VERSION = '4.3.2';
|
|
1622
|
+
export var LOADERS_CDN_URL = 'https://unpkg.com/@loaders.gl';
|
|
1623
|
+
export var getLoaderOptions = function getLoaderOptions() {
|
|
1624
|
+
return {
|
|
1625
|
+
mvt: {
|
|
1626
|
+
workerUrl: "".concat(LOADERS_CDN_URL, "/mvt@").concat(LOADERS_CDN_VERSION, "/dist/mvt-worker.js")
|
|
1627
|
+
},
|
|
1628
|
+
'quantized-mesh': {
|
|
1629
|
+
workerUrl: "".concat(LOADERS_CDN_URL, "/terrain@").concat(LOADERS_CDN_VERSION, "/dist/quantized-mesh-worker.js")
|
|
1630
|
+
},
|
|
1631
|
+
npy: {
|
|
1632
|
+
workerUrl: "".concat(LOADERS_CDN_URL, "/textures@").concat(LOADERS_CDN_VERSION, "/dist/npy-worker.js")
|
|
1633
|
+
}
|
|
1634
|
+
};
|
|
1635
|
+
};
|
|
1636
|
+
export var CUSTOM_SCENEGRAPH_MODEL_ID = 'custom';
|
|
1637
|
+
var MODELS_BASE_URL = 'https://studio-public-data.foursquare.com/statics/keplergl/3d-models.2022-06-13';
|
|
1638
|
+
export var TRIP_LAYER_SCENEGRAPH_MODELS = [{
|
|
1639
|
+
id: 'airplane',
|
|
1640
|
+
label: 'Airplane',
|
|
1641
|
+
icon: null,
|
|
1642
|
+
url: "".concat(MODELS_BASE_URL, "/Plane.glb"),
|
|
1643
|
+
angles: [0, 0, 0],
|
|
1644
|
+
scale: 1.0
|
|
1645
|
+
}, {
|
|
1646
|
+
id: 'boeing777',
|
|
1647
|
+
label: 'Airliner',
|
|
1648
|
+
icon: null,
|
|
1649
|
+
url: "".concat(MODELS_BASE_URL, "/Airliner.glb"),
|
|
1650
|
+
angles: [0, 0, 0],
|
|
1651
|
+
scale: 1.0
|
|
1652
|
+
}, {
|
|
1653
|
+
id: 'uber-evtol',
|
|
1654
|
+
label: 'VTOL',
|
|
1655
|
+
icon: null,
|
|
1656
|
+
url: "".concat(MODELS_BASE_URL, "/evtol.glb"),
|
|
1657
|
+
angles: [0, 0, 0],
|
|
1658
|
+
scale: 1.0
|
|
1659
|
+
}, {
|
|
1660
|
+
id: 'hang-glider',
|
|
1661
|
+
label: 'Glider',
|
|
1662
|
+
icon: null,
|
|
1663
|
+
url: "".concat(MODELS_BASE_URL, "/Hangglider.glb"),
|
|
1664
|
+
angles: [0, 0, 0],
|
|
1665
|
+
scale: 1.0
|
|
1666
|
+
}, {
|
|
1667
|
+
id: 'helicopter',
|
|
1668
|
+
label: 'Helicopter',
|
|
1669
|
+
icon: null,
|
|
1670
|
+
url: "".concat(MODELS_BASE_URL, "/Helicopter.glb"),
|
|
1671
|
+
angles: [0, 0, 0],
|
|
1672
|
+
scale: 1.0
|
|
1673
|
+
}, {
|
|
1674
|
+
id: 'bicycle',
|
|
1675
|
+
label: 'Bicycle',
|
|
1676
|
+
icon: null,
|
|
1677
|
+
url: "".concat(MODELS_BASE_URL, "/Bicycle.glb"),
|
|
1678
|
+
angles: [0, 0, 0],
|
|
1679
|
+
scale: 1.0
|
|
1680
|
+
}, {
|
|
1681
|
+
id: 'scooter',
|
|
1682
|
+
label: 'Scooter',
|
|
1683
|
+
icon: null,
|
|
1684
|
+
url: "".concat(MODELS_BASE_URL, "/Scooter.glb"),
|
|
1685
|
+
angles: [0, 0, 0],
|
|
1686
|
+
scale: 1.0
|
|
1687
|
+
}, {
|
|
1688
|
+
id: 'car',
|
|
1689
|
+
label: 'Car',
|
|
1690
|
+
icon: null,
|
|
1691
|
+
url: "".concat(MODELS_BASE_URL, "/Car.glb"),
|
|
1692
|
+
angles: [0, 0, 0],
|
|
1693
|
+
scale: 1.0
|
|
1694
|
+
}, {
|
|
1695
|
+
id: 'truck',
|
|
1696
|
+
label: 'Truck',
|
|
1697
|
+
icon: null,
|
|
1698
|
+
url: "".concat(MODELS_BASE_URL, "/Truck.glb"),
|
|
1699
|
+
angles: [0, 0, 0],
|
|
1700
|
+
scale: 1.0
|
|
1701
|
+
}, {
|
|
1702
|
+
id: 'semitruck',
|
|
1703
|
+
label: 'Semitruck',
|
|
1704
|
+
icon: null,
|
|
1705
|
+
url: "".concat(MODELS_BASE_URL, "/Semitruck.glb"),
|
|
1706
|
+
angles: [0, 0, 0],
|
|
1707
|
+
scale: 1.0
|
|
1708
|
+
}, {
|
|
1709
|
+
id: 'cargoship',
|
|
1710
|
+
label: 'Cargoship',
|
|
1711
|
+
icon: null,
|
|
1712
|
+
url: "".concat(MODELS_BASE_URL, "/Cargoship.glb"),
|
|
1713
|
+
angles: [0, 0, 0],
|
|
1714
|
+
scale: 1.0
|
|
1715
|
+
}, {
|
|
1716
|
+
id: CUSTOM_SCENEGRAPH_MODEL_ID,
|
|
1717
|
+
label: 'Custom',
|
|
1718
|
+
icon: null,
|
|
1719
|
+
url: null,
|
|
1720
|
+
angles: [0, 0, 0],
|
|
1721
|
+
scale: 1.0
|
|
1722
|
+
}];
|
|
1723
|
+
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJrZXlNaXJyb3IiLCJzY2FsZUxpbmVhciIsInNjYWxlTG9nIiwic2NhbGVPcmRpbmFsIiwic2NhbGVQb2ludCIsInNjYWxlUXVhbnRpbGUiLCJzY2FsZVF1YW50aXplIiwic2NhbGVTcXJ0Iiwic2NhbGVUaHJlc2hvbGQiLCJUT09MVElQX0ZPUk1BVF9UWVBFUyIsIkFDVElPTl9QUkVGSVgiLCJLRVBMRVJfVU5GT0xERURfQlVDS0VUIiwiQkFTRU1BUF9JQ09OX1BSRUZJWCIsIkRFRkFVTFRfTUFQQk9YX0FQSV9VUkwiLCJUUkFOU0lUSU9OX0RVUkFUSU9OIiwiREFUQV9UQUJMRV9JRCIsIkRFTEVURV9EQVRBX0lEIiwiQUREX0RBVEFfSUQiLCJFWFBPUlRfSU1BR0VfSUQiLCJFWFBPUlRfREFUQV9JRCIsIkFERF9NQVBfU1RZTEVfSUQiLCJFWFBPUlRfTUFQX0lEIiwiRVhQT1JUX1ZJREVPX0lEIiwiU0FWRV9NQVBfSUQiLCJPVkVSV1JJVEVfTUFQX0lEIiwiU0hBUkVfTUFQX0lEIiwiS0VQTEVSX0dMX05BTUUiLCJLRVBMRVJfR0xfVkVSU0lPTiIsIktFUExFUl9HTF9XRUJTSVRFIiwiRElNRU5TSU9OUyIsInNpZGVQYW5lbCIsIndpZHRoIiwibWFyZ2luIiwidG9wIiwibGVmdCIsImJvdHRvbSIsInJpZ2h0IiwiaGVhZGVySGVpZ2h0IiwibWFwQ29udHJvbCIsInBhZGRpbmciLCJtYXBMZWdlbmQiLCJwaW5uZWQiLCJUSEVNRSIsImxpZ2h0IiwiZGFyayIsImJhc2UiLCJTSURFQkFSX1BBTkVMUyIsImlkIiwibGFiZWwiLCJvbkNsaWNrIiwiUEFORUxfVklFV19UT0dHTEVTIiwibGlzdCIsImJ5RGF0YXNldCIsIlBBTkVMUyIsIkRFRkFVTFRfQkxER19DT0xPUiIsIkRFRkFVTFRfQkFDS0dST1VORF9DT0xPUiIsIkJBU0VfTUFQX0JBQ0tHUk9VTkRfTEFZRVJfSURTIiwiQkFDS0dST1VORF9MQVlFUl9HUk9VUF9TTFVHIiwiVEhSRUVfRF9CVUlMRElOR19MQVlFUl9HUk9VUF9TTFVHIiwiQkFDS0dST1VORF9MQVlFUl9HUk9VUCIsInNsdWciLCJmaWx0ZXIiLCJkZWZhdWx0VmlzaWJpbGl0eSIsImlzVmlzaWJpbGl0eVRvZ2dsZUF2YWlsYWJsZSIsImlzTW92ZVRvVG9wQXZhaWxhYmxlIiwiaXNDb2xvclBpY2tlckF2YWlsYWJsZSIsIkRFRkFVTFRfTEFZRVJfR1JPVVBTIiwiX3JlZiIsInR5cGUiLCJtYXRjaCIsIl9yZWYyIiwiX3JlZjMiLCJfcmVmNCIsIl9yZWY1IiwiX3JlZjYiLCJCQVNFX01BUF9DT0xPUl9NT0RFUyIsIk5PTkUiLCJEQVJLIiwiTElHSFQiLCJOT19NQVBfSUQiLCJFTVBUWV9NQVBCT1hfU1RZTEUiLCJ2ZXJzaW9uIiwic291cmNlcyIsImxheWVycyIsIk1BUF9MSUJfT1BUSU9OUyIsIk1BUEJPWCIsIk1BUExJQlJFIiwiTUFQQk9YX01BWF9QSVRDSCIsIk5PX0JBU0VNQVBfSUNPTiIsImNvbmNhdCIsIkRFRkFVTFRfQkFTRV9NQVBfU1RZTEUiLCJERUZBVUxUX05PX0JBU0VNQVBfU1RZTEUiLCJ1cmwiLCJpY29uIiwibGF5ZXJHcm91cHMiLCJjb2xvck1vZGUiLCJzdHlsZSIsIkRFRkFVTFRfTUFQQk9YX1NUWUxFUyIsImNvbXBsaW1lbnRhcnlTdHlsZUlkIiwiREVGQVVMVF9NQVBCT1hfU0FURUxJVEVfU1RZTEVTIiwiREVGQVVMVF9NQVBMSUJSRV9TVFlMRVMiLCJERUZBVUxUX01BUF9TVFlMRVMiLCJHRU9KU09OX0ZJRUxEUyIsImdlb2pzb24iLCJJQ09OX0ZJRUxEUyIsIlRSSVBfUE9JTlRfRklFTERTIiwiQUxUSVRVREVfRklFTERTIiwiVFJJUF9BUkNfRklFTERTIiwibGF0MCIsImxuZzAiLCJsYXQxIiwibG5nMSIsIkZJTFRFUl9UWVBFUyIsInJhbmdlIiwic2VsZWN0IiwiaW5wdXQiLCJ0aW1lUmFuZ2UiLCJtdWx0aVNlbGVjdCIsInBvbHlnb24iLCJGSUxURVJfVklFV19UWVBFUyIsInNpZGUiLCJlbmxhcmdlZCIsIm1pbmlmaWVkIiwiREVGQVVMVF9GSUxURVJfVklFV19UWVBFIiwiU0NBTEVfVFlQRVMiLCJvcmRpbmFsIiwicXVhbnRpbGUiLCJxdWFudGl6ZSIsImxpbmVhciIsInNxcnQiLCJsb2ciLCJ0aHJlc2hvbGQiLCJjdXN0b20iLCJjdXN0b21PcmRpbmFsIiwicG9pbnQiLCJTQ0FMRV9UWVBFX05BTUVTIiwiU0NBTEVfRlVOQyIsIl9kZWZpbmVQcm9wZXJ0eSIsIkFMTF9GSUVMRF9UWVBFUyIsImRhdGUiLCJpbnRlZ2VyIiwicmVhbCIsInN0cmluZyIsInRpbWVzdGFtcCIsImFycmF5Iiwib2JqZWN0IiwiZ2VvYXJyb3ciLCJoMyIsIlNPUlRfT1JERVIiLCJBU0NFTkRJTkciLCJERVNDRU5ESU5HIiwiVU5TT1JUIiwiVEFCTEVfT1BUSU9OIiwiU09SVF9BU0MiLCJTT1JUX0RFUyIsIlBJTiIsIlVOUElOIiwiQ09QWSIsIkZPUk1BVF9DT0xVTU4iLCJUQUJMRV9PUFRJT05fTElTVCIsInZhbHVlIiwiZGlzcGxheSIsImNvbmRpdGlvbiIsInByb3BzIiwic29ydFRhYmxlQ29sdW1uIiwic29ydE1vZGUiLCJpc1NvcnRlZCIsImlzUGlubmVkIiwic2V0RGlzcGxheUZvcm1hdCIsIllFTExPVyIsIlBJTksiLCJQVVJQTEUiLCJCTFVFIiwiQkxVRTIiLCJCTFVFMyIsIkdSRUVOIiwiR1JFRU4yIiwiUkVEIiwiT1JBTkdFIiwiRklFTERfVFlQRV9ESVNQTEFZIiwiX0ZJRUxEX1RZUEVfRElTUExBWSIsImNvbG9yIiwiRklFTERfQ09MT1JTIiwiSElHSExJR0hfQ09MT1JfM0QiLCJDSEFOTkVMX1NDQUxFUyIsInJhZGl1cyIsInNpemUiLCJjb2xvckFnZ3IiLCJzaXplQWdnciIsImFuZ2xlIiwiQUdHUkVHQVRJT05fVFlQRVMiLCJjb3VudCIsImF2ZXJhZ2UiLCJtYXhpbXVtIiwibWluaW11bSIsIm1lZGlhbiIsInN0ZGV2Iiwic3VtIiwidmFyaWFuY2UiLCJtb2RlIiwiY291bnRVbmlxdWUiLCJBR0dSRUdBVElPTl9UWVBFX09QVElPTlMiLCJPYmplY3QiLCJlbnRyaWVzIiwibWFwIiwiX3JlZjciLCJfcmVmOCIsIl9zbGljZWRUb0FycmF5Iiwia2V5IiwiY2hhckF0IiwidG9VcHBlckNhc2UiLCJzbGljZSIsImxpbmVhckZpZWxkU2NhbGVGdW5jdGlvbnMiLCJERUZBVUxUX0FHR1JFR0FUSU9OX0NPTE9SX1NDQUxFUyIsImxpbmVhckZpZWxkQWdnclNjYWxlRnVuY3Rpb25zIiwicmVkdWNlIiwicHJldiIsImN1ciIsIm9yZGluYWxGaWVsZFNjYWxlRnVuY3Rpb25zIiwib3JkaW5hbEZpZWxkQWdnclNjYWxlRnVuY3Rpb25zIiwibm90U3VwcG9ydGVkU2NhbGVPcHRzIiwibm90U3VwcG9ydEFnZ3JPcHRzIiwiREVGQVVMVF9BR0dSRUdBVElPTiIsIkZJRUxEX09QVFMiLCJfRklFTERfT1BUUyIsInNjYWxlIiwiX29iamVjdFNwcmVhZCIsImZvcm1hdCIsImxlZ2VuZCIsImQiLCJ0b29sdGlwIiwiREVDSU1BTCIsIlBFUkNFTlRBR0UiLCJEQVRFIiwiREFURV9USU1FIiwiX3RvQ29uc3VtYWJsZUFycmF5IiwiQk9PTEVBTiIsIkNIQU5ORUxfU0NBTEVfU1VQUE9SVEVEX0ZJRUxEUyIsImtleXMiLCJhY2N1IiwiZnQiLCJsZW5ndGgiLCJERUZBVUxUX0xBWUVSX0NPTE9SIiwidHJpcEFyYyIsImJlZ2ludHJpcF9sYXQiLCJkcm9wb2ZmX2xhdCIsInJlcXVlc3RfbGF0IiwiREVGQVVMVF9MQVlFUl9DT0xPUl9QQUxFVFRFIiwiREVGQVVMVF9MQVlFUl9DT0xPUl9QQUxFVFRFX1NURVBTIiwiREVGQVVMVF9UT09MVElQX0ZJRUxEUyIsIk5PX1ZBTFVFX0NPTE9SIiwiREVGQVVMVF9QSUNLSU5HX1JBRElVUyIsIk9WRVJMQVlfQkxFTkRJTkdTIiwibm9ybWFsIiwic2NyZWVuIiwiZGFya2VuIiwiTEFZRVJfQkxFTkRJTkdTIiwiYWRkaXRpdmUiLCJibGVuZEZ1bmMiLCJibGVuZEVxdWF0aW9uIiwic3VidHJhY3RpdmUiLCJNQVhfREVGQVVMVF9UT09MVElQUyIsIlJFU09MVVRJT05TIiwiT05FX1giLCJUV09fWCIsIkVYUE9SVF9JTUdfUkFUSU9TIiwiU0NSRUVOIiwiRk9VUl9CWV9USFJFRSIsIlNJWFRFRU5fQllfTklORSIsIkNVU1RPTSIsIlNjcmVlblJhdGlvT3B0aW9uIiwiZ2V0U2l6ZSIsInNjcmVlblciLCJzY3JlZW5IIiwiaGVpZ2h0IiwiQ3VzdG9tUmF0aW9PcHRpb24iLCJoaWRkZW4iLCJtYXBXIiwibWFwSCIsIkZvdXJCeVRocmVlUmF0aW9PcHRpb24iLCJNYXRoIiwicm91bmQiLCJTaXh0ZWVuQnlOaW5lUmF0aW9PcHRpb24iLCJFWFBPUlRfSU1HX1JBVElPX09QVElPTlMiLCJPbmVYUmVzb2x1dGlvbk9wdGlvbiIsImF2YWlsYWJsZSIsIlR3b1hSZXNvbHV0aW9uT3B0aW9uIiwiUmVzb2x1dGlvbjE5MjB4MTA4ME9wdGlvbiIsIlJlc29sdXRpb24xMjgweDcyME9wdGlvbiIsIlJlc29sdXRpb24yNTYweDE0NDBPcHRpb24iLCJSZXNvbHV0aW9uMTYwMHg5MDBPcHRpb24iLCJSZXNvbHV0aW9uMTAyNHg3NjhPcHRpb24iLCJSZXNvbHV0aW9uMTI4MHg5NjBPcHRpb24iLCJSZXNvbHV0aW9uMTYwMHgxMjAwT3B0aW9uIiwiUmVzb2x1dGlvbjE5MjB4MTQ0ME9wdGlvbiIsIkVYUE9SVF9JTUdfUkVTT0xVVElPTl9PUFRJT05TIiwiRVhQT1JUX0RBVEFfVFlQRSIsIkNTViIsIkVYUE9SVF9EQVRBX1RZUEVfT1BUSU9OUyIsInRvTG93ZXJDYXNlIiwiRVhQT1JUX01BUF9GT1JNQVRTIiwiSFRNTCIsIkpTT04iLCJFWFBPUlRfSFRNTF9NQVBfTU9ERVMiLCJSRUFEIiwiRURJVCIsIkVYUE9SVF9NQVBfRk9STUFUX09QVElPTlMiLCJlbnRyeSIsImdldEhUTUxNYXBNb2RlVGlsZVVybCIsIkVYUE9SVF9IVE1MX01BUF9NT0RFX09QVElPTlMiLCJERUZBVUxUX1VVSURfQ09VTlQiLCJERUZBVUxUX05PVElGSUNBVElPTl9NRVNTQUdFIiwiREVGQVVMVF9OT1RJRklDQVRJT05fVFlQRVMiLCJpbmZvIiwiZXJyb3IiLCJ3YXJuaW5nIiwic3VjY2VzcyIsIkRFRkFVTFRfTk9USUZJQ0FUSU9OX1RPUElDUyIsImdsb2JhbCIsImZpbGUiLCJUSFJPVFRMRV9OT1RJRklDQVRJT05fVElNRSIsIkJBU0VfU1BFRUQiLCJGUFMiLCJBTklNQVRJT05fV0lORE9XIiwiZnJlZSIsImluY3JlbWVudGFsIiwiaW50ZXJ2YWwiLCJERUZBVUxUX1RJTUVfRk9STUFUIiwiU1BFRURfQ09OVFJPTF9SQU5HRSIsIlNQRUVEX0NPTlRST0xfU1RFUCIsIkdFT0NPREVSX0RBVEFTRVRfTkFNRSIsIkdFT0NPREVSX0xBWUVSX0lEIiwiR0VPQ09ERVJfR0VPX09GRlNFVCIsIkdFT0NPREVSX0lDT05fQ09MT1IiLCJHRU9DT0RFUl9JQ09OX1NJWkUiLCJFRElUT1JfTEFZRVJfSUQiLCJFRElUT1JfTEFZRVJfUElDS0lOR19SQURJVVMiLCJFRElUT1JfTU9ERVMiLCJEUkFXX1BPTFlHT04iLCJEUkFXX1JFQ1RBTkdMRSIsIlBMT1RfVFlQRVMiLCJoaXN0b2dyYW0iLCJsaW5lQ2hhcnQiLCJJTklUX0ZJTFRFUl9JVEVNU19JTl9EUk9QRE9XTiIsIk1BWF9HUFVfRklMVEVSUyIsIk1BUF9USFVNQk5BSUxfRElNRU5TSU9OIiwiTUFQX0lORk9fQ0hBUkFDVEVSIiwidGl0bGUiLCJkZXNjcmlwdGlvbiIsIkxPQURJTkdfTUVUSE9EUyIsInVwbG9hZCIsInN0b3JhZ2UiLCJ0aWxlc2V0IiwiREVGQVVMVF9GRUFUVVJFX0ZMQUdTIiwiREFUQVNFVF9GT1JNQVRTIiwicm93IiwiY3N2Iiwia2VwbGVyZ2wiLCJhcnJvdyIsImR1Y2tkYiIsIk1BUF9DT05UUk9MUyIsInZpc2libGVMYXllcnMiLCJ0b2dnbGUzZCIsInNwbGl0TWFwIiwibWFwRHJhdyIsIm1hcExvY2FsZSIsImVmZmVjdCIsImFubm90YXRpb24iLCJhaUFzc2lzdGFudCIsIk1hcFZpZXdNb2RlIiwiR0xPQkVfTUlOX1pPT00iLCJHTE9CRV9NQVhfWk9PTSIsIkdMT0JFX01BWF9MQVRJVFVERSIsIkRFRkFVTFRfR0xPQkVfQ09ORklHIiwiYXRtb3NwaGVyZSIsImF6aW11dGgiLCJhemltdXRoQW5nbGUiLCJ0ZXJtaW5hdG9yIiwidGVybWluYXRvck9wYWNpdHkiLCJiYXNlbWFwIiwibGFiZWxzIiwibGFiZWxzQ29sb3IiLCJhZG1pbkxpbmVzIiwiYWRtaW5MaW5lc0NvbG9yIiwid2F0ZXIiLCJ3YXRlckNvbG9yIiwic3VyZmFjZSIsInN1cmZhY2VDb2xvciIsImJhY2tncm91bmRDb2xvciIsInN0YXJzIiwiR0xPQkVfU1VQUE9SVEVEX0xBWUVSUyIsImFyYyIsImdyaWQiLCJoZXhhZ29uIiwiY2x1c3RlciIsImhleGFnb25JZCIsInZlY3RvclRpbGUiLCJoZXhUaWxlIiwibGluZSIsInRyaXAiLCJyYXN0ZXJUaWxlIiwiaGVhdG1hcCIsInMyIiwidGlsZTNkIiwiZmxvdyIsIk1hcFNwbGl0TW9kZSIsIlBST0pFQ1RFRF9QSVhFTF9TSVpFX01VTFRJUExJRVIiLCJURVhUX09VVExJTkVfTVVMVElQTElFUiIsImRhdGFUZXN0SWRzIiwiaW5mb0ljb24iLCJ3YXJuaW5nSWNvbiIsImVycm9ySWNvbiIsInN1Y2Nlc3NJY29uIiwiY2hlY2ttYXJrSWNvbiIsInNvcnRhYmxlTGF5ZXJJdGVtIiwic3RhdGljTGF5ZXJJdGVtIiwibGF5ZXJUaXRsZUVkaXRvciIsInJlbW92ZUxheWVyQWN0aW9uIiwibGF5ZXJQYW5lbCIsInNvcnRhYmxlRWZmZWN0SXRlbSIsInN0YXRpY0VmZmVjdEl0ZW0iLCJwcm92aWRlckxvYWRpbmciLCJwcm92aWRlck1hcEluZm9QYW5lbCIsInByb3ZpZGVyU2VsZWN0IiwiY2xvdWRIZWFkZXIiLCJwcm92aWRlclNoYXJlTWFwIiwiREVGQVVMVF9USU1FWk9ORSIsIkRFRkFVTFRfUE9TVF9QUk9DRVNTSU5HX0VGRkVDVF9UWVBFIiwiREVGQVVMVF9MSUdIVF9DT0xPUiIsIkRFRkFVTFRfTElHSFRfSU5URU5TSVRZIiwiREVGQVVMVF9TSEFET1dfSU5URU5TSVRZIiwiREVGQVVMVF9TSEFET1dfQ09MT1IiLCJMSUdIVF9BTkRfU0hBRE9XX0VGRkVDVF9USU1FX01PREVTIiwicGljayIsImN1cnJlbnQiLCJhbmltYXRpb24iLCJERUZBVUxUX0xJR0hUX0FORF9TSEFET1dfUFJPUFMiLCJEYXRlIiwibm93IiwidGltZU1vZGUiLCJzaGFkb3dJbnRlbnNpdHkiLCJzaGFkb3dDb2xvciIsInN1bkxpZ2h0Q29sb3IiLCJzdW5MaWdodEludGVuc2l0eSIsImFtYmllbnRMaWdodENvbG9yIiwiYW1iaWVudExpZ2h0SW50ZW5zaXR5IiwiTElHSFRfQU5EX1NIQURPV19FRkZFQ1QiLCJuYW1lIiwicGFyYW1ldGVycyIsIm1pbiIsIm1heCIsIk51bWJlciIsIk1BWF9TQUZFX0lOVEVHRVIiLCJkZWZhdWx0VmFsdWUiLCJESVNUQU5DRV9GT0dfVFlQRSIsIlNVUkZBQ0VfRk9HX1RZUEUiLCJQT1NUUFJPQ0VTU0lOR19FRkZFQ1RTIiwiaW5rIiwiYnJpZ2h0bmVzc0NvbnRyYXN0IiwiaHVlU2F0dXJhdGlvbiIsInZpYnJhbmNlIiwic2VwaWEiLCJkb3RTY3JlZW4iLCJQSSIsImNvbG9ySGFsZnRvbmUiLCJub2lzZSIsInRyaWFuZ2xlQmx1ciIsInpvb21CbHVyIiwidGlsdFNoaWZ0IiwiZWRnZVdvcmsiLCJ2aWduZXR0ZSIsIm1hZ25pZnkiLCJoZXhhZ29uYWxQaXhlbGF0ZSIsImRpc3RhbmNlRm9nIiwic3VyZmFjZUZvZyIsIkVGRkVDVF9ERVNDUklQVElPTlMiLCJrZXlOYW1lIiwiU1lOQ19USU1FTElORV9NT0RFUyIsInN0YXJ0IiwiZW5kIiwiR0VPQVJST1dfTUVUQURBVEFfS0VZIiwiR0VPQVJST1dfRVhURU5TSU9OUyIsIkxPQURFUlNfQ0ROX1ZFUlNJT04iLCJMT0FERVJTX0NETl9VUkwiLCJnZXRMb2FkZXJPcHRpb25zIiwibXZ0Iiwid29ya2VyVXJsIiwibnB5IiwiQ1VTVE9NX1NDRU5FR1JBUEhfTU9ERUxfSUQiLCJNT0RFTFNfQkFTRV9VUkwiLCJUUklQX0xBWUVSX1NDRU5FR1JBUEhfTU9ERUxTIiwiYW5nbGVzIl0sInNvdXJjZXMiOlsiLi4vLi4vc3JjL2RlZmF1bHQtc2V0dGluZ3MudHMiXSwic291cmNlc0NvbnRlbnQiOlsiLy8gU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IE1JVFxuLy8gQ29weXJpZ2h0IGNvbnRyaWJ1dG9ycyB0byB0aGUga2VwbGVyLmdsIHByb2plY3RcblxuaW1wb3J0IGtleU1pcnJvciBmcm9tICdrZXltaXJyb3InO1xuXG5pbXBvcnQge1xuICBCYXNlTWFwU3R5bGUsXG4gIEVmZmVjdERlc2NyaXB0aW9uLFxuICBSR0JBQ29sb3IsXG4gIFN5bmNUaW1lbGluZU1vZGUsXG4gIEJhc2VNYXBDb2xvck1vZGVzLFxuICBNZXJnZVxufSBmcm9tICdAa2VwbGVyLmdsL3R5cGVzJztcbmltcG9ydCB7XG4gIHNjYWxlTGluZWFyLFxuICBzY2FsZUxvZyxcbiAgc2NhbGVPcmRpbmFsLFxuICBzY2FsZVBvaW50LFxuICBzY2FsZVF1YW50aWxlLFxuICBzY2FsZVF1YW50aXplLFxuICBzY2FsZVNxcnQsXG4gIHNjYWxlVGhyZXNob2xkXG59IGZyb20gJ2QzLXNjYWxlJztcbmltcG9ydCB7VE9PTFRJUF9GT1JNQVRfVFlQRVN9IGZyb20gJy4vdG9vbHRpcCc7XG5cbmV4cG9ydCBjb25zdCBBQ1RJT05fUFJFRklYID0gJ0BAa2VwbGVyLmdsLyc7XG5leHBvcnQgY29uc3QgS0VQTEVSX1VORk9MREVEX0JVQ0tFVCA9ICdodHRwczovL3N0dWRpby1wdWJsaWMtZGF0YS5mb3Vyc3F1YXJlLmNvbS9zdGF0aWNzL2tlcGxlcmdsJztcbmV4cG9ydCBjb25zdCBCQVNFTUFQX0lDT05fUFJFRklYID0gYGdlb2R1ZGVgO1xuZXhwb3J0IGNvbnN0IERFRkFVTFRfTUFQQk9YX0FQSV9VUkwgPSAnaHR0cHM6Ly9hcGkubWFwYm94LmNvbSc7XG5leHBvcnQgY29uc3QgVFJBTlNJVElPTl9EVVJBVElPTiA9IDA7XG5cbi8vIE1vZGFsIElkc1xuLyoqXG4gKiBNb2RhbCBpZDogZGF0YSB0YWJsZVxuICogQGNvbnN0YW50XG4gKiBAdHlwZSB7c3RyaW5nfVxuICogQHB1YmxpY1xuICovXG5leHBvcnQgY29uc3QgREFUQV9UQUJMRV9JRCA9ICdkYXRhVGFibGUnO1xuLyoqXG4gKiBNb2RhbCBpZDogZGVsZXRlIGRhdGFzZXQgY29uZmlybSBkaWFsb2dcbiAqIEBjb25zdGFudFxuICogQHR5cGUge3N0cmluZ31cbiAqIEBwdWJsaWNcbiAqL1xuZXhwb3J0IGNvbnN0IERFTEVURV9EQVRBX0lEID0gJ2RlbGV0ZURhdGEnO1xuLyoqXG4gKiBNb2RhbCBpZDogYWRkIGRhdGEgbW9kYWxcbiAqIEBjb25zdGFudFxuICogQHR5cGUge3N0cmluZ31cbiAqIEBwdWJsaWNcbiAqL1xuZXhwb3J0IGNvbnN0IEFERF9EQVRBX0lEID0gJ2FkZERhdGEnO1xuLyoqXG4gKiBNb2RhbCBpZDogZXhwb3J0IGltYWdlIG1vZGFsXG4gKiBAY29uc3RhbnRcbiAqIEB0eXBlIHtzdHJpbmd9XG4gKiBAcHVibGljXG4gKi9cbmV4cG9ydCBjb25zdCBFWFBPUlRfSU1BR0VfSUQgPSAnZXhwb3J0SW1hZ2UnO1xuLyoqXG4gKiBNb2RhbCBpZDogZXhwb3J0IGRhdGEgbW9kYWxcbiAqIEBjb25zdGFudFxuICogQHR5cGUge3N0cmluZ31cbiAqIEBwdWJsaWNcbiAqL1xuZXhwb3J0IGNvbnN0IEVYUE9SVF9EQVRBX0lEID0gJ2V4cG9ydERhdGEnO1xuLyoqXG4gKiBNb2RhbCBpZDogYWRkIGN1c3RvbSBtYXAgc3R5bGUgbW9kYWxcbiAqIEBjb25zdGFudFxuICogQHR5cGUge3N0cmluZ31cbiAqIEBwdWJsaWNcbiAqL1xuZXhwb3J0IGNvbnN0IEFERF9NQVBfU1RZTEVfSUQgPSAnYWRkTWFwU3R5bGUnO1xuLyoqXG4gKiBNb2RhbCBpZDogZXhwb3J0IG1hcCBtb2RhbFxuICogQGNvbnN0YW50XG4gKiBAdHlwZSB7c3RyaW5nfVxuICogQHB1YmxpY1xuICovXG5leHBvcnQgY29uc3QgRVhQT1JUX01BUF9JRCA9ICdleHBvcnRNYXAnO1xuLyoqXG4gKiBNb2RhbCBpZDogZXhwb3J0IHZpZGVvIG1vZGFsXG4gKiBAY29uc3RhbnRcbiAqIEB0eXBlIHtzdHJpbmd9XG4gKiBAcHVibGljXG4gKi9cbmV4cG9ydCBjb25zdCBFWFBPUlRfVklERU9fSUQgPSAnZXhwb3J0VmlkZW8nO1xuLyoqXG4gKiBNb2RhbCBpZDogc2F2ZSBtYXAgbW9kYWxcbiAqIEBjb25zdGFudFxuICogQHR5cGUge3N0cmluZ31cbiAqIEBwdWJsaWNcbiAqL1xuZXhwb3J0IGNvbnN0IFNBVkVfTUFQX0lEID0gJ3NhdmVNYXAnO1xuLyoqXG4gKiBNb2RhbCBpZDogY29uZmlybSB0byBvdmVyd3JpdGUgc2F2ZWQgbWFwXG4gKiBAY29uc3RhbnRcbiAqIEB0eXBlIHtzdHJpbmd9XG4gKiBAcHVibGljXG4gKi9cbmV4cG9ydCBjb25zdCBPVkVSV1JJVEVfTUFQX0lEID0gJ292ZXJ3cml0ZU1hcCc7XG4vKipcbiAqIE1vZGFsIGlkOiBzaGFyZSBtYXAgdXJsIG1vZGFsXG4gKiBAY29uc3RhbnRcbiAqIEB0eXBlIHtzdHJpbmd9XG4gKiBAcHVibGljXG4gKi9cbmV4cG9ydCBjb25zdCBTSEFSRV9NQVBfSUQgPSAnc2hhcmVNYXAnO1xuXG5leHBvcnQgY29uc3QgS0VQTEVSX0dMX05BTUUgPSAna2VwbGVyLmdsJztcblxuLy8gX19QQUNLQUdFX1ZFUlNJT05fXyBpcyBhdXRvbWF0aWNhbGx5IGluamVjdGVkIGJ5IEJhYmVsL0VzYnVpbGQgZHVyaW5nIHRoZSBidWlsZCBwcm9jZXNzXG4vLyBTaW5jZSB3ZSBhcmUgaW5qZWN0aW5nIHRoaXMgZHVyaW5nIHRoZSBidWlsZCBwcm9jZXNzIHdpdGggYmFiZWxcbi8vIHdoaWxlIGRldmVsb3BpbmcgVkVSU0lPTiBpcyBub3QgZGVmaW5lZCwgd2UgY2FwdHVyZSB0aGUgZXhjZXB0aW9uIGFuZCByZXR1cm5cbi8vIGFuIGVtcHR5IHN0cmluZyB3aGljaCB3aWxsIGFsbG93IHVzIHRvIHJldHJpZXZlIHRoZSBsYXRlc3QgdW1kIHZlcnNpb25cbmV4cG9ydCBjb25zdCBLRVBMRVJfR0xfVkVSU0lPTiA9ICdfX1BBQ0tBR0VfVkVSU0lPTl9fJztcbmV4cG9ydCBjb25zdCBLRVBMRVJfR0xfV0VCU0lURSA9ICdodHRwOi8va2VwbGVyLmdsLyc7XG5cbmV4cG9ydCBjb25zdCBESU1FTlNJT05TID0ge1xuICBzaWRlUGFuZWw6IHtcbiAgICB3aWR0aDogMzAwLFxuICAgIG1hcmdpbjoge3RvcDogMTIsIGxlZnQ6IDEyLCBib3R0b206IDEyLCByaWdodDogMjB9LFxuICAgIGhlYWRlckhlaWdodDogOTZcbiAgfSxcbiAgbWFwQ29udHJvbDoge1xuICAgIHdpZHRoOiAxODQsXG4gICAgcGFkZGluZzogMTIsXG4gICAgbWFwTGVnZW5kOiB7XG4gICAgICBwaW5uZWQ6IHtcbiAgICAgICAgYm90dG9tOiAyMixcbiAgICAgICAgcmlnaHQ6IDEyXG4gICAgICB9XG4gICAgfVxuICB9XG59O1xuXG4vKipcbiAqIFRoZW1lIG5hbWUgdGhhdCBjYW4gYmUgcGFzc2VkIHRvIGBLZXBsZXJHbGAgYHByb3AudGhlbWVgLlxuICogQXZhaWxhYmxlIHRoZW1lcyBhcmUgYFRIRU1FLmxpZ2h0YCBhbmQgYFRIRU1FLmRhcmtgLiBEZWZhdWx0IHRoZW1lIGlzIGBUSEVNRS5kYXJrYFxuICogQGNvbnN0YW50XG4gKiBAdHlwZSB7b2JqZWN0fVxuICogQHB1YmxpY1xuICogQGV4YW1wbGVcbiAqIGBgYGpzXG4gKiBjb25zdCBNYXAgPSAoKSA9PiA8S2VwbGVyR2wgdGhlbWU9e1RIRU1FLmxpZ2h0fSBpZD1cIm1hcFwiLz5cbiAqIGBgYFxuICovXG5leHBvcnQgY29uc3QgVEhFTUUgPSBrZXlNaXJyb3Ioe1xuICBsaWdodDogbnVsbCxcbiAgZGFyazogbnVsbCxcbiAgYmFzZTogbnVsbFxufSk7XG5cbmV4cG9ydCBjb25zdCBTSURFQkFSX1BBTkVMUyA9IFtcbiAge1xuICAgIGlkOiAnbGF5ZXInLFxuICAgIGxhYmVsOiAnc2lkZWJhci5wYW5lbHMubGF5ZXInLFxuICAgIG9uQ2xpY2s6IG51bGxcbiAgfSxcbiAge1xuICAgIGlkOiAnZmlsdGVyJyxcbiAgICBsYWJlbDogJ3NpZGViYXIucGFuZWxzLmZpbHRlcicsXG4gICAgb25DbGljazogbnVsbFxuICB9LFxuICB7XG4gICAgaWQ6ICdpbnRlcmFjdGlvbicsXG4gICAgbGFiZWw6ICdzaWRlYmFyLnBhbmVscy5pbnRlcmFjdGlvbicsXG4gICAgb25DbGljazogbnVsbFxuICB9LFxuICB7XG4gICAgaWQ6ICdtYXAnLFxuICAgIGxhYmVsOiAnc2lkZWJhci5wYW5lbHMuYmFzZW1hcCcsXG4gICAgb25DbGljazogbnVsbFxuICB9XG5dO1xuXG5leHBvcnQgY29uc3QgUEFORUxfVklFV19UT0dHTEVTID0ga2V5TWlycm9yKHtcbiAgbGlzdDogbnVsbCxcbiAgYnlEYXRhc2V0OiBudWxsXG59KTtcblxuLy8gYmFja3dhcmQgY29tcGF0aWJpbGl0eVxuZXhwb3J0IGNvbnN0IFBBTkVMUyA9IFNJREVCQVJfUEFORUxTO1xuXG4vLyBNQVAgU1RZTEVTXG5cbmV4cG9ydCBjb25zdCBERUZBVUxUX0JMREdfQ09MT1IgPSAnI0QxQ0VDNyc7XG5cbmV4cG9ydCBjb25zdCBERUZBVUxUX0JBQ0tHUk9VTkRfQ09MT1IgPSAnIzAwMDAwMCc7XG5cbi8vIGFzc2lzdHMgaW4gaWRlbnRpZnlpbmcgYmFzZW1hcCBiYWNrZ3JvdW5kIGxheWVycyB3aGVuIGF1dG8tZGV0ZXJtaW5pbmcgdGhlIGJhY2tncm91bmRDb2xvclxuZXhwb3J0IGNvbnN0IEJBU0VfTUFQX0JBQ0tHUk9VTkRfTEFZRVJfSURTID0gWydiYWNrZ3JvdW5kJywgJ2JnJywgJ2xhbmQnLCAnd2F0ZXInXTtcblxuZXhwb3J0IGNvbnN0IEJBQ0tHUk9VTkRfTEFZRVJfR1JPVVBfU0xVRyA9ICdCYWNrZ3JvdW5kJztcblxuZXhwb3J0IGNvbnN0IFRIUkVFX0RfQlVJTERJTkdfTEFZRVJfR1JPVVBfU0xVRyA9ICczZCBidWlsZGluZyc7XG5cbmV4cG9ydCB0eXBlIERFRkFVTFRfTEFZRVJfR1JPVVAgPSB7XG4gIHNsdWc6IHN0cmluZztcbiAgZmlsdGVyOiAodmFsdWUpID0+IGJvb2xlYW47XG4gIGRlZmF1bHRWaXNpYmlsaXR5OiBib29sZWFuO1xuICBpc1Zpc2liaWxpdHlUb2dnbGVBdmFpbGFibGU/OiBib29sZWFuO1xuICBpc01vdmVUb1RvcEF2YWlsYWJsZT86IGJvb2xlYW47XG4gIGlzQ29sb3JQaWNrZXJBdmFpbGFibGU/OiBib29sZWFuO1xufTtcblxuZXhwb3J0IGNvbnN0IEJBQ0tHUk9VTkRfTEFZRVJfR1JPVVA6IERFRkFVTFRfTEFZRVJfR1JPVVAgPSB7XG4gIHNsdWc6IEJBQ0tHUk9VTkRfTEFZRVJfR1JPVVBfU0xVRyxcbiAgZmlsdGVyOiAoKSA9PiBmYWxzZSxcbiAgZGVmYXVsdFZpc2liaWxpdHk6IGZhbHNlLFxuICBpc1Zpc2liaWxpdHlUb2dnbGVBdmFpbGFibGU6IGZhbHNlLFxuICBpc01vdmVUb1RvcEF2YWlsYWJsZTogZmFsc2UsXG4gIGlzQ29sb3JQaWNrZXJBdmFpbGFibGU6IHRydWVcbn07XG5cbmV4cG9ydCBjb25zdCBERUZBVUxUX0xBWUVSX0dST1VQUzogREVGQVVMVF9MQVlFUl9HUk9VUFtdID0gW1xuICB7XG4gICAgc2x1ZzogJ2xhYmVsJyxcbiAgICBmaWx0ZXI6ICh7aWQsIHR5cGV9KSA9PiBpZC5tYXRjaCgvKD89KGxhYmVsfHBsYWNlLXxwb2ktKSkvKSB8fCB0eXBlPy5tYXRjaCgvKD89KHN5bWJvbCkpLyksXG4gICAgZGVmYXVsdFZpc2liaWxpdHk6IHRydWUsXG4gICAgaXNWaXNpYmlsaXR5VG9nZ2xlQXZhaWxhYmxlOiB0cnVlLFxuICAgIGlzTW92ZVRvVG9wQXZhaWxhYmxlOiB0cnVlLFxuICAgIGlzQ29sb3JQaWNrZXJBdmFpbGFibGU6IGZhbHNlXG4gIH0sXG4gIHtcbiAgICBzbHVnOiAncm9hZCcsXG4gICAgZmlsdGVyOiAoe2lkfSkgPT4gaWQubWF0Y2goLyg/PShyb2FkfHJhaWx3YXl8dHVubmVsfHN0cmVldHxicmlkZ2UpKSg/IS4qbGFiZWwpLyksXG4gICAgZGVmYXVsdFZpc2liaWxpdHk6IHRydWUsXG4gICAgaXNWaXNpYmlsaXR5VG9nZ2xlQXZhaWxhYmxlOiB0cnVlLFxuICAgIGlzTW92ZVRvVG9wQXZhaWxhYmxlOiB0cnVlLFxuICAgIGlzQ29sb3JQaWNrZXJBdmFpbGFibGU6IGZhbHNlXG4gIH0sXG4gIHtcbiAgICBzbHVnOiAnYm9yZGVyJyxcbiAgICBmaWx0ZXI6ICh7aWR9KSA9PiBpZC5tYXRjaCgvYm9yZGVyfGJvdW5kYXJpZXN8Ym91bmRhcnkvKSxcbiAgICBkZWZhdWx0VmlzaWJpbGl0eTogZmFsc2UsXG4gICAgaXNWaXNpYmlsaXR5VG9nZ2xlQXZhaWxhYmxlOiB0cnVlLFxuICAgIGlzTW92ZVRvVG9wQXZhaWxhYmxlOiB0cnVlLFxuICAgIGlzQ29sb3JQaWNrZXJBdmFpbGFibGU6IGZhbHNlXG4gIH0sXG4gIHtcbiAgICBzbHVnOiAnYnVpbGRpbmcnLFxuICAgIGZpbHRlcjogKHtpZH0pID0+IGlkLm1hdGNoKC9idWlsZGluZy8pLFxuICAgIGRlZmF1bHRWaXNpYmlsaXR5OiB0cnVlLFxuICAgIGlzVmlzaWJpbGl0eVRvZ2dsZUF2YWlsYWJsZTogdHJ1ZSxcbiAgICBpc01vdmVUb1RvcEF2YWlsYWJsZTogdHJ1ZSxcbiAgICBpc0NvbG9yUGlja2VyQXZhaWxhYmxlOiBmYWxzZVxuICB9LFxuICB7XG4gICAgc2x1ZzogJ3dhdGVyJyxcbiAgICBmaWx0ZXI6ICh7aWR9KSA9PiBpZC5tYXRjaCgvKD89KHdhdGVyfHN0cmVhbXxmZXJyeSkpLyksXG4gICAgZGVmYXVsdFZpc2liaWxpdHk6IHRydWUsXG4gICAgaXNWaXNpYmlsaXR5VG9nZ2xlQXZhaWxhYmxlOiB0cnVlLFxuICAgIGlzTW92ZVRvVG9wQXZhaWxhYmxlOiB0cnVlLFxuICAgIGlzQ29sb3JQaWNrZXJBdmFpbGFibGU6IGZhbHNlXG4gIH0sXG4gIHtcbiAgICBzbHVnOiAnbGFuZCcsXG4gICAgZmlsdGVyOiAoe2lkfSkgPT4gaWQubWF0Y2goLyg/PShwYXJrc3xsYW5kY292ZXJ8aW5kdXN0cmlhbHxzYW5kfGhpbGxzaGFkZSkpLyksXG4gICAgZGVmYXVsdFZpc2liaWxpdHk6IHRydWUsXG4gICAgaXNWaXNpYmlsaXR5VG9nZ2xlQXZhaWxhYmxlOiB0cnVlLFxuICAgIGlzTW92ZVRvVG9wQXZhaWxhYmxlOiB0cnVlLFxuICAgIGlzQ29sb3JQaWNrZXJBdmFpbGFibGU6IGZhbHNlXG4gIH0sXG4gIHtcbiAgICBzbHVnOiBUSFJFRV9EX0JVSUxESU5HX0xBWUVSX0dST1VQX1NMVUcsXG4gICAgZmlsdGVyOiAoKSA9PiBmYWxzZSxcbiAgICBkZWZhdWx0VmlzaWJpbGl0eTogZmFsc2UsXG4gICAgaXNWaXNpYmlsaXR5VG9nZ2xlQXZhaWxhYmxlOiB0cnVlLFxuICAgIGlzTW92ZVRvVG9wQXZhaWxhYmxlOiB0cnVlLFxuICAgIGlzQ29sb3JQaWNrZXJBdmFpbGFibGU6IHRydWVcbiAgfVxuXTtcblxuZXhwb3J0IGNvbnN0IEJBU0VfTUFQX0NPTE9SX01PREVTID0ga2V5TWlycm9yKHtcbiAgTk9ORTogbnVsbCxcbiAgREFSSzogbnVsbCxcbiAgTElHSFQ6IG51bGxcbn0pO1xuXG5leHBvcnQgY29uc3QgTk9fTUFQX0lEID0gJ25vX21hcCc7XG5cbi8vIEZhbGxiYWNrIHN0eWxlIHRvIHVzZSB3aGVuIHN0eWxlcyBhcmUgYmVpbmcgZmV0Y2hlZCwgb3Igd2hlblxuLy8gYSBzdHlsZSBmYWlscyB0byBmZXRjaFxuZXhwb3J0IGNvbnN0IEVNUFRZX01BUEJPWF9TVFlMRSA9IHtcbiAgdmVyc2lvbjogOCxcbiAgc291cmNlczoge30sXG4gIGxheWVyczogW11cbn07XG5cbmV4cG9ydCBjb25zdCBNQVBfTElCX09QVElPTlMgPSB7XG4gIE1BUEJPWDogJ21hcGJveCcgYXMgY29uc3QsXG4gIE1BUExJQlJFOiAnbWFwbGlicmUnIGFzIGNvbnN0XG59O1xuXG4vKiogTWFwYm94IEdMIEpTIGRvZXMgbm90IHN1cHBvcnQgcGl0Y2ggYWJvdmUgNjAgZGVncmVlcyAqL1xuZXhwb3J0IGNvbnN0IE1BUEJPWF9NQVhfUElUQ0ggPSA2MDtcblxuZXhwb3J0IHR5cGUgQmFzZU1hcExpYnJhcnlUeXBlID0gJ21hcGJveCcgfCAnbWFwbGlicmUnO1xuXG5leHBvcnQgY29uc3QgTk9fQkFTRU1BUF9JQ09OID0gYCR7QkFTRU1BUF9JQ09OX1BSRUZJWH0vTk9fQkFTRU1BUC5wbmdgO1xuXG5leHBvcnQgY29uc3QgREVGQVVMVF9CQVNFX01BUF9TVFlMRSA9ICdkYXJrLW1hdHRlcic7XG5cbnR5cGUgRGVmYXVsdEJhc2VNYXBTdHlsZSA9IE1lcmdlPFxuICBCYXNlTWFwU3R5bGUsXG4gIHtcbiAgICBjb2xvck1vZGU6IEJhc2VNYXBDb2xvck1vZGVzO1xuICB9XG4+O1xuXG5leHBvcnQgY29uc3QgREVGQVVMVF9OT19CQVNFTUFQX1NUWUxFOiBEZWZhdWx0QmFzZU1hcFN0eWxlID0ge1xuICBpZDogTk9fTUFQX0lELFxuICBsYWJlbDogJ05vIEJhc2VtYXAnLFxuICB1cmw6ICcnLFxuICBpY29uOiBOT19CQVNFTUFQX0lDT04sXG4gIGxheWVyR3JvdXBzOiBbQkFDS0dST1VORF9MQVlFUl9HUk9VUF0sXG4gIGNvbG9yTW9kZTogQkFTRV9NQVBfQ09MT1JfTU9ERVMuTk9ORSxcbiAgc3R5bGU6IEVNUFRZX01BUEJPWF9TVFlMRVxufTtcblxuZXhwb3J0IGNvbnN0IERFRkFVTFRfTUFQQk9YX1NUWUxFUzogRGVmYXVsdEJhc2VNYXBTdHlsZVtdID0gW1xuICB7XG4gICAgaWQ6ICdkYXJrJyxcbiAgICBsYWJlbDogJ0RhcmsnLFxuICAgIHVybDogJ21hcGJveDovL3N0eWxlcy91YmVyZGF0YS9jam9xYmJmNmw5azMwMnNsOTZ0eXZrYTA5JyxcbiAgICBpY29uOiBgJHtCQVNFTUFQX0lDT05fUFJFRklYfS9VQkVSX0RBUktfVjIucG5nYCxcbiAgICBsYXllckdyb3VwczogREVGQVVMVF9MQVlFUl9HUk9VUFMsXG4gICAgY29sb3JNb2RlOiBCQVNFX01BUF9DT0xPUl9NT0RFUy5EQVJLLFxuICAgIGNvbXBsaW1lbnRhcnlTdHlsZUlkOiAnbGlnaHQnXG4gIH0sXG4gIHtcbiAgICBpZDogJ2xpZ2h0JyxcbiAgICBsYWJlbDogJ0xpZ2h0JyxcbiAgICB1cmw6ICdtYXBib3g6Ly9zdHlsZXMvdWJlcmRhdGEvY2pvcWI5ajMzOWsxZjJzbDl0NWljNWJuNCcsXG4gICAgaWNvbjogYCR7QkFTRU1BUF9JQ09OX1BSRUZJWH0vVUJFUl9MSUdIVF9WMi5wbmdgLFxuICAgIGxheWVyR3JvdXBzOiBERUZBVUxUX0xBWUVSX0dST1VQUyxcbiAgICBjb2xvck1vZGU6IEJBU0VfTUFQX0NPTE9SX01PREVTLkxJR0hULFxuICAgIGNvbXBsaW1lbnRhcnlTdHlsZUlkOiAnZGFyaydcbiAgfSxcbiAge1xuICAgIGlkOiAnbXV0ZWQnLFxuICAgIGxhYmVsOiAnTXV0ZWQgTGlnaHQnLFxuICAgIHVybDogJ21hcGJveDovL3N0eWxlcy91YmVyZGF0YS9jamZ5bDAza3AxdHVsMnNtZjV2MnRiZGQ0JyxcbiAgICBpY29uOiBgJHtCQVNFTUFQX0lDT05fUFJFRklYfS9VQkVSX01VVEVEX0xJR0hULnBuZ2AsXG4gICAgbGF5ZXJHcm91cHM6IERFRkFVTFRfTEFZRVJfR1JPVVBTLFxuICAgIGNvbG9yTW9kZTogQkFTRV9NQVBfQ09MT1JfTU9ERVMuTElHSFQsXG4gICAgY29tcGxpbWVudGFyeVN0eWxlSWQ6ICdtdXRlZF9uaWdodCdcbiAgfSxcbiAge1xuICAgIGlkOiAnbXV0ZWRfbmlnaHQnLFxuICAgIGxhYmVsOiAnTXV0ZWQgTmlnaHQnLFxuICAgIHVybDogJ21hcGJveDovL3N0eWxlcy91YmVyZGF0YS9jamZ4aGxpa21hajFiMnNveXpldm55d2dzJyxcbiAgICBpY29uOiBgJHtCQVNFTUFQX0lDT05fUFJFRklYfS9VQkVSX01VVEVEX05JR0hULnBuZ2AsXG4gICAgbGF5ZXJHcm91cHM6IERFRkFVTFRfTEFZRVJfR1JPVVBTLFxuICAgIGNvbG9yTW9kZTogQkFTRV9NQVBfQ09MT1JfTU9ERVMuREFSSyxcbiAgICBjb21wbGltZW50YXJ5U3R5bGVJZDogJ211dGVkJ1xuICB9XG5dO1xuXG5leHBvcnQgY29uc3QgREVGQVVMVF9NQVBCT1hfU0FURUxJVEVfU1RZTEVTOiBEZWZhdWx0QmFzZU1hcFN0eWxlW10gPSBbXG4gIHtcbiAgICBpZDogJ3NhdGVsbGl0ZScsXG4gICAgbGFiZWw6ICdTYXRlbGxpdGUgd2l0aCBzdHJlZXRzJyxcbiAgICB1cmw6IGBtYXBib3g6Ly9zdHlsZXMvbWFwYm94L3NhdGVsbGl0ZS1zdHJlZXRzLXYxMWAsXG4gICAgaWNvbjogYCR7QkFTRU1BUF9JQ09OX1BSRUZJWH0vVUJFUl9TQVRFTExJVEUucG5nYCxcbiAgICBsYXllckdyb3VwczogREVGQVVMVF9MQVlFUl9HUk9VUFMsXG4gICAgY29sb3JNb2RlOiBCQVNFX01BUF9DT0xPUl9NT0RFUy5OT05FXG4gIH1cbl07XG5cbmV4cG9ydCBjb25zdCBERUZBVUxUX01BUExJQlJFX1NUWUxFUzogRGVmYXVsdEJhc2VNYXBTdHlsZVtdID0gW1xuICB7XG4gICAgaWQ6ICdkYXJrLW1hdHRlcicsXG4gICAgbGFiZWw6ICdEYXJrTWF0dGVyJyxcbiAgICB1cmw6ICdodHRwczovL2Jhc2VtYXBzLmNhcnRvY2RuLmNvbS9nbC9kYXJrLW1hdHRlci1nbC1zdHlsZS9zdHlsZS5qc29uJyxcbiAgICBpY29uOiBgJHtCQVNFTUFQX0lDT05fUFJFRklYfS9EQVJLTUFUVEVSLnBuZ2AsXG4gICAgbGF5ZXJHcm91cHM6IERFRkFVTFRfTEFZRVJfR1JPVVBTLFxuICAgIGNvbG9yTW9kZTogQkFTRV9NQVBfQ09MT1JfTU9ERVMuREFSSyxcbiAgICBjb21wbGltZW50YXJ5U3R5bGVJZDogJ3Bvc2l0cm9uJ1xuICB9LFxuICB7XG4gICAgaWQ6ICdwb3NpdHJvbicsXG4gICAgbGFiZWw6ICdQb3NpdHJvbicsXG4gICAgdXJsOiAnaHR0cHM6Ly9iYXNlbWFwcy5jYXJ0b2Nkbi5jb20vZ2wvcG9zaXRyb24tZ2wtc3R5bGUvc3R5bGUuanNvbicsXG4gICAgaWNvbjogYCR7QkFTRU1BUF9JQ09OX1BSRUZJWH0vUE9TSVRST04ucG5nYCxcbiAgICBsYXllckdyb3VwczogREVGQVVMVF9MQVlFUl9HUk9VUFMsXG4gICAgY29sb3JNb2RlOiBCQVNFX01BUF9DT0xPUl9NT0RFUy5MSUdIVCxcbiAgICBjb21wbGltZW50YXJ5U3R5bGVJZDogJ2RhcmstbWF0dGVyJ1xuICB9LFxuICB7XG4gICAgaWQ6ICd2b3lhZ2VyJyxcbiAgICBsYWJlbDogJ1ZveWFnZXInLFxuICAgIHVybDogJ2h0dHBzOi8vYmFzZW1hcHMuY2FydG9jZG4uY29tL2dsL3ZveWFnZXItZ2wtc3R5bGUvc3R5bGUuanNvbicsXG4gICAgaWNvbjogYCR7QkFTRU1BUF9JQ09OX1BSRUZJWH0vVk9ZQUdFUi5wbmdgLFxuICAgIGxheWVyR3JvdXBzOiBERUZBVUxUX0xBWUVSX0dST1VQUyxcbiAgICBjb2xvck1vZGU6IEJBU0VfTUFQX0NPTE9SX01PREVTLkxJR0hULFxuICAgIGNvbXBsaW1lbnRhcnlTdHlsZUlkOiAnZGFyay1tYXR0ZXInXG4gIH1cbl07XG5cbmV4cG9ydCBjb25zdCBERUZBVUxUX01BUF9TVFlMRVMgPSBbXG4gIERFRkFVTFRfTk9fQkFTRU1BUF9TVFlMRSxcbiAgLi4uREVGQVVMVF9NQVBMSUJSRV9TVFlMRVMsXG4gIC4uLkRFRkFVTFRfTUFQQk9YX1NBVEVMSVRFX1NUWUxFUyxcbiAgLi4uREVGQVVMVF9NQVBCT1hfU1RZTEVTXG5dO1xuXG5leHBvcnQgY29uc3QgR0VPSlNPTl9GSUVMRFMgPSB7XG4gIGdlb2pzb246IFsnX2dlb2pzb24nLCAnYWxsX3BvaW50cycsICdnZW9qc29uJ11cbn07XG5cbmV4cG9ydCBjb25zdCBJQ09OX0ZJRUxEUyA9IHtcbiAgaWNvbjogWydpY29uJ11cbn07XG5cbmV4cG9ydCBjb25zdCBUUklQX1BPSU5UX0ZJRUxEUzogW3N0cmluZywgc3RyaW5nXVtdID0gW1xuICBbJ2xhdCcsICdsbmcnXSxcbiAgWydsYXQnLCAnbG9uJ10sXG4gIFsnbGF0JywgJ2xvbmcnXSxcbiAgWydsYXRpdHVkZScsICdsb25naXR1ZGUnXVxuXTtcblxuZXhwb3J0IGNvbnN0IEFMVElUVURFX0ZJRUxEUyA9IFsnYWx0JywgJ2FsdGl0dWRlJ107XG5leHBvcnQgY29uc3QgVFJJUF9BUkNfRklFTERTID0ge1xuICBsYXQwOiAnYmVnaW50cmlwJyxcbiAgbG5nMDogJ2JlZ2ludHJpcCcsXG4gIGxhdDE6ICdkcm9wb2ZmJyxcbiAgbG5nMTogJ2Ryb3BvZmYnXG59O1xuXG5leHBvcnQgY29uc3QgRklMVEVSX1RZUEVTID0ga2V5TWlycm9yKHtcbiAgcmFuZ2U6IG51bGwsXG4gIHNlbGVjdDogbnVsbCxcbiAgaW5wdXQ6IG51bGwsXG4gIHRpbWVSYW5nZTogbnVsbCxcbiAgbXVsdGlTZWxlY3Q6IG51bGwsXG4gIHBvbHlnb246IG51bGxcbn0pO1xuXG5leHBvcnQgY29uc3QgRklMVEVSX1ZJRVdfVFlQRVMgPSBrZXlNaXJyb3Ioe1xuICBzaWRlOiBudWxsLFxuICBlbmxhcmdlZDogbnVsbCxcbiAgbWluaWZpZWQ6IG51bGxcbn0pO1xuXG5leHBvcnQgY29uc3QgREVGQVVMVF9GSUxURVJfVklFV19UWVBFID0gRklMVEVSX1ZJRVdfVFlQRVMuc2lkZTtcblxuZXhwb3J0IHR5cGUgU0NBTEVfVFlQRVNfREVGID0ge1xuICBvcmRpbmFsOiAnb3JkaW5hbCc7XG4gIHF1YW50aWxlOiAncXVhbnRpbGUnO1xuICBxdWFudGl6ZTogJ3F1YW50aXplJztcbiAgbGluZWFyOiAnbGluZWFyJztcbiAgc3FydDogJ3NxcnQnO1xuICBsb2c6ICdsb2cnO1xuICBwb2ludDogJ3BvaW50JztcbiAgdGhyZXNob2xkOiAndGhyZXNob2xkJztcbiAgY3VzdG9tOiAnY3VzdG9tJztcbiAgY3VzdG9tT3JkaW5hbDogJ2N1c3RvbU9yZGluYWwnO1xufTtcblxuZXhwb3J0IGNvbnN0IFNDQUxFX1RZUEVTOiBTQ0FMRV9UWVBFU19ERUYgPSBrZXlNaXJyb3Ioe1xuICBvcmRpbmFsOiBudWxsLFxuICBxdWFudGlsZTogbnVsbCxcbiAgcXVhbnRpemU6IG51bGwsXG4gIGxpbmVhcjogbnVsbCxcbiAgc3FydDogbnVsbCxcbiAgbG9nOiBudWxsLFxuICB0aHJlc2hvbGQ6IG51bGwsXG4gIGN1c3RvbTogbnVsbCxcbiAgY3VzdG9tT3JkaW5hbDogbnVsbCxcbiAgLy8gb3JkaW5hbCBkb21haW4gdG8gbGluZWFyIHJhbmdlXG4gIHBvaW50OiBudWxsXG59KTtcbmV4cG9ydCBjb25zdCBTQ0FMRV9UWVBFX05BTUVTOiB7W2tleSBpbiBrZXlvZiBTQ0FMRV9UWVBFU19ERUZdOiBzdHJpbmd9ID0ge1xuICBvcmRpbmFsOiAnT3JkaW5hbCcsXG4gIHF1YW50aWxlOiAnUXVhbnRpbGUnLFxuICBxdWFudGl6ZTogJ1F1YW50aXplJyxcbiAgbGluZWFyOiAnTGluZWFyJyxcbiAgc3FydDogJ1NxcnQnLFxuICBsb2c6ICdMb2cnLFxuICB0aHJlc2hvbGQ6ICdUaHJlc2hvbGQnLFxuICBjdXN0b206ICdDdXN0b20gQnJlYWtzJyxcbiAgY3VzdG9tT3JkaW5hbDogJ0N1c3RvbSBPcmRpbmFsJyxcbiAgcG9pbnQ6ICdQb2ludCdcbn07XG5cbmV4cG9ydCB0eXBlIFNDQUxFX0ZVTkNfVFlQRSA9IHtcbiAgW2tleSBpbiBrZXlvZiBTQ0FMRV9UWVBFU19ERUZdOiAoKSA9PiBudW1iZXI7XG59O1xuXG5leHBvcnQgY29uc3QgU0NBTEVfRlVOQyA9IHtcbiAgW1NDQUxFX1RZUEVTLmxpbmVhcl06IHNjYWxlTGluZWFyLFxuICBbU0NBTEVfVFlQRVMucXVhbnRpemVdOiBzY2FsZVF1YW50aXplLFxuICBbU0NBTEVfVFlQRVMucXVhbnRpbGVdOiBzY2FsZVF1YW50aWxlLFxuICBbU0NBTEVfVFlQRVMub3JkaW5hbF06IHNjYWxlT3JkaW5hbCxcbiAgW1NDQUxFX1RZUEVTLnNxcnRdOiBzY2FsZVNxcnQsXG4gIFtTQ0FMRV9UWVBFUy5sb2ddOiBzY2FsZUxvZyxcbiAgW1NDQUxFX1RZUEVTLnBvaW50XTogc2NhbGVQb2ludCxcbiAgW1NDQUxFX1RZUEVTLnRocmVzaG9sZF06IHNjYWxlVGhyZXNob2xkLFxuICBbU0NBTEVfVFlQRVMuY3VzdG9tXTogc2NhbGVUaHJlc2hvbGQsXG4gIFtTQ0FMRV9UWVBFUy5jdXN0b21PcmRpbmFsXTogc2NhbGVPcmRpbmFsXG59O1xuXG5leHBvcnQgY29uc3QgQUxMX0ZJRUxEX1RZUEVTID0ga2V5TWlycm9yKHtcbiAgYm9vbGVhbjogbnVsbCxcbiAgZGF0ZTogbnVsbCxcbiAgZ2VvanNvbjogbnVsbCxcbiAgaW50ZWdlcjogbnVsbCxcbiAgcmVhbDogbnVsbCxcbiAgc3RyaW5nOiBudWxsLFxuICB0aW1lc3RhbXA6IG51bGwsXG4gIHBvaW50OiBudWxsLFxuICBhcnJheTogbnVsbCxcbiAgb2JqZWN0OiBudWxsLFxuICBnZW9hcnJvdzogbnVsbCxcbiAgaDM6IG51bGxcbn0pO1xuXG4vLyBEYXRhIFRhYmxlXG5leHBvcnQgY29uc3QgU09SVF9PUkRFUiA9IGtleU1pcnJvcih7XG4gIEFTQ0VORElORzogbnVsbCxcbiAgREVTQ0VORElORzogbnVsbCxcbiAgVU5TT1JUOiBudWxsXG59KTtcblxuZXhwb3J0IGNvbnN0IFRBQkxFX09QVElPTiA9IGtleU1pcnJvcih7XG4gIFNPUlRfQVNDOiBudWxsLFxuICBTT1JUX0RFUzogbnVsbCxcbiAgVU5TT1JUOiBudWxsLFxuICBQSU46IG51bGwsXG4gIFVOUElOOiBudWxsLFxuICBDT1BZOiBudWxsLFxuICBGT1JNQVRfQ09MVU1OOiBudWxsXG59KTtcblxuZXhwb3J0IHR5cGUgVGFibGVPcHRpb24gPSB7XG4gIHZhbHVlOiAnU09SVF9BU0MnIHwgJ1NPUlRfREVTJyB8ICdVTlNPUlQnIHwgJ1BJTicgfCAnVU5QSU4nIHwgJ0NPUFknIHwgJ0ZPUk1BVF9DT0xVTU4nO1xuICBkaXNwbGF5OiBzdHJpbmc7XG4gIGljb246IHN0cmluZztcbiAgY29uZGl0aW9uPzogKHByb3BzOiBhbnkpID0+IGJvb2xlYW47XG59O1xuZXhwb3J0IGNvbnN0IFRBQkxFX09QVElPTl9MSVNUOiBUYWJsZU9wdGlvbltdID0gW1xuICB7XG4gICAgdmFsdWU6IFRBQkxFX09QVElPTi5TT1JUX0FTQyxcbiAgICBkaXNwbGF5OiAnU29ydCBBc2NlbmRpbmcnLFxuICAgIGljb246ICdBcnJvd1VwJyxcbiAgICBjb25kaXRpb246IHByb3BzID0+IHByb3BzLnNvcnRUYWJsZUNvbHVtbiAmJiBwcm9wcy5zb3J0TW9kZSAhPT0gU09SVF9PUkRFUi5BU0NFTkRJTkdcbiAgfSxcbiAge1xuICAgIHZhbHVlOiBUQUJMRV9PUFRJT04uU09SVF9ERVMsXG4gICAgZGlzcGxheTogJ1NvcnQgRGVzY2VuZGluZycsXG4gICAgaWNvbjogJ0Fycm93RG93bicsXG4gICAgY29uZGl0aW9uOiBwcm9wcyA9PiBwcm9wcy5zb3J0VGFibGVDb2x1bW4gJiYgcHJvcHMuc29ydE1vZGUgIT09IFNPUlRfT1JERVIuREVTQ0VORElOR1xuICB9LFxuICB7XG4gICAgdmFsdWU6IFRBQkxFX09QVElPTi5VTlNPUlQsXG4gICAgZGlzcGxheTogJ1Vuc29ydCBDb2x1bW4nLFxuICAgIGljb246ICdDYW5jZWwnLFxuICAgIGNvbmRpdGlvbjogcHJvcHMgPT4gcHJvcHMuaXNTb3J0ZWRcbiAgfSxcbiAge1xuICAgIHZhbHVlOiBUQUJMRV9PUFRJT04uUElOLFxuICAgIGRpc3BsYXk6ICdQaW4gQ29sdW1uJyxcbiAgICBpY29uOiAnUGluJyxcbiAgICBjb25kaXRpb246IHByb3BzID0+ICFwcm9wcy5pc1Bpbm5lZFxuICB9LFxuICB7XG4gICAgdmFsdWU6IFRBQkxFX09QVElPTi5VTlBJTixcbiAgICBkaXNwbGF5OiAnVW5waW4gQ29sdW1uJyxcbiAgICBpY29uOiAnQ2FuY2VsJyxcbiAgICBjb25kaXRpb246IHByb3BzID0+IHByb3BzLmlzUGlubmVkXG4gIH0sXG4gIHt2YWx1ZTogVEFCTEVfT1BUSU9OLkNPUFksIGRpc3BsYXk6ICdDb3B5IENvbHVtbicsIGljb246ICdDbGlwYm9hcmQnfSxcbiAge1xuICAgIHZhbHVlOiBUQUJMRV9PUFRJT04uRk9STUFUX0NPTFVNTixcbiAgICBkaXNwbGF5OiAnRm9ybWF0IENvbHVtbicsXG4gICAgaWNvbjogJ0hhc2gnLFxuICAgIGNvbmRpdGlvbjogcHJvcHMgPT4gcHJvcHMuc2V0RGlzcGxheUZvcm1hdFxuICB9XG5dO1xuXG5jb25zdCBZRUxMT1cgPSAnMjQ4LCAxOTQsIDI4JztcbmNvbnN0IFBJTksgPSAnMjQyLCAxNTIsIDE2Myc7XG5jb25zdCBQVVJQTEUgPSAnMTYwLCAxMDYsIDIwNic7XG5jb25zdCBCTFVFID0gJzE0MCwgMjEwLCAyMDUnO1xuY29uc3QgQkxVRTIgPSAnMTA2LCAxNjAsIDIwNic7XG5jb25zdCBCTFVFMyA9ICcwLCAxNzIsIDIzNyc7XG5jb25zdCBHUkVFTiA9ICcxMDYsIDE2MCwgNTYnO1xuY29uc3QgR1JFRU4yID0gJzc0LCAxNjUsIDE1MCc7XG5jb25zdCBSRUQgPSAnMjM3LCA4OCwgMTA2JztcbmNvbnN0IE9SQU5HRSA9ICcyMzEsIDExMCwgNTgnO1xuXG5leHBvcnQgY29uc3QgRklFTERfVFlQRV9ESVNQTEFZID0ge1xuICBbQUxMX0ZJRUxEX1RZUEVTLmJvb2xlYW5dOiB7XG4gICAgbGFiZWw6ICdib29sJyxcbiAgICBjb2xvcjogUElOS1xuICB9LFxuICBbQUxMX0ZJRUxEX1RZUEVTLmRhdGVdOiB7XG4gICAgbGFiZWw6ICdkYXRlJyxcbiAgICBjb2xvcjogUFVSUExFXG4gIH0sXG4gIFtBTExfRklFTERfVFlQRVMuZ2VvanNvbl06IHtcbiAgICBsYWJlbDogJ2dlbycsXG4gICAgY29sb3I6IEJMVUUyXG4gIH0sXG4gIFtBTExfRklFTERfVFlQRVMuZ2VvYXJyb3ddOiB7XG4gICAgbGFiZWw6ICdnZW8nLFxuICAgIGNvbG9yOiBCTFVFMlxuICB9LFxuICBbQUxMX0ZJRUxEX1RZUEVTLmludGVnZXJdOiB7XG4gICAgbGFiZWw6ICdpbnQnLFxuICAgIGNvbG9yOiBZRUxMT1dcbiAgfSxcbiAgW0FMTF9GSUVMRF9UWVBFUy5yZWFsXToge1xuICAgIGxhYmVsOiAnZmxvYXQnLFxuICAgIGNvbG9yOiBZRUxMT1dcbiAgfSxcbiAgW0FMTF9GSUVMRF9UWVBFUy5zdHJpbmddOiB7XG4gICAgbGFiZWw6ICdzdHJpbmcnLFxuICAgIGNvbG9yOiBCTFVFXG4gIH0sXG4gIFtBTExfRklFTERfVFlQRVMudGltZXN0YW1wXToge1xuICAgIGxhYmVsOiAndGltZScsXG4gICAgY29sb3I6IEdSRUVOXG4gIH0sXG4gIC8vIGZpZWxkIHBhaXJzXG4gIFtBTExfRklFTERfVFlQRVMucG9pbnRdOiB7XG4gICAgbGFiZWw6ICdwb2ludCcsXG4gICAgY29sb3I6IEJMVUUzXG4gIH0sXG4gIFtBTExfRklFTERfVFlQRVMuYXJyYXldOiB7XG4gICAgbGFiZWw6ICdhcnJheScsXG4gICAgY29sb3I6IE9SQU5HRVxuICB9LFxuICBbQUxMX0ZJRUxEX1RZUEVTLm9iamVjdF06IHtcbiAgICBsYWJlbDogJ29iamVjdCcsXG4gICAgY29sb3I6IEdSRUVOMlxuICB9LFxuICBbQUxMX0ZJRUxEX1RZUEVTLmgzXToge1xuICAgIGxhYmVsOiAnaDMnLFxuICAgIGNvbG9yOiBCTFVFXG4gIH1cbn07XG5cbmV4cG9ydCBjb25zdCBGSUVMRF9DT0xPUlMgPSB7XG4gIGRlZmF1bHQ6IFJFRFxufTtcbmV4cG9ydCBjb25zdCBISUdITElHSF9DT0xPUl8zRDogUkdCQUNvbG9yID0gWzI1NSwgMjU1LCAyNTUsIDYwXTtcbmV4cG9ydCBjb25zdCBDSEFOTkVMX1NDQUxFUyA9IGtleU1pcnJvcih7XG4gIGNvbG9yOiBudWxsLFxuICByYWRpdXM6IG51bGwsXG4gIHNpemU6IG51bGwsXG4gIGNvbG9yQWdncjogbnVsbCxcbiAgc2l6ZUFnZ3I6IG51bGwsXG4gIGFuZ2xlOiBudWxsXG59KTtcblxuZXhwb3J0IGNvbnN0IEFHR1JFR0FUSU9OX1RZUEVTOiB7XG4gIC8vIGRlZmF1bHRcbiAgY291bnQ6ICdjb3VudCc7XG4gIC8vIGxpbmVhclxuICBhdmVyYWdlOiAnYXZlcmFnZSc7XG4gIG1heGltdW06ICdtYXhpbXVtJztcbiAgbWluaW11bTogJ21pbmltdW0nO1xuICBtZWRpYW46ICdtZWRpYW4nO1xuICBzdGRldjogJ3N0ZGV2JztcbiAgc3VtOiAnc3VtJztcbiAgdmFyaWFuY2U6ICd2YXJpYW5jZSc7XG4gIC8vIG9yZGluYWxcbiAgbW9kZTogJ21vZGUnO1xuICBjb3VudFVuaXF1ZTogJ2NvdW50VW5pcXVlJztcbn0gPSB7XG4gIC8vIGRlZmF1bHRcbiAgY291bnQ6ICdjb3VudCcsXG4gIC8vIGxpbmVhclxuICBhdmVyYWdlOiAnYXZlcmFnZScsXG4gIG1heGltdW06ICdtYXhpbXVtJyxcbiAgbWluaW11bTogJ21pbmltdW0nLFxuICBtZWRpYW46ICdtZWRpYW4nLFxuICBzdGRldjogJ3N0ZGV2JyxcbiAgc3VtOiAnc3VtJyxcbiAgdmFyaWFuY2U6ICd2YXJpYW5jZScsXG4gIC8vIG9yZGluYWxcbiAgbW9kZTogJ21vZGUnLFxuICBjb3VudFVuaXF1ZTogJ2NvdW50VW5pcXVlJ1xufTtcblxuZXhwb3J0IGNvbnN0IEFHR1JFR0FUSU9OX1RZUEVfT1BUSU9OUzoge2lkOiBzdHJpbmc7IGxhYmVsOiBzdHJpbmd9W10gPSBPYmplY3QuZW50cmllcyhcbiAgQUdHUkVHQVRJT05fVFlQRVNcbikubWFwKChba2V5LCB2YWx1ZV0pID0+ICh7XG4gIGlkOiBrZXksXG4gIGxhYmVsOlxuICAgIGtleSA9PT0gJ3N0ZGV2J1xuICAgICAgPyAnU3RkIERldmlhdGlvbidcbiAgICAgIDoga2V5ID09PSAnY291bnRVbmlxdWUnXG4gICAgICA/ICdDb3VudCBVbmlxdWUnXG4gICAgICA6IHR5cGVvZiB2YWx1ZSA9PT0gJ3N0cmluZydcbiAgICAgID8gdmFsdWUuY2hhckF0KDApLnRvVXBwZXJDYXNlKCkgKyB2YWx1ZS5zbGljZSgxKVxuICAgICAgOiB2YWx1ZVxufSkpO1xuXG5leHBvcnQgY29uc3QgbGluZWFyRmllbGRTY2FsZUZ1bmN0aW9ucyA9IHtcbiAgW0NIQU5ORUxfU0NBTEVTLmNvbG9yXTogW1NDQUxFX1RZUEVTLnF1YW50aXplLCBTQ0FMRV9UWVBFUy5xdWFudGlsZSwgU0NBTEVfVFlQRVMuY3VzdG9tXSxcbiAgW0NIQU5ORUxfU0NBTEVTLnJhZGl1c106IFtTQ0FMRV9UWVBFUy5zcXJ0XSxcbiAgW0NIQU5ORUxfU0NBTEVTLnNpemVdOiBbU0NBTEVfVFlQRVMubGluZWFyLCBTQ0FMRV9UWVBFUy5zcXJ0LCBTQ0FMRV9UWVBFUy5sb2ddLFxuICBbQ0hBTk5FTF9TQ0FMRVMuYW5nbGVdOiBbU0NBTEVfVFlQRVMubGluZWFyXVxufTtcblxuY29uc3QgREVGQVVMVF9BR0dSRUdBVElPTl9DT0xPUl9TQ0FMRVMgPSBbXG4gIFNDQUxFX1RZUEVTLnF1YW50aXplLFxuICBTQ0FMRV9UWVBFUy5xdWFudGlsZSxcbiAgU0NBTEVfVFlQRVMuY3VzdG9tXG5dO1xuXG5leHBvcnQgY29uc3QgbGluZWFyRmllbGRBZ2dyU2NhbGVGdW5jdGlvbnMgPSB7XG4gIFtDSEFOTkVMX1NDQUxFUy5jb2xvckFnZ3JdOiBbXG4gICAgQUdHUkVHQVRJT05fVFlQRVMuYXZlcmFnZSxcbiAgICBBR0dSRUdBVElPTl9UWVBFUy5tYXhpbXVtLFxuICAgIEFHR1JFR0FUSU9OX1RZUEVTLm1pbmltdW0sXG4gICAgQUdHUkVHQVRJT05fVFlQRVMubWVkaWFuLFxuICAgIEFHR1JFR0FUSU9OX1RZUEVTLnN0ZGV2LFxuICAgIEFHR1JFR0FUSU9OX1RZUEVTLnN1bSxcbiAgICBBR0dSRUdBVElPTl9UWVBFUy52YXJpYW5jZSxcbiAgICBBR0dSRUdBVElPTl9UWVBFUy5jb3VudFxuICBdLnJlZHVjZSgocHJldiwgY3VyKSA9PiB7XG4gICAgcHJldltjdXJdID0gREVGQVVMVF9BR0dSRUdBVElPTl9DT0xPUl9TQ0FMRVM7XG4gICAgcmV0dXJuIHByZXY7XG4gIH0sIHt9KSxcblxuICBbQ0hBTk5FTF9TQ0FMRVMuc2l6ZUFnZ3JdOiB7XG4gICAgW0FHR1JFR0FUSU9OX1RZUEVTLmF2ZXJhZ2VdOiBbU0NBTEVfVFlQRVMubGluZWFyLCBTQ0FMRV9UWVBFUy5zcXJ0LCBTQ0FMRV9UWVBFUy5sb2ddLFxuICAgIFtBR0dSRUdBVElPTl9UWVBFUy5tYXhpbXVtXTogW1NDQUxFX1RZUEVTLmxpbmVhciwgU0NBTEVfVFlQRVMuc3FydCwgU0NBTEVfVFlQRVMubG9nXSxcbiAgICBbQUdHUkVHQVRJT05fVFlQRVMubWluaW11bV06IFtTQ0FMRV9UWVBFUy5saW5lYXIsIFNDQUxFX1RZUEVTLnNxcnQsIFNDQUxFX1RZUEVTLmxvZ10sXG4gICAgW0FHR1JFR0FUSU9OX1RZUEVTLm1lZGlhbl06IFtTQ0FMRV9UWVBFUy5saW5lYXIsIFNDQUxFX1RZUEVTLnNxcnQsIFNDQUxFX1RZUEVTLmxvZ10sXG4gICAgW0FHR1JFR0FUSU9OX1RZUEVTLnN0ZGV2XTogW1NDQUxFX1RZUEVTLmxpbmVhciwgU0NBTEVfVFlQRVMuc3FydCwgU0NBTEVfVFlQRVMubG9nXSxcbiAgICBbQUdHUkVHQVRJT05fVFlQRVMuc3VtXTogW1NDQUxFX1RZUEVTLmxpbmVhciwgU0NBTEVfVFlQRVMuc3FydCwgU0NBTEVfVFlQRVMubG9nXSxcbiAgICBbQUdHUkVHQVRJT05fVFlQRVMudmFyaWFuY2VdOiBbU0NBTEVfVFlQRVMubGluZWFyLCBTQ0FMRV9UWVBFUy5zcXJ0LCBTQ0FMRV9UWVBFUy5sb2ddXG4gIH1cbn07XG5cbmV4cG9ydCBjb25zdCBvcmRpbmFsRmllbGRTY2FsZUZ1bmN0aW9ucyA9IHtcbiAgW0NIQU5ORUxfU0NBTEVTLmNvbG9yXTogW1NDQUxFX1RZUEVTLm9yZGluYWwsIFNDQUxFX1RZUEVTLmN1c3RvbU9yZGluYWxdLFxuICBbQ0hBTk5FTF9TQ0FMRVMucmFkaXVzXTogW1NDQUxFX1RZUEVTLnBvaW50XSxcbiAgW0NIQU5ORUxfU0NBTEVTLnNpemVdOiBbU0NBTEVfVFlQRVMucG9pbnRdXG59O1xuXG5leHBvcnQgY29uc3Qgb3JkaW5hbEZpZWxkQWdnclNjYWxlRnVuY3Rpb25zID0ge1xuICAvLyBbQ0hBTk5FTF9TQ0FMRVMuY29sb3JBZ2dyXTogW1NDQUxFX1RZUEVTLm9yZGluYWwsIFNDQUxFX1RZUEVTLmxpbmVhcl0sXG4gIFtDSEFOTkVMX1NDQUxFUy5jb2xvckFnZ3JdOiB7XG4gICAgW0FHR1JFR0FUSU9OX1RZUEVTLm1vZGVdOiBbU0NBTEVfVFlQRVMub3JkaW5hbF0sXG4gICAgW0FHR1JFR0FUSU9OX1RZUEVTLmNvdW50VW5pcXVlXTogW1NDQUxFX1RZUEVTLnF1YW50aXplLCBTQ0FMRV9UWVBFUy5xdWFudGlsZV1cbiAgfSxcblxuICAvLyBDdXJyZW50bHkgZG9lc24ndCBzdXBwb3J0IHlldFxuICBbQ0hBTk5FTF9TQ0FMRVMuc2l6ZUFnZ3JdOiB7fVxufTtcblxuZXhwb3J0IGNvbnN0IG5vdFN1cHBvcnRlZFNjYWxlT3B0cyA9IHtcbiAgW0NIQU5ORUxfU0NBTEVTLmNvbG9yXTogW10sXG4gIFtDSEFOTkVMX1NDQUxFUy5yYWRpdXNdOiBbXSxcbiAgW0NIQU5ORUxfU0NBTEVTLnNpemVdOiBbXVxufTtcblxuZXhwb3J0IGNvbnN0IG5vdFN1cHBvcnRBZ2dyT3B0cyA9IHtcbiAgW0NIQU5ORUxfU0NBTEVTLmNvbG9yQWdncl06IHt9LFxuICBbQ0hBTk5FTF9TQ0FMRVMuc2l6ZUFnZ3JdOiB7fVxufTtcblxuLyoqXG4gKiBEZWZhdWx0IGFnZ3JlZ2F0aW9uIGFyZSBiYXNlZCBvbiBvY3VudFxuICovXG5leHBvcnQgY29uc3QgREVGQVVMVF9BR0dSRUdBVElPTiA9IHtcbiAgW0NIQU5ORUxfU0NBTEVTLmNvbG9yQWdncl06IHtcbiAgICBbQUdHUkVHQVRJT05fVFlQRVMuY291bnRdOiBERUZBVUxUX0FHR1JFR0FUSU9OX0NPTE9SX1NDQUxFU1xuICB9LFxuICBbQ0hBTk5FTF9TQ0FMRVMuc2l6ZUFnZ3JdOiB7XG4gICAgW0FHR1JFR0FUSU9OX1RZUEVTLmNvdW50XTogW1NDQUxFX1RZUEVTLmxpbmVhciwgU0NBTEVfVFlQRVMuc3FydCwgU0NBTEVfVFlQRVMubG9nXVxuICB9XG59O1xuXG4vKipcbiAqIERlZmluZSB3aGF0IHR5cGUgb2Ygc2NhbGUgb3BlcmF0aW9uIGlzIGFsbG93ZWQgb24gZWFjaCB0eXBlIG9mIGZpZWxkc1xuICovXG5leHBvcnQgY29uc3QgRklFTERfT1BUUyA9IHtcbiAgW0FMTF9GSUVMRF9UWVBFUy5zdHJpbmddOiB7XG4gICAgdHlwZTogJ2NhdGVnb3JpY2FsJyxcbiAgICBzY2FsZToge1xuICAgICAgLi4ub3JkaW5hbEZpZWxkU2NhbGVGdW5jdGlvbnMsXG4gICAgICAuLi5vcmRpbmFsRmllbGRBZ2dyU2NhbGVGdW5jdGlvbnNcbiAgICB9LFxuICAgIGZvcm1hdDoge1xuICAgICAgbGVnZW5kOiBkID0+IGQsXG4gICAgICB0b29sdGlwOiBbXVxuICAgIH1cbiAgfSxcbiAgW0FMTF9GSUVMRF9UWVBFUy5yZWFsXToge1xuICAgIHR5cGU6ICdudW1lcmljYWwnLFxuICAgIHNjYWxlOiB7XG4gICAgICAuLi5saW5lYXJGaWVsZFNjYWxlRnVuY3Rpb25zLFxuICAgICAgLi4ubGluZWFyRmllbGRBZ2dyU2NhbGVGdW5jdGlvbnNcbiAgICB9LFxuICAgIGZvcm1hdDoge1xuICAgICAgbGVnZW5kOiBkID0+IGQsXG4gICAgICB0b29sdGlwOiBbXG4gICAgICAgIFRPT0xUSVBfRk9STUFUX1RZUEVTLk5PTkUsXG4gICAgICAgIFRPT0xUSVBfRk9STUFUX1RZUEVTLkRFQ0lNQUwsXG4gICAgICAgIFRPT0xUSVBfRk9STUFUX1RZUEVTLlBFUkNFTlRBR0VcbiAgICAgIF1cbiAgICB9XG4gIH0sXG4gIFtBTExfRklFTERfVFlQRVMudGltZXN0YW1wXToge1xuICAgIHR5cGU6ICd0aW1lJyxcbiAgICBzY2FsZToge1xuICAgICAgLi4ubGluZWFyRmllbGRTY2FsZUZ1bmN0aW9ucyxcbiAgICAgIC4uLm5vdFN1cHBvcnRBZ2dyT3B0c1xuICAgIH0sXG4gICAgZm9ybWF0OiB7XG4gICAgICBsZWdlbmQ6IGQgPT4gZCxcbiAgICAgIHRvb2x0aXA6IFtcbiAgICAgICAgVE9PTFRJUF9GT1JNQVRfVFlQRVMuTk9ORSxcbiAgICAgICAgVE9PTFRJUF9GT1JNQVRfVFlQRVMuREFURSxcbiAgICAgICAgVE9PTFRJUF9GT1JNQVRfVFlQRVMuREFURV9USU1FXG4gICAgICBdXG4gICAgfVxuICB9LFxuICBbQUxMX0ZJRUxEX1RZUEVTLmludGVnZXJdOiB7XG4gICAgdHlwZTogJ251bWVyaWNhbCcsXG4gICAgc2NhbGU6IHtcbiAgICAgIC4uLntcbiAgICAgICAgLi4ubGluZWFyRmllbGRTY2FsZUZ1bmN0aW9ucyxcbiAgICAgICAgW0NIQU5ORUxfU0NBTEVTLmNvbG9yXTogW1xuICAgICAgICAgIC4uLmxpbmVhckZpZWxkU2NhbGVGdW5jdGlvbnNbQ0hBTk5FTF9TQ0FMRVMuY29sb3JdLFxuICAgICAgICAgIFNDQUxFX1RZUEVTLmN1c3RvbU9yZGluYWxcbiAgICAgICAgXVxuICAgICAgfSxcbiAgICAgIC4uLmxpbmVhckZpZWxkQWdnclNjYWxlRnVuY3Rpb25zXG4gICAgfSxcbiAgICBmb3JtYXQ6IHtcbiAgICAgIGxlZ2VuZDogZCA9PiBkLFxuICAgICAgdG9vbHRpcDogW1xuICAgICAgICBUT09MVElQX0ZPUk1BVF9UWVBFUy5OT05FLFxuICAgICAgICBUT09MVElQX0ZPUk1BVF9UWVBFUy5ERUNJTUFMLFxuICAgICAgICBUT09MVElQX0ZPUk1BVF9UWVBFUy5QRVJDRU5UQUdFXG4gICAgICBdXG4gICAgfVxuICB9LFxuICBbQUxMX0ZJRUxEX1RZUEVTLmJvb2xlYW5dOiB7XG4gICAgdHlwZTogJ2Jvb2xlYW4nLFxuICAgIHNjYWxlOiB7XG4gICAgICAuLi5vcmRpbmFsRmllbGRTY2FsZUZ1bmN0aW9ucyxcbiAgICAgIC4uLm9yZGluYWxGaWVsZEFnZ3JTY2FsZUZ1bmN0aW9uc1xuICAgIH0sXG4gICAgZm9ybWF0OiB7XG4gICAgICBsZWdlbmQ6IGQgPT4gZCxcbiAgICAgIHRvb2x0aXA6IFtUT09MVElQX0ZPUk1BVF9UWVBFUy5OT05FLCBUT09MVElQX0ZPUk1BVF9UWVBFUy5CT09MRUFOXVxuICAgIH1cbiAgfSxcbiAgW0FMTF9GSUVMRF9UWVBFUy5kYXRlXToge1xuICAgIHR5cGU6ICd0aW1lJyxcbiAgICBzY2FsZToge1xuICAgICAgLi4ub3JkaW5hbEZpZWxkU2NhbGVGdW5jdGlvbnMsXG4gICAgICAuLi5vcmRpbmFsRmllbGRBZ2dyU2NhbGVGdW5jdGlvbnNcbiAgICB9LFxuICAgIGZvcm1hdDoge1xuICAgICAgbGVnZW5kOiBkID0+IGQsXG4gICAgICB0b29sdGlwOiBbVE9PTFRJUF9GT1JNQVRfVFlQRVMuTk9ORSwgVE9PTFRJUF9GT1JNQVRfVFlQRVMuREFURV1cbiAgICB9XG4gIH0sXG4gIFtBTExfRklFTERfVFlQRVMuZ2VvanNvbl06IHtcbiAgICB0eXBlOiAnZ2VvbWV0cnknLFxuICAgIHNjYWxlOiB7XG4gICAgICAuLi5ub3RTdXBwb3J0ZWRTY2FsZU9wdHMsXG4gICAgICAuLi5ub3RTdXBwb3J0QWdnck9wdHNcbiAgICB9LFxuICAgIGZvcm1hdDoge1xuICAgICAgbGVnZW5kOiAoKSA9PiAnLi4uJyxcbiAgICAgIHRvb2x0aXA6IFtdXG4gICAgfVxuICB9LFxuICBbQUxMX0ZJRUxEX1RZUEVTLmdlb2Fycm93XToge1xuICAgIHR5cGU6ICdnZW9tZXRyeScsXG4gICAgc2NhbGU6IHtcbiAgICAgIC4uLm5vdFN1cHBvcnRlZFNjYWxlT3B0cyxcbiAgICAgIC4uLm5vdFN1cHBvcnRBZ2dyT3B0c1xuICAgIH0sXG4gICAgZm9ybWF0OiB7XG4gICAgICBsZWdlbmQ6ICgpID0+ICcuLi4nLFxuICAgICAgdG9vbHRpcDogW11cbiAgICB9XG4gIH0sXG4gIFtBTExfRklFTERfVFlQRVMub2JqZWN0XToge1xuICAgIHR5cGU6ICdudW1lcmljYWwnLFxuICAgIHNjYWxlOiB7fSxcbiAgICBmb3JtYXQ6IHtcbiAgICAgIGxlZ2VuZDogKCkgPT4gJy4uLicsXG4gICAgICB0b29sdGlwOiBbXVxuICAgIH1cbiAgfSxcbiAgW0FMTF9GSUVMRF9UWVBFUy5hcnJheV06IHtcbiAgICB0eXBlOiAnbnVtZXJpY2FsJyxcbiAgICBzY2FsZToge30sXG4gICAgZm9ybWF0OiB7XG4gICAgICBsZWdlbmQ6ICgpID0+ICcuLi4nLFxuICAgICAgdG9vbHRpcDogW11cbiAgICB9XG4gIH0sXG4gIFtBTExfRklFTERfVFlQRVMuaDNdOiB7XG4gICAgdHlwZTogJ2gzJyxcbiAgICBzY2FsZToge1xuICAgICAgLi4ubm90U3VwcG9ydGVkU2NhbGVPcHRzLFxuICAgICAgLi4ubm90U3VwcG9ydEFnZ3JPcHRzXG4gICAgfSxcbiAgICBmb3JtYXQ6IHtcbiAgICAgIGxlZ2VuZDogKCkgPT4gJy4uLicsXG4gICAgICB0b29sdGlwOiBbXVxuICAgIH1cbiAgfVxufTtcblxuZXhwb3J0IGNvbnN0IENIQU5ORUxfU0NBTEVfU1VQUE9SVEVEX0ZJRUxEUyA9IE9iamVjdC5rZXlzKENIQU5ORUxfU0NBTEVTKS5yZWR1Y2UoXG4gIChhY2N1LCBrZXkpID0+ICh7XG4gICAgLi4uYWNjdSxcbiAgICBba2V5XTogT2JqZWN0LmtleXMoRklFTERfT1BUUykuZmlsdGVyKFxuICAgICAgZnQgPT4gRklFTERfT1BUU1tmdF0uc2NhbGVba2V5XSAmJiBPYmplY3Qua2V5cyhGSUVMRF9PUFRTW2Z0XS5zY2FsZVtrZXldKS5sZW5ndGhcbiAgICApXG4gIH0pLFxuICB7fSBhcyB7W2lkOiBzdHJpbmddOiBzdHJpbmdbXX1cbik7XG5cbmV4cG9ydCBjb25zdCBERUZBVUxUX0xBWUVSX0NPTE9SID0ge1xuICB0cmlwQXJjOiAnIzkyMjZDNicsXG4gIGJlZ2ludHJpcF9sYXQ6ICcjMUU5NkJFJyxcbiAgZHJvcG9mZl9sYXQ6ICcjRkY5OTFGJyxcbiAgcmVxdWVzdF9sYXQ6ICcjNTJBMzUzJ1xufTtcblxuZXhwb3J0IGNvbnN0IERFRkFVTFRfTEFZRVJfQ09MT1JfUEFMRVRURSA9ICdHbG9iYWwgV2FybWluZyc7XG5leHBvcnQgY29uc3QgREVGQVVMVF9MQVlFUl9DT0xPUl9QQUxFVFRFX1NURVBTID0gNjtcblxuLy8gbGV0IHVzZXIgcGFzcyBpbiBkZWZhdWx0IHRvb2x0aXAgZmllbGRzXG5leHBvcnQgY29uc3QgREVGQVVMVF9UT09MVElQX0ZJRUxEUzogYW55W10gPSBbXTtcblxuZXhwb3J0IGNvbnN0IE5PX1ZBTFVFX0NPTE9SOiBSR0JBQ29sb3IgPSBbMCwgMCwgMCwgMF07XG5cbmV4cG9ydCBjb25zdCBERUZBVUxUX1BJQ0tJTkdfUkFESVVTID0gMztcblxuZXhwb3J0IGNvbnN0IE9WRVJMQVlfQkxFTkRJTkdTID0ge1xuICBub3JtYWw6IHtcbiAgICBsYWJlbDogJ292ZXJsYXlCbGVuZGluZy5ub3JtYWwnLFxuICAgIHZhbHVlOiAnbm9ybWFsJ1xuICB9LFxuICBzY3JlZW46IHtcbiAgICBsYWJlbDogJ292ZXJsYXlCbGVuZGluZy5zY3JlZW4nLFxuICAgIHZhbHVlOiAnc2NyZWVuJ1xuICB9LFxuICBkYXJrZW46IHtcbiAgICBsYWJlbDogJ292ZXJsYXlCbGVuZGluZy5kYXJrZW4nLFxuICAgIHZhbHVlOiAnZGFya2VuJ1xuICB9XG59O1xuXG5leHBvcnQgY29uc3QgTEFZRVJfQkxFTkRJTkdTID0ge1xuICBhZGRpdGl2ZToge1xuICAgIGxhYmVsOiAnbGF5ZXJCbGVuZGluZy5hZGRpdGl2ZScsXG4gICAgYmxlbmRGdW5jOiBbJ1NSQ19BTFBIQScsICdEU1RfQUxQSEEnXSxcbiAgICBibGVuZEVxdWF0aW9uOiAnRlVOQ19BREQnXG4gIH0sXG4gIG5vcm1hbDoge1xuICAgIC8vIHJlZmVyZW5jZSB0b1xuICAgIC8vIGh0dHBzOi8vbGltbnUuY29tL3dlYmdsLWJsZW5kaW5nLXlvdXJlLXByb2JhYmx5LXdyb25nL1xuICAgIGxhYmVsOiAnbGF5ZXJCbGVuZGluZy5ub3JtYWwnLFxuICAgIGJsZW5kRnVuYzogWydTUkNfQUxQSEEnLCAnT05FX01JTlVTX1NSQ19BTFBIQScsICdPTkUnLCAnT05FX01JTlVTX1NSQ19BTFBIQSddLFxuICAgIGJsZW5kRXF1YXRpb246IFsnRlVOQ19BREQnLCAnRlVOQ19BREQnXVxuICB9LFxuICBzdWJ0cmFjdGl2ZToge1xuICAgIGxhYmVsOiAnbGF5ZXJCbGVuZGluZy5zdWJ0cmFjdGl2ZScsXG4gICAgYmxlbmRGdW5jOiBbJ09ORScsICdPTkVfTUlOVVNfRFNUX0NPTE9SJywgJ1NSQ19BTFBIQScsICdEU1RfQUxQSEEnXSxcbiAgICBibGVuZEVxdWF0aW9uOiBbJ0ZVTkNfU1VCVFJBQ1QnLCAnRlVOQ19BREQnXVxuICB9XG59O1xuXG5leHBvcnQgY29uc3QgTUFYX0RFRkFVTFRfVE9PTFRJUFMgPSA1O1xuXG5leHBvcnQgY29uc3QgUkVTT0xVVElPTlMgPSBrZXlNaXJyb3Ioe1xuICBPTkVfWDogbnVsbCxcbiAgVFdPX1g6IG51bGxcbn0pO1xuXG5leHBvcnQgY29uc3QgRVhQT1JUX0lNR19SQVRJT1MgPSBrZXlNaXJyb3Ioe1xuICBTQ1JFRU46IG51bGwsXG4gIEZPVVJfQllfVEhSRUU6IG51bGwsXG4gIFNJWFRFRU5fQllfTklORTogbnVsbCxcbiAgQ1VTVE9NOiBudWxsXG59KTtcblxuZXhwb3J0IHR5cGUgSW1hZ2VSYXRpb09wdGlvbiA9IHtcbiAgaWQ6IGtleW9mIHR5cGVvZiBFWFBPUlRfSU1HX1JBVElPUztcbiAgbGFiZWw6IHN0cmluZztcbiAgaGlkZGVuPzogYm9vbGVhbjtcbiAgZ2V0U2l6ZTogKHNjcmVlblc6IG51bWJlciwgc2NyZWVuSDogbnVtYmVyKSA9PiB7d2lkdGg6IG51bWJlcjsgaGVpZ2h0OiBudW1iZXJ9O1xufTtcblxuZXhwb3J0IGNvbnN0IFNjcmVlblJhdGlvT3B0aW9uOiBJbWFnZVJhdGlvT3B0aW9uID0ge1xuICBpZDogRVhQT1JUX0lNR19SQVRJT1MuU0NSRUVOLFxuICBsYWJlbDogJ21vZGFsLmV4cG9ydEltYWdlLnJhdGlvT3JpZ2luYWxTY3JlZW4nLFxuICBnZXRTaXplOiAoc2NyZWVuVywgc2NyZWVuSCkgPT4gKHt3aWR0aDogc2NyZWVuVywgaGVpZ2h0OiBzY3JlZW5IfSlcbn07XG5leHBvcnQgY29uc3QgQ3VzdG9tUmF0aW9PcHRpb246IEltYWdlUmF0aW9PcHRpb24gPSB7XG4gIGlkOiBFWFBPUlRfSU1HX1JBVElPUy5DVVNUT00sXG4gIGhpZGRlbjogdHJ1ZSxcbiAgbGFiZWw6ICdtb2RhbC5leHBvcnRJbWFnZS5yYXRpb0N1c3RvbScsXG4gIGdldFNpemU6IChtYXBXLCBtYXBIKSA9PiAoe3dpZHRoOiBtYXBXLCBoZWlnaHQ6IG1hcEh9KVxufTtcbmV4cG9ydCBjb25zdCBGb3VyQnlUaHJlZVJhdGlvT3B0aW9uOiBJbWFnZVJhdGlvT3B0aW9uID0ge1xuICBpZDogRVhQT1JUX0lNR19SQVRJT1MuRk9VUl9CWV9USFJFRSxcbiAgbGFiZWw6ICdtb2RhbC5leHBvcnRJbWFnZS5yYXRpbzRfMycsXG4gIGdldFNpemU6IHNjcmVlblcgPT4gKHtcbiAgICB3aWR0aDogc2NyZWVuVyxcbiAgICBoZWlnaHQ6IE1hdGgucm91bmQoc2NyZWVuVyAqIDAuNzUpXG4gIH0pXG59O1xuZXhwb3J0IGNvbnN0IFNpeHRlZW5CeU5pbmVSYXRpb09wdGlvbjogSW1hZ2VSYXRpb09wdGlvbiA9IHtcbiAgaWQ6IEVYUE9SVF9JTUdfUkFUSU9TLlNJWFRFRU5fQllfTklORSxcbiAgbGFiZWw6ICdtb2RhbC5leHBvcnRJbWFnZS5yYXRpbzE2XzknLFxuICBnZXRTaXplOiBzY3JlZW5XID0+ICh7XG4gICAgd2lkdGg6IHNjcmVlblcsXG4gICAgaGVpZ2h0OiBNYXRoLnJvdW5kKHNjcmVlblcgKiAwLjU2MjUpXG4gIH0pXG59O1xuXG5leHBvcnQgY29uc3QgRVhQT1JUX0lNR19SQVRJT19PUFRJT05TOiBSZWFkb25seUFycmF5PEltYWdlUmF0aW9PcHRpb24+ID0gW1xuICBTY3JlZW5SYXRpb09wdGlvbixcbiAgRm91ckJ5VGhyZWVSYXRpb09wdGlvbixcbiAgU2l4dGVlbkJ5TmluZVJhdGlvT3B0aW9uLFxuICBDdXN0b21SYXRpb09wdGlvblxuXTtcblxuZXhwb3J0IHR5cGUgRXhwb3J0UmVzb2x1dGlvbk9wdGlvbiA9XG4gIHwga2V5b2YgdHlwZW9mIFJFU09MVVRJT05TXG4gIHwgJzEyODB4NzIwJ1xuICB8ICcxOTIweDEwODAnXG4gIHwgJzI1NjB4MTQ0MCdcbiAgfCAnMTYwMHg5MDAnXG4gIHwgJzEwMjR4NzY4J1xuICB8ICcxMjgweDk2MCdcbiAgfCAnMTYwMHgxMjAwJ1xuICB8ICcxOTIweDE0NDAnO1xuXG5leHBvcnQgdHlwZSBJbWFnZVJlc29sdXRpb25PcHRpb24gPSB7XG4gIGlkOiBFeHBvcnRSZXNvbHV0aW9uT3B0aW9uO1xuICBsYWJlbDogc3RyaW5nO1xuICBhdmFpbGFibGU6IGJvb2xlYW47XG4gIHNjYWxlPzogbnVtYmVyO1xuICBnZXRTaXplOiAoc2NyZWVuVzogbnVtYmVyLCBzY3JlZW5IOiBudW1iZXIpID0+IHt3aWR0aDogbnVtYmVyOyBoZWlnaHQ6IG51bWJlcn07XG59O1xuXG5leHBvcnQgY29uc3QgT25lWFJlc29sdXRpb25PcHRpb246IEltYWdlUmVzb2x1dGlvbk9wdGlvbiA9IHtcbiAgaWQ6IFJFU09MVVRJT05TLk9ORV9YLFxuICBsYWJlbDogJzF4JyxcbiAgYXZhaWxhYmxlOiB0cnVlLFxuICBzY2FsZTogMSxcbiAgZ2V0U2l6ZTogKHNjcmVlblcsIHNjcmVlbkgpID0+ICh7XG4gICAgd2lkdGg6IHNjcmVlblcsXG4gICAgaGVpZ2h0OiBzY3JlZW5IXG4gIH0pXG59O1xuXG5leHBvcnQgY29uc3QgVHdvWFJlc29sdXRpb25PcHRpb246IEltYWdlUmVzb2x1dGlvbk9wdGlvbiA9IHtcbiAgaWQ6IFJFU09MVVRJT05TLlRXT19YLFxuICBsYWJlbDogJzJ4JyxcbiAgYXZhaWxhYmxlOiB0cnVlLFxuICBzY2FsZTogMixcbiAgZ2V0U2l6ZTogKHNjcmVlblcsIHNjcmVlbkgpID0+ICh7XG4gICAgd2lkdGg6IHNjcmVlblcgKiAyLFxuICAgIGhlaWdodDogc2NyZWVuSCAqIDJcbiAgfSlcbn07XG5cbi8vIEZpeGVkIGRpbWVuc2lvbiBvcHRpb25zXG5leHBvcnQgY29uc3QgUmVzb2x1dGlvbjE5MjB4MTA4ME9wdGlvbjogSW1hZ2VSZXNvbHV0aW9uT3B0aW9uID0ge1xuICBpZDogJzE5MjB4MTA4MCcsXG4gIGxhYmVsOiAnMTkyMCDDlyAxMDgwICgxNjo5KScsXG4gIGF2YWlsYWJsZTogdHJ1ZSxcbiAgZ2V0U2l6ZTogKCkgPT4gKHt3aWR0aDogMTkyMCwgaGVpZ2h0OiAxMDgwfSlcbn07XG5cbmV4cG9ydCBjb25zdCBSZXNvbHV0aW9uMTI4MHg3MjBPcHRpb246IEltYWdlUmVzb2x1dGlvbk9wdGlvbiA9IHtcbiAgaWQ6ICcxMjgweDcyMCcsXG4gIGxhYmVsOiAnMTI4MCDDlyA3MjAgKDE2OjkpJyxcbiAgYXZhaWxhYmxlOiB0cnVlLFxuICBnZXRTaXplOiAoKSA9PiAoe3dpZHRoOiAxMjgwLCBoZWlnaHQ6IDcyMH0pXG59O1xuXG5leHBvcnQgY29uc3QgUmVzb2x1dGlvbjI1NjB4MTQ0ME9wdGlvbjogSW1hZ2VSZXNvbHV0aW9uT3B0aW9uID0ge1xuICBpZDogJzI1NjB4MTQ0MCcsXG4gIGxhYmVsOiAnMjU2MCDDlyAxNDQwICgxNjo5KScsXG4gIGF2YWlsYWJsZTogdHJ1ZSxcbiAgZ2V0U2l6ZTogKCkgPT4gKHt3aWR0aDogMjU2MCwgaGVpZ2h0OiAxNDQwfSlcbn07XG5cbmV4cG9ydCBjb25zdCBSZXNvbHV0aW9uMTYwMHg5MDBPcHRpb246IEltYWdlUmVzb2x1dGlvbk9wdGlvbiA9IHtcbiAgaWQ6ICcxNjAweDkwMCcsXG4gIGxhYmVsOiAnMTYwMCDDlyA5MDAgKDE2OjkpJyxcbiAgYXZhaWxhYmxlOiB0cnVlLFxuICBnZXRTaXplOiAoKSA9PiAoe3dpZHRoOiAxNjAwLCBoZWlnaHQ6IDkwMH0pXG59O1xuXG5leHBvcnQgY29uc3QgUmVzb2x1dGlvbjEwMjR4NzY4T3B0aW9uOiBJbWFnZVJlc29sdXRpb25PcHRpb24gPSB7XG4gIGlkOiAnMTAyNHg3NjgnLFxuICBsYWJlbDogJzEwMjQgw5cgNzY4ICg0OjMpJyxcbiAgYXZhaWxhYmxlOiB0cnVlLFxuICBnZXRTaXplOiAoKSA9PiAoe3dpZHRoOiAxMDI0LCBoZWlnaHQ6IDc2OH0pXG59O1xuXG5leHBvcnQgY29uc3QgUmVzb2x1dGlvbjEyODB4OTYwT3B0aW9uOiBJbWFnZVJlc29sdXRpb25PcHRpb24gPSB7XG4gIGlkOiAnMTI4MHg5NjAnLFxuICBsYWJlbDogJzEyODAgw5cgOTYwICg0OjMpJyxcbiAgYXZhaWxhYmxlOiB0cnVlLFxuICBnZXRTaXplOiAoKSA9PiAoe3dpZHRoOiAxMjgwLCBoZWlnaHQ6IDk2MH0pXG59O1xuXG5leHBvcnQgY29uc3QgUmVzb2x1dGlvbjE2MDB4MTIwME9wdGlvbjogSW1hZ2VSZXNvbHV0aW9uT3B0aW9uID0ge1xuICBpZDogJzE2MDB4MTIwMCcsXG4gIGxhYmVsOiAnMTYwMCDDlyAxMjAwICg0OjMpJyxcbiAgYXZhaWxhYmxlOiB0cnVlLFxuICBnZXRTaXplOiAoKSA9PiAoe3dpZHRoOiAxNjAwLCBoZWlnaHQ6IDEyMDB9KVxufTtcblxuZXhwb3J0IGNvbnN0IFJlc29sdXRpb24xOTIweDE0NDBPcHRpb246IEltYWdlUmVzb2x1dGlvbk9wdGlvbiA9IHtcbiAgaWQ6ICcxOTIweDE0NDAnLFxuICBsYWJlbDogJzE5MjAgw5cgMTQ0MCAoNDozKScsXG4gIGF2YWlsYWJsZTogdHJ1ZSxcbiAgZ2V0U2l6ZTogKCkgPT4gKHt3aWR0aDogMTkyMCwgaGVpZ2h0OiAxNDQwfSlcbn07XG5cbmV4cG9ydCBjb25zdCBFWFBPUlRfSU1HX1JFU09MVVRJT05fT1BUSU9OUzogUmVhZG9ubHlBcnJheTxJbWFnZVJlc29sdXRpb25PcHRpb24+ID0gW1xuICBPbmVYUmVzb2x1dGlvbk9wdGlvbixcbiAgVHdvWFJlc29sdXRpb25PcHRpb24sXG4gIFJlc29sdXRpb24xMjgweDcyME9wdGlvbixcbiAgUmVzb2x1dGlvbjE5MjB4MTA4ME9wdGlvbixcbiAgUmVzb2x1dGlvbjI1NjB4MTQ0ME9wdGlvbixcbiAgUmVzb2x1dGlvbjE2MDB4OTAwT3B0aW9uLFxuICBSZXNvbHV0aW9uMTAyNHg3NjhPcHRpb24sXG4gIFJlc29sdXRpb24xMjgweDk2ME9wdGlvbixcbiAgUmVzb2x1dGlvbjE2MDB4MTIwME9wdGlvbixcbiAgUmVzb2x1dGlvbjE5MjB4MTQ0ME9wdGlvblxuXTtcblxuZXhwb3J0IGNvbnN0IEVYUE9SVF9EQVRBX1RZUEUgPSBrZXlNaXJyb3Ioe1xuICBDU1Y6IG51bGxcbiAgLy8gU0hBUEVGSUxFOiBudWxsLFxuICAvLyBKU09OOiBudWxsLFxuICAvLyBHRU9KU09OOiBudWxsLFxuICAvLyBUT1BPSlNPTjogbnVsbFxufSk7XG5cbmV4cG9ydCBjb25zdCBFWFBPUlRfREFUQV9UWVBFX09QVElPTlMgPSBbXG4gIHtcbiAgICBpZDogRVhQT1JUX0RBVEFfVFlQRS5DU1YsXG4gICAgbGFiZWw6IEVYUE9SVF9EQVRBX1RZUEUuQ1NWLnRvTG93ZXJDYXNlKCksXG4gICAgYXZhaWxhYmxlOiB0cnVlXG4gIH1cbiAgLy8ge1xuICAvLyAgIGlkOiBFWFBPUlRfREFUQV9UWVBFLlNIQVBFRklMRSxcbiAgLy8gICBsYWJlbDogJ3NoYXBlZmlsZScsXG4gIC8vICAgYXZhaWxhYmxlOiBmYWxzZVxuICAvLyB9LFxuICAvLyB7XG4gIC8vICAgaWQ6IEVYUE9SVF9EQVRBX1RZUEUuSlNPTixcbiAgLy8gICBsYWJlbDogJ2pzb24nLFxuICAvLyAgIGF2YWlsYWJsZTogZmFsc2VcbiAgLy8gfSxcbiAgLy8ge1xuICAvLyAgIGlkOiBFWFBPUlRfREFUQV9UWVBFLkdFT0pTT04sXG4gIC8vICAgbGFiZWw6ICdnZW9qc29uJyxcbiAgLy8gICBhdmFpbGFibGU6IGZhbHNlXG4gIC8vIH0sXG4gIC8vIHtcbiAgLy8gICBpZDogRVhQT1JUX0RBVEFfVFlQRS5UT1BPSlNPTixcbiAgLy8gICBsYWJlbDogJ3RvcG9qc29uJyxcbiAgLy8gICBhdmFpbGFibGU6IGZhbHNlXG4gIC8vIH1cbl07XG5cbi8vIEV4cG9ydCBtYXAgdHlwZXNcbmV4cG9ydCBjb25zdCBFWFBPUlRfTUFQX0ZPUk1BVFMgPSBrZXlNaXJyb3Ioe1xuICBIVE1MOiBudWxsLFxuICBKU09OOiBudWxsXG59KTtcblxuZXhwb3J0IGNvbnN0IEVYUE9SVF9IVE1MX01BUF9NT0RFUyA9IGtleU1pcnJvcih7XG4gIFJFQUQ6IG51bGwsXG4gIEVESVQ6IG51bGxcbn0pO1xuXG4vLyBFeHBvcnQgbWFwIG9wdGlvbnNcbmV4cG9ydCBjb25zdCBFWFBPUlRfTUFQX0ZPUk1BVF9PUFRJT05TID0gT2JqZWN0LmVudHJpZXMoRVhQT1JUX01BUF9GT1JNQVRTKS5tYXAoXG4gIChlbnRyeTogW3N0cmluZywgYW55XSkgPT4gKHtcbiAgICBpZDogZW50cnlbMF0sXG4gICAgbGFiZWw6IGVudHJ5WzFdLnRvTG93ZXJDYXNlKCksXG4gICAgYXZhaWxhYmxlOiB0cnVlXG4gIH0pXG4pO1xuXG5leHBvcnQgZnVuY3Rpb24gZ2V0SFRNTE1hcE1vZGVUaWxlVXJsKG1vZGU6IHN0cmluZyk6IHN0cmluZyB7XG4gIHJldHVybiBgaHR0cHM6Ly9kMWEzZjRzcGF6enJwNC5jbG91ZGZyb250Lm5ldC9rZXBsZXIuZ2wvZG9jdW1lbnRhdGlvbi9tYXAtJHttb2RlLnRvTG93ZXJDYXNlKCl9LW1vZGUucG5nYDtcbn1cblxuZXhwb3J0IGNvbnN0IEVYUE9SVF9IVE1MX01BUF9NT0RFX09QVElPTlMgPSBPYmplY3QuZW50cmllcyhFWFBPUlRfSFRNTF9NQVBfTU9ERVMpLm1hcChcbiAgKGVudHJ5OiBbc3RyaW5nLCBhbnldKSA9PiAoe1xuICAgIGlkOiBlbnRyeVswXSxcbiAgICBsYWJlbDogYG1vZGFsLmV4cG9ydE1hcC5odG1sLiR7ZW50cnlbMV0udG9Mb3dlckNhc2UoKX1gLFxuICAgIGF2YWlsYWJsZTogdHJ1ZSxcbiAgICB1cmw6IGdldEhUTUxNYXBNb2RlVGlsZVVybChlbnRyeVsxXSlcbiAgfSlcbik7XG5cbmV4cG9ydCBjb25zdCBERUZBVUxUX1VVSURfQ09VTlQgPSA2O1xuXG5leHBvcnQgY29uc3QgREVGQVVMVF9OT1RJRklDQVRJT05fTUVTU0FHRSA9ICdNRVNTQUdFX05PVF9QUk9WSURFRCc7XG5cbmV4cG9ydCBjb25zdCBERUZBVUxUX05PVElGSUNBVElPTl9UWVBFUyA9IGtleU1pcnJvcih7XG4gIGluZm86IG51bGwsXG4gIGVycm9yOiBudWxsLFxuICB3YXJuaW5nOiBudWxsLFxuICBzdWNjZXNzOiBudWxsXG59KTtcblxuZXhwb3J0IGNvbnN0IERFRkFVTFRfTk9USUZJQ0FUSU9OX1RPUElDUyA9IGtleU1pcnJvcih7XG4gIGdsb2JhbDogbnVsbCxcbiAgZmlsZTogbnVsbFxufSk7XG5cbi8vIE1pbmltdW0gdGltZSBiZXR3ZWVuIGlkZW50aWNhbCBub3RpZmljYXRpb25zIGFib3V0IGRlY2suZ2wgZXJyb3JzXG5leHBvcnQgY29uc3QgVEhST1RUTEVfTk9USUZJQ0FUSU9OX1RJTUUgPSAzMzA7XG5cbi8vIEFuaW1hdGlvblxuZXhwb3J0IGNvbnN0IEJBU0VfU1BFRUQgPSA2MDA7XG5leHBvcnQgY29uc3QgRlBTID0gNjA7XG5cbi8qKlxuICogNCBBbmltYXRpb24gV2luZG93IFR5cGVzXG4gKiAxLiBmcmVlXG4gKiAgfC0+ICB8LT5cbiAqIEN1cnJlbnQgdGltZSBpcyBhIGZpeGVkIHJhbmdlLCBhbmltYXRpb24gY29udHJvbGxlciBjYWxscyBuZXh0IGFuaW1hdGlvbiBmcmFtZXMgY29udGludW91c2x5IHRvIGFuaW1hdGlvbiBhIG1vdmluZyB3aW5kb3dcbiAqIFRoZSBpbmNyZW1lbnQgaWQgYmFzZWQgb24gZG9tYWluIC8gQkFTRV9TUEVFRCAqIFNQRUVEXG4gKlxuICogMi4gaW5jcmVtZW50YWxcbiAqIHwgICAgfC0+XG4gKiBTYW1lIGFzIGZyZWUsIGN1cnJlbnQgdGltZSBpcyBhIGdyb3dpbmcgcmFuZ2UsIG9ubHkgdGhlIG1heCB2YWx1ZSBvZiByYW5nZSBpbmNyZW1lbnQgZHVyaW5nIGFuaW1hdGlvbi5cbiAqIFRoZSBpbmNyZW1lbnQgaXMgYWxzbyBiYXNlZCBvbiBkb21haW4gLyBCQVNFX1NQRUVEICogU1BFRURcbiAqXG4gKiAzLiBwb2ludFxuICogbyAtPiBvXG4gKiBDdXJyZW50IHRpbWUgaXMgYSBwb2ludCwgYW5pbWF0aW9uIGNvbnRyb2xsZXIgY2FsbHMgbmV4dCBhbmltYXRpb24gZnJhbWUgY29udGludW91c2x5IHRvIGFuaW1hdGlvbiBhIG1vdmluZyBwb2ludFxuICogVGhlIGluY3JlbWVudCBpcyBiYXNlZCBvbiBkb21haW4gLyBCQVNFX1NQRUVEICogU1BFRURcbiAqXG4gKiA0LiBpbnRlcnZhbFxuICogbyB+PiBvXG4gKiBDdXJyZW50IHRpbWUgaXMgYSBwb2ludC4gQW4gYXJyYXkgb2Ygc29ydGVkIHRpbWUgc3RlcHMgbmVlZCB0byBiZSBwcm92aWRlZC5cbiAqIGFuaW1hdGlvbiBjb250cm9sbGVyIGNhbGxzIG5leHQgYW5pbWF0aW9uIGF0IGEgaW50ZXJ2YWwgd2hlbiB0aGUgcG9pbnQganVtcHMgdG8gdGhlIG5leHQgc3RlcFxuICovXG5leHBvcnQgY29uc3QgQU5JTUFUSU9OX1dJTkRPVyA9IGtleU1pcnJvcih7XG4gIGZyZWU6IG51bGwsXG4gIGluY3JlbWVudGFsOiBudWxsLFxuICBwb2ludDogbnVsbCxcbiAgaW50ZXJ2YWw6IG51bGxcbn0pO1xuZXhwb3J0IGNvbnN0IERFRkFVTFRfVElNRV9GT1JNQVQgPSAnTU0vREQvWVkgSEg6bW06c3NhJztcbmV4cG9ydCBjb25zdCBTUEVFRF9DT05UUk9MX1JBTkdFOiBbbnVtYmVyLCBudW1iZXJdID0gWzAsIDEwXTtcbmV4cG9ydCBjb25zdCBTUEVFRF9DT05UUk9MX1NURVAgPSAwLjAwMTtcblxuLy8gR2VvY29kZXJcbmV4cG9ydCBjb25zdCBHRU9DT0RFUl9EQVRBU0VUX05BTUUgPSAnZ2VvY29kZXJfZGF0YXNldCc7XG5leHBvcnQgY29uc3QgR0VPQ09ERVJfTEFZRVJfSUQgPSAnZ2VvY29kZXJfbGF5ZXInO1xuZXhwb3J0IGNvbnN0IEdFT0NPREVSX0dFT19PRkZTRVQgPSAwLjA1O1xuZXhwb3J0IGNvbnN0IEdFT0NPREVSX0lDT05fQ09MT1I6IFtudW1iZXIsIG51bWJlciwgbnVtYmVyXSA9IFsyNTUsIDAsIDBdO1xuLy8gQmFzZSBpY29uIHNpemUgYmVmb3JlIGFuY2hvciBub3JtYWxpemF0aW9uLiBUaGUgZ2VvY29kZXIgcGluIGljb24gaXMgYm90dG9tLWFuY2hvcmVkXG4vLyBhbmQgc2NhbGVkIHRvIGZpdCB0aGUgU2NhdHRlcnBsb3RMYXllciB1bml0IGNpcmNsZSAofjAuNXgpLCBzbyB0aGUgcmVuZGVyZWQgc2l6ZSBpc1xuLy8gY29tcGVuc2F0ZWQgaGVyZSAoODAgKiAyID0gMTYwKS5cbmV4cG9ydCBjb25zdCBHRU9DT0RFUl9JQ09OX1NJWkUgPSAxNjA7XG5cbi8vIEVkaXRvclxuZXhwb3J0IGNvbnN0IEVESVRPUl9MQVlFUl9JRCA9ICdrZXBsZXJfZWRpdG9yX2xheWVyJztcbmV4cG9ydCBjb25zdCBFRElUT1JfTEFZRVJfUElDS0lOR19SQURJVVMgPSA2O1xuZXhwb3J0IGNvbnN0IEVESVRPUl9NT0RFUyA9IHtcbiAgRFJBV19QT0xZR09OOiAnRFJBV19QT0xZR09OJyxcbiAgRFJBV19SRUNUQU5HTEU6ICdEUkFXX1JFQ1RBTkdMRScsXG4gIEVESVQ6ICdFRElUX1ZFUlRFWCdcbn07XG5cbmV4cG9ydCBjb25zdCBQTE9UX1RZUEVTID0ga2V5TWlycm9yKHtcbiAgaGlzdG9ncmFtOiBudWxsLFxuICBsaW5lQ2hhcnQ6IG51bGxcbn0pO1xuXG4vLyBGaWx0ZXJcbmV4cG9ydCBjb25zdCBJTklUX0ZJTFRFUl9JVEVNU19JTl9EUk9QRE9XTiA9IDEwMDtcblxuLy8gR1BVIEZpbHRlcmluZ1xuLyoqXG4gKiBNYXggbnVtYmVyIG9mIGZpbHRlciB2YWx1ZSBidWZmZXJzIHRoYXQgZGVjay5nbCBwcm92aWRlc1xuICovXG5leHBvcnQgY29uc3QgTUFYX0dQVV9GSUxURVJTID0gNDtcbmV4cG9ydCBjb25zdCBNQVBfVEhVTUJOQUlMX0RJTUVOU0lPTiA9IHtcbiAgd2lkdGg6IDMwMCxcbiAgaGVpZ2h0OiAyMDBcbn07XG5cbmV4cG9ydCBjb25zdCBNQVBfSU5GT19DSEFSQUNURVIgPSB7XG4gIHRpdGxlOiAxMDAsXG4gIGRlc2NyaXB0aW9uOiAxMDBcbn07XG5cbi8vIExvYWQgZGF0YVxuZXhwb3J0IGNvbnN0IExPQURJTkdfTUVUSE9EUyA9IGtleU1pcnJvcih7XG4gIHVwbG9hZDogbnVsbCxcbiAgc3RvcmFnZTogbnVsbCxcbiAgdGlsZXNldDogbnVsbFxufSk7XG5cbmV4cG9ydCBjb25zdCBERUZBVUxUX0ZFQVRVUkVfRkxBR1MgPSB7fTtcblxuZXhwb3J0IGNvbnN0IERBVEFTRVRfRk9STUFUUyA9IGtleU1pcnJvcih7XG4gIHJvdzogbnVsbCxcbiAgZ2VvanNvbjogbnVsbCxcbiAgY3N2OiBudWxsLFxuICBrZXBsZXJnbDogbnVsbCxcbiAgYXJyb3c6IG51bGwsXG4gIGR1Y2tkYjogbnVsbFxufSk7XG5cbmV4cG9ydCBjb25zdCBNQVBfQ09OVFJPTFMgPSBrZXlNaXJyb3Ioe1xuICB2aXNpYmxlTGF5ZXJzOiBudWxsLFxuICBtYXBMZWdlbmQ6IG51bGwsXG4gIHRvZ2dsZTNkOiBudWxsLFxuICBzcGxpdE1hcDogbnVsbCxcbiAgbWFwRHJhdzogbnVsbCxcbiAgbWFwTG9jYWxlOiBudWxsLFxuICBlZmZlY3Q6IG51bGwsXG4gIGFubm90YXRpb246IG51bGwsXG4gIGFpQXNzaXN0YW50OiBudWxsXG59KTtcblxuZXhwb3J0IGVudW0gTWFwVmlld01vZGUge1xuICBNT0RFXzJEID0gJ01PREVfMkQnLFxuICBNT0RFXzNEID0gJ01PREVfM0QnLFxuICBNT0RFX0dMT0JFID0gJ01PREVfR0xPQkUnXG59XG5cbi8qKlxuICogTWluaW11bSB6b29tIGxldmVsIGFsbG93ZWQgaW4gZ2xvYmUgbW9kZS4gTmVnYXRpdmUgdmFsdWVzIGxldCB0aGUgdXNlciB6b29tXG4gKiBvdXQgZnVydGhlciB0aGFuIHRoZSB3ZWItbWVyY2F0b3IgZGVmYXVsdCBvZiAwLCBzbyB0aGUgd2hvbGUgZ2xvYmUgY2FuIGJlXG4gKiBwdWxsZWQgYmFjayB0byBhcHBlYXIgc21hbGxlciBvbiBzY3JlZW4uXG4gKi9cbmV4cG9ydCBjb25zdCBHTE9CRV9NSU5fWk9PTSA9IDI7XG5cbi8qKlxuICogTWF4aW11bSB6b29tIGluIGdsb2JlIG1vZGUuXG4gKlxuICogVGhlIHByZXZpb3VzIFwiZW1wdHkgcmVjdGFuZ2xlc1wiIGF0IGhpZ2ggem9vbSB3ZXJlIGNhdXNlZCBieSB0aGUgdmVjdG9yIGJhc2VtYXBcbiAqIGxheWVyIGRlY2xhcmluZyBgbWF4Wm9vbTogMjNgIHdoaWxlIHRoZSByYXcgdGlsZSBlbmRwb2ludHMgb25seSBoYXZlIGRhdGEgdG9cbiAqIHoxNiAobWFwYm94LXN0cmVldHMtdjgpIC8gejE0IChDQVJUTykg4oCUIGRlY2sgdGhlbiByZXF1ZXN0ZWQgbm9uLWV4aXN0ZW50IHRpbGVzXG4gKiB0aGF0IDQwNC4gVGhhdCBpcyBmaXhlZCBpbiBgZ2V0R2xvYmVCYXNlTGF5ZXJzYCBieSBzZXR0aW5nIGBtYXhab29tYCB0byBlYWNoXG4gKiBzb3VyY2UncyB0cnVlIGRhdGEgbWF4IHNvIGRlY2sgb3Zlcnpvb21zIGluc3RlYWQuXG4gKlxuICogVGhlIHJlbWFpbmluZyBwcmFjdGljYWwgY2VpbGluZyBpcyBmbG9hdDMyIHByZWNpc2lvbjogZGVjaydzIGdsb2JlIHBsYWNlc1xuICogZ2VvbWV0cnkgaW4gY29tbW9uIHNwYWNlIG9uIGEgc3BoZXJlIG9mIHJhZGl1cyAyNTYgd2l0aCBubyBmcDY0L3JlbGF0aXZlLXRvLVxuICogY2VudGVyIHRyaWNrLCBzbyBiZXlvbmQgfnZpc3VhbC16b29tIDE2IChyb3VnaGx5IHRoaXMgbWFwU3RhdGUgem9vbSBtaW51c1xuICogYHpvb21BZGp1c3QobGF0KWAg4omIIDEuNjUgYXQgdGhlIGVxdWF0b3IpIGdlb21ldHJ5IHN0YXJ0cyB0byBqaXR0ZXIvZHJpZnQuXG4gKi9cbmV4cG9ydCBjb25zdCBHTE9CRV9NQVhfWk9PTSA9IDE2O1xuXG4vKipcbiAqIE1heGltdW0gYWJzb2x1dGUgY2VudGVyIGxhdGl0dWRlIGFsbG93ZWQgaW4gZ2xvYmUgbW9kZS4gQ29uc3RyYWlucyB0aGUgY2FtZXJhXG4gKiB0YXJnZXQgdG8gYSBiYW5kIGFyb3VuZCB0aGUgZXF1YXRvciBzbyB0aGUgdmlldyBjYW4ndCBiZSBjZW50ZXJlZCBvbiB0aGVcbiAqIHBvbGVzIChkZWNrLmdsJ3MgZGVmYXVsdCBjbGFtcHMgdG8gfjg1wrAsIHdoaWNoIGxldHMgdGhlIGNhbWVyYSBzdGFyZSBzdHJhaWdodFxuICogZG93biBhdCBhIHBvbGUpLiBBcHBsaWVzIHN5bW1ldHJpY2FsbHkgdG8gdGhlIG5vcnRoZXJuIGFuZCBzb3V0aGVybiBoZW1pc3BoZXJlLlxuICovXG5leHBvcnQgY29uc3QgR0xPQkVfTUFYX0xBVElUVURFID0gNzU7XG5cbmV4cG9ydCB0eXBlIEdsb2JlQ29uZmlnID0ge1xuICBhdG1vc3BoZXJlOiBib29sZWFuO1xuICBhemltdXRoOiBib29sZWFuO1xuICBhemltdXRoQW5nbGU6IG51bWJlcjtcbiAgdGVybWluYXRvcjogYm9vbGVhbjtcbiAgdGVybWluYXRvck9wYWNpdHk6IG51bWJlcjtcbiAgYmFzZW1hcDogYm9vbGVhbjtcbiAgbGFiZWxzOiBib29sZWFuO1xuICBsYWJlbHNDb2xvcjogW251bWJlciwgbnVtYmVyLCBudW1iZXJdO1xuICBhZG1pbkxpbmVzOiBib29sZWFuO1xuICBhZG1pbkxpbmVzQ29sb3I6IFtudW1iZXIsIG51bWJlciwgbnVtYmVyXTtcbiAgd2F0ZXI6IGJvb2xlYW47XG4gIHdhdGVyQ29sb3I6IFtudW1iZXIsIG51bWJlciwgbnVtYmVyXTtcbiAgc3VyZmFjZUNvbG9yOiBbbnVtYmVyLCBudW1iZXIsIG51bWJlcl07XG4gIHN1cmZhY2U6IGJvb2xlYW47XG4gIGJhY2tncm91bmRDb2xvcjogW251bWJlciwgbnVtYmVyLCBudW1iZXJdO1xuICBzdGFyczogYm9vbGVhbjtcbn07XG5cbmV4cG9ydCB0eXBlIEdsb2JlID0ge1xuICBlbmFibGVkOiBib29sZWFuO1xuICBjb25maWc6IEdsb2JlQ29uZmlnO1xufTtcblxuZXhwb3J0IGNvbnN0IERFRkFVTFRfR0xPQkVfQ09ORklHOiBHbG9iZUNvbmZpZyA9IHtcbiAgYXRtb3NwaGVyZTogdHJ1ZSxcbiAgYXppbXV0aDogZmFsc2UsXG4gIGF6aW11dGhBbmdsZTogNDUsXG4gIHRlcm1pbmF0b3I6IHRydWUsXG4gIHRlcm1pbmF0b3JPcGFjaXR5OiAwLjM1LFxuICBiYXNlbWFwOiB0cnVlLFxuICBsYWJlbHM6IGZhbHNlLFxuICBsYWJlbHNDb2xvcjogWzExNC43NSwgMTE0Ljc1LCAxMTQuNzVdLFxuICBhZG1pbkxpbmVzOiB0cnVlLFxuICBhZG1pbkxpbmVzQ29sb3I6IFs0MCwgNjMsIDkzXSxcbiAgd2F0ZXI6IHRydWUsXG4gIHdhdGVyQ29sb3I6IFsxNywgMzUsIDQ4XSxcbiAgc3VyZmFjZTogdHJ1ZSxcbiAgc3VyZmFjZUNvbG9yOiBbOSwgMTYsIDI5XSxcbiAgLy8gQ29sb3Igb2YgdGhlIGVtcHR5IHNwYWNlIHJlbmRlcmVkIGFyb3VuZCB0aGUgZ2xvYmUgKGRlY2suZ2wgY2xlYXIgY29sb3IpLlxuICAvLyBNYXRjaGVzIHRoZSBwcmV2aW91cyBoYXJkY29kZWQgY2xlYXIgY29sb3IgWzAuMDE1LCAwLjAzNSwgMC4wNjVdIGluIDAtMSBzcGFjZS5cbiAgYmFja2dyb3VuZENvbG9yOiBbNCwgOSwgMTddLFxuICBzdGFyczogZmFsc2Vcbn07XG5cbmV4cG9ydCBjb25zdCBHTE9CRV9TVVBQT1JURURfTEFZRVJTOiBSZWNvcmQ8c3RyaW5nLCBib29sZWFuPiA9IHtcbiAgcG9pbnQ6IHRydWUsXG4gIGFyYzogdHJ1ZSxcbiAgZ3JpZDogdHJ1ZSxcbiAgaGV4YWdvbjogdHJ1ZSxcbiAgZ2VvanNvbjogdHJ1ZSxcbiAgY2x1c3RlcjogdHJ1ZSxcbiAgaWNvbjogdHJ1ZSxcbiAgaGV4YWdvbklkOiB0cnVlLFxuICAnM0QnOiB0cnVlLFxuICB2ZWN0b3JUaWxlOiB0cnVlLFxuICBoZXhUaWxlOiB0cnVlLFxuICBsaW5lOiB0cnVlLFxuICB0cmlwOiB0cnVlLFxuICByYXN0ZXJUaWxlOiB0cnVlLFxuICBoZWF0bWFwOiB0cnVlLFxuICBzMjogZmFsc2UsXG4gIHRpbGUzZDogZmFsc2UsXG4gIC8vIEZsb3cgYXJyb3dzIGFyZSBmbGF0IHF1YWRzIGluIGNvbW1vbiBzcGFjZSAoZXF1YXRvcmlhbCBwbGFuZSkgYW5kIGNvbGxhcHNlIHdoZW5cbiAgLy8gdmlld2VkIGVkZ2Utb24gb24gdGhlIGdsb2JlLCBzbyB0aGUgZmxvdyBsYXllciBpcyBub3Qgc3VwcG9ydGVkIGluIEdsb2JlIG1vZGUuXG4gIGZsb3c6IGZhbHNlXG59O1xuXG5leHBvcnQgZW51bSBNYXBTcGxpdE1vZGUge1xuICBTSU5HTEVfTUFQID0gJ1NJTkdMRV9NQVAnLFxuICBEVUFMX01BUCA9ICdEVUFMX01BUCcsXG4gIFNXSVBFX0NPTVBBUkUgPSAnU1dJUEVfQ09NUEFSRSdcbn1cblxuLyoqXG4gKiBBIG11bHRpcGxpZXIgZm9yIHNjcmVlbi1zcGFjZSB3aWR0aC9zY2FsZSBmb3IgQXJjLCBMaW5lLCBJY29uIGFuZCBUZXh0IGxheWVycy5cbiAqIFJlcXVpcmVkIGluIG9yZGVyIHRvIG1haW50YWluIHRoZSBzYW1lIGFwcGVhcmFuY2UgYWZ0ZXIgdXBncmFkaW5nIHRvIGRlY2suZ2wgdjguNS5cbiAqIGh0dHBzOi8vZ2l0aHViLmNvbS92aXNnbC9kZWNrLmdsL2Jsb2IvbWFzdGVyL2RvY3MvdXBncmFkZS1ndWlkZS5tZFxuICovXG5leHBvcnQgY29uc3QgUFJPSkVDVEVEX1BJWEVMX1NJWkVfTVVMVElQTElFUiA9IDIgLyAzO1xuXG4vKipcbiAqIE1heGltdW0gdmFsdWUgZm9yIHRleHQgb3V0bGluZSB3aWR0aFxuICovXG5leHBvcnQgY29uc3QgVEVYVF9PVVRMSU5FX01VTFRJUExJRVIgPSA1O1xuXG5leHBvcnQgY29uc3QgZGF0YVRlc3RJZHM6IFJlY29yZDxzdHJpbmcsIHN0cmluZz4gPSB7XG4gIGluZm9JY29uOiAnaW5mby1pY29uJyxcbiAgd2FybmluZ0ljb246ICd3YXJuaW5nLWljb24nLFxuICBlcnJvckljb246ICdlcnJvci1pY29uJyxcbiAgc3VjY2Vzc0ljb246ICdzdWNjZXNzLWljb24nLFxuICBjaGVja21hcmtJY29uOiAnY2hlY2ttYXJrLWljb24nLFxuICBzb3J0YWJsZUxheWVySXRlbTogJ3NvcnRhYmxlLWxheWVyLWl0ZW0nLFxuICBzdGF0aWNMYXllckl0ZW06ICdzdGF0aWMtbGF5ZXItaXRlbScsXG4gIGxheWVyVGl0bGVFZGl0b3I6ICdsYXllcl9fdGl0bGVfX2VkaXRvcicsXG4gIHJlbW92ZUxheWVyQWN0aW9uOiAncmVtb3ZlLWxheWVyLWFjdGlvbicsXG4gIGxheWVyUGFuZWw6ICdsYXllci1wYW5lbCcsXG4gIHNvcnRhYmxlRWZmZWN0SXRlbTogJ3NvcnRhYmxlLWVmZmVjdC1pdGVtJyxcbiAgc3RhdGljRWZmZWN0SXRlbTogJ3N0YXRpYy1lZmZlY3QtaXRlbScsXG4gIHByb3ZpZGVyTG9hZGluZzogJ3Byb3ZpZGVyLWxvYWRpbmcnLFxuICBwcm92aWRlck1hcEluZm9QYW5lbDogJ3Byb3ZpZGVyLW1hcC1pbmZvLXBhbmVsJyxcbiAgcHJvdmlkZXJTZWxlY3Q6ICdwcm92aWRlci1zZWxlY3QnLFxuICBjbG91ZEhlYWRlcjogJ2Nsb3VkLWhlYWRlcicsXG4gIHByb3ZpZGVyU2hhcmVNYXA6ICdwcm92aWRlci1zaGFyZS1tYXAnXG59O1xuXG4vLyBFZmZlY3RzXG5leHBvcnQgY29uc3QgREVGQVVMVF9USU1FWk9ORSA9ICdVVEMnO1xuZXhwb3J0IGNvbnN0IERFRkFVTFRfUE9TVF9QUk9DRVNTSU5HX0VGRkVDVF9UWVBFID0gJ2luayc7XG5cbmV4cG9ydCBjb25zdCBERUZBVUxUX0xJR0hUX0NPTE9SOiBbbnVtYmVyLCBudW1iZXIsIG51bWJlcl0gPSBbMjU1LCAyNTUsIDI1NV07XG5leHBvcnQgY29uc3QgREVGQVVMVF9MSUdIVF9JTlRFTlNJVFkgPSAxO1xuZXhwb3J0IGNvbnN0IERFRkFVTFRfU0hBRE9XX0lOVEVOU0lUWSA9IDAuNTtcbmV4cG9ydCBjb25zdCBERUZBVUxUX1NIQURPV19DT0xPUjogW251bWJlciwgbnVtYmVyLCBudW1iZXJdID0gWzAsIDAsIDBdO1xuXG5leHBvcnQgY29uc3QgTElHSFRfQU5EX1NIQURPV19FRkZFQ1RfVElNRV9NT0RFUyA9IHtcbiAgcGljazogJ3BpY2snIGFzIGNvbnN0LFxuICBjdXJyZW50OiAnY3VycmVudCcgYXMgY29uc3QsXG4gIGFuaW1hdGlvbjogJ2FuaW1hdGlvbicgYXMgY29uc3Rcbn07XG5leHBvcnQgdHlwZSBMaWdodEFuZFNoYWRvd0VmZmVjdFRpbWVNb2RlID0gJ3BpY2snIHwgJ2N1cnJlbnQnIHwgJ2FuaW1hdGlvbic7XG5leHBvcnQgY29uc3QgREVGQVVMVF9MSUdIVF9BTkRfU0hBRE9XX1BST1BTOiB7XG4gIHRpbWVzdGFtcDogbnVtYmVyO1xuICB0aW1lTW9kZTogTGlnaHRBbmRTaGFkb3dFZmZlY3RUaW1lTW9kZTtcbiAgc2hhZG93SW50ZW5zaXR5OiBudW1iZXI7XG4gIHNoYWRvd0NvbG9yOiBbbnVtYmVyLCBudW1iZXIsIG51bWJlcl07XG4gIHN1bkxpZ2h0Q29sb3I6IFtudW1iZXIsIG51bWJlciwgbnVtYmVyXTtcbiAgc3VuTGlnaHRJbnRlbnNpdHk6IG51bWJlcjtcbiAgYW1iaWVudExpZ2h0Q29sb3I6IFtudW1iZXIsIG51bWJlciwgbnVtYmVyXTtcbiAgYW1iaWVudExpZ2h0SW50ZW5zaXR5OiBudW1iZXI7XG59ID0ge1xuICB0aW1lc3RhbXA6IERhdGUubm93KCksXG4gIHRpbWVNb2RlOiBMSUdIVF9BTkRfU0hBRE9XX0VGRkVDVF9USU1FX01PREVTLnBpY2sgYXMgTGlnaHRBbmRTaGFkb3dFZmZlY3RUaW1lTW9kZSxcbiAgc2hhZG93SW50ZW5zaXR5OiBERUZBVUxUX1NIQURPV19JTlRFTlNJVFksXG4gIHNoYWRvd0NvbG9yOiBbLi4uREVGQVVMVF9TSEFET1dfQ09MT1JdIGFzIFtudW1iZXIsIG51bWJlciwgbnVtYmVyXSxcbiAgc3VuTGlnaHRDb2xvcjogWy4uLkRFRkFVTFRfTElHSFRfQ09MT1JdIGFzIFtudW1iZXIsIG51bWJlciwgbnVtYmVyXSxcbiAgc3VuTGlnaHRJbnRlbnNpdHk6IERFRkFVTFRfTElHSFRfSU5URU5TSVRZLFxuICBhbWJpZW50TGlnaHRDb2xvcjogWy4uLkRFRkFVTFRfTElHSFRfQ09MT1JdIGFzIFtudW1iZXIsIG51bWJlciwgbnVtYmVyXSxcbiAgYW1iaWVudExpZ2h0SW50ZW5zaXR5OiBERUZBVUxUX0xJR0hUX0lOVEVOU0lUWVxufTtcblxuZXhwb3J0IGNvbnN0IExJR0hUX0FORF9TSEFET1dfRUZGRUNUOiBFZmZlY3REZXNjcmlwdGlvbiA9IHtcbiAgdHlwZTogJ2xpZ2h0QW5kU2hhZG93JyxcbiAgbmFtZTogJ0xpZ2h0ICYgU2hhZG93JyxcbiAgZGVzY3JpcHRpb246ICdlZmZlY3REZXNjcmlwdGlvbi5saWdodEFuZFNoYWRvdycsXG4gIHBhcmFtZXRlcnM6IFtcbiAgICB7bmFtZTogJ3RpbWVzdGFtcCcsIG1pbjogMCwgbWF4OiBOdW1iZXIuTUFYX1NBRkVfSU5URUdFUn0sXG4gICAge25hbWU6ICdzaGFkb3dJbnRlbnNpdHknLCBtaW46IDAsIG1heDogMSwgZGVmYXVsdFZhbHVlOiBERUZBVUxUX1NIQURPV19JTlRFTlNJVFl9LFxuICAgIHtuYW1lOiAnc3VuTGlnaHRJbnRlbnNpdHknLCBtaW46IDAsIG1heDogNSwgZGVmYXVsdFZhbHVlOiBERUZBVUxUX0xJR0hUX0lOVEVOU0lUWX0sXG4gICAge25hbWU6ICdhbWJpZW50TGlnaHRJbnRlbnNpdHknLCBtaW46IDAsIG1heDogNSwgZGVmYXVsdFZhbHVlOiBERUZBVUxUX0xJR0hUX0lOVEVOU0lUWX0sXG4gICAge25hbWU6ICdzaGFkb3dDb2xvcicsIHR5cGU6ICdjb2xvcicsIG1pbjogMCwgbWF4OiAyNTUsIGRlZmF1bHRWYWx1ZTogREVGQVVMVF9TSEFET1dfQ09MT1J9LFxuICAgIHtuYW1lOiAnc3VuTGlnaHRDb2xvcicsIHR5cGU6ICdjb2xvcicsIG1pbjogMCwgbWF4OiAyNTUsIGRlZmF1bHRWYWx1ZTogREVGQVVMVF9MSUdIVF9DT0xPUn0sXG4gICAge25hbWU6ICdhbWJpZW50TGlnaHRDb2xvcicsIHR5cGU6ICdjb2xvcicsIG1pbjogMCwgbWF4OiAyNTUsIGRlZmF1bHRWYWx1ZTogREVGQVVMVF9MSUdIVF9DT0xPUn1cbiAgXVxufTtcblxuZXhwb3J0IGNvbnN0IERJU1RBTkNFX0ZPR19UWVBFID0gJ2Rpc3RhbmNlRm9nJztcbmV4cG9ydCBjb25zdCBTVVJGQUNFX0ZPR19UWVBFID0gJ3N1cmZhY2VGb2cnO1xuXG5leHBvcnQgY29uc3QgUE9TVFBST0NFU1NJTkdfRUZGRUNUUzoge1trZXk6IHN0cmluZ106IEVmZmVjdERlc2NyaXB0aW9ufSA9IHtcbiAgaW5rOiB7XG4gICAgdHlwZTogJ2luaycsXG4gICAgbmFtZTogJ0luaycsXG4gICAgZGVzY3JpcHRpb246ICdlZmZlY3REZXNjcmlwdGlvbi5pbmsnLFxuICAgIHBhcmFtZXRlcnM6IFt7bmFtZTogJ3N0cmVuZ3RoJywgbWluOiAwLCBtYXg6IDF9XVxuICB9LFxuICBicmlnaHRuZXNzQ29udHJhc3Q6IHtcbiAgICB0eXBlOiAnYnJpZ2h0bmVzc0NvbnRyYXN0JyxcbiAgICBuYW1lOiAnQnJpZ2h0bmVzcyAmIENvbnRyYXN0JyxcbiAgICBkZXNjcmlwdGlvbjogJ2VmZmVjdERlc2NyaXB0aW9uLmJyaWdodG5lc3NDb250cmFzdCcsXG4gICAgcGFyYW1ldGVyczogW1xuICAgICAge25hbWU6ICdicmlnaHRuZXNzJywgbWluOiAtMSwgbWF4OiAxfSxcbiAgICAgIHtuYW1lOiAnY29udHJhc3QnLCBtaW46IC0xLCBtYXg6IDF9XG4gICAgXVxuICB9LFxuICBodWVTYXR1cmF0aW9uOiB7XG4gICAgdHlwZTogJ2h1ZVNhdHVyYXRpb24nLFxuICAgIG5hbWU6ICdIdWUgJiBTYXR1cmF0aW9uJyxcbiAgICBkZXNjcmlwdGlvbjogJ2VmZmVjdERlc2NyaXB0aW9uLmh1ZVNhdHVyYXRpb24nLFxuICAgIHBhcmFtZXRlcnM6IFtcbiAgICAgIHtuYW1lOiAnaHVlJywgbWluOiAtMSwgbWF4OiAxfSxcbiAgICAgIHtuYW1lOiAnc2F0dXJhdGlvbicsIGRlZmF1bHRWYWx1ZTogMC4yNSwgbWluOiAtMSwgbWF4OiAxfVxuICAgIF1cbiAgfSxcbiAgdmlicmFuY2U6IHtcbiAgICB0eXBlOiAndmlicmFuY2UnLFxuICAgIG5hbWU6ICdWaWJyYW5jZScsXG4gICAgZGVzY3JpcHRpb246ICdlZmZlY3REZXNjcmlwdGlvbi52aWJyYW5jZScsXG4gICAgcGFyYW1ldGVyczogW3tuYW1lOiAnYW1vdW50JywgZGVmYXVsdFZhbHVlOiAwLjUsIG1pbjogLTEsIG1heDogMX1dXG4gIH0sXG4gIHNlcGlhOiB7XG4gICAgdHlwZTogJ3NlcGlhJyxcbiAgICBuYW1lOiAnU2VwaWEnLFxuICAgIGRlc2NyaXB0aW9uOiAnZWZmZWN0RGVzY3JpcHRpb24uc2VwaWEnLFxuICAgIHBhcmFtZXRlcnM6IFt7bmFtZTogJ2Ftb3VudCcsIG1pbjogMCwgbWF4OiAxfV1cbiAgfSxcbiAgZG90U2NyZWVuOiB7XG4gICAgdHlwZTogJ2RvdFNjcmVlbicsXG4gICAgbmFtZTogJ0RvdCBTY3JlZW4nLFxuICAgIGRlc2NyaXB0aW9uOiAnZWZmZWN0RGVzY3JpcHRpb24uZG90U2NyZWVuJyxcbiAgICBwYXJhbWV0ZXJzOiBbXG4gICAgICB7XG4gICAgICAgIG5hbWU6ICdhbmdsZScsXG4gICAgICAgIG1pbjogMCxcbiAgICAgICAgbWF4OiBNYXRoLlBJIC8gMlxuICAgICAgfSxcbiAgICAgIHtcbiAgICAgICAgbmFtZTogJ3NpemUnLFxuICAgICAgICBtaW46IDEsXG4gICAgICAgIG1heDogMjBcbiAgICAgIH0sXG4gICAgICB7XG4gICAgICAgIG5hbWU6ICdjZW50ZXInLFxuICAgICAgICB0eXBlOiAnYXJyYXknLFxuICAgICAgICBsYWJlbDogWydDZW50ZXIgWCcsICdDZW50ZXIgWSddLFxuICAgICAgICBkZWZhdWx0VmFsdWU6IFswLjUsIDAuNV0sXG4gICAgICAgIG1pbjogMCxcbiAgICAgICAgbWF4OiAxXG4gICAgICB9XG4gICAgXVxuICB9LFxuICBjb2xvckhhbGZ0b25lOiB7XG4gICAgdHlwZTogJ2NvbG9ySGFsZnRvbmUnLFxuICAgIG5hbWU6ICdDb2xvciBIYWxmdG9uZScsXG4gICAgZGVzY3JpcHRpb246ICdlZmZlY3REZXNjcmlwdGlvbi5jb2xvckhhbGZ0b25lJyxcbiAgICBwYXJhbWV0ZXJzOiBbXG4gICAgICB7XG4gICAgICAgIG5hbWU6ICdhbmdsZScsXG4gICAgICAgIG1pbjogMCxcbiAgICAgICAgbWF4OiBNYXRoLlBJIC8gMlxuICAgICAgfSxcbiAgICAgIHtcbiAgICAgICAgbmFtZTogJ3NpemUnLFxuICAgICAgICBtaW46IDEsXG4gICAgICAgIG1heDogMjBcbiAgICAgIH0sXG4gICAgICB7XG4gICAgICAgIG5hbWU6ICdjZW50ZXInLFxuICAgICAgICB0eXBlOiAnYXJyYXknLFxuICAgICAgICBsYWJlbDogWydDZW50ZXIgWCcsICdDZW50ZXIgWSddLFxuICAgICAgICBkZWZhdWx0VmFsdWU6IFswLjUsIDAuNV0sXG4gICAgICAgIG1pbjogMCxcbiAgICAgICAgbWF4OiAxXG4gICAgICB9XG4gICAgXVxuICB9LFxuICBub2lzZToge1xuICAgIHR5cGU6ICdub2lzZScsXG4gICAgbmFtZTogJ05vaXNlJyxcbiAgICBkZXNjcmlwdGlvbjogJ2VmZmVjdERlc2NyaXB0aW9uLm5vaXNlJyxcbiAgICBwYXJhbWV0ZXJzOiBbe25hbWU6ICdhbW91bnQnLCBtaW46IDAsIG1heDogMX1dXG4gIH0sXG4gIHRyaWFuZ2xlQmx1cjoge1xuICAgIHR5cGU6ICd0cmlhbmdsZUJsdXInLFxuICAgIG5hbWU6ICdCbHVyIChUcmlhbmdsZSknLFxuICAgIGRlc2NyaXB0aW9uOiAnZWZmZWN0RGVzY3JpcHRpb24udHJpYW5nbGVCbHVyJyxcbiAgICBwYXJhbWV0ZXJzOiBbe25hbWU6ICdyYWRpdXMnLCBtaW46IDAsIG1heDogMTAwfV1cbiAgfSxcbiAgem9vbUJsdXI6IHtcbiAgICB0eXBlOiAnem9vbUJsdXInLFxuICAgIG5hbWU6ICdCbHVyIChab29tKScsXG4gICAgZGVzY3JpcHRpb246ICdlZmZlY3REZXNjcmlwdGlvbi56b29tQmx1cicsXG4gICAgcGFyYW1ldGVyczogW1xuICAgICAge1xuICAgICAgICBuYW1lOiAnc3RyZW5ndGgnLFxuICAgICAgICBkZWZhdWx0VmFsdWU6IDAuMDUsXG4gICAgICAgIG1pbjogMCxcbiAgICAgICAgbWF4OiAxXG4gICAgICB9LFxuICAgICAge1xuICAgICAgICBuYW1lOiAnY2VudGVyJyxcbiAgICAgICAgdHlwZTogJ2FycmF5JyxcbiAgICAgICAgbGFiZWw6IFsnQ2VudGVyIFgnLCAnQ2VudGVyIFknXSxcbiAgICAgICAgZGVmYXVsdFZhbHVlOiBbMC41LCAwLjVdLFxuICAgICAgICBtaW46IDAsXG4gICAgICAgIG1heDogMVxuICAgICAgfVxuICAgIF1cbiAgfSxcbiAgdGlsdFNoaWZ0OiB7XG4gICAgdHlwZTogJ3RpbHRTaGlmdCcsXG4gICAgbmFtZTogJ0JsdXIgKFRpbHQgU2hpZnQpJyxcbiAgICBkZXNjcmlwdGlvbjogJ2VmZmVjdERlc2NyaXB0aW9uLnRpbHRTaGlmdCcsXG4gICAgcGFyYW1ldGVyczogW1xuICAgICAge1xuICAgICAgICBuYW1lOiAnYmx1clJhZGl1cycsXG4gICAgICAgIGxhYmVsOiAnQmx1cicsXG4gICAgICAgIG1pbjogMCxcbiAgICAgICAgbWF4OiA1MFxuICAgICAgfSxcbiAgICAgIHtcbiAgICAgICAgbmFtZTogJ2dyYWRpZW50UmFkaXVzJyxcbiAgICAgICAgbGFiZWw6ICdHcmFkaWVudCcsXG4gICAgICAgIG1pbjogMCxcbiAgICAgICAgbWF4OiA0MDBcbiAgICAgIH0sXG4gICAgICB7XG4gICAgICAgIG5hbWU6ICdzdGFydCcsXG4gICAgICAgIHR5cGU6ICdhcnJheScsXG4gICAgICAgIGxhYmVsOiBbJ1N0YXJ0JywgZmFsc2VdLFxuICAgICAgICBkZWZhdWx0VmFsdWU6IFswLjAsIDAuMF0sXG4gICAgICAgIG1pbjogMCxcbiAgICAgICAgbWF4OiAxXG4gICAgICB9LFxuICAgICAge1xuICAgICAgICBuYW1lOiAnZW5kJyxcbiAgICAgICAgdHlwZTogJ2FycmF5JyxcbiAgICAgICAgbGFiZWw6IFsnRW5kJywgZmFsc2VdLFxuICAgICAgICBkZWZhdWx0VmFsdWU6IFsxLCAxXSxcbiAgICAgICAgbWluOiAwLFxuICAgICAgICBtYXg6IDFcbiAgICAgIH1cbiAgICBdXG4gIH0sXG4gIGVkZ2VXb3JrOiB7XG4gICAgdHlwZTogJ2VkZ2VXb3JrJyxcbiAgICBuYW1lOiAnRWRnZSB3b3JrJyxcbiAgICBkZXNjcmlwdGlvbjogJ2VmZmVjdERlc2NyaXB0aW9uLmVkZ2VXb3JrJyxcbiAgICBwYXJhbWV0ZXJzOiBbe25hbWU6ICdyYWRpdXMnLCBtaW46IDEsIG1heDogNTB9XVxuICB9LFxuICB2aWduZXR0ZToge1xuICAgIHR5cGU6ICd2aWduZXR0ZScsXG4gICAgbmFtZTogJ1ZpZ25ldHRlJyxcbiAgICBkZXNjcmlwdGlvbjogJ2VmZmVjdERlc2NyaXB0aW9uLnZpZ25ldHRlJyxcbiAgICBwYXJhbWV0ZXJzOiBbXG4gICAgICB7bmFtZTogJ2Ftb3VudCcsIG1pbjogMCwgbWF4OiAxfSxcbiAgICAgIHtuYW1lOiAncmFkaXVzJywgbWluOiAwLCBtYXg6IDF9XG4gICAgXVxuICB9LFxuICBtYWduaWZ5OiB7XG4gICAgdHlwZTogJ21hZ25pZnknLFxuICAgIG5hbWU6ICdNYWduaWZ5JyxcbiAgICBkZXNjcmlwdGlvbjogJ2VmZmVjdERlc2NyaXB0aW9uLm1hZ25pZnknLFxuICAgIHBhcmFtZXRlcnM6IFtcbiAgICAgIHtcbiAgICAgICAgbmFtZTogJ3NjcmVlblhZJyxcbiAgICAgICAgdHlwZTogJ2FycmF5JyxcbiAgICAgICAgbGFiZWw6IFsnUG9zaXRpb24gWCcsICdQb3NpdGlvbiBZJ10sXG4gICAgICAgIGRlZmF1bHRWYWx1ZTogWzAuNSwgMC41XSxcbiAgICAgICAgbWluOiAwLFxuICAgICAgICBtYXg6IDFcbiAgICAgIH0sXG4gICAgICB7XG4gICAgICAgIG5hbWU6ICdyYWRpdXNQaXhlbHMnLFxuICAgICAgICBsYWJlbDogJ1NpemUnLFxuICAgICAgICBtaW46IDEwLFxuICAgICAgICBtYXg6IDUwMFxuICAgICAgfSxcbiAgICAgIHtcbiAgICAgICAgbmFtZTogJ3pvb20nLFxuICAgICAgICBtaW46IDAuNSxcbiAgICAgICAgbWF4OiA1MFxuICAgICAgfSxcbiAgICAgIHtcbiAgICAgICAgbmFtZTogJ2JvcmRlcldpZHRoUGl4ZWxzJyxcbiAgICAgICAgbGFiZWw6ICdCb3JkZXIgV2lkdGgnLFxuICAgICAgICBkZWZhdWx0VmFsdWU6IDMsXG4gICAgICAgIG1pbjogMCxcbiAgICAgICAgbWF4OiA1MFxuICAgICAgfVxuICAgIF1cbiAgfSxcbiAgaGV4YWdvbmFsUGl4ZWxhdGU6IHtcbiAgICB0eXBlOiAnaGV4YWdvbmFsUGl4ZWxhdGUnLFxuICAgIG5hbWU6ICdIZXhhZ29uYWwgUGl4ZWxhdGUnLFxuICAgIGRlc2NyaXB0aW9uOiAnZWZmZWN0RGVzY3JpcHRpb24uaGV4YWdvbmFsUGl4ZWxhdGUnLFxuICAgIHBhcmFtZXRlcnM6IFt7bmFtZTogJ3NjYWxlJywgZGVmYXVsdFZhbHVlOiAyMCwgbWluOiAxLCBtYXg6IDUwfV1cbiAgfSxcbiAgZGlzdGFuY2VGb2c6IHtcbiAgICB0eXBlOiBESVNUQU5DRV9GT0dfVFlQRSxcbiAgICBuYW1lOiAnRGlzdGFuY2UgRm9nJyxcbiAgICBkZXNjcmlwdGlvbjogJ2VmZmVjdERlc2NyaXB0aW9uLmRpc3RhbmNlRm9nJyxcbiAgICBwYXJhbWV0ZXJzOiBbXG4gICAgICB7bmFtZTogJ2RlbnNpdHknLCBkZWZhdWx0VmFsdWU6IDAuNSwgbWluOiAwLCBtYXg6IDF9LFxuICAgICAge25hbWU6ICdmb2dTdGFydCcsIGxhYmVsOiAnU3RhcnQnLCBkZWZhdWx0VmFsdWU6IDAuMywgbWluOiAwLCBtYXg6IDF9LFxuICAgICAge25hbWU6ICdmb2dSYW5nZScsIGxhYmVsOiAnUmFuZ2UnLCBkZWZhdWx0VmFsdWU6IDAuNSwgbWluOiAwLjAxLCBtYXg6IDF9LFxuICAgICAge25hbWU6ICdmb2dDb2xvcicsIHR5cGU6ICdjb2xvcicsIG1pbjogMCwgbWF4OiAyNTUsIGRlZmF1bHRWYWx1ZTogWzIxNywgMjIyLCAyMzBdfVxuICAgIF1cbiAgfSxcbiAgc3VyZmFjZUZvZzoge1xuICAgIHR5cGU6IFNVUkZBQ0VfRk9HX1RZUEUsXG4gICAgbmFtZTogJ1N1cmZhY2UgRm9nJyxcbiAgICBkZXNjcmlwdGlvbjogJ2VmZmVjdERlc2NyaXB0aW9uLnN1cmZhY2VGb2cnLFxuICAgIHBhcmFtZXRlcnM6IFtcbiAgICAgIHtuYW1lOiAnZGVuc2l0eScsIGRlZmF1bHRWYWx1ZTogMC42LCBtaW46IDAsIG1heDogMX0sXG4gICAgICB7bmFtZTogJ2hlaWdodCcsIGxhYmVsOiAnRWxldmF0aW9uIChtKScsIGRlZmF1bHRWYWx1ZTogNTAsIG1pbjogLTIwMCwgbWF4OiA2MDAwfSxcbiAgICAgIHtcbiAgICAgICAgbmFtZTogJ2FuaW1hdGVIZWlnaHQnLFxuICAgICAgICB0eXBlOiAnY2hlY2tib3gnLFxuICAgICAgICBsYWJlbDogJ0FuaW1hdGUgRWxldmF0aW9uJyxcbiAgICAgICAgdG9vbHRpcDpcbiAgICAgICAgICAnQW5pbWF0ZXMgZWxldmF0aW9uIGZyb20gc3RhcnQgdG8gZW5kIHZhbHVlIGR1cmluZyB2aWRlbyBleHBvcnQgcHJldmlldyBhbmQgcmVjb3JkaW5nLicsXG4gICAgICAgIGRlZmF1bHRWYWx1ZTogZmFsc2UsXG4gICAgICAgIG1pbjogMCxcbiAgICAgICAgbWF4OiAxXG4gICAgICB9LFxuICAgICAge25hbWU6ICdoZWlnaHRFbmQnLCBsYWJlbDogJ0VuZCBFbGV2YXRpb24gKG0pJywgZGVmYXVsdFZhbHVlOiAxMDAsIG1pbjogLTIwMCwgbWF4OiA2MDAwfSxcbiAgICAgIHtcbiAgICAgICAgbmFtZTogJ2xpbmVhckVhc2luZycsXG4gICAgICAgIHR5cGU6ICdjaGVja2JveCcsXG4gICAgICAgIGxhYmVsOiAnTGluZWFyIEVhc2luZycsXG4gICAgICAgIHRvb2x0aXA6XG4gICAgICAgICAgJ1VzZXMgY29uc3RhbnQgc3BlZWQgaW5zdGVhZCBvZiBzbW9vdGggZWFzZS1pbiAvIGVhc2Utb3V0IGR1cmluZyBlbGV2YXRpb24gYW5pbWF0aW9uLicsXG4gICAgICAgIGRlZmF1bHRWYWx1ZTogZmFsc2UsXG4gICAgICAgIG1pbjogMCxcbiAgICAgICAgbWF4OiAxXG4gICAgICB9LFxuICAgICAge25hbWU6ICd0aGlja25lc3MnLCBsYWJlbDogJ1RyYW5zaXRpb24gKG0pJywgZGVmYXVsdFZhbHVlOiA1MCwgbWluOiAwLCBtYXg6IDEwMDB9LFxuICAgICAge1xuICAgICAgICBuYW1lOiAnZm9nQ29sb3InLFxuICAgICAgICB0eXBlOiAnY29sb3InLFxuICAgICAgICBsYWJlbDogJ0ZvZyBDb2xvcicsXG4gICAgICAgIG1pbjogMCxcbiAgICAgICAgbWF4OiAyNTUsXG4gICAgICAgIGRlZmF1bHRWYWx1ZTogWzIzMCwgMjM1LCAyNDJdXG4gICAgICB9LFxuICAgICAge1xuICAgICAgICBuYW1lOiAncGF0dGVybicsXG4gICAgICAgIHR5cGU6ICdjaGVja2JveCcsXG4gICAgICAgIGxhYmVsOiAnUGF0dGVybicsXG4gICAgICAgIHRvb2x0aXA6ICdBZGRzIGEgbm9pc2UgcGF0dGVybiB0byB0aGUgZm9nIGZvciBhIG1vcmUgbmF0dXJhbCwgdm9sdW1ldHJpYyBsb29rLicsXG4gICAgICAgIGRlZmF1bHRWYWx1ZTogZmFsc2UsXG4gICAgICAgIG1pbjogMCxcbiAgICAgICAgbWF4OiAxXG4gICAgICB9XG4gICAgXVxuICB9XG59O1xuXG5leHBvcnQgY29uc3QgRUZGRUNUX0RFU0NSSVBUSU9OUzogRWZmZWN0RGVzY3JpcHRpb25bXSA9IFtcbiAgTElHSFRfQU5EX1NIQURPV19FRkZFQ1QsXG4gIC4uLk9iamVjdC5rZXlzKFBPU1RQUk9DRVNTSU5HX0VGRkVDVFMpLm1hcChrZXlOYW1lID0+IFBPU1RQUk9DRVNTSU5HX0VGRkVDVFNba2V5TmFtZV0pXG5dO1xuXG5leHBvcnQgdHlwZSBFZmZlY3RUeXBlID1cbiAgfCAnaW5rJ1xuICB8ICdicmlnaHRuZXNzQ29udHJhc3QnXG4gIHwgJ2h1ZVNhdHVyYXRpb24nXG4gIHwgJ3ZpYnJhbmNlJ1xuICB8ICdzZXBpYSdcbiAgfCAnZG90U2NyZWVuJ1xuICB8ICdjb2xvckhhbGZ0b25lJ1xuICB8ICdub2lzZSdcbiAgfCAndHJpYW5nbGVCbHVyJ1xuICB8ICd6b29tQmx1cidcbiAgfCAndGlsdFNoaWZ0J1xuICB8ICdlZGdlV29yaydcbiAgfCAndmlnbmV0dGUnXG4gIHwgJ21hZ25pZnknXG4gIHwgJ2hleGFnb25hbFBpeGVsYXRlJ1xuICB8ICdkaXN0YW5jZUZvZydcbiAgfCAnc3VyZmFjZUZvZydcbiAgfCAnbGlnaHRBbmRTaGFkb3cnO1xuXG5leHBvcnQgY29uc3QgU1lOQ19USU1FTElORV9NT0RFUzogUmVjb3JkPHN0cmluZywgU3luY1RpbWVsaW5lTW9kZT4gPSB7XG4gIHN0YXJ0OiAwLFxuICBlbmQ6IDFcbn07XG5cbmV4cG9ydCBjb25zdCBHRU9BUlJPV19NRVRBREFUQV9LRVkgPSAnQVJST1c6ZXh0ZW5zaW9uOm5hbWUnO1xuXG4vKipcbiAqIEVudW0gaG9sZGluZyBHZW9BcnJvdyBleHRlbnNpb24gdHlwZSBuYW1lc1xuICovXG5leHBvcnQgZW51bSBHRU9BUlJPV19FWFRFTlNJT05TIHtcbiAgUE9JTlQgPSAnZ2VvYXJyb3cucG9pbnQnLFxuICBMSU5FU1RSSU5HID0gJ2dlb2Fycm93LmxpbmVzdHJpbmcnLFxuICBQT0xZR09OID0gJ2dlb2Fycm93LnBvbHlnb24nLFxuICBNVUxUSVBPSU5UID0gJ2dlb2Fycm93Lm11bHRpcG9pbnQnLFxuICBNVUxUSUxJTkVTVFJJTkcgPSAnZ2VvYXJyb3cubXVsdGlsaW5lc3RyaW5nJyxcbiAgTVVMVElQT0xZR09OID0gJ2dlb2Fycm93Lm11bHRpcG9seWdvbicsXG4gIFdLQiA9ICdnZW9hcnJvdy53a2InXG59XG5cbmV4cG9ydCBjb25zdCBMT0FERVJTX0NETl9WRVJTSU9OID0gJzQuMy4yJztcbmV4cG9ydCBjb25zdCBMT0FERVJTX0NETl9VUkwgPSAnaHR0cHM6Ly91bnBrZy5jb20vQGxvYWRlcnMuZ2wnO1xuXG5leHBvcnQgY29uc3QgZ2V0TG9hZGVyT3B0aW9ucyA9ICgpID0+IHtcbiAgcmV0dXJuIHtcbiAgICBtdnQ6IHtcbiAgICAgIHdvcmtlclVybDogYCR7TE9BREVSU19DRE5fVVJMfS9tdnRAJHtMT0FERVJTX0NETl9WRVJTSU9OfS9kaXN0L212dC13b3JrZXIuanNgXG4gICAgfSxcbiAgICAncXVhbnRpemVkLW1lc2gnOiB7XG4gICAgICB3b3JrZXJVcmw6IGAke0xPQURFUlNfQ0ROX1VSTH0vdGVycmFpbkAke0xPQURFUlNfQ0ROX1ZFUlNJT059L2Rpc3QvcXVhbnRpemVkLW1lc2gtd29ya2VyLmpzYFxuICAgIH0sXG4gICAgbnB5OiB7XG4gICAgICB3b3JrZXJVcmw6IGAke0xPQURFUlNfQ0ROX1VSTH0vdGV4dHVyZXNAJHtMT0FERVJTX0NETl9WRVJTSU9OfS9kaXN0L25weS13b3JrZXIuanNgXG4gICAgfVxuICB9O1xufTtcblxuZXhwb3J0IGNvbnN0IENVU1RPTV9TQ0VORUdSQVBIX01PREVMX0lEID0gJ2N1c3RvbSc7XG5jb25zdCBNT0RFTFNfQkFTRV9VUkwgPVxuICAnaHR0cHM6Ly9zdHVkaW8tcHVibGljLWRhdGEuZm91cnNxdWFyZS5jb20vc3RhdGljcy9rZXBsZXJnbC8zZC1tb2RlbHMuMjAyMi0wNi0xMyc7XG5cbmV4cG9ydCBjb25zdCBUUklQX0xBWUVSX1NDRU5FR1JBUEhfTU9ERUxTOiB7XG4gIGlkOiBzdHJpbmc7XG4gIGxhYmVsOiBzdHJpbmc7XG4gIGljb246IGFueTtcbiAgdXJsOiBzdHJpbmcgfCBudWxsO1xuICBhbmdsZXM6IFtudW1iZXIsIG51bWJlciwgbnVtYmVyXTtcbiAgc2NhbGU6IG51bWJlcjtcbn1bXSA9IFtcbiAge1xuICAgIGlkOiAnYWlycGxhbmUnLFxuICAgIGxhYmVsOiAnQWlycGxhbmUnLFxuICAgIGljb246IG51bGwsXG4gICAgdXJsOiBgJHtNT0RFTFNfQkFTRV9VUkx9L1BsYW5lLmdsYmAsXG4gICAgYW5nbGVzOiBbMCwgMCwgMF0sXG4gICAgc2NhbGU6IDEuMFxuICB9LFxuICB7XG4gICAgaWQ6ICdib2Vpbmc3NzcnLFxuICAgIGxhYmVsOiAnQWlybGluZXInLFxuICAgIGljb246IG51bGwsXG4gICAgdXJsOiBgJHtNT0RFTFNfQkFTRV9VUkx9L0FpcmxpbmVyLmdsYmAsXG4gICAgYW5nbGVzOiBbMCwgMCwgMF0sXG4gICAgc2NhbGU6IDEuMFxuICB9LFxuICB7XG4gICAgaWQ6ICd1YmVyLWV2dG9sJyxcbiAgICBsYWJlbDogJ1ZUT0wnLFxuICAgIGljb246IG51bGwsXG4gICAgdXJsOiBgJHtNT0RFTFNfQkFTRV9VUkx9L2V2dG9sLmdsYmAsXG4gICAgYW5nbGVzOiBbMCwgMCwgMF0sXG4gICAgc2NhbGU6IDEuMFxuICB9LFxuICB7XG4gICAgaWQ6ICdoYW5nLWdsaWRlcicsXG4gICAgbGFiZWw6ICdHbGlkZXInLFxuICAgIGljb246IG51bGwsXG4gICAgdXJsOiBgJHtNT0RFTFNfQkFTRV9VUkx9L0hhbmdnbGlkZXIuZ2xiYCxcbiAgICBhbmdsZXM6IFswLCAwLCAwXSxcbiAgICBzY2FsZTogMS4wXG4gIH0sXG4gIHtcbiAgICBpZDogJ2hlbGljb3B0ZXInLFxuICAgIGxhYmVsOiAnSGVsaWNvcHRlcicsXG4gICAgaWNvbjogbnVsbCxcbiAgICB1cmw6IGAke01PREVMU19CQVNFX1VSTH0vSGVsaWNvcHRlci5nbGJgLFxuICAgIGFuZ2xlczogWzAsIDAsIDBdLFxuICAgIHNjYWxlOiAxLjBcbiAgfSxcbiAge1xuICAgIGlkOiAnYmljeWNsZScsXG4gICAgbGFiZWw6ICdCaWN5Y2xlJyxcbiAgICBpY29uOiBudWxsLFxuICAgIHVybDogYCR7TU9ERUxTX0JBU0VfVVJMfS9CaWN5Y2xlLmdsYmAsXG4gICAgYW5nbGVzOiBbMCwgMCwgMF0sXG4gICAgc2NhbGU6IDEuMFxuICB9LFxuICB7XG4gICAgaWQ6ICdzY29vdGVyJyxcbiAgICBsYWJlbDogJ1Njb290ZXInLFxuICAgIGljb246IG51bGwsXG4gICAgdXJsOiBgJHtNT0RFTFNfQkFTRV9VUkx9L1Njb290ZXIuZ2xiYCxcbiAgICBhbmdsZXM6IFswLCAwLCAwXSxcbiAgICBzY2FsZTogMS4wXG4gIH0sXG4gIHtcbiAgICBpZDogJ2NhcicsXG4gICAgbGFiZWw6ICdDYXInLFxuICAgIGljb246IG51bGwsXG4gICAgdXJsOiBgJHtNT0RFTFNfQkFTRV9VUkx9L0Nhci5nbGJgLFxuICAgIGFuZ2xlczogWzAsIDAsIDBdLFxuICAgIHNjYWxlOiAxLjBcbiAgfSxcbiAge1xuICAgIGlkOiAndHJ1Y2snLFxuICAgIGxhYmVsOiAnVHJ1Y2snLFxuICAgIGljb246IG51bGwsXG4gICAgdXJsOiBgJHtNT0RFTFNfQkFTRV9VUkx9L1RydWNrLmdsYmAsXG4gICAgYW5nbGVzOiBbMCwgMCwgMF0sXG4gICAgc2NhbGU6IDEuMFxuICB9LFxuICB7XG4gICAgaWQ6ICdzZW1pdHJ1Y2snLFxuICAgIGxhYmVsOiAnU2VtaXRydWNrJyxcbiAgICBpY29uOiBudWxsLFxuICAgIHVybDogYCR7TU9ERUxTX0JBU0VfVVJMfS9TZW1pdHJ1Y2suZ2xiYCxcbiAgICBhbmdsZXM6IFswLCAwLCAwXSxcbiAgICBzY2FsZTogMS4wXG4gIH0sXG4gIHtcbiAgICBpZDogJ2Nhcmdvc2hpcCcsXG4gICAgbGFiZWw6ICdDYXJnb3NoaXAnLFxuICAgIGljb246IG51bGwsXG4gICAgdXJsOiBgJHtNT0RFTFNfQkFTRV9VUkx9L0Nhcmdvc2hpcC5nbGJgLFxuICAgIGFuZ2xlczogWzAsIDAsIDBdLFxuICAgIHNjYWxlOiAxLjBcbiAgfSxcbiAge1xuICAgIGlkOiBDVVNUT01fU0NFTkVHUkFQSF9NT0RFTF9JRCxcbiAgICBsYWJlbDogJ0N1c3RvbScsXG4gICAgaWNvbjogbnVsbCxcbiAgICB1cmw6IG51bGwsXG4gICAgYW5nbGVzOiBbMCwgMCwgMF0sXG4gICAgc2NhbGU6IDEuMFxuICB9XG5dO1xuIl0sIm1hcHBpbmdzIjoiOzs7Ozs7QUFBQTtBQUNBOztBQUVBLE9BQU9BLFNBQVMsTUFB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
|