@kepler.gl/reducers 3.0.0-alpha.1 → 3.0.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/combined-updaters.js +15 -22
- package/dist/composer-helpers.js +1 -21
- package/dist/composers.js +1 -21
- package/dist/core.js +1 -21
- package/dist/data-utils.js +5 -22
- package/dist/export-utils.js +1 -21
- package/dist/index.js +1 -21
- package/dist/interaction-utils.js +8 -23
- package/dist/layer-utils.js +4 -24
- package/dist/map-state-updaters.js +1 -21
- package/dist/map-state.js +1 -21
- package/dist/map-style-updaters.js +2 -22
- package/dist/map-style.js +1 -21
- package/dist/merger-handler.js +1 -21
- package/dist/middleware.js +6 -22
- package/dist/provider-state-updaters.d.ts +0 -7
- package/dist/provider-state-updaters.js +2 -92
- package/dist/provider-state.js +2 -22
- package/dist/root.js +1 -21
- package/dist/ui-state-updaters.js +1 -21
- package/dist/ui-state.js +1 -21
- package/dist/vis-state-merger.d.ts +5 -1
- package/dist/vis-state-merger.js +30 -36
- package/dist/vis-state-selectors.js +8 -24
- package/dist/vis-state-updaters.d.ts +1 -1
- package/dist/vis-state-updaters.js +48 -28
- package/dist/vis-state.d.ts +4 -4
- package/dist/vis-state.js +1 -21
- package/package.json +20 -19
package/dist/vis-state-merger.js
CHANGED
|
@@ -1,23 +1,3 @@
|
|
|
1
|
-
// Copyright (c) 2023 Uber Technologies, Inc.
|
|
2
|
-
//
|
|
3
|
-
// Permission is hereby granted, free of charge, to any person obtaining a copy
|
|
4
|
-
// of this software and associated documentation files (the "Software"), to deal
|
|
5
|
-
// in the Software without restriction, including without limitation the rights
|
|
6
|
-
// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
|
|
7
|
-
// copies of the Software, and to permit persons to whom the Software is
|
|
8
|
-
// furnished to do so, subject to the following conditions:
|
|
9
|
-
//
|
|
10
|
-
// The above copyright notice and this permission notice shall be included in
|
|
11
|
-
// all copies or substantial portions of the Software.
|
|
12
|
-
//
|
|
13
|
-
// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
|
14
|
-
// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
|
15
|
-
// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
|
16
|
-
// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
|
17
|
-
// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
|
18
|
-
// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
|
|
19
|
-
// THE SOFTWARE.
|
|
20
|
-
|
|
21
1
|
"use strict";
|
|
22
2
|
|
|
23
3
|
var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault");
|
|
@@ -31,6 +11,7 @@ exports.isSavedLayerConfigV1 = isSavedLayerConfigV1;
|
|
|
31
11
|
exports.parseLayerConfig = parseLayerConfig;
|
|
32
12
|
exports.createLayerFromConfig = createLayerFromConfig;
|
|
33
13
|
exports.serializeLayer = serializeLayer;
|
|
14
|
+
exports.serializeEffect = serializeEffect;
|
|
34
15
|
exports.serializeVisState = serializeVisState;
|
|
35
16
|
exports.mergeLayers = mergeLayers;
|
|
36
17
|
exports.insertLayerAtRightOrder = insertLayerAtRightOrder;
|
|
@@ -65,6 +46,8 @@ var _lodash2 = _interopRequireDefault(require("lodash.pick"));
|
|
|
65
46
|
|
|
66
47
|
var _lodash3 = _interopRequireDefault(require("lodash.flattendeep"));
|
|
67
48
|
|
|
49
|
+
var _deepmerge = _interopRequireDefault(require("deepmerge"));
|
|
50
|
+
|
|
68
51
|
var _utils = require("@kepler.gl/utils");
|
|
69
52
|
|
|
70
53
|
var _reducers = require("@kepler.gl/reducers");
|
|
@@ -247,6 +230,20 @@ function serializeLayer(newLayer, schema) {
|
|
|
247
230
|
}, schema);
|
|
248
231
|
return serializedVisState === null || serializedVisState === void 0 ? void 0 : (_serializedVisState$l = serializedVisState.layers) === null || _serializedVisState$l === void 0 ? void 0 : _serializedVisState$l[0];
|
|
249
232
|
}
|
|
233
|
+
/**
|
|
234
|
+
* Get loaded effect from state
|
|
235
|
+
*/
|
|
236
|
+
|
|
237
|
+
|
|
238
|
+
function serializeEffect(newEffect, schema) {
|
|
239
|
+
var _serializedVisState$e;
|
|
240
|
+
|
|
241
|
+
var serializedVisState = serializeVisState({
|
|
242
|
+
effects: [newEffect],
|
|
243
|
+
effectOrder: [newEffect.id]
|
|
244
|
+
}, schema);
|
|
245
|
+
return serializedVisState === null || serializedVisState === void 0 ? void 0 : (_serializedVisState$e = serializedVisState.effects) === null || _serializedVisState$e === void 0 ? void 0 : _serializedVisState$e[0];
|
|
246
|
+
}
|
|
250
247
|
/**
|
|
251
248
|
* Get vis state config
|
|
252
249
|
*/
|
|
@@ -451,9 +448,9 @@ function mergeSplitMaps(state) {
|
|
|
451
448
|
return l.id === id;
|
|
452
449
|
}) ? merged : unmerged; // create map panel if current map is not split
|
|
453
450
|
|
|
454
|
-
pushTo[i] = pushTo[i] || {
|
|
451
|
+
pushTo[i] = pushTo[i] || _objectSpread(_objectSpread({}, sm), {}, {
|
|
455
452
|
layers: pushTo === merged ? (0, _utils.getInitialMapLayersForSplitMap)(state.layers) : []
|
|
456
|
-
};
|
|
453
|
+
});
|
|
457
454
|
pushTo[i].layers = _objectSpread(_objectSpread({}, pushTo[i].layers), {}, (0, _defineProperty2["default"])({}, id, value));
|
|
458
455
|
});
|
|
459
456
|
} else {
|
|
@@ -473,13 +470,10 @@ function mergeSplitMaps(state) {
|
|
|
473
470
|
|
|
474
471
|
function mergeEffects(state, effects, fromConfig) {
|
|
475
472
|
var newEffects = [].concat((0, _toConsumableArray2["default"])(state.effects), (0, _toConsumableArray2["default"])((effects || []).map(function (effect) {
|
|
476
|
-
return fromConfig ?
|
|
477
|
-
|
|
478
|
-
|
|
479
|
-
|
|
480
|
-
isConfigActive: false
|
|
481
|
-
}
|
|
482
|
-
})) : effect;
|
|
473
|
+
return fromConfig ? (0, _effects.createEffect)(_deepmerge["default"].all([effect, {
|
|
474
|
+
// collapse all panels when loading effects
|
|
475
|
+
isConfigActive: false
|
|
476
|
+
}])) : effect;
|
|
483
477
|
}).filter(function (effect) {
|
|
484
478
|
return Boolean(effect && effect.isValidToSave());
|
|
485
479
|
})));
|
|
@@ -816,12 +810,8 @@ function validateLayerWithData(_ref10, savedLayer, layerClasses) {
|
|
|
816
810
|
} else if (!options.allowEmptyColumn) {
|
|
817
811
|
return null;
|
|
818
812
|
}
|
|
819
|
-
}
|
|
820
|
-
// find visual channel field by matching both name and type
|
|
821
|
-
// refer to vis-state-schema.js VisualChannelSchemaV1
|
|
822
|
-
|
|
813
|
+
}
|
|
823
814
|
|
|
824
|
-
newLayer = validateSavedVisualChannels(fields, newLayer, savedLayer, options);
|
|
825
815
|
var textLabel = savedLayer.config.textLabel && newLayer.config.textLabel ? validateSavedTextLabel(fields, newLayer.config.textLabel, savedLayer.config.textLabel, options) : newLayer.config.textLabel; // copy visConfig over to emptyLayer to make sure it has all the props
|
|
826
816
|
|
|
827
817
|
var visConfig = newLayer.copyLayerConfig(newLayer.config.visConfig, savedLayer.config.visConfig || {}, {
|
|
@@ -830,7 +820,11 @@ function validateLayerWithData(_ref10, savedLayer, layerClasses) {
|
|
|
830
820
|
newLayer.updateLayerConfig({
|
|
831
821
|
visConfig: visConfig,
|
|
832
822
|
textLabel: textLabel
|
|
833
|
-
});
|
|
823
|
+
}); // visual channel field is saved to be {name, type}
|
|
824
|
+
// find visual channel field by matching both name and type
|
|
825
|
+
// refer to vis-state-schema.js VisualChannelSchemaV1
|
|
826
|
+
|
|
827
|
+
newLayer = validateSavedVisualChannels(fields, newLayer, savedLayer, options);
|
|
834
828
|
|
|
835
829
|
if (throwOnError) {
|
|
836
830
|
if (!newLayer.isValidToSave()) {
|
|
@@ -918,4 +912,4 @@ var VIS_STATE_MERGERS = [{
|
|
|
918
912
|
prop: 'editor'
|
|
919
913
|
}];
|
|
920
914
|
exports.VIS_STATE_MERGERS = VIS_STATE_MERGERS;
|
|
921
|
-
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uL3NyYy92aXMtc3RhdGUtbWVyZ2VyLnRzIl0sIm5hbWVzIjpbIm1lcmdlRmlsdGVycyIsInN0YXRlIiwiZmlsdGVyc1RvTWVyZ2UiLCJmcm9tQ29uZmlnIiwicHJlc2VydmVGaWx0ZXJPcmRlciIsIm1hcCIsImwiLCJpZCIsIkFycmF5IiwiaXNBcnJheSIsImxlbmd0aCIsInZhbGlkYXRlZCIsImZhaWxlZCIsInVwZGF0ZWREYXRhc2V0cyIsInVwZGF0ZWRGaWx0ZXJzIiwiaW5zZXJ0SXRlbUJhc2VkT25QcmVzZXJ2ZWRPcmRlciIsImZpbHRlcnMiLCJkYXRhc2V0c1RvRmlsdGVyIiwiZiIsImRhdGFJZCIsImZpbHRlcmVkIiwibGF5ZXJzIiwiZGF0YXNldHMiLCJmaWx0ZXJUb0JlTWVyZ2VkIiwicmVwbGFjZUZpbHRlckRhdGFzZXRJZHMiLCJzYXZlZEZpbHRlciIsImRhdGFJZFRvVXNlIiwicmVwbGFjZWQiLCJmb3JFYWNoIiwiZmlsdGVyIiwiaW5jbHVkZXMiLCJuZXdEYXRhSWQiLCJkIiwicHVzaCIsImlzU2F2ZWRMYXllckNvbmZpZ1YxIiwibGF5ZXJDb25maWciLCJ2aXN1YWxDaGFubmVscyIsInBhcnNlTGF5ZXJDb25maWciLCJzY2hlbWEiLCJzYXZlZENvbmZpZyIsInZlcnNpb24iLCJDVVJSRU5UX1ZFUlNJT04iLCJjb25maWciLCJ2aXNTdGF0ZSIsImxheWVyT3JkZXIiLCJwYXJzZVNhdmVkQ29uZmlnIiwiY3VycmVudEl0ZW1zIiwiaXRlbXMiLCJwcmVzZXJ2ZWRPcmRlciIsImRlZmF1bHRTdGFydCIsIm5ld0l0ZW1zIiwiaXRlbSIsImV4cGVjdGVkSWR4IiwiaW5kZXhPZiIsImluc2VydEF0IiwiaSIsInByZWNlZWRJZHgiLCJwcmVjZWVkSXRlbUlkIiwiZmluZEluZGV4IiwiY3JlYXRlTGF5ZXJGcm9tQ29uZmlnIiwicGFyc2VkTGF5ZXJDb25maWciLCJ2YWxpZGF0ZUxheWVyc0J5RGF0YXNldHMiLCJsYXllckNsYXNzZXMiLCJhbGxvd0VtcHR5Q29sdW1uIiwibmV3TGF5ZXIiLCJ1cGRhdGVMYXllckRvbWFpbiIsInNlcmlhbGl6ZUxheWVyIiwic2VyaWFsaXplZFZpc1N0YXRlIiwic2VyaWFsaXplVmlzU3RhdGUiLCJzYXZlZFN0YXRlIiwiZ2V0Q29uZmlnVG9TYXZlIiwidW5kZWZpbmVkIiwibWVyZ2VMYXllcnMiLCJsYXllcnNUb01lcmdlIiwicHJlc2VydmVMYXllck9yZGVyIiwidW5tZXJnZWQiLCJ0b01lcmdlIiwiaXNNZXJnaW5nRGF0YXNldHMiLCJtZXJnZWRMYXllciIsImluc2VydExheWVyQXRSaWdodE9yZGVyIiwibmV3TGF5ZXJPcmRlciIsIm5ld0xheWVycyIsImxheWVyVG9CZU1lcmdlZCIsImN1cnJlbnRMYXllcnMiLCJsYXllcnNUb0luc2VydCIsImN1cnJlbnRPcmRlciIsImN1cnJlbnRMYXllclF1ZXVlIiwibGF5ZXIiLCJCb29sZWFuIiwiY29uY2F0IiwibmV3TGF5ZXJPcmRlclF1ZXVlIiwibWVyZ2VJbnRlcmFjdGlvbnMiLCJpbnRlcmFjdGlvblRvQmVNZXJnZWQiLCJtZXJnZWQiLCJPYmplY3QiLCJrZXlzIiwia2V5IiwiaW50ZXJhY3Rpb25Db25maWciLCJjdXJyZW50Q29uZmlnIiwiZW5hYmxlZCIsImNvbmZpZ1NhdmVkIiwiY29uZmlnVG9NZXJnZSIsIm1lcmdlSW50ZXJhY3Rpb25Ub29sdGlwQ29uZmlnIiwibWVyZ2VkVG9vbHRpcCIsInVubWVyZ2VkVG9vbHRpcCIsImZpZWxkc1RvU2hvdyIsInRvb2x0aXAiLCJuZXh0U3RhdGUiLCJzYXZlZFVubWVyZ2VkSW50ZXJhY3Rpb24iLCJyZXBsYWNlSW50ZXJhY3Rpb25EYXRhc2V0SWRzIiwiZGF0YUlkVG9SZXBsYWNlIiwibWVyZ2VTcGxpdE1hcHMiLCJzcGxpdE1hcHMiLCJzbSIsImVudHJpZXMiLCJ2YWx1ZSIsInB1c2hUbyIsImZpbmQiLCJzcGxpdE1hcHNUb0JlTWVyZ2VkIiwibWVyZ2VFZmZlY3RzIiwiZWZmZWN0cyIsIm5ld0VmZmVjdHMiLCJlZmZlY3QiLCJpc0NvbmZpZ0FjdGl2ZSIsImlzVmFsaWRUb1NhdmUiLCJlZmZlY3RPcmRlciIsInRvb2x0aXBDb25maWciLCJhbGxGaWVsZHMiLCJmaWVsZHMiLCJuYW1lIiwiZm91bmRGaWVsZHNUb1Nob3ciLCJmaWVsZCIsIm1lcmdlTGF5ZXJCbGVuZGluZyIsImxheWVyQmxlbmRpbmciLCJMQVlFUl9CTEVORElOR1MiLCJtZXJnZU92ZXJsYXlCbGVuZGluZyIsIm92ZXJsYXlCbGVuZGluZyIsIk9WRVJMQVlfQkxFTkRJTkdTIiwibWVyZ2VBbmltYXRpb25Db25maWciLCJhbmltYXRpb24iLCJjdXJyZW50VGltZSIsImFuaW1hdGlvbkNvbmZpZyIsImRvbWFpbiIsInZhbGlkYXRlU2F2ZWRMYXllckNvbHVtbnMiLCJzYXZlZENvbHMiLCJlbXB0eUNvbHMiLCJvcHRpb25zIiwiY29sdW1ucyIsInNhdmVkIiwiZmllbGRJZHgiLCJhbGxDb2xGb3VuZCIsImV2ZXJ5IiwidmFsaWRhdGVDb2x1bW4iLCJydiIsInRocm93T25FcnJvciIsInJlcXVpcmVkQ29sdW1ucyIsImsiLCJvcHRpb25hbCIsIm1pc3NpbmdDb2x1bW5zIiwiRXJyb3IiLCJqb2luIiwiY29uZmlnQ29sdW1ucyIsImludmFsaWRDb2x1bW5zIiwiY29sdW1uIiwidmFsaWRhdG9yIiwidmFsaWRhdGVTYXZlZFRleHRMYWJlbCIsInNhdmVkVGV4dExhYmVsIiwibGF5ZXJUZXh0TGFiZWwiLCJzYXZlZFRleHRMYWJlbHMiLCJ0ZXh0TGFiZWwiLCJmZCIsIkpTT04iLCJzdHJpbmdpZnkiLCJyZWR1Y2UiLCJhY2N1IiwidmFsaWRhdGVTYXZlZFZpc3VhbENoYW5uZWxzIiwic2F2ZWRMYXllciIsInZhbHVlcyIsInNjYWxlIiwiZm91bmRGaWVsZCIsImZvdW5kQ2hhbm5lbCIsInVwZGF0ZUxheWVyQ29uZmlnIiwidmFsaWRhdGVWaXN1YWxDaGFubmVsIiwiZmllbGROYW1lIiwidmFsaWRhdGVMYXllciIsInZhbGlkYXRlTGF5ZXJXaXRoRGF0YSIsInR5cGUiLCJoYXNPd25Qcm9wZXJ0eSIsImxhYmVsIiwiY29sb3IiLCJpc1Zpc2libGUiLCJoaWRkZW4iLCJoaWdobGlnaHRDb2xvciIsImNvbHVtbkNvbmZpZyIsImdldExheWVyQ29sdW1ucyIsInZpc0NvbmZpZyIsImNvcHlMYXllckNvbmZpZyIsInNoYWxsb3dDb3B5IiwibWVyZ2VFZGl0b3IiLCJzYXZlZEVkaXRvciIsImVkaXRvciIsImZlYXR1cmVzIiwidmlzaWJsZSIsIm1lcmdlRGF0YXNldHNCeU9yZGVyIiwibmV3RGF0YUVudHJpZXMiLCJwcmVzZXJ2ZURhdGFzZXRPcmRlciIsIm5ld0RhdGFzZXRJZHMiLCJWSVNfU1RBVEVfTUVSR0VSUyIsIm1lcmdlIiwicHJvcCIsInRvTWVyZ2VQcm9wIiwicHJlc2VydmVPcmRlciIsInJlcGxhY2VQYXJlbnREYXRhc2V0SWRzIiwic2F2ZVVubWVyZ2VkIl0sIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztBQW9CQTs7QUFDQTs7QUFDQTs7QUFDQTs7QUFRQTs7QUFHQTs7QUFDQTs7QUFDQTs7QUFZQTs7Ozs7Ozs7Ozs7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNPLFNBQVNBLFlBQVQsQ0FDTEMsS0FESyxFQUVMQyxjQUZLLEVBR0xDLFVBSEssRUFJRjtBQUNILE1BQU1DLG1CQUFtQixHQUFHRCxVQUFVLEdBQ2xDRCxjQURrQyxhQUNsQ0EsY0FEa0MsdUJBQ2xDQSxjQUFjLENBQUVHLEdBQWhCLENBQW9CLFVBQUFDLENBQUM7QUFBQSxXQUFJQSxDQUFDLENBQUNDLEVBQU47QUFBQSxHQUFyQixDQURrQyxHQUVsQ04sS0FBSyxDQUFDRyxtQkFGVjs7QUFJQSxNQUFJLENBQUNJLEtBQUssQ0FBQ0MsT0FBTixDQUFjUCxjQUFkLENBQUQsSUFBa0MsQ0FBQ0EsY0FBYyxDQUFDUSxNQUF0RCxFQUE4RDtBQUM1RCxXQUFPVCxLQUFQO0FBQ0Q7O0FBUEUsOEJBUzBDLDBDQUE4QkEsS0FBOUIsRUFBcUND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S0FBSyxFQUFFVixXQUFSO0FBQXFCVyxFQUFBQSxJQUFJLEVBQUU7QUFBM0IsQ0E3QnFELENBQWhEIiwic291cmNlc0NvbnRlbnQiOlsiLy8gQ29weXJpZ2h0IChjKSAyMDIzIFViZXIgVGVjaG5vbG9naWVzLCBJbmMuXG4vL1xuLy8gUGVybWlzc2lvbiBpcyBoZXJlYnkgZ3JhbnRlZCwgZnJlZSBvZiBjaGFyZ2UsIHRvIGFueSBwZXJzb24gb2J0YWluaW5nIGEgY29weVxuLy8gb2YgdGhpcyBzb2Z0d2FyZSBhbmQgYXNzb2NpYXRlZCBkb2N1bWVudGF0aW9uIGZpbGVzICh0aGUgXCJTb2Z0d2FyZVwiKSwgdG8gZGVhbFxuLy8gaW4gdGhlIFNvZnR3YXJlIHdpdGhvdXQgcmVzdHJpY3Rpb24sIGluY2x1ZGluZyB3aXRob3V0IGxpbWl0YXRpb24gdGhlIHJpZ2h0c1xuLy8gdG8gdXNlLCBjb3B5LCBtb2RpZnksIG1lcmdlLCBwdWJsaXNoLCBkaXN0cmlidXRlLCBzdWJsaWNlbnNlLCBhbmQvb3Igc2VsbFxuLy8gY29waWVzIG9mIHRoZSBTb2Z0d2FyZSwgYW5kIHRvIHBlcm1pdCBwZXJzb25zIHRvIHdob20gdGhlIFNvZnR3YXJlIGlzXG4vLyBmdXJuaXNoZWQgdG8gZG8gc28sIHN1YmplY3QgdG8gdGhlIGZvbGxvd2luZyBjb25kaXRpb25zOlxuLy9cbi8vIFRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlIGFuZCB0aGlzIHBlcm1pc3Npb24gbm90aWNlIHNoYWxsIGJlIGluY2x1ZGVkIGluXG4vLyBhbGwgY29waWVzIG9yIHN1YnN0YW50aWFsIHBvcnRpb25zIG9mIHRoZSBTb2Z0d2FyZS5cbi8vXG4vLyBUSEUgU09GVFdBUkUgSVMgUFJPVklERUQgXCJBUyBJU1wiLCBXSVRIT1VUIFdBUlJBTlRZIE9GIEFOWSBLSU5ELCBFWFBSRVNTIE9SXG4vLyBJTVBMSUVELCBJTkNMVURJTkcgQlVUIE5PVCBMSU1JVEVEIFRPIFRIRSBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSxcbi8vIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFORCBOT05JTkZSSU5HRU1FTlQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRVxuLy8gQVVUSE9SUyBPUiBDT1BZUklHSFQgSE9MREVSUyBCRSBMSUFCTEUgRk9SIEFOWSBDTEFJTSwgREFNQUdFUyBPUiBPVEhFUlxuLy8gTElBQklMSVRZLCBXSEVUSEVSIElOIEFOIEFDVElPTiBPRiBDT05UUkFDVCwgVE9SVCBPUiBPVEhFUldJU0UsIEFSSVNJTkcgRlJPTSxcbi8vIE9VVCBPRiBPUiBJTiBDT05ORUNUSU9OIFdJVEggVEhFIFNPRlRXQVJFIE9SIFRIRSBVU0UgT1IgT1RIRVIgREVBTElOR1MgSU5cbi8vIFRIRSBTT0ZUV0FSRS5cblxuaW1wb3J0IHVuaXEgZnJvbSAnbG9kYXNoLnVuaXEnO1xuaW1wb3J0IHBpY2sgZnJvbSAnbG9kYXNoLnBpY2snO1xuaW1wb3J0IGZsYXR0ZW5EZWVwIGZyb20gJ2xvZGFzaC5mbGF0dGVuZGVlcCc7XG5pbXBvcnQge1xuICBhcnJheUluc2VydCxcbiAgZ2V0SW5pdGlhbE1hcExheWVyc0ZvclNwbGl0TWFwLFxuICBhcHBseUZpbHRlcnNUb0RhdGFzZXRzLFxuICB2YWxpZGF0ZUZpbHRlcnNVcGRhdGVEYXRhc2V0cyxcbiAgZmluZEJ5SWQsXG4gIG1lcmdlRWZmZWN0UGFyYW1zXG59IGZyb20gJ0BrZXBsZXIuZ2wvdXRpbHMnO1xuaW1wb3J0IHtnZXRMYXllck9yZGVyRnJvbUxheWVyc30gZnJvbSAnQGtlcGxlci5nbC9yZWR1Y2Vycyc7XG5cbmltcG9ydCB7TGF5ZXJDb2x1bW5zLCBMYXllckNvbHVtbiwgTGF5ZXJ9IGZyb20gJ0BrZXBsZXIuZ2wvbGF5ZXJzJztcbmltcG9ydCB7Y3JlYXRlRGVja0VmZmVjdEZyb21Db25maWd9IGZyb20gJ0BrZXBsZXIuZ2wvZWZmZWN0cyc7XG5pbXBvcnQge0xBWUVSX0JMRU5ESU5HUywgT1ZFUkxBWV9CTEVORElOR1N9IGZyb20gJ0BrZXBsZXIuZ2wvY29uc3RhbnRzJztcbmltcG9ydCB7Q1VSUkVOVF9WRVJTSU9OLCBWaXNTdGF0ZSwgVmlzU3RhdGVNZXJnZXJzLCBLZXBsZXJHTFNjaGVtYUNsYXNzfSBmcm9tICdAa2VwbGVyLmdsL3NjaGVtYXMnO1xuXG5pbXBvcnQge1xuICBQYXJzZWRMYXllcixcbiAgUGFyc2VkVmlzU3RhdGUsXG4gIFNhdmVkSW50ZXJhY3Rpb25Db25maWcsXG4gIFRvb2x0aXBJbmZvLFxuICBTYXZlZEVkaXRvcixcbiAgUGFyc2VkQ29uZmlnLFxuICBGaWx0ZXIsXG4gIEVmZmVjdCBhcyBFZmZlY3RUeXBlXG59IGZyb20gJ0BrZXBsZXIuZ2wvdHlwZXMnO1xuaW1wb3J0IHtLZXBsZXJUYWJsZSwgRGF0YXNldHMsIGFzc2lnbkdwdUNoYW5uZWxzLCByZXNldEZpbHRlckdwdU1vZGV9IGZyb20gJ0BrZXBsZXIuZ2wvdGFibGUnO1xuXG4vKipcbiAqIE1lcmdlIGxvYWRlZCBmaWx0ZXJzIHdpdGggY3VycmVudCBzdGF0ZSwgaWYgbm8gZmllbGRzIG9yIGRhdGEgYXJlIGxvYWRlZFxuICogc2F2ZSBpdCBmb3IgbGF0ZXJcbiAqXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBtZXJnZUZpbHRlcnM8UyBleHRlbmRzIFZpc1N0YXRlPihcbiAgc3RhdGU6IFMsXG4gIGZpbHRlcnNUb01lcmdlOiBOb25OdWxsYWJsZTxQYXJzZWRDb25maWdbJ3Zpc1N0YXRlJ10+WydmaWx0ZXJzJ10sXG4gIGZyb21Db25maWc/OiBib29sZWFuXG4pOiBTIHtcbiAgY29uc3QgcHJlc2VydmVGaWx0ZXJPcmRlciA9IGZyb21Db25maWdcbiAgICA/IGZpbHRlcnNUb01lcmdlPy5tYXAobCA9PiBsLmlkKVxuICAgIDogc3RhdGUucHJlc2VydmVGaWx0ZXJPcmRlcjtcblxuICBpZiAoIUFycmF5LmlzQXJyYXkoZmlsdGVyc1RvTWVyZ2UpIHx8ICFmaWx0ZXJzVG9NZXJnZS5sZW5ndGgpIHtcbiAgICByZXR1cm4gc3RhdGU7XG4gIH1cblxuICBjb25zdCB7dmFsaWRhdGVkLCBmYWlsZWQsIHVwZGF0ZWREYXRhc2V0c30gPSB2YWxpZGF0ZUZpbHRlcnNVcGRhdGVEYXRhc2V0cyhzdGF0ZSwgZmlsdGVyc1RvTWVyZ2UpO1xuICBsZXQgdXBkYXRlZEZpbHRlcnMgPSBpbnNlcnRJdGVtQmFzZWRPblByZXNlcnZlZE9yZGVyKFxuICAgIHN0YXRlLmZpbHRlcnMsXG4gICAgdmFsaWRhdGVkLFxuICAgIHByZXNlcnZlRmlsdGVyT3JkZXJcbiAgKTtcblxuICAvLyBtZXJnZSBmaWx0ZXIgd2l0aCBleGlzdGluZ1xuICB1cGRhdGVkRmlsdGVycyA9IHJlc2V0RmlsdGVyR3B1TW9kZSh1cGRhdGVkRmlsdGVycyk7XG4gIHVwZGF0ZWRGaWx0ZXJzID0gYXNzaWduR3B1Q2hhbm5lbHModXBkYXRlZEZpbHRlcnMpO1xuICAvLyBmaWx0ZXIgZGF0YVxuICBjb25zdCBkYXRhc2V0c1RvRmlsdGVyID0gdW5pcShmbGF0dGVuRGVlcCh2YWxpZGF0ZWQubWFwKGYgPT4gZi5kYXRhSWQpKSk7XG5cbiAgY29uc3QgZmlsdGVyZWQgPSBhcHBseUZpbHRlcnNUb0RhdGFzZXRzKFxuICAgIGRhdGFzZXRzVG9GaWx0ZXIsXG4gICAgdXBkYXRlZERhdGFzZXRzLFxuICAgIHVwZGF0ZWRGaWx0ZXJzLFxuICAgIHN0YXRlLmxheWVyc1xuICApO1xuXG4gIHJldHVybiB7XG4gICAgLi4uc3RhdGUsXG4gICAgZmlsdGVyczogdXBkYXRlZEZpbHRlcnMsXG4gICAgZGF0YXNldHM6IGZpbHRlcmVkLFxuICAgIHByZXNlcnZlRmlsdGVyT3JkZXIsXG4gICAgZmlsdGVyVG9CZU1lcmdlZDogWy4uLnN0YXRlLmZpbHRlclRvQmVNZXJnZWQsIC4uLmZhaWxlZF1cbiAgfTtcbn1cblxuLy8gcmVwbGFjZSBkYXRhSWQgaW4gc2F2ZWQgRmlsdGVyXG5leHBvcnQgZnVuY3Rpb24gcmVwbGFjZUZpbHRlckRhdGFzZXRJZHMoXG4gIHNhdmVkRmlsdGVyOiBGaWx0ZXJbXSxcbiAgZGF0YUlkOiBzdHJpbmcsXG4gIGRhdGFJZFRvVXNlOiBzdHJpbmdcbikge1xuICBjb25zdCByZXBsYWNlZDogRmlsdGVyW10gPSBbXTtcbiAgc2F2ZWRGaWx0ZXIuZm9yRWFjaChmaWx0ZXIgPT4ge1xuICAgIGlmIChmaWx0ZXIuZGF0YUlkLmluY2x1ZGVzKGRhdGFJZCkpIHtcbiAgICAgIGNvbnN0IG5ld0RhdGFJZCA9IGZpbHRlci5kYXRhSWQubWFwKGQgPT4gKGQgPT09IGRhdGFJZCA/IGRhdGFJZFRvVXNlIDogZCkpO1xuICAgICAgcmVwbGFjZWQucHVzaCh7XG4gICAgICAgIC4uLmZpbHRlcixcbiAgICAgICAgZGF0YUlkOiBuZXdEYXRhSWRcbiAgICAgIH0pO1xuICAgIH1cbiAgfSk7XG4gIHJldHVybiByZXBsYWNlZC5sZW5ndGggPyByZXBsYWNlZCA6IG51bGw7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBpc1NhdmVkTGF5ZXJDb25maWdWMShsYXllckNvbmZpZzogYW55KTogYm9vbGVhbiB7XG4gIC8vIGV4cG9ydGVkIGxheWVyIGNvbmZpZ3VyYXRpb24gY29udGFpbnMgdmlzdWFsQ2hhbm5lbHMgcHJvcGVydHlcbiAgcmV0dXJuIGxheWVyQ29uZmlnPy52aXN1YWxDaGFubmVscztcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHBhcnNlTGF5ZXJDb25maWcoXG4gIHNjaGVtYTogS2VwbGVyR0xTY2hlbWFDbGFzcyxcbiAgbGF5ZXJDb25maWc6IGFueVxuKTogUGFyc2VkTGF5ZXIgfCB1bmRlZmluZWQge1xuICAvLyBhc3N1bWUgdGhlIGxheWVyIGNvbmZpZyBpcyBjdXJyZW50IHZlcnNpb25cbiAgY29uc3Qgc2F2ZWRDb25maWcgPSB7XG4gICAgdmVyc2lvbjogQ1VSUkVOVF9WRVJTSU9OLFxuICAgIGNvbmZpZzoge1xuICAgICAgdmlzU3RhdGU6IHtsYXllcnM6IFtsYXllckNvbmZpZ10sIGxheWVyT3JkZXI6IFtsYXllckNvbmZpZy5pZF19XG4gICAgfVxuICB9O1xuXG4gIHJldHVybiBzY2hlbWEucGFyc2VTYXZlZENvbmZpZyhzYXZlZENvbmZpZyk/LnZpc1N0YXRlPy5sYXllcnM/LlswXTtcbn1cblxuZnVuY3Rpb24gaW5zZXJ0SXRlbUJhc2VkT25QcmVzZXJ2ZWRPcmRlcihcbiAgY3VycmVudEl0ZW1zOiBGaWx0ZXJbXSxcbiAgaXRlbXM6IEZpbHRlcltdLFxuICBwcmVzZXJ2ZWRPcmRlcjogYW55W10gPSBbXSxcbiAgZGVmYXVsdFN0YXJ0PzogYm9vbGVhblxuKSB7XG4gIGxldCBuZXdJdGVtcyA9IFsuLi5jdXJyZW50SXRlbXNdO1xuXG4gIGZvciAoY29uc3QgaXRlbSBvZiBpdGVtcykge1xuICAgIGNvbnN0IGV4cGVjdGVkSWR4ID0gcHJlc2VydmVkT3JkZXIuaW5kZXhPZihpdGVtLmlkKTtcbiAgICAvLyBpbnNlcnRBdCB0aGUgZW5kIGJ5IGRlZmF1bHRcbiAgICBsZXQgaW5zZXJ0QXQgPSBkZWZhdWx0U3RhcnQgPyAwIDogbmV3SXRlbXMubGVuZ3RoO1xuICAgIGlmIChleHBlY3RlZElkeCA+IDApIHtcbiAgICAgIC8vIGxvb2sgZm9yIGxheWVyIHRvIGluc2VydCBhZnRlclxuICAgICAgbGV0IGkgPSBleHBlY3RlZElkeCArIDE7XG4gICAgICBsZXQgcHJlY2VlZElkeCA9IC0xO1xuICAgICAgd2hpbGUgKGktLSA+IDAgJiYgcHJlY2VlZElkeCA8IDApIHtcbiAgICAgICAgLy8ga2VlcCBsb29raW5nIGZvciBwcmVjZWVkIGxheWVyIHRoYXQgaXMgYWxyZWFkeSBsb2FkZWRcbiAgICAgICAgY29uc3QgcHJlY2VlZEl0ZW1JZCA9IHByZXNlcnZlZE9yZGVyW2kgLSAxXTtcbiAgICAgICAgcHJlY2VlZElkeCA9IG5ld0l0ZW1zLmZpbmRJbmRleChkID0+IGQuaWQgPT09IHByZWNlZWRJdGVtSWQpO1xuICAgICAgfVxuICAgICAgaWYgKHByZWNlZWRJZHggPiAtMSkge1xuICAgICAgICAvLyBpZiBmb3VuZFxuICAgICAgICBpbnNlcnRBdCA9IHByZWNlZWRJZHggKyAxO1xuICAgICAgfVxuICAgIH1cbiAgICBuZXdJdGVtcyA9IGFycmF5SW5zZXJ0KG5ld0l0ZW1zLCBpbnNlcnRBdCwgaXRlbSk7XG4gIH1cbiAgcmV0dXJuIG5ld0l0ZW1zO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gY3JlYXRlTGF5ZXJGcm9tQ29uZmlnKHN0YXRlOiBWaXNTdGF0ZSwgbGF5ZXJDb25maWc6IGFueSk6IExheWVyIHwgbnVsbCB7XG4gIC8vIGNoZWNrIGlmIHRoZSBsYXllciBjb25maWcgaXMgcGFyc2VkXG4gIGNvbnN0IHBhcnNlZExheWVyQ29uZmlnID0gaXNTYXZlZExheWVyQ29uZmlnVjEobGF5ZXJDb25maWcpXG4gICAgPyBwYXJzZUxheWVyQ29uZmlnKHN0YXRlLnNjaGVtYSwgbGF5ZXJDb25maWcpXG4gICAgOiBsYXllckNvbmZpZztcblxuICBpZiAoIXBhcnNlZExheWVyQ29uZmlnKSB7XG4gICAgcmV0dXJuIG51bGw7XG4gIH1cbiAgLy8gZmlyc3QgdmFsaWRhdGUgY29uZmlnIGFnYWluc3QgZGF0YXNldFxuICBjb25zdCB7dmFsaWRhdGVkLCBmYWlsZWR9ID0gdmFsaWRhdGVMYXllcnNCeURhdGFzZXRzKFxuICAgIHN0YXRlLmRhdGFzZXRzLFxuICAgIHN0YXRlLmxheWVyQ2xhc3NlcyxcbiAgICBbcGFyc2VkTGF5ZXJDb25maWddLFxuICAgIHthbGxvd0VtcHR5Q29sdW1uOiB0cnVlfVxuICApO1xuXG4gIGlmIChmYWlsZWQ/Lmxlbmd0aCB8fCAhdmFsaWRhdGVkLmxlbmd0aCkge1xuICAgIC8vIGZhaWxlZFxuICAgIHJldHVybiBudWxsO1xuICB9XG5cbiAgY29uc3QgbmV3TGF5ZXIgPSB2YWxpZGF0ZWRbMF07XG4gIG5ld0xheWVyLnVwZGF0ZUxheWVyRG9tYWluKHN0YXRlLmRhdGFzZXRzKTtcbiAgcmV0dXJuIG5ld0xheWVyO1xufVxuXG4vKipcbiAqIEdldCBsb2FkZWQgbGF5ZXIgZnJvbSBzdGF0ZVxuICovXG5leHBvcnQgZnVuY3Rpb24gc2VyaWFsaXplTGF5ZXIoXG4gIG5ld0xheWVyOiBMYXllcixcbiAgc2NoZW1hOiBLZXBsZXJHTFNjaGVtYUNsYXNzXG4pOiBQYXJzZWRMYXllciB8IHVuZGVmaW5lZCB7XG4gIGNvbnN0IHNlcmlhbGl6ZWRWaXNTdGF0ZSA9IHNlcmlhbGl6ZVZpc1N0YXRlKFxuICAgIHtsYXllcnM6IFtuZXdMYXllcl0sIGxheWVyT3JkZXI6IFtuZXdMYXllci5pZF19LFxuICAgIHNjaGVtYVxuICApO1xuICByZXR1cm4gc2VyaWFsaXplZFZpc1N0YXRlPy5sYXllcnM/LlswXTtcbn1cblxuLyoqXG4gKiBHZXQgdmlzIHN0YXRlIGNvbmZpZ1xuICovXG5leHBvcnQgZnVuY3Rpb24gc2VyaWFsaXplVmlzU3RhdGUoXG4gIHZpc1N0YXRlOiBQYXJ0aWFsPFZpc1N0YXRlPixcbiAgc2NoZW1hOiBLZXBsZXJHTFNjaGVtYUNsYXNzXG4pOiBQYXJzZWRWaXNTdGF0ZSB8IHVuZGVmaW5lZCB7XG4gIGNvbnN0IHNhdmVkU3RhdGUgPSBzY2hlbWEuZ2V0Q29uZmlnVG9TYXZlKHtcbiAgICB2aXNTdGF0ZVxuICB9KTtcbiAgcmV0dXJuIHNhdmVkU3RhdGUgPyBzY2hlbWEucGFyc2VTYXZlZENvbmZpZyhzYXZlZFN0YXRlKT8udmlzU3RhdGUgOiB1bmRlZmluZWQ7XG59XG4vKipcbiAqIE1lcmdlIGxheWVycyBmcm9tIGRlLXNlcmlhbGl6ZWQgc3RhdGUsIGlmIG5vIGZpZWxkcyBvciBkYXRhIGFyZSBsb2FkZWRcbiAqIHNhdmUgaXQgZm9yIGxhdGVyXG4gKlxuICovXG5leHBvcnQgZnVuY3Rpb24gbWVyZ2VMYXllcnM8UyBleHRlbmRzIFZpc1N0YXRlPihcbiAgc3RhdGU6IFMsXG4gIGxheWVyc1RvTWVyZ2U6IE5vbk51bGxhYmxlPFBhcnNlZENvbmZpZ1sndmlzU3RhdGUnXT5bJ2xheWVycyddID0gW10sXG4gIGZyb21Db25maWc/OiBib29sZWFuXG4pOiBTIHtcbiAgY29uc3QgcHJlc2VydmVMYXllck9yZGVyID0gZnJvbUNvbmZpZ1xuICAgID8gZ2V0TGF5ZXJPcmRlckZyb21MYXllcnMobGF5ZXJzVG9NZXJnZSlcbiAgICA6IHN0YXRlLnByZXNlcnZlTGF5ZXJPcmRlcjtcbiAgaWYgKCFBcnJheS5pc0FycmF5KGxheWVyc1RvTWVyZ2UpIHx8ICFsYXllcnNUb01lcmdlLmxlbmd0aCkge1xuICAgIHJldHVybiBzdGF0ZTtcbiAgfVxuICAvLyBkb24ndCBtZXJnZSBsYXllciBpZiBkYXRhc2V0IGlzIGJlaW5nIG1lcmdlZFxuICBjb25zdCB1bm1lcmdlZDogUGFyc2VkTGF5ZXJbXSA9IFtdO1xuICBjb25zdCB0b01lcmdlOiBQYXJzZWRMYXllcltdID0gW107XG4gIGxheWVyc1RvTWVyZ2UuZm9yRWFjaCgobDogUGFyc2VkTGF5ZXIpID0+IHtcbiAgICBpZiAobD8uY29uZmlnPy5kYXRhSWQgJiYgc3RhdGUuaXNNZXJnaW5nRGF0YXNldHNbbC5jb25maWcuZGF0YUlkXSkge1xuICAgICAgdW5tZXJnZWQucHVzaChsKTtcbiAgICB9IGVsc2Uge1xuICAgICAgdG9NZXJnZS5wdXNoKGwpO1xuICAgIH1cbiAgfSk7XG5cbiAgY29uc3Qge3ZhbGlkYXRlZDogbWVyZ2VkTGF5ZXIsIGZhaWxlZH0gPSB2YWxpZGF0ZUxheWVyc0J5RGF0YXNldHMoXG4gICAgc3RhdGUuZGF0YXNldHMsXG4gICAgc3RhdGUubGF5ZXJDbGFzc2VzLFxuICAgIHRvTWVyZ2VcbiAgKTtcbiAgdW5tZXJnZWQucHVzaCguLi5mYWlsZWQpO1xuICAvLyBwdXQgbmV3IGxheWVycyBpbiBmcm9udCBvZiBjdXJyZW50IGxheWVyc1xuICBjb25zdCB7bmV3TGF5ZXJPcmRlciwgbmV3TGF5ZXJzfSA9IGluc2VydExheWVyQXRSaWdodE9yZGVyKFxuICAgIHN0YXRlLmxheWVycyxcbiAgICBtZXJnZWRMYXllcixcbiAgICBzdGF0ZS5sYXllck9yZGVyLFxuICAgIHByZXNlcnZlTGF5ZXJPcmRlclxuICApO1xuXG4gIHJldHVybiB7XG4gICAgLi4uc3RhdGUsXG4gICAgbGF5ZXJzOiBuZXdMYXllcnMsXG4gICAgbGF5ZXJPcmRlcjogbmV3TGF5ZXJPcmRlcixcbiAgICBwcmVzZXJ2ZUxheWVyT3JkZXIsXG4gICAgbGF5ZXJUb0JlTWVyZ2VkOiBbLi4uc3RhdGUubGF5ZXJUb0JlTWVyZ2VkLCAuLi51bm1lcmdlZF1cbiAgfTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGluc2VydExheWVyQXRSaWdodE9yZGVyKFxuICBjdXJyZW50TGF5ZXJzLFxuICBsYXllcnNUb0luc2VydCxcbiAgY3VycmVudE9yZGVyLFxuICBwcmVzZXJ2ZWRPcmRlcjogc3RyaW5nW10gPSBbXVxuKSB7XG4gIGlmICghbGF5ZXJzVG9JbnNlcnQ/Lmxlbmd0aCkge1xuICAgIHJldHVybiB7bmV3TGF5ZXJzOiBjdXJyZW50TGF5ZXJzLCBuZXdMYXllck9yZGVyOiBjdXJyZW50T3JkZXJ9O1xuICB9XG4gIC8vIHBlcnNlcnZlZE9yZGVyIFsnYScsICdiJywgJ2MnXTtcbiAgLy8gbGF5ZXJPcmRlciBbJ2EnLCAnYicsICdjJ11cbiAgY29uc3QgY3VycmVudExheWVyUXVldWUgPSBjdXJyZW50T3JkZXJcbiAgICAubWFwKGlkID0+IGZpbmRCeUlkKGlkKShjdXJyZW50TGF5ZXJzKSlcbiAgICAuZmlsdGVyKGxheWVyID0+IEJvb2xlYW4obGF5ZXIpKTtcbiAgY29uc3QgbmV3TGF5ZXJzID0gY3VycmVudExheWVycy5jb25jYXQobGF5ZXJzVG9JbnNlcnQpO1xuICBjb25zdCBuZXdMYXllck9yZGVyUXVldWUgPSBpbnNlcnRJdGVtQmFzZWRPblByZXNlcnZlZE9yZGVyKFxuICAgIGN1cnJlbnRMYXllclF1ZXVlLFxuICAgIGxheWVyc1RvSW5zZXJ0LFxuICAgIHByZXNlcnZlZE9yZGVyLFxuICAgIHRydWVcbiAgKTtcblxuICAvLyByZWNvbnN0cnVjdCBsYXllck9yZGVyIGFmdGVyIGluc2VydFxuICBjb25zdCBuZXdMYXllck9yZGVyID0gZ2V0TGF5ZXJPcmRlckZyb21MYXllcnMobmV3TGF5ZXJPcmRlclF1ZXVlKTtcblxuICByZXR1cm4ge1xuICAgIG5ld0xheWVyT3JkZXIsXG4gICAgbmV3TGF5ZXJzXG4gIH07XG59XG5cbi8qKlxuICogTWVyZ2UgaW50ZXJhY3Rpb25zIHdpdGggc2F2ZWQgY29uZmlnXG4gKlxuICovXG5leHBvcnQgZnVuY3Rpb24gbWVyZ2VJbnRlcmFjdGlvbnM8UyBleHRlbmRzIFZpc1N0YXRlPihcbiAgc3RhdGU6IFMsXG4gIGludGVyYWN0aW9uVG9CZU1lcmdlZDogUGFydGlhbDxTYXZlZEludGVyYWN0aW9uQ29uZmlnPiB8IHVuZGVmaW5lZCxcbiAgZnJvbUNvbmZpZz86IGJvb2xlYW5cbik6IFMge1xuICBjb25zdCBtZXJnZWQ6IFBhcnRpYWw8U2F2ZWRJbnRlcmFjdGlvbkNvbmZpZz4gPSB7fTtcbiAgY29uc3QgdW5tZXJnZWQ6IFBhcnRpYWw8U2F2ZWRJbnRlcmFjdGlvbkNvbmZpZz4gPSB7fTtcblxuICBpZiAoaW50ZXJhY3Rpb25Ub0JlTWVyZ2VkKSB7XG4gICAgKE9iamVjdC5rZXlzKGludGVyYWN0aW9uVG9CZU1lcmdlZCkgYXMgQXJyYXk8a2V5b2YgU2F2ZWRJbnRlcmFjdGlvbkNvbmZpZz4pLmZvckVhY2goa2V5ID0+IHtcbiAgICAgIGlmICghc3RhdGUuaW50ZXJhY3Rpb25Db25maWdba2V5XSkge1xuICAgICAgICByZXR1cm47XG4gICAgICB9XG5cbiAgICAgIGNvbnN0IGN1cnJlbnRDb25maWcgPVxuICAgICAgICBrZXkgPT09ICd0b29sdGlwJyB8fCBrZXkgPT09ICdicnVzaCcgPyBzdGF0ZS5pbnRlcmFjdGlvbkNvbmZpZ1trZXldLmNvbmZpZyA6IG51bGw7XG5cbiAgICAgIGNvbnN0IHtlbmFibGVkLCAuLi5jb25maWdTYXZlZH0gPSBpbnRlcmFjdGlvblRvQmVNZXJnZWRba2V5XSB8fCB7fTtcblxuICAgICAgbGV0IGNvbmZpZ1RvTWVyZ2UgPSBjb25maWdTYXZlZDtcblxuICAgICAgaWYgKGtleSA9PT0gJ3Rvb2x0aXAnKSB7XG4gICAgICAgIGNvbnN0IHttZXJnZWRUb29sdGlwLCB1bm1lcmdlZFRvb2x0aXB9ID0gbWVyZ2VJbnRlcmFjdGlvblRvb2x0aXBDb25maWcoXG4gICAgICAgICAgc3RhdGUsXG4gICAgICAgICAgY29uZmlnU2F2ZWQgYXMgU2F2ZWRJbnRlcmFjdGlvbkNvbmZpZ1sndG9vbHRpcCddXG4gICAgICAgICk7XG5cbiAgICAgICAgLy8gbWVyZ2UgbmV3IGRhdGFzZXQgdG9vbHRpcHMgd2l0aCBvcmlnaW5hbCBkYXRhc2V0IHRvb2x0aXBzXG4gICAgICAgIGNvbmZpZ1RvTWVyZ2UgPSB7XG4gICAgICAgICAgZmllbGRzVG9TaG93OiB7XG4gICAgICAgICAgICAuLi4oY3VycmVudENvbmZpZyBhcyBUb29sdGlwSW5mb1snY29uZmlnJ10pLmZpZWxkc1RvU2hvdyxcbiAgICAgICAgICAgIC4uLm1lcmdlZFRvb2x0aXBcbiAgICAgICAgICB9XG4gICAgICAgIH07XG5cbiAgICAgICAgaWYgKE9iamVjdC5rZXlzKHVubWVyZ2VkVG9vbHRpcCkubGVuZ3RoKSB7XG4gICAgICAgICAgLy8gQHRzLWV4cGVjdC1lcnJvclxuICAgICAgICAgIHVubWVyZ2VkLnRvb2x0aXAgPSB7ZmllbGRzVG9TaG93OiB1bm1lcmdlZFRvb2x0aXAsIGVuYWJsZWQ6IEJvb2xlYW4oZW5hYmxlZCl9O1xuICAgICAgICB9XG4gICAgICB9XG5cbiAgICAgIG1lcmdlZFtrZXldID0ge1xuICAgICAgICAuLi5zdGF0ZS5pbnRlcmFjdGlvbkNvbmZpZ1trZXldLFxuICAgICAgICBlbmFibGVkOiBCb29sZWFuKGVuYWJsZWQpLFxuICAgICAgICAuLi4oY3VycmVudENvbmZpZ1xuICAgICAgICAgID8ge1xuICAgICAgICAgICAgICBjb25maWc6IHBpY2soXG4gICAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgICAgLi4uY3VycmVudENvbmZpZyxcbiAgICAgICAgICAgICAgICAgIC4uLmNvbmZpZ1RvTWVyZ2VcbiAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgIE9iamVjdC5rZXlzKGN1cnJlbnRDb25maWcpXG4gICAgICAgICAgICAgIClcbiAgICAgICAgICAgIH1cbiAgICAgICAgICA6IHt9KVxuICAgICAgfTtcbiAgICB9KTtcbiAgfVxuXG4gIGNvbnN0IG5leHRTdGF0ZSA9IHtcbiAgICAuLi5zdGF0ZSxcbiAgICBpbnRlcmFjdGlvbkNvbmZpZzoge1xuICAgICAgLi4uc3RhdGUuaW50ZXJhY3Rpb25Db25maWcsXG4gICAgICAuLi5tZXJnZWRcbiAgICB9LFxuICAgIGludGVyYWN0aW9uVG9CZU1lcmdlZDogc2F2ZWRVbm1lcmdlZEludGVyYWN0aW9uKHN0YXRlLCB1bm1lcmdlZClcbiAgfTtcbiAgcmV0dXJuIG5leHRTdGF0ZTtcbn1cblxuZnVuY3Rpb24gc2F2ZWRVbm1lcmdlZEludGVyYWN0aW9uPFMgZXh0ZW5kcyBWaXNTdGF0ZT4oXG4gIHN0YXRlOiBTLFxuICB1bm1lcmdlZDogUGFydGlhbDxTYXZlZEludGVyYWN0aW9uQ29uZmlnPlxuKSB7XG4gIGlmICghdW5tZXJnZWQ/LnRvb2x0aXA/LmZpZWxkc1RvU2hvdykge1xuICAgIHJldHVybiBzdGF0ZS5pbnRlcmFjdGlvblRvQmVNZXJnZWQ7XG4gIH1cbiAgcmV0dXJuIHtcbiAgICB0b29sdGlwOiB7XG4gICAgICAuLi5zdGF0ZS5pbnRlcmFjdGlvblRvQmVNZXJnZWQudG9vbHRpcCxcbiAgICAgIC4uLih0eXBlb2YgdW5tZXJnZWQ/LnRvb2x0aXA/LmVuYWJsZWQgPT09ICdib29sZWFuJ1xuICAgICAgICA/IHtlbmFibGVkOiB1bm1lcmdlZC50b29sdGlwLmVuYWJsZWR9XG4gICAgICAgIDoge30pLFxuICAgICAgZmllbGRzVG9TaG93OiB7XG4gICAgICAgIC4uLnN0YXRlLmludGVyYWN0aW9uVG9CZU1lcmdlZD8udG9vbHRpcD8uZmllbGRzVG9TaG93LFxuICAgICAgICAuLi51bm1lcmdlZD8udG9vbHRpcD8uZmllbGRzVG9TaG93XG4gICAgICB9XG4gICAgfVxuICB9O1xufVxuXG5mdW5jdGlvbiByZXBsYWNlSW50ZXJhY3Rpb25EYXRhc2V0SWRzKGludGVyYWN0aW9uQ29uZmlnLCBkYXRhSWQ6IHN0cmluZywgZGF0YUlkVG9SZXBsYWNlOiBzdHJpbmcpIHtcbiAgaWYgKGludGVyYWN0aW9uQ29uZmlnPy50b29sdGlwPy5maWVsZHNUb1Nob3dbZGF0YUlkXSkge1xuICAgIHJldHVybiB7XG4gICAgICAuLi5pbnRlcmFjdGlvbkNvbmZpZyxcbiAgICAgIHRvb2x0aXA6IHtcbiAgICAgICAgLi4uaW50ZXJhY3Rpb25Db25maWcudG9vbHRpcCxcbiAgICAgICAgZmllbGRzVG9TaG93OiB7XG4gICAgICAgICAgW2RhdGFJZFRvUmVwbGFjZV06IGludGVyYWN0aW9uQ29uZmlnPy50b29sdGlwPy5maWVsZHNUb1Nob3dbZGF0YUlkXVxuICAgICAgICB9XG4gICAgICB9XG4gICAgfTtcbiAgfVxuICByZXR1cm4gbnVsbDtcbn1cbi8qKlxuICogTWVyZ2Ugc3BsaXRNYXBzIGNvbmZpZyB3aXRoIGN1cnJlbnQgdmlzU3RldGUuXG4gKiAxLiBpZiBjdXJyZW50IG1hcCBpcyBzcGxpdCwgYnV0IHNwbGl0TWFwIERPRVNOT1QgY29udGFpbiBtYXBzXG4gKiAgICA6IGRvbid0IG1lcmdlIGFueXRoaW5nXG4gKiAyLiBpZiBjdXJyZW50IG1hcCBpcyBOT1Qgc3BsaXQsIGJ1dCBzcGxpdE1hcHMgY29udGFpbiBtYXBzXG4gKiAgICA6IGFkZCB0byBzcGxpdE1hcHMsIGFuZCBhZGQgY3VycmVudCBsYXllcnMgdG8gc3BsaXRNYXBzXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBtZXJnZVNwbGl0TWFwczxTIGV4dGVuZHMgVmlzU3RhdGU+KFxuICBzdGF0ZTogUyxcbiAgc3BsaXRNYXBzOiBOb25OdWxsYWJsZTxQYXJzZWRDb25maWdbJ3Zpc1N0YXRlJ10+WydzcGxpdE1hcHMnXSA9IFtdLFxuICBmcm9tQ29uZmlnPzogYm9vbGVhblxuKTogUyB7XG4gIGNvbnN0IG1lcmdlZCA9IFsuLi5zdGF0ZS5zcGxpdE1hcHNdO1xuICBjb25zdCB1bm1lcmdlZCA9IFtdO1xuICBzcGxpdE1hcHMuZm9yRWFjaCgoc20sIGkpID0+IHtcbiAgICBjb25zdCBlbnRyaWVzID0gT2JqZWN0LmVudHJpZXMoc20ubGF5ZXJzKTtcbiAgICBpZiAoZW50cmllcy5sZW5ndGggPiAwKSB7XG4gICAgICBlbnRyaWVzLmZvckVhY2goKFtpZCwgdmFsdWVdKSA9PiB7XG4gICAgICAgIC8vIGNoZWNrIGlmIGxheWVyIGV4aXN0c1xuICAgICAgICBjb25zdCBwdXNoVG8gPSBzdGF0ZS5sYXllcnMuZmluZChsID0+IGwuaWQgPT09IGlkKSA/IG1lcmdlZCA6IHVubWVyZ2VkO1xuXG4gICAgICAgIC8vIGNyZWF0ZSBtYXAgcGFuZWwgaWYgY3VycmVudCBtYXAgaXMgbm90IHNwbGl0XG4gICAgICAgIHB1c2hUb1tpXSA9IHB1c2hUb1tpXSB8fCB7XG4gICAgICAgICAgbGF5ZXJzOiBwdXNoVG8gPT09IG1lcmdlZCA/IGdldEluaXRpYWxNYXBMYXllcnNGb3JTcGxpdE1hcChzdGF0ZS5sYXllcnMpIDogW11cbiAgICAgICAgfTtcbiAgICAgICAgcHVzaFRvW2ldLmxheWVycyA9IHtcbiAgICAgICAgICAuLi5wdXNoVG9baV0ubGF5ZXJzLFxuICAgICAgICAgIFtpZF06IHZhbHVlXG4gICAgICAgIH07XG4gICAgICB9KTtcbiAgICB9IGVsc2Uge1xuICAgICAgLy8gV2UgYXJlIG1lcmdpbmcgaWYgdGhlcmUgYXJlIG5vIGxheWVycyBpbiBib3RoIHNwbGl0IG1hcFxuICAgICAgbWVyZ2VkLnB1c2goc20pO1xuICAgIH1cbiAgfSk7XG5cbiAgcmV0dXJuIHtcbiAgICAuLi5zdGF0ZSxcbiAgICBzcGxpdE1hcHM6IG1lcmdlZCxcbiAgICBzcGxpdE1hcHNUb0JlTWVyZ2VkOiBbLi4uc3RhdGUuc3BsaXRNYXBzVG9CZU1lcmdlZCwgLi4udW5tZXJnZWRdXG4gIH07XG59XG5cbi8qKlxuICogTWVyZ2UgZWZmZWN0cyB3aXRoIHNhdmVkIGNvbmZpZ1xuICovXG5leHBvcnQgZnVuY3Rpb24gbWVyZ2VFZmZlY3RzPFMgZXh0ZW5kcyBWaXNTdGF0ZT4oXG4gIHN0YXRlOiBTLFxuICBlZmZlY3RzOiBOb25OdWxsYWJsZTxQYXJzZWRDb25maWdbJ3Zpc1N0YXRlJ10+WydlZmZlY3RzJ10sXG4gIGZyb21Db25maWc/OiBib29sZWFuXG4pOiBTIHtcbiAgY29uc3QgbmV3RWZmZWN0cyA9IFtcbiAgICAuLi5zdGF0ZS5lZmZlY3RzLFxuICAgIC4uLihlZmZlY3RzIHx8IFtdKVxuICAgICAgLm1hcChlZmZlY3QgPT5cbiAgICAgICAgZnJvbUNvbmZpZ1xuICAgICAgICAgID8gLy8gY29sbGFwc2UgYWxsIHBhbmVscyB3aGVuIGxvYWRpbmcgZWZmZWN0c1xuXG4gICAgICAgICAgICBjcmVhdGVEZWNrRWZmZWN0RnJvbUNvbmZpZyhcbiAgICAgICAgICAgICAgLy8gQHRzLWV4cGVjdC1lcnJvclxuICAgICAgICAgICAgICBtZXJnZUVmZmVjdFBhcmFtcyhlZmZlY3QsIHtjb25maWc6IHtpc0NvbmZpZ0FjdGl2ZTogZmFsc2V9fSlcbiAgICAgICAgICAgIClcbiAgICAgICAgICA6IChlZmZlY3QgYXMgRWZmZWN0VHlwZSlcbiAgICAgIClcbiAgICAgIC5maWx0ZXIoZWZmZWN0ID0+IHtcbiAgICAgICAgcmV0dXJuIEJvb2xlYW4oZWZmZWN0ICYmIGVmZmVjdC5pc1ZhbGlkVG9TYXZlKCkpO1xuICAgICAgfSlcbiAgXTtcbiAgcmV0dXJuIHtcbiAgICAuLi5zdGF0ZSxcbiAgICBlZmZlY3RzOiBuZXdFZmZlY3RzLFxuICAgIGVmZmVjdE9yZGVyOiBuZXdFZmZlY3RzLm1hcChlZmZlY3QgPT4gZWZmZWN0LmlkKVxuICB9O1xufVxuXG4vKipcbiAqIE1lcmdlIGludGVyYWN0aW9uQ29uZmlnLnRvb2x0aXAgd2l0aCBzYXZlZCBjb25maWcsXG4gKiB2YWxpZGF0ZSBmaWVsZHNUb1Nob3dcbiAqXG4gKiBAcGFyYW0gc3RhdGVcbiAqIEBwYXJhbSB0b29sdGlwQ29uZmlnXG4gKiBAcmV0dXJuIC0ge21lcmdlZFRvb2x0aXA6IHt9LCB1bm1lcmdlZFRvb2x0aXA6IHt9fVxuICovXG5leHBvcnQgZnVuY3Rpb24gbWVyZ2VJbnRlcmFjdGlvblRvb2x0aXBDb25maWcoXG4gIHN0YXRlOiBWaXNTdGF0ZSxcbiAgdG9vbHRpcENvbmZpZzogUGljazxUb29sdGlwSW5mb1snY29uZmlnJ10sICdmaWVsZHNUb1Nob3cnPiB8IG51bGwgPSBudWxsXG4pIHtcbiAgY29uc3QgdW5tZXJnZWRUb29sdGlwOiBUb29sdGlwSW5mb1snY29uZmlnJ11bJ2ZpZWxkc1RvU2hvdyddID0ge307XG4gIGNvbnN0IG1lcmdlZFRvb2x0aXA6IFRvb2x0aXBJbmZvWydjb25maWcnXVsnZmllbGRzVG9TaG93J10gPSB7fTtcblxuICBpZiAoXG4gICAgIXRvb2x0aXBDb25maWcgfHxcbiAgICAhdG9vbHRpcENvbmZpZy5maWVsZHNUb1Nob3cgfHxcbiAgICAhT2JqZWN0LmtleXModG9vbHRpcENvbmZpZy5maWVsZHNUb1Nob3cpLmxlbmd0aFxuICApIHtcbiAgICByZXR1cm4ge21lcmdlZFRvb2x0aXAsIHVubWVyZ2VkVG9vbHRpcH07XG4gIH1cblxuICBmb3IgKGNvbnN0IGRhdGFJZCBpbiB0b29sdGlwQ29uZmlnLmZpZWxkc1RvU2hvdykge1xuICAgIGlmICghc3RhdGUuZGF0YXNldHNbZGF0YUlkXSB8fCBzdGF0ZS5pc01lcmdpbmdEYXRhc2V0c1tkYXRhSWRdKSB7XG4gICAgICAvLyBpcyBub3QgeWV0IGxvYWRlZFxuICAgICAgdW5tZXJnZWRUb29sdGlwW2RhdGFJZF0gPSB0b29sdGlwQ29uZmlnLmZpZWxkc1RvU2hvd1tkYXRhSWRdO1xuICAgIH0gZWxzZSB7XG4gICAgICAvLyBpZiBkYXRhc2V0IGlzIGxvYWRlZFxuICAgICAgY29uc3QgYWxsRmllbGRzID0gc3RhdGUuZGF0YXNldHNbZGF0YUlkXS5maWVsZHMubWFwKGQgPT4gZC5uYW1lKTtcbiAgICAgIGNvbnN0IGZvdW5kRmllbGRzVG9TaG93ID0gdG9vbHRpcENvbmZpZy5maWVsZHNUb1Nob3dbZGF0YUlkXS5maWx0ZXIoZmllbGQgPT5cbiAgICAgICAgYWxsRmllbGRzLmluY2x1ZGVzKGZpZWxkLm5hbWUpXG4gICAgICApO1xuXG4gICAgICBtZXJnZWRUb29sdGlwW2RhdGFJZF0gPSBmb3VuZEZpZWxkc1RvU2hvdztcbiAgICB9XG4gIH1cblxuICByZXR1cm4ge21lcmdlZFRvb2x0aXAsIHVubWVyZ2VkVG9vbHRpcH07XG59XG4vKipcbiAqIE1lcmdlIGxheWVyQmxlbmRpbmcgd2l0aCBzYXZlZFxuICpcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIG1lcmdlTGF5ZXJCbGVuZGluZzxTIGV4dGVuZHMgVmlzU3RhdGU+KFxuICBzdGF0ZTogUyxcbiAgbGF5ZXJCbGVuZGluZzogTm9uTnVsbGFibGU8UGFyc2VkQ29uZmlnWyd2aXNTdGF0ZSddPlsnbGF5ZXJCbGVuZGluZyddLFxuICBmcm9tQ29uZmlnPzogYm9vbGVhblxuKTogUyB7XG4gIGlmIChsYXllckJsZW5kaW5nICYmIExBWUVSX0JMRU5ESU5HU1tsYXllckJsZW5kaW5nXSkge1xuICAgIHJldHVybiB7XG4gICAgICAuLi5zdGF0ZSxcbiAgICAgIGxheWVyQmxlbmRpbmdcbiAgICB9O1xuICB9XG5cbiAgcmV0dXJuIHN0YXRlO1xufVxuXG4vKipcbiAqIE1lcmdlIG92ZXJsYXlCbGVuZGluZyB3aXRoIHNhdmVkXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBtZXJnZU92ZXJsYXlCbGVuZGluZzxTIGV4dGVuZHMgVmlzU3RhdGU+KFxuICBzdGF0ZTogUyxcbiAgb3ZlcmxheUJsZW5kaW5nOiBOb25OdWxsYWJsZTxQYXJzZWRDb25maWdbJ3Zpc1N0YXRlJ10+WydvdmVybGF5QmxlbmRpbmcnXSxcbiAgZnJvbUNvbmZpZz86IGJvb2xlYW5cbik6IFMge1xuICBpZiAob3ZlcmxheUJsZW5kaW5nICYmIE9WRVJMQVlfQkxFTkRJTkdTW292ZXJsYXlCbGVuZGluZ10pIHtcbiAgICByZXR1cm4ge1xuICAgICAgLi4uc3RhdGUsXG4gICAgICBvdmVybGF5QmxlbmRpbmdcbiAgICB9O1xuICB9XG5cbiAgcmV0dXJuIHN0YXRlO1xufVxuXG4vKipcbiAqIE1lcmdlIGFuaW1hdGlvbiBjb25maWdcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIG1lcmdlQW5pbWF0aW9uQ29uZmlnPFMgZXh0ZW5kcyBWaXNTdGF0ZT4oXG4gIHN0YXRlOiBTLFxuICBhbmltYXRpb246IE5vbk51bGxhYmxlPFBhcnNlZENvbmZpZ1sndmlzU3RhdGUnXT5bJ2FuaW1hdGlvbkNvbmZpZyddLFxuICBmcm9tQ29uZmlnPzogYm9vbGVhblxuKTogUyB7XG4gIGlmIChhbmltYXRpb24gJiYgYW5pbWF0aW9uLmN1cnJlbnRUaW1lKSB7XG4gICAgcmV0dXJuIHtcbiAgICAgIC4uLnN0YXRlLFxuICAgICAgYW5pbWF0aW9uQ29uZmlnOiB7XG4gICAgICAgIC4uLnN0YXRlLmFuaW1hdGlvbkNvbmZpZyxcbiAgICAgICAgLi4uYW5pbWF0aW9uLFxuICAgICAgICBkb21haW46IG51bGxcbiAgICAgIH1cbiAgICB9O1xuICB9XG5cbiAgcmV0dXJuIHN0YXRlO1xufVxuXG4vKipcbiAqIFZhbGlkYXRlIHNhdmVkIGxheWVyIGNvbHVtbnMgd2l0aCBuZXcgZGF0YSxcbiAqIHVwZGF0ZSBmaWVsZElkeCBiYXNlZCBvbiBuZXcgZmllbGRzXG4gKlxuICogQHBhcmFtIGZpZWxkc1xuICogQHBhcmFtIHNhdmVkQ29sc1xuICogQHBhcmFtIGVtcHR5Q29sc1xuICogQHBhcmFtIG9wdGlvbnNcbiAqIEByZXR1cm4gLSB2YWxpZGF0ZWQgY29sdW1ucyBvciBudWxsXG4gKi9cblxuZXhwb3J0IGZ1bmN0aW9uIHZhbGlkYXRlU2F2ZWRMYXllckNvbHVtbnMoXG4gIGZpZWxkczogS2VwbGVyVGFibGVbJ2ZpZWxkcyddLFxuICBzYXZlZENvbHM6IHtcbiAgICBba2V5OiBzdHJpbmddOiBzdHJpbmc7XG4gIH0gPSB7fSxcbiAgZW1wdHlDb2xzOiBMYXllckNvbHVtbnMsXG4gIG9wdGlvbnM6IHt0aHJvd09uRXJyb3I/OiBib29sZWFufSA9IHt9XG4pIHtcbiAgLy8gUHJlcGFyZSBjb2x1bW5zIGZvciB0aGUgdmFsaWRhdG9yXG4gIGNvbnN0IGNvbHVtbnM6IHR5cGVvZiBlbXB0eUNvbHMgPSB7fTtcbiAgZm9yIChjb25zdCBrZXkgb2YgT2JqZWN0LmtleXMoZW1wdHlDb2xzKSkge1xuICAgIGNvbHVtbnNba2V5XSA9IHsuLi5lbXB0eUNvbHNba2V5XX07XG5cbiAgICBjb25zdCBzYXZlZCA9IHNhdmVkQ29sc1trZXldO1xuICAgIGlmIChzYXZlZCkge1xuICAgICAgY29uc3QgZmllbGRJZHggPSBmaWVsZHMuZmluZEluZGV4KCh7bmFtZX0pID0+IG5hbWUgPT09IHNhdmVkKTtcblxuICAgICAgaWYgKGZpZWxkSWR4ID4gLTEpIHtcbiAgICAgICAgLy8gdXBkYXRlIGZvdW5kIGNvbHVtbnNcbiAgICAgICAgY29sdW1uc1trZXldLmZpZWxkSWR4ID0gZmllbGRJZHg7XG4gICAgICAgIGNvbHVtbnNba2V5XS52YWx1ZSA9IHNhdmVkO1xuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIC8vIGZpbmQgYWN0dWFsIGNvbHVtbiBmaWVsZElkeCwgaW4gY2FzZSBpdCBoYXMgY2hhbmdlZFxuICBjb25zdCBhbGxDb2xGb3VuZCA9IE9iamVjdC5rZXlzKGNvbHVtbnMpLmV2ZXJ5KGtleSA9PlxuICAgIHZhbGlkYXRlQ29sdW1uKGNvbHVtbnNba2V5XSwgY29sdW1ucywgZmllbGRzKVxuICApO1xuXG4gIGNvbnN0IHJ2ID0gYWxsQ29sRm91bmQgPyBjb2x1bW5zIDogbnVsbDtcbiAgaWYgKG9wdGlvbnMudGhyb3dPbkVycm9yKSB7XG4gICAgY29uc3QgcmVxdWlyZWRDb2x1bW5zID0gT2JqZWN0LmtleXMoZW1wdHlDb2xzKS5maWx0ZXIoayA9PiAhZW1wdHlDb2xzW2tdLm9wdGlvbmFsKTtcbiAgICBjb25zdCBtaXNzaW5nQ29sdW1ucyA9IHJlcXVpcmVkQ29sdW1ucy5maWx0ZXIoayA9PiAhY29sdW1ucz8uW2tdLnZhbHVlKTtcbiAgICBpZiAobWlzc2luZ0NvbHVtbnMubGVuZ3RoKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoYExheWVyIGhhcyBtaXNzaW5nIG9yIGludmFsaWQgY29sdW1uczogJHttaXNzaW5nQ29sdW1ucy5qb2luKCcsICcpfWApO1xuICAgIH1cbiAgICBjb25zdCBjb25maWdDb2x1bW5zID0gT2JqZWN0LmtleXMoc2F2ZWRDb2xzKTtcbiAgICBjb25zdCBpbnZhbGlkQ29sdW1ucyA9IGNvbmZpZ0NvbHVtbnMuZmlsdGVyKGsgPT4gIWNvbHVtbnM/LltrXT8udmFsdWUpO1xuICAgIGlmIChpbnZhbGlkQ29sdW1ucy5sZW5ndGgpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcihgTGF5ZXIgaGFzIGludmFsaWQgY29sdW1uczogJHtpbnZhbGlkQ29sdW1ucy5qb2luKCcsICcpfWApO1xuICAgIH1cbiAgfVxuXG4gIHJldHVybiBydjtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHZhbGlkYXRlQ29sdW1uKFxuICBjb2x1bW46IExheWVyQ29sdW1uICYge3ZhbGlkYXRvcj86IHR5cGVvZiB2YWxpZGF0ZUNvbHVtbn0sXG4gIGNvbHVtbnM6IExheWVyQ29sdW1ucyxcbiAgYWxsRmllbGRzOiBLZXBsZXJUYWJsZVsnZmllbGRzJ11cbik6IGJvb2xlYW4ge1xuICBpZiAoY29sdW1uLm9wdGlvbmFsIHx8IGNvbHVtbi52YWx1ZSkge1xuICAgIHJldHVybiB0cnVlO1xuICB9XG4gIGlmIChjb2x1bW4udmFsaWRhdG9yKSB7XG4gICAgcmV0dXJuIGNvbHVtbi52YWxpZGF0b3IoY29sdW1uLCBjb2x1bW5zLCBhbGxGaWVsZHMpO1xuICB9XG4gIHJldHVybiBmYWxzZTtcbn1cblxuLyoqXG4gKiBWYWxpZGF0ZSBzYXZlZCB0ZXh0IGxhYmVsIGNvbmZpZyB3aXRoIG5ldyBkYXRhXG4gKiByZWZlciB0byB2aXMtc3RhdGUtc2NoZW1hLmpzIFRleHRMYWJlbFNjaGVtYVYxXG4gKlxuICogQHBhcmFtIHtBcnJheTxPYmplY3Q+fSBmaWVsZHNcbiAqIEBwYXJhbSB7T2JqZWN0fSBzYXZlZFRleHRMYWJlbFxuICogQHBhcmFtIHtPYmplY3R9IG9wdGlvbnNcbiAqIEByZXR1cm4ge09iamVjdH0gLSB2YWxpZGF0ZWQgdGV4dGxhYmVsXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiB2YWxpZGF0ZVNhdmVkVGV4dExhYmVsKFxuICBmaWVsZHMsXG4gIFtsYXllclRleHRMYWJlbF0sXG4gIHNhdmVkVGV4dExhYmVsLFxuICBvcHRpb25zOiB7dGhyb3dPbkVycm9yPzogYm9vbGVhbn0gPSB7fVxuKSB7XG4gIGNvbnN0IHNhdmVkVGV4dExhYmVscyA9IEFycmF5LmlzQXJyYXkoc2F2ZWRUZXh0TGFiZWwpID8gc2F2ZWRUZXh0TGFiZWwgOiBbc2F2ZWRUZXh0TGFiZWxdO1xuXG4gIC8vIHZhbGlkYXRlIGZpZWxkXG4gIHJldHVybiBzYXZlZFRleHRMYWJlbHMubWFwKHRleHRMYWJlbCA9PiB7XG4gICAgY29uc3QgZmllbGQgPSB0ZXh0TGFiZWwuZmllbGRcbiAgICAgID8gZmllbGRzLmZpbmQoZmQgPT5cbiAgICAgICAgICBPYmplY3Qua2V5cyh0ZXh0TGFiZWwuZmllbGQpLmV2ZXJ5KGtleSA9PiB0ZXh0TGFiZWwuZmllbGRba2V5XSA9PT0gZmRba2V5XSlcbiAgICAgICAgKVxuICAgICAgOiBudWxsO1xuXG4gICAgaWYgKGZpZWxkID09PSB1bmRlZmluZWQgJiYgb3B0aW9ucy50aHJvd09uRXJyb3IpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcihgTGF5ZXIgaGFzIGludmFsaWQgdGV4dCBsYWJlbCBmaWVsZDogJHtKU09OLnN0cmluZ2lmeSh0ZXh0TGFiZWwuZmllbGQpfWApO1xuICAgIH1cblxuICAgIHJldHVybiBPYmplY3Qua2V5cyhsYXllclRleHRMYWJlbCkucmVkdWNlKFxuICAgICAgKGFjY3UsIGtleSkgPT4gKHtcbiAgICAgICAgLi4uYWNjdSxcbiAgICAgICAgW2tleV06IGtleSA9PT0gJ2ZpZWxkJyA/IGZpZWxkIDogdGV4dExhYmVsW2tleV0gfHwgbGF5ZXJUZXh0TGFiZWxba2V5XVxuICAgICAgfSksXG4gICAgICB7fVxuICAgICk7XG4gIH0pO1xufVxuXG4vKipcbiAqIFZhbGlkYXRlIHNhdmVkIHZpc3VhbCBjaGFubmVscyBjb25maWcgd2l0aCBuZXcgZGF0YSxcbiAqIHJlZmVyIHRvIHZpcy1zdGF0ZS1zY2hlbWEuanMgVmlzdWFsQ2hhbm5lbFNjaGVtYVYxXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiB2YWxpZGF0ZVNhdmVkVmlzdWFsQ2hhbm5lbHMoXG4gIGZpZWxkczogS2VwbGVyVGFibGVbJ2ZpZWxkcyddLFxuICBuZXdMYXllcjogTGF5ZXIsXG4gIHNhdmVkTGF5ZXI6IFBhcnNlZExheWVyLFxuICBvcHRpb25zOiB7dGhyb3dPbkVycm9yPzogYm9vbGVhbn0gPSB7fVxuKTogbnVsbCB8IExheWVyIHtcbiAgT2JqZWN0LnZhbHVlcyhuZXdMYXllci52aXN1YWxDaGFubmVscykuZm9yRWFjaCgoe2ZpZWxkLCBzY2FsZSwga2V5fSkgPT4ge1xuICAgIGxldCBmb3VuZEZpZWxkO1xuICAgIGlmIChzYXZlZExheWVyLmNvbmZpZykge1xuICAgICAgaWYgKHNhdmVkTGF5ZXIuY29uZmlnW2ZpZWxkXSkge1xuICAgICAgICBmb3VuZEZpZWxkID0gZmllbGRzLmZpbmQoXG4gICAgICAgICAgZmQgPT4gc2F2ZWRMYXllci5jb25maWcgJiYgZmQubmFtZSA9PT0gc2F2ZWRMYXllci5jb25maWdbZmllbGRdLm5hbWVcbiAgICAgICAgKTtcbiAgICAgIH1cblxuICAgICAgY29uc3QgZm91bmRDaGFubmVsID0ge1xuICAgICAgICAuLi4oZm91bmRGaWVsZCA/IHtbZmllbGRdOiBmb3VuZEZpZWxkfSA6IHt9KSxcbiAgICAgICAgLi4uKHNhdmVkTGF5ZXIuY29uZmlnW3NjYWxlXSA/IHtbc2NhbGVdOiBzYXZlZExheWVyLmNvbmZpZ1tzY2FsZV19IDoge30pXG4gICAgICB9O1xuICAgICAgaWYgKE9iamVjdC5rZXlzKGZvdW5kQ2hhbm5lbCkubGVuZ3RoKSB7XG4gICAgICAgIG5ld0xheWVyLnVwZGF0ZUxheWVyQ29uZmlnKGZvdW5kQ2hhbm5lbCk7XG4gICAgICB9XG5cbiAgICAgIG5ld0xheWVyLnZhbGlkYXRlVmlzdWFsQ2hhbm5lbChrZXkpO1xuICAgICAgaWYgKG9wdGlvbnMudGhyb3dPbkVycm9yKSB7XG4gICAgICAgIGNvbnN0IGZpZWxkTmFtZSA9IHNhdmVkTGF5ZXIuY29uZmlnPy5bZmllbGRdPy5uYW1lO1xuICAgICAgICBpZiAoZmllbGROYW1lICYmIGZpZWxkTmFtZSAhPT0gbmV3TGF5ZXIuY29uZmlnW2ZpZWxkXT8ubmFtZSkge1xuICAgICAgICAgIHRocm93IG5ldyBFcnJvcihgTGF5ZXIgaGFzIGludmFsaWQgdmlzdWFsIGNoYW5uZWwgZmllbGQ6ICR7ZmllbGR9YCk7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG4gIH0pO1xuICByZXR1cm4gbmV3TGF5ZXI7XG59XG5cbnR5cGUgVmFsaWRhdGVMYXllck9wdGlvbiA9IHtcbiAgYWxsb3dFbXB0eUNvbHVtbj86IGJvb2xlYW47XG4gIHRocm93T25FcnJvcj86IGJvb2xlYW47XG59O1xuXG5leHBvcnQgZnVuY3Rpb24gdmFsaWRhdGVMYXllcnNCeURhdGFzZXRzKFxuICBkYXRhc2V0czogRGF0YXNldHMsXG4gIGxheWVyQ2xhc3NlczogVmlzU3RhdGVbJ2xheWVyQ2xhc3NlcyddLFxuICBsYXllcnM6IE5vbk51bGxhYmxlPFBhcnNlZENvbmZpZ1sndmlzU3RhdGUnXT5bJ2xheWVycyddID0gW10sXG4gIG9wdGlvbnM/OiBWYWxpZGF0ZUxheWVyT3B0aW9uXG4pIHtcbiAgY29uc3QgdmFsaWRhdGVkOiBMYXllcltdID0gW107XG4gIGNvbnN0IGZhaWxlZDogTm9uTnVsbGFibGU8UGFyc2VkQ29uZmlnWyd2aXNTdGF0ZSddPlsnbGF5ZXJzJ10gPSBbXTtcblxuICBsYXllcnMuZm9yRWFjaChsYXllciA9PiB7XG4gICAgbGV0IHZhbGlkYXRlTGF5ZXI6IExheWVyIHwgbnVsbCA9IG51bGw7XG5cbiAgICBpZiAobGF5ZXI/LmNvbmZpZz8uZGF0YUlkKSB7XG4gICAgICBpZiAoZGF0YXNldHNbbGF5ZXIuY29uZmlnLmRhdGFJZF0pIHtcbiAgICAgICAgLy8gZGF0YXNldHMgYXJlIGFscmVhZHkgbG9hZGVkXG4gICAgICAgIHZhbGlkYXRlTGF5ZXIgPSB2YWxpZGF0ZUxheWVyV2l0aERhdGEoXG4gICAgICAgICAgZGF0YXNldHNbbGF5ZXIuY29uZmlnLmRhdGFJZF0sXG4gICAgICAgICAgbGF5ZXIsXG4gICAgICAgICAgbGF5ZXJDbGFzc2VzLFxuICAgICAgICAgIG9wdGlvbnNcbiAgICAgICAgKTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICBpZiAodmFsaWRhdGVMYXllcikge1xuICAgICAgdmFsaWRhdGVkLnB1c2godmFsaWRhdGVMYXllcik7XG4gICAgfSBlbHNlIHtcbiAgICAgIC8vIGRhdGFzZXRzIG5vdCB5ZXQgbG9hZGVkXG4gICAgICBmYWlsZWQucHVzaChsYXllcik7XG4gICAgfVxuICB9KTtcblxuICByZXR1cm4ge3ZhbGlkYXRlZCwgZmFpbGVkfTtcbn1cbi8qKlxuICogVmFsaWRhdGUgc2F2ZWQgbGF5ZXIgY29uZmlnIHdpdGggbmV3IGRhdGEsXG4gKiB1cGRhdGUgZmllbGRJZHggYmFzZWQgb24gbmV3IGZpZWxkc1xuICovXG4vLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgY29tcGxleGl0eVxuZXhwb3J0IGZ1bmN0aW9uIHZhbGlkYXRlTGF5ZXJXaXRoRGF0YShcbiAge2ZpZWxkcywgaWQ6IGRhdGFJZH06IEtlcGxlclRhYmxlLFxuICBzYXZlZExheWVyOiBQYXJzZWRMYXllcixcbiAgbGF5ZXJDbGFzc2VzOiBWaXNTdGF0ZVsnbGF5ZXJDbGFzc2VzJ10sXG4gIG9wdGlvbnM6IFZhbGlkYXRlTGF5ZXJPcHRpb24gPSB7fVxuKTogTGF5ZXIgfCBudWxsIHtcbiAgY29uc3Qge3R5cGV9ID0gc2F2ZWRMYXllcjtcbiAgY29uc3Qge3Rocm93T25FcnJvcn0gPSBvcHRpb25zO1xuICAvLyBsYXllciBkb2VzbnQgaGF2ZSBhIHZhbGlkIHR5cGVcbiAgaWYgKCF0eXBlIHx8ICFsYXllckNsYXNzZXMuaGFzT3duUHJvcGVydHkodHlwZSkgfHwgIXNhdmVkTGF5ZXIuY29uZmlnKSB7XG4gICAgaWYgKHRocm93T25FcnJvcikge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKGBMYXllciBoYXMgaW52YWxpZCB0eXBlIFwiJHt0eXBlfVwiIG9yIGNvbmZpZyBpcyBtaXNzaW5nYCk7XG4gICAgfVxuICAgIHJldHVybiBudWxsO1xuICB9XG5cbiAgbGV0IG5ld0xheWVyID0gbmV3IGxheWVyQ2xhc3Nlc1t0eXBlXSh7XG4gICAgaWQ6IHNhdmVkTGF5ZXIuaWQsXG4gICAgZGF0YUlkLFxuICAgIGxhYmVsOiBzYXZlZExheWVyLmNvbmZpZy5sYWJlbCxcbiAgICBjb2xvcjogc2F2ZWRMYXllci5jb25maWcuY29sb3IsXG4gICAgaXNWaXNpYmxlOiBzYXZlZExheWVyLmNvbmZpZy5pc1Zpc2libGUsXG4gICAgaGlkZGVuOiBzYXZlZExheWVyLmNvbmZpZy5oaWRkZW4sXG4gICAgaGlnaGxpZ2h0Q29sb3I6IHNhdmVkTGF5ZXIuY29uZmlnLmhpZ2hsaWdodENvbG9yXG4gIH0pO1xuXG4gIC8vIGZpbmQgY29sdW1uIGZpZWxkSWR4XG4gIGNvbnN0IGNvbHVtbkNvbmZpZyA9IG5ld0xheWVyLmdldExheWVyQ29sdW1ucygpO1xuICBpZiAoT2JqZWN0LmtleXMoY29sdW1uQ29uZmlnKSkge1xuICAgIGNvbnN0IGNvbHVtbnMgPSB2YWxpZGF0ZVNhdmVkTGF5ZXJDb2x1bW5zKFxuICAgICAgZmllbGRzLFxuICAgICAgc2F2ZWRMYXllci5jb25maWcuY29sdW1ucyxcbiAgICAgIGNvbHVtbkNvbmZpZyxcbiAgICAgIG9wdGlvbnNcbiAgICApO1xuICAgIGlmIChjb2x1bW5zKSB7XG4gICAgICBuZXdMYXllci51cGRhdGVMYXllckNvbmZpZyh7Y29sdW1uc30pO1xuICAgIH0gZWxzZSBpZiAoIW9wdGlvbnMuYWxsb3dFbXB0eUNvbHVtbikge1xuICAgICAgcmV0dXJuIG51bGw7XG4gICAgfVxuICB9XG5cbiAgLy8gdmlzdWFsIGNoYW5uZWwgZmllbGQgaXMgc2F2ZWQgdG8gYmUge25hbWUsIHR5cGV9XG4gIC8vIGZpbmQgdmlzdWFsIGNoYW5uZWwgZmllbGQgYnkgbWF0Y2hpbmcgYm90aCBuYW1lIGFuZCB0eXBlXG4gIC8vIHJlZmVyIHRvIHZpcy1zdGF0ZS1zY2hlbWEuanMgVmlzdWFsQ2hhbm5lbFNjaGVtYVYxXG4gIG5ld0xheWVyID0gdmFsaWRhdGVTYXZlZFZpc3VhbENoYW5uZWxzKGZpZWxkcywgbmV3TGF5ZXIsIHNhdmVkTGF5ZXIsIG9wdGlvbnMpO1xuXG4gIGNvbnN0IHRleHRMYWJlbCA9XG4gICAgc2F2ZWRMYXllci5jb25maWcudGV4dExhYmVsICYmIG5ld0xheWVyLmNvbmZpZy50ZXh0TGFiZWxcbiAgICAgID8gdmFsaWRhdGVTYXZlZFRleHRMYWJlbChcbiAgICAgICAgICBmaWVsZHMsXG4gICAgICAgICAgbmV3TGF5ZXIuY29uZmlnLnRleHRMYWJlbCxcbiAgICAgICAgICBzYXZlZExheWVyLmNvbmZpZy50ZXh0TGFiZWwsXG4gICAgICAgICAgb3B0aW9uc1xuICAgICAgICApXG4gICAgICA6IG5ld0xheWVyLmNvbmZpZy50ZXh0TGFiZWw7XG5cbiAgLy8gY29weSB2aXNDb25maWcgb3ZlciB0byBlbXB0eUxheWVyIHRvIG1ha2Ugc3VyZSBpdCBoYXMgYWxsIHRoZSBwcm9wc1xuICBjb25zdCB2aXNDb25maWcgPSBuZXdMYXllci5jb3B5TGF5ZXJDb25maWcoXG4gICAgbmV3TGF5ZXIuY29uZmlnLnZpc0NvbmZpZyxcbiAgICBzYXZlZExheWVyLmNvbmZpZy52aXNDb25maWcgfHwge30sXG4gICAge3NoYWxsb3dDb3B5OiBbJ2NvbG9yUmFuZ2UnLCAnc3Ryb2tlQ29sb3JSYW5nZSddfVxuICApO1xuXG4gIG5ld0xheWVyLnVwZGF0ZUxheWVyQ29uZmlnKHtcbiAgICB2aXNDb25maWcsXG4gICAgdGV4dExhYmVsXG4gIH0pO1xuXG4gIGlmICh0aHJvd09uRXJyb3IpIHtcbiAgICBpZiAoIW5ld0xheWVyLmlzVmFsaWRUb1NhdmUoKSkge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKGBMYXllciBpcyBub3QgdmFsaWQgdG8gc2F2ZTogJHtuZXdMYXllci5pZH1gKTtcbiAgICB9XG4gIH1cblxuICByZXR1cm4gbmV3TGF5ZXI7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBtZXJnZUVkaXRvcjxTIGV4dGVuZHMgVmlzU3RhdGU+KHN0YXRlOiBTLCBzYXZlZEVkaXRvcjogU2F2ZWRFZGl0b3IpIHtcbiAgaWYgKCFzYXZlZEVkaXRvcikge1xuICAgIHJldHVybiBzdGF0ZTtcbiAgfVxuICByZXR1cm4ge1xuICAgIC4uLnN0YXRlLFxuICAgIGVkaXRvcjoge1xuICAgICAgLi4uc3RhdGUuZWRpdG9yLFxuICAgICAgZmVhdHVyZXM6IFsuLi5zdGF0ZS5lZGl0b3IuZmVhdHVyZXMsIC4uLihzYXZlZEVkaXRvci5mZWF0dXJlcyB8fCBbXSldLFxuICAgICAgLy8gaWYgc2F2ZWRFZGl0b3IudmlzaWJsZSBpcyB1bmRlZmluZWQga2VlcCBzdGF0ZS5lZGl0b3IudmlzaWJsZVxuICAgICAgdmlzaWJsZTogc2F2ZWRFZGl0b3IudmlzaWJsZSA/PyBzdGF0ZS5lZGl0b3IudmlzaWJsZVxuICAgIH1cbiAgfTtcbn1cblxuLyoqXG4gKiBWYWxpZGF0ZSBzYXZlZCBsYXllciBjb25maWcgd2l0aCBuZXcgZGF0YSxcbiAqIHVwZGF0ZSBmaWVsZElkeCBiYXNlZCBvbiBuZXcgZmllbGRzXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBtZXJnZURhdGFzZXRzQnlPcmRlcihzdGF0ZTogVmlzU3RhdGUsIG5ld0RhdGFFbnRyaWVzOiBEYXRhc2V0cyk6IERhdGFzZXRzIHtcbiAgY29uc3QgbWVyZ2VkID0ge1xuICAgIC4uLnN0YXRlLmRhdGFzZXRzLFxuICAgIC4uLm5ld0RhdGFFbnRyaWVzXG4gIH07XG5cbiAgaWYgKEFycmF5LmlzQXJyYXkoc3RhdGUucHJlc2VydmVEYXRhc2V0T3JkZXIpKSB7XG4gICAgLy8gcHJlc2VydmVEYXRhc2V0T3JkZXIgIG1pZ2h0IG5vdCBpbmNsdWRlIHRoZSAgbmV3IGRhdGFzZXRzXG4gICAgY29uc3QgbmV3RGF0YXNldElkcyA9IE9iamVjdC5rZXlzKG1lcmdlZCkuZmlsdGVyKFxuICAgICAgaWQgPT4gIXN0YXRlLnByZXNlcnZlRGF0YXNldE9yZGVyPy5pbmNsdWRlcyhpZClcbiAgICApO1xuICAgIHJldHVybiBbLi4uc3RhdGUucHJlc2VydmVEYXRhc2V0T3JkZXIsIC4uLm5ld0RhdGFzZXRJZHNdLnJlZHVjZShcbiAgICAgIChhY2N1LCBkYXRhSWQpID0+ICh7XG4gICAgICAgIC4uLmFjY3UsXG4gICAgICAgIC4uLihtZXJnZWRbZGF0YUlkXSA/IHtbZGF0YUlkXTogbWVyZ2VkW2RhdGFJZF19IDoge30pXG4gICAgICB9KSxcbiAgICAgIHt9XG4gICAgKTtcbiAgfVxuXG4gIHJldHVybiBtZXJnZWQ7XG59XG5cbmV4cG9ydCBjb25zdCBWSVNfU1RBVEVfTUVSR0VSUzogVmlzU3RhdGVNZXJnZXJzPGFueT4gPSBbXG4gIHtcbiAgICBtZXJnZTogbWVyZ2VMYXllcnMsXG4gICAgcHJvcDogJ2xheWVycycsXG4gICAgdG9NZXJnZVByb3A6ICdsYXllclRvQmVNZXJnZWQnLFxuICAgIHByZXNlcnZlT3JkZXI6ICdwcmVzZXJ2ZUxheWVyT3JkZXInXG4gIH0sXG4gIHtcbiAgICBtZXJnZTogbWVyZ2VGaWx0ZXJzLFxuICAgIHByb3A6ICdmaWx0ZXJzJyxcbiAgICB0b01lcmdlUHJvcDogJ2ZpbHRlclRvQmVNZXJnZWQnLFxuICAgIHByZXNlcnZlT3JkZXI6ICdwcmVzZXJ2ZUZpbHRlck9yZGVyJyxcbiAgICByZXBsYWNlUGFyZW50RGF0YXNldElkczogcmVwbGFjZUZpbHRlckRhdGFzZXRJZHNcbiAgfSxcbiAge1xuICAgIG1lcmdlOiBtZXJnZUVmZmVjdHMsXG4gICAgcHJvcDogJ2VmZmVjdHMnXG4gIH0sXG4gIHtcbiAgICBtZXJnZTogbWVyZ2VJbnRlcmFjdGlvbnMsXG4gICAgcHJvcDogJ2ludGVyYWN0aW9uQ29uZmlnJyxcbiAgICB0b01lcmdlUHJvcDogJ2ludGVyYWN0aW9uVG9CZU1lcmdlZCcsXG4gICAgcmVwbGFjZVBhcmVudERhdGFzZXRJZHM6IHJlcGxhY2VJbnRlcmFjdGlvbkRhdGFzZXRJZHMsXG4gICAgc2F2ZVVubWVyZ2VkOiBzYXZlZFVubWVyZ2VkSW50ZXJhY3Rpb25cbiAgfSxcbiAge21lcmdlOiBtZXJnZUxheWVyQmxlbmRpbmcsIHByb3A6ICdsYXllckJsZW5kaW5nJ30sXG4gIHttZXJnZTogbWVyZ2VPdmVybGF5QmxlbmRpbmcsIHByb3A6ICdvdmVybGF5QmxlbmRpbmcnfSxcbiAge21lcmdlOiBtZXJnZVNwbGl0TWFwcywgcHJvcDogJ3NwbGl0TWFwcycsIHRvTWVyZ2VQcm9wOiAnc3BsaXRNYXBzVG9CZU1lcmdlZCd9LFxuICB7bWVyZ2U6IG1lcmdlQW5pbWF0aW9uQ29uZmlnLCBwcm9wOiAnYW5pbWF0aW9uQ29uZmlnJ30sXG4gIHttZXJnZTogbWVyZ2VFZGl0b3IsIHByb3A6ICdlZGl0b3InfVxuXTtcbiJdfQ==
|
|
915
|
+
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uL3NyYy92aXMtc3RhdGUtbWVyZ2VyLnRzIl0sIm5hbWVzIjpbIm1lcmdlRmlsdGVycyIsInN0YXRlIiwiZmlsdGVyc1RvTWVyZ2UiLCJmcm9tQ29uZmlnIiwicHJlc2VydmVGaWx0ZXJPcmRlciIsIm1hcCIsImwiLCJpZCIsIkFycmF5IiwiaXNBcnJheSIsImxlbmd0aCIsInZhbGlkYXRlZCIsImZhaWxlZCIsInVwZGF0ZWREYXRhc2V0cyIsInVwZGF0ZWRGaWx0ZXJzIiwiaW5zZXJ0SXRlbUJhc2VkT25QcmVzZXJ2ZWRPcmRlciIsImZpbHRlcnMiLCJkYXRhc2V0c1RvRmlsdGVyIiwiZiIsImRhdGFJZCIsImZpbHRlcmVkIiwibGF5ZXJzIiwiZGF0YXNldHMiLCJmaWx0ZXJUb0JlTWVyZ2VkIiwicmVwbGFjZUZpbHRlckRhdGFzZXRJZHMiLCJzYXZlZEZpbHRlciIsImRhdGFJZFRvVXNlIiwicmVwbGFjZWQiLCJmb3JFYWNoIiwiZmlsdGVyIiwiaW5jbHVkZXMiLCJuZXdEYXRhSWQiLCJkIiwicHVzaCIsImlzU2F2ZWRMYXllckNvbmZpZ1YxIiwibGF5ZXJDb25maWciLCJ2aXN1YWxDaGFubmVscyIsInBhcnNlTGF5ZXJDb25maWciLCJzY2hlbWEiLCJzYXZlZENvbmZpZyIsInZlcnNpb24iLCJDVVJSRU5UX1ZFUlNJT04iLCJjb25maWciLCJ2aXNTdGF0ZSIsImxheWVyT3JkZXIiLCJwYXJzZVNhdmVkQ29uZmlnIiwiY3VycmVudEl0ZW1zIiwiaXRlbXMiLCJwcmVzZXJ2ZWRPcmRlciIsImRlZmF1bHRTdGFydCIsIm5ld0l0ZW1zIiwiaXRlbSIsImV4cGVjdGVkSWR4IiwiaW5kZXhPZiIsImluc2VydEF0IiwiaSIsInByZWNlZWRJZHgiLCJwcmVjZWVkSXRlbUlkIiwiZmluZEluZGV4IiwiY3JlYXRlTGF5ZXJGcm9tQ29uZmlnIiwicGFyc2VkTGF5ZXJDb25maWciLCJ2YWxpZGF0ZUxheWVyc0J5RGF0YXNldHMiLCJsYXllckNsYXNzZXMiLCJhbGxvd0VtcHR5Q29sdW1uIiwibmV3TGF5ZXIiLCJ1cGRhdGVMYXllckRvbWFpbiIsInNlcmlhbGl6ZUxheWVyIiwic2VyaWFsaXplZFZpc1N0YXRlIiwic2VyaWFsaXplVmlzU3RhdGUiLCJzZXJpYWxpemVFZmZlY3QiLCJuZXdFZmZlY3QiLCJlZmZlY3RzIiwiZWZmZWN0T3JkZXIiLCJzYXZlZFN0YXRlIiwiZ2V0Q29uZmlnVG9TYXZlIiwidW5kZWZpbmVkIiwibWVyZ2VMYXllcnMiLCJsYXllcnNUb01lcmdlIiwicHJlc2VydmVMYXllck9yZGVyIiwidW5tZXJnZWQiLCJ0b01lcmdlIiwiaXNNZXJnaW5nRGF0YXNldHMiLCJtZXJnZWRMYXllciIsImluc2VydExheWVyQXRSaWdodE9yZGVyIiwibmV3TGF5ZXJPcmRlciIsIm5ld0xheWVycyIsImxheWVyVG9CZU1lcmdlZCIsImN1cnJlbnRMYXllcnMiLCJsYXllcnNUb0luc2VydCIsImN1cnJlbnRPcmRlciIsImN1cnJlbnRMYXllclF1ZXVlIiwibGF5ZXIiLCJCb29sZWFuIiwiY29uY2F0IiwibmV3TGF5ZXJPcmRlclF1ZXVlIiwibWVyZ2VJbnRlcmFjdGlvbnMiLCJpbnRlcmFjdGlvblRvQmVNZXJnZWQiLCJtZXJnZWQiLCJPYmplY3QiLCJrZXlzIiwia2V5IiwiaW50ZXJhY3Rpb25Db25maWciLCJjdXJyZW50Q29uZmlnIiwiZW5hYmxlZCIsImNvbmZpZ1NhdmVkIiwiY29uZmlnVG9NZXJnZSIsIm1lcmdlSW50ZXJhY3Rpb25Ub29sdGlwQ29uZmlnIiwibWVyZ2VkVG9vbHRpcCIsInVubWVyZ2VkVG9vbHRpcCIsImZpZWxkc1RvU2hvdyIsInRvb2x0aXAiLCJuZXh0U3RhdGUiLCJzYXZlZFVubWVyZ2VkSW50ZXJhY3Rpb24iLCJyZXBsYWNlSW50ZXJhY3Rpb25EYXRhc2V0SWRzIiwiZGF0YUlkVG9SZXBsYWNlIiwibWVyZ2VTcGxpdE1hcHMiLCJzcGxpdE1hcHMiLCJzbSIsImVudHJpZXMiLCJ2YWx1ZSIsInB1c2hUbyIsImZpbmQiLCJzcGxpdE1hcHNUb0JlTWVyZ2VkIiwibWVyZ2VFZmZlY3RzIiwibmV3RWZmZWN0cyIsImVmZmVjdCIsImRlZXBtZXJnZSIsImFsbCIsImlzQ29uZmlnQWN0aXZlIiwiaXNWYWxpZFRvU2F2ZSIsInRvb2x0aXBDb25maWciLCJhbGxGaWVsZHMiLCJmaWVsZHMiLCJuYW1lIiwiZm91bmRGaWVsZHNUb1Nob3ciLCJmaWVsZCIsIm1lcmdlTGF5ZXJCbGVuZGluZyIsImxheWVyQmxlbmRpbmciLCJMQVlFUl9CTEVORElOR1MiLCJtZXJnZU92ZXJsYXlCbGVuZGluZyIsIm92ZXJsYXlCbGVuZGluZyIsIk9WRVJMQVlfQkxFTkRJTkdTIiwibWVyZ2VBbmltYXRpb25Db25maWciLCJhbmltYXRpb24iLCJjdXJyZW50VGltZSIsImFuaW1hdGlvbkNvbmZpZyIsImRvbWFpbiIsInZhbGlkYXRlU2F2ZWRMYXllckNvbHVtbnMiLCJzYXZlZENvbHMiLCJlbXB0eUNvbHMiLCJvcHRpb25zIiwiY29sdW1ucyIsInNhdmVkIiwiZmllbGRJZHgiLCJhbGxDb2xGb3VuZCIsImV2ZXJ5IiwidmFsaWRhdGVDb2x1bW4iLCJydiIsInRocm93T25FcnJvciIsInJlcXVpcmVkQ29sdW1ucyIsImsiLCJvcHRpb25hbCIsIm1pc3NpbmdDb2x1bW5zIiwiRXJyb3IiLCJqb2luIiwiY29uZmlnQ29sdW1ucyIsImludmFsaWRDb2x1bW5zIiwiY29sdW1uIiwidmFsaWRhdG9yIiwidmFsaWRhdGVTYXZlZFRleHRMYWJlbCIsInNhdmVkVGV4dExhYmVsIiwibGF5ZXJUZXh0TGFiZWwiLCJzYXZlZFRleHRMYWJlbHMiLCJ0ZXh0TGFiZWwiLCJmZCIsIkpTT04iLCJzdHJpbmdpZnkiLCJyZWR1Y2UiLCJhY2N1IiwidmFsaWRhdGVTYXZlZFZpc3VhbENoYW5uZWxzIiwic2F2ZWRMYXllciIsInZhbHVlcyIsInNjYWxlIiwiZm91bmRGaWVsZCIsImZvdW5kQ2hhbm5lbCIsInVwZGF0ZUxheWVyQ29uZmlnIiwidmFsaWRhdGVWaXN1YWxDaGFubmVsIiwiZmllbGROYW1lIiwidmFsaWRhdGVMYXllciIsInZhbGlkYXRlTGF5ZXJXaXRoRGF0YSIsInR5cGUiLCJoYXNPd25Qcm9wZXJ0eSIsImxhYmVsIiwiY29sb3IiLCJpc1Zpc2libGUiLCJoaWRkZW4iLCJoaWdobGlnaHRDb2xvciIsImNvbHVtbkNvbmZpZyIsImdldExheWVyQ29sdW1ucyIsInZpc0NvbmZpZyIsImNvcHlMYXllckNvbmZpZyIsInNoYWxsb3dDb3B5IiwibWVyZ2VFZGl0b3IiLCJzYXZlZEVkaXRvciIsImVkaXRvciIsImZlYXR1cmVzIiwidmlzaWJsZSIsIm1lcmdlRGF0YXNldHNCeU9yZGVyIiwibmV3RGF0YUVudHJpZXMiLCJwcmVzZXJ2ZURhdGFzZXRPcmRlciIsIm5ld0RhdGFzZXRJZHMiLCJWSVNfU1RBVEVfTUVSR0VSUyIsIm1lcmdlIiwicHJvcCIsInRvTWVyZ2VQcm9wIiwicHJlc2VydmVPcmRlciIsInJlcGxhY2VQYXJlbnREYXRhc2V0SWRzIiwic2F2ZVVubWVyZ2VkIl0sIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7QUFHQTs7QUFDQTs7QUFDQTs7QUFDQTs7QUFDQTs7QUFPQTs7QUFHQTs7QUFDQTs7QUFDQTs7QUFhQTs7Ozs7Ozs7Ozs7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNPLFNBQVNBLFlBQVQsQ0FDTEMsS0FESyxFQUVMQyxjQUZLLEVBR0xDLFVBSEssRUFJRjtBQUNILE1BQU1DLG1CQUFtQixHQUFHRCxVQUFVLEdBQ2xDRCxjQURrQyxhQUNsQ0EsY0FEa0MsdUJBQ2xDQSxjQUFjLENBQUVHLEdBQWhCLENBQW9CLFVBQUFDLENBQUM7QUFBQSxXQUFJQSxDQUFDLENBQUNDLEVBQU47QUFBQSxHQUFyQixDQURrQyxHQUVsQ04sS0FBSyxDQUFDRyxtQkFGVjs7QUFJQSxNQUFJLENBQUNJLEtBQUssQ0FBQ0MsT0FBTixDQUFjUCxjQUFkLENBQUQsSUFBa0MsQ0FBQ0EsY0FBYyxDQUFDUSxNQUF0RCxFQUE4RDtB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LEVBQUV6RztBQUxoQixDQWxCcUQsRUF5QnJEO0FBQUNvRyxFQUFBQSxLQUFLLEVBQUU1RSxrQkFBUjtBQUE0QjZFLEVBQUFBLElBQUksRUFBRTtBQUFsQyxDQXpCcUQsRUEwQnJEO0FBQUNELEVBQUFBLEtBQUssRUFBRXpFLG9CQUFSO0FBQThCMEUsRUFBQUEsSUFBSSxFQUFFO0FBQXBDLENBMUJxRCxFQTJCckQ7QUFBQ0QsRUFBQUEsS0FBSyxFQUFFakcsY0FBUjtBQUF3QmtHLEVBQUFBLElBQUksRUFBRSxXQUE5QjtBQUEyQ0MsRUFBQUEsV0FBVyxFQUFFO0FBQXhELENBM0JxRCxFQTRCckQ7QUFBQ0YsRUFBQUEsS0FBSyxFQUFFdEUsb0JBQVI7QUFBOEJ1RSxFQUFBQSxJQUFJLEVBQUU7QUFBcEMsQ0E1QnFELEVBNkJyRDtBQUFDRCxFQUFBQSxLQUFLLEVBQUVWLFdBQVI7QUFBcUJXLEVBQUFBLElBQUksRUFBRTtBQUEzQixDQTdCcUQsQ0FBaEQiLCJzb3VyY2VzQ29udGVudCI6WyIvLyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogTUlUXG4vLyBDb3B5cmlnaHQgY29udHJpYnV0b3JzIHRvIHRoZSBrZXBsZXIuZ2wgcHJvamVjdFxuXG5pbXBvcnQgdW5pcSBmcm9tICdsb2Rhc2gudW5pcSc7XG5pbXBvcnQgcGljayBmcm9tICdsb2Rhc2gucGljayc7XG5pbXBvcnQgZmxhdHRlbkRlZXAgZnJvbSAnbG9kYXNoLmZsYXR0ZW5kZWVwJztcbmltcG9ydCBkZWVwbWVyZ2UgZnJvbSAnZGVlcG1lcmdlJztcbmltcG9ydCB7XG4gIGFycmF5SW5zZXJ0LFxuICBnZXRJbml0aWFsTWFwTGF5ZXJzRm9yU3BsaXRNYXAsXG4gIGFwcGx5RmlsdGVyc1RvRGF0YXNldHMsXG4gIHZhbGlkYXRlRmlsdGVyc1VwZGF0ZURhdGFzZXRzLFxuICBmaW5kQnlJZFxufSBmcm9tICdAa2VwbGVyLmdsL3V0aWxzJztcbmltcG9ydCB7Z2V0TGF5ZXJPcmRlckZyb21MYXllcnN9IGZyb20gJ0BrZXBsZXIuZ2wvcmVkdWNlcnMnO1xuXG5pbXBvcnQge0xheWVyQ29sdW1ucywgTGF5ZXJDb2x1bW4sIExheWVyfSBmcm9tICdAa2VwbGVyLmdsL2xheWVycyc7XG5pbXBvcnQge2NyZWF0ZUVmZmVjdH0gZnJvbSAnQGtlcGxlci5nbC9lZmZlY3RzJztcbmltcG9ydCB7TEFZRVJfQkxFTkRJTkdTLCBPVkVSTEFZX0JMRU5ESU5HU30gZnJvbSAnQGtlcGxlci5nbC9jb25zdGFudHMnO1xuaW1wb3J0IHtDVVJSRU5UX1ZFUlNJT04sIFZpc1N0YXRlLCBWaXNTdGF0ZU1lcmdlcnMsIEtlcGxlckdMU2NoZW1hQ2xhc3N9IGZyb20gJ0BrZXBsZXIuZ2wvc2NoZW1hcyc7XG5cbmltcG9ydCB7XG4gIFBhcnNlZExheWVyLFxuICBQYXJzZWRWaXNTdGF0ZSxcbiAgU2F2ZWRJbnRlcmFjdGlvbkNvbmZpZyxcbiAgVG9vbHRpcEluZm8sXG4gIFNhdmVkRWRpdG9yLFxuICBQYXJzZWRDb25maWcsXG4gIEZpbHRlcixcbiAgRWZmZWN0IGFzIEVmZmVjdFR5cGUsXG4gIFBhcnNlZEVmZmVjdFxufSBmcm9tICdAa2VwbGVyLmdsL3R5cGVzJztcbmltcG9ydCB7S2VwbGVyVGFibGUsIERhdGFzZXRzLCBhc3NpZ25HcHVDaGFubmVscywgcmVzZXRGaWx0ZXJHcHVNb2RlfSBmcm9tICdAa2VwbGVyLmdsL3RhYmxlJztcblxuLyoqXG4gKiBNZXJnZSBsb2FkZWQgZmlsdGVycyB3aXRoIGN1cnJlbnQgc3RhdGUsIGlmIG5vIGZpZWxkcyBvciBkYXRhIGFyZSBsb2FkZWRcbiAqIHNhdmUgaXQgZm9yIGxhdGVyXG4gKlxuICovXG5leHBvcnQgZnVuY3Rpb24gbWVyZ2VGaWx0ZXJzPFMgZXh0ZW5kcyBWaXNTdGF0ZT4oXG4gIHN0YXRlOiBTLFxuICBmaWx0ZXJzVG9NZXJnZTogTm9uTnVsbGFibGU8UGFyc2VkQ29uZmlnWyd2aXNTdGF0ZSddPlsnZmlsdGVycyddLFxuICBmcm9tQ29uZmlnPzogYm9vbGVhblxuKTogUyB7XG4gIGNvbnN0IHByZXNlcnZlRmlsdGVyT3JkZXIgPSBmcm9tQ29uZmlnXG4gICAgPyBmaWx0ZXJzVG9NZXJnZT8ubWFwKGwgPT4gbC5pZClcbiAgICA6IHN0YXRlLnByZXNlcnZlRmlsdGVyT3JkZXI7XG5cbiAgaWYgKCFBcnJheS5pc0FycmF5KGZpbHRlcnNUb01lcmdlKSB8fCAhZmlsdGVyc1RvTWVyZ2UubGVuZ3RoKSB7XG4gICAgcmV0dXJuIHN0YXRlO1xuICB9XG5cbiAgY29uc3Qge3ZhbGlkYXRlZCwgZmFpbGVkLCB1cGRhdGVkRGF0YXNldHN9ID0gdmFsaWRhdGVGaWx0ZXJzVXBkYXRlRGF0YXNldHMoc3RhdGUsIGZpbHRlcnNUb01lcmdlKTtcbiAgbGV0IHVwZGF0ZWRGaWx0ZXJzID0gaW5zZXJ0SXRlbUJhc2VkT25QcmVzZXJ2ZWRPcmRlcihcbiAgICBzdGF0ZS5maWx0ZXJzLFxuICAgIHZhbGlkYXRlZCxcbiAgICBwcmVzZXJ2ZUZpbHRlck9yZGVyXG4gICk7XG5cbiAgLy8gbWVyZ2UgZmlsdGVyIHdpdGggZXhpc3RpbmdcbiAgdXBkYXRlZEZpbHRlcnMgPSByZXNldEZpbHRlckdwdU1vZGUodXBkYXRlZEZpbHRlcnMpO1xuICB1cGRhdGVkRmlsdGVycyA9IGFzc2lnbkdwdUNoYW5uZWxzKHVwZGF0ZWRGaWx0ZXJzKTtcbiAgLy8gZmlsdGVyIGRhdGFcbiAgY29uc3QgZGF0YXNldHNUb0ZpbHRlciA9IHVuaXEoZmxhdHRlbkRlZXAodmFsaWRhdGVkLm1hcChmID0+IGYuZGF0YUlkKSkpO1xuXG4gIGNvbnN0IGZpbHRlcmVkID0gYXBwbHlGaWx0ZXJzVG9EYXRhc2V0cyhcbiAgICBkYXRhc2V0c1RvRmlsdGVyLFxuICAgIHVwZGF0ZWREYXRhc2V0cyxcbiAgICB1cGRhdGVkRmlsdGVycyxcbiAgICBzdGF0ZS5sYXllcnNcbiAgKTtcblxuICByZXR1cm4ge1xuICAgIC4uLnN0YXRlLFxuICAgIGZpbHRlcnM6IHVwZGF0ZWRGaWx0ZXJzLFxuICAgIGRhdGFzZXRzOiBmaWx0ZXJlZCxcbiAgICBwcmVzZXJ2ZUZpbHRlck9yZGVyLFxuICAgIGZpbHRlclRvQmVNZXJnZWQ6IFsuLi5zdGF0ZS5maWx0ZXJUb0JlTWVyZ2VkLCAuLi5mYWlsZWRdXG4gIH07XG59XG5cbi8vIHJlcGxhY2UgZGF0YUlkIGluIHNhdmVkIEZpbHRlclxuZXhwb3J0IGZ1bmN0aW9uIHJlcGxhY2VGaWx0ZXJEYXRhc2V0SWRzKFxuICBzYXZlZEZpbHRlcjogRmlsdGVyW10sXG4gIGRhdGFJZDogc3RyaW5nLFxuICBkYXRhSWRUb1VzZTogc3RyaW5nXG4pIHtcbiAgY29uc3QgcmVwbGFjZWQ6IEZpbHRlcltdID0gW107XG4gIHNhdmVkRmlsdGVyLmZvckVhY2goZmlsdGVyID0+IHtcbiAgICBpZiAoZmlsdGVyLmRhdGFJZC5pbmNsdWRlcyhkYXRhSWQpKSB7XG4gICAgICBjb25zdCBuZXdEYXRhSWQgPSBmaWx0ZXIuZGF0YUlkLm1hcChkID0+IChkID09PSBkYXRhSWQgPyBkYXRhSWRUb1VzZSA6IGQpKTtcbiAgICAgIHJlcGxhY2VkLnB1c2goe1xuICAgICAgICAuLi5maWx0ZXIsXG4gICAgICAgIGRhdGFJZDogbmV3RGF0YUlkXG4gICAgICB9KTtcbiAgICB9XG4gIH0pO1xuICByZXR1cm4gcmVwbGFjZWQubGVuZ3RoID8gcmVwbGFjZWQgOiBudWxsO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gaXNTYXZlZExheWVyQ29uZmlnVjEobGF5ZXJDb25maWc6IGFueSk6IGJvb2xlYW4ge1xuICAvLyBleHBvcnRlZCBsYXllciBjb25maWd1cmF0aW9uIGNvbnRhaW5zIHZpc3VhbENoYW5uZWxzIHByb3BlcnR5XG4gIHJldHVybiBsYXllckNvbmZpZz8udmlzdWFsQ2hhbm5lbHM7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBwYXJzZUxheWVyQ29uZmlnKFxuICBzY2hlbWE6IEtlcGxlckdMU2NoZW1hQ2xhc3MsXG4gIGxheWVyQ29uZmlnOiBhbnlcbik6IFBhcnNlZExheWVyIHwgdW5kZWZpbmVkIHtcbiAgLy8gYXNzdW1lIHRoZSBsYXllciBjb25maWcgaXMgY3VycmVudCB2ZXJzaW9uXG4gIGNvbnN0IHNhdmVkQ29uZmlnID0ge1xuICAgIHZlcnNpb246IENVUlJFTlRfVkVSU0lPTixcbiAgICBjb25maWc6IHtcbiAgICAgIHZpc1N0YXRlOiB7bGF5ZXJzOiBbbGF5ZXJDb25maWddLCBsYXllck9yZGVyOiBbbGF5ZXJDb25maWcuaWRdfVxuICAgIH1cbiAgfTtcblxuICByZXR1cm4gc2NoZW1hLnBhcnNlU2F2ZWRDb25maWcoc2F2ZWRDb25maWcpPy52aXNTdGF0ZT8ubGF5ZXJzPy5bMF07XG59XG5cbmZ1bmN0aW9uIGluc2VydEl0ZW1CYXNlZE9uUHJlc2VydmVkT3JkZXIoXG4gIGN1cnJlbnRJdGVtczogRmlsdGVyW10sXG4gIGl0ZW1zOiBGaWx0ZXJbXSxcbiAgcHJlc2VydmVkT3JkZXI6IGFueVtdID0gW10sXG4gIGRlZmF1bHRTdGFydD86IGJvb2xlYW5cbikge1xuICBsZXQgbmV3SXRlbXMgPSBbLi4uY3VycmVudEl0ZW1zXTtcblxuICBmb3IgKGNvbnN0IGl0ZW0gb2YgaXRlbXMpIHtcbiAgICBjb25zdCBleHBlY3RlZElkeCA9IHByZXNlcnZlZE9yZGVyLmluZGV4T2YoaXRlbS5pZCk7XG4gICAgLy8gaW5zZXJ0QXQgdGhlIGVuZCBieSBkZWZhdWx0XG4gICAgbGV0IGluc2VydEF0ID0gZGVmYXVsdFN0YXJ0ID8gMCA6IG5ld0l0ZW1zLmxlbmd0aDtcbiAgICBpZiAoZXhwZWN0ZWRJZHggPiAwKSB7XG4gICAgICAvLyBsb29rIGZvciBsYXllciB0byBpbnNlcnQgYWZ0ZXJcbiAgICAgIGxldCBpID0gZXhwZWN0ZWRJZHggKyAxO1xuICAgICAgbGV0IHByZWNlZWRJZHggPSAtMTtcbiAgICAgIHdoaWxlIChpLS0gPiAwICYmIHByZWNlZWRJZHggPCAwKSB7XG4gICAgICAgIC8vIGtlZXAgbG9va2luZyBmb3IgcHJlY2VlZCBsYXllciB0aGF0IGlzIGFscmVhZHkgbG9hZGVkXG4gICAgICAgIGNvbnN0IHByZWNlZWRJdGVtSWQgPSBwcmVzZXJ2ZWRPcmRlcltpIC0gMV07XG4gICAgICAgIHByZWNlZWRJZHggPSBuZXdJdGVtcy5maW5kSW5kZXgoZCA9PiBkLmlkID09PSBwcmVjZWVkSXRlbUlkKTtcbiAgICAgIH1cbiAgICAgIGlmIChwcmVjZWVkSWR4ID4gLTEpIHtcbiAgICAgICAgLy8gaWYgZm91bmRcbiAgICAgICAgaW5zZXJ0QXQgPSBwcmVjZWVkSWR4ICsgMTtcbiAgICAgIH1cbiAgICB9XG4gICAgbmV3SXRlbXMgPSBhcnJheUluc2VydChuZXdJdGVtcywgaW5zZXJ0QXQsIGl0ZW0pO1xuICB9XG4gIHJldHVybiBuZXdJdGVtcztcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGNyZWF0ZUxheWVyRnJvbUNvbmZpZyhzdGF0ZTogVmlzU3RhdGUsIGxheWVyQ29uZmlnOiBhbnkpOiBMYXllciB8IG51bGwge1xuICAvLyBjaGVjayBpZiB0aGUgbGF5ZXIgY29uZmlnIGlzIHBhcnNlZFxuICBjb25zdCBwYXJzZWRMYXllckNvbmZpZyA9IGlzU2F2ZWRMYXllckNvbmZpZ1YxKGxheWVyQ29uZmlnKVxuICAgID8gcGFyc2VMYXllckNvbmZpZyhzdGF0ZS5zY2hlbWEsIGxheWVyQ29uZmlnKVxuICAgIDogbGF5ZXJDb25maWc7XG5cbiAgaWYgKCFwYXJzZWRMYXllckNvbmZpZykge1xuICAgIHJldHVybiBudWxsO1xuICB9XG4gIC8vIGZpcnN0IHZhbGlkYXRlIGNvbmZpZyBhZ2FpbnN0IGRhdGFzZXRcbiAgY29uc3Qge3ZhbGlkYXRlZCwgZmFpbGVkfSA9IHZhbGlkYXRlTGF5ZXJzQnlEYXRhc2V0cyhcbiAgICBzdGF0ZS5kYXRhc2V0cyxcbiAgICBzdGF0ZS5sYXllckNsYXNzZXMsXG4gICAgW3BhcnNlZExheWVyQ29uZmlnXSxcbiAgICB7YWxsb3dFbXB0eUNvbHVtbjogdHJ1ZX1cbiAgKTtcblxuICBpZiAoZmFpbGVkPy5sZW5ndGggfHwgIXZhbGlkYXRlZC5sZW5ndGgpIHtcbiAgICAvLyBmYWlsZWRcbiAgICByZXR1cm4gbnVsbDtcbiAgfVxuXG4gIGNvbnN0IG5ld0xheWVyID0gdmFsaWRhdGVkWzBdO1xuICBuZXdMYXllci51cGRhdGVMYXllckRvbWFpbihzdGF0ZS5kYXRhc2V0cyk7XG4gIHJldHVybiBuZXdMYXllcjtcbn1cblxuLyoqXG4gKiBHZXQgbG9hZGVkIGxheWVyIGZyb20gc3RhdGVcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHNlcmlhbGl6ZUxheWVyKFxuICBuZXdMYXllcjogTGF5ZXIsXG4gIHNjaGVtYTogS2VwbGVyR0xTY2hlbWFDbGFzc1xuKTogUGFyc2VkTGF5ZXIgfCB1bmRlZmluZWQge1xuICBjb25zdCBzZXJpYWxpemVkVmlzU3RhdGUgPSBzZXJpYWxpemVWaXNTdGF0ZShcbiAgICB7bGF5ZXJzOiBbbmV3TGF5ZXJdLCBsYXllck9yZGVyOiBbbmV3TGF5ZXIuaWRdfSxcbiAgICBzY2hlbWFcbiAgKTtcbiAgcmV0dXJuIHNlcmlhbGl6ZWRWaXNTdGF0ZT8ubGF5ZXJzPy5bMF07XG59XG5cbi8qKlxuICogR2V0IGxvYWRlZCBlZmZlY3QgZnJvbSBzdGF0ZVxuICovXG5leHBvcnQgZnVuY3Rpb24gc2VyaWFsaXplRWZmZWN0KFxuICBuZXdFZmZlY3Q6IEVmZmVjdFR5cGUsXG4gIHNjaGVtYTogS2VwbGVyR0xTY2hlbWFDbGFzc1xuKTogUGFyc2VkRWZmZWN0IHwgdW5kZWZpbmVkIHtcbiAgY29uc3Qgc2VyaWFsaXplZFZpc1N0YXRlID0gc2VyaWFsaXplVmlzU3RhdGUoXG4gICAge2VmZmVjdHM6IFtuZXdFZmZlY3RdLCBlZmZlY3RPcmRlcjogW25ld0VmZmVjdC5pZF19LFxuICAgIHNjaGVtYVxuICApO1xuICByZXR1cm4gc2VyaWFsaXplZFZpc1N0YXRlPy5lZmZlY3RzPy5bMF07XG59XG5cbi8qKlxuICogR2V0IHZpcyBzdGF0ZSBjb25maWdcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHNlcmlhbGl6ZVZpc1N0YXRlKFxuICB2aXNTdGF0ZTogUGFydGlhbDxWaXNTdGF0ZT4sXG4gIHNjaGVtYTogS2VwbGVyR0xTY2hlbWFDbGFzc1xuKTogUGFyc2VkVmlzU3RhdGUgfCB1bmRlZmluZWQge1xuICBjb25zdCBzYXZlZFN0YXRlID0gc2NoZW1hLmdldENvbmZpZ1RvU2F2ZSh7XG4gICAgdmlzU3RhdGVcbiAgfSk7XG4gIHJldHVybiBzYXZlZFN0YXRlID8gc2NoZW1hLnBhcnNlU2F2ZWRDb25maWcoc2F2ZWRTdGF0ZSk/LnZpc1N0YXRlIDogdW5kZWZpbmVkO1xufVxuLyoqXG4gKiBNZXJnZSBsYXllcnMgZnJvbSBkZS1zZXJpYWxpemVkIHN0YXRlLCBpZiBubyBmaWVsZHMgb3IgZGF0YSBhcmUgbG9hZGVkXG4gKiBzYXZlIGl0IGZvciBsYXRlclxuICpcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIG1lcmdlTGF5ZXJzPFMgZXh0ZW5kcyBWaXNTdGF0ZT4oXG4gIHN0YXRlOiBTLFxuICBsYXllcnNUb01lcmdlOiBOb25OdWxsYWJsZTxQYXJzZWRDb25maWdbJ3Zpc1N0YXRlJ10+WydsYXllcnMnXSA9IFtdLFxuICBmcm9tQ29uZmlnPzogYm9vbGVhblxuKTogUyB7XG4gIGNvbnN0IHByZXNlcnZlTGF5ZXJPcmRlciA9IGZyb21Db25maWdcbiAgICA/IGdldExheWVyT3JkZXJGcm9tTGF5ZXJzKGxheWVyc1RvTWVyZ2UpXG4gICAgOiBzdGF0ZS5wcmVzZXJ2ZUxheWVyT3JkZXI7XG4gIGlmICghQXJyYXkuaXNBcnJheShsYXllcnNUb01lcmdlKSB8fCAhbGF5ZXJzVG9NZXJnZS5sZW5ndGgpIHtcbiAgICByZXR1cm4gc3RhdGU7XG4gIH1cbiAgLy8gZG9uJ3QgbWVyZ2UgbGF5ZXIgaWYgZGF0YXNldCBpcyBiZWluZyBtZXJnZWRcbiAgY29uc3QgdW5tZXJnZWQ6IFBhcnNlZExheWVyW10gPSBbXTtcbiAgY29uc3QgdG9NZXJnZTogUGFyc2VkTGF5ZXJbXSA9IFtdO1xuICBsYXllcnNUb01lcmdlLmZvckVhY2goKGw6IFBhcnNlZExheWVyKSA9PiB7XG4gICAgaWYgKGw/LmNvbmZpZz8uZGF0YUlkICYmIHN0YXRlLmlzTWVyZ2luZ0RhdGFzZXRzW2wuY29uZmlnLmRhdGFJZF0pIHtcbiAgICAgIHVubWVyZ2VkLnB1c2gobCk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHRvTWVyZ2UucHVzaChsKTtcbiAgICB9XG4gIH0pO1xuXG4gIGNvbnN0IHt2YWxpZGF0ZWQ6IG1lcmdlZExheWVyLCBmYWlsZWR9ID0gdmFsaWRhdGVMYXllcnNCeURhdGFzZXRzKFxuICAgIHN0YXRlLmRhdGFzZXRzLFxuICAgIHN0YXRlLmxheWVyQ2xhc3NlcyxcbiAgICB0b01lcmdlXG4gICk7XG4gIHVubWVyZ2VkLnB1c2goLi4uZmFpbGVkKTtcbiAgLy8gcHV0IG5ldyBsYXllcnMgaW4gZnJvbnQgb2YgY3VycmVudCBsYXllcnNcbiAgY29uc3Qge25ld0xheWVyT3JkZXIsIG5ld0xheWVyc30gPSBpbnNlcnRMYXllckF0UmlnaHRPcmRlcihcbiAgICBzdGF0ZS5sYXllcnMsXG4gICAgbWVyZ2VkTGF5ZXIsXG4gICAgc3RhdGUubGF5ZXJPcmRlcixcbiAgICBwcmVzZXJ2ZUxheWVyT3JkZXJcbiAgKTtcblxuICByZXR1cm4ge1xuICAgIC4uLnN0YXRlLFxuICAgIGxheWVyczogbmV3TGF5ZXJzLFxuICAgIGxheWVyT3JkZXI6IG5ld0xheWVyT3JkZXIsXG4gICAgcHJlc2VydmVMYXllck9yZGVyLFxuICAgIGxheWVyVG9CZU1lcmdlZDogWy4uLnN0YXRlLmxheWVyVG9CZU1lcmdlZCwgLi4udW5tZXJnZWRdXG4gIH07XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBpbnNlcnRMYXllckF0UmlnaHRPcmRlcihcbiAgY3VycmVudExheWVycyxcbiAgbGF5ZXJzVG9JbnNlcnQsXG4gIGN1cnJlbnRPcmRlcixcbiAgcHJlc2VydmVkT3JkZXI6IHN0cmluZ1tdID0gW11cbikge1xuICBpZiAoIWxheWVyc1RvSW5zZXJ0Py5sZW5ndGgpIHtcbiAgICByZXR1cm4ge25ld0xheWVyczogY3VycmVudExheWVycywgbmV3TGF5ZXJPcmRlcjogY3VycmVudE9yZGVyfTtcbiAgfVxuICAvLyBwZXJzZXJ2ZWRPcmRlciBbJ2EnLCAnYicsICdjJ107XG4gIC8vIGxheWVyT3JkZXIgWydhJywgJ2InLCAnYyddXG4gIGNvbnN0IGN1cnJlbnRMYXllclF1ZXVlID0gY3VycmVudE9yZGVyXG4gICAgLm1hcChpZCA9PiBmaW5kQnlJZChpZCkoY3VycmVudExheWVycykpXG4gICAgLmZpbHRlcihsYXllciA9PiBCb29sZWFuKGxheWVyKSk7XG4gIGNvbnN0IG5ld0xheWVycyA9IGN1cnJlbnRMYXllcnMuY29uY2F0KGxheWVyc1RvSW5zZXJ0KTtcbiAgY29uc3QgbmV3TGF5ZXJPcmRlclF1ZXVlID0gaW5zZXJ0SXRlbUJhc2VkT25QcmVzZXJ2ZWRPcmRlcihcbiAgICBjdXJyZW50TGF5ZXJRdWV1ZSxcbiAgICBsYXllcnNUb0luc2VydCxcbiAgICBwcmVzZXJ2ZWRPcmRlcixcbiAgICB0cnVlXG4gICk7XG5cbiAgLy8gcmVjb25zdHJ1Y3QgbGF5ZXJPcmRlciBhZnRlciBpbnNlcnRcbiAgY29uc3QgbmV3TGF5ZXJPcmRlciA9IGdldExheWVyT3JkZXJGcm9tTGF5ZXJzKG5ld0xheWVyT3JkZXJRdWV1ZSk7XG5cbiAgcmV0dXJuIHtcbiAgICBuZXdMYXllck9yZGVyLFxuICAgIG5ld0xheWVyc1xuICB9O1xufVxuXG4vKipcbiAqIE1lcmdlIGludGVyYWN0aW9ucyB3aXRoIHNhdmVkIGNvbmZpZ1xuICpcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIG1lcmdlSW50ZXJhY3Rpb25zPFMgZXh0ZW5kcyBWaXNTdGF0ZT4oXG4gIHN0YXRlOiBTLFxuICBpbnRlcmFjdGlvblRvQmVNZXJnZWQ6IFBhcnRpYWw8U2F2ZWRJbnRlcmFjdGlvbkNvbmZpZz4gfCB1bmRlZmluZWQsXG4gIGZyb21Db25maWc/OiBib29sZWFuXG4pOiBTIHtcbiAgY29uc3QgbWVyZ2VkOiBQYXJ0aWFsPFNhdmVkSW50ZXJhY3Rpb25Db25maWc+ID0ge307XG4gIGNvbnN0IHVubWVyZ2VkOiBQYXJ0aWFsPFNhdmVkSW50ZXJhY3Rpb25Db25maWc+ID0ge307XG5cbiAgaWYgKGludGVyYWN0aW9uVG9CZU1lcmdlZCkge1xuICAgIChPYmplY3Qua2V5cyhpbnRlcmFjdGlvblRvQmVNZXJnZWQpIGFzIEFycmF5PGtleW9mIFNhdmVkSW50ZXJhY3Rpb25Db25maWc+KS5mb3JFYWNoKGtleSA9PiB7XG4gICAgICBpZiAoIXN0YXRlLmludGVyYWN0aW9uQ29uZmlnW2tleV0pIHtcbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuXG4gICAgICBjb25zdCBjdXJyZW50Q29uZmlnID1cbiAgICAgICAga2V5ID09PSAndG9vbHRpcCcgfHwga2V5ID09PSAnYnJ1c2gnID8gc3RhdGUuaW50ZXJhY3Rpb25Db25maWdba2V5XS5jb25maWcgOiBudWxsO1xuXG4gICAgICBjb25zdCB7ZW5hYmxlZCwgLi4uY29uZmlnU2F2ZWR9ID0gaW50ZXJhY3Rpb25Ub0JlTWVyZ2VkW2tleV0gfHwge307XG5cbiAgICAgIGxldCBjb25maWdUb01lcmdlID0gY29uZmlnU2F2ZWQ7XG5cbiAgICAgIGlmIChrZXkgPT09ICd0b29sdGlwJykge1xuICAgICAgICBjb25zdCB7bWVyZ2VkVG9vbHRpcCwgdW5tZXJnZWRUb29sdGlwfSA9IG1lcmdlSW50ZXJhY3Rpb25Ub29sdGlwQ29uZmlnKFxuICAgICAgICAgIHN0YXRlLFxuICAgICAgICAgIGNvbmZpZ1NhdmVkIGFzIFNhdmVkSW50ZXJhY3Rpb25Db25maWdbJ3Rvb2x0aXAnXVxuICAgICAgICApO1xuXG4gICAgICAgIC8vIG1lcmdlIG5ldyBkYXRhc2V0IHRvb2x0aXBzIHdpdGggb3JpZ2luYWwgZGF0YXNldCB0b29sdGlwc1xuICAgICAgICBjb25maWdUb01lcmdlID0ge1xuICAgICAgICAgIGZpZWxkc1RvU2hvdzoge1xuICAgICAgICAgICAgLi4uKGN1cnJlbnRDb25maWcgYXMgVG9vbHRpcEluZm9bJ2NvbmZpZyddKS5maWVsZHNUb1Nob3csXG4gICAgICAgICAgICAuLi5tZXJnZWRUb29sdGlwXG4gICAgICAgICAgfVxuICAgICAgICB9O1xuXG4gICAgICAgIGlmIChPYmplY3Qua2V5cyh1bm1lcmdlZFRvb2x0aXApLmxlbmd0aCkge1xuICAgICAgICAgIC8vIEB0cy1leHBlY3QtZXJyb3JcbiAgICAgICAgICB1bm1lcmdlZC50b29sdGlwID0ge2ZpZWxkc1RvU2hvdzogdW5tZXJnZWRUb29sdGlwLCBlbmFibGVkOiBCb29sZWFuKGVuYWJsZWQpfTtcbiAgICAgICAgfVxuICAgICAgfVxuXG4gICAgICBtZXJnZWRba2V5XSA9IHtcbiAgICAgICAgLi4uc3RhdGUuaW50ZXJhY3Rpb25Db25maWdba2V5XSxcbiAgICAgICAgZW5hYmxlZDogQm9vbGVhbihlbmFibGVkKSxcbiAgICAgICAgLi4uKGN1cnJlbnRDb25maWdcbiAgICAgICAgICA/IHtcbiAgICAgICAgICAgICAgY29uZmlnOiBwaWNrKFxuICAgICAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICAgIC4uLmN1cnJlbnRDb25maWcsXG4gICAgICAgICAgICAgICAgICAuLi5jb25maWdUb01lcmdlXG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICBPYmplY3Qua2V5cyhjdXJyZW50Q29uZmlnKVxuICAgICAgICAgICAgICApXG4gICAgICAgICAgICB9XG4gICAgICAgICAgOiB7fSlcbiAgICAgIH07XG4gICAgfSk7XG4gIH1cblxuICBjb25zdCBuZXh0U3RhdGUgPSB7XG4gICAgLi4uc3RhdGUsXG4gICAgaW50ZXJhY3Rpb25Db25maWc6IHtcbiAgICAgIC4uLnN0YXRlLmludGVyYWN0aW9uQ29uZmlnLFxuICAgICAgLi4ubWVyZ2VkXG4gICAgfSxcbiAgICBpbnRlcmFjdGlvblRvQmVNZXJnZWQ6IHNhdmVkVW5tZXJnZWRJbnRlcmFjdGlvbihzdGF0ZSwgdW5tZXJnZWQpXG4gIH07XG4gIHJldHVybiBuZXh0U3RhdGU7XG59XG5cbmZ1bmN0aW9uIHNhdmVkVW5tZXJnZWRJbnRlcmFjdGlvbjxTIGV4dGVuZHMgVmlzU3RhdGU+KFxuICBzdGF0ZTogUyxcbiAgdW5tZXJnZWQ6IFBhcnRpYWw8U2F2ZWRJbnRlcmFjdGlvbkNvbmZpZz5cbikge1xuICBpZiAoIXVubWVyZ2VkPy50b29sdGlwPy5maWVsZHNUb1Nob3cpIHtcbiAgICByZXR1cm4gc3RhdGUuaW50ZXJhY3Rpb25Ub0JlTWVyZ2VkO1xuICB9XG4gIHJldHVybiB7XG4gICAgdG9vbHRpcDoge1xuICAgICAgLi4uc3RhdGUuaW50ZXJhY3Rpb25Ub0JlTWVyZ2VkLnRvb2x0aXAsXG4gICAgICAuLi4odHlwZW9mIHVubWVyZ2VkPy50b29sdGlwPy5lbmFibGVkID09PSAnYm9vbGVhbidcbiAgICAgICAgPyB7ZW5hYmxlZDogdW5tZXJnZWQudG9vbHRpcC5lbmFibGVkfVxuICAgICAgICA6IHt9KSxcbiAgICAgIGZpZWxkc1RvU2hvdzoge1xuICAgICAgICAuLi5zdGF0ZS5pbnRlcmFjdGlvblRvQmVNZXJnZWQ/LnRvb2x0aXA/LmZpZWxkc1RvU2hvdyxcbiAgICAgICAgLi4udW5tZXJnZWQ/LnRvb2x0aXA/LmZpZWxkc1RvU2hvd1xuICAgICAgfVxuICAgIH1cbiAgfTtcbn1cblxuZnVuY3Rpb24gcmVwbGFjZUludGVyYWN0aW9uRGF0YXNldElkcyhpbnRlcmFjdGlvbkNvbmZpZywgZGF0YUlkOiBzdHJpbmcsIGRhdGFJZFRvUmVwbGFjZTogc3RyaW5nKSB7XG4gIGlmIChpbnRlcmFjdGlvbkNvbmZpZz8udG9vbHRpcD8uZmllbGRzVG9TaG93W2RhdGFJZF0pIHtcbiAgICByZXR1cm4ge1xuICAgICAgLi4uaW50ZXJhY3Rpb25Db25maWcsXG4gICAgICB0b29sdGlwOiB7XG4gICAgICAgIC4uLmludGVyYWN0aW9uQ29uZmlnLnRvb2x0aXAsXG4gICAgICAgIGZpZWxkc1RvU2hvdzoge1xuICAgICAgICAgIFtkYXRhSWRUb1JlcGxhY2VdOiBpbnRlcmFjdGlvbkNvbmZpZz8udG9vbHRpcD8uZmllbGRzVG9TaG93W2RhdGFJZF1cbiAgICAgICAgfVxuICAgICAgfVxuICAgIH07XG4gIH1cbiAgcmV0dXJuIG51bGw7XG59XG4vKipcbiAqIE1lcmdlIHNwbGl0TWFwcyBjb25maWcgd2l0aCBjdXJyZW50IHZpc1N0ZXRlLlxuICogMS4gaWYgY3VycmVudCBtYXAgaXMgc3BsaXQsIGJ1dCBzcGxpdE1hcCBET0VTTk9UIGNvbnRhaW4gbWFwc1xuICogICAgOiBkb24ndCBtZXJnZSBhbnl0aGluZ1xuICogMi4gaWYgY3VycmVudCBtYXAgaXMgTk9UIHNwbGl0LCBidXQgc3BsaXRNYXBzIGNvbnRhaW4gbWFwc1xuICogICAgOiBhZGQgdG8gc3BsaXRNYXBzLCBhbmQgYWRkIGN1cnJlbnQgbGF5ZXJzIHRvIHNwbGl0TWFwc1xuICovXG5leHBvcnQgZnVuY3Rpb24gbWVyZ2VTcGxpdE1hcHM8UyBleHRlbmRzIFZpc1N0YXRlPihcbiAgc3RhdGU6IFMsXG4gIHNwbGl0TWFwczogTm9uTnVsbGFibGU8UGFyc2VkQ29uZmlnWyd2aXNTdGF0ZSddPlsnc3BsaXRNYXBzJ10gPSBbXSxcbiAgZnJvbUNvbmZpZz86IGJvb2xlYW5cbik6IFMge1xuICBjb25zdCBtZXJnZWQgPSBbLi4uc3RhdGUuc3BsaXRNYXBzXTtcbiAgY29uc3QgdW5tZXJnZWQgPSBbXTtcbiAgc3BsaXRNYXBzLmZvckVhY2goKHNtLCBpKSA9PiB7XG4gICAgY29uc3QgZW50cmllcyA9IE9iamVjdC5lbnRyaWVzKHNtLmxheWVycyk7XG4gICAgaWYgKGVudHJpZXMubGVuZ3RoID4gMCkge1xuICAgICAgZW50cmllcy5mb3JFYWNoKChbaWQsIHZhbHVlXSkgPT4ge1xuICAgICAgICAvLyBjaGVjayBpZiBsYXllciBleGlzdHNcbiAgICAgICAgY29uc3QgcHVzaFRvID0gc3RhdGUubGF5ZXJzLmZpbmQobCA9PiBsLmlkID09PSBpZCkgPyBtZXJnZWQgOiB1bm1lcmdlZDtcblxuICAgICAgICAvLyBjcmVhdGUgbWFwIHBhbmVsIGlmIGN1cnJlbnQgbWFwIGlzIG5vdCBzcGxpdFxuICAgICAgICBwdXNoVG9baV0gPSBwdXNoVG9baV0gfHwge1xuICAgICAgICAgIC8vIGtlZXAgaWRcbiAgICAgICAgICAuLi5zbSxcbiAgICAgICAgICBsYXllcnM6IHB1c2hUbyA9PT0gbWVyZ2VkID8gZ2V0SW5pdGlhbE1hcExheWVyc0ZvclNwbGl0TWFwKHN0YXRlLmxheWVycykgOiBbXVxuICAgICAgICB9O1xuICAgICAgICBwdXNoVG9baV0ubGF5ZXJzID0ge1xuICAgICAgICAgIC4uLnB1c2hUb1tpXS5sYXllcnMsXG4gICAgICAgICAgW2lkXTogdmFsdWVcbiAgICAgICAgfTtcbiAgICAgIH0pO1xuICAgIH0gZWxzZSB7XG4gICAgICAvLyBXZSBhcmUgbWVyZ2luZyBpZiB0aGVyZSBhcmUgbm8gbGF5ZXJzIGluIGJvdGggc3BsaXQgbWFwXG4gICAgICBtZXJnZWQucHVzaChzbSk7XG4gICAgfVxuICB9KTtcblxuICByZXR1cm4ge1xuICAgIC4uLnN0YXRlLFxuICAgIHNwbGl0TWFwczogbWVyZ2VkLFxuICAgIHNwbGl0TWFwc1RvQmVNZXJnZWQ6IFsuLi5zdGF0ZS5zcGxpdE1hcHNUb0JlTWVyZ2VkLCAuLi51bm1lcmdlZF1cbiAgfTtcbn1cblxuLyoqXG4gKiBNZXJnZSBlZmZlY3RzIHdpdGggc2F2ZWQgY29uZmlnXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBtZXJnZUVmZmVjdHM8UyBleHRlbmRzIFZpc1N0YXRlPihcbiAgc3RhdGU6IFMsXG4gIGVmZmVjdHM6IE5vbk51bGxhYmxlPFBhcnNlZENvbmZpZ1sndmlzU3RhdGUnXT5bJ2VmZmVjdHMnXSxcbiAgZnJvbUNvbmZpZz86IGJvb2xlYW5cbik6IFMge1xuICBjb25zdCBuZXdFZmZlY3RzID0gW1xuICAgIC4uLnN0YXRlLmVmZmVjdHMsXG4gICAgLi4uKGVmZmVjdHMgfHwgW10pXG4gICAgICAubWFwKGVmZmVjdCA9PiB7XG4gICAgICAgIHJldHVybiBmcm9tQ29uZmlnXG4gICAgICAgICAgPyBjcmVhdGVFZmZlY3QoXG4gICAgICAgICAgICAgIGRlZXBtZXJnZS5hbGwoW1xuICAgICAgICAgICAgICAgIGVmZmVjdCxcbiAgICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgICAvLyBjb2xsYXBzZSBhbGwgcGFuZWxzIHdoZW4gbG9hZGluZyBlZmZlY3RzXG4gICAgICAgICAgICAgICAgICBpc0NvbmZpZ0FjdGl2ZTogZmFsc2VcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgIF0pXG4gICAgICAgICAgICApXG4gICAgICAgICAgOiAoZWZmZWN0IGFzIEVmZmVjdFR5cGUpO1xuICAgICAgfSlcbiAgICAgIC5maWx0ZXIoZWZmZWN0ID0+IHtcbiAgICAgICAgcmV0dXJuIEJvb2xlYW4oZWZmZWN0ICYmIGVmZmVjdC5pc1ZhbGlkVG9TYXZlKCkpO1xuICAgICAgfSlcbiAgXTtcbiAgcmV0dXJuIHtcbiAgICAuLi5zdGF0ZSxcbiAgICBlZmZlY3RzOiBuZXdFZmZlY3RzLFxuICAgIGVmZmVjdE9yZGVyOiBuZXdFZmZlY3RzLm1hcChlZmZlY3QgPT4gZWZmZWN0LmlkKVxuICB9O1xufVxuXG4vKipcbiAqIE1lcmdlIGludGVyYWN0aW9uQ29uZmlnLnRvb2x0aXAgd2l0aCBzYXZlZCBjb25maWcsXG4gKiB2YWxpZGF0ZSBmaWVsZHNUb1Nob3dcbiAqXG4gKiBAcGFyYW0gc3RhdGVcbiAqIEBwYXJhbSB0b29sdGlwQ29uZmlnXG4gKiBAcmV0dXJuIC0ge21lcmdlZFRvb2x0aXA6IHt9LCB1bm1lcmdlZFRvb2x0aXA6IHt9fVxuICovXG5leHBvcnQgZnVuY3Rpb24gbWVyZ2VJbnRlcmFjdGlvblRvb2x0aXBDb25maWcoXG4gIHN0YXRlOiBWaXNTdGF0ZSxcbiAgdG9vbHRpcENvbmZpZzogUGljazxUb29sdGlwSW5mb1snY29uZmlnJ10sICdmaWVsZHNUb1Nob3cnPiB8IG51bGwgPSBudWxsXG4pIHtcbiAgY29uc3QgdW5tZXJnZWRUb29sdGlwOiBUb29sdGlwSW5mb1snY29uZmlnJ11bJ2ZpZWxkc1RvU2hvdyddID0ge307XG4gIGNvbnN0IG1lcmdlZFRvb2x0aXA6IFRvb2x0aXBJbmZvWydjb25maWcnXVsnZmllbGRzVG9TaG93J10gPSB7fTtcblxuICBpZiAoXG4gICAgIXRvb2x0aXBDb25maWcgfHxcbiAgICAhdG9vbHRpcENvbmZpZy5maWVsZHNUb1Nob3cgfHxcbiAgICAhT2JqZWN0LmtleXModG9vbHRpcENvbmZpZy5maWVsZHNUb1Nob3cpLmxlbmd0aFxuICApIHtcbiAgICByZXR1cm4ge21lcmdlZFRvb2x0aXAsIHVubWVyZ2VkVG9vbHRpcH07XG4gIH1cblxuICBmb3IgKGNvbnN0IGRhdGFJZCBpbiB0b29sdGlwQ29uZmlnLmZpZWxkc1RvU2hvdykge1xuICAgIGlmICghc3RhdGUuZGF0YXNldHNbZGF0YUlkXSB8fCBzdGF0ZS5pc01lcmdpbmdEYXRhc2V0c1tkYXRhSWRdKSB7XG4gICAgICAvLyBpcyBub3QgeWV0IGxvYWRlZFxuICAgICAgdW5tZXJnZWRUb29sdGlwW2RhdGFJZF0gPSB0b29sdGlwQ29uZmlnLmZpZWxkc1RvU2hvd1tkYXRhSWRdO1xuICAgIH0gZWxzZSB7XG4gICAgICAvLyBpZiBkYXRhc2V0IGlzIGxvYWRlZFxuICAgICAgY29uc3QgYWxsRmllbGRzID0gc3RhdGUuZGF0YXNldHNbZGF0YUlkXS5maWVsZHMubWFwKGQgPT4gZC5uYW1lKTtcbiAgICAgIGNvbnN0IGZvdW5kRmllbGRzVG9TaG93ID0gdG9vbHRpcENvbmZpZy5maWVsZHNUb1Nob3dbZGF0YUlkXS5maWx0ZXIoZmllbGQgPT5cbiAgICAgICAgYWxsRmllbGRzLmluY2x1ZGVzKGZpZWxkLm5hbWUpXG4gICAgICApO1xuXG4gICAgICBtZXJnZWRUb29sdGlwW2RhdGFJZF0gPSBmb3VuZEZpZWxkc1RvU2hvdztcbiAgICB9XG4gIH1cblxuICByZXR1cm4ge21lcmdlZFRvb2x0aXAsIHVubWVyZ2VkVG9vbHRpcH07XG59XG4vKipcbiAqIE1lcmdlIGxheWVyQmxlbmRpbmcgd2l0aCBzYXZlZFxuICpcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIG1lcmdlTGF5ZXJCbGVuZGluZzxTIGV4dGVuZHMgVmlzU3RhdGU+KFxuICBzdGF0ZTogUyxcbiAgbGF5ZXJCbGVuZGluZzogTm9uTnVsbGFibGU8UGFyc2VkQ29uZmlnWyd2aXNTdGF0ZSddPlsnbGF5ZXJCbGVuZGluZyddLFxuICBmcm9tQ29uZmlnPzogYm9vbGVhblxuKTogUyB7XG4gIGlmIChsYXllckJsZW5kaW5nICYmIExBWUVSX0JMRU5ESU5HU1tsYXllckJsZW5kaW5nXSkge1xuICAgIHJldHVybiB7XG4gICAgICAuLi5zdGF0ZSxcbiAgICAgIGxheWVyQmxlbmRpbmdcbiAgICB9O1xuICB9XG5cbiAgcmV0dXJuIHN0YXRlO1xufVxuXG4vKipcbiAqIE1lcmdlIG92ZXJsYXlCbGVuZGluZyB3aXRoIHNhdmVkXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBtZXJnZU92ZXJsYXlCbGVuZGluZzxTIGV4dGVuZHMgVmlzU3RhdGU+KFxuICBzdGF0ZTogUyxcbiAgb3ZlcmxheUJsZW5kaW5nOiBOb25OdWxsYWJsZTxQYXJzZWRDb25maWdbJ3Zpc1N0YXRlJ10+WydvdmVybGF5QmxlbmRpbmcnXSxcbiAgZnJvbUNvbmZpZz86IGJvb2xlYW5cbik6IFMge1xuICBpZiAob3ZlcmxheUJsZW5kaW5nICYmIE9WRVJMQVlfQkxFTkRJTkdTW292ZXJsYXlCbGVuZGluZ10pIHtcbiAgICByZXR1cm4ge1xuICAgICAgLi4uc3RhdGUsXG4gICAgICBvdmVybGF5QmxlbmRpbmdcbiAgICB9O1xuICB9XG5cbiAgcmV0dXJuIHN0YXRlO1xufVxuXG4vKipcbiAqIE1lcmdlIGFuaW1hdGlvbiBjb25maWdcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIG1lcmdlQW5pbWF0aW9uQ29uZmlnPFMgZXh0ZW5kcyBWaXNTdGF0ZT4oXG4gIHN0YXRlOiBTLFxuICBhbmltYXRpb246IE5vbk51bGxhYmxlPFBhcnNlZENvbmZpZ1sndmlzU3RhdGUnXT5bJ2FuaW1hdGlvbkNvbmZpZyddLFxuICBmcm9tQ29uZmlnPzogYm9vbGVhblxuKTogUyB7XG4gIGlmIChhbmltYXRpb24gJiYgYW5pbWF0aW9uLmN1cnJlbnRUaW1lKSB7XG4gICAgcmV0dXJuIHtcbiAgICAgIC4uLnN0YXRlLFxuICAgICAgYW5pbWF0aW9uQ29uZmlnOiB7XG4gICAgICAgIC4uLnN0YXRlLmFuaW1hdGlvbkNvbmZpZyxcbiAgICAgICAgLi4uYW5pbWF0aW9uLFxuICAgICAgICBkb21haW46IG51bGxcbiAgICAgIH1cbiAgICB9O1xuICB9XG5cbiAgcmV0dXJuIHN0YXRlO1xufVxuXG4vKipcbiAqIFZhbGlkYXRlIHNhdmVkIGxheWVyIGNvbHVtbnMgd2l0aCBuZXcgZGF0YSxcbiAqIHVwZGF0ZSBmaWVsZElkeCBiYXNlZCBvbiBuZXcgZmllbGRzXG4gKlxuICogQHBhcmFtIGZpZWxkc1xuICogQHBhcmFtIHNhdmVkQ29sc1xuICogQHBhcmFtIGVtcHR5Q29sc1xuICogQHBhcmFtIG9wdGlvbnNcbiAqIEByZXR1cm4gLSB2YWxpZGF0ZWQgY29sdW1ucyBvciBudWxsXG4gKi9cblxuZXhwb3J0IGZ1bmN0aW9uIHZhbGlkYXRlU2F2ZWRMYXllckNvbHVtbnMoXG4gIGZpZWxkczogS2VwbGVyVGFibGVbJ2ZpZWxkcyddLFxuICBzYXZlZENvbHM6IHtcbiAgICBba2V5OiBzdHJpbmddOiBzdHJpbmc7XG4gIH0gPSB7fSxcbiAgZW1wdHlDb2xzOiBMYXllckNvbHVtbnMsXG4gIG9wdGlvbnM6IHt0aHJvd09uRXJyb3I/OiBib29sZWFufSA9IHt9XG4pIHtcbiAgLy8gUHJlcGFyZSBjb2x1bW5zIGZvciB0aGUgdmFsaWRhdG9yXG4gIGNvbnN0IGNvbHVtbnM6IHR5cGVvZiBlbXB0eUNvbHMgPSB7fTtcbiAgZm9yIChjb25zdCBrZXkgb2YgT2JqZWN0LmtleXMoZW1wdHlDb2xzKSkge1xuICAgIGNvbHVtbnNba2V5XSA9IHsuLi5lbXB0eUNvbHNba2V5XX07XG5cbiAgICBjb25zdCBzYXZlZCA9IHNhdmVkQ29sc1trZXldO1xuICAgIGlmIChzYXZlZCkge1xuICAgICAgY29uc3QgZmllbGRJZHggPSBmaWVsZHMuZmluZEluZGV4KCh7bmFtZX0pID0+IG5hbWUgPT09IHNhdmVkKTtcblxuICAgICAgaWYgKGZpZWxkSWR4ID4gLTEpIHtcbiAgICAgICAgLy8gdXBkYXRlIGZvdW5kIGNvbHVtbnNcbiAgICAgICAgY29sdW1uc1trZXldLmZpZWxkSWR4ID0gZmllbGRJZHg7XG4gICAgICAgIGNvbHVtbnNba2V5XS52YWx1ZSA9IHNhdmVkO1xuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIC8vIGZpbmQgYWN0dWFsIGNvbHVtbiBmaWVsZElkeCwgaW4gY2FzZSBpdCBoYXMgY2hhbmdlZFxuICBjb25zdCBhbGxDb2xGb3VuZCA9IE9iamVjdC5rZXlzKGNvbHVtbnMpLmV2ZXJ5KGtleSA9PlxuICAgIHZhbGlkYXRlQ29sdW1uKGNvbHVtbnNba2V5XSwgY29sdW1ucywgZmllbGRzKVxuICApO1xuXG4gIGNvbnN0IHJ2ID0gYWxsQ29sRm91bmQgPyBjb2x1bW5zIDogbnVsbDtcbiAgaWYgKG9wdGlvbnMudGhyb3dPbkVycm9yKSB7XG4gICAgY29uc3QgcmVxdWlyZWRDb2x1bW5zID0gT2JqZWN0LmtleXMoZW1wdHlDb2xzKS5maWx0ZXIoayA9PiAhZW1wdHlDb2xzW2tdLm9wdGlvbmFsKTtcbiAgICBjb25zdCBtaXNzaW5nQ29sdW1ucyA9IHJlcXVpcmVkQ29sdW1ucy5maWx0ZXIoayA9PiAhY29sdW1ucz8uW2tdLnZhbHVlKTtcbiAgICBpZiAobWlzc2luZ0NvbHVtbnMubGVuZ3RoKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoYExheWVyIGhhcyBtaXNzaW5nIG9yIGludmFsaWQgY29sdW1uczogJHttaXNzaW5nQ29sdW1ucy5qb2luKCcsICcpfWApO1xuICAgIH1cbiAgICBjb25zdCBjb25maWdDb2x1bW5zID0gT2JqZWN0LmtleXMoc2F2ZWRDb2xzKTtcbiAgICBjb25zdCBpbnZhbGlkQ29sdW1ucyA9IGNvbmZpZ0NvbHVtbnMuZmlsdGVyKGsgPT4gIWNvbHVtbnM/LltrXT8udmFsdWUpO1xuICAgIGlmIChpbnZhbGlkQ29sdW1ucy5sZW5ndGgpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcihgTGF5ZXIgaGFzIGludmFsaWQgY29sdW1uczogJHtpbnZhbGlkQ29sdW1ucy5qb2luKCcsICcpfWApO1xuICAgIH1cbiAgfVxuXG4gIHJldHVybiBydjtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHZhbGlkYXRlQ29sdW1uKFxuICBjb2x1bW46IExheWVyQ29sdW1uICYge3ZhbGlkYXRvcj86IHR5cGVvZiB2YWxpZGF0ZUNvbHVtbn0sXG4gIGNvbHVtbnM6IExheWVyQ29sdW1ucyxcbiAgYWxsRmllbGRzOiBLZXBsZXJUYWJsZVsnZmllbGRzJ11cbik6IGJvb2xlYW4ge1xuICBpZiAoY29sdW1uLm9wdGlvbmFsIHx8IGNvbHVtbi52YWx1ZSkge1xuICAgIHJldHVybiB0cnVlO1xuICB9XG4gIGlmIChjb2x1bW4udmFsaWRhdG9yKSB7XG4gICAgcmV0dXJuIGNvbHVtbi52YWxpZGF0b3IoY29sdW1uLCBjb2x1bW5zLCBhbGxGaWVsZHMpO1xuICB9XG4gIHJldHVybiBmYWxzZTtcbn1cblxuLyoqXG4gKiBWYWxpZGF0ZSBzYXZlZCB0ZXh0IGxhYmVsIGNvbmZpZyB3aXRoIG5ldyBkYXRhXG4gKiByZWZlciB0byB2aXMtc3RhdGUtc2NoZW1hLmpzIFRleHRMYWJlbFNjaGVtYVYxXG4gKlxuICogQHBhcmFtIHtBcnJheTxPYmplY3Q+fSBmaWVsZHNcbiAqIEBwYXJhbSB7T2JqZWN0fSBzYXZlZFRleHRMYWJlbFxuICogQHBhcmFtIHtPYmplY3R9IG9wdGlvbnNcbiAqIEByZXR1cm4ge09iamVjdH0gLSB2YWxpZGF0ZWQgdGV4dGxhYmVsXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiB2YWxpZGF0ZVNhdmVkVGV4dExhYmVsKFxuICBmaWVsZHMsXG4gIFtsYXllclRleHRMYWJlbF0sXG4gIHNhdmVkVGV4dExhYmVsLFxuICBvcHRpb25zOiB7dGhyb3dPbkVycm9yPzogYm9vbGVhbn0gPSB7fVxuKSB7XG4gIGNvbnN0IHNhdmVkVGV4dExhYmVscyA9IEFycmF5LmlzQXJyYXkoc2F2ZWRUZXh0TGFiZWwpID8gc2F2ZWRUZXh0TGFiZWwgOiBbc2F2ZWRUZXh0TGFiZWxdO1xuXG4gIC8vIHZhbGlkYXRlIGZpZWxkXG4gIHJldHVybiBzYXZlZFRleHRMYWJlbHMubWFwKHRleHRMYWJlbCA9PiB7XG4gICAgY29uc3QgZmllbGQgPSB0ZXh0TGFiZWwuZmllbGRcbiAgICAgID8gZmllbGRzLmZpbmQoZmQgPT5cbiAgICAgICAgICBPYmplY3Qua2V5cyh0ZXh0TGFiZWwuZmllbGQpLmV2ZXJ5KGtleSA9PiB0ZXh0TGFiZWwuZmllbGRba2V5XSA9PT0gZmRba2V5XSlcbiAgICAgICAgKVxuICAgICAgOiBudWxsO1xuXG4gICAgaWYgKGZpZWxkID09PSB1bmRlZmluZWQgJiYgb3B0aW9ucy50aHJvd09uRXJyb3IpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcihgTGF5ZXIgaGFzIGludmFsaWQgdGV4dCBsYWJlbCBmaWVsZDogJHtKU09OLnN0cmluZ2lmeSh0ZXh0TGFiZWwuZmllbGQpfWApO1xuICAgIH1cblxuICAgIHJldHVybiBPYmplY3Qua2V5cyhsYXllclRleHRMYWJlbCkucmVkdWNlKFxuICAgICAgKGFjY3UsIGtleSkgPT4gKHtcbiAgICAgICAgLi4uYWNjdSxcbiAgICAgICAgW2tleV06IGtleSA9PT0gJ2ZpZWxkJyA/IGZpZWxkIDogdGV4dExhYmVsW2tleV0gfHwgbGF5ZXJUZXh0TGFiZWxba2V5XVxuICAgICAgfSksXG4gICAgICB7fVxuICAgICk7XG4gIH0pO1xufVxuXG4vKipcbiAqIFZhbGlkYXRlIHNhdmVkIHZpc3VhbCBjaGFubmVscyBjb25maWcgd2l0aCBuZXcgZGF0YSxcbiAqIHJlZmVyIHRvIHZpcy1zdGF0ZS1zY2hlbWEuanMgVmlzdWFsQ2hhbm5lbFNjaGVtYVYxXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiB2YWxpZGF0ZVNhdmVkVmlzdWFsQ2hhbm5lbHMoXG4gIGZpZWxkczogS2VwbGVyVGFibGVbJ2ZpZWxkcyddLFxuICBuZXdMYXllcjogTGF5ZXIsXG4gIHNhdmVkTGF5ZXI6IFBhcnNlZExheWVyLFxuICBvcHRpb25zOiB7dGhyb3dPbkVycm9yPzogYm9vbGVhbn0gPSB7fVxuKTogbnVsbCB8IExheWVyIHtcbiAgT2JqZWN0LnZhbHVlcyhuZXdMYXllci52aXN1YWxDaGFubmVscykuZm9yRWFjaCgoe2ZpZWxkLCBzY2FsZSwga2V5fSkgPT4ge1xuICAgIGxldCBmb3VuZEZpZWxkO1xuICAgIGlmIChzYXZlZExheWVyLmNvbmZpZykge1xuICAgICAgaWYgKHNhdmVkTGF5ZXIuY29uZmlnW2ZpZWxkXSkge1xuICAgICAgICBmb3VuZEZpZWxkID0gZmllbGRzLmZpbmQoXG4gICAgICAgICAgZmQgPT4gc2F2ZWRMYXllci5jb25maWcgJiYgZmQubmFtZSA9PT0gc2F2ZWRMYXllci5jb25maWdbZmllbGRdLm5hbWVcbiAgICAgICAgKTtcbiAgICAgIH1cblxuICAgICAgY29uc3QgZm91bmRDaGFubmVsID0ge1xuICAgICAgICAuLi4oZm91bmRGaWVsZCA/IHtbZmllbGRdOiBmb3VuZEZpZWxkfSA6IHt9KSxcbiAgICAgICAgLi4uKHNhdmVkTGF5ZXIuY29uZmlnW3NjYWxlXSA/IHtbc2NhbGVdOiBzYXZlZExheWVyLmNvbmZpZ1tzY2FsZV19IDoge30pXG4gICAgICB9O1xuICAgICAgaWYgKE9iamVjdC5rZXlzKGZvdW5kQ2hhbm5lbCkubGVuZ3RoKSB7XG4gICAgICAgIG5ld0xheWVyLnVwZGF0ZUxheWVyQ29uZmlnKGZvdW5kQ2hhbm5lbCk7XG4gICAgICB9XG5cbiAgICAgIG5ld0xheWVyLnZhbGlkYXRlVmlzdWFsQ2hhbm5lbChrZXkpO1xuICAgICAgaWYgKG9wdGlvbnMudGhyb3dPbkVycm9yKSB7XG4gICAgICAgIGNvbnN0IGZpZWxkTmFtZSA9IHNhdmVkTGF5ZXIuY29uZmlnPy5bZmllbGRdPy5uYW1lO1xuICAgICAgICBpZiAoZmllbGROYW1lICYmIGZpZWxkTmFtZSAhPT0gbmV3TGF5ZXIuY29uZmlnW2ZpZWxkXT8ubmFtZSkge1xuICAgICAgICAgIHRocm93IG5ldyBFcnJvcihgTGF5ZXIgaGFzIGludmFsaWQgdmlzdWFsIGNoYW5uZWwgZmllbGQ6ICR7ZmllbGR9YCk7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG4gIH0pO1xuICByZXR1cm4gbmV3TGF5ZXI7XG59XG5cbnR5cGUgVmFsaWRhdGVMYXllck9wdGlvbiA9IHtcbiAgYWxsb3dFbXB0eUNvbHVtbj86IGJvb2xlYW47XG4gIHRocm93T25FcnJvcj86IGJvb2xlYW47XG59O1xuXG5leHBvcnQgZnVuY3Rpb24gdmFsaWRhdGVMYXllcnNCeURhdGFzZXRzKFxuICBkYXRhc2V0czogRGF0YXNldHMsXG4gIGxheWVyQ2xhc3NlczogVmlzU3RhdGVbJ2xheWVyQ2xhc3NlcyddLFxuICBsYXllcnM6IE5vbk51bGxhYmxlPFBhcnNlZENvbmZpZ1sndmlzU3RhdGUnXT5bJ2xheWVycyddID0gW10sXG4gIG9wdGlvbnM/OiBWYWxpZGF0ZUxheWVyT3B0aW9uXG4pIHtcbiAgY29uc3QgdmFsaWRhdGVkOiBMYXllcltdID0gW107XG4gIGNvbnN0IGZhaWxlZDogTm9uTnVsbGFibGU8UGFyc2VkQ29uZmlnWyd2aXNTdGF0ZSddPlsnbGF5ZXJzJ10gPSBbXTtcblxuICBsYXllcnMuZm9yRWFjaChsYXllciA9PiB7XG4gICAgbGV0IHZhbGlkYXRlTGF5ZXI6IExheWVyIHwgbnVsbCA9IG51bGw7XG5cbiAgICBpZiAobGF5ZXI/LmNvbmZpZz8uZGF0YUlkKSB7XG4gICAgICBpZiAoZGF0YXNldHNbbGF5ZXIuY29uZmlnLmRhdGFJZF0pIHtcbiAgICAgICAgLy8gZGF0YXNldHMgYXJlIGFscmVhZHkgbG9hZGVkXG4gICAgICAgIHZhbGlkYXRlTGF5ZXIgPSB2YWxpZGF0ZUxheWVyV2l0aERhdGEoXG4gICAgICAgICAgZGF0YXNldHNbbGF5ZXIuY29uZmlnLmRhdGFJZF0sXG4gICAgICAgICAgbGF5ZXIsXG4gICAgICAgICAgbGF5ZXJDbGFzc2VzLFxuICAgICAgICAgIG9wdGlvbnNcbiAgICAgICAgKTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICBpZiAodmFsaWRhdGVMYXllcikge1xuICAgICAgdmFsaWRhdGVkLnB1c2godmFsaWRhdGVMYXllcik7XG4gICAgfSBlbHNlIHtcbiAgICAgIC8vIGRhdGFzZXRzIG5vdCB5ZXQgbG9hZGVkXG4gICAgICBmYWlsZWQucHVzaChsYXllcik7XG4gICAgfVxuICB9KTtcblxuICByZXR1cm4ge3ZhbGlkYXRlZCwgZmFpbGVkfTtcbn1cbi8qKlxuICogVmFsaWRhdGUgc2F2ZWQgbGF5ZXIgY29uZmlnIHdpdGggbmV3IGRhdGEsXG4gKiB1cGRhdGUgZmllbGRJZHggYmFzZWQgb24gbmV3IGZpZWxkc1xuICovXG4vLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgY29tcGxleGl0eVxuZXhwb3J0IGZ1bmN0aW9uIHZhbGlkYXRlTGF5ZXJXaXRoRGF0YShcbiAge2ZpZWxkcywgaWQ6IGRhdGFJZH06IEtlcGxlclRhYmxlLFxuICBzYXZlZExheWVyOiBQYXJzZWRMYXllcixcbiAgbGF5ZXJDbGFzc2VzOiBWaXNTdGF0ZVsnbGF5ZXJDbGFzc2VzJ10sXG4gIG9wdGlvbnM6IFZhbGlkYXRlTGF5ZXJPcHRpb24gPSB7fVxuKTogTGF5ZXIgfCBudWxsIHtcbiAgY29uc3Qge3R5cGV9ID0gc2F2ZWRMYXllcjtcbiAgY29uc3Qge3Rocm93T25FcnJvcn0gPSBvcHRpb25zO1xuICAvLyBsYXllciBkb2VzbnQgaGF2ZSBhIHZhbGlkIHR5cGVcbiAgaWYgKCF0eXBlIHx8ICFsYXllckNsYXNzZXMuaGFzT3duUHJvcGVydHkodHlwZSkgfHwgIXNhdmVkTGF5ZXIuY29uZmlnKSB7XG4gICAgaWYgKHRocm93T25FcnJvcikge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKGBMYXllciBoYXMgaW52YWxpZCB0eXBlIFwiJHt0eXBlfVwiIG9yIGNvbmZpZyBpcyBtaXNzaW5nYCk7XG4gICAgfVxuICAgIHJldHVybiBudWxsO1xuICB9XG5cbiAgbGV0IG5ld0xheWVyID0gbmV3IGxheWVyQ2xhc3Nlc1t0eXBlXSh7XG4gICAgaWQ6IHNhdmVkTGF5ZXIuaWQsXG4gICAgZGF0YUlkLFxuICAgIGxhYmVsOiBzYXZlZExheWVyLmNvbmZpZy5sYWJlbCxcbiAgICBjb2xvcjogc2F2ZWRMYXllci5jb25maWcuY29sb3IsXG4gICAgaXNWaXNpYmxlOiBzYXZlZExheWVyLmNvbmZpZy5pc1Zpc2libGUsXG4gICAgaGlkZGVuOiBzYXZlZExheWVyLmNvbmZpZy5oaWRkZW4sXG4gICAgaGlnaGxpZ2h0Q29sb3I6IHNhdmVkTGF5ZXIuY29uZmlnLmhpZ2hsaWdodENvbG9yXG4gIH0pO1xuXG4gIC8vIGZpbmQgY29sdW1uIGZpZWxkSWR4XG4gIGNvbnN0IGNvbHVtbkNvbmZpZyA9IG5ld0xheWVyLmdldExheWVyQ29sdW1ucygpO1xuICBpZiAoT2JqZWN0LmtleXMoY29sdW1uQ29uZmlnKSkge1xuICAgIGNvbnN0IGNvbHVtbnMgPSB2YWxpZGF0ZVNhdmVkTGF5ZXJDb2x1bW5zKFxuICAgICAgZmllbGRzLFxuICAgICAgc2F2ZWRMYXllci5jb25maWcuY29sdW1ucyxcbiAgICAgIGNvbHVtbkNvbmZpZyxcbiAgICAgIG9wdGlvbnNcbiAgICApO1xuICAgIGlmIChjb2x1bW5zKSB7XG4gICAgICBuZXdMYXllci51cGRhdGVMYXllckNvbmZpZyh7Y29sdW1uc30pO1xuICAgIH0gZWxzZSBpZiAoIW9wdGlvbnMuYWxsb3dFbXB0eUNvbHVtbikge1xuICAgICAgcmV0dXJuIG51bGw7XG4gICAgfVxuICB9XG5cbiAgY29uc3QgdGV4dExhYmVsID1cbiAgICBzYXZlZExheWVyLmNvbmZpZy50ZXh0TGFiZWwgJiYgbmV3TGF5ZXIuY29uZmlnLnRleHRMYWJlbFxuICAgICAgPyB2YWxpZGF0ZVNhdmVkVGV4dExhYmVsKFxuICAgICAgICAgIGZpZWxkcyxcbiAgICAgICAgICBuZXdMYXllci5jb25maWcudGV4dExhYmVsLFxuICAgICAgICAgIHNhdmVkTGF5ZXIuY29uZmlnLnRleHRMYWJlbCxcbiAgICAgICAgICBvcHRpb25zXG4gICAgICAgIClcbiAgICAgIDogbmV3TGF5ZXIuY29uZmlnLnRleHRMYWJlbDtcblxuICAvLyBjb3B5IHZpc0NvbmZpZyBvdmVyIHRvIGVtcHR5TGF5ZXIgdG8gbWFrZSBzdXJlIGl0IGhhcyBhbGwgdGhlIHByb3BzXG4gIGNvbnN0IHZpc0NvbmZpZyA9IG5ld0xheWVyLmNvcHlMYXllckNvbmZpZyhcbiAgICBuZXdMYXllci5jb25maWcudmlzQ29uZmlnLFxuICAgIHNhdmVkTGF5ZXIuY29uZmlnLnZpc0NvbmZpZyB8fCB7fSxcbiAgICB7XG4gICAgICBzaGFsbG93Q29weTogWydjb2xvclJhbmdlJywgJ3N0cm9rZUNvbG9yUmFuZ2UnXVxuICAgIH1cbiAgKTtcblxuICBuZXdMYXllci51cGRhdGVMYXllckNvbmZpZyh7XG4gICAgdmlzQ29uZmlnLFxuICAgIHRleHRMYWJlbFxuICB9KTtcblxuICAvLyB2aXN1YWwgY2hhbm5lbCBmaWVsZCBpcyBzYXZlZCB0byBiZSB7bmFtZSwgdHlwZX1cbiAgLy8gZmluZCB2aXN1YWwgY2hhbm5lbCBmaWVsZCBieSBtYXRjaGluZyBib3RoIG5hbWUgYW5kIHR5cGVcbiAgLy8gcmVmZXIgdG8gdmlzLXN0YXRlLXNjaGVtYS5qcyBWaXN1YWxDaGFubmVsU2NoZW1hVjFcbiAgbmV3TGF5ZXIgPSB2YWxpZGF0ZVNhdmVkVmlzdWFsQ2hhbm5lbHMoZmllbGRzLCBuZXdMYXllciwgc2F2ZWRMYXllciwgb3B0aW9ucyk7XG5cbiAgaWYgKHRocm93T25FcnJvcikge1xuICAgIGlmICghbmV3TGF5ZXIuaXNWYWxpZFRvU2F2ZSgpKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoYExheWVyIGlzIG5vdCB2YWxpZCB0byBzYXZlOiAke25ld0xheWVyLmlkfWApO1xuICAgIH1cbiAgfVxuXG4gIHJldHVybiBuZXdMYXllcjtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIG1lcmdlRWRpdG9yPFMgZXh0ZW5kcyBWaXNTdGF0ZT4oc3RhdGU6IFMsIHNhdmVkRWRpdG9yOiBTYXZlZEVkaXRvcikge1xuICBpZiAoIXNhdmVkRWRpdG9yKSB7XG4gICAgcmV0dXJuIHN0YXRlO1xuICB9XG4gIHJldHVybiB7XG4gICAgLi4uc3RhdGUsXG4gICAgZWRpdG9yOiB7XG4gICAgICAuLi5zdGF0ZS5lZGl0b3IsXG4gICAgICBmZWF0dXJlczogWy4uLnN0YXRlLmVkaXRvci5mZWF0dXJlcywgLi4uKHNhdmVkRWRpdG9yLmZlYXR1cmVzIHx8IFtdKV0sXG4gICAgICAvLyBpZiBzYXZlZEVkaXRvci52aXNpYmxlIGlzIHVuZGVmaW5lZCBrZWVwIHN0YXRlLmVkaXRvci52aXNpYmxlXG4gICAgICB2aXNpYmxlOiBzYXZlZEVkaXRvci52aXNpYmxlID8/IHN0YXRlLmVkaXRvci52aXNpYmxlXG4gICAgfVxuICB9O1xufVxuXG4vKipcbiAqIFZhbGlkYXRlIHNhdmVkIGxheWVyIGNvbmZpZyB3aXRoIG5ldyBkYXRhLFxuICogdXBkYXRlIGZpZWxkSWR4IGJhc2VkIG9uIG5ldyBmaWVsZHNcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIG1lcmdlRGF0YXNldHNCeU9yZGVyKHN0YXRlOiBWaXNTdGF0ZSwgbmV3RGF0YUVudHJpZXM6IERhdGFzZXRzKTogRGF0YXNldHMge1xuICBjb25zdCBtZXJnZWQgPSB7XG4gICAgLi4uc3RhdGUuZGF0YXNldHMsXG4gICAgLi4ubmV3RGF0YUVudHJpZXNcbiAgfTtcblxuICBpZiAoQXJyYXkuaXNBcnJheShzdGF0ZS5wcmVzZXJ2ZURhdGFzZXRPcmRlcikpIHtcbiAgICAvLyBwcmVzZXJ2ZURhdGFzZXRPcmRlciAgbWlnaHQgbm90IGluY2x1ZGUgdGhlICBuZXcgZGF0YXNldHNcbiAgICBjb25zdCBuZXdEYXRhc2V0SWRzID0gT2JqZWN0LmtleXMobWVyZ2VkKS5maWx0ZXIoXG4gICAgICBpZCA9PiAhc3RhdGUucHJlc2VydmVEYXRhc2V0T3JkZXI/LmluY2x1ZGVzKGlkKVxuICAgICk7XG4gICAgcmV0dXJuIFsuLi5zdGF0ZS5wcmVzZXJ2ZURhdGFzZXRPcmRlciwgLi4ubmV3RGF0YXNldElkc10ucmVkdWNlKFxuICAgICAgKGFjY3UsIGRhdGFJZCkgPT4gKHtcbiAgICAgICAgLi4uYWNjdSxcbiAgICAgICAgLi4uKG1lcmdlZFtkYXRhSWRdID8ge1tkYXRhSWRdOiBtZXJnZWRbZGF0YUlkXX0gOiB7fSlcbiAgICAgIH0pLFxuICAgICAge31cbiAgICApO1xuICB9XG5cbiAgcmV0dXJuIG1lcmdlZDtcbn1cblxuZXhwb3J0IGNvbnN0IFZJU19TVEFURV9NRVJHRVJTOiBWaXNTdGF0ZU1lcmdlcnM8YW55PiA9IFtcbiAge1xuICAgIG1lcmdlOiBtZXJnZUxheWVycyxcbiAgICBwcm9wOiAnbGF5ZXJzJyxcbiAgICB0b01lcmdlUHJvcDogJ2xheWVyVG9CZU1lcmdlZCcsXG4gICAgcHJlc2VydmVPcmRlcjogJ3ByZXNlcnZlTGF5ZXJPcmRlcidcbiAgfSxcbiAge1xuICAgIG1lcmdlOiBtZXJnZUZpbHRlcnMsXG4gICAgcHJvcDogJ2ZpbHRlcnMnLFxuICAgIHRvTWVyZ2VQcm9wOiAnZmlsdGVyVG9CZU1lcmdlZCcsXG4gICAgcHJlc2VydmVPcmRlcjogJ3ByZXNlcnZlRmlsdGVyT3JkZXInLFxuICAgIHJlcGxhY2VQYXJlbnREYXRhc2V0SWRzOiByZXBsYWNlRmlsdGVyRGF0YXNldElkc1xuICB9LFxuICB7XG4gICAgbWVyZ2U6IG1lcmdlRWZmZWN0cyxcbiAgICBwcm9wOiAnZWZmZWN0cydcbiAgfSxcbiAge1xuICAgIG1lcmdlOiBtZXJnZUludGVyYWN0aW9ucyxcbiAgICBwcm9wOiAnaW50ZXJhY3Rpb25Db25maWcnLFxuICAgIHRvTWVyZ2VQcm9wOiAnaW50ZXJhY3Rpb25Ub0JlTWVyZ2VkJyxcbiAgICByZXBsYWNlUGFyZW50RGF0YXNldElkczogcmVwbGFjZUludGVyYWN0aW9uRGF0YXNldElkcyxcbiAgICBzYXZlVW5tZXJnZWQ6IHNhdmVkVW5tZXJnZWRJbnRlcmFjdGlvblxuICB9LFxuICB7bWVyZ2U6IG1lcmdlTGF5ZXJCbGVuZGluZywgcHJvcDogJ2xheWVyQmxlbmRpbmcnfSxcbiAge21lcmdlOiBtZXJnZU92ZXJsYXlCbGVuZGluZywgcHJvcDogJ292ZXJsYXlCbGVuZGluZyd9LFxuICB7bWVyZ2U6IG1lcmdlU3BsaXRNYXBzLCBwcm9wOiAnc3BsaXRNYXBzJywgdG9NZXJnZVByb3A6ICdzcGxpdE1hcHNUb0JlTWVyZ2VkJ30sXG4gIHttZXJnZTogbWVyZ2VBbmltYXRpb25Db25maWcsIHByb3A6ICdhbmltYXRpb25Db25maWcnfSxcbiAge21lcmdlOiBtZXJnZUVkaXRvciwgcHJvcDogJ2VkaXRvcid9XG5dO1xuIl19
|
|
@@ -1,23 +1,3 @@
|
|
|
1
|
-
// Copyright (c) 2023 Uber Technologies, Inc.
|
|
2
|
-
//
|
|
3
|
-
// Permission is hereby granted, free of charge, to any person obtaining a copy
|
|
4
|
-
// of this software and associated documentation files (the "Software"), to deal
|
|
5
|
-
// in the Software without restriction, including without limitation the rights
|
|
6
|
-
// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
|
|
7
|
-
// copies of the Software, and to permit persons to whom the Software is
|
|
8
|
-
// furnished to do so, subject to the following conditions:
|
|
9
|
-
//
|
|
10
|
-
// The above copyright notice and this permission notice shall be included in
|
|
11
|
-
// all copies or substantial portions of the Software.
|
|
12
|
-
//
|
|
13
|
-
// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
|
14
|
-
// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
|
15
|
-
// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
|
16
|
-
// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
|
17
|
-
// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
|
18
|
-
// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
|
|
19
|
-
// THE SOFTWARE.
|
|
20
|
-
|
|
21
1
|
"use strict";
|
|
22
2
|
|
|
23
3
|
var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault");
|
|
@@ -29,9 +9,13 @@ exports.getFileExtensions = exports.getFileFormatNames = void 0;
|
|
|
29
9
|
|
|
30
10
|
var _toConsumableArray2 = _interopRequireDefault(require("@babel/runtime/helpers/toConsumableArray"));
|
|
31
11
|
|
|
32
|
-
var _reselect = require("reselect")
|
|
33
|
-
|
|
34
|
-
|
|
12
|
+
var _reselect = require("reselect");
|
|
13
|
+
|
|
14
|
+
// SPDX-License-Identifier: MIT
|
|
15
|
+
// Copyright contributors to the kepler.gl project
|
|
16
|
+
// NOTE: default formats must match file-handler-test.js
|
|
17
|
+
var DEFAULT_FILE_EXTENSIONS = ['csv', 'json', 'geojson', 'arrow'];
|
|
18
|
+
var DEFAULT_FILE_FORMATS = ['CSV', 'Json', 'GeoJSON', 'Arrow'];
|
|
35
19
|
var getFileFormatNames = (0, _reselect.createSelector)( // @ts-expect-error
|
|
36
20
|
function (state) {
|
|
37
21
|
return state.loaders;
|
|
@@ -50,4 +34,4 @@ function (state) {
|
|
|
50
34
|
})));
|
|
51
35
|
});
|
|
52
36
|
exports.getFileExtensions = getFileExtensions;
|
|
53
|
-
//# sourceMappingURL=data:application/json;charset=utf-8;base64,
|
|
37
|
+
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uL3NyYy92aXMtc3RhdGUtc2VsZWN0b3JzLnRzIl0sIm5hbWVzIjpbIkRFRkFVTFRfRklMRV9FWFRFTlNJT05TIiwiREVGQVVMVF9GSUxFX0ZPUk1BVFMiLCJnZXRGaWxlRm9ybWF0TmFtZXMiLCJzdGF0ZSIsImxvYWRlcnMiLCJtYXAiLCJsb2FkZXIiLCJuYW1lIiwiZ2V0RmlsZUV4dGVuc2lvbnMiLCJmbGF0TWFwIiwiZXh0ZW5zaW9ucyJdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7Ozs7QUFHQTs7QUFIQTtBQUNBO0FBSUE7QUFDQSxJQUFNQSx1QkFBdUIsR0FBRyxDQUFDLEtBQUQsRUFBUSxNQUFSLEVBQWdCLFNBQWhCLEVBQTJCLE9BQTNCLENBQWhDO0FBQ0EsSUFBTUMsb0JBQW9CLEdBQUcsQ0FBQyxLQUFELEVBQVEsTUFBUixFQUFnQixTQUFoQixFQUEyQixPQUEzQixDQUE3QjtBQUVPLElBQU1DLGtCQUFrQixHQUFHLCtCQUNoQztBQUNBLFVBQUFDLEtBQUs7QUFBQSxTQUFJQSxLQUFLLENBQUNDLE9BQVY7QUFBQSxDQUYyQixFQUdoQyxVQUFBQSxPQUFPO0FBQUEsbUJBQVFILG9CQUFSLHNDQUFpQ0csT0FBTyxDQUFDQyxHQUFSLENBQVksVUFBQUMsTUFBTTtBQUFBLFdBQUlBLE1BQU0sQ0FBQ0MsSUFBWDtBQUFBLEdBQWxCLENBQWpDO0FBQUEsQ0FIeUIsQ0FBM0I7O0FBTUEsSUFBTUMsaUJBQWlCLEdBQUcsK0JBQy9CO0FBQ0EsVUFBQUwsS0FBSztBQUFBLFNBQUlBLEtBQUssQ0FBQ0MsT0FBVjtBQUFBLENBRjBCLEVBRy9CLFVBQUFBLE9BQU87QUFBQSxtQkFBUUosdUJBQVIsc0NBQW9DSSxPQUFPLENBQUNLLE9BQVIsQ0FBZ0IsVUFBQUgsTUFBTTtBQUFBLFdBQUlBLE1BQU0sQ0FBQ0ksVUFBWDtBQUFBLEdBQXRCLENBQXBDO0FBQUEsQ0FId0IsQ0FBMUIiLCJzb3VyY2VzQ29udGVudCI6WyIvLyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogTUlUXG4vLyBDb3B5cmlnaHQgY29udHJpYnV0b3JzIHRvIHRoZSBrZXBsZXIuZ2wgcHJvamVjdFxuXG5pbXBvcnQge2NyZWF0ZVNlbGVjdG9yfSBmcm9tICdyZXNlbGVjdCc7XG5cbi8vIE5PVEU6IGRlZmF1bHQgZm9ybWF0cyBtdXN0IG1hdGNoIGZpbGUtaGFuZGxlci10ZXN0LmpzXG5jb25zdCBERUZBVUxUX0ZJTEVfRVhURU5TSU9OUyA9IFsnY3N2JywgJ2pzb24nLCAnZ2VvanNvbicsICdhcnJvdyddO1xuY29uc3QgREVGQVVMVF9GSUxFX0ZPUk1BVFMgPSBbJ0NTVicsICdKc29uJywgJ0dlb0pTT04nLCAnQXJyb3cnXTtcblxuZXhwb3J0IGNvbnN0IGdldEZpbGVGb3JtYXROYW1lcyA9IGNyZWF0ZVNlbGVjdG9yKFxuICAvLyBAdHMtZXhwZWN0LWVycm9yXG4gIHN0YXRlID0+IHN0YXRlLmxvYWRlcnMsXG4gIGxvYWRlcnMgPT4gWy4uLkRFRkFVTFRfRklMRV9GT1JNQVRTLCAuLi5sb2FkZXJzLm1hcChsb2FkZXIgPT4gbG9hZGVyLm5hbWUpXVxuKTtcblxuZXhwb3J0IGNvbnN0IGdldEZpbGVFeHRlbnNpb25zID0gY3JlYXRlU2VsZWN0b3IoXG4gIC8vIEB0cy1leHBlY3QtZXJyb3JcbiAgc3RhdGUgPT4gc3RhdGUubG9hZGVycyxcbiAgbG9hZGVycyA9PiBbLi4uREVGQVVMVF9GSUxFX0VYVEVOU0lPTlMsIC4uLmxvYWRlcnMuZmxhdE1hcChsb2FkZXIgPT4gbG9hZGVyLmV4dGVuc2lvbnMpXVxuKTtcbiJdfQ==
|
|
@@ -203,7 +203,7 @@ export declare const setFilterViewUpdater: (state: VisState, action: VisStateAct
|
|
|
203
203
|
splitMapsToBeMerged: import("@kepler.gl/types").SplitMap[];
|
|
204
204
|
fileLoading: false | import("@kepler.gl/types").FileLoading;
|
|
205
205
|
fileLoadingProgress: import("@kepler.gl/types").FileLoadingProgress;
|
|
206
|
-
loaders: Loader[];
|
|
206
|
+
loaders: Loader<any, any, import("@loaders.gl/loader-utils").LoaderOptions>[];
|
|
207
207
|
loadOptions: object;
|
|
208
208
|
initialState?: Partial<VisState> | undefined;
|
|
209
209
|
mergers: import("@kepler.gl/schemas").VisStateMergers<any>;
|