@kepler.gl/reducers 3.3.0-alpha.1 → 3.3.0-alpha.11
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/combined-updaters.js +491 -0
- package/dist/cjs/composer-helpers.js +101 -0
- package/dist/cjs/composers.js +22 -0
- package/dist/cjs/core.js +105 -0
- package/dist/cjs/data-utils.js +53 -0
- package/dist/cjs/export-utils.js +91 -0
- package/dist/{index.js → cjs/index.js} +2 -3
- package/dist/cjs/interaction-utils.js +115 -0
- package/dist/cjs/layer-utils.js +635 -0
- package/dist/cjs/map-state-updaters.js +658 -0
- package/dist/cjs/map-state.js +35 -0
- package/dist/cjs/map-style-updaters.js +659 -0
- package/dist/cjs/map-style.js +33 -0
- package/dist/cjs/merger-handler.js +105 -0
- package/dist/cjs/middleware.js +25 -0
- package/dist/cjs/provider-state-updaters.js +464 -0
- package/dist/cjs/provider-state.js +34 -0
- package/dist/cjs/root.js +207 -0
- package/dist/cjs/ui-state-updaters.js +922 -0
- package/dist/cjs/ui-state.js +36 -0
- package/dist/cjs/vis-state-merger.js +1215 -0
- package/dist/cjs/vis-state-selectors.js +48 -0
- package/dist/cjs/vis-state-updaters.js +5150 -0
- package/dist/cjs/vis-state.js +35 -0
- package/dist/combined-updaters.d.ts +19 -2
- package/dist/composers.d.ts +2 -0
- package/dist/esm/combined-updaters.js +484 -0
- package/dist/esm/composer-helpers.js +85 -0
- package/dist/esm/composers.js +14 -0
- package/dist/esm/core.js +101 -0
- package/dist/esm/data-utils.js +47 -0
- package/dist/esm/export-utils.js +86 -0
- package/dist/esm/index.js +62 -0
- package/dist/esm/interaction-utils.js +106 -0
- package/dist/esm/layer-utils.js +602 -0
- package/dist/esm/map-state-updaters.js +650 -0
- package/dist/esm/map-state.js +29 -0
- package/dist/esm/map-style-updaters.js +652 -0
- package/dist/esm/map-style.js +27 -0
- package/dist/esm/merger-handler.js +96 -0
- package/dist/esm/middleware.js +17 -0
- package/dist/esm/provider-state-updaters.js +458 -0
- package/dist/esm/provider-state.js +28 -0
- package/dist/esm/root.js +201 -0
- package/dist/esm/ui-state-updaters.js +917 -0
- package/dist/esm/ui-state.js +30 -0
- package/dist/esm/vis-state-merger.js +1182 -0
- package/dist/esm/vis-state-selectors.js +42 -0
- package/dist/esm/vis-state-updaters.js +5057 -0
- package/dist/esm/vis-state.js +29 -0
- package/dist/interaction-utils.d.ts +1 -1
- package/dist/layer-utils.d.ts +23 -5
- package/dist/map-state-updaters.d.ts +26 -21
- package/dist/map-state.d.ts +2 -78
- package/dist/map-style-updaters.d.ts +1 -3
- package/dist/middleware.d.ts +2 -2
- package/dist/root.d.ts +1 -1
- package/dist/ui-state-updaters.d.ts +17 -2
- package/dist/vis-state-merger.d.ts +7 -0
- package/dist/vis-state-selectors.d.ts +88 -5
- package/dist/vis-state-updaters.d.ts +127 -4
- package/dist/vis-state.d.ts +8 -4
- package/package.json +37 -32
- package/dist/combined-updaters.js +0 -363
- package/dist/composer-helpers.js +0 -101
- package/dist/composers.js +0 -23
- package/dist/core.js +0 -105
- package/dist/data-utils.js +0 -53
- package/dist/export-utils.js +0 -91
- package/dist/interaction-utils.js +0 -105
- package/dist/layer-utils.js +0 -376
- package/dist/map-state-updaters.js +0 -438
- package/dist/map-state.js +0 -35
- package/dist/map-style-updaters.js +0 -661
- package/dist/map-style.js +0 -34
- package/dist/merger-handler.js +0 -105
- package/dist/middleware.js +0 -27
- package/dist/provider-state-updaters.js +0 -466
- package/dist/provider-state.js +0 -35
- package/dist/root.js +0 -207
- package/dist/ui-state-updaters.js +0 -887
- package/dist/ui-state.js +0 -37
- package/dist/vis-state-merger.js +0 -1032
- package/dist/vis-state-selectors.js +0 -30
- package/dist/vis-state-updaters.js +0 -3859
- package/dist/vis-state.js +0 -36
|
@@ -1,887 +0,0 @@
|
|
|
1
|
-
"use strict";
|
|
2
|
-
|
|
3
|
-
var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault");
|
|
4
|
-
Object.defineProperty(exports, "__esModule", {
|
|
5
|
-
value: true
|
|
6
|
-
});
|
|
7
|
-
exports.toggleSplitMapUpdater = exports.toggleSidePanelUpdater = exports.toggleSidePanelCloseButtonUpdater = exports.togglePanelListViewUpdater = exports.toggleModalUpdater = exports.toggleMapControlUpdater = exports.startExportingImageUpdater = exports.showExportDropdownUpdater = exports.showDatasetTableUpdater = exports.setUserMapboxAccessTokenUpdater = exports.setMapControlVisibilityUpdater = exports.setMapControlSettingsUpdater = exports.setLocaleUpdater = exports.setExportVideoSettingUpdater = exports.setExportSelectedDatasetUpdater = exports.setExportMapHTMLModeUpdater = exports.setExportMapFormatUpdater = exports.setExportImageSettingUpdater = exports.setExportImageErrorUpdater = exports.setExportImageDataUriUpdater = exports.setExportFilteredUpdater = exports.setExportDataUpdater = exports.setExportDataTypeUpdater = exports.removeNotificationUpdater = exports.receiveMapConfigUpdater = exports.openDeleteModalUpdater = exports.loadFilesUpdater = exports.loadFilesSuccessUpdater = exports.loadFilesErrUpdater = exports.initUiStateUpdater = exports.hideExportDropdownUpdater = exports.cleanupExportImageUpdater = exports.addNotificationUpdater = exports.INITIAL_UI_STATE = exports.DEFAULT_NOTIFICATIONS = exports.DEFAULT_MODAL = exports.DEFAULT_MAP_CONTROLS = exports.DEFAULT_LOAD_FILES = exports.DEFAULT_EXPORT_VIDEO = exports.DEFAULT_EXPORT_MAP = exports.DEFAULT_EXPORT_JSON = exports.DEFAULT_EXPORT_IMAGE = exports.DEFAULT_EXPORT_HTML = exports.DEFAULT_EXPORT_DATA = exports.DEFAULT_ACTIVE_SIDE_PANEL = void 0;
|
|
8
|
-
var _toConsumableArray2 = _interopRequireDefault(require("@babel/runtime/helpers/toConsumableArray"));
|
|
9
|
-
var _defineProperty2 = _interopRequireDefault(require("@babel/runtime/helpers/defineProperty"));
|
|
10
|
-
var _constants = require("@kepler.gl/constants");
|
|
11
|
-
var _localization = require("@kepler.gl/localization");
|
|
12
|
-
var _utils = require("@kepler.gl/utils");
|
|
13
|
-
var _composerHelpers = require("./composer-helpers");
|
|
14
|
-
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; }
|
|
15
|
-
function _objectSpread(e) { for (var r = 1; r < arguments.length; r++) { var t = null != arguments[r] ? arguments[r] : {}; r % 2 ? ownKeys(Object(t), !0).forEach(function (r) { (0, _defineProperty2["default"])(e, r, t[r]); }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(e, Object.getOwnPropertyDescriptors(t)) : ownKeys(Object(t)).forEach(function (r) { Object.defineProperty(e, r, Object.getOwnPropertyDescriptor(t, r)); }); } return e; } // SPDX-License-Identifier: MIT
|
|
16
|
-
// Copyright contributors to the kepler.gl project
|
|
17
|
-
var DEFAULT_ACTIVE_SIDE_PANEL = exports.DEFAULT_ACTIVE_SIDE_PANEL = 'layer';
|
|
18
|
-
var DEFAULT_MODAL = exports.DEFAULT_MODAL = _constants.ADD_DATA_ID;
|
|
19
|
-
|
|
20
|
-
/**
|
|
21
|
-
* Updaters for `uiState` reducer. Can be used in your root reducer to directly modify kepler.gl's state.
|
|
22
|
-
* Read more about [Using updaters](../advanced-usage/using-updaters.md)
|
|
23
|
-
*
|
|
24
|
-
* @public
|
|
25
|
-
* @example
|
|
26
|
-
*
|
|
27
|
-
* import keplerGlReducer, {uiStateUpdaters} from '@kepler.gl/reducers';
|
|
28
|
-
* // Root Reducer
|
|
29
|
-
* const reducers = combineReducers({
|
|
30
|
-
* keplerGl: keplerGlReducer,
|
|
31
|
-
* app: appReducer
|
|
32
|
-
* });
|
|
33
|
-
*
|
|
34
|
-
* const composedReducer = (state, action) => {
|
|
35
|
-
* switch (action.type) {
|
|
36
|
-
* // click button to close side panel
|
|
37
|
-
* case 'CLICK_BUTTON':
|
|
38
|
-
* return {
|
|
39
|
-
* ...state,
|
|
40
|
-
* keplerGl: {
|
|
41
|
-
* ...state.keplerGl,
|
|
42
|
-
* foo: {
|
|
43
|
-
* ...state.keplerGl.foo,
|
|
44
|
-
* uiState: uiStateUpdaters.toggleSidePanelUpdater(
|
|
45
|
-
* uiState, {payload: null}
|
|
46
|
-
* )
|
|
47
|
-
* }
|
|
48
|
-
* }
|
|
49
|
-
* };
|
|
50
|
-
* }
|
|
51
|
-
* return reducers(state, action);
|
|
52
|
-
* };
|
|
53
|
-
*
|
|
54
|
-
* export default composedReducer;
|
|
55
|
-
*/
|
|
56
|
-
/* eslint-disable @typescript-eslint/no-unused-vars */
|
|
57
|
-
// @ts-ignore
|
|
58
|
-
var uiStateUpdaters = null;
|
|
59
|
-
/* eslint-enable @typescript-eslint/no-unused-vars */
|
|
60
|
-
|
|
61
|
-
var DEFAULT_MAP_CONTROLS_FEATURES = {
|
|
62
|
-
show: true,
|
|
63
|
-
active: false,
|
|
64
|
-
disableClose: false,
|
|
65
|
-
// defines which map index users are interacting with (through map controls)
|
|
66
|
-
activeMapIndex: 0
|
|
67
|
-
};
|
|
68
|
-
var DEFAULT_MAP_LEGEND_CONTROL = _objectSpread(_objectSpread({}, DEFAULT_MAP_CONTROLS_FEATURES), {}, {
|
|
69
|
-
disableEdit: false
|
|
70
|
-
});
|
|
71
|
-
/**
|
|
72
|
-
* A list of map control visibility and whether is it active.
|
|
73
|
-
* @memberof uiStateUpdaters
|
|
74
|
-
* @constant
|
|
75
|
-
* @property visibleLayers Default: `{show: true, active: false}`
|
|
76
|
-
* @property mapLegend Default: `{show: true, active: false}`
|
|
77
|
-
* @property toggle3d Default: `{show: true}`
|
|
78
|
-
* @property splitMap Default: `{show: true}`
|
|
79
|
-
* @property mapDraw Default: `{show: true, active: false}`
|
|
80
|
-
* @property mapLocale Default: `{show: false, active: false}`
|
|
81
|
-
* @public
|
|
82
|
-
*/
|
|
83
|
-
var DEFAULT_MAP_CONTROLS = exports.DEFAULT_MAP_CONTROLS = Object.keys(_constants.MAP_CONTROLS).reduce(function (_final, current) {
|
|
84
|
-
return _objectSpread(_objectSpread({}, _final), {}, (0, _defineProperty2["default"])({}, current, current === _constants.MAP_CONTROLS.mapLegend ? DEFAULT_MAP_LEGEND_CONTROL : DEFAULT_MAP_CONTROLS_FEATURES));
|
|
85
|
-
}, {});
|
|
86
|
-
|
|
87
|
-
/**
|
|
88
|
-
* Default image export config
|
|
89
|
-
* @memberof uiStateUpdaters
|
|
90
|
-
* @constant
|
|
91
|
-
* @property ratio Default: `'SCREEN'`,
|
|
92
|
-
* @property resolution Default: `'ONE_X'`,
|
|
93
|
-
* @property legend Default: `false`,
|
|
94
|
-
* @property mapH Default: 0,
|
|
95
|
-
* @property mapW Default: 0,
|
|
96
|
-
* @property imageSize Default: {zoomOffset: 0, scale: 1, imageW: 0, imageH: 0},
|
|
97
|
-
* @property imageDataUri Default: `''`,
|
|
98
|
-
* @property exporting Default: `false`
|
|
99
|
-
* @property error Default: `false`
|
|
100
|
-
* @property escapeXhtmlForWebpack Default: from application config (auto-detected: `true` for webpack)
|
|
101
|
-
* @public
|
|
102
|
-
*/
|
|
103
|
-
var DEFAULT_EXPORT_IMAGE = exports.DEFAULT_EXPORT_IMAGE = {
|
|
104
|
-
// user options
|
|
105
|
-
ratio: _constants.EXPORT_IMG_RATIOS.SCREEN,
|
|
106
|
-
resolution: _constants.RESOLUTIONS.ONE_X,
|
|
107
|
-
legend: false,
|
|
108
|
-
mapH: 0,
|
|
109
|
-
mapW: 0,
|
|
110
|
-
imageSize: {
|
|
111
|
-
zoomOffset: 0,
|
|
112
|
-
scale: 1,
|
|
113
|
-
imageW: 0,
|
|
114
|
-
imageH: 0
|
|
115
|
-
},
|
|
116
|
-
// when this is set to true, the mock map viewport will move to the center of data
|
|
117
|
-
center: false,
|
|
118
|
-
// exporting state
|
|
119
|
-
imageDataUri: '',
|
|
120
|
-
// exporting: used to attach plot-container to dom
|
|
121
|
-
exporting: false,
|
|
122
|
-
// processing: used as loading indicator when export image is being produced
|
|
123
|
-
processing: false,
|
|
124
|
-
error: false,
|
|
125
|
-
// whether to apply fix for uglify error in dom-to-image (from application config, auto-detects build tool)
|
|
126
|
-
escapeXhtmlForWebpack: (0, _utils.getApplicationConfig)().escapeXhtmlForWebpack
|
|
127
|
-
};
|
|
128
|
-
var DEFAULT_LOAD_FILES = exports.DEFAULT_LOAD_FILES = {
|
|
129
|
-
fileLoading: false
|
|
130
|
-
};
|
|
131
|
-
|
|
132
|
-
/**
|
|
133
|
-
* Default initial `exportData` settings
|
|
134
|
-
* @memberof uiStateUpdaters
|
|
135
|
-
* @constant
|
|
136
|
-
* @property selectedDataset Default: `''`,
|
|
137
|
-
* @property dataType Default: `'csv'`,
|
|
138
|
-
* @property filtered Default: `true`,
|
|
139
|
-
* @public
|
|
140
|
-
*/
|
|
141
|
-
var DEFAULT_EXPORT_DATA = exports.DEFAULT_EXPORT_DATA = {
|
|
142
|
-
selectedDataset: '',
|
|
143
|
-
dataType: _constants.EXPORT_DATA_TYPE.CSV,
|
|
144
|
-
filtered: true
|
|
145
|
-
};
|
|
146
|
-
|
|
147
|
-
/**
|
|
148
|
-
* @constant
|
|
149
|
-
*/
|
|
150
|
-
var DEFAULT_NOTIFICATIONS = exports.DEFAULT_NOTIFICATIONS = [];
|
|
151
|
-
|
|
152
|
-
/**
|
|
153
|
-
* @constant
|
|
154
|
-
* @property exportMapboxAccessToken - Default: null, this is used when we provide a default mapbox token for users to take advantage of
|
|
155
|
-
* @property userMapboxToken - Default: '', mapbox token provided by user through input field
|
|
156
|
-
* @property mode - Default: 'READ', read only or editable
|
|
157
|
-
* @public
|
|
158
|
-
*/
|
|
159
|
-
var DEFAULT_EXPORT_HTML = exports.DEFAULT_EXPORT_HTML = {
|
|
160
|
-
exportMapboxAccessToken: null,
|
|
161
|
-
userMapboxToken: '',
|
|
162
|
-
mode: _constants.EXPORT_HTML_MAP_MODES.READ
|
|
163
|
-
};
|
|
164
|
-
|
|
165
|
-
/**
|
|
166
|
-
* @constant
|
|
167
|
-
* @property hasData - Default: 'true',
|
|
168
|
-
* @public
|
|
169
|
-
*/
|
|
170
|
-
var DEFAULT_EXPORT_JSON = exports.DEFAULT_EXPORT_JSON = {
|
|
171
|
-
hasData: true
|
|
172
|
-
};
|
|
173
|
-
|
|
174
|
-
/**
|
|
175
|
-
* Export Map Config
|
|
176
|
-
* @constant
|
|
177
|
-
* @property HTML - Default: 'DEFAULT_EXPORT_HTML',
|
|
178
|
-
* @property JSON - Default: 'DEFAULT_EXPORT_JSON',
|
|
179
|
-
* @property format - Default: 'HTML',
|
|
180
|
-
* @public
|
|
181
|
-
*/
|
|
182
|
-
var DEFAULT_EXPORT_MAP = exports.DEFAULT_EXPORT_MAP = (0, _defineProperty2["default"])((0, _defineProperty2["default"])((0, _defineProperty2["default"])({}, _constants.EXPORT_MAP_FORMATS.HTML, DEFAULT_EXPORT_HTML), _constants.EXPORT_MAP_FORMATS.JSON, DEFAULT_EXPORT_JSON), "format", _constants.EXPORT_MAP_FORMATS.HTML);
|
|
183
|
-
|
|
184
|
-
/**
|
|
185
|
-
* Default initial `exportVideo` settings
|
|
186
|
-
* @memberof uiStateUpdaters
|
|
187
|
-
* @constant
|
|
188
|
-
* @property mediaType Default: `'webm'`
|
|
189
|
-
* @property cameraPreset Default: `'None'`
|
|
190
|
-
* @property fileName Default: `'kepler.gl'`
|
|
191
|
-
* @property resolution Default: `''`
|
|
192
|
-
* @property durationMs Default: `1000`
|
|
193
|
-
* @public
|
|
194
|
-
*/
|
|
195
|
-
var DEFAULT_EXPORT_VIDEO = exports.DEFAULT_EXPORT_VIDEO = {
|
|
196
|
-
mediaType: 'webm',
|
|
197
|
-
// use webm as default as gif export tends to freeze on larger recordings
|
|
198
|
-
cameraPreset: 'None',
|
|
199
|
-
fileName: 'kepler.gl',
|
|
200
|
-
resolution: '',
|
|
201
|
-
durationMs: 1000
|
|
202
|
-
};
|
|
203
|
-
|
|
204
|
-
/**
|
|
205
|
-
* Default initial `uiState`
|
|
206
|
-
* @memberof uiStateUpdaters
|
|
207
|
-
* @constant
|
|
208
|
-
* @property readOnly Default: `false`
|
|
209
|
-
* @property activeSidePanel Default: `'layer'`
|
|
210
|
-
* @property currentModal Default: `'addData'`
|
|
211
|
-
* @property datasetKeyToRemove Default: `null`
|
|
212
|
-
* @property visibleDropdown Default: `null`
|
|
213
|
-
* @property exportImage Default: [`DEFAULT_EXPORT_IMAGE`](#default_export_image)
|
|
214
|
-
* @property exportData Default: [`DEFAULT_EXPORT_DATA`](#default_export_data)
|
|
215
|
-
* @property exportMap Default: [`DEFAULT_EXPORT_MAP`](#default_export_map)
|
|
216
|
-
* @property mapControls Default: [`DEFAULT_MAP_CONTROLS`](#default_map_controls)
|
|
217
|
-
* @property notifications Default: `[]`
|
|
218
|
-
* @property notifications Default: `[]`
|
|
219
|
-
* @property loadFiles
|
|
220
|
-
* @property isSidePanelCloseButtonVisible Default: `true`
|
|
221
|
-
* @public
|
|
222
|
-
*/
|
|
223
|
-
var INITIAL_UI_STATE = exports.INITIAL_UI_STATE = {
|
|
224
|
-
readOnly: false,
|
|
225
|
-
activeSidePanel: DEFAULT_ACTIVE_SIDE_PANEL,
|
|
226
|
-
currentModal: DEFAULT_MODAL,
|
|
227
|
-
datasetKeyToRemove: null,
|
|
228
|
-
visibleDropdown: null,
|
|
229
|
-
// export image modal ui
|
|
230
|
-
exportImage: DEFAULT_EXPORT_IMAGE,
|
|
231
|
-
// export data modal ui
|
|
232
|
-
exportData: DEFAULT_EXPORT_DATA,
|
|
233
|
-
// html export
|
|
234
|
-
exportMap: DEFAULT_EXPORT_MAP,
|
|
235
|
-
// export video modal ui
|
|
236
|
-
exportVideo: DEFAULT_EXPORT_VIDEO,
|
|
237
|
-
// map control panels
|
|
238
|
-
mapControls: DEFAULT_MAP_CONTROLS,
|
|
239
|
-
// ui notifications
|
|
240
|
-
notifications: DEFAULT_NOTIFICATIONS,
|
|
241
|
-
// load files
|
|
242
|
-
loadFiles: DEFAULT_LOAD_FILES,
|
|
243
|
-
// Locale of the UI
|
|
244
|
-
locale: _localization.LOCALE_CODES.en,
|
|
245
|
-
layerPanelListView: 'list',
|
|
246
|
-
filterPanelListView: 'list',
|
|
247
|
-
isSidePanelCloseButtonVisible: true
|
|
248
|
-
};
|
|
249
|
-
|
|
250
|
-
/* Updaters */
|
|
251
|
-
/**
|
|
252
|
-
* @memberof uiStateUpdaters
|
|
253
|
-
*/
|
|
254
|
-
var initUiStateUpdater = exports.initUiStateUpdater = function initUiStateUpdater(state, action) {
|
|
255
|
-
return _objectSpread(_objectSpread({}, state), (action.payload || {}).initialUiState);
|
|
256
|
-
};
|
|
257
|
-
|
|
258
|
-
/**
|
|
259
|
-
* Toggle active side panel
|
|
260
|
-
* @memberof uiStateUpdaters
|
|
261
|
-
* @param state `uiState`
|
|
262
|
-
* @param action
|
|
263
|
-
* @param action.payload id of side panel to be shown, one of `layer`, `filter`, `interaction`, `map`. close side panel if `null`
|
|
264
|
-
* @returns nextState
|
|
265
|
-
* @public
|
|
266
|
-
*/
|
|
267
|
-
var toggleSidePanelUpdater = exports.toggleSidePanelUpdater = function toggleSidePanelUpdater(state, _ref) {
|
|
268
|
-
var id = _ref.payload;
|
|
269
|
-
return id === state.activeSidePanel ? state : _objectSpread(_objectSpread({}, state), {}, {
|
|
270
|
-
activeSidePanel: id
|
|
271
|
-
});
|
|
272
|
-
};
|
|
273
|
-
|
|
274
|
-
/**
|
|
275
|
-
* Show and hide modal dialog
|
|
276
|
-
* @memberof uiStateUpdaters
|
|
277
|
-
* @param state `uiState`
|
|
278
|
-
* @param action
|
|
279
|
-
* @paramaction.payload id of modal to be shown, null to hide modals. One of:
|
|
280
|
-
* - [`DATA_TABLE_ID`](../constants/default-settings.md#data_table_id)
|
|
281
|
-
* - [`DELETE_DATA_ID`](../constants/default-settings.md#delete_data_id)
|
|
282
|
-
* - [`ADD_DATA_ID`](../constants/default-settings.md#add_data_id)
|
|
283
|
-
* - [`EXPORT_IMAGE_ID`](../constants/default-settings.md#export_image_id)
|
|
284
|
-
* - [`EXPORT_DATA_ID`](../constants/default-settings.md#export_data_id)
|
|
285
|
-
* - [`ADD_MAP_STYLE_ID`](../constants/default-settings.md#add_map_style_id)
|
|
286
|
-
* @returns nextState
|
|
287
|
-
* @public
|
|
288
|
-
*/
|
|
289
|
-
var toggleModalUpdater = exports.toggleModalUpdater = function toggleModalUpdater(state, _ref2) {
|
|
290
|
-
var id = _ref2.payload;
|
|
291
|
-
return _objectSpread(_objectSpread({}, state), {}, {
|
|
292
|
-
currentModal: id
|
|
293
|
-
});
|
|
294
|
-
};
|
|
295
|
-
|
|
296
|
-
/**
|
|
297
|
-
* Hide and show side panel header dropdown, activated by clicking the share link on top of the side panel
|
|
298
|
-
* @memberof uiStateUpdaters
|
|
299
|
-
* @public
|
|
300
|
-
*/
|
|
301
|
-
var showExportDropdownUpdater = exports.showExportDropdownUpdater = function showExportDropdownUpdater(state, _ref3) {
|
|
302
|
-
var id = _ref3.payload;
|
|
303
|
-
return _objectSpread(_objectSpread({}, state), {}, {
|
|
304
|
-
visibleDropdown: id
|
|
305
|
-
});
|
|
306
|
-
};
|
|
307
|
-
|
|
308
|
-
/**
|
|
309
|
-
* Hide side panel header dropdown, activated by clicking the share link on top of the side panel
|
|
310
|
-
* @memberof uiStateUpdaters
|
|
311
|
-
* @public
|
|
312
|
-
*/
|
|
313
|
-
var hideExportDropdownUpdater = exports.hideExportDropdownUpdater = function hideExportDropdownUpdater(state) {
|
|
314
|
-
return _objectSpread(_objectSpread({}, state), {}, {
|
|
315
|
-
visibleDropdown: null
|
|
316
|
-
});
|
|
317
|
-
};
|
|
318
|
-
|
|
319
|
-
/**
|
|
320
|
-
* Toggle side panel close button on top left of the side panel
|
|
321
|
-
* @memberof uiStateUpdaters
|
|
322
|
-
* @public
|
|
323
|
-
*/
|
|
324
|
-
var toggleSidePanelCloseButtonUpdater = exports.toggleSidePanelCloseButtonUpdater = function toggleSidePanelCloseButtonUpdater(state, _ref4) {
|
|
325
|
-
var show = _ref4.payload.show;
|
|
326
|
-
return _objectSpread(_objectSpread({}, state), {}, {
|
|
327
|
-
isSidePanelCloseButtonVisible: show
|
|
328
|
-
});
|
|
329
|
-
};
|
|
330
|
-
|
|
331
|
-
/**
|
|
332
|
-
* Toggle active map control panel
|
|
333
|
-
* @memberof uiStateUpdaters
|
|
334
|
-
* @param state `uiState`
|
|
335
|
-
* @param action action
|
|
336
|
-
* @param action.payload map control panel id, one of the keys of: [`DEFAULT_MAP_CONTROLS`](#default_map_controls)
|
|
337
|
-
* @returns nextState
|
|
338
|
-
* @public
|
|
339
|
-
*/
|
|
340
|
-
var toggleMapControlUpdater = exports.toggleMapControlUpdater = function toggleMapControlUpdater(state, _ref5) {
|
|
341
|
-
var _state$mapControls$pa, _state$mapControls$dr;
|
|
342
|
-
var _ref5$payload = _ref5.payload,
|
|
343
|
-
panelId = _ref5$payload.panelId,
|
|
344
|
-
_ref5$payload$index = _ref5$payload.index,
|
|
345
|
-
index = _ref5$payload$index === void 0 ? 0 : _ref5$payload$index;
|
|
346
|
-
var updatedState = state;
|
|
347
|
-
// The effect panel and ai assistant panel can not be active at the same time
|
|
348
|
-
// so we need to deactivate the other panel when one is activated
|
|
349
|
-
var panelToDeactivate = panelId === _constants.MAP_CONTROLS.effect ? _constants.MAP_CONTROLS.aiAssistant : panelId === _constants.MAP_CONTROLS.aiAssistant ? _constants.MAP_CONTROLS.effect : null;
|
|
350
|
-
|
|
351
|
-
// To to toggle the mapDraw and mapLocal dropdowns
|
|
352
|
-
// We have to deactivate the other active dropdown
|
|
353
|
-
var dropdownToDeactivate = panelId === _constants.MAP_CONTROLS.mapDraw ? _constants.MAP_CONTROLS.mapLocale : panelId === _constants.MAP_CONTROLS.mapLocale ? _constants.MAP_CONTROLS.mapDraw : null;
|
|
354
|
-
|
|
355
|
-
// If we need to deactivate a competing panel and it's currently active
|
|
356
|
-
if (panelToDeactivate && (_state$mapControls$pa = state.mapControls[panelToDeactivate]) !== null && _state$mapControls$pa !== void 0 && _state$mapControls$pa.active) {
|
|
357
|
-
updatedState = _objectSpread(_objectSpread({}, state), {}, {
|
|
358
|
-
mapControls: _objectSpread(_objectSpread({}, updatedState.mapControls), {}, (0, _defineProperty2["default"])({}, panelToDeactivate, _objectSpread(_objectSpread({}, updatedState.mapControls[panelToDeactivate]), {}, {
|
|
359
|
-
active: false
|
|
360
|
-
})))
|
|
361
|
-
});
|
|
362
|
-
}
|
|
363
|
-
|
|
364
|
-
// If we need to deactivate a competing dropdown and it's currently active
|
|
365
|
-
if (dropdownToDeactivate && (_state$mapControls$dr = state.mapControls[dropdownToDeactivate]) !== null && _state$mapControls$dr !== void 0 && _state$mapControls$dr.active) {
|
|
366
|
-
updatedState = _objectSpread(_objectSpread({}, state), {}, {
|
|
367
|
-
mapControls: _objectSpread(_objectSpread({}, updatedState.mapControls), {}, (0, _defineProperty2["default"])({}, dropdownToDeactivate, _objectSpread(_objectSpread({}, updatedState.mapControls[dropdownToDeactivate]), {}, {
|
|
368
|
-
active: false
|
|
369
|
-
})))
|
|
370
|
-
});
|
|
371
|
-
}
|
|
372
|
-
return _objectSpread(_objectSpread({}, updatedState), {}, {
|
|
373
|
-
mapControls: _objectSpread(_objectSpread({}, updatedState.mapControls), {}, (0, _defineProperty2["default"])({}, panelId, _objectSpread(_objectSpread({}, updatedState.mapControls[panelId]), {}, {
|
|
374
|
-
active: !updatedState.mapControls[panelId].active,
|
|
375
|
-
activeMapIndex: index
|
|
376
|
-
})))
|
|
377
|
-
});
|
|
378
|
-
};
|
|
379
|
-
|
|
380
|
-
/**
|
|
381
|
-
* Toggle map control visibility
|
|
382
|
-
* @memberof uiStateUpdaters
|
|
383
|
-
* @param state `uiState`
|
|
384
|
-
* @param action action
|
|
385
|
-
* @param action.payload map control panel id, one of the keys of: [`DEFAULT_MAP_CONTROLS`](#default_map_controls)
|
|
386
|
-
* @returns nextState
|
|
387
|
-
* @public
|
|
388
|
-
*/
|
|
389
|
-
var setMapControlVisibilityUpdater = exports.setMapControlVisibilityUpdater = function setMapControlVisibilityUpdater(state, _ref6) {
|
|
390
|
-
var _state$mapControls;
|
|
391
|
-
var _ref6$payload = _ref6.payload,
|
|
392
|
-
panelId = _ref6$payload.panelId,
|
|
393
|
-
show = _ref6$payload.show;
|
|
394
|
-
if (!((_state$mapControls = state.mapControls) !== null && _state$mapControls !== void 0 && _state$mapControls[panelId])) {
|
|
395
|
-
return state;
|
|
396
|
-
}
|
|
397
|
-
return _objectSpread(_objectSpread({}, state), {}, {
|
|
398
|
-
mapControls: _objectSpread(_objectSpread({}, state.mapControls), {}, (0, _defineProperty2["default"])({}, panelId, _objectSpread(_objectSpread({}, state.mapControls[panelId]), {}, {
|
|
399
|
-
show: Boolean(show)
|
|
400
|
-
})))
|
|
401
|
-
});
|
|
402
|
-
};
|
|
403
|
-
|
|
404
|
-
/**
|
|
405
|
-
* Toggle map control settings
|
|
406
|
-
* @memberof uiStateUpdaters
|
|
407
|
-
* @param state `uiState`
|
|
408
|
-
* @param action action
|
|
409
|
-
* @param action.payload map control panel id, one of the keys of: [`DEFAULT_MAP_CONTROLS`](#default_map_controls)
|
|
410
|
-
* @returns nextState
|
|
411
|
-
* @public
|
|
412
|
-
*/
|
|
413
|
-
var setMapControlSettingsUpdater = exports.setMapControlSettingsUpdater = function setMapControlSettingsUpdater(state, _ref7) {
|
|
414
|
-
var _state$mapControls2;
|
|
415
|
-
var _ref7$payload = _ref7.payload,
|
|
416
|
-
panelId = _ref7$payload.panelId,
|
|
417
|
-
settings = _ref7$payload.settings;
|
|
418
|
-
var mapControl = (_state$mapControls2 = state.mapControls) === null || _state$mapControls2 === void 0 ? void 0 : _state$mapControls2[panelId];
|
|
419
|
-
if (!mapControl) {
|
|
420
|
-
return state;
|
|
421
|
-
}
|
|
422
|
-
return _objectSpread(_objectSpread({}, state), {}, {
|
|
423
|
-
mapControls: _objectSpread(_objectSpread({}, state.mapControls), {}, (0, _defineProperty2["default"])({}, panelId, _objectSpread(_objectSpread({}, mapControl), {}, {
|
|
424
|
-
settings: _objectSpread(_objectSpread({}, mapControl.settings), settings)
|
|
425
|
-
})))
|
|
426
|
-
});
|
|
427
|
-
};
|
|
428
|
-
|
|
429
|
-
/**
|
|
430
|
-
* Toggle active map control panel
|
|
431
|
-
* @memberof uiStateUpdaters
|
|
432
|
-
* @param state `uiState`
|
|
433
|
-
* @param action
|
|
434
|
-
* @param action.payload dataset id
|
|
435
|
-
* @returns nextState
|
|
436
|
-
* @public
|
|
437
|
-
*/
|
|
438
|
-
var openDeleteModalUpdater = exports.openDeleteModalUpdater = function openDeleteModalUpdater(state, _ref8) {
|
|
439
|
-
var datasetKeyToRemove = _ref8.payload;
|
|
440
|
-
return _objectSpread(_objectSpread({}, state), {}, {
|
|
441
|
-
currentModal: _constants.DELETE_DATA_ID,
|
|
442
|
-
datasetKeyToRemove: datasetKeyToRemove
|
|
443
|
-
});
|
|
444
|
-
};
|
|
445
|
-
|
|
446
|
-
/**
|
|
447
|
-
* Set `exportImage.legend` to `true` or `false`
|
|
448
|
-
* @memberof uiStateUpdaters
|
|
449
|
-
* @param state `uiState`
|
|
450
|
-
* @returns nextState
|
|
451
|
-
* @public
|
|
452
|
-
*/
|
|
453
|
-
var setExportImageSettingUpdater = exports.setExportImageSettingUpdater = function setExportImageSettingUpdater(state, _ref9) {
|
|
454
|
-
var newSetting = _ref9.payload;
|
|
455
|
-
var updated = _objectSpread(_objectSpread({}, state.exportImage), newSetting);
|
|
456
|
-
var imageSize = (0, _utils.calculateExportImageSize)(updated) || state.exportImage.imageSize;
|
|
457
|
-
return _objectSpread(_objectSpread({}, state), {}, {
|
|
458
|
-
exportImage: _objectSpread(_objectSpread({}, updated), {}, {
|
|
459
|
-
imageSize: imageSize
|
|
460
|
-
})
|
|
461
|
-
});
|
|
462
|
-
};
|
|
463
|
-
|
|
464
|
-
/**
|
|
465
|
-
* Set `exportImage.setExportImageDataUri` to a image dataUri
|
|
466
|
-
* @memberof uiStateUpdaters
|
|
467
|
-
* @param state `uiState`
|
|
468
|
-
* @param action
|
|
469
|
-
* @param action.payload export image data uri
|
|
470
|
-
* @returns nextState
|
|
471
|
-
* @public
|
|
472
|
-
*/
|
|
473
|
-
var setExportImageDataUriUpdater = exports.setExportImageDataUriUpdater = function setExportImageDataUriUpdater(state, _ref10) {
|
|
474
|
-
var dataUri = _ref10.payload;
|
|
475
|
-
if (dataUri === state.exportImage.imageDataUri) {
|
|
476
|
-
return state;
|
|
477
|
-
}
|
|
478
|
-
return _objectSpread(_objectSpread({}, state), {}, {
|
|
479
|
-
exportImage: _objectSpread(_objectSpread({}, state.exportImage), {}, {
|
|
480
|
-
processing: false,
|
|
481
|
-
imageDataUri: dataUri
|
|
482
|
-
})
|
|
483
|
-
});
|
|
484
|
-
};
|
|
485
|
-
|
|
486
|
-
/**
|
|
487
|
-
* @memberof uiStateUpdaters
|
|
488
|
-
* @public
|
|
489
|
-
*/
|
|
490
|
-
var setExportImageErrorUpdater = exports.setExportImageErrorUpdater = function setExportImageErrorUpdater(state, _ref11) {
|
|
491
|
-
var error = _ref11.payload;
|
|
492
|
-
return _objectSpread(_objectSpread({}, state), {}, {
|
|
493
|
-
exportImage: _objectSpread(_objectSpread({}, state.exportImage), {}, {
|
|
494
|
-
processing: false,
|
|
495
|
-
error: error
|
|
496
|
-
})
|
|
497
|
-
});
|
|
498
|
-
};
|
|
499
|
-
|
|
500
|
-
/**
|
|
501
|
-
* Delete cached export image
|
|
502
|
-
* @memberof uiStateUpdaters
|
|
503
|
-
* @public
|
|
504
|
-
*/
|
|
505
|
-
var cleanupExportImageUpdater = exports.cleanupExportImageUpdater = function cleanupExportImageUpdater(state) {
|
|
506
|
-
return _objectSpread(_objectSpread({}, state), {}, {
|
|
507
|
-
exportImage: _objectSpread(_objectSpread({}, state.exportImage), {}, {
|
|
508
|
-
exporting: false,
|
|
509
|
-
imageDataUri: '',
|
|
510
|
-
error: false,
|
|
511
|
-
processing: false,
|
|
512
|
-
center: false
|
|
513
|
-
})
|
|
514
|
-
});
|
|
515
|
-
};
|
|
516
|
-
|
|
517
|
-
/**
|
|
518
|
-
* Set `exportVideo` settings: mediaType, cameraPreset, fileName, resolution, durationMs
|
|
519
|
-
* @memberof uiStateUpdaters
|
|
520
|
-
* @param state `uiState`
|
|
521
|
-
* @param action
|
|
522
|
-
* @param action.payload new video export settings
|
|
523
|
-
* @returns nextState
|
|
524
|
-
* @public
|
|
525
|
-
*/
|
|
526
|
-
var setExportVideoSettingUpdater = exports.setExportVideoSettingUpdater = function setExportVideoSettingUpdater(state, _ref12) {
|
|
527
|
-
var newSetting = _ref12.payload;
|
|
528
|
-
return _objectSpread(_objectSpread({}, state), {}, {
|
|
529
|
-
exportVideo: _objectSpread(_objectSpread({}, state.exportVideo), newSetting)
|
|
530
|
-
});
|
|
531
|
-
};
|
|
532
|
-
|
|
533
|
-
/**
|
|
534
|
-
* Start image exporting flow
|
|
535
|
-
* @memberof uiStateUpdaters
|
|
536
|
-
* @param state
|
|
537
|
-
* @param options
|
|
538
|
-
* @returns {UiState}
|
|
539
|
-
* @public
|
|
540
|
-
*/
|
|
541
|
-
var startExportingImageUpdater = exports.startExportingImageUpdater = function startExportingImageUpdater(state, _ref13) {
|
|
542
|
-
var _ref13$payload = _ref13.payload,
|
|
543
|
-
options = _ref13$payload === void 0 ? {} : _ref13$payload;
|
|
544
|
-
var imageSettings = _objectSpread(_objectSpread({}, options), {}, {
|
|
545
|
-
exporting: true
|
|
546
|
-
});
|
|
547
|
-
return (0, _composerHelpers.compose_)([cleanupExportImageUpdater, (0, _composerHelpers.apply_)(setExportImageSettingUpdater, (0, _composerHelpers.payload_)(imageSettings))])(state);
|
|
548
|
-
};
|
|
549
|
-
|
|
550
|
-
/**
|
|
551
|
-
* Set selected dataset for export
|
|
552
|
-
* @memberof uiStateUpdaters
|
|
553
|
-
* @param state `uiState`
|
|
554
|
-
* @param action
|
|
555
|
-
* @param action.payload dataset id
|
|
556
|
-
* @returns nextState
|
|
557
|
-
* @public
|
|
558
|
-
*/
|
|
559
|
-
var setExportSelectedDatasetUpdater = exports.setExportSelectedDatasetUpdater = function setExportSelectedDatasetUpdater(state, _ref14) {
|
|
560
|
-
var dataset = _ref14.payload;
|
|
561
|
-
return _objectSpread(_objectSpread({}, state), {}, {
|
|
562
|
-
exportData: _objectSpread(_objectSpread({}, state.exportData), {}, {
|
|
563
|
-
selectedDataset: dataset
|
|
564
|
-
})
|
|
565
|
-
});
|
|
566
|
-
};
|
|
567
|
-
|
|
568
|
-
/**
|
|
569
|
-
* Set data format for exporting data
|
|
570
|
-
* @memberof uiStateUpdaters
|
|
571
|
-
* @param state `uiState`
|
|
572
|
-
* @param action
|
|
573
|
-
* @param action.payload one of `'text/csv'`
|
|
574
|
-
* @returns nextState
|
|
575
|
-
* @public
|
|
576
|
-
*/
|
|
577
|
-
var setExportDataTypeUpdater = exports.setExportDataTypeUpdater = function setExportDataTypeUpdater(state, _ref15) {
|
|
578
|
-
var dataType = _ref15.payload;
|
|
579
|
-
return _objectSpread(_objectSpread({}, state), {}, {
|
|
580
|
-
exportData: _objectSpread(_objectSpread({}, state.exportData), {}, {
|
|
581
|
-
dataType: dataType
|
|
582
|
-
})
|
|
583
|
-
});
|
|
584
|
-
};
|
|
585
|
-
|
|
586
|
-
/**
|
|
587
|
-
* Whether to export filtered data, `true` or `false`
|
|
588
|
-
* @memberof uiStateUpdaters
|
|
589
|
-
* @param state `uiState`
|
|
590
|
-
* @param action
|
|
591
|
-
* @param action.payload
|
|
592
|
-
* @returns nextState
|
|
593
|
-
* @public
|
|
594
|
-
*/
|
|
595
|
-
var setExportFilteredUpdater = exports.setExportFilteredUpdater = function setExportFilteredUpdater(state, _ref16) {
|
|
596
|
-
var filtered = _ref16.payload;
|
|
597
|
-
return _objectSpread(_objectSpread({}, state), {}, {
|
|
598
|
-
exportData: _objectSpread(_objectSpread({}, state.exportData), {}, {
|
|
599
|
-
filtered: filtered
|
|
600
|
-
})
|
|
601
|
-
});
|
|
602
|
-
};
|
|
603
|
-
|
|
604
|
-
/**
|
|
605
|
-
* Whether to including data in map config, toggle between `true` or `false`
|
|
606
|
-
* @memberof uiStateUpdaters
|
|
607
|
-
* @param state `uiState`
|
|
608
|
-
* @returns nextState
|
|
609
|
-
* @public
|
|
610
|
-
*/
|
|
611
|
-
var setExportDataUpdater = exports.setExportDataUpdater = function setExportDataUpdater(state) {
|
|
612
|
-
return _objectSpread(_objectSpread({}, state), {}, {
|
|
613
|
-
exportMap: _objectSpread(_objectSpread({}, state.exportMap), {}, (0, _defineProperty2["default"])({}, _constants.EXPORT_MAP_FORMATS.JSON, _objectSpread(_objectSpread({}, state.exportMap[_constants.EXPORT_MAP_FORMATS.JSON]), {}, {
|
|
614
|
-
hasData: !state.exportMap[_constants.EXPORT_MAP_FORMATS.JSON].hasData
|
|
615
|
-
})))
|
|
616
|
-
});
|
|
617
|
-
};
|
|
618
|
-
|
|
619
|
-
/**
|
|
620
|
-
* whether to export a mapbox access to HTML single page
|
|
621
|
-
* @param state - `uiState`
|
|
622
|
-
* @param action
|
|
623
|
-
* @param action.payload
|
|
624
|
-
* @returns nextState
|
|
625
|
-
* @public
|
|
626
|
-
*/
|
|
627
|
-
var setUserMapboxAccessTokenUpdater = exports.setUserMapboxAccessTokenUpdater = function setUserMapboxAccessTokenUpdater(state, _ref17) {
|
|
628
|
-
var userMapboxToken = _ref17.payload;
|
|
629
|
-
return _objectSpread(_objectSpread({}, state), {}, {
|
|
630
|
-
exportMap: _objectSpread(_objectSpread({}, state.exportMap), {}, (0, _defineProperty2["default"])({}, _constants.EXPORT_MAP_FORMATS.HTML, _objectSpread(_objectSpread({}, state.exportMap[_constants.EXPORT_MAP_FORMATS.HTML]), {}, {
|
|
631
|
-
userMapboxToken: userMapboxToken
|
|
632
|
-
})))
|
|
633
|
-
});
|
|
634
|
-
};
|
|
635
|
-
|
|
636
|
-
/**
|
|
637
|
-
* Sets the export map format
|
|
638
|
-
* @param state - `uiState`
|
|
639
|
-
* @param action
|
|
640
|
-
* @param action.payload format to use to export the map into
|
|
641
|
-
* @return nextState
|
|
642
|
-
*/
|
|
643
|
-
var setExportMapFormatUpdater = exports.setExportMapFormatUpdater = function setExportMapFormatUpdater(state, _ref18) {
|
|
644
|
-
var format = _ref18.payload;
|
|
645
|
-
return _objectSpread(_objectSpread({}, state), {}, {
|
|
646
|
-
exportMap: _objectSpread(_objectSpread({}, state.exportMap), {}, {
|
|
647
|
-
// @ts-expect-error
|
|
648
|
-
format: format
|
|
649
|
-
})
|
|
650
|
-
});
|
|
651
|
-
};
|
|
652
|
-
|
|
653
|
-
/**
|
|
654
|
-
* Set the export html map mode
|
|
655
|
-
* @param state - `uiState`
|
|
656
|
-
* @param action
|
|
657
|
-
* @param action.payload to be set (available modes: EXPORT_HTML_MAP_MODES)
|
|
658
|
-
* @return nextState
|
|
659
|
-
*/
|
|
660
|
-
var setExportMapHTMLModeUpdater = exports.setExportMapHTMLModeUpdater = function setExportMapHTMLModeUpdater(state, _ref19) {
|
|
661
|
-
var mode = _ref19.payload;
|
|
662
|
-
return _objectSpread(_objectSpread({}, state), {}, {
|
|
663
|
-
exportMap: _objectSpread(_objectSpread({}, state.exportMap), {}, (0, _defineProperty2["default"])({}, _constants.EXPORT_MAP_FORMATS.HTML, _objectSpread(_objectSpread({}, state.exportMap[_constants.EXPORT_MAP_FORMATS.HTML]), {}, {
|
|
664
|
-
mode: mode
|
|
665
|
-
})))
|
|
666
|
-
});
|
|
667
|
-
};
|
|
668
|
-
|
|
669
|
-
/**
|
|
670
|
-
* Adds a new notification.
|
|
671
|
-
* Updates a notification in case of matching ids.
|
|
672
|
-
* @memberof uiStateUpdaters
|
|
673
|
-
* @param state `uiState`
|
|
674
|
-
* @param action
|
|
675
|
-
* @param action.payload Params of a notification
|
|
676
|
-
* @returns nextState
|
|
677
|
-
* @public
|
|
678
|
-
*/
|
|
679
|
-
var addNotificationUpdater = exports.addNotificationUpdater = function addNotificationUpdater(state, _ref20) {
|
|
680
|
-
var payload = _ref20.payload;
|
|
681
|
-
var oldNotifications = state.notifications || [];
|
|
682
|
-
// @ts-expect-error
|
|
683
|
-
var payloadId = payload === null || payload === void 0 ? void 0 : payload.id;
|
|
684
|
-
var notificationToUpdate = payloadId ? oldNotifications.find(function (n) {
|
|
685
|
-
return n.id === payloadId;
|
|
686
|
-
}) : null;
|
|
687
|
-
var notifications;
|
|
688
|
-
if (notificationToUpdate) {
|
|
689
|
-
notifications = oldNotifications.map(function (n) {
|
|
690
|
-
return n.id === payloadId ? (0, _utils.createNotification)(_objectSpread(_objectSpread({}, payload), {}, {
|
|
691
|
-
count: n.count + 1
|
|
692
|
-
})) : n;
|
|
693
|
-
});
|
|
694
|
-
} else {
|
|
695
|
-
notifications = [].concat((0, _toConsumableArray2["default"])(oldNotifications), [(0, _utils.createNotification)(payload)]);
|
|
696
|
-
}
|
|
697
|
-
return _objectSpread(_objectSpread({}, state), {}, {
|
|
698
|
-
notifications: notifications
|
|
699
|
-
});
|
|
700
|
-
};
|
|
701
|
-
|
|
702
|
-
/**
|
|
703
|
-
* Remove a notification
|
|
704
|
-
* @memberof uiStateUpdaters
|
|
705
|
-
* @param state `uiState`
|
|
706
|
-
* @param action
|
|
707
|
-
* @param action.payload id of the notification to be removed
|
|
708
|
-
* @returns nextState
|
|
709
|
-
* @public
|
|
710
|
-
*/
|
|
711
|
-
var removeNotificationUpdater = exports.removeNotificationUpdater = function removeNotificationUpdater(state, _ref21) {
|
|
712
|
-
var id = _ref21.payload;
|
|
713
|
-
return _objectSpread(_objectSpread({}, state), {}, {
|
|
714
|
-
notifications: state.notifications.filter(function (n) {
|
|
715
|
-
return n.id !== id;
|
|
716
|
-
})
|
|
717
|
-
});
|
|
718
|
-
};
|
|
719
|
-
|
|
720
|
-
/**
|
|
721
|
-
* Fired when file loading begin
|
|
722
|
-
* @memberof uiStateUpdaters
|
|
723
|
-
* @param state `uiState`
|
|
724
|
-
* @returns nextState
|
|
725
|
-
* @public
|
|
726
|
-
*/
|
|
727
|
-
var loadFilesUpdater = exports.loadFilesUpdater = function loadFilesUpdater(state) {
|
|
728
|
-
return _objectSpread(_objectSpread({}, state), {}, {
|
|
729
|
-
loadFiles: _objectSpread(_objectSpread({}, state.loadFiles), {}, {
|
|
730
|
-
fileLoading: true
|
|
731
|
-
})
|
|
732
|
-
});
|
|
733
|
-
};
|
|
734
|
-
|
|
735
|
-
/**
|
|
736
|
-
* Handles loading file success and set fileLoading property to false
|
|
737
|
-
* @memberof uiStateUpdaters
|
|
738
|
-
* @param state `uiState`
|
|
739
|
-
* @returns nextState
|
|
740
|
-
*/
|
|
741
|
-
var loadFilesSuccessUpdater = exports.loadFilesSuccessUpdater = function loadFilesSuccessUpdater(state) {
|
|
742
|
-
return _objectSpread(_objectSpread({}, state), {}, {
|
|
743
|
-
loadFiles: _objectSpread(_objectSpread({}, state.loadFiles), {}, {
|
|
744
|
-
fileLoading: false
|
|
745
|
-
})
|
|
746
|
-
});
|
|
747
|
-
};
|
|
748
|
-
|
|
749
|
-
/**
|
|
750
|
-
* Handles load file error and set fileLoading property to false
|
|
751
|
-
* @memberof uiStateUpdaters
|
|
752
|
-
* @param state
|
|
753
|
-
* @param action
|
|
754
|
-
* @param action.error
|
|
755
|
-
* @returns nextState
|
|
756
|
-
* @public
|
|
757
|
-
*/
|
|
758
|
-
var loadFilesErrUpdater = exports.loadFilesErrUpdater = function loadFilesErrUpdater(state, _ref22) {
|
|
759
|
-
var error = _ref22.error;
|
|
760
|
-
return addNotificationUpdater(_objectSpread(_objectSpread({}, state), {}, {
|
|
761
|
-
loadFiles: _objectSpread(_objectSpread({}, state.loadFiles), {}, {
|
|
762
|
-
fileLoading: false
|
|
763
|
-
})
|
|
764
|
-
}), {
|
|
765
|
-
payload: (0, _utils.errorNotification)({
|
|
766
|
-
message: (error || {}).message || 'Failed to upload files',
|
|
767
|
-
topic: _constants.DEFAULT_NOTIFICATION_TOPICS.global
|
|
768
|
-
})
|
|
769
|
-
});
|
|
770
|
-
};
|
|
771
|
-
|
|
772
|
-
/**
|
|
773
|
-
* Handles toggle map split and reset all map control index to 0
|
|
774
|
-
* @memberof uiStateUpdaters
|
|
775
|
-
* @param state
|
|
776
|
-
* @returns nextState
|
|
777
|
-
* @public
|
|
778
|
-
*/
|
|
779
|
-
var toggleSplitMapUpdater = exports.toggleSplitMapUpdater = function toggleSplitMapUpdater(state) {
|
|
780
|
-
return _objectSpread(_objectSpread({}, state), {}, {
|
|
781
|
-
mapControls: Object.entries(state.mapControls).reduce(function (acc, entry) {
|
|
782
|
-
return _objectSpread(_objectSpread({}, acc), {}, (0, _defineProperty2["default"])({}, entry[0], _objectSpread(_objectSpread({}, entry[1]), {}, {
|
|
783
|
-
activeMapIndex: 0
|
|
784
|
-
})));
|
|
785
|
-
}, {})
|
|
786
|
-
});
|
|
787
|
-
};
|
|
788
|
-
|
|
789
|
-
/**
|
|
790
|
-
* Toggle modal data
|
|
791
|
-
* @memberof uiStateUpdaters
|
|
792
|
-
* @param state
|
|
793
|
-
* @returns nextState
|
|
794
|
-
* @public
|
|
795
|
-
*/
|
|
796
|
-
var showDatasetTableUpdater = exports.showDatasetTableUpdater = function showDatasetTableUpdater(state) {
|
|
797
|
-
return toggleModalUpdater(state, {
|
|
798
|
-
payload: _constants.DATA_TABLE_ID
|
|
799
|
-
});
|
|
800
|
-
};
|
|
801
|
-
|
|
802
|
-
/**
|
|
803
|
-
* Set the locale of the UI
|
|
804
|
-
* @memberof uiStateUpdaters
|
|
805
|
-
* @param state `uiState`
|
|
806
|
-
* @param action
|
|
807
|
-
* @param action.payload
|
|
808
|
-
* @param action.payload.locale locale
|
|
809
|
-
* @returns nextState
|
|
810
|
-
* @public
|
|
811
|
-
*/
|
|
812
|
-
var setLocaleUpdater = exports.setLocaleUpdater = function setLocaleUpdater(state, _ref23) {
|
|
813
|
-
var locale = _ref23.payload.locale;
|
|
814
|
-
return _objectSpread(_objectSpread({}, state), {}, {
|
|
815
|
-
locale: locale
|
|
816
|
-
});
|
|
817
|
-
};
|
|
818
|
-
|
|
819
|
-
/**
|
|
820
|
-
* Toggle layer panel list view
|
|
821
|
-
* @memberof uiStateUpdaters
|
|
822
|
-
* @param state `uiState`
|
|
823
|
-
* @param action
|
|
824
|
-
* @param action.payload layer panel listView value. Can be 'list' or 'sortByDataset'
|
|
825
|
-
* @returns nextState
|
|
826
|
-
* @public
|
|
827
|
-
*/
|
|
828
|
-
var togglePanelListViewUpdater = exports.togglePanelListViewUpdater = function togglePanelListViewUpdater(state, _ref24) {
|
|
829
|
-
var _ref24$payload = _ref24.payload,
|
|
830
|
-
panelId = _ref24$payload.panelId,
|
|
831
|
-
listView = _ref24$payload.listView;
|
|
832
|
-
var stateProp = panelId === 'layer' ? 'layerPanelListView' : panelId === 'filter' ? 'filterPanelListView' : null;
|
|
833
|
-
if (!stateProp || state[stateProp] === listView) {
|
|
834
|
-
return state;
|
|
835
|
-
}
|
|
836
|
-
return _objectSpread(_objectSpread({}, state), {}, (0, _defineProperty2["default"])({}, stateProp, listView));
|
|
837
|
-
};
|
|
838
|
-
|
|
839
|
-
/**
|
|
840
|
-
* Merge received ui state config when loading a saved map
|
|
841
|
-
* @memberof uiStateUpdaters
|
|
842
|
-
* @param state `uiState`
|
|
843
|
-
* @param action
|
|
844
|
-
* @param action.payload saved map config `{mapStyle, visState, mapState, uiState}`
|
|
845
|
-
* @returns nextState
|
|
846
|
-
* @public
|
|
847
|
-
*/
|
|
848
|
-
var receiveMapConfigUpdater = exports.receiveMapConfigUpdater = function receiveMapConfigUpdater(state, _ref25) {
|
|
849
|
-
var _uiState$mapControls, _uiState$mapControls2;
|
|
850
|
-
var config = _ref25.payload.config;
|
|
851
|
-
var _ref26 = config || {},
|
|
852
|
-
uiState = _ref26.uiState;
|
|
853
|
-
if (!uiState) {
|
|
854
|
-
return state;
|
|
855
|
-
}
|
|
856
|
-
var newState = state;
|
|
857
|
-
if ((_uiState$mapControls = uiState.mapControls) !== null && _uiState$mapControls !== void 0 && (_uiState$mapControls = _uiState$mapControls.mapLegend) !== null && _uiState$mapControls !== void 0 && _uiState$mapControls.active) {
|
|
858
|
-
var currentLegend = newState.mapControls.mapLegend;
|
|
859
|
-
newState = _objectSpread(_objectSpread({}, newState), {}, {
|
|
860
|
-
mapControls: _objectSpread(_objectSpread({}, newState.mapControls), {}, {
|
|
861
|
-
mapLegend: _objectSpread(_objectSpread({
|
|
862
|
-
show: true
|
|
863
|
-
}, currentLegend), {}, {
|
|
864
|
-
active: true,
|
|
865
|
-
activeMapIndex: 0
|
|
866
|
-
})
|
|
867
|
-
})
|
|
868
|
-
});
|
|
869
|
-
}
|
|
870
|
-
if ((_uiState$mapControls2 = uiState.mapControls) !== null && _uiState$mapControls2 !== void 0 && (_uiState$mapControls2 = _uiState$mapControls2.mapLegend) !== null && _uiState$mapControls2 !== void 0 && _uiState$mapControls2.settings) {
|
|
871
|
-
newState = setMapControlSettingsUpdater(newState, {
|
|
872
|
-
payload: {
|
|
873
|
-
panelId: 'mapLegend',
|
|
874
|
-
settings: uiState.mapControls.mapLegend.settings
|
|
875
|
-
}
|
|
876
|
-
});
|
|
877
|
-
}
|
|
878
|
-
if (uiState.locale) {
|
|
879
|
-
newState = setLocaleUpdater(newState, {
|
|
880
|
-
payload: {
|
|
881
|
-
locale: uiState.locale
|
|
882
|
-
}
|
|
883
|
-
});
|
|
884
|
-
}
|
|
885
|
-
return newState;
|
|
886
|
-
};
|
|
887
|
-
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJfY29uc3RhbnRzIiwicmVxdWlyZSIsIl9sb2NhbGl6YXRpb24iLCJfdXRpbHMiLCJfY29tcG9zZXJIZWxwZXJzIiwib3duS2V5cyIsImUiLCJyIiwidCIsIk9iamVjdCIsImtleXMiLCJnZXRPd25Qcm9wZXJ0eVN5bWJvbHMiLCJvIiwiZmlsdGVyIiwiZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yIiwiZW51bWVyYWJsZSIsInB1c2giLCJhcHBseSIsIl9vYmplY3RTcHJlYWQiLCJhcmd1bWVudHMiLCJsZW5ndGgiLCJmb3JFYWNoIiwiX2RlZmluZVByb3BlcnR5MiIsImdldE93blByb3BlcnR5RGVzY3JpcHRvcnMiLCJkZWZpbmVQcm9wZXJ0aWVzIiwiZGVmaW5lUHJvcGVydHkiLCJERUZBVUxUX0FDVElWRV9TSURFX1BBTkVMIiwiZXhwb3J0cyIsIkRFRkFVTFRfTU9EQUwiLCJBRERfREFUQV9JRCIsInVpU3RhdGVVcGRhdGVycyIsIkRFRkFVTFRfTUFQX0NPTlRST0xTX0ZFQVRVUkVTIiwic2hvdyIsImFjdGl2ZSIsImRpc2FibGVDbG9zZSIsImFjdGl2ZU1hcEluZGV4IiwiREVGQVVMVF9NQVBfTEVHRU5EX0NPTlRST0wiLCJkaXNhYmxlRWRpdCIsIkRFRkFVTFRfTUFQX0NPTlRST0xTIiwiTUFQX0NPTlRST0xTIiwicmVkdWNlIiwiZmluYWwiLCJjdXJyZW50IiwibWFwTGVnZW5kIiwiREVGQVVMVF9FWFBPUlRfSU1BR0UiLCJyYXRpbyIsIkVYUE9SVF9JTUdfUkFUSU9TIiwiU0NSRUVOIiwicmVzb2x1dGlvbiIsIlJFU09MVVRJT05TIiwiT05FX1giLCJsZWdlbmQiLCJtYXBIIiwibWFwVyIsImltYWdlU2l6ZSIsInpvb21PZmZzZXQiLCJzY2FsZSIsImltYWdlVyIsImltYWdlSCIsImNlbnRlciIsImltYWdlRGF0YVVyaSIsImV4cG9ydGluZyIsInByb2Nlc3NpbmciLCJlcnJvciIsImVzY2FwZVhodG1sRm9yV2VicGFjayIsImdldEFwcGxpY2F0aW9uQ29uZmlnIiwiREVGQVVMVF9MT0FEX0ZJTEVTIiwiZmlsZUxvYWRpbmciLCJERUZBVUxUX0VYUE9SVF9EQVRBIiwic2VsZWN0ZWREYXRhc2V0IiwiZGF0YVR5cGUiLCJFWFBPUlRfREFUQV9UWVBFIiwiQ1NWIiwiZmlsdGVyZWQiLCJERUZBVUxUX05PVElGSUNBVElPTlMiLCJERUZBVUxUX0VYUE9SVF9IVE1MIiwiZXhwb3J0TWFwYm94QWNjZXNzVG9rZW4iLCJ1c2VyTWFwYm94VG9rZW4iLCJtb2RlIiwiRVhQT1JUX0hUTUxfTUFQX01PREVTIiwiUkVBRCIsIkRFRkFVTFRfRVhQT1JUX0pTT04iLCJoYXNEYXRhIiwiREVGQVVMVF9FWFBPUlRfTUFQIiwiRVhQT1JUX01BUF9GT1JNQVRTIiwiSFRNTCIsIkpTT04iLCJERUZBVUxUX0VYUE9SVF9WSURFTyIsIm1lZGlhVHlwZSIsImNhbWVyYVByZXNldCIsImZpbGVOYW1lIiwiZHVyYXRpb25NcyIsIklOSVRJQUxfVUlfU1RBVEUiLCJyZWFkT25seSIsImFjdGl2ZVNpZGVQYW5lbCIsImN1cnJlbnRNb2RhbCIsImRhdGFzZXRLZXlUb1JlbW92ZSIsInZpc2libGVEcm9wZG93biIsImV4cG9ydEltYWdlIiwiZXhwb3J0RGF0YSIsImV4cG9ydE1hcCIsImV4cG9ydFZpZGVvIiwibWFwQ29udHJvbHMiLCJub3RpZmljYXRpb25zIiwibG9hZEZpbGVzIiwibG9jYWxlIiwiTE9DQUxFX0NPREVTIiwiZW4iLCJsYXllclBhbmVsTGlzdFZpZXciLCJmaWx0ZXJQYW5lbExpc3RWaWV3IiwiaXNTaWRlUGFuZWxDbG9zZUJ1dHRvblZpc2libGUiLCJpbml0VWlTdGF0ZVVwZGF0ZXIiLCJzdGF0ZSIsImFjdGlvbiIsInBheWxvYWQiLCJpbml0aWFsVWlTdGF0ZSIsInRvZ2dsZVNpZGVQYW5lbFVwZGF0ZXIiLCJfcmVmIiwiaWQiLCJ0b2dnbGVNb2RhbFVwZGF0ZXIiLCJfcmVmMiIsInNob3dFeHBvcnREcm9wZG93blVwZGF0ZXIiLCJfcmVmMyIsImhpZGVFeHBvcnREcm9wZG93blVwZGF0ZXIiLCJ0b2dnbGVTaWRlUGFuZWxDbG9zZUJ1dHRvblVwZGF0ZXIiLCJfcmVmNCIsInRvZ2dsZU1hcENvbnRyb2xVcGRhdGVyIiwiX3JlZjUiLCJfc3RhdGUkbWFwQ29udHJvbHMkcGEiLCJfc3RhdGUkbWFwQ29udHJvbHMkZHIiLCJfcmVmNSRwYXlsb2FkIiwicGFuZWxJZCIsIl9yZWY1JHBheWxvYWQkaW5kZXgiLCJpbmRleCIsInVwZGF0ZWRTdGF0ZSIsInBhbmVsVG9EZWFjdGl2YXRlIiwiZWZmZWN0IiwiYWlBc3Npc3RhbnQiLCJkcm9wZG93blRvRGVhY3RpdmF0ZSIsIm1hcERyYXciLCJtYXBMb2NhbGUiLCJzZXRNYXBDb250cm9sVmlzaWJpbGl0eVVwZGF0ZXIiLCJfcmVmNiIsIl9zdGF0ZSRtYXBDb250cm9scyIsIl9yZWY2JHBheWxvYWQiLCJCb29sZWFuIiwic2V0TWFwQ29udHJvbFNldHRpbmdzVXBkYXRlciIsIl9yZWY3IiwiX3N0YXRlJG1hcENvbnRyb2xzMiIsIl9yZWY3JHBheWxvYWQiLCJzZXR0aW5ncyIsIm1hcENvbnRyb2wiLCJvcGVuRGVsZXRlTW9kYWxVcGRhdGVyIiwiX3JlZjgiLCJERUxFVEVfREFUQV9JRCIsInNldEV4cG9ydEltYWdlU2V0dGluZ1VwZGF0ZXIiLCJfcmVmOSIsIm5ld1NldHRpbmciLCJ1cGRhdGVkIiwiY2FsY3VsYXRlRXhwb3J0SW1hZ2VTaXplIiwic2V0RXhwb3J0SW1hZ2VEYXRhVXJpVXBkYXRlciIsIl9yZWYxMCIsImRhdGFVcmkiLCJzZXRFeHBvcnRJbWFnZUVycm9yVXBkYXRlciIsIl9yZWYxMSIsImNsZWFudXBFeHBvcnRJbWFnZVVwZGF0ZXIiLCJzZXRFeHBvcnRWaWRlb1NldHRpbmdVcGRhdGVyIiwiX3JlZjEyIiwic3RhcnRFeHBvcnRpbmdJbWFnZVVwZGF0ZXIiLCJfcmVmMTMiLCJfcmVmMTMkcGF5bG9hZCIsIm9wdGlvbnMiLCJpbWFnZVNldHRpbmdzIiwiY29tcG9zZV8iLCJhcHBseV8iLCJwYXlsb2FkXyIsInNldEV4cG9ydFNlbGVjdGVkRGF0YXNldFVwZGF0ZXIiLCJfcmVmMTQiLCJkYXRhc2V0Iiwic2V0RXhwb3J0RGF0YVR5cGVVcGRhdGVyIiwiX3JlZjE1Iiwic2V0RXhwb3J0RmlsdGVyZWRVcGRhdGVyIiwiX3JlZjE2Iiwic2V0RXhwb3J0RGF0YVVwZGF0ZXIiLCJzZXRVc2VyTWFwYm94QWNjZXNzVG9rZW5VcGRhdGVyIiwiX3JlZjE3Iiwic2V0RXhwb3J0TWFwRm9ybWF0VXBkYXRlciIsIl9yZWYxOCIsImZvcm1hdCIsInNldEV4cG9ydE1hcEhUTUxNb2RlVXBkYXRlciIsIl9yZWYxOSIsImFkZE5vdGlmaWNhdGlvblVwZGF0ZXIiLCJfcmVmMjAiLCJvbGROb3RpZmljYXRpb25zIiwicGF5bG9hZElkIiwibm90aWZpY2F0aW9uVG9VcGRhdGUiLCJmaW5kIiwibiIsIm1hcCIsImNyZWF0ZU5vdGlmaWNhdGlvbiIsImNvdW50IiwiY29uY2F0IiwiX3RvQ29uc3VtYWJsZUFycmF5MiIsInJlbW92ZU5vdGlmaWNhdGlvblVwZGF0ZXIiLCJfcmVmMjEiLCJsb2FkRmlsZXNVcGRhdGVyIiwibG9hZEZpbGVzU3VjY2Vzc1VwZGF0ZXIiLCJsb2FkRmlsZXNFcnJVcGRhdGVyIiwiX3JlZjIyIiwiZXJyb3JOb3RpZmljYXRpb24iLCJtZXNzYWdlIiwidG9waWMiLCJERUZBVUxUX05PVElGSUNBVElPTl9UT1BJQ1MiLCJnbG9iYWwiLCJ0b2dnbGVTcGxpdE1hcFVwZGF0ZXIiLCJlbnRyaWVzIiwiYWNjIiwiZW50cnkiLCJzaG93RGF0YXNldFRhYmxlVXBkYXRlciIsIkRBVEFfVEFCTEVfSUQiLCJzZXRMb2NhbGVVcGRhdGVyIiwiX3JlZjIzIiwidG9nZ2xlUGFuZWxMaXN0Vmlld1VwZGF0ZXIiLCJfcmVmMjQiLCJfcmVmMjQkcGF5bG9hZCIsImxpc3RWaWV3Iiwic3RhdGVQcm9wIiwicmVjZWl2ZU1hcENvbmZpZ1VwZGF0ZXIiLCJfcmVmMjUiLCJfdWlTdGF0ZSRtYXBDb250cm9scyIsIl91aVN0YXRlJG1hcENvbnRyb2xzMiIsImNvbmZpZyIsIl9yZWYyNiIsInVpU3RhdGUiLCJuZXdTdGF0ZSIsImN1cnJlbnRMZWdlbmQiXSwic291cmNlcyI6WyIuLi9zcmMvdWktc3RhdGUtdXBkYXRlcnMudHMiXSwic291cmNlc0NvbnRlbnQiOlsiLy8gU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IE1JVFxuLy8gQ29weXJpZ2h0IGNvbnRyaWJ1dG9ycyB0byB0aGUga2VwbGVyLmdsIHByb2plY3RcblxuaW1wb3J0IHtcbiAgQUREX0RBVEFfSUQsXG4gIERBVEFfVEFCTEVfSUQsXG4gIERFRkFVTFRfTk9USUZJQ0FUSU9OX1RPUElDUyxcbiAgREVMRVRFX0RBVEFfSUQsXG4gIEVYUE9SVF9EQVRBX1RZUEUsXG4gIEVYUE9SVF9IVE1MX01BUF9NT0RFUyxcbiAgRVhQT1JUX0lNR19SQVRJT1MsXG4gIEVYUE9SVF9NQVBfRk9STUFUUyxcbiAgUkVTT0xVVElPTlMsXG4gIE1BUF9DT05UUk9MU1xufSBmcm9tICdAa2VwbGVyLmdsL2NvbnN0YW50cyc7XG5pbXBvcnQge0xPQ0FMRV9DT0RFU30gZnJvbSAnQGtlcGxlci5nbC9sb2NhbGl6YXRpb24nO1xuaW1wb3J0IHtcbiAgY3JlYXRlTm90aWZpY2F0aW9uLFxuICBlcnJvck5vdGlmaWNhdGlvbixcbiAgY2FsY3VsYXRlRXhwb3J0SW1hZ2VTaXplLFxuICBnZXRBcHBsaWNhdGlvbkNvbmZpZ1xufSBmcm9tICdAa2VwbGVyLmdsL3V0aWxzJztcbmltcG9ydCB7cGF5bG9hZF8sIGFwcGx5XywgY29tcG9zZV99IGZyb20gJy4vY29tcG9zZXItaGVscGVycyc7XG5cbmltcG9ydCB7XG4gIEFjdGlvblR5cGVzLFxuICBLZXBsZXJHbEluaXRQYXlsb2FkLFxuICBMb2FkRmlsZXNFcnJVcGRhdGVyQWN0aW9uLFxuICBSZWNlaXZlTWFwQ29uZmlnUGF5bG9hZCxcbiAgVUlTdGF0ZUFjdGlvbnNcbn0gZnJvbSAnQGtlcGxlci5nbC9hY3Rpb25zJztcbmltcG9ydCB7XG4gIEV4cG9ydERhdGEsXG4gIEV4cG9ydEh0bWwsXG4gIEV4cG9ydEpzb24sXG4gIEV4cG9ydE1hcCxcbiAgRXhwb3J0SW1hZ2UsXG4gIEV4cG9ydFZpZGVvLFxuICBNYXBDb250cm9sSXRlbSxcbiAgTWFwQ29udHJvbHMsXG4gIFVpU3RhdGVcbn0gZnJvbSAnQGtlcGxlci5nbC90eXBlcyc7XG5cbmV4cG9ydCBjb25zdCBERUZBVUxUX0FDVElWRV9TSURFX1BBTkVMID0gJ2xheWVyJztcbmV4cG9ydCBjb25zdCBERUZBVUxUX01PREFMID0gQUREX0RBVEFfSUQ7XG5cbi8qKlxuICogVXBkYXRlcnMgZm9yIGB1aVN0YXRlYCByZWR1Y2VyLiBDYW4gYmUgdXNlZCBpbiB5b3VyIHJvb3QgcmVkdWNlciB0byBkaXJlY3RseSBtb2RpZnkga2VwbGVyLmdsJ3Mgc3RhdGUuXG4gKiBSZWFkIG1vcmUgYWJvdXQgW1VzaW5nIHVwZGF0ZXJzXSguLi9hZHZhbmNlZC11c2FnZS91c2luZy11cGRhdGVycy5tZClcbiAqXG4gKiBAcHVibGljXG4gKiBAZXhhbXBsZVxuICpcbiAqIGltcG9ydCBrZXBsZXJHbFJlZHVjZXIsIHt1aVN0YXRlVXBkYXRlcnN9IGZyb20gJ0BrZXBsZXIuZ2wvcmVkdWNlcnMnO1xuICogLy8gUm9vdCBSZWR1Y2VyXG4gKiBjb25zdCByZWR1Y2VycyA9IGNvbWJpbmVSZWR1Y2Vycyh7XG4gKiAga2VwbGVyR2w6IGtlcGxlckdsUmVkdWNlcixcbiAqICBhcHA6IGFwcFJlZHVjZXJcbiAqIH0pO1xuICpcbiAqIGNvbnN0IGNvbXBvc2VkUmVkdWNlciA9IChzdGF0ZSwgYWN0aW9uKSA9PiB7XG4gKiAgc3dpdGNoIChhY3Rpb24udHlwZSkge1xuICogICAgLy8gY2xpY2sgYnV0dG9uIHRvIGNsb3NlIHNpZGUgcGFuZWxcbiAqICAgIGNhc2UgJ0NMSUNLX0JVVFRPTic6XG4gKiAgICAgIHJldHVybiB7XG4gKiAgICAgICAgLi4uc3RhdGUsXG4gKiAgICAgICAga2VwbGVyR2w6IHtcbiAqICAgICAgICAgIC4uLnN0YXRlLmtlcGxlckdsLFxuICogICAgICAgICAgZm9vOiB7XG4gKiAgICAgICAgICAgICAuLi5zdGF0ZS5rZXBsZXJHbC5mb28sXG4gKiAgICAgICAgICAgICB1aVN0YXRlOiB1aVN0YXRlVXBkYXRlcnMudG9nZ2xlU2lkZVBhbmVsVXBkYXRlcihcbiAqICAgICAgICAgICAgICAgdWlTdGF0ZSwge3BheWxvYWQ6IG51bGx9XG4gKiAgICAgICAgICAgICApXG4gKiAgICAgICAgICB9XG4gKiAgICAgICAgfVxuICogICAgICB9O1xuICogIH1cbiAqICByZXR1cm4gcmVkdWNlcnMoc3RhdGUsIGFjdGlvbik7XG4gKiB9O1xuICpcbiAqIGV4cG9ydCBkZWZhdWx0IGNvbXBvc2VkUmVkdWNlcjtcbiAqL1xuLyogZXNsaW50LWRpc2FibGUgQHR5cGVzY3JpcHQtZXNsaW50L25vLXVudXNlZC12YXJzICovXG4vLyBAdHMtaWdub3JlXG5jb25zdCB1aVN0YXRlVXBkYXRlcnMgPSBudWxsO1xuLyogZXNsaW50LWVuYWJsZSBAdHlwZXNjcmlwdC1lc2xpbnQvbm8tdW51c2VkLXZhcnMgKi9cblxuY29uc3QgREVGQVVMVF9NQVBfQ09OVFJPTFNfRkVBVFVSRVM6IE1hcENvbnRyb2xJdGVtID0ge1xuICBzaG93OiB0cnVlLFxuICBhY3RpdmU6IGZhbHNlLFxuICBkaXNhYmxlQ2xvc2U6IGZhbHNlLFxuICAvLyBkZWZpbmVzIHdoaWNoIG1hcCBpbmRleCB1c2VycyBhcmUgaW50ZXJhY3Rpbmcgd2l0aCAodGhyb3VnaCBtYXAgY29udHJvbHMpXG4gIGFjdGl2ZU1hcEluZGV4OiAwXG59O1xuXG5jb25zdCBERUZBVUxUX01BUF9MRUdFTkRfQ09OVFJPTCA9IHtcbiAgLi4uREVGQVVMVF9NQVBfQ09OVFJPTFNfRkVBVFVSRVMsXG4gIGRpc2FibGVFZGl0OiBmYWxzZVxufTtcbi8qKlxuICogQSBsaXN0IG9mIG1hcCBjb250cm9sIHZpc2liaWxpdHkgYW5kIHdoZXRoZXIgaXMgaXQgYWN0aXZlLlxuICogQG1lbWJlcm9mIHVpU3RhdGVVcGRhdGVyc1xuICogQGNvbnN0YW50XG4gKiBAcHJvcGVydHkgdmlzaWJsZUxheWVycyBEZWZhdWx0OiBge3Nob3c6IHRydWUsIGFjdGl2ZTogZmFsc2V9YFxuICogQHByb3BlcnR5IG1hcExlZ2VuZCBEZWZhdWx0OiBge3Nob3c6IHRydWUsIGFjdGl2ZTogZmFsc2V9YFxuICogQHByb3BlcnR5IHRvZ2dsZTNkIERlZmF1bHQ6IGB7c2hvdzogdHJ1ZX1gXG4gKiBAcHJvcGVydHkgc3BsaXRNYXAgRGVmYXVsdDogYHtzaG93OiB0cnVlfWBcbiAqIEBwcm9wZXJ0eSBtYXBEcmF3IERlZmF1bHQ6IGB7c2hvdzogdHJ1ZSwgYWN0aXZlOiBmYWxzZX1gXG4gKiBAcHJvcGVydHkgbWFwTG9jYWxlIERlZmF1bHQ6IGB7c2hvdzogZmFsc2UsIGFjdGl2ZTogZmFsc2V9YFxuICogQHB1YmxpY1xuICovXG5leHBvcnQgY29uc3QgREVGQVVMVF9NQVBfQ09OVFJPTFM6IE1hcENvbnRyb2xzID0gKFxuICBPYmplY3Qua2V5cyhNQVBfQ09OVFJPTFMpIGFzIEFycmF5PGtleW9mIHR5cGVvZiBNQVBfQ09OVFJPTFM+XG4pLnJlZHVjZShcbiAgKGZpbmFsLCBjdXJyZW50KSA9PiAoe1xuICAgIC4uLmZpbmFsLFxuICAgIFtjdXJyZW50XTpcbiAgICAgIGN1cnJlbnQgPT09IE1BUF9DT05UUk9MUy5tYXBMZWdlbmRcbiAgICAgICAgPyBERUZBVUxUX01BUF9MRUdFTkRfQ09OVFJPTFxuICAgICAgICA6IERFRkFVTFRfTUFQX0NPTlRST0xTX0ZFQVRVUkVTXG4gIH0pLFxuICB7fSBhcyBNYXBDb250cm9sc1xuKTtcblxuLyoqXG4gKiBEZWZhdWx0IGltYWdlIGV4cG9ydCBjb25maWdcbiAqIEBtZW1iZXJvZiB1aVN0YXRlVXBkYXRlcnNcbiAqIEBjb25zdGFudFxuICogQHByb3BlcnR5IHJhdGlvIERlZmF1bHQ6IGAnU0NSRUVOJ2AsXG4gKiBAcHJvcGVydHkgcmVzb2x1dGlvbiBEZWZhdWx0OiBgJ09ORV9YJ2AsXG4gKiBAcHJvcGVydHkgbGVnZW5kIERlZmF1bHQ6IGBmYWxzZWAsXG4gKiBAcHJvcGVydHkgbWFwSCBEZWZhdWx0OiAwLFxuICogQHByb3BlcnR5IG1hcFcgRGVmYXVsdDogMCxcbiAqIEBwcm9wZXJ0eSBpbWFnZVNpemUgRGVmYXVsdDoge3pvb21PZmZzZXQ6IDAsIHNjYWxlOiAxLCBpbWFnZVc6IDAsIGltYWdlSDogMH0sXG4gKiBAcHJvcGVydHkgaW1hZ2VEYXRhVXJpIERlZmF1bHQ6IGAnJ2AsXG4gKiBAcHJvcGVydHkgZXhwb3J0aW5nIERlZmF1bHQ6IGBmYWxzZWBcbiAqIEBwcm9wZXJ0eSBlcnJvciBEZWZhdWx0OiBgZmFsc2VgXG4gKiBAcHJvcGVydHkgZXNjYXBlWGh0bWxGb3JXZWJwYWNrIERlZmF1bHQ6IGZyb20gYXBwbGljYXRpb24gY29uZmlnIChhdXRvLWRldGVjdGVkOiBgdHJ1ZWAgZm9yIHdlYnBhY2spXG4gKiBAcHVibGljXG4gKi9cbmV4cG9ydCBjb25zdCBERUZBVUxUX0VYUE9SVF9JTUFHRTogRXhwb3J0SW1hZ2UgPSB7XG4gIC8vIHVzZXIgb3B0aW9uc1xuICByYXRpbzogRVhQT1JUX0lNR19SQVRJT1MuU0NSRUVOLFxuICByZXNvbHV0aW9uOiBSRVNPTFVUSU9OUy5PTkVfWCxcbiAgbGVnZW5kOiBmYWxzZSxcbiAgbWFwSDogMCxcbiAgbWFwVzogMCxcbiAgaW1hZ2VTaXplOiB7XG4gICAgem9vbU9mZnNldDogMCxcbiAgICBzY2FsZTogMSxcbiAgICBpbWFnZVc6IDAsXG4gICAgaW1hZ2VIOiAwXG4gIH0sXG4gIC8vIHdoZW4gdGhpcyBpcyBzZXQgdG8gdHJ1ZSwgdGhlIG1vY2sgbWFwIHZpZXdwb3J0IHdpbGwgbW92ZSB0byB0aGUgY2VudGVyIG9mIGRhdGFcbiAgY2VudGVyOiBmYWxzZSxcbiAgLy8gZXhwb3J0aW5nIHN0YXRlXG4gIGltYWdlRGF0YVVyaTogJycsXG4gIC8vIGV4cG9ydGluZzogdXNlZCB0byBhdHRhY2ggcGxvdC1jb250YWluZXIgdG8gZG9tXG4gIGV4cG9ydGluZzogZmFsc2UsXG4gIC8vIHByb2Nlc3Npbmc6IHVzZWQgYXMgbG9hZGluZyBpbmRpY2F0b3Igd2hlbiBleHBvcnQgaW1hZ2UgaXMgYmVpbmcgcHJvZHVjZWRcbiAgcHJvY2Vzc2luZzogZmFsc2UsXG4gIGVycm9yOiBmYWxzZSxcbiAgLy8gd2hldGhlciB0byBhcHBseSBmaXggZm9yIHVnbGlmeSBlcnJvciBpbiBkb20tdG8taW1hZ2UgKGZyb20gYXBwbGljYXRpb24gY29uZmlnLCBhdXRvLWRldGVjdHMgYnVpbGQgdG9vbClcbiAgZXNjYXBlWGh0bWxGb3JXZWJwYWNrOiBnZXRBcHBsaWNhdGlvbkNvbmZpZygpLmVzY2FwZVhodG1sRm9yV2VicGFja1xufTtcblxuZXhwb3J0IGNvbnN0IERFRkFVTFRfTE9BRF9GSUxFUyA9IHtcbiAgZmlsZUxvYWRpbmc6IGZhbHNlXG59O1xuXG4vKipcbiAqIERlZmF1bHQgaW5pdGlhbCBgZXhwb3J0RGF0YWAgc2V0dGluZ3NcbiAqIEBtZW1iZXJvZiB1aVN0YXRlVXBkYXRlcnNcbiAqIEBjb25zdGFudFxuICogQHByb3BlcnR5IHNlbGVjdGVkRGF0YXNldCBEZWZhdWx0OiBgJydgLFxuICogQHByb3BlcnR5IGRhdGFUeXBlIERlZmF1bHQ6IGAnY3N2J2AsXG4gKiBAcHJvcGVydHkgZmlsdGVyZWQgRGVmYXVsdDogYHRydWVgLFxuICogQHB1YmxpY1xuICovXG5leHBvcnQgY29uc3QgREVGQVVMVF9FWFBPUlRfREFUQTogRXhwb3J0RGF0YSA9IHtcbiAgc2VsZWN0ZWREYXRhc2V0OiAnJyxcbiAgZGF0YVR5cGU6IEVYUE9SVF9EQVRBX1RZUEUuQ1NWLFxuICBmaWx0ZXJlZDogdHJ1ZVxufTtcblxuLyoqXG4gKiBAY29uc3RhbnRcbiAqL1xuZXhwb3J0IGNvbnN0IERFRkFVTFRfTk9USUZJQ0FUSU9OUyA9IFtdO1xuXG4vKipcbiAqIEBjb25zdGFudFxuICogQHByb3BlcnR5IGV4cG9ydE1hcGJveEFjY2Vzc1Rva2VuIC0gRGVmYXVsdDogbnVsbCwgdGhpcyBpcyB1c2VkIHdoZW4gd2UgcHJvdmlkZSBhIGRlZmF1bHQgbWFwYm94IHRva2VuIGZvciB1c2VycyB0byB0YWtlIGFkdmFudGFnZSBvZlxuICogQHByb3BlcnR5IHVzZXJNYXBib3hUb2tlbiAtIERlZmF1bHQ6ICcnLCBtYXBib3ggdG9rZW4gcHJvdmlkZWQgYnkgdXNlciB0aHJvdWdoIGlucHV0IGZpZWxkXG4gKiBAcHJvcGVydHkgbW9kZSAtIERlZmF1bHQ6ICdSRUFEJywgcmVhZCBvbmx5IG9yIGVkaXRhYmxlXG4gKiBAcHVibGljXG4gKi9cbmV4cG9ydCBjb25zdCBERUZBVUxUX0VYUE9SVF9IVE1MOiBFeHBvcnRIdG1sID0ge1xuICBleHBvcnRNYXBib3hBY2Nlc3NUb2tlbjogbnVsbCxcbiAgdXNlck1hcGJveFRva2VuOiAnJyxcbiAgbW9kZTogRVhQT1JUX0hUTUxfTUFQX01PREVTLlJFQURcbn07XG5cbi8qKlxuICogQGNvbnN0YW50XG4gKiBAcHJvcGVydHkgaGFzRGF0YSAtIERlZmF1bHQ6ICd0cnVlJyxcbiAqIEBwdWJsaWNcbiAqL1xuZXhwb3J0IGNvbnN0IERFRkFVTFRfRVhQT1JUX0pTT046IEV4cG9ydEpzb24gPSB7XG4gIGhhc0RhdGE6IHRydWVcbn07XG5cbi8qKlxuICogRXhwb3J0IE1hcCBDb25maWdcbiAqIEBjb25zdGFudFxuICogQHByb3BlcnR5IEhUTUwgLSBEZWZhdWx0OiAnREVGQVVMVF9FWFBPUlRfSFRNTCcsXG4gKiBAcHJvcGVydHkgSlNPTiAtIERlZmF1bHQ6ICdERUZBVUxUX0VYUE9SVF9KU09OJyxcbiAqIEBwcm9wZXJ0eSBmb3JtYXQgLSBEZWZhdWx0OiAnSFRNTCcsXG4gKiBAcHVibGljXG4gKi9cbmV4cG9ydCBjb25zdCBERUZBVUxUX0VYUE9SVF9NQVA6IEV4cG9ydE1hcCA9IHtcbiAgW0VYUE9SVF9NQVBfRk9STUFUUy5IVE1MXTogREVGQVVMVF9FWFBPUlRfSFRNTCxcbiAgW0VYUE9SVF9NQVBfRk9STUFUUy5KU09OXTogREVGQVVMVF9FWFBPUlRfSlNPTixcbiAgZm9ybWF0OiBFWFBPUlRfTUFQX0ZPUk1BVFMuSFRNTFxufTtcblxuLyoqXG4gKiBEZWZhdWx0IGluaXRpYWwgYGV4cG9ydFZpZGVvYCBzZXR0aW5nc1xuICogQG1lbWJlcm9mIHVpU3RhdGVVcGRhdGVyc1xuICogQGNvbnN0YW50XG4gKiBAcHJvcGVydHkgbWVkaWFUeXBlIERlZmF1bHQ6IGAnd2VibSdgXG4gKiBAcHJvcGVydHkgY2FtZXJhUHJlc2V0IERlZmF1bHQ6IGAnTm9uZSdgXG4gKiBAcHJvcGVydHkgZmlsZU5hbWUgRGVmYXVsdDogYCdrZXBsZXIuZ2wnYFxuICogQHByb3BlcnR5IHJlc29sdXRpb24gRGVmYXVsdDogYCcnYFxuICogQHByb3BlcnR5IGR1cmF0aW9uTXMgRGVmYXVsdDogYDEwMDBgXG4gKiBAcHVibGljXG4gKi9cbmV4cG9ydCBjb25zdCBERUZBVUxUX0VYUE9SVF9WSURFTzogRXhwb3J0VmlkZW8gPSB7XG4gIG1lZGlhVHlwZTogJ3dlYm0nLCAvLyB1c2Ugd2VibSBhcyBkZWZhdWx0IGFzIGdpZiBleHBvcnQgdGVuZHMgdG8gZnJlZXplIG9uIGxhcmdlciByZWNvcmRpbmdzXG4gIGNhbWVyYVByZXNldDogJ05vbmUnLFxuICBmaWxlTmFtZTogJ2tlcGxlci5nbCcsXG4gIHJlc29sdXRpb246ICcnLFxuICBkdXJhdGlvbk1zOiAxMDAwXG59O1xuXG4vKipcbiAqIERlZmF1bHQgaW5pdGlhbCBgdWlTdGF0ZWBcbiAqIEBtZW1iZXJvZiB1aVN0YXRlVXBkYXRlcnNcbiAqIEBjb25zdGFudFxuICogQHByb3BlcnR5IHJlYWRPbmx5IERlZmF1bHQ6IGBmYWxzZWBcbiAqIEBwcm9wZXJ0eSBhY3RpdmVTaWRlUGFuZWwgRGVmYXVsdDogYCdsYXllcidgXG4gKiBAcHJvcGVydHkgY3VycmVudE1vZGFsIERlZmF1bHQ6IGAnYWRkRGF0YSdgXG4gKiBAcHJvcGVydHkgZGF0YXNldEtleVRvUmVtb3ZlIERlZmF1bHQ6IGBudWxsYFxuICogQHByb3BlcnR5IHZpc2libGVEcm9wZG93biBEZWZhdWx0OiBgbnVsbGBcbiAqIEBwcm9wZXJ0eSBleHBvcnRJbWFnZSBEZWZhdWx0OiBbYERFRkFVTFRfRVhQT1JUX0lNQUdFYF0oI2RlZmF1bHRfZXhwb3J0X2ltYWdlKVxuICogQHByb3BlcnR5IGV4cG9ydERhdGEgRGVmYXVsdDogW2BERUZBVUxUX0VYUE9SVF9EQVRBYF0oI2RlZmF1bHRfZXhwb3J0X2RhdGEpXG4gKiBAcHJvcGVydHkgZXhwb3J0TWFwIERlZmF1bHQ6IFtgREVGQVVMVF9FWFBPUlRfTUFQYF0oI2RlZmF1bHRfZXhwb3J0X21hcClcbiAqIEBwcm9wZXJ0eSBtYXBDb250cm9scyBEZWZhdWx0OiBbYERFRkFVTFRfTUFQX0NPTlRST0xTYF0oI2RlZmF1bHRfbWFwX2NvbnRyb2xzKVxuICogQHByb3BlcnR5IG5vdGlmaWNhdGlvbnMgRGVmYXVsdDogYFtdYFxuICogQHByb3BlcnR5IG5vdGlmaWNhdGlvbnMgRGVmYXVsdDogYFtdYFxuICogQHByb3BlcnR5IGxvYWRGaWxlc1xuICogQHByb3BlcnR5IGlzU2lkZVBhbmVsQ2xvc2VCdXR0b25WaXNpYmxlIERlZmF1bHQ6IGB0cnVlYFxuICogQHB1YmxpY1xuICovXG5leHBvcnQgY29uc3QgSU5JVElBTF9VSV9TVEFURTogVWlTdGF0ZSA9IHtcbiAgcmVhZE9ubHk6IGZhbHNlLFxuICBhY3RpdmVTaWRlUGFuZWw6IERFRkFVTFRfQUNUSVZFX1NJREVfUEFORUwsXG4gIGN1cnJlbnRNb2RhbDogREVGQVVMVF9NT0RBTCxcbiAgZGF0YXNldEtleVRvUmVtb3ZlOiBudWxsLFxuICB2aXNpYmxlRHJvcGRvd246IG51bGwsXG4gIC8vIGV4cG9ydCBpbWFnZSBtb2RhbCB1aVxuICBleHBvcnRJbWFnZTogREVGQVVMVF9FWFBPUlRfSU1BR0UsXG4gIC8vIGV4cG9ydCBkYXRhIG1vZGFsIHVpXG4gIGV4cG9ydERhdGE6IERFRkFVTFRfRVhQT1JUX0RBVEEsXG4gIC8vIGh0bWwgZXhwb3J0XG4gIGV4cG9ydE1hcDogREVGQVVMVF9FWFBPUlRfTUFQLFxuICAvLyBleHBvcnQgdmlkZW8gbW9kYWwgdWlcbiAgZXhwb3J0VmlkZW86IERFRkFVTFRfRVhQT1JUX1ZJREVPLFxuICAvLyBtYXAgY29udHJvbCBwYW5lbHNcbiAgbWFwQ29udHJvbHM6IERFRkFVTFRfTUFQX0NPTlRST0xTLFxuICAvLyB1aSBub3RpZmljYXRpb25zXG4gIG5vdGlmaWNhdGlvbnM6IERFRkFVTFRfTk9USUZJQ0FUSU9OUyxcbiAgLy8gbG9hZCBmaWxlc1xuICBsb2FkRmlsZXM6IERFRkFVTFRfTE9BRF9GSUxFUyxcbiAgLy8gTG9jYWxlIG9mIHRoZSBVSVxuICBsb2NhbGU6IExPQ0FMRV9DT0RFUy5lbixcbiAgbGF5ZXJQYW5lbExpc3RWaWV3OiAnbGlzdCcsXG4gIGZpbHRlclBhbmVsTGlzdFZpZXc6ICdsaXN0JyxcbiAgaXNTaWRlUGFuZWxDbG9zZUJ1dHRvblZpc2libGU6IHRydWVcbn07XG5cbi8qIFVwZGF0ZXJzICovXG4vKipcbiAqIEBtZW1iZXJvZiB1aVN0YXRlVXBkYXRlcnNcbiAqL1xuZXhwb3J0IGNvbnN0IGluaXRVaVN0YXRlVXBkYXRlciA9IChcbiAgc3RhdGU6IFVpU3RhdGUsXG4gIGFjdGlvbjoge1xuICAgIHR5cGU/OiAodHlwZW9mIEFjdGlvblR5cGVzKVsnSU5JVCddO1xuICAgIHBheWxvYWQ6IEtlcGxlckdsSW5pdFBheWxvYWQ7XG4gIH1cbik6IFVpU3RhdGUgPT4gKHtcbiAgLi4uc3RhdGUsXG4gIC4uLihhY3Rpb24ucGF5bG9hZCB8fCB7fSkuaW5pdGlhbFVpU3RhdGVcbn0pO1xuXG4vKipcbiAqIFRvZ2dsZSBhY3RpdmUgc2lkZSBwYW5lbFxuICogQG1lbWJlcm9mIHVpU3RhdGVVcGRhdGVyc1xuICogQHBhcmFtIHN0YXRlIGB1aVN0YXRlYFxuICogQHBhcmFtIGFjdGlvblxuICogQHBhcmFtIGFjdGlvbi5wYXlsb2FkIGlkIG9mIHNpZGUgcGFuZWwgdG8gYmUgc2hvd24sIG9uZSBvZiBgbGF5ZXJgLCBgZmlsdGVyYCwgYGludGVyYWN0aW9uYCwgYG1hcGAuIGNsb3NlIHNpZGUgcGFuZWwgaWYgYG51bGxgXG4gKiBAcmV0dXJucyBuZXh0U3RhdGVcbiAqIEBwdWJsaWNcbiAqL1xuZXhwb3J0IGNvbnN0IHRvZ2dsZVNpZGVQYW5lbFVwZGF0ZXIgPSAoXG4gIHN0YXRlOiBVaVN0YXRlLFxuICB7cGF5bG9hZDogaWR9OiBVSVN0YXRlQWN0aW9ucy5Ub2dnbGVTaWRlUGFuZWxVcGRhdGVyQWN0aW9uXG4pOiBVaVN0YXRlID0+IHtcbiAgcmV0dXJuIGlkID09PSBzdGF0ZS5hY3RpdmVTaWRlUGFuZWxcbiAgICA/IHN0YXRlXG4gICAgOiB7XG4gICAgICAgIC4uLnN0YXRlLFxuICAgICAgICBhY3RpdmVTaWRlUGFuZWw6IGlkXG4gICAgICB9O1xufTtcblxuLyoqXG4gKiBTaG93IGFuZCBoaWRlIG1vZGFsIGRpYWxvZ1xuICogQG1lbWJlcm9mIHVpU3RhdGVVcGRhdGVyc1xuICogQHBhcmFtIHN0YXRlIGB1aVN0YXRlYFxuICogQHBhcmFtIGFjdGlvblxuICogQHBhcmFtYWN0aW9uLnBheWxvYWQgaWQgb2YgbW9kYWwgdG8gYmUgc2hvd24sIG51bGwgdG8gaGlkZSBtb2RhbHMuIE9uZSBvZjpcbiAqICAtIFtgREFUQV9UQUJMRV9JRGBdKC4uL2NvbnN0YW50cy9kZWZhdWx0LXNldHRpbmdzLm1kI2RhdGFfdGFibGVfaWQpXG4gKiAgLSBbYERFTEVURV9EQVRBX0lEYF0oLi4vY29uc3RhbnRzL2RlZmF1bHQtc2V0dGluZ3MubWQjZGVsZXRlX2RhdGFfaWQpXG4gKiAgLSBbYEFERF9EQVRBX0lEYF0oLi4vY29uc3RhbnRzL2RlZmF1bHQtc2V0dGluZ3MubWQjYWRkX2RhdGFfaWQpXG4gKiAgLSBbYEVYUE9SVF9JTUFHRV9JRGBdKC4uL2NvbnN0YW50cy9kZWZhdWx0LXNldHRpbmdzLm1kI2V4cG9ydF9pbWFnZV9pZClcbiAqICAtIFtgRVhQT1JUX0RBVEFfSURgXSguLi9jb25zdGFudHMvZGVmYXVsdC1zZXR0aW5ncy5tZCNleHBvcnRfZGF0YV9pZClcbiAqICAtIFtgQUREX01BUF9TVFlMRV9JRGBdKC4uL2NvbnN0YW50cy9kZWZhdWx0LXNldHRpbmdzLm1kI2FkZF9tYXBfc3R5bGVfaWQpXG4gKiBAcmV0dXJucyBuZXh0U3RhdGVcbiAqIEBwdWJsaWNcbiAqL1xuZXhwb3J0IGNvbnN0IHRvZ2dsZU1vZGFsVXBkYXRlciA9IChcbiAgc3RhdGU6IFVpU3RhdGUsXG4gIHtwYXlsb2FkOiBpZH06IFVJU3RhdGVBY3Rpb25zLlRvZ2dsZU1vZGFsVXBkYXRlckFjdGlvblxuKTogVWlTdGF0ZSA9PiAoe1xuICAuLi5zdGF0ZSxcbiAgY3VycmVudE1vZGFsOiBpZFxufSk7XG5cbi8qKlxuICogSGlkZSBhbmQgc2hvdyBzaWRlIHBhbmVsIGhlYWRlciBkcm9wZG93biwgYWN0aXZhdGVkIGJ5IGNsaWNraW5nIHRoZSBzaGFyZSBsaW5rIG9uIHRvcCBvZiB0aGUgc2lkZSBwYW5lbFxuICogQG1lbWJlcm9mIHVpU3RhdGVVcGRhdGVyc1xuICogQHB1YmxpY1xuICovXG5leHBvcnQgY29uc3Qgc2hvd0V4cG9ydERyb3Bkb3duVXBkYXRlciA9IChcbiAgc3RhdGU6IFVpU3RhdGUsXG4gIHtwYXlsb2FkOiBpZH06IFVJU3RhdGVBY3Rpb25zLlNob3dFeHBvcnREcm9wZG93blVwZGF0ZXJBY3Rpb25cbik6IFVpU3RhdGUgPT4gKHtcbiAgLi4uc3RhdGUsXG4gIHZpc2libGVEcm9wZG93bjogaWRcbn0pO1xuXG4vKipcbiAqIEhpZGUgc2lkZSBwYW5lbCBoZWFkZXIgZHJvcGRvd24sIGFjdGl2YXRlZCBieSBjbGlja2luZyB0aGUgc2hhcmUgbGluayBvbiB0b3Agb2YgdGhlIHNpZGUgcGFuZWxcbiAqIEBtZW1iZXJvZiB1aVN0YXRlVXBkYXRlcnNcbiAqIEBwdWJsaWNcbiAqL1xuZXhwb3J0IGNvbnN0IGhpZGVFeHBvcnREcm9wZG93blVwZGF0ZXIgPSAoc3RhdGU6IFVpU3RhdGUpOiBVaVN0YXRlID0+ICh7XG4gIC4uLnN0YXRlLFxuICB2aXNpYmxlRHJvcGRvd246IG51bGxcbn0pO1xuXG4vKipcbiAqIFRvZ2dsZSBzaWRlIHBhbmVsIGNsb3NlIGJ1dHRvbiBvbiB0b3AgbGVmdCBvZiB0aGUgc2lkZSBwYW5lbFxuICogQG1lbWJlcm9mIHVpU3RhdGVVcGRhdGVyc1xuICogQHB1YmxpY1xuICovXG5leHBvcnQgY29uc3QgdG9nZ2xlU2lkZVBhbmVsQ2xvc2VCdXR0b25VcGRhdGVyID0gKFxuICBzdGF0ZTogVWlTdGF0ZSxcbiAge3BheWxvYWQ6IHtzaG93fX06IFVJU3RhdGVBY3Rpb25zLlRvZ2dsZVNpZGVQYW5lbENsb3NlQnV0dG9uVXBkYXRlckFjdGlvblxuKTogVWlTdGF0ZSA9PiAoe1xuICAuLi5zdGF0ZSxcbiAgaXNTaWRlUGFuZWxDbG9zZUJ1dHRvblZpc2libGU6IHNob3dcbn0pO1xuXG4vKipcbiAqIFRvZ2dsZSBhY3RpdmUgbWFwIGNvbnRyb2wgcGFuZWxcbiAqIEBtZW1iZXJvZiB1aVN0YXRlVXBkYXRlcnNcbiAqIEBwYXJhbSBzdGF0ZSBgdWlTdGF0ZWBcbiAqIEBwYXJhbSBhY3Rpb24gYWN0aW9uXG4gKiBAcGFyYW0gYWN0aW9uLnBheWxvYWQgbWFwIGNvbnRyb2wgcGFuZWwgaWQsIG9uZSBvZiB0aGUga2V5cyBvZjogW2BERUZBVUxUX01BUF9DT05UUk9MU2BdKCNkZWZhdWx0X21hcF9jb250cm9scylcbiAqIEByZXR1cm5zIG5leHRTdGF0ZVxuICogQHB1YmxpY1xuICovXG5leHBvcnQgY29uc3QgdG9nZ2xlTWFwQ29udHJvbFVwZGF0ZXIgPSAoXG4gIHN0YXRlOiBVaVN0YXRlLFxuICB7cGF5bG9hZDoge3BhbmVsSWQsIGluZGV4ID0gMH19OiBVSVN0YXRlQWN0aW9ucy5Ub2dnbGVNYXBDb250cm9sVXBkYXRlckFjdGlvblxuKTogVWlTdGF0ZSA9PiB7XG4gIGxldCB1cGRhdGVkU3RhdGUgPSBzdGF0ZTtcbiAgLy8gVGhlIGVmZmVjdCBwYW5lbCBhbmQgYWkgYXNzaXN0YW50IHBhbmVsIGNhbiBub3QgYmUgYWN0aXZlIGF0IHRoZSBzYW1lIHRpbWVcbiAgLy8gc28gd2UgbmVlZCB0byBkZWFjdGl2YXRlIHRoZSBvdGhlciBwYW5lbCB3aGVuIG9uZSBpcyBhY3RpdmF0ZWRcbiAgY29uc3QgcGFuZWxUb0RlYWN0aXZhdGUgPVxuICAgIHBhbmVsSWQgPT09IE1BUF9DT05UUk9MUy5lZmZlY3RcbiAgICAgID8gTUFQX0NPTlRST0xTLmFpQXNzaXN0YW50XG4gICAgICA6IHBhbmVsSWQgPT09IE1BUF9DT05UUk9MUy5haUFzc2lzdGFudFxuICAgICAgPyBNQVBfQ09OVFJPTFMuZWZmZWN0XG4gICAgICA6IG51bGw7XG5cbiAgLy8gVG8gdG8gdG9nZ2xlIHRoZSBtYXBEcmF3IGFuZCBtYXBMb2NhbCBkcm9wZG93bnNcbiAgLy8gV2UgaGF2ZSB0byBkZWFjdGl2YXRlIHRoZSBvdGhlciBhY3RpdmUgZHJvcGRvd25cbiAgY29uc3QgZHJvcGRvd25Ub0RlYWN0aXZhdGUgPVxuICAgIHBhbmVsSWQgPT09IE1BUF9DT05UUk9MUy5tYXBEcmF3XG4gICAgICA/IE1BUF9DT05UUk9MUy5tYXBMb2NhbGVcbiAgICAgIDogcGFuZWxJZCA9PT0gTUFQX0NPTlRST0xTLm1hcExvY2FsZVxuICAgICAgPyBNQVBfQ09OVFJPTFMubWFwRHJhd1xuICAgICAgOiBudWxsO1xuXG4gIC8vIElmIHdlIG5lZWQgdG8gZGVhY3RpdmF0ZSBhIGNvbXBldGluZyBwYW5lbCBhbmQgaXQncyBjdXJyZW50bHkgYWN0aXZlXG4gIGlmIChwYW5lbFRvRGVhY3RpdmF0ZSAmJiBzdGF0ZS5tYXBDb250cm9sc1twYW5lbFRvRGVhY3RpdmF0ZV0/LmFjdGl2ZSkge1xuICAgIHVwZGF0ZWRTdGF0ZSA9IHtcbiAgICAgIC4uLnN0YXRlLFxuICAgICAgbWFwQ29udHJvbHM6IHtcbiAgICAgICAgLi4udXBkYXRlZFN0YXRlLm1hcENvbnRyb2xzLFxuICAgICAgICBbcGFuZWxUb0RlYWN0aXZhdGVdOiB7XG4gICAgICAgICAgLi4udXBkYXRlZFN0YXRlLm1hcENvbnRyb2xzW3BhbmVsVG9EZWFjdGl2YXRlXSxcbiAgICAgICAgICBhY3RpdmU6IGZhbHNlXG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9O1xuICB9XG5cbiAgLy8gSWYgd2UgbmVlZCB0byBkZWFjdGl2YXRlIGEgY29tcGV0aW5nIGRyb3Bkb3duIGFuZCBpdCdzIGN1cnJlbnRseSBhY3RpdmVcbiAgaWYgKGRyb3Bkb3duVG9EZWFjdGl2YXRlICYmIHN0YXRlLm1hcENvbnRyb2xzW2Ryb3Bkb3duVG9EZWFjdGl2YXRlXT8uYWN0aXZlKSB7XG4gICAgdXBkYXRlZFN0YXRlID0ge1xuICAgICAgLi4uc3RhdGUsXG4gICAgICBtYXBDb250cm9sczoge1xuICAgICAgICAuLi51cGRhdGVkU3RhdGUubWFwQ29udHJvbHMsXG4gICAgICAgIFtkcm9wZG93blRvRGVhY3RpdmF0ZV06IHtcbiAgICAgICAgICAuLi51cGRhdGVkU3RhdGUubWFwQ29udHJvbHNbZHJvcGRvd25Ub0RlYWN0aXZhdGVdLFxuICAgICAgICAgIGFjdGl2ZTogZmFsc2VcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH07XG4gIH1cblxuICByZXR1cm4ge1xuICAgIC4uLnVwZGF0ZWRTdGF0ZSxcbiAgICBtYXBDb250cm9sczoge1xuICAgICAgLi4udXBkYXRlZFN0YXRlLm1hcENvbnRyb2xzLFxuICAgICAgW3BhbmVsSWRdOiB7XG4gICAgICAgIC4uLnVwZGF0ZWRTdGF0ZS5tYXBDb250cm9sc1twYW5lbElkXSxcbiAgICAgICAgYWN0aXZlOiAhdXBkYXRlZFN0YXRlLm1hcENvbnRyb2xzW3BhbmVsSWRdLmFjdGl2ZSxcbiAgICAgICAgYWN0aXZlTWFwSW5kZXg6IGluZGV4XG4gICAgICB9XG4gICAgfVxuICB9O1xufTtcblxuLyoqXG4gKiBUb2dnbGUgbWFwIGNvbnRyb2wgdmlzaWJpbGl0eVxuICogQG1lbWJlcm9mIHVpU3RhdGVVcGRhdGVyc1xuICogQHBhcmFtIHN0YXRlIGB1aVN0YXRlYFxuICogQHBhcmFtIGFjdGlvbiBhY3Rpb25cbiAqIEBwYXJhbSBhY3Rpb24ucGF5bG9hZCBtYXAgY29udHJvbCBwYW5lbCBpZCwgb25lIG9mIHRoZSBrZXlzIG9mOiBbYERFRkFVTFRfTUFQX0NPTlRST0xTYF0oI2RlZmF1bHRfbWFwX2NvbnRyb2xzKVxuICogQHJldHVybnMgbmV4dFN0YXRlXG4gKiBAcHVibGljXG4gKi9cbmV4cG9ydCBjb25zdCBzZXRNYXBDb250cm9sVmlzaWJpbGl0eVVwZGF0ZXIgPSAoXG4gIHN0YXRlOiBVaVN0YXRlLFxuICB7cGF5bG9hZDoge3BhbmVsSWQsIHNob3d9fTogVUlTdGF0ZUFjdGlvbnMuc2V0TWFwQ29udHJvbFZpc2liaWxpdHlVcGRhdGVyQWN0aW9uXG4pOiBVaVN0YXRlID0+IHtcbiAgaWYgKCFzdGF0ZS5tYXBDb250cm9scz8uW3BhbmVsSWRdKSB7XG4gICAgcmV0dXJuIHN0YXRlO1xuICB9XG5cbiAgcmV0dXJuIHtcbiAgICAuLi5zdGF0ZSxcbiAgICBtYXBDb250cm9sczoge1xuICAgICAgLi4uc3RhdGUubWFwQ29udHJvbHMsXG4gICAgICBbcGFuZWxJZF06IHtcbiAgICAgICAgLi4uc3RhdGUubWFwQ29udHJvbHNbcGFuZWxJZF0sXG4gICAgICAgIHNob3c6IEJvb2xlYW4oc2hvdylcbiAgICAgIH1cbiAgICB9XG4gIH07XG59O1xuXG4vKipcbiAqIFRvZ2dsZSBtYXAgY29udHJvbCBzZXR0aW5nc1xuICogQG1lbWJlcm9mIHVpU3RhdGVVcGRhdGVyc1xuICogQHBhcmFtIHN0YXRlIGB1aVN0YXRlYFxuICogQHBhcmFtIGFjdGlvbiBhY3Rpb25cbiAqIEBwYXJhbSBhY3Rpb24ucGF5bG9hZCBtYXAgY29udHJvbCBwYW5lbCBpZCwgb25lIG9mIHRoZSBrZXlzIG9mOiBbYERFRkFVTFRfTUFQX0NPTlRST0xTYF0oI2RlZmF1bHRfbWFwX2NvbnRyb2xzKVxuICogQHJldHVybnMgbmV4dFN0YXRlXG4gKiBAcHVibGljXG4gKi9cbmV4cG9ydCBjb25zdCBzZXRNYXBDb250cm9sU2V0dGluZ3NVcGRhdGVyID0gKFxuICBzdGF0ZTogVWlTdGF0ZSxcbiAge3BheWxvYWQ6IHtwYW5lbElkLCBzZXR0aW5nc319OiBVSVN0YXRlQWN0aW9ucy5zZXRNYXBDb250cm9sU2V0dGluZ3NVcGRhdGVyQWN0aW9uXG4pOiBVaVN0YXRlID0+IHtcbiAgY29uc3QgbWFwQ29udHJvbCA9IHN0YXRlLm1hcENvbnRyb2xzPy5bcGFuZWxJZF07XG4gIGlmICghbWFwQ29udHJvbCkge1xuICAgIHJldHVybiBzdGF0ZTtcbiAgfVxuXG4gIHJldHVybiB7XG4gICAgLi4uc3RhdGUsXG4gICAgbWFwQ29udHJvbHM6IHtcbiAgICAgIC4uLnN0YXRlLm1hcENvbnRyb2xzLFxuICAgICAgW3BhbmVsSWRdOiB7Li4ubWFwQ29udHJvbCwgc2V0dGluZ3M6IHsuLi5tYXBDb250cm9sLnNldHRpbmdzLCAuLi5zZXR0aW5nc319XG4gICAgfVxuICB9O1xufTtcblxuLyoqXG4gKiBUb2dnbGUgYWN0aXZlIG1hcCBjb250cm9sIHBhbmVsXG4gKiBAbWVtYmVyb2YgdWlTdGF0ZVVwZGF0ZXJzXG4gKiBAcGFyYW0gc3RhdGUgYHVpU3RhdGVgXG4gKiBAcGFyYW0gYWN0aW9uXG4gKiBAcGFyYW0gYWN0aW9uLnBheWxvYWQgZGF0YXNldCBpZFxuICogQHJldHVybnMgbmV4dFN0YXRlXG4gKiBAcHVibGljXG4gKi9cbmV4cG9ydCBjb25zdCBvcGVuRGVsZXRlTW9kYWxVcGRhdGVyID0gKFxuICBzdGF0ZTogVWlTdGF0ZSxcbiAge3BheWxvYWQ6IGRhdGFzZXRLZXlUb1JlbW92ZX06IFVJU3RhdGVBY3Rpb25zLk9wZW5EZWxldGVNb2RhbFVwZGF0ZXJBY3Rpb25cbik6IFVpU3RhdGUgPT4gKHtcbiAgLi4uc3RhdGUsXG4gIGN1cnJlbnRNb2RhbDogREVMRVRFX0RBVEFfSUQsXG4gIGRhdGFzZXRLZXlUb1JlbW92ZVxufSk7XG5cbi8qKlxuICogU2V0IGBleHBvcnRJbWFnZS5sZWdlbmRgIHRvIGB0cnVlYCBvciBgZmFsc2VgXG4gKiBAbWVtYmVyb2YgdWlTdGF0ZVVwZGF0ZXJzXG4gKiBAcGFyYW0gc3RhdGUgYHVpU3RhdGVgXG4gKiBAcmV0dXJucyBuZXh0U3RhdGVcbiAqIEBwdWJsaWNcbiAqL1xuZXhwb3J0IGNvbnN0IHNldEV4cG9ydEltYWdlU2V0dGluZ1VwZGF0ZXIgPSAoXG4gIHN0YXRlOiBVaVN0YXRlLFxuICB7cGF5bG9hZDogbmV3U2V0dGluZ306IFVJU3RhdGVBY3Rpb25zLlNldEV4cG9ydEltYWdlU2V0dGluZ1VwZGF0ZXJBY3Rpb25cbik6IFVpU3RhdGUgPT4ge1xuICBjb25zdCB1cGRhdGVkID0gey4uLnN0YXRlLmV4cG9ydEltYWdlLCAuLi5uZXdTZXR0aW5nfTtcbiAgY29uc3QgaW1hZ2VTaXplID0gY2FsY3VsYXRlRXhwb3J0SW1hZ2VTaXplKHVwZGF0ZWQpIHx8IHN0YXRlLmV4cG9ydEltYWdlLmltYWdlU2l6ZTtcblxuICByZXR1cm4ge1xuICAgIC4uLnN0YXRlLFxuICAgIGV4cG9ydEltYWdlOiB7XG4gICAgICAuLi51cGRhdGVkLFxuICAgICAgaW1hZ2VTaXplXG4gICAgfVxuICB9O1xufTtcblxuLyoqXG4gKiBTZXQgYGV4cG9ydEltYWdlLnNldEV4cG9ydEltYWdlRGF0YVVyaWAgdG8gYSBpbWFnZSBkYXRhVXJpXG4gKiBAbWVtYmVyb2YgdWlTdGF0ZVVwZGF0ZXJzXG4gKiBAcGFyYW0gc3RhdGUgYHVpU3RhdGVgXG4gKiBAcGFyYW0gYWN0aW9uXG4gKiBAcGFyYW0gYWN0aW9uLnBheWxvYWQgZXhwb3J0IGltYWdlIGRhdGEgdXJpXG4gKiBAcmV0dXJucyBuZXh0U3RhdGVcbiAqIEBwdWJsaWNcbiAqL1xuZXhwb3J0IGNvbnN0IHNldEV4cG9ydEltYWdlRGF0YVVyaVVwZGF0ZXIgPSAoXG4gIHN0YXRlOiBVaVN0YXRlLFxuICB7cGF5bG9hZDogZGF0YVVyaX06IFVJU3RhdGVBY3Rpb25zLlNldEV4cG9ydEltYWdlRGF0YVVyaVVwZGF0ZXJBY3Rpb25cbik6IFVpU3RhdGUgPT4ge1xuICBpZiAoZGF0YVVyaSA9PT0gc3RhdGUuZXhwb3J0SW1hZ2UuaW1hZ2VEYXRhVXJpKSB7XG4gICAgcmV0dXJuIHN0YXRlO1xuICB9XG4gIHJldHVybiB7XG4gICAgLi4uc3RhdGUsXG4gICAgZXhwb3J0SW1hZ2U6IHtcbiAgICAgIC4uLnN0YXRlLmV4cG9ydEltYWdlLFxuICAgICAgcHJvY2Vzc2luZzogZmFsc2UsXG4gICAgICBpbWFnZURhdGFVcmk6IGRhdGFVcmlcbiAgICB9XG4gIH07XG59O1xuXG4vKipcbiAqIEBtZW1iZXJvZiB1aVN0YXRlVXBkYXRlcnNcbiAqIEBwdWJsaWNcbiAqL1xuZXhwb3J0IGNvbnN0IHNldEV4cG9ydEltYWdlRXJyb3JVcGRhdGVyID0gKFxuICBzdGF0ZTogVWlTdGF0ZSxcbiAge3BheWxvYWQ6IGVycm9yfTogVUlTdGF0ZUFjdGlvbnMuU2V0RXhwb3J0SW1hZ2VFcnJvclVwZGF0ZXJBY3Rpb25cbik6IFVpU3RhdGUgPT4gKHtcbiAgLi4uc3RhdGUsXG4gIGV4cG9ydEltYWdlOiB7XG4gICAgLi4uc3RhdGUuZXhwb3J0SW1hZ2UsXG4gICAgcHJvY2Vzc2luZzogZmFsc2UsXG4gICAgZXJyb3JcbiAgfVxufSk7XG5cbi8qKlxuICogRGVsZXRlIGNhY2hlZCBleHBvcnQgaW1hZ2VcbiAqIEBtZW1iZXJvZiB1aVN0YXRlVXBkYXRlcnNcbiAqIEBwdWJsaWNcbiAqL1xuZXhwb3J0IGNvbnN0IGNsZWFudXBFeHBvcnRJbWFnZVVwZGF0ZXIgPSAoc3RhdGU6IFVpU3RhdGUpOiBVaVN0YXRlID0+ICh7XG4gIC4uLnN0YXRlLFxuICBleHBvcnRJbWFnZToge1xuICAgIC4uLnN0YXRlLmV4cG9ydEltYWdlLFxuICAgIGV4cG9ydGluZzogZmFsc2UsXG4gICAgaW1hZ2VEYXRhVXJpOiAnJyxcbiAgICBlcnJvcjogZmFsc2UsXG4gICAgcHJvY2Vzc2luZzogZmFsc2UsXG4gICAgY2VudGVyOiBmYWxzZVxuICB9XG59KTtcblxuLyoqXG4gKiBTZXQgYGV4cG9ydFZpZGVvYCBzZXR0aW5nczogbWVkaWFUeXBlLCBjYW1lcmFQcmVzZXQsIGZpbGVOYW1lLCByZXNvbHV0aW9uLCBkdXJhdGlvbk1zXG4gKiBAbWVtYmVyb2YgdWlTdGF0ZVVwZGF0ZXJzXG4gKiBAcGFyYW0gc3RhdGUgYHVpU3RhdGVgXG4gKiBAcGFyYW0gYWN0aW9uXG4gKiBAcGFyYW0gYWN0aW9uLnBheWxvYWQgbmV3IHZpZGVvIGV4cG9ydCBzZXR0aW5nc1xuICogQHJldHVybnMgbmV4dFN0YXRlXG4gKiBAcHVibGljXG4gKi9cbmV4cG9ydCBjb25zdCBzZXRFeHBvcnRWaWRlb1NldHRpbmdVcGRhdGVyID0gKFxuICBzdGF0ZTogVWlTdGF0ZSxcbiAge3BheWxvYWQ6IG5ld1NldHRpbmd9OiBVSVN0YXRlQWN0aW9ucy5TZXRFeHBvcnRWaWRlb1NldHRpbmdVcGRhdGVyQWN0aW9uXG4pOiBVaVN0YXRlID0+ICh7XG4gIC4uLnN0YXRlLFxuICBleHBvcnRWaWRlbzoge1xuICAgIC4uLnN0YXRlLmV4cG9ydFZpZGVvLFxuICAgIC4uLm5ld1NldHRpbmdcbiAgfVxufSk7XG5cbi8qKlxuICogU3RhcnQgaW1hZ2UgZXhwb3J0aW5nIGZsb3dcbiAqIEBtZW1iZXJvZiB1aVN0YXRlVXBkYXRlcnNcbiAqIEBwYXJhbSBzdGF0ZVxuICogQHBhcmFtIG9wdGlvbnNcbiAqIEByZXR1cm5zIHtVaVN0YXRlfVxuICogQHB1YmxpY1xuICovXG5leHBvcnQgY29uc3Qgc3RhcnRFeHBvcnRpbmdJbWFnZVVwZGF0ZXIgPSAoXG4gIHN0YXRlOiBVaVN0YXRlLFxuICB7cGF5bG9hZDogb3B0aW9ucyA9IHt9fToge3BheWxvYWQ6IFBhcnRpYWw8RXhwb3J0SW1hZ2U+fVxuKTogVWlTdGF0ZSA9PiB7XG4gIGNvbnN0IGltYWdlU2V0dGluZ3MgPSB7XG4gICAgLi4ub3B0aW9ucyxcbiAgICBleHBvcnRpbmc6IHRydWVcbiAgfTtcblxuICByZXR1cm4gY29tcG9zZV8oW1xuICAgIGNsZWFudXBFeHBvcnRJbWFnZVVwZGF0ZXIsXG4gICAgYXBwbHlfKHNldEV4cG9ydEltYWdlU2V0dGluZ1VwZGF0ZXIsIHBheWxvYWRfKGltYWdlU2V0dGluZ3MpKVxuICBdKShzdGF0ZSk7XG59O1xuXG4vKipcbiAqIFNldCBzZWxlY3RlZCBkYXRhc2V0IGZvciBleHBvcnRcbiAqIEBtZW1iZXJvZiB1aVN0YXRlVXBkYXRlcnNcbiAqIEBwYXJhbSBzdGF0ZSBgdWlTdGF0ZWBcbiAqIEBwYXJhbSBhY3Rpb25cbiAqIEBwYXJhbSBhY3Rpb24ucGF5bG9hZCBkYXRhc2V0IGlkXG4gKiBAcmV0dXJucyBuZXh0U3RhdGVcbiAqIEBwdWJsaWNcbiAqL1xuZXhwb3J0IGNvbnN0IHNldEV4cG9ydFNlbGVjdGVkRGF0YXNldFVwZGF0ZXIgPSAoXG4gIHN0YXRlOiBVaVN0YXRlLFxuICB7cGF5bG9hZDogZGF0YXNldH06IFVJU3RhdGVBY3Rpb25zLlNldEV4cG9ydFNlbGVjdGVkRGF0YXNldFVwZGF0ZXJBY3Rpb25cbik6IFVpU3RhdGUgPT4gKHtcbiAgLi4uc3RhdGUsXG4gIGV4cG9ydERhdGE6IHtcbiAgICAuLi5zdGF0ZS5leHBvcnREYXRhLFxuICAgIHNlbGVjdGVkRGF0YXNldDogZGF0YXNldFxuICB9XG59KTtcblxuLyoqXG4gKiBTZXQgZGF0YSBmb3JtYXQgZm9yIGV4cG9ydGluZyBkYXRhXG4gKiBAbWVtYmVyb2YgdWlTdGF0ZVVwZGF0ZXJzXG4gKiBAcGFyYW0gc3RhdGUgYHVpU3RhdGVgXG4gKiBAcGFyYW0gYWN0aW9uXG4gKiBAcGFyYW0gYWN0aW9uLnBheWxvYWQgb25lIG9mIGAndGV4dC9jc3YnYFxuICogQHJldHVybnMgbmV4dFN0YXRlXG4gKiBAcHVibGljXG4gKi9cbmV4cG9ydCBjb25zdCBzZXRFeHBvcnREYXRhVHlwZVVwZGF0ZXIgPSAoXG4gIHN0YXRlOiBVaVN0YXRlLFxuICB7cGF5bG9hZDogZGF0YVR5cGV9OiBVSVN0YXRlQWN0aW9ucy5TZXRFeHBvcnREYXRhVHlwZVVwZGF0ZXJBY3Rpb25cbik6IFVpU3RhdGUgPT4gKHtcbiAgLi4uc3RhdGUsXG4gIGV4cG9ydERhdGE6IHtcbiAgICAuLi5zdGF0ZS5leHBvcnREYXRhLFxuICAgIGRhdGFUeXBlXG4gIH1cbn0pO1xuXG4vKipcbiAqIFdoZXRoZXIgdG8gZXhwb3J0IGZpbHRlcmVkIGRhdGEsIGB0cnVlYCBvciBgZmFsc2VgXG4gKiBAbWVtYmVyb2YgdWlTdGF0ZVVwZGF0ZXJzXG4gKiBAcGFyYW0gc3RhdGUgYHVpU3RhdGVgXG4gKiBAcGFyYW0gYWN0aW9uXG4gKiBAcGFyYW0gYWN0aW9uLnBheWxvYWRcbiAqIEByZXR1cm5zIG5leHRTdGF0ZVxuICogQHB1YmxpY1xuICovXG5leHBvcnQgY29uc3Qgc2V0RXhwb3J0RmlsdGVyZWRVcGRhdGVyID0gKFxuICBzdGF0ZTogVWlTdGF0ZSxcbiAge3BheWxvYWQ6IGZpbHRlcmVkfTogVUlTdGF0ZUFjdGlvbnMuU2V0RXhwb3J0RmlsdGVyZWRVcGRhdGVyQWN0aW9uXG4pOiBVaVN0YXRlID0+ICh7XG4gIC4uLnN0YXRlLFxuICBleHBvcnREYXRhOiB7XG4gICAgLi4uc3RhdGUuZXhwb3J0RGF0YSxcbiAgICBmaWx0ZXJlZFxuICB9XG59KTtcblxuLyoqXG4gKiBXaGV0aGVyIHRvIGluY2x1ZGluZyBkYXRhIGluIG1hcCBjb25maWcsIHRvZ2dsZSBiZXR3ZWVuIGB0cnVlYCBvciBgZmFsc2VgXG4gKiBAbWVtYmVyb2YgdWlTdGF0ZVVwZGF0ZXJzXG4gKiBAcGFyYW0gc3RhdGUgYHVpU3RhdGVgXG4gKiBAcmV0dXJucyBuZXh0U3RhdGVcbiAqIEBwdWJsaWNcbiAqL1xuZXhwb3J0IGNvbnN0IHNldEV4cG9ydERhdGFVcGRhdGVyID0gKHN0YXRlOiBVaVN0YXRlKTogVWlTdGF0ZSA9PiAoe1xuICAuLi5zdGF0ZSxcbiAgZXhwb3J0TWFwOiB7XG4gICAgLi4uc3RhdGUuZXhwb3J0TWFwLFxuICAgIFtFWFBPUlRfTUFQX0ZPUk1BVFMuSlNPTl06IHtcbiAgICAgIC4uLnN0YXRlLmV4cG9ydE1hcFtFWFBPUlRfTUFQX0ZPUk1BVFMuSlNPTl0sXG4gICAgICBoYXNEYXRhOiAhc3RhdGUuZXhwb3J0TWFwW0VYUE9SVF9NQVBfRk9STUFUUy5KU09OXS5oYXNEYXRhXG4gICAgfVxuICB9XG59KTtcblxuLyoqXG4gKiB3aGV0aGVyIHRvIGV4cG9ydCBhIG1hcGJveCBhY2Nlc3MgdG8gSFRNTCBzaW5nbGUgcGFnZVxuICogQHBhcmFtIHN0YXRlIC0gYHVpU3RhdGVgXG4gKiBAcGFyYW0gYWN0aW9uXG4gKiBAcGFyYW0gYWN0aW9uLnBheWxvYWRcbiAqIEByZXR1cm5zIG5leHRTdGF0ZVxuICogQHB1YmxpY1xuICovXG5leHBvcnQgY29uc3Qgc2V0VXNlck1hcGJveEFjY2Vzc1Rva2VuVXBkYXRlciA9IChcbiAgc3RhdGU6IFVpU3RhdGUsXG4gIHtwYXlsb2FkOiB1c2VyTWFwYm94VG9rZW59OiBVSVN0YXRlQWN0aW9ucy5TZXRVc2VyTWFwYm94QWNjZXNzVG9rZW5VcGRhdGVyQWN0aW9uXG4pOiBVaVN0YXRlID0+ICh7XG4gIC4uLnN0YXRlLFxuICBleHBvcnRNYXA6IHtcbiAgICAuLi5zdGF0ZS5leHBvcnRNYXAsXG4gICAgW0VYUE9SVF9NQVBfRk9STUFUUy5IVE1MXToge1xuICAgICAgLi4uc3RhdGUuZXhwb3J0TWFwW0VYUE9SVF9NQVBfRk9STUFUUy5IVE1MXSxcbiAgICAgIHVzZXJNYXBib3hUb2tlblxuICAgIH1cbiAgfVxufSk7XG5cbi8qKlxuICogU2V0cyB0aGUgZXhwb3J0IG1hcCBmb3JtYXRcbiAqIEBwYXJhbSBzdGF0ZSAtIGB1aVN0YXRlYFxuICogQHBhcmFtIGFjdGlvblxuICogQHBhcmFtIGFjdGlvbi5wYXlsb2FkIGZvcm1hdCB0byB1c2UgdG8gZXhwb3J0IHRoZSBtYXAgaW50b1xuICogQHJldHVybiBuZXh0U3RhdGVcbiAqL1xuZXhwb3J0IGNvbnN0IHNldEV4cG9ydE1hcEZvcm1hdFVwZGF0ZXIgPSAoXG4gIHN0YXRlOiBVaVN0YXRlLFxuICB7cGF5bG9hZDogZm9ybWF0fTogVUlTdGF0ZUFjdGlvbnMuU2V0RXhwb3J0TWFwRm9ybWF0VXBkYXRlckFjdGlvblxuKTogVWlTdGF0ZSA9PiAoe1xuICAuLi5zdGF0ZSxcbiAgZXhwb3J0TWFwOiB7XG4gICAgLi4uc3RhdGUuZXhwb3J0TWFwLFxuICAgIC8vIEB0cy1leHBlY3QtZXJyb3JcbiAgICBmb3JtYXRcbiAgfVxufSk7XG5cbi8qKlxuICogU2V0IHRoZSBleHBvcnQgaHRtbCBtYXAgbW9kZVxuICogQHBhcmFtIHN0YXRlIC0gYHVpU3RhdGVgXG4gKiBAcGFyYW0gYWN0aW9uXG4gKiBAcGFyYW0gYWN0aW9uLnBheWxvYWQgdG8gYmUgc2V0IChhdmFpbGFibGUgbW9kZXM6IEVYUE9SVF9IVE1MX01BUF9NT0RFUylcbiAqIEByZXR1cm4gbmV4dFN0YXRlXG4gKi9cbmV4cG9ydCBjb25zdCBzZXRFeHBvcnRNYXBIVE1MTW9kZVVwZGF0ZXIgPSAoXG4gIHN0YXRlOiBVaVN0YXRlLFxuICB7cGF5bG9hZDogbW9kZX06IFVJU3RhdGVBY3Rpb25zLlNldEV4cG9ydEhUTUxNYXBNb2RlVXBkYXRlckFjdGlvblxuKTogVWlTdGF0ZSA9PiAoe1xuICAuLi5zdGF0ZSxcbiAgZXhwb3J0TWFwOiB7XG4gICAgLi4uc3RhdGUuZXhwb3J0TWFwLFxuICAgIFtFWFBPUlRfTUFQX0ZPUk1BVFMuSFRNTF06IHtcbiAgICAgIC4uLnN0YXRlLmV4cG9ydE1hcFtFWFBPUlRfTUFQX0ZPUk1BVFMuSFRNTF0sXG4gICAgICBtb2RlXG4gICAgfVxuICB9XG59KTtcblxuLyoqXG4gKiBBZGRzIGEgbmV3IG5vdGlmaWNhdGlvbi5cbiAqIFVwZGF0ZXMgYSBub3RpZmljYXRpb24gaW4gY2FzZSBvZiBtYXRjaGluZyBpZHMuXG4gKiBAbWVtYmVyb2YgdWlTdGF0ZVVwZGF0ZXJzXG4gKiBAcGFyYW0gc3RhdGUgYHVpU3RhdGVgXG4gKiBAcGFyYW0gYWN0aW9uXG4gKiBAcGFyYW0gYWN0aW9uLnBheWxvYWQgUGFyYW1zIG9mIGEgbm90aWZpY2F0aW9uXG4gKiBAcmV0dXJucyBuZXh0U3RhdGVcbiAqIEBwdWJsaWNcbiAqL1xuZXhwb3J0IGNvbnN0IGFkZE5vdGlmaWNhdGlvblVwZGF0ZXIgPSAoXG4gIHN0YXRlOiBVaVN0YXRlLFxuICB7cGF5bG9hZH06IFVJU3RhdGVBY3Rpb25zLkFkZE5vdGlmaWNhdGlvblVwZGF0ZXJBY3Rpb25cbik6IFVpU3RhdGUgPT4ge1xuICBjb25zdCBvbGROb3RpZmljYXRpb25zID0gc3RhdGUubm90aWZpY2F0aW9ucyB8fCBbXTtcbiAgLy8gQHRzLWV4cGVjdC1lcnJvclxuICBjb25zdCBwYXlsb2FkSWQgPSBwYXlsb2FkPy5pZDtcbiAgY29uc3Qgbm90aWZpY2F0aW9uVG9VcGRhdGUgPSBwYXlsb2FkSWQgPyBvbGROb3RpZmljYXRpb25zLmZpbmQobiA9PiBuLmlkID09PSBwYXlsb2FkSWQpIDogbnVsbDtcblxuICBsZXQgbm90aWZpY2F0aW9ucztcbiAgaWYgKG5vdGlmaWNhdGlvblRvVXBkYXRlKSB7XG4gICAgbm90aWZpY2F0aW9ucyA9IG9sZE5vdGlmaWNhdGlvbnMubWFwKG4gPT5cbiAgICAgIG4uaWQgPT09IHBheWxvYWRJZCA/IGNyZWF0ZU5vdGlmaWNhdGlvbih7Li4ucGF5bG9hZCwgY291bnQ6IG4uY291bnQgKyAxfSkgOiBuXG4gICAgKTtcbiAgfSBlbHNlIHtcbiAgICBub3RpZmljYXRpb25zID0gWy4uLm9sZE5vdGlmaWNhdGlvbnMsIGNyZWF0ZU5vdGlmaWNhdGlvbihwYXlsb2FkKV07XG4gIH1cblxuICByZXR1cm4gey4uLnN0YXRlLCBub3RpZmljYXRpb25zfTtcbn07XG5cbi8qKlxuICogUmVtb3ZlIGEgbm90aWZpY2F0aW9uXG4gKiBAbWVtYmVyb2YgdWlTdGF0ZVVwZGF0ZXJzXG4gKiBAcGFyYW0gc3RhdGUgYHVpU3RhdGVgXG4gKiBAcGFyYW0gYWN0aW9uXG4gKiBAcGFyYW0gYWN0aW9uLnBheWxvYWQgaWQgb2YgdGhlIG5vdGlmaWNhdGlvbiB0byBiZSByZW1vdmVkXG4gKiBAcmV0dXJucyBuZXh0U3RhdGVcbiAqIEBwdWJsaWNcbiAqL1xuZXhwb3J0IGNvbnN0IHJlbW92ZU5vdGlmaWNhdGlvblVwZGF0ZXIgPSAoXG4gIHN0YXRlOiBVaVN0YXRlLFxuICB7cGF5bG9hZDogaWR9OiBVSVN0YXRlQWN0aW9ucy5SZW1vdmVOb3RpZmljYXRpb25VcGRhdGVyQWN0aW9uXG4pOiBVaVN0YXRlID0+ICh7XG4gIC4uLnN0YXRlLFxuICBub3RpZmljYXRpb25zOiBzdGF0ZS5ub3RpZmljYXRpb25zLmZpbHRlcihuID0+IG4uaWQgIT09IGlkKVxufSk7XG5cbi8qKlxuICogRmlyZWQgd2hlbiBmaWxlIGxvYWRpbmcgYmVnaW5cbiAqIEBtZW1iZXJvZiB1aVN0YXRlVXBkYXRlcnNcbiAqIEBwYXJhbSBzdGF0ZSBgdWlTdGF0ZWBcbiAqIEByZXR1cm5zIG5leHRTdGF0ZVxuICogQHB1YmxpY1xuICovXG5leHBvcnQgY29uc3QgbG9hZEZpbGVzVXBkYXRlciA9IChzdGF0ZTogVWlTdGF0ZSk6IFVpU3RhdGUgPT4gKHtcbiAgLi4uc3RhdGUsXG4gIGxvYWRGaWxlczoge1xuICAgIC4uLnN0YXRlLmxvYWRGaWxlcyxcbiAgICBmaWxlTG9hZGluZzogdHJ1ZVxuICB9XG59KTtcblxuLyoqXG4gKiBIYW5kbGVzIGxvYWRpbmcgZmlsZSBzdWNjZXNzIGFuZCBzZXQgZmlsZUxvYWRpbmcgcHJvcGVydHkgdG8gZmFsc2VcbiAqIEBtZW1iZXJvZiB1aVN0YXRlVXBkYXRlcnNcbiAqIEBwYXJhbSBzdGF0ZSBgdWlTdGF0ZWBcbiAqIEByZXR1cm5zIG5leHRTdGF0ZVxuICovXG5leHBvcnQgY29uc3QgbG9hZEZpbGVzU3VjY2Vzc1VwZGF0ZXIgPSAoc3RhdGU6IFVpU3RhdGUpOiBVaVN0YXRlID0+ICh7XG4gIC4uLnN0YXRlLFxuICBsb2FkRmlsZXM6IHtcbiAgICAuLi5zdGF0ZS5sb2FkRmlsZXMsXG4gICAgZmlsZUxvYWRpbmc6IGZhbHNlXG4gIH1cbn0pO1xuXG4vKipcbiAqIEhhbmRsZXMgbG9hZCBmaWxlIGVycm9yIGFuZCBzZXQgZmlsZUxvYWRpbmcgcHJvcGVydHkgdG8gZmFsc2VcbiAqIEBtZW1iZXJvZiB1aVN0YXRlVXBkYXRlcnNcbiAqIEBwYXJhbSBzdGF0ZVxuICogQHBhcmFtIGFjdGlvblxuICogQHBhcmFtIGFjdGlvbi5lcnJvclxuICogQHJldHVybnMgbmV4dFN0YXRlXG4gKiBAcHVibGljXG4gKi9cbmV4cG9ydCBjb25zdCBsb2FkRmlsZXNFcnJVcGRhdGVyID0gKHN0YXRlOiBVaVN0YXRlLCB7ZXJyb3J9OiBMb2FkRmlsZXNFcnJVcGRhdGVyQWN0aW9uKTogVWlTdGF0ZSA9PlxuICBhZGROb3RpZmljYXRpb25VcGRhdGVyKFxuICAgIHtcbiAgICAgIC4uLnN0YXRlLFxuICAgICAgbG9hZEZpbGVzOiB7XG4gICAgICAgIC4uLnN0YXRlLmxvYWRGaWxlcyxcbiAgICAgICAgZmlsZUxvYWRpbmc6IGZhbHNlXG4gICAgICB9XG4gICAgfSxcbiAgICB7XG4gICAgICBwYXlsb2FkOiBlcnJvck5vdGlmaWNhdGlvbih7XG4gICAgICAgIG1lc3NhZ2U6IChlcnJvciB8fCB7fSkubWVzc2FnZSB8fCAnRmFpbGVkIHRvIHVwbG9hZCBmaWxlcycsXG4gICAgICAgIHRvcGljOiBERUZBVUxUX05PVElGSUNBVElPTl9UT1BJQ1MuZ2xvYmFsXG4gICAgICB9KVxuICAgIH1cbiAgKTtcblxuLyoqXG4gKiBIYW5kbGVzIHRvZ2dsZSBtYXAgc3BsaXQgYW5kIHJlc2V0IGFsbCBtYXAgY29udHJvbCBpbmRleCB0byAwXG4gKiBAbWVtYmVyb2YgdWlTdGF0ZVVwZGF0ZXJzXG4gKiBAcGFyYW0gc3RhdGVcbiAqIEByZXR1cm5zIG5leHRTdGF0ZVxuICogQHB1YmxpY1xuICovXG5leHBvcnQgY29uc3QgdG9nZ2xlU3BsaXRNYXBVcGRhdGVyID0gKHN0YXRlOiBVaVN0YXRlKTogVWlTdGF0ZSA9PiAoe1xuICAuLi5zdGF0ZSxcbiAgbWFwQ29udHJvbHM6IE9iamVjdC5lbnRyaWVzKHN0YXRlLm1hcENvbnRyb2xzKS5yZWR1Y2UoXG4gICAgKGFjYywgZW50cnkpID0+ICh7XG4gICAgICAuLi5hY2MsXG4gICAgICBbZW50cnlbMF1dOiB7XG4gICAgICAgIC4uLmVudHJ5WzFdLFxuICAgICAgICBhY3RpdmVNYXBJbmRleDogMFxuICAgICAgfVxuICAgIH0pLFxuICAgIHt9IGFzIE1hcENvbnRyb2xzXG4gIClcbn0pO1xuXG4vKipcbiAqIFRvZ2dsZSBtb2RhbCBkYXRhXG4gKiBAbWVtYmVyb2YgdWlTdGF0ZVVwZGF0ZXJzXG4gKiBAcGFyYW0gc3RhdGVcbiAqIEByZXR1cm5zIG5leHRTdGF0ZVxuICogQHB1YmxpY1xuICovXG5leHBvcnQgY29uc3Qgc2hvd0RhdGFzZXRUYWJsZVVwZGF0ZXIgPSAoc3RhdGU6IFVpU3RhdGUpOiBVaVN0YXRlID0+XG4gIHRvZ2dsZU1vZGFsVXBkYXRlcihzdGF0ZSwge3BheWxvYWQ6IERBVEFfVEFCTEVfSUR9KTtcblxuLyoqXG4gKiBTZXQgdGhlIGxvY2FsZSBvZiB0aGUgVUlcbiAqIEBtZW1iZXJvZiB1aVN0YXRlVXBkYXRlcnNcbiAqIEBwYXJhbSBzdGF0ZSBgdWlTdGF0ZWBcbiAqIEBwYXJhbSBhY3Rpb25cbiAqIEBwYXJhbSBhY3Rpb24ucGF5bG9hZFxuICogQHBhcmFtIGFjdGlvbi5wYXlsb2FkLmxvY2FsZSBsb2NhbGVcbiAqIEByZXR1cm5zIG5leHRTdGF0ZVxuICogQHB1YmxpY1xuICovXG5leHBvcnQgY29uc3Qgc2V0TG9jYWxlVXBkYXRlciA9IChcbiAgc3RhdGU6IFVpU3RhdGUsXG4gIHtwYXlsb2FkOiB7bG9jYWxlfX06IFVJU3RhdGVBY3Rpb25zLlNldExvY2FsZVVwZGF0ZXJBY3Rpb25cbik6IFVpU3RhdGUgPT4gKHtcbiAgLi4uc3RhdGUsXG4gIGxvY2FsZVxufSk7XG5cbi8qKlxuICogVG9nZ2xlIGxheWVyIHBhbmVsIGxpc3Qgdmlld1xuICogQG1lbWJlcm9mIHVpU3RhdGVVcGRhdGVyc1xuICogQHBhcmFtIHN0YXRlIGB1aVN0YXRlYFxuICogQHBhcmFtIGFjdGlvblxuICogQHBhcmFtIGFjdGlvbi5wYXlsb2FkIGxheWVyIHBhbmVsIGxpc3RWaWV3IHZhbHVlLiBDYW4gYmUgJ2xpc3QnIG9yICdzb3J0QnlEYXRhc2V0J1xuICogQHJldHVybnMgbmV4dFN0YXRlXG4gKiBAcHVibGljXG4gKi9cbmV4cG9ydCBjb25zdCB0b2dnbGVQYW5lbExpc3RWaWV3VXBkYXRlciA9IChcbiAgc3RhdGU6IFVpU3RhdGUsXG4gIHtwYXlsb2FkOiB7cGFuZWxJZCwgbGlzdFZpZXd9fTogVUlTdGF0ZUFjdGlvbnMuVG9nZ2xlUGFuZWxMaXN0Vmlld0FjdGlvblxuKTogVWlTdGF0ZSA9PiB7XG4gIGNvbnN0IHN0YXRlUHJvcCA9XG4gICAgcGFuZWxJZCA9PT0gJ2xheWVyJ1xuICAgICAgPyAnbGF5ZXJQYW5lbExpc3RWaWV3J1xuICAgICAgOiBwYW5lbElkID09PSAnZmlsdGVyJ1xuICAgICAgPyAnZmlsdGVyUGFuZWxMaXN0VmlldydcbiAgICAgIDogbnVsbDtcbiAgaWYgKCFzdGF0ZVByb3AgfHwgc3RhdGVbc3RhdGVQcm9wXSA9PT0gbGlzdFZpZXcpIHtcbiAgICByZXR1cm4gc3RhdGU7XG4gIH1cbiAgcmV0dXJuIHtcbiAgICAuLi5zdGF0ZSxcbiAgICBbc3RhdGVQcm9wXTogbGlzdFZpZXdcbiAgfTtcbn07XG5cbi8qKlxuICogTWVyZ2UgcmVjZWl2ZWQgdWkgc3RhdGUgY29uZmlnIHdoZW4gbG9hZGluZyBhIHNhdmVkIG1hcFxuICogQG1lbWJlcm9mIHVpU3RhdGVVcGRhdGVyc1xuICogQHBhcmFtIHN0YXRlIGB1aVN0YXRlYFxuICogQHBhcmFtIGFjdGlvblxuICogQHBhcmFtIGFjdGlvbi5wYXlsb2FkIHNhdmVkIG1hcCBjb25maWcgYHttYXBTdHlsZSwgdmlzU3RhdGUsIG1hcFN0YXRlLCB1aVN0YXRlfWBcbiAqIEByZXR1cm5zIG5leHRTdGF0ZVxuICogQHB1YmxpY1xuICovXG5leHBvcnQgY29uc3QgcmVjZWl2ZU1hcENvbmZpZ1VwZGF0ZXIgPSAoXG4gIHN0YXRlOiBVaVN0YXRlLFxuICB7XG4gICAgcGF5bG9hZDoge2NvbmZpZ31cbiAgfToge1xuICAgIHR5cGU/OiAodHlwZW9mIEFjdGlvblR5cGVzKVsnUkVDRUlWRV9NQVBfQ09ORklHJ107XG4gICAgcGF5bG9hZDogUmVjZWl2ZU1hcENvbmZpZ1BheWxvYWQ7XG4gIH1cbik6IFVpU3RhdGUgPT4ge1xuICBjb25zdCB7dWlTdGF0ZX0gPSBjb25maWcgfHwge307XG4gIGlmICghdWlTdGF0ZSkge1xuICAgIHJldHVybiBzdGF0ZTtcbiAgfVxuXG4gIGxldCBuZXdTdGF0ZSA9IHN0YXRlO1xuXG4gIGlmICh1aVN0YXRlLm1hcENvbnRyb2xzPy5tYXBMZWdlbmQ/LmFjdGl2ZSkge1xuICAgIGNvbnN0IGN1cnJlbnRMZWdlbmQgPSBuZXdTdGF0ZS5tYXBDb250cm9scy5tYXBMZWdlbmQ7XG4gICAgbmV3U3RhdGUgPSB7XG4gICAgICAuLi5uZXdTdGF0ZSxcbiAgICAgIG1hcENvbnRyb2xzOiB7XG4gICAgICAgIC4uLm5ld1N0YXRlLm1hcENvbnRyb2xzLFxuICAgICAgICBtYXBMZWdlbmQ6IHtcbiAgICAgICAgICBzaG93OiB0cnVlLFxuICAgICAgICAgIC4uLmN1cnJlbnRMZWdlbmQsXG4gICAgICAgICAgYWN0aXZlOiB0cnVlLFxuICAgICAgICAgIGFjdGl2ZU1hcEluZGV4OiAwXG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9O1xuICB9XG5cbiAgaWYgKHVpU3RhdGUubWFwQ29udHJvbHM/Lm1hcExlZ2VuZD8uc2V0dGluZ3MpIHtcbiAgICBuZXdTdGF0ZSA9IHNldE1hcENvbnRyb2xTZXR0aW5nc1VwZGF0ZXIobmV3U3RhdGUsIHtcbiAgICAgIHBheWxvYWQ6IHtwYW5lbElkOiAnbWFwTGVnZW5kJywgc2V0dGluZ3M6IHVpU3RhdGUubWFwQ29udHJvbHMubWFwTGVnZW5kLnNldHRpbmdzfVxuICAgIH0gYXMgVUlTdGF0ZUFjdGlvbnMuc2V0TWFwQ29udHJvbFNldHRpbmdzVXBkYXRlckFjdGlvbik7XG4gIH1cblxuICBpZiAodWlTdGF0ZS5sb2NhbGUpIHtcbiAgICBuZXdTdGF0ZSA9IHNldExvY2FsZVVwZGF0ZXIobmV3U3RhdGUsIHtcbiAgICAgIHBheWxvYWQ6IHtsb2NhbGU6IHVpU3RhdGUubG9jYWxlfVxuICAgIH0gYXMgVUlTdGF0ZUFjdGlvbnMuU2V0TG9jYWxlVXBkYXRlckFjdGlvbik7XG4gIH1cblxuICByZXR1cm4gbmV3U3RhdGU7XG59O1xuIl0sIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7QUFHQSxJQUFBQSxVQUFBLEdBQUFDLE9BQUE7QUFZQSxJQUFBQyxhQUFBLEdBQUFELE9BQUE7QUFDQSxJQUFBRSxNQUFBLEdBQUFGLE9BQUE7QUFNQSxJQUFBRyxnQkFBQSxHQUFBSCxPQUFBO0FBQThELFNBQUFJLFFBQUFDLENBQUEsRUFBQUMsQ0FBQSxRQUFBQyxDQUFBLEdBQUFDLE1BQUEsQ0FBQUMsSUFBQSxDQUFBSixDQUFBLE9BQUFHLE1BQUEsQ0FBQUUscUJBQUEsUUFBQUMsQ0FBQSxHQUFBSCxNQUFBLENBQUFFLHFCQUFBLENBQUFMLENBQUEsR0FBQUMsQ0FBQSxLQUFBSyxDQUFBLEdBQUFBLENBQUEsQ0FBQUMsTUFBQSxXQUFBTixDQUFBLFdBQUFFLE1BQUEsQ0FBQUssd0JBQUEsQ0FBQVIsQ0FBQSxFQUFBQyxDQUFBLEVBQUFRLFVBQUEsT0FBQVAsQ0FBQSxDQUFBUSxJQUFBLENBQUFDLEtBQUEsQ0FBQVQsQ0FBQSxFQUFBSSxDQUFBLFlBQUFKLENBQUE7QUFBQSxTQUFBVSxjQUFBWixDQUFBLGFBQUFDLENBQUEsTUFBQUEsQ0FBQSxHQUFBWSxTQUFBLENBQUFDLE1BQUEsRUFBQWIsQ0FBQSxVQUFBQyxDQUFBLFdBQUFXLFNBQUEsQ0FBQVosQ0FBQSxJQUFBWSxTQUFBLENBQUFaLENBQUEsUUFBQUEsQ0FBQSxPQUFBRixPQUFBLENBQUFJLE1BQUEsQ0FBQUQsQ0FBQSxPQUFBYSxPQUFBLFdBQUFkLENBQUEsUUFBQWUsZ0JBQUEsYUFBQWhCLENBQUEsRUFBQUMsQ0FBQSxFQUFBQyxDQUFBLENBQUFELENBQUEsU0FBQUUsTUFBQSxDQUFBYyx5QkFBQSxHQUFBZCxNQUFBLENBQUFlLGdCQUFBLENBQUFsQixDQUFBLEVBQUFHLE1BQUEsQ0FBQWMseUJBQUEsQ0FBQWYsQ0FBQSxLQUFBSCxP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
|