@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
|
@@ -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");
|
|
@@ -83,6 +63,8 @@ var _objectWithoutProperties2 = _interopRequireDefault(require("@babel/runtime/h
|
|
|
83
63
|
|
|
84
64
|
var _defineProperty2 = _interopRequireDefault(require("@babel/runtime/helpers/defineProperty"));
|
|
85
65
|
|
|
66
|
+
var _bbox = _interopRequireDefault(require("@turf/bbox"));
|
|
67
|
+
|
|
86
68
|
var _window = require("global/window");
|
|
87
69
|
|
|
88
70
|
var _tasks = require("react-palm/tasks");
|
|
@@ -1379,13 +1361,19 @@ var addLayerUpdater = function addLayerUpdater(state, action) {
|
|
|
1379
1361
|
newLayerData = {};
|
|
1380
1362
|
}
|
|
1381
1363
|
|
|
1382
|
-
|
|
1364
|
+
var newState = _objectSpread(_objectSpread({}, state), {}, {
|
|
1383
1365
|
layers: [].concat((0, _toConsumableArray2["default"])(state.layers), [newLayer]),
|
|
1384
1366
|
layerData: [].concat((0, _toConsumableArray2["default"])(state.layerData), [newLayerData]),
|
|
1385
1367
|
// add new layer at the top
|
|
1386
1368
|
layerOrder: [newLayer.id].concat((0, _toConsumableArray2["default"])(state.layerOrder)),
|
|
1387
1369
|
splitMaps: (0, _utils.addNewLayersToSplitMap)(state.splitMaps, newLayer)
|
|
1388
1370
|
});
|
|
1371
|
+
|
|
1372
|
+
if (newLayer.config.animation.enabled) {
|
|
1373
|
+
newState = updateAnimationDomain(newState);
|
|
1374
|
+
}
|
|
1375
|
+
|
|
1376
|
+
return newState;
|
|
1389
1377
|
};
|
|
1390
1378
|
/**
|
|
1391
1379
|
* remove layer
|
|
@@ -1512,10 +1500,10 @@ var duplicateLayerUpdater = function duplicateLayerUpdater(state, _ref9) {
|
|
|
1512
1500
|
exports.duplicateLayerUpdater = duplicateLayerUpdater;
|
|
1513
1501
|
|
|
1514
1502
|
var addEffectUpdater = function addEffectUpdater(state, action) {
|
|
1515
|
-
var newEffect = (0, _effects.
|
|
1503
|
+
var newEffect = (0, _effects.createEffect)(action.config); // collapse configurators for other effects
|
|
1516
1504
|
|
|
1517
1505
|
state.effects.forEach(function (effect) {
|
|
1518
|
-
return effect.
|
|
1506
|
+
return effect.setProps({
|
|
1519
1507
|
isConfigActive: false
|
|
1520
1508
|
});
|
|
1521
1509
|
});
|
|
@@ -1595,10 +1583,29 @@ var updateEffectUpdater = function updateEffectUpdater(state, _ref12) {
|
|
|
1595
1583
|
return state;
|
|
1596
1584
|
}
|
|
1597
1585
|
|
|
1586
|
+
var effectOrder = state.effectOrder;
|
|
1587
|
+
|
|
1588
|
+
if (props.id !== undefined && props.id !== id) {
|
|
1589
|
+
var idx2 = state.effects.findIndex(function (l) {
|
|
1590
|
+
return l.id === props.id;
|
|
1591
|
+
});
|
|
1592
|
+
|
|
1593
|
+
if (idx2 >= 0) {
|
|
1594
|
+
_window.console.warn("can not update effect with existing effect id ".concat(id));
|
|
1595
|
+
|
|
1596
|
+
return state;
|
|
1597
|
+
}
|
|
1598
|
+
|
|
1599
|
+
effectOrder = effectOrder.map(function (effectOrderId) {
|
|
1600
|
+
return effectOrderId === id ? props.id : effectOrderId;
|
|
1601
|
+
});
|
|
1602
|
+
}
|
|
1603
|
+
|
|
1598
1604
|
var newEffects = (0, _toConsumableArray2["default"])(state.effects);
|
|
1599
|
-
newEffects[idx].
|
|
1605
|
+
newEffects[idx].setProps(props);
|
|
1600
1606
|
return _objectSpread(_objectSpread({}, state), {}, {
|
|
1601
|
-
effects: newEffects
|
|
1607
|
+
effects: newEffects,
|
|
1608
|
+
effectOrder: effectOrder
|
|
1602
1609
|
});
|
|
1603
1610
|
};
|
|
1604
1611
|
/**
|
|
@@ -2364,6 +2371,8 @@ function parseProgress() {
|
|
|
2364
2371
|
|
|
2365
2372
|
|
|
2366
2373
|
var nextFileBatchUpdater = function nextFileBatchUpdater(state, _ref18) {
|
|
2374
|
+
var _accumulated$data;
|
|
2375
|
+
|
|
2367
2376
|
var _ref18$payload = _ref18.payload,
|
|
2368
2377
|
gen = _ref18$payload.gen,
|
|
2369
2378
|
fileName = _ref18$payload.fileName,
|
|
@@ -2374,7 +2383,14 @@ var nextFileBatchUpdater = function nextFileBatchUpdater(state, _ref18) {
|
|
|
2374
2383
|
fileName: fileName,
|
|
2375
2384
|
progress: parseProgress(state.fileLoadingProgress[fileName], progress)
|
|
2376
2385
|
});
|
|
2377
|
-
return (0, _tasks.withTask)(stateWithProgress, (0,
|
|
2386
|
+
return (0, _tasks.withTask)(stateWithProgress, [].concat((0, _toConsumableArray2["default"])(fileName.endsWith('arrow') && (accumulated === null || accumulated === void 0 ? void 0 : (_accumulated$data = accumulated.data) === null || _accumulated$data === void 0 ? void 0 : _accumulated$data.length) > 0 ? [(0, _tasks2.PROCESS_FILE_DATA)({
|
|
2387
|
+
content: accumulated,
|
|
2388
|
+
fileCache: []
|
|
2389
|
+
}).bimap(function (result) {
|
|
2390
|
+
return (0, _actions.loadFilesSuccess)(result);
|
|
2391
|
+
}, function (err) {
|
|
2392
|
+
return (0, _actions.loadFilesErr)(fileName, err);
|
|
2393
|
+
})] : []), [(0, _tasks2.UNWRAP_TASK)(gen.next()).bimap(function (_ref19) {
|
|
2378
2394
|
var value = _ref19.value,
|
|
2379
2395
|
done = _ref19.done;
|
|
2380
2396
|
return done ? onFinish(accumulated) : (0, _actions.nextFileBatch)({
|
|
@@ -2386,7 +2402,7 @@ var nextFileBatchUpdater = function nextFileBatchUpdater(state, _ref18) {
|
|
|
2386
2402
|
});
|
|
2387
2403
|
}, function (err) {
|
|
2388
2404
|
return (0, _actions.loadFilesErr)(fileName, err);
|
|
2389
|
-
}));
|
|
2405
|
+
})]));
|
|
2390
2406
|
};
|
|
2391
2407
|
/**
|
|
2392
2408
|
* Trigger loading file error
|
|
@@ -2628,6 +2644,8 @@ function setFeaturesUpdater(state, _ref25) {
|
|
|
2628
2644
|
var filterId = feature && (0, _utils.getFilterIdInFeature)(feature);
|
|
2629
2645
|
|
|
2630
2646
|
if (filterId && feature) {
|
|
2647
|
+
// add bbox for polygon filter to speed up filtering
|
|
2648
|
+
if (feature.properties) feature.properties.bbox = (0, _bbox["default"])(feature);
|
|
2631
2649
|
var featureValue = (0, _utils.featureToFilterValue)(feature, filterId);
|
|
2632
2650
|
var filterIdx = state.filters.findIndex(function (fil) {
|
|
2633
2651
|
return fil.id === filterId;
|
|
@@ -2651,6 +2669,8 @@ function setFeaturesUpdater(state, _ref25) {
|
|
|
2651
2669
|
var setSelectedFeatureUpdater = function setSelectedFeatureUpdater(state, _ref26) {
|
|
2652
2670
|
var feature = _ref26.feature,
|
|
2653
2671
|
selectionContext = _ref26.selectionContext;
|
|
2672
|
+
// add bbox for polygon filter to speed up filtering
|
|
2673
|
+
if (feature && feature.properties) feature.properties.bbox = (0, _bbox["default"])(feature);
|
|
2654
2674
|
return _objectSpread(_objectSpread({}, state), {}, {
|
|
2655
2675
|
editor: _objectSpread(_objectSpread({}, state.editor), {}, {
|
|
2656
2676
|
selectedFeature: feature,
|
|
@@ -3131,4 +3151,4 @@ function replacePropValueInState(state, replacedItem, _ref38) {
|
|
|
3131
3151
|
|
|
3132
3152
|
return nextState;
|
|
3133
3153
|
}
|
|
3134
|
-
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uL3NyYy92aXMtc3RhdGUtdXBkYXRlcnMudHMiXSwibmFtZXMiOlsidmlzU3RhdGVVcGRhdGVycyIsImRlZmF1bHRJbnRlcmFjdGlvbkNvbmZpZyIsInRvb2x0aXAiLCJpZCIsImxhYmVsIiwiZW5hYmxlZCIsImNvbmZpZyIsImZpZWxkc1RvU2hvdyIsImNvbXBhcmVNb2RlIiwiY29tcGFyZVR5cGUiLCJDT01QQVJFX1RZUEVTIiwiQUJTT0xVVEUiLCJnZW9jb2RlciIsInBvc2l0aW9uIiwiYnJ1c2giLCJzaXplIiwiY29vcmRpbmF0ZSIsIkRFRkFVTFRfQU5JTUFUSU9OX0NPTkZJRyIsImRvbWFpbiIsImN1cnJlbnRUaW1lIiwic3BlZWQiLCJpc0FuaW1hdGluZyIsInRpbWVGb3JtYXQiLCJ0aW1lem9uZSIsImRlZmF1bHRUaW1lRm9ybWF0IiwiaGlkZUNvbnRyb2wiLCJkdXJhdGlvbiIsIkRFRkFVTFRfRURJVE9SIiwibW9kZSIsIkVESVRPUl9NT0RFUyIsIkRSQVdfUE9MWUdPTiIsImZlYXR1cmVzIiwic2VsZWN0ZWRGZWF0dXJlIiwidmlzaWJsZSIsIklOSVRJQUxfVklTX1NUQVRFIiwibWFwSW5mbyIsInRpdGxlIiwiZGVzY3JpcHRpb24iLCJsYXllcnMiLCJsYXllckRhdGEiLCJsYXllclRvQmVNZXJnZWQiLCJsYXllck9yZGVyIiwiZmlsdGVycyIsImZpbHRlclRvQmVNZXJnZWQiLCJkYXRhc2V0cyIsImVkaXRpbmdEYXRhc2V0IiwidW5kZWZpbmVkIiwiZWZmZWN0cyIsImVmZmVjdE9yZGVyIiwiaW50ZXJhY3Rpb25Db25maWciLCJpbnRlcmFjdGlvblRvQmVNZXJnZWQiLCJsYXllckJsZW5kaW5nIiwib3ZlcmxheUJsZW5kaW5nIiwiaG92ZXJJbmZvIiwiY2xpY2tlZCIsIm1vdXNlUG9zIiwibWF4RGVmYXVsdFRvb2x0aXBzIiwiTUFYX0RFRkFVTFRfVE9PTFRJUFMiLCJzcGxpdE1hcHMiLCJzcGxpdE1hcHNUb0JlTWVyZ2VkIiwiaXNNZXJnaW5nRGF0YXNldHMiLCJsYXllckNsYXNzZXMiLCJMYXllckNsYXNzZXMiLCJhbmltYXRpb25Db25maWciLCJlZGl0b3IiLCJmaWxlTG9hZGluZyIsImZpbGVMb2FkaW5nUHJvZ3Jlc3MiLCJsb2FkZXJzIiwibG9hZE9wdGlvbnMiLCJtZXJnZXJzIiwiVklTX1NUQVRFX01FUkdFUlMiLCJzY2hlbWEiLCJLZXBsZXJHTFNjaGVtYSIsInVwZGF0ZVN0YXRlV2l0aExheWVyQW5kRGF0YSIsInN0YXRlIiwibGF5ZXIiLCJpZHgiLCJtYXAiLCJseXIiLCJpIiwiZCIsInVwZGF0ZVN0YXRlT25MYXllclZpc2liaWxpdHlDaGFuZ2UiLCJuZXdTdGF0ZSIsImxlbmd0aCIsImlzVmlzaWJsZSIsImFuaW1hdGlvbiIsInVwZGF0ZUFuaW1hdGlvbkRvbWFpbiIsInBpY2tDaGFuZ2VkUHJvcHMiLCJwcmV2IiwibmV4dCIsImNoYW5nZWRQcm9wcyIsInBpY2tQcm9wc09mIiwib2JqIiwiT2JqZWN0Iiwia2V5cyIsImZvckVhY2giLCJrZXkiLCJoYXNPd25Qcm9wZXJ0eSIsIlZJU1VBTF9DSEFOTkVMX1BST1BfVFlQRVMiLCJhcHBseUxheWVyQ29uZmlnVXBkYXRlciIsImFjdGlvbiIsIm9sZExheWVySWQiLCJuZXdMYXllckNvbmZpZyIsImxheWVySW5kZXgiLCJuZXdQYXJzZWRMYXllciIsIm9sZExheWVyIiwiZmluZCIsImwiLCJkYXRhc2V0IiwiZGF0YUlkIiwibmV3TGF5ZXIiLCJuZXh0U3RhdGUiLCJ0eXBlIiwib2xkTGF5ZXJJbmRleCIsImZpbmRJbmRleCIsImxheWVyVHlwZUNoYW5nZVVwZGF0ZXIiLCJuZXdMYXllcklkIiwic2VyaWFsaXplZE9sZExheWVyIiwic2VyaWFsaXplZE5ld0xheWVyIiwiY2hhbmdlZCIsInZpc0NvbmZpZyIsImxheWVyVmlzQ29uZmlnQ2hhbmdlVXBkYXRlciIsInZpc3VhbENoYW5uZWxzIiwiY2hhbm5lbE5hbWUiLCJjaGFubmVsIiwiY2hhbm5lbFByb3BOYW1lcyIsInByb3AiLCJzb21lIiwibGF5ZXJWaXN1YWxDaGFubmVsQ2hhbmdlVXBkYXRlciIsImxheWVyQ29uZmlnQ2hhbmdlVXBkYXRlciIsInByb3BzIiwibmV3Q29uZmlnIiwicmVzdENvbmZpZyIsInN0YXRlV2l0aERhdGFJZCIsImxheWVyRGF0YUlkQ2hhbmdlVXBkYXRlciIsIm5leHRMYXllciIsInVwZGF0ZUxheWVyQ29uZmlnIiwic2hvdWxkQ2FsY3VsYXRlTGF5ZXJEYXRhIiwib2xkTGF5ZXJEYXRhIiwidXBkYXRlTGF5ZXJEYXRhUmVzdWx0IiwibGF5ZXJTZXRJc1ZhbGlkVXBkYXRlciIsImlzVmFsaWQiLCJsYXllclRvVXBkYXRlIiwibmV3RGF0YSIsImFkZE9yUmVtb3ZlVGV4dExhYmVscyIsIm5ld0ZpZWxkcyIsInRleHRMYWJlbCIsImRlZmF1bHRUZXh0TGFiZWwiLCJERUZBVUxUX1RFWFRfTEFCRUwiLCJuZXdUZXh0TGFiZWwiLCJzbGljZSIsImN1cnJlbnRGaWVsZHMiLCJ0bCIsImZpZWxkIiwibmFtZSIsImZpbHRlciIsImFkZEZpZWxkcyIsImYiLCJpbmNsdWRlcyIsImRlbGV0ZUZpZWxkcyIsImZkIiwiYWYiLCJ1cGRhdGVUZXh0TGFiZWxQcm9wQW5kVmFsdWUiLCJ2YWx1ZSIsInNwbGljZSIsImxheWVyVGV4dExhYmVsQ2hhbmdlVXBkYXRlciIsImdldERlZmF1bHRMYXllckNvbmZpZyIsInZhbGlkYXRlRXhpc3RpbmdMYXllcldpdGhEYXRhIiwibG9hZGVkTGF5ZXIiLCJhbGxvd0VtcHR5Q29sdW1uIiwiaXNWYWxpZFRvU2F2ZSIsInZhbGlkYXRlZCIsImlzQ29uZmlnQWN0aXZlIiwidXBkYXRlTGF5ZXJEb21haW4iLCJzZXRJbml0aWFsTGF5ZXJDb25maWciLCJyZXN1bHQiLCJmaW5kRGVmYXVsdExheWVyUHJvcHMiLCJBcnJheSIsImlzQXJyYXkiLCJuZXdUeXBlIiwib2xkSWQiLCJDb25zb2xlIiwiZXJyb3IiLCJhc3NpZ25Db25maWdUb0xheWVyIiwidmlzQ29uZmlnU2V0dGluZ3MiLCJpc0xheWVySG92ZXJlZCIsInNldHRpbmdzIiwib2xkTGF5ZXJNYXAiLCJvdGhlckxheWVycyIsImxheWVySWQiLCJ1cGRhdGVMYXllclZpc3VhbENoYW5uZWwiLCJuZXdWaXNDb25maWciLCJzZXRGaWx0ZXJBbmltYXRpb25UaW1lVXBkYXRlciIsInNldEZpbHRlclVwZGF0ZXIiLCJzZXRGaWx0ZXJBbmltYXRpb25XaW5kb3dVcGRhdGVyIiwiYW5pbWF0aW9uV2luZG93IiwidmFsdWVJbmRleCIsIm9sZEZpbHRlciIsIm5ld0ZpbHRlciIsImRhdGFzZXRJZHMiLCJGSUxURVJfVVBEQVRFUl9QUk9QUyIsImRhdGFzZXRJZCIsIm1lcmdlRG9tYWluIiwidXBkYXRlZEZpbHRlciIsIm5ld0RhdGFzZXQiLCJncHUiLCJsYXllcklkRGlmZmVyZW5jZSIsImxheWVyRGF0YUlkcyIsImxpZCIsIm5ld0RhdGFJZHMiLCJlbmxhcmdlZEZpbHRlciIsInZpZXciLCJGSUxURVJfVklFV19UWVBFUyIsImVubGFyZ2VkIiwic2lkZSIsImRhdGFzZXRJZHNUb0ZpbHRlciIsIkxJTUlURURfRklMVEVSX0VGRkVDVF9QUk9QUyIsImZpbHRlcmVkRGF0YXNldHMiLCJ1cGRhdGVBbGxMYXllckRvbWFpbkRhdGEiLCJzZXRGaWx0ZXJQbG90VXBkYXRlciIsIm5ld1Byb3AiLCJwbG90VHlwZSIsImFkZEZpbHRlclVwZGF0ZXIiLCJsYXllckNvbG9yVUlDaGFuZ2VVcGRhdGVyIiwib2xkVml4Q29uZmlnIiwidXBkYXRlTGF5ZXJDb2xvclVJIiwidG9nZ2xlRmlsdGVyQW5pbWF0aW9uVXBkYXRlciIsInRvZ2dsZUxheWVyQW5pbWF0aW9uVXBkYXRlciIsInRvZ2dsZUxheWVyQW5pbWF0aW9uQ29udHJvbFVwZGF0ZXIiLCJ1cGRhdGVGaWx0ZXJBbmltYXRpb25TcGVlZFVwZGF0ZXIiLCJzZXRMYXllckFuaW1hdGlvblRpbWVVcGRhdGVyIiwidXBkYXRlTGF5ZXJBbmltYXRpb25TcGVlZFVwZGF0ZXIiLCJzZXRGaWx0ZXJWaWV3VXBkYXRlciIsInNob3VsZFJlc2V0T3RoZXJGaWx0ZXJzVmlldyIsInRvZ2dsZUZpbHRlckZlYXR1cmVVcGRhdGVyIiwicmVtb3ZlRmlsdGVyVXBkYXRlciIsIm5ld0ZpbHRlcnMiLCJuZXdFZGl0b3IiLCJhZGRMYXllclVwZGF0ZXIiLCJuZXdMYXllckRhdGEiLCJ3YXJuIiwiZGVmYXVsdERhdGFzZXQiLCJMYXllciIsInJlbW92ZUxheWVyVXBkYXRlciIsIk51bWJlciIsImlzRmluaXRlIiwibGF5ZXJUb1JlbW92ZSIsInJlb3JkZXJMYXllclVwZGF0ZXIiLCJvcmRlciIsImR1cGxpY2F0ZUxheWVyVXBkYXRlciIsIm9yaWdpbmFsIiwib3JpZ2luYWxMYXllck9yZGVySWR4IiwibmV3TGFiZWwiLCJwb3N0Zml4IiwiTEFZRVJfSURfTEVOR1RIIiwibmV3TGF5ZXJPcmRlciIsImFkZEVmZmVjdFVwZGF0ZXIiLCJuZXdFZmZlY3QiLCJlZmZlY3QiLCJ1cGRhdGVDb25maWciLCJyZW1vdmVFZmZlY3RVcGRhdGVyIiwiZWZmZWN0VG9SZW1vdmUiLCJlZmZlY3RJZCIsInJlb3JkZXJFZmZlY3RVcGRhdGVyIiwidXBkYXRlRWZmZWN0VXBkYXRlciIsIm5ld0VmZmVjdHMiLCJyZW1vdmVEYXRhc2V0VXBkYXRlciIsImRhdGFzZXRLZXkiLCJuZXdEYXRhc2V0cyIsImxheWVyc1RvUmVtb3ZlIiwicmVkdWNlIiwiYWNjdSIsInJlbW92ZURhdGFzZXRGcm9tSW50ZXJhY3Rpb25Db25maWciLCJmaWVsZHMiLCJ1cGRhdGVMYXllckJsZW5kaW5nVXBkYXRlciIsInVwZGF0ZU92ZXJsYXlCbGVuZGluZ1VwZGF0ZXIiLCJzaG93RGF0YXNldFRhYmxlVXBkYXRlciIsInVwZGF0ZVRhYmxlQ29sb3JVcGRhdGVyIiwidXBkYXRlRGF0YXNldFByb3BzVXBkYXRlciIsImNvbG9yIiwibmV3Q29sb3IiLCJyZXNldE1hcENvbmZpZ1VwZGF0ZXIiLCJpbml0aWFsU3RhdGUiLCJyZWNlaXZlTWFwQ29uZmlnVXBkYXRlciIsInBheWxvYWQiLCJvcHRpb25zIiwidmlzU3RhdGUiLCJrZWVwRXhpc3RpbmdDb25maWciLCJtZXJnZWRTdGF0ZSIsIm1lcmdlciIsIm1lcmdlIiwidG9NZXJnZVByb3AiLCJsYXllckhvdmVyVXBkYXRlciIsImluZm8iLCJpbnRlcmFjdGlvbkNvbmZpZ0NoYW5nZVVwZGF0ZXIiLCJjb250cmFkaWN0IiwiayIsImxheWVyQ2xpY2tVcGRhdGVyIiwicGlubmVkIiwicGlja2VkIiwibWFwQ2xpY2tVcGRhdGVyIiwibW91c2VNb3ZlVXBkYXRlciIsImV2dCIsInZhbHVlcyIsInBvaW50IiwibW91c2VQb3NpdGlvbiIsImxuZ0xhdCIsInRvZ2dsZVNwbGl0TWFwVXBkYXRlciIsImR1cGxpY2F0ZSIsImNsb3NlU3BlY2lmaWNNYXBBdEluZGV4IiwidG9nZ2xlTGF5ZXJGb3JNYXBVcGRhdGVyIiwibWFwSW5kZXgiLCJzbSIsInVwZGF0ZVZpc0RhdGFVcGRhdGVyIiwicHJldmlvdXNTdGF0ZSIsIm5ld0RhdGFFbnRyaWVzIiwicmVzdCIsImxheWVyTWVyZ2VycyIsIm0iLCJ3YWl0Rm9yTGF5ZXJEYXRhIiwiZGF0YXNldE1lcmdlcnMiLCJwb3N0TWVyZ2VyUGF5bG9hZCIsImFwcGx5TWVyZ2Vyc1VwZGF0ZXIiLCJtZXJnZVN0YXRlUmVzdWx0IiwiYWxsTWVyZ2VkIiwicG9zdE1lcmdlVXBkYXRlciIsImZEYXRhSWQiLCJkYXRhc2V0RmlsdGVyZWQiLCJkYXRhRW1wdHkiLCJuZXdMYXllcnMiLCJhdXRvQ3JlYXRlTGF5ZXJzIiwiYWRkRGVmYXVsdExheWVycyIsInRvb2x0aXBGaWVsZHMiLCJhdXRvQ3JlYXRlVG9vbHRpcHMiLCJhZGREZWZhdWx0VG9vbHRpcHMiLCJ1cGRhdGVkRGF0YXNldHMiLCJjb25jYXQiLCJ1cGRhdGVkU3RhdGUiLCJyZW5hbWVEYXRhc2V0VXBkYXRlciIsIkFMTE9XRURfVVBEQVRFX0RBVEFTRVRfUFJPUFMiLCJ2YWxpZGF0ZURhdGFzZXRVcGRhdGVQcm9wcyIsInZhbGlkYXRlZFByb3BzIiwiZW50cmllcyIsImFjYyIsImVudHJ5IiwiZXhpc3RpbmciLCJpbmRleFRvUmV0cmlldmUiLCJtYXBMYXllcnMiLCJsb2FkRmlsZXNVcGRhdGVyIiwiZmlsZXMiLCJvbkZpbmlzaCIsImxvYWRGaWxlc1N1Y2Nlc3MiLCJmcm9tIiwiaW5pdGlhbEZpbGVMb2FkaW5nUHJvZ3Jlc3MiLCJmaWxlQ2FjaGUiLCJmaWxlc1RvTG9hZCIsImxvYWROZXh0RmlsZVVwZGF0ZXIiLCJsb2FkRmlsZVN0ZXBTdWNjZXNzVXBkYXRlciIsImZpbGVOYW1lIiwic3RhdGVXaXRoUHJvZ3Jlc3MiLCJ1cGRhdGVGaWxlTG9hZGluZ1Byb2dyZXNzVXBkYXRlciIsInByb2dyZXNzIiwicGVyY2VudCIsIm1lc3NhZ2UiLCJzdGF0ZVdpdGhDYWNoZSIsImxvYWROZXh0RmlsZSIsImZpbGUiLCJyZW1haW5pbmdGaWxlc1RvTG9hZCIsIm1ha2VMb2FkRmlsZVRhc2siLCJiaW1hcCIsImdlbiIsImNvbnRlbnQiLCJlcnIiLCJwcm9jZXNzRmlsZUNvbnRlbnRVcGRhdGVyIiwicGFyc2VQcm9ncmVzcyIsInByZXZQcm9ncmVzcyIsIm5leHRGaWxlQmF0Y2hVcGRhdGVyIiwiYWNjdW11bGF0ZWQiLCJkb25lIiwibG9hZEZpbGVzRXJyVXBkYXRlciIsImFwcGx5Q1BVRmlsdGVyVXBkYXRlciIsImRhdGFJZHMiLCJzZXRNYXBJbmZvVXBkYXRlciIsImVtcHR5IiwiZGVmYXVsdExheWVycyIsImZvdW5kTGF5ZXJzIiwibWVyZ2VkIiwiaW5kZXgiLCJmaXhlZERvbWFpbiIsInB1c2giLCJhbmltYXRhYmxlTGF5ZXJzIiwiYW5pbWF0aW9uRG9tYWluIiwibWVyZ2VkRG9tYWluIiwiTWF0aCIsIm1pbiIsIm1heCIsIkluZmluaXR5Iiwic2V0RWRpdG9yTW9kZVVwZGF0ZXIiLCJzZXRGZWF0dXJlc1VwZGF0ZXIiLCJsYXN0RmVhdHVyZSIsInByb3BlcnRpZXMiLCJpc0Nsb3NlZCIsIkVESVQiLCJmZWF0dXJlIiwiZmlsdGVySWQiLCJmZWF0dXJlVmFsdWUiLCJmaWx0ZXJJZHgiLCJmaWwiLCJzZXRTZWxlY3RlZEZlYXR1cmVVcGRhdGVyIiwic2VsZWN0aW9uQ29udGV4dCIsImRlbGV0ZUZlYXR1cmVVcGRhdGVyIiwic2V0UG9seWdvbkZpbHRlckxheWVyVXBkYXRlciIsIm5vbmVGaWx0ZXJGZWF0dXJlIiwiaXNMYXllckluY2x1ZGVkIiwic29ydFRhYmxlQ29sdW1uVXBkYXRlciIsImNvbHVtbiIsInNvcnRNb2RlIiwiY3VycmVudE1vZGUiLCJTT1JUX09SREVSIiwiQVNDRU5ESU5HIiwic29ydGVkIiwicGluVGFibGVDb2x1bW5VcGRhdGVyIiwiY29weVRhYmxlQ29sdW1uVXBkYXRlciIsImZpZWxkSWR4IiwidGV4dCIsImRhdGFDb250YWluZXIiLCJyb3ciLCJ2YWx1ZUF0Iiwiam9pbiIsInNldENvbHVtbkRpc3BsYXlGb3JtYXRVcGRhdGVyIiwiZm9ybWF0cyIsImRpc3BsYXlGb3JtYXQiLCJ0b2dnbGVFZGl0b3JWaXNpYmlsaXR5VXBkYXRlciIsInNldEZpbHRlckFuaW1hdGlvblRpbWVDb25maWdVcGRhdGVyIiwiRklMVEVSX1RZUEVTIiwidGltZVJhbmdlIiwidXBkYXRlcyIsImNoZWNrVGltZUNvbmZpZ0FyZ3MiLCJhbGxvd2VkIiwic2V0TGF5ZXJBbmltYXRpb25UaW1lQ29uZmlnVXBkYXRlciIsImRlZmF1bHRSZXBsYWNlUGFyZW50RGF0YXNldElkcyIsImRhdGFJZFRvUmVwbGFjZSIsInJlcGxhY2VkIiwidiIsImZpbmRDaGlsZERhdGFzZXRJZHMiLCJjaGlsZERhdGFJZHMiLCJtb3ZlVmFsdWVUb0JlTWVyZ2VkIiwicHJvcFZhbHVlcyIsInNhdmVVbm1lcmdlZCIsInN0YXRlUmVtb3ZlZCIsInByb3BWYWx1ZSIsInAiLCJ0b0JlTWVyZ2VkIiwicmVwbGFjZURhdGFzZXRBbmREZXBzIiwiZGF0YUlkVG9Vc2UiLCJyZXBsYWNlRGF0YXNldERlcHNJblN0YXRlIiwicHJlcGFyZVN0YXRlRm9yRGF0YXNldFJlcGxhY2UiLCJzZXJpYWxpemVkU3RhdGUiLCJwcmVzZXJ2ZUxheWVyT3JkZXIiLCJwcmVzZXJ2ZURhdGFzZXRPcmRlciIsImFjY3VTdGF0ZSIsInJlcGxhY2VQYXJlbnREYXRhc2V0SWRzIiwiZ2V0Q2hpbGREYXRhc2V0SWRzIiwicHJlc2VydmVPcmRlciIsInRvTWVyZ2VQcm9wcyIsInNhdmVkUHJvcHMiLCJyZXBsYWNlZFN0YXRlIiwibWVyZ2VyT3B0aW9ucyIsInJlcGxhY2VkSXRlbSIsInJlcGxhY2VQcm9wVmFsdWVJblN0YXRlIiwiaXRlbSIsImNoaWxkRGF0YUlkIl0sIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztBQW9CQTs7QUFDQTs7QUFDQTs7QUFDQTs7QUFDQTs7QUFDQTs7QUFDQTs7QUFDQTs7QUFDQTs7QUFDQTs7QUFFQTs7QUFFQTs7QUFtQkE7O0FBNkJBOztBQVFBOztBQUNBOztBQUNBOztBQVNBOztBQVVBOztBQUtBOztBQUNBOztBQVNBOztBQUlBOzs7Ozs7Ozs7Ozs7Ozs7O0FBRUE7QUFDQTtBQUNBO0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUNBO0FBQ0E7O0FBQ0EsSUFBTUEsZ0JBQWdCLEdBQUcsSUFBekI7QUFDQTs7QUFFTyxJQUFNQyx3QkFBMkMsR0FBRztBQUN6REMsRUFBQUEsT0FBTyxFQUFFO0FBQ1BDLElBQUFBLEVBQUUsRUFBRSxTQURHO0FBRVBDLElBQUFBLEtBQUssRUFBRSxzQkFGQTtBQUdQQyxJQUFBQSxPQUFPLEVBQUUsSUFIRjtBQUlQQyxJQUFBQSxNQUFNLEVBQUU7QUFDTkMsTUFBQUEsWUFBWSxFQUFFLEVBRFI7QUFFTkMsTUFBQUEsV0FBVyxFQUFFLEtBRlA7QUFHTkMsTUFBQUEsV0FBVyxFQUFFQyx5QkFBY0M7QUFIckI7QUFKRCxHQURnRDtBQVd6REMsRUFBQUEsUUFBUSxFQUFFO0FBQ1JULElBQUFBLEVBQUUsRUFBRSxVQURJO0FBRVJDLElBQUFBLEtBQUssRUFBRSx1QkFGQztBQUdSQyxJQUFBQSxPQUFPLEVBQUUsS0FIRDtBQUlSUSxJQUFBQSxRQUFRLEVBQUU7QUFKRixHQVgrQztBQWlCekRDLEVBQUFBLEtBQUssRUFBRTtBQUNMWCxJQUFBQSxFQUFFLEVBQUUsT0FEQztBQUVMQyxJQUFBQSxLQUFLLEVBQUUsb0JBRkY7QUFHTEMsSUFBQUEsT0FBTyxFQUFFLEtBSEo7QUFJTEMsSUFBQUEsTUFBTSxFQUFFO0FBQ047QUFDQVMsTUFBQUEsSUFBSSxFQUFFO0FBRkE7QUFKSCxHQWpCa0Q7QUEwQnpEQyxFQUFBQSxVQUFVLEVBQUU7QUFDVmIsSUFBQUEsRUFBRSxFQUFFLFlBRE07QUFFVkMsSUFBQUEsS0FBSyxFQUFFLHlCQUZHO0FBR1ZDLElBQUFBLE9BQU8sRUFBRSxLQUhDO0FBSVZRLElBQUFBLFFBQVEsRUFBRTtBQUpBO0FBMUI2QyxDQUFwRDs7QUFrQ0EsSUFBTUksd0JBQXlDLEdBQUc7QUFDdkRDLEVBQUFBLE1BQU0sRUFBRSxJQUQrQztBQUV2REMsRUFBQUEsV0FBVyxFQUFFLElBRjBDO0FBR3ZEQyxFQUFBQSxLQUFLLEVBQUUsQ0FIZ0Q7QUFJdkRDLEVBQUFBLFdBQVcsRUFBRSxLQUowQztBQUt2REMsRUFBQUEsVUFBVSxFQUFFLElBTDJDO0FBTXZEQyxFQUFBQSxRQUFRLEVBQUUsSUFONkM7QUFPdkRDLEVBQUFBLGlCQUFpQixFQUFFLElBUG9DO0FBUXZEQyxFQUFBQSxXQUFXLEVBQUUsS0FSMEM7QUFTdkRDLEVBQUFBLFFBQVEsRUFBRTtBQVQ2QyxDQUFsRDs7QUFZQSxJQUFNQyxjQUFzQixHQUFHO0FBQ3BDQyxFQUFBQSxJQUFJLEVBQUVDLHdCQUFhQyxZQURpQjtBQUVwQ0MsRUFBQUEsUUFBUSxFQUFFLEVBRjBCO0FBR3BDQyxFQUFBQSxlQUFlLEVBQUUsSUFIbUI7QUFJcENDLEVBQUFBLE9BQU8sRUFBRTtBQUoyQixDQUEvQjtBQU9QO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7O0FBQ08sSUFBTUMsaUJBQTJCLEdBQUc7QUFDekM7QUFDQUMsRUFBQUEsT0FBTyxFQUFFO0FBQ1BDLElBQUFBLEtBQUssRUFBRSxFQURBO0FBRVBDLElBQUFBLFdBQVcsRUFBRTtBQUZOLEdBRmdDO0FBTXpDO0FBQ0FDLEVBQUFBLE1BQU0sRUFBRSxFQVBpQztBQVF6Q0MsRUFBQUEsU0FBUyxFQUFFLEVBUjhCO0FBU3pDQyxFQUFBQSxlQUFlLEVBQUUsRUFUd0I7QUFVekNDLEVBQUFBLFVBQVUsRUFBRSxFQVY2QjtBQVl6QztBQUNBQyxFQUFBQSxPQUFPLEVBQUUsRUFiZ0M7QUFjekNDLEVBQUFBLGdCQUFnQixFQUFFLEVBZHVCO0FBZ0J6QztBQUNBQyxFQUFBQSxRQUFRLEVBQUUsRUFqQitCO0FBa0J6Q0MsRUFBQUEsY0FBYyxFQUFFQyxTQWxCeUI7QUFvQnpDO0FBQ0FDLEVBQUFBLE9BQU8sRUFBRSxFQXJCZ0M7QUFzQnpDQyxFQUFBQSxXQUFXLEVBQUUsRUF0QjRCO0FBd0J6Q0MsRUFBQUEsaUJBQWlCLEVBQUVoRCx3QkF4QnNCO0FBeUJ6Q2lELEVBQUFBLHFCQUFxQixFQUFFLEVBekJrQjtBQTJCekNDLEVBQUFBLGFBQWEsRUFBRSxRQTNCMEI7QUE0QnpDQyxFQUFBQSxlQUFlLEVBQUUsUUE1QndCO0FBNkJ6Q0MsRUFBQUEsU0FBUyxFQUFFUCxTQTdCOEI7QUE4QnpDUSxFQUFBQSxPQUFPLEVBQUVSLFNBOUJnQztBQStCekNTLEVBQUFBLFFBQVEsRUFBRSxFQS9CK0I7QUFnQ3pDQyxFQUFBQSxrQkFBa0IsRUFBRUMsK0JBaENxQjtBQWtDekM7QUFDQUMsRUFBQUEsU0FBUyxFQUFFLENBQ1Q7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFQUyxHQW5DOEI7QUE0Q3pDQyxFQUFBQSxtQkFBbUIsRUFBRSxFQTVDb0I7QUE2Q3pDQyxFQUFBQSxpQkFBaUIsRUFBRSxFQTdDc0I7QUE4Q3pDO0FBQ0FDLEVBQUFBLFlBQVksRUFBRUMsb0JBL0MyQjtBQWlEekM7QUFDQTtBQUNBQyxFQUFBQSxlQUFlLEVBQUU5Qyx3QkFuRHdCO0FBcUR6QytDLEVBQUFBLE1BQU0sRUFBRXJDLGNBckRpQztBQXVEekNzQyxFQUFBQSxXQUFXLEVBQUUsS0F2RDRCO0FBd0R6Q0MsRUFBQUEsbUJBQW1CLEVBQUUsRUF4RG9CO0FBMER6Q0MsRUFBQUEsT0FBTyxFQUFFLEVBMURnQztBQTJEekNDLEVBQUFBLFdBQVcsRUFBRSxFQTNENEI7QUE2RHpDO0FBQ0FDLEVBQUFBLE9BQU8sRUFBRUMsaUNBOURnQztBQWdFekM7QUFDQUMsRUFBQUEsTUFBTSxFQUFFQztBQWpFaUMsQ0FBcEM7OztBQXlFUDtBQUNBO0FBQ0E7QUFDQTtBQUNPLFNBQVNDLDJCQUFULENBQ0xDLEtBREssUUFHRjtBQUFBLE1BREZuQyxTQUNFLFFBREZBLFNBQ0U7QUFBQSxNQURTb0MsS0FDVCxRQURTQSxLQUNUO0FBQUEsTUFEZ0JDLEdBQ2hCLFFBRGdCQSxHQUNoQjtBQUNILHlDQUNLRixLQURMO0FBRUVwQyxJQUFBQSxNQUFNLEVBQUVvQyxLQUFLLENBQUNwQyxNQUFOLENBQWF1QyxHQUFiLENBQWlCLFVBQUNDLEdBQUQsRUFBTUMsQ0FBTjtBQUFBLGFBQWFBLENBQUMsS0FBS0gsR0FBTixHQUFZRCxLQUFaLEdBQW9CRyxHQUFqQztBQUFBLEtBQWpCLENBRlY7QUFHRXZDLElBQUFBLFNBQVMsRUFBRUEsU0FBUyxHQUNoQm1DLEtBQUssQ0FBQ25DLFNBQU4sQ0FBZ0JzQyxHQUFoQixDQUFvQixVQUFDRyxDQUFELEVBQUlELENBQUo7QUFBQSxhQUFXQSxDQUFDLEtBQUtILEdBQU4sR0FBWXJDLFNBQVosR0FBd0J5QyxDQUFuQztBQUFBLEtBQXBCLENBRGdCLEdBRWhCTixLQUFLLENBQUNuQztBQUxaO0FBT0Q7O0FBRU0sU0FBUzBDLGtDQUFULENBQWdFUCxLQUFoRSxFQUEwRUMsS0FBMUUsRUFBMkY7QUFDaEcsTUFBSU8sUUFBUSxHQUFHUixLQUFmOztBQUNBLE1BQUlBLEtBQUssQ0FBQ2hCLFNBQU4sQ0FBZ0J5QixNQUFwQixFQUE0QjtBQUMxQkQsSUFBQUEsUUFBUSxtQ0FDSFIsS0FERztBQUVOaEIsTUFBQUEsU0FBUyxFQUFFaUIsS0FBSyxDQUFDckUsTUFBTixDQUFhOEUsU0FBYixHQUNQLG1DQUF1QlYsS0FBSyxDQUFDaEIsU0FBN0IsRUFBd0NpQixLQUF4QyxDQURPLEdBRVAscUNBQXlCRCxLQUFLLENBQUNoQixTQUEvQixFQUEwQ2lCLEtBQTFDO0FBSkUsTUFBUjtBQU1EOztBQUVELE1BQUlBLEtBQUssQ0FBQ3JFLE1BQU4sQ0FBYStFLFNBQWIsQ0FBdUJoRixPQUEzQixFQUFvQztBQUNsQzZFLElBQUFBLFFBQVEsR0FBR0kscUJBQXFCLENBQUNaLEtBQUQsQ0FBaEM7QUFDRDs7QUFFRCxTQUFPUSxRQUFQO0FBQ0Q7QUFFRDtBQUNBO0FBQ0E7QUFDQTs7O0FBQ0EsU0FBU0ssZ0JBQVQsQ0FBNkJDLElBQTdCLEVBQXNDQyxJQUF0QyxFQUEyRDtBQUN6RCxNQUFNQyxZQUF3QixHQUFHLEVBQWpDOztBQUNBLE1BQU1DLFdBQVcsR0FBRyxTQUFkQSxXQUFjLENBQUFDLEdBQUcsRUFBSTtBQUN6QkMsSUFBQUEsTUFBTSxDQUFDQyxJQUFQLENBQVlGLEdBQVosRUFBaUJHLE9BQWpCLENBQXlCLFVBQUFDLEdBQUcsRUFBSTtBQUM5QixVQUFJLENBQUNOLFlBQVksQ0FBQ08sY0FBYixDQUE0QkQsR0FBNUIsQ0FBRCxJQUFxQyxDQUFDLHlCQUFRUixJQUFJLENBQUNRLEdBQUQsQ0FBWixFQUFtQlAsSUFBSSxDQUFDTyxHQUFELENBQXZCLENBQTFDLEVBQXlFO0FBQ3ZFTixRQUFBQSxZQUFZLENBQUNNLEdBQUQsQ0FBWixHQUFvQlAsSUFBSSxDQUFDTyxHQUFELENBQXhCO0FBQ0Q7QUFDRixLQUpEO0FBS0QsR0FORDs7QUFPQUwsRUFBQUEsV0FBVyxDQUFDSCxJQUFELENBQVg7QUFDQUcsRUFBQUEsV0FBVyxDQUFDRixJQUFELENBQVg7QUFDQSxTQUFPQyxZQUFQO0FBQ0Q7O0FBRUQsSUFBTVEseUJBQXlCLEdBQUcsQ0FBQyxPQUFELEVBQVUsT0FBVixFQUFtQixRQUFuQixFQUE2QixhQUE3QixDQUFsQztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFDTyxTQUFTQyx1QkFBVCxDQUNMekIsS0FESyxFQUVMMEIsTUFGSyxFQUdLO0FBQUE7O0FBQUEsTUFDSEMsVUFERyxHQUN1Q0QsTUFEdkMsQ0FDSEMsVUFERztBQUFBLE1BQ1NDLGNBRFQsR0FDdUNGLE1BRHZDLENBQ1NFLGNBRFQ7QUFBQSxNQUN5QkMsVUFEekIsR0FDdUNILE1BRHZDLENBQ3lCRyxVQUR6QjtBQUVWLE1BQU1DLGNBQWMsR0FDbEI7QUFDQSx3Q0FBaUI5QixLQUFLLENBQUNILE1BQXZCLEVBQStCK0IsY0FBL0IsQ0FGRjtBQUdBLE1BQU1HLFFBQVEsR0FBRy9CLEtBQUssQ0FBQ3BDLE1BQU4sQ0FBYW9FLElBQWIsQ0FBa0IsVUFBQUMsQ0FBQztBQUFBLFdBQUlBLENBQUMsQ0FBQ3hHLEVBQUYsS0FBU2tHLFVBQWI7QUFBQSxHQUFuQixDQUFqQjs7QUFDQSxNQUFJLENBQUNJLFFBQUQsSUFBYSxDQUFDRCxjQUFsQixFQUFrQztBQUNoQyxXQUFPOUIsS0FBUDtBQUNEOztBQUNELE1BQUk2QixVQUFVLEtBQUssSUFBZixJQUF1QkEsVUFBVSxLQUFLekQsU0FBdEMsSUFBbUQ0QixLQUFLLENBQUNwQyxNQUFOLENBQWFpRSxVQUFiLE1BQTZCRSxRQUFwRixFQUE4RjtBQUM1RjtBQUNBLFdBQU8vQixLQUFQO0FBQ0Q7O0FBQ0QsTUFBTWtDLE9BQU8sR0FBR2xDLEtBQUssQ0FBQzlCLFFBQU4sQ0FBZTRELGNBQWMsQ0FBQ2xHLE1BQWYsQ0FBc0J1RyxNQUFyQyxDQUFoQjs7QUFDQSxNQUFJLENBQUNELE9BQUwsRUFBYztBQUNaLFdBQU9sQyxLQUFQO0FBQ0QsR0FoQlMsQ0FpQlY7OztBQUNBLE1BQU1vQyxRQUFRLEdBQUcsMkNBQXNCRixPQUF0QixFQUErQkosY0FBL0IsRUFBK0M5QixLQUFLLENBQUNiLFlBQXJELENBQWpCOztBQUNBLE1BQUksQ0FBQ2lELFFBQUwsRUFBZTtBQUNiLFdBQU9wQyxLQUFQO0FBQ0Q7O0FBRUQsTUFBSXFDLFNBQVMsR0FBR3JDLEtBQWhCOztBQUVBLE1BQUlvQyxRQUFRLENBQUNFLElBQVQsSUFBaUJGLFFBQVEsQ0FBQ0UsSUFBVCxLQUFrQlAsUUFBUSxDQUFDTyxJQUFoRCxFQUFzRDtBQUNwRCxRQUFNQyxhQUFhLEdBQUd2QyxLQUFLLENBQUNwQyxNQUFOLENBQWE0RSxTQUFiLENBQXVCLFVBQUFQLENBQUM7QUFBQSxhQUFJQSxDQUFDLENBQUN4RyxFQUFGLEtBQVNrRyxVQUFiO0FBQUEsS0FBeEIsQ0FBdEI7O0FBQ0EsUUFBSVksYUFBYSxJQUFJLENBQXJCLEVBQXdCO0FBQ3RCRixNQUFBQSxTQUFTLEdBQUdJLHNCQUFzQixDQUFDSixTQUFELEVBQVksOEJBQWdCTixRQUFoQixFQUEwQkssUUFBUSxDQUFDRSxJQUFuQyxDQUFaLENBQWxDLENBRHNCLENBRXRCO0FBQ0E7O0FBQ0EsVUFBSUQsU0FBUyxDQUFDekUsTUFBVixDQUFpQjZDLE1BQWpCLEtBQTRCVCxLQUFLLENBQUNwQyxNQUFOLENBQWE2QyxNQUE3QyxFQUFxRDtBQUNuRCxZQUFNaUMsVUFBVSxHQUFHTCxTQUFTLENBQUN6RSxNQUFWLENBQWlCMkUsYUFBakIsRUFBZ0M5RyxFQUFuRDtBQUNBNEcsUUFBQUEsU0FBUyxHQUFHWix1QkFBdUIsQ0FDakNZLFNBRGlDLEVBRWpDLCtCQUFpQkssVUFBakIsa0NBQWlDZCxjQUFqQztBQUFpRG5HLFVBQUFBLEVBQUUsRUFBRWlIO0FBQXJELFdBRmlDLENBQW5DO0FBSUQ7QUFDRjs7QUFDRCxXQUFPTCxTQUFQO0FBQ0QsR0F4Q1MsQ0EwQ1Y7QUFDQTs7O0FBQ0EsTUFBTU0sa0JBQWtCLHNCQUFHLG9DQUFlWixRQUFmLEVBQXlCL0IsS0FBSyxDQUFDSCxNQUEvQixDQUFILDZEQUE2QztBQUFDakUsSUFBQUEsTUFBTSxFQUFFO0FBQVQsR0FBckU7QUFDQSxNQUFNZ0gsa0JBQWtCLEdBQUcsb0NBQWVSLFFBQWYsRUFBeUJwQyxLQUFLLENBQUNILE1BQS9CLENBQTNCOztBQUNBLE1BQUksQ0FBQytDLGtCQUFMLEVBQXlCO0FBQ3ZCLFdBQU81QyxLQUFQO0FBQ0Q7O0FBQ0QsTUFBSSxDQUFDLHlCQUFRMkMsa0JBQVIsRUFBNEJDLGtCQUE1QixDQUFMLEVBQXNEO0FBQ3BELFFBQU1DLE9BQU8sR0FBR2hDLGdCQUFnQixDQUFDOEIsa0JBQWtCLENBQUMvRyxNQUFwQixFQUE0QmdILGtCQUFrQixDQUFDaEgsTUFBL0MsQ0FBaEM7O0FBRUEsUUFBSSxlQUFlaUgsT0FBbkIsRUFBNEI7QUFDMUIsVUFBSUEsT0FBTyxDQUFDQyxTQUFaLEVBQXVCO0FBQ3JCVCxRQUFBQSxTQUFTLEdBQUdVLDJCQUEyQixDQUNyQ1YsU0FEcUMsRUFFckMsbUNBQXFCTixRQUFyQixFQUErQmMsT0FBTyxDQUFDQyxTQUF2QyxDQUZxQyxDQUF2QztBQUlEOztBQUNELGFBQU9ELE9BQU8sQ0FBQ0MsU0FBZjtBQUNEOztBQUVEM0IsSUFBQUEsTUFBTSxDQUFDQyxJQUFQLENBQVlXLFFBQVEsQ0FBQ2lCLGNBQXJCLEVBQXFDM0IsT0FBckMsQ0FBNkMsVUFBQTRCLFdBQVcsRUFBSTtBQUMxRCxVQUFNQyxPQUFPLEdBQUduQixRQUFRLENBQUNpQixjQUFULENBQXdCQyxXQUF4QixDQUFoQjtBQUNBLFVBQU1FLGdCQUFnQixHQUFHM0IseUJBQXlCLENBQUNyQixHQUExQixDQUE4QixVQUFBaUQsSUFBSTtBQUFBLGVBQUlGLE9BQU8sQ0FBQ0UsSUFBRCxDQUFYO0FBQUEsT0FBbEMsQ0FBekI7O0FBQ0EsVUFBSUQsZ0JBQWdCLENBQUNFLElBQWpCLENBQXNCLFVBQUFELElBQUk7QUFBQSxlQUFJQSxJQUFJLElBQUlQLE9BQVo7QUFBQSxPQUExQixDQUFKLEVBQW9EO0FBQ2xEUixRQUFBQSxTQUFTLEdBQUdpQiwrQkFBK0IsQ0FDekNqQixTQUR5QyxFQUV6Qyw2Q0FDRU4sUUFERixFQUVFLHlCQUFLSyxRQUFRLENBQUN4RyxNQUFkLEVBQXNCdUgsZ0JBQXRCLENBRkYsRUFHRUYsV0FIRixDQUZ5QyxDQUEzQzs7QUFEa0QsbURBUy9CRSxnQkFUK0I7QUFBQTs7QUFBQTtBQVNsRCw4REFBcUM7QUFBQSxnQkFBMUJDLElBQTBCO0FBQ25DLG1CQUFPUCxPQUFPLENBQUNPLElBQUQsQ0FBZDtBQUNEO0FBWGlEO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFZbkQ7QUFDRixLQWhCRDs7QUFrQkEsUUFBSWpDLE1BQU0sQ0FBQ0MsSUFBUCxDQUFZeUIsT0FBWixFQUFxQnBDLE1BQXJCLEdBQThCLENBQWxDLEVBQXFDO0FBQ25DNEIsTUFBQUEsU0FBUyxHQUFHa0Isd0JBQXdCLENBQ2xDbEIsU0FEa0MsRUFFbEMsZ0NBQWtCTixRQUFsQixFQUE0Qix5QkFBS0ssUUFBUSxDQUFDeEcsTUFBZCxFQUFzQnVGLE1BQU0sQ0FBQ0MsSUFBUCxDQUFZeUIsT0FBWixDQUF0QixDQUE1QixDQUZrQyxDQUFwQztBQUlEO0FBQ0Y7O0FBRUQsU0FBT1IsU0FBUDtBQUNEO0FBRUQ7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOzs7QUFDTyxTQUFTa0Isd0JBQVQsQ0FDTHZELEtBREssRUFFTDBCLE1BRkssRUFHSztBQUFBLE1BQ0hLLFFBREcsR0FDU0wsTUFEVCxDQUNISyxRQURHO0FBRVYsTUFBTTdCLEdBQUcsR0FBR0YsS0FBSyxDQUFDcEMsTUFBTixDQUFhNEUsU0FBYixDQUF1QixVQUFBUCxDQUFDO0FBQUEsV0FBSUEsQ0FBQyxDQUFDeEcsRUFBRixLQUFTc0csUUFBUSxDQUFDdEcsRUFBdEI7QUFBQSxHQUF4QixDQUFaO0FBQ0EsTUFBTStILEtBQUssR0FBR3JDLE1BQU0sQ0FBQ0MsSUFBUCxDQUFZTSxNQUFNLENBQUMrQixTQUFuQixDQUFkOztBQUNBLE1BQ0UsT0FBTy9CLE1BQU0sQ0FBQytCLFNBQVAsQ0FBaUJ0QixNQUF4QixLQUFtQyxRQUFuQyxJQUNBVCxNQUFNLENBQUMrQixTQUFQLENBQWlCdEIsTUFBakIsS0FBNEJKLFFBQVEsQ0FBQ25HLE1BQVQsQ0FBZ0J1RyxNQUY5QyxFQUdFO0FBQUEsNEJBQ2dDVCxNQUFNLENBQUMrQixTQUR2QztBQUFBLFFBQ090QixNQURQLHFCQUNPQSxNQURQO0FBQUEsUUFDa0J1QixVQURsQjtBQUVBLFFBQU1DLGVBQWUsR0FBR0Msd0JBQXdCLENBQUM1RCxLQUFELEVBQVE7QUFDdEQrQixNQUFBQSxRQUFRLEVBQVJBLFFBRHNEO0FBRXREMEIsTUFBQUEsU0FBUyxFQUFFO0FBQUN0QixRQUFBQSxNQUFNLEVBQU5BO0FBQUQ7QUFGMkMsS0FBUixDQUFoRDtBQUlBLFFBQU0wQixTQUFTLEdBQUdGLGVBQWUsQ0FBQy9GLE1BQWhCLENBQXVCb0UsSUFBdkIsQ0FBNEIsVUFBQUMsQ0FBQztBQUFBLGFBQUlBLENBQUMsQ0FBQ3hHLEVBQUYsS0FBU3NHLFFBQVEsQ0FBQ3RHLEVBQXRCO0FBQUEsS0FBN0IsQ0FBbEI7QUFDQSxXQUFPb0ksU0FBUyxJQUFJMUMsTUFBTSxDQUFDQyxJQUFQLENBQVlzQyxVQUFaLEVBQXdCakQsTUFBckMsR0FDSDhDLHdCQUF3QixDQUFDSSxlQUFELEVBQWtCO0FBQUM1QixNQUFBQSxRQUFRLEVBQUU4QixTQUFYO0FBQXNCSixNQUFBQSxTQUFTLEVBQUVDO0FBQWpDLEtBQWxCLENBRHJCLEdBRUhDLGVBRko7QUFHRDs7QUFFRCxNQUFJdkIsUUFBUSxHQUFHTCxRQUFRLENBQUMrQixpQkFBVCxDQUEyQnBDLE1BQU0sQ0FBQytCLFNBQWxDLENBQWY7QUFFQSxNQUFJNUYsU0FBSjs7QUFFQSxNQUFJdUUsUUFBUSxDQUFDMkIsd0JBQVQsQ0FBa0NQLEtBQWxDLENBQUosRUFBOEM7QUFDNUMsUUFBTVEsWUFBWSxHQUFHaEUsS0FBSyxDQUFDbkMsU0FBTixDQUFnQnFDLEdBQWhCLENBQXJCO0FBRUEsUUFBTStELHFCQUFxQixHQUFHLG9DQUFtQjdCLFFBQW5CLEVBQTZCcEMsS0FBN0IsRUFBb0NnRSxZQUFwQyxDQUE5QjtBQUNBNUIsSUFBQUEsUUFBUSxHQUFHNkIscUJBQXFCLENBQUNoRSxLQUFqQztBQUNBcEMsSUFBQUEsU0FBUyxHQUFHb0cscUJBQXFCLENBQUNwRyxTQUFsQztBQUNEOztBQUVELE1BQUkyQyxRQUFRLEdBQUdSLEtBQWY7O0FBQ0EsTUFBSSxlQUFlMEIsTUFBTSxDQUFDK0IsU0FBMUIsRUFBcUM7QUFDbkNqRCxJQUFBQSxRQUFRLEdBQUdELGtDQUFrQyxDQUFDUCxLQUFELEVBQVFvQyxRQUFSLENBQTdDO0FBQ0Q7O0FBRUQsU0FBT3JDLDJCQUEyQixDQUFDUyxRQUFELEVBQVc7QUFDM0NQLElBQUFBLEtBQUssRUFBRW1DLFFBRG9DO0FBRTNDdkUsSUFBQUEsU0FBUyxFQUFUQSxTQUYyQztBQUczQ3FDLElBQUFBLEdBQUcsRUFBSEE7QUFIMkMsR0FBWCxDQUFsQztBQUtEO0FBRUQ7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7OztBQUNPLFNBQVNnRSxzQkFBVCxDQUNMbEUsS0FESyxFQUVMMEIsTUFGSyxFQUdLO0FBQUEsTUFDSEssUUFERyxHQUNrQkwsTUFEbEIsQ0FDSEssUUFERztBQUFBLE1BQ09vQyxPQURQLEdBQ2tCekMsTUFEbEIsQ0FDT3lDLE9BRFA7QUFHVixNQUFNakUsR0FBRyxHQUFHRixLQUFLLENBQUNwQyxNQUFOLENBQWE0RSxTQUFiLENBQXVCLFVBQUFQLENBQUM7QUFBQSxXQUFJQSxDQUFDLENBQUN4RyxFQUFGLEtBQVNzRyxRQUFRLENBQUN0RyxFQUF0QjtBQUFBLEdBQXhCLENBQVo7QUFDQSxNQUFNMkksYUFBYSxHQUFHcEUsS0FBSyxDQUFDcEMsTUFBTixDQUFhc0MsR0FBYixDQUF0Qjs7QUFDQSxNQUFJa0UsYUFBSixFQUFtQjtBQUNqQixRQUFJaEMsUUFBSjtBQUNBLFFBQUlpQyxPQUFPLEdBQUcsSUFBZDs7QUFFQSxRQUFJRixPQUFKLEVBQWE7QUFDWDtBQURXLGdDQUVnQixvQ0FBbUJDLGFBQW5CLEVBQWtDcEUsS0FBbEMsRUFBeUM1QixTQUF6QyxDQUZoQjtBQUFBLFVBRUo2QixLQUZJLHVCQUVKQSxLQUZJO0FBQUEsVUFFR3BDLFNBRkgsdUJBRUdBLFNBRkg7O0FBR1h1RSxNQUFBQSxRQUFRLEdBQUduQyxLQUFYO0FBQ0FvRSxNQUFBQSxPQUFPLEdBQUd4RyxTQUFWO0FBQ0QsS0FMRCxNQUtPO0FBQ0x1RSxNQUFBQSxRQUFRLEdBQUdnQyxhQUFhLENBQUNOLGlCQUFkLENBQWdDO0FBQ3pDcEQsUUFBQUEsU0FBUyxFQUFFO0FBRDhCLE9BQWhDLENBQVg7QUFHQTBCLE1BQUFBLFFBQVEsQ0FBQytCLE9BQVQsR0FBbUIsS0FBbkI7QUFDRDs7QUFFRCxXQUFPcEUsMkJBQTJCLENBQUNDLEtBQUQsRUFBUTtBQUFDRSxNQUFBQSxHQUFHLEVBQUhBLEdBQUQ7QUFBTUQsTUFBQUEsS0FBSyxFQUFFbUMsUUFBYjtBQUF1QnZFLE1BQUFBLFNBQVMsRUFBRXdHO0FBQWxDLEtBQVIsQ0FBbEM7QUFDRDs7QUFFRCxTQUFPckUsS0FBUDtBQUNEOztBQUVELFNBQVNzRSxxQkFBVCxDQUErQkMsU0FBL0IsRUFBMENDLFNBQTFDLEVBQTRGO0FBQUEsTUFBdkNDLGdCQUF1Qyx1RUFBcEJDLDZCQUFvQjtBQUMxRixNQUFJQyxZQUFZLEdBQUdILFNBQVMsQ0FBQ0ksS0FBVixFQUFuQjtBQUVBLE1BQU1DLGFBQWEsR0FBR0wsU0FBUyxDQUFDckUsR0FBVixDQUFjLFVBQUEyRSxFQUFFO0FBQUEsV0FBSUEsRUFBRSxDQUFDQyxLQUFILElBQVlELEVBQUUsQ0FBQ0MsS0FBSCxDQUFTQyxJQUF6QjtBQUFBLEdBQWhCLEVBQStDQyxNQUEvQyxDQUFzRCxVQUFBM0UsQ0FBQztBQUFBLFdBQUlBLENBQUo7QUFBQSxHQUF2RCxDQUF0QjtBQUVBLE1BQU00RSxTQUFTLEdBQUdYLFNBQVMsQ0FBQ1UsTUFBVixDQUFpQixVQUFBRSxDQUFDO0FBQUEsV0FBSSxDQUFDTixhQUFhLENBQUNPLFFBQWQsQ0FBdUJELENBQUMsQ0FBQ0gsSUFBekIsQ0FBTDtBQUFBLEdBQWxCLENBQWxCO0FBQ0EsTUFBTUssWUFBWSxHQUFHUixhQUFhLENBQUNJLE1BQWQsQ0FBcUIsVUFBQUUsQ0FBQztBQUFBLFdBQUksQ0FBQ1osU0FBUyxDQUFDdkMsSUFBVixDQUFlLFVBQUFzRCxFQUFFO0FBQUEsYUFBSUEsRUFBRSxDQUFDTixJQUFILEtBQVlHLENBQWhCO0FBQUEsS0FBakIsQ0FBTDtBQUFBLEdBQXRCLENBQXJCLENBTjBGLENBUTFGOztBQUNBUixFQUFBQSxZQUFZLEdBQUdBLFlBQVksQ0FBQ00sTUFBYixDQUFvQixVQUFBSCxFQUFFO0FBQUEsV0FBSUEsRUFBRSxDQUFDQyxLQUFILElBQVksQ0FBQ00sWUFBWSxDQUFDRCxRQUFiLENBQXNCTixFQUFFLENBQUNDLEtBQUgsQ0FBU0MsSUFBL0IsQ0FBakI7QUFBQSxHQUF0QixDQUFmO0FBQ0FMLEVBQUFBLFlBQVksR0FBRyxDQUFDQSxZQUFZLENBQUNsRSxNQUFkLEdBQXVCLENBQUNnRSxnQkFBRCxDQUF2QixHQUE0Q0UsWUFBM0QsQ0FWMEYsQ0FZMUY7O0FBQ0FBLEVBQUFBLFlBQVksaURBQ1BBLFlBQVksQ0FBQ00sTUFBYixDQUFvQixVQUFBSCxFQUFFO0FBQUEsV0FBSUEsRUFBRSxDQUFDQyxLQUFQO0FBQUEsR0FBdEIsQ0FETyx1Q0FFUEcsU0FBUyxDQUFDL0UsR0FBVixDQUFjLFVBQUFvRixFQUFFO0FBQUEsMkNBQ2RkLGdCQURjO0FBRWpCTSxNQUFBQSxLQUFLLEVBQUVRO0FBRlU7QUFBQSxHQUFoQixDQUZPLEVBQVo7QUFRQSxTQUFPWixZQUFQO0FBQ0Q7O0FBRUQsU0FBU2EsMkJBQVQsQ0FBcUN0RixHQUFyQyxFQUEwQ2tELElBQTFDLEVBQWdEcUMsS0FBaEQsRUFBdURqQixTQUF2RCxFQUFrRTtBQUNoRSxNQUFJLENBQUNBLFNBQVMsQ0FBQ3RFLEdBQUQsQ0FBVCxDQUFlcUIsY0FBZixDQUE4QjZCLElBQTlCLENBQUwsRUFBMEM7QUFDeEMsV0FBT29CLFNBQVA7QUFDRDs7QUFFRCxNQUFJRyxZQUFZLEdBQUdILFNBQVMsQ0FBQ0ksS0FBVixFQUFuQjs7QUFFQSxNQUFJeEIsSUFBSSxLQUFLLE9BQVQsSUFBb0JxQyxLQUFLLEtBQUssSUFBOUIsSUFBc0NqQixTQUFTLENBQUMvRCxNQUFWLEdBQW1CLENBQTdELEVBQWdFO0FBQzlEO0FBQ0FrRSxJQUFBQSxZQUFZLENBQUNlLE1BQWIsQ0FBb0J4RixHQUFwQixFQUF5QixDQUF6QjtBQUNELEdBSEQsTUFHTyxJQUFJa0QsSUFBSixFQUFVO0FBQ2Z1QixJQUFBQSxZQUFZLEdBQUdILFNBQVMsQ0FBQ3JFLEdBQVYsQ0FBYyxVQUFDMkUsRUFBRCxFQUFLekUsQ0FBTDtBQUFBLGFBQVlBLENBQUMsS0FBS0gsR0FBTixtQ0FBZ0I0RSxFQUFoQiw0Q0FBcUIxQixJQUFyQixFQUE0QnFDLEtBQTVCLEtBQXFDWCxFQUFqRDtBQUFBLEtBQWQsQ0FBZjtBQUNEOztBQUVELFNBQU9ILFlBQVA7QUFDRDtBQUVEO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7OztBQUNPLFNBQVNnQiwyQkFBVCxDQUNMM0YsS0FESyxFQUVMMEIsTUFGSyxFQUdLO0FBQUE7O0FBQUEsTUFDSEssUUFERyxHQUMyQkwsTUFEM0IsQ0FDSEssUUFERztBQUFBLE1BQ083QixHQURQLEdBQzJCd0IsTUFEM0IsQ0FDT3hCLEdBRFA7QUFBQSxNQUNZa0QsSUFEWixHQUMyQjFCLE1BRDNCLENBQ1kwQixJQURaO0FBQUEsTUFDa0JxQyxLQURsQixHQUMyQi9ELE1BRDNCLENBQ2tCK0QsS0FEbEI7QUFBQSxNQUVIakIsU0FGRyxHQUVVekMsUUFBUSxDQUFDbkcsTUFGbkIsQ0FFSDRJLFNBRkcsRUFJVjtBQUNBOztBQUNBLE1BQU1DLGdCQUFnQixzREFDcEIxQyxRQUFRLENBQUM2RCxxQkFBVCxDQUErQjtBQUFDekQsSUFBQUEsTUFBTSxFQUFFO0FBQVQsR0FBL0IsQ0FEb0IscUZBQ3BCLHVCQUE4Q3FDLFNBRDFCLDJEQUNwQix1QkFBMEQsQ0FBMUQsQ0FEb0IseUVBQzRDRSw2QkFEbEU7QUFHQSxNQUFJQyxZQUFZLEdBQUdILFNBQVMsQ0FBQ0ksS0FBVixFQUFuQjs7QUFDQSxNQUFJLENBQUNKLFNBQVMsQ0FBQ3RFLEdBQUQsQ0FBVixJQUFtQkEsR0FBRyxLQUFLc0UsU0FBUyxDQUFDL0QsTUFBekMsRUFBaUQ7QUFDL0M7QUFDQWtFLElBQUFBLFlBQVksaURBQU9ILFNBQVAsSUFBa0JDLGdCQUFsQixFQUFaO0FBQ0Q7O0FBRUQsTUFBSXZFLEdBQUcsS0FBSyxLQUFSLElBQWlCa0QsSUFBSSxLQUFLLFFBQTlCLEVBQXdDO0FBQ3RDdUIsSUFBQUEsWUFBWSxHQUFHTCxxQkFBcUIsQ0FBQ21CLEtBQUQsRUFBUWpCLFNBQVIsRUFBbUJDLGdCQUFuQixDQUFwQztBQUNELEdBRkQsTUFFTztBQUNMRSxJQUFBQSxZQUFZLEdBQUdhLDJCQUEyQixDQUFDdEYsR0FBRCxFQUFNa0QsSUFBTixFQUFZcUMsS0FBWixFQUFtQmQsWUFBbkIsQ0FBMUM7QUFDRCxHQW5CUyxDQW9CVjs7O0FBQ0EsU0FBT3BCLHdCQUF3QixDQUFDdkQsS0FBRCxFQUFRO0FBQ3JDK0IsSUFBQUEsUUFBUSxFQUFSQSxRQURxQztBQUVyQzBCLElBQUFBLFNBQVMsRUFBRTtBQUFDZSxNQUFBQSxTQUFTLEVBQUVHO0FBQVo7QUFGMEIsR0FBUixDQUEvQjtBQUlEOztBQUVELFNBQVNrQiw2QkFBVCxDQUF1QzNELE9BQXZDLEVBQWdEL0MsWUFBaEQsRUFBOERjLEtBQTlELEVBQXFFSixNQUFyRSxFQUE2RTtBQUMzRSxNQUFNaUcsV0FBVyxHQUFHLG9DQUFlN0YsS0FBZixFQUFzQkosTUFBdEIsQ0FBcEI7QUFDQSxTQUFPaUcsV0FBVyxHQUNkLDJDQUFzQjVELE9BQXRCLEVBQStCNEQsV0FBL0IsRUFBNEMzRyxZQUE1QyxFQUEwRDtBQUN4RDRHLElBQUFBLGdCQUFnQixFQUFFO0FBRHNDLEdBQTFELENBRGMsR0FJZCxJQUpKO0FBS0Q7QUFFRDtBQUNBO0FBQ0E7QUFDQTtBQUNBOzs7QUFDTyxTQUFTbkMsd0JBQVQsQ0FDTDVELEtBREssRUFFTDBCLE1BRkssRUFRSztBQUFBLE1BQ0hLLFFBREcsR0FDb0JMLE1BRHBCLENBQ0hLLFFBREc7QUFBQSxNQUNPMEIsU0FEUCxHQUNvQi9CLE1BRHBCLENBQ08rQixTQURQO0FBQUEsTUFFSHRCLE1BRkcsR0FFT3NCLFNBRlAsQ0FFSHRCLE1BRkc7O0FBSVYsTUFBSSxDQUFDSixRQUFELElBQWEsQ0FBQy9CLEtBQUssQ0FBQzlCLFFBQU4sQ0FBZWlFLE1BQWYsQ0FBbEIsRUFBMEM7QUFDeEMsV0FBT25DLEtBQVA7QUFDRDs7QUFDRCxNQUFNRSxHQUFHLEdBQUdGLEtBQUssQ0FBQ3BDLE1BQU4sQ0FBYTRFLFNBQWIsQ0FBdUIsVUFBQVAsQ0FBQztBQUFBLFdBQUlBLENBQUMsQ0FBQ3hHLEVBQUYsS0FBU3NHLFFBQVEsQ0FBQ3RHLEVBQXRCO0FBQUEsR0FBeEIsQ0FBWjtBQUVBLE1BQUkyRyxRQUFRLEdBQUdMLFFBQVEsQ0FBQytCLGlCQUFULENBQTJCO0FBQUMzQixJQUFBQSxNQUFNLEVBQU5BO0FBQUQsR0FBM0IsQ0FBZixDQVRVLENBVVY7O0FBQ0EsTUFBSUMsUUFBUSxDQUFDNEQsYUFBVCxFQUFKLEVBQThCO0FBQzVCLFFBQU1DLFNBQVMsR0FBR0osNkJBQTZCLENBQzdDN0YsS0FBSyxDQUFDOUIsUUFBTixDQUFlaUUsTUFBZixDQUQ2QyxFQUU3Q25DLEtBQUssQ0FBQ2IsWUFGdUMsRUFHN0NpRCxRQUg2QyxFQUk3Q3BDLEtBQUssQ0FBQ0gsTUFKdUMsQ0FBL0MsQ0FENEIsQ0FPNUI7O0FBQ0EsUUFBSSxDQUFDb0csU0FBTCxFQUFnQjtBQUNkO0FBQ0E3RCxNQUFBQSxRQUFRLEdBQUcsSUFBSXBDLEtBQUssQ0FBQ2IsWUFBTixDQUFtQjRDLFFBQVEsQ0FBQ08sSUFBNUIsQ0FBSixDQUFzQztBQUFDSCxRQUFBQSxNQUFNLEVBQU5BLE1BQUQ7QUFBUzFHLFFBQUFBLEVBQUUsRUFBRXNHLFFBQVEsQ0FBQ3RHO0FBQXRCLE9BQXRDLENBQVg7QUFDRCxLQUhELE1BR087QUFDTDJHLE1BQUFBLFFBQVEsR0FBRzZELFNBQVg7QUFDRDtBQUNGOztBQUVEN0QsRUFBQUEsUUFBUSxHQUFHQSxRQUFRLENBQUMwQixpQkFBVCxDQUEyQjtBQUNwQ3BELElBQUFBLFNBQVMsRUFBRXFCLFFBQVEsQ0FBQ25HLE1BQVQsQ0FBZ0I4RSxTQURTO0FBRXBDd0YsSUFBQUEsY0FBYyxFQUFFO0FBRm9CLEdBQTNCLENBQVg7QUFLQTlELEVBQUFBLFFBQVEsQ0FBQytELGlCQUFULENBQTJCbkcsS0FBSyxDQUFDOUIsUUFBakM7O0FBaENVLDZCQWlDaUIsb0NBQW1Ca0UsUUFBbkIsRUFBNkJwQyxLQUE3QixFQUFvQzVCLFNBQXBDLENBakNqQjtBQUFBLE1BaUNIUCxTQWpDRyx3QkFpQ0hBLFNBakNHO0FBQUEsTUFpQ1FvQyxLQWpDUix3QkFpQ1FBLEtBakNSOztBQW1DVixTQUFPRiwyQkFBMkIsQ0FBQ0MsS0FBRCxFQUFRO0FBQUNuQyxJQUFBQSxTQUFTLEVBQVRBLFNBQUQ7QUFBWW9DLElBQUFBLEtBQUssRUFBTEEsS0FBWjtBQUFtQkMsSUFBQUEsR0FBRyxFQUFIQTtBQUFuQixHQUFSLENBQWxDO0FBQ0Q7O0FBRU0sU0FBU2tHLHFCQUFULENBQStCbkcsS0FBL0IsRUFBc0MvQixRQUF0QyxFQUFnRGlCLFlBQWhELEVBQXFFO0FBQzFFLE1BQUlpRCxRQUFRLEdBQUduQyxLQUFmOztBQUNBLE1BQUksQ0FBQ2tCLE1BQU0sQ0FBQ0MsSUFBUCxDQUFZbEQsUUFBWixFQUFzQnVDLE1BQTNCLEVBQW1DO0FBQ2pDO0FBQ0EsV0FBT1IsS0FBUDtBQUNEOztBQUNELE1BQUksQ0FBQ0EsS0FBSyxDQUFDckUsTUFBTixDQUFhdUcsTUFBbEIsRUFBMEI7QUFDeEI7QUFDQUMsSUFBQUEsUUFBUSxHQUFHbkMsS0FBSyxDQUFDNkQsaUJBQU4sQ0FBd0I7QUFBQzNCLE1BQUFBLE1BQU0sRUFBRWhCLE1BQU0sQ0FBQ0MsSUFBUCxDQUFZbEQsUUFBWixFQUFzQixDQUF0QjtBQUFULEtBQXhCLENBQVg7QUFDRDs7QUFDRCxNQUFNZ0UsT0FBTyxHQUFHaEUsUUFBUSxDQUFDa0UsUUFBUSxDQUFDeEcsTUFBVCxDQUFnQnVHLE1BQWpCLENBQXhCOztBQUNBLE1BQUksQ0FBQ0QsT0FBTCxFQUFjO0FBQ1osV0FBT2pDLEtBQVA7QUFDRCxHQWJ5RSxDQWUxRTs7O0FBQ0EsTUFBTW9HLE1BQU0sR0FDVixPQUFPbEgsWUFBWSxDQUFDaUQsUUFBUSxDQUFDRSxJQUFWLENBQVosQ0FBNEJnRSxxQkFBbkMsS0FBNkQsVUFBN0QsR0FDSW5ILFlBQVksQ0FBQ2lELFFBQVEsQ0FBQ0UsSUFBVixDQUFaLENBQTRCZ0UscUJBQTVCLENBQWtEcEUsT0FBbEQsRUFBMkQsRUFBM0QsQ0FESixHQUVJO0FBQUNzQixJQUFBQSxLQUFLLEVBQUU7QUFBUixHQUhOLENBaEIwRSxDQXFCMUU7O0FBQ0EsTUFBTUEsS0FBSyxHQUFHK0MsS0FBSyxDQUFDQyxPQUFOLENBQWNILE1BQWQsSUFBd0JBLE1BQXhCLEdBQWlDQSxNQUFNLENBQUM3QyxLQUFQLElBQWdCLEVBQS9EOztBQUVBLE1BQUlBLEtBQUssQ0FBQy9DLE1BQVYsRUFBa0I7QUFDaEIyQixJQUFBQSxRQUFRLEdBQUcsSUFBSWpELFlBQVksQ0FBQ2MsS0FBSyxDQUFDcUMsSUFBUCxDQUFoQixpQ0FDTmtCLEtBQUssQ0FBQyxDQUFELENBREM7QUFFVDlILE1BQUFBLEtBQUssRUFBRTBHLFFBQVEsQ0FBQ3hHLE1BQVQsQ0FBZ0JGLEtBRmQ7QUFHVHlHLE1BQUFBLE1BQU0sRUFBRUMsUUFBUSxDQUFDeEcsTUFBVCxDQUFnQnVHLE1BSGY7QUFJVHpCLE1BQUFBLFNBQVMsRUFBRSxJQUpGO0FBS1R3RixNQUFBQSxjQUFjLEVBQUU5RCxRQUFRLENBQUN4RyxNQUFULENBQWdCc0s7QUFMdkIsT0FBWDtBQVFBLFdBQU8sT0FBTzlELFFBQVEsQ0FBQ2dFLHFCQUFoQixLQUEwQyxVQUExQyxHQUNIaEUsUUFBUSxDQUFDZ0UscUJBQVQsQ0FBK0JsRSxPQUEvQixDQURHLEdBRUhFLFFBRko7QUFHRDs7QUFFRCxTQUFPQSxRQUFQO0FBQ0Q7QUFDRDtBQUNBO0FBQ0E7QUFDQTtBQUNBOzs7QUFDTyxTQUFTSyxzQkFBVCxDQUNMekMsS0FESyxFQUVMMEIsTUFGSyxFQUdLO0FBQUEsTUFDSEssUUFERyxHQUNrQkwsTUFEbEIsQ0FDSEssUUFERztBQUFBLE1BQ08wRSxPQURQLEdBQ2tCL0UsTUFEbEIsQ0FDTytFLE9BRFA7O0FBRVYsTUFBSSxDQUFDMUUsUUFBTCxFQUFlO0FBQ2IsV0FBTy9CLEtBQVA7QUFDRDs7QUFDRCxNQUFNMEcsS0FBSyxHQUFHM0UsUUFBUSxDQUFDdEcsRUFBdkI7QUFDQSxNQUFNeUUsR0FBRyxHQUFHRixLQUFLLENBQUNwQyxNQUFOLENBQWE0RSxTQUFiLENBQXVCLFVBQUFQLENBQUM7QUFBQSxXQUFJQSxDQUFDLENBQUN4RyxFQUFGLEtBQVNpTCxLQUFiO0FBQUEsR0FBeEIsQ0FBWjs7QUFFQSxNQUFJLENBQUMxRyxLQUFLLENBQUNiLFlBQU4sQ0FBbUJzSCxPQUFuQixDQUFMLEVBQWtDO0FBQ2hDRSxvQkFBUUMsS0FBUixXQUFpQkgsT0FBakI7O0FBQ0EsV0FBT3pHLEtBQVA7QUFDRDs7QUFDRCxNQUFJb0MsUUFBUSxHQUFHLElBQUlwQyxLQUFLLENBQUNiLFlBQU4sQ0FBbUJzSCxPQUFuQixDQUFKLENBQWdDO0FBQzdDO0FBQ0EvSyxJQUFBQSxLQUFLLEVBQUVxRyxRQUFRLENBQUNuRyxNQUFULENBQWdCRixLQUZzQjtBQUc3Q3dLLElBQUFBLGNBQWMsRUFBRW5FLFFBQVEsQ0FBQ25HLE1BQVQsQ0FBZ0JzSyxjQUhhO0FBSTdDL0QsSUFBQUEsTUFBTSxFQUFFSixRQUFRLENBQUNuRyxNQUFULENBQWdCdUc7QUFKcUIsR0FBaEMsQ0FBZjs7QUFPQSxNQUFJLENBQUNKLFFBQVEsQ0FBQ08sSUFBZCxFQUFvQjtBQUNsQjtBQUNBRixJQUFBQSxRQUFRLEdBQUdnRSxxQkFBcUIsQ0FBQ2hFLFFBQUQsRUFBV3BDLEtBQUssQ0FBQzlCLFFBQWpCLEVBQTJCOEIsS0FBSyxDQUFDYixZQUFqQyxDQUFoQztBQUNELEdBSEQsTUFHTztBQUNMO0FBQ0E7QUFDQTtBQUNBaUQsSUFBQUEsUUFBUSxDQUFDeUUsbUJBQVQsQ0FBNkI5RSxRQUFRLENBQUNuRyxNQUF0QyxFQUE4Q21HLFFBQVEsQ0FBQytFLGlCQUF2RDtBQUNBMUUsSUFBQUEsUUFBUSxDQUFDK0QsaUJBQVQsQ0FBMkJuRyxLQUFLLENBQUM5QixRQUFqQztBQUNEOztBQTVCUyxNQThCSFUsT0E5QkcsR0E4Qm1Cb0IsS0E5Qm5CLENBOEJIcEIsT0E5Qkc7QUFBQSxNQThCTUQsU0E5Qk4sR0E4Qm1CcUIsS0E5Qm5CLENBOEJNckIsU0E5Qk47O0FBZ0NWLE1BQUk2QixRQUFRLG1DQUNQUixLQURPO0FBRVZwQixJQUFBQSxPQUFPLEVBQUVtRCxRQUFRLENBQUNnRixjQUFULENBQXdCbkksT0FBeEIsSUFBbUNSLFNBQW5DLEdBQStDUSxPQUY5QztBQUdWRCxJQUFBQSxTQUFTLEVBQUVvRCxRQUFRLENBQUNnRixjQUFULENBQXdCcEksU0FBeEIsSUFBcUNQLFNBQXJDLEdBQWlETztBQUhsRCxJQUFaOztBQWhDVSw2QkFzQ2lCLG9DQUFtQnlELFFBQW5CLEVBQTZCNUIsUUFBN0IsQ0F0Q2pCO0FBQUEsTUFzQ0gzQyxTQXRDRyx3QkFzQ0hBLFNBdENHO0FBQUEsTUFzQ1FvQyxLQXRDUix3QkFzQ1FBLEtBdENSOztBQXVDVk8sRUFBQUEsUUFBUSxHQUFHVCwyQkFBMkIsQ0FBQ1MsUUFBRCxFQUFXO0FBQUMzQyxJQUFBQSxTQUFTLEVBQVRBLFNBQUQ7QUFBWW9DLElBQUFBLEtBQUssRUFBTEEsS0FBWjtBQUFtQkMsSUFBQUEsR0FBRyxFQUFIQTtBQUFuQixHQUFYLENBQXRDOztBQUVBLE1BQUlELEtBQUssQ0FBQ3JFLE1BQU4sQ0FBYStFLFNBQWIsQ0FBdUJoRixPQUF2QixJQUFrQ29HLFFBQVEsQ0FBQ25HLE1BQVQsQ0FBZ0IrRSxTQUFoQixDQUEwQmhGLE9BQWhFLEVBQXlFO0FBQ3ZFNkUsSUFBQUEsUUFBUSxHQUFHSSxxQkFBcUIsQ0FBQ0osUUFBRCxDQUFoQztBQUNELEdBM0NTLENBNkNWOzs7QUFDQSxNQUFJUixLQUFLLENBQUNoQixTQUFOLENBQWdCeUIsTUFBcEIsRUFBNEI7QUFDMUJELElBQUFBLFFBQVEsbUNBQ0hBLFFBREc7QUFFTnhCLE1BQUFBLFNBQVMsRUFBRXdCLFFBQVEsQ0FBQ3hCLFNBQVQsQ0FBbUJtQixHQUFuQixDQUF1QixVQUFBNkcsUUFBUSxFQUFJO0FBQUEsK0JBQ0dBLFFBQVEsQ0FBQ3BKLE1BRFo7QUFBQSxZQUM1QnFKLFdBRDRCLG9CQUNwQ1AsS0FEb0M7QUFBQSxZQUNaUSxXQURZLGdFQUNwQ1IsS0FEb0M7QUFFNUMsZUFBT0EsS0FBSyxJQUFJTSxRQUFRLENBQUNwSixNQUFsQixtQ0FFRW9KLFFBRkY7QUFHRHBKLFVBQUFBLE1BQU0sa0NBQ0RzSixXQURDLDRDQUVIakgsS0FBSyxDQUFDeEUsRUFGSCxFQUVRd0wsV0FGUjtBQUhMLGFBUUhELFFBUko7QUFTRCxPQVhVO0FBRkwsTUFBUjtBQWVELEdBOURTLENBZ0VWOzs7QUFDQXhHLEVBQUFBLFFBQVEsbUNBQ0hBLFFBREc7QUFFTnpDLElBQUFBLFVBQVUsRUFBRXlDLFFBQVEsQ0FBQ3pDLFVBQVQsQ0FBb0JvQyxHQUFwQixDQUF3QixVQUFBZ0gsT0FBTztBQUFBLGFBQ3pDQSxPQUFPLEtBQUtwRixRQUFRLENBQUN0RyxFQUFyQixHQUEwQjJHLFFBQVEsQ0FBQzNHLEVBQW5DLEdBQXdDMEwsT0FEQztBQUFBLEtBQS9CO0FBRk4sSUFBUjtBQU9BLFNBQU8zRyxRQUFQO0FBQ0Q7QUFFRDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7OztBQUNPLFNBQVM4QywrQkFBVCxDQUNMdEQsS0FESyxFQUVMMEIsTUFGSyxFQUdLO0FBQUEsTUFDSEssUUFERyxHQUM2QkwsTUFEN0IsQ0FDSEssUUFERztBQUFBLE1BQ08wQixTQURQLEdBQzZCL0IsTUFEN0IsQ0FDTytCLFNBRFA7QUFBQSxNQUNrQlAsT0FEbEIsR0FDNkJ4QixNQUQ3QixDQUNrQndCLE9BRGxCOztBQUVWLE1BQUksQ0FBQ25CLFFBQVEsQ0FBQ25HLE1BQVQsQ0FBZ0J1RyxNQUFyQixFQUE2QjtBQUMzQixXQUFPbkMsS0FBUDtBQUNEOztBQUNELE1BQU1rQyxPQUFPLEdBQUdsQyxLQUFLLENBQUM5QixRQUFOLENBQWU2RCxRQUFRLENBQUNuRyxNQUFULENBQWdCdUcsTUFBL0IsQ0FBaEI7QUFFQSxNQUFNakMsR0FBRyxHQUFHRixLQUFLLENBQUNwQyxNQUFOLENBQWE0RSxTQUFiLENBQXVCLFVBQUFQLENBQUM7QUFBQSxXQUFJQSxDQUFDLENBQUN4RyxFQUFGLEtBQVNzRyxRQUFRLENBQUN0RyxFQUF0QjtBQUFBLEdBQXhCLENBQVo7QUFDQSxNQUFNMkcsUUFBUSxHQUFHTCxRQUFRLENBQUMrQixpQkFBVCxDQUEyQkwsU0FBM0IsQ0FBakI7QUFFQXJCLEVBQUFBLFFBQVEsQ0FBQ2dGLHdCQUFULENBQWtDbEYsT0FBbEMsRUFBMkNnQixPQUEzQztBQUVBLE1BQU1jLFlBQVksR0FBR2hFLEtBQUssQ0FBQ25DLFNBQU4sQ0FBZ0JxQyxHQUFoQixDQUFyQjs7QUFaVSw2QkFhaUIsb0NBQW1Ca0MsUUFBbkIsRUFBNkJwQyxLQUE3QixFQUFvQ2dFLFlBQXBDLENBYmpCO0FBQUEsTUFhSG5HLFNBYkcsd0JBYUhBLFNBYkc7QUFBQSxNQWFRb0MsS0FiUix3QkFhUUEsS0FiUjs7QUFlVixTQUFPRiwyQkFBMkIsQ0FBQ0MsS0FBRCxFQUFRO0FBQUNuQyxJQUFBQSxTQUFTLEVBQVRBLFNBQUQ7QUFBWW9DLElBQUFBLEtBQUssRUFBTEEsS0FBWjtBQUFtQkMsSUFBQUEsR0FBRyxFQUFIQTtBQUFuQixHQUFSLENBQWxDO0FBQ0Q7QUFFRDtBQUNBO0FBQ0E7QUFDQTtBQUNBOzs7QUFDTyxTQUFTNkMsMkJBQVQsQ0FDTC9DLEtBREssRUFFTDBCLE1BRkssRUFHSztBQUFBLE1BQ0hLLFFBREcsR0FDU0wsTUFEVCxDQUNISyxRQURHO0FBRVYsTUFBTTdCLEdBQUcsR0FBR0YsS0FBSyxDQUFDcEMsTUFBTixDQUFhNEUsU0FBYixDQUF1QixVQUFBUCxDQUFDO0FBQUEsV0FBSUEsQ0FBQyxDQUFDeEcsRUFBRixLQUFTc0csUUFBUSxDQUFDdEcsRUFBdEI7QUFBQSxHQUF4QixDQUFaO0FBQ0EsTUFBTStILEtBQUssR0FBR3JDLE1BQU0sQ0FBQ0MsSUFBUCxDQUFZTSxNQUFNLENBQUMyRixZQUFuQixDQUFkOztBQUNBLE1BQU1BLFlBQVksbUNBQ2J0RixRQUFRLENBQUNuRyxNQUFULENBQWdCa0gsU0FESCxHQUVicEIsTUFBTSxDQUFDMkYsWUFGTSxDQUFsQjs7QUFLQSxNQUFNakYsUUFBUSxHQUFHTCxRQUFRLENBQUMrQixpQkFBVCxDQUEyQjtBQUFDaEIsSUFBQUEsU0FBUyxFQUFFdUU7QUFBWixHQUEzQixDQUFqQjs7QUFFQSxNQUFJakYsUUFBUSxDQUFDMkIsd0JBQVQsQ0FBa0NQLEtBQWxDLENBQUosRUFBOEM7QUFDNUMsUUFBTVEsWUFBWSxHQUFHaEUsS0FBSyxDQUFDbkMsU0FBTixDQUFnQnFDLEdBQWhCLENBQXJCOztBQUQ0QywrQkFFakIsb0NBQW1Ca0MsUUFBbkIsRUFBNkJwQyxLQUE3QixFQUFvQ2dFLFlBQXBDLENBRmlCO0FBQUEsUUFFckNuRyxTQUZxQyx3QkFFckNBLFNBRnFDO0FBQUEsUUFFMUJvQyxLQUYwQix3QkFFMUJBLEtBRjBCOztBQUc1QyxXQUFPRiwyQkFBMkIsQ0FBQ0MsS0FBRCxFQUFRO0FBQUNuQyxNQUFBQSxTQUFTLEVBQVRBLFNBQUQ7QUFBWW9DLE1BQUFBLEtBQUssRUFBTEEsS0FBWjtBQUFtQkMsTUFBQUEsR0FBRyxFQUFIQTtBQUFuQixLQUFSLENBQWxDO0FBQ0Q7O0FBRUQsU0FBT0gsMkJBQTJCLENBQUNDLEtBQUQsRUFBUTtBQUFDQyxJQUFBQSxLQUFLLEVBQUVtQyxRQUFSO0FBQWtCbEMsSUFBQUEsR0FBRyxFQUFIQTtBQUFsQixHQUFSLENBQWxDO0FBQ0Q7QUFFRDtBQUNBO0FBQ0E7QUFDQTtBQUNBOzs7QUFDTyxTQUFTb0gsNkJBQVQsQ0FDTHRILEtBREssRUFFTDBCLE1BRkssRUFHSztBQUNWLFNBQU82RixnQkFBZ0IsQ0FBQ3ZILEtBQUQsRUFBUTBCLE1BQVIsQ0FBdkI7QUFDRDtBQUVEO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7OztBQUNPLFNBQVM4RiwrQkFBVCxDQUNMeEgsS0FESyxTQUdLO0FBQUEsTUFEVHZFLEVBQ1MsU0FEVEEsRUFDUztBQUFBLE1BRExnTSxlQUNLLFNBRExBLGVBQ0s7QUFDVix5Q0FDS3pILEtBREw7QUFFRWhDLElBQUFBLE9BQU8sRUFBRWdDLEtBQUssQ0FBQ2hDLE9BQU4sQ0FBY21DLEdBQWQsQ0FBa0IsVUFBQWdGLENBQUM7QUFBQSxhQUMxQkEsQ0FBQyxDQUFDMUosRUFBRixLQUFTQSxFQUFULG1DQUVTMEosQ0FGVDtBQUdNc0MsUUFBQUEsZUFBZSxFQUFmQTtBQUhOLFdBS0l0QyxDQU5zQjtBQUFBLEtBQW5CO0FBRlg7QUFXRDtBQUNEO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7OztBQUNPLFNBQVNvQyxnQkFBVCxDQUNMdkgsS0FESyxFQUVMMEIsTUFGSyxFQUdLO0FBQUE7O0FBQUEsTUFDSHhCLEdBREcsR0FDaUN3QixNQURqQyxDQUNIeEIsR0FERztBQUFBLE1BQ0VrRCxJQURGLEdBQ2lDMUIsTUFEakMsQ0FDRTBCLElBREY7QUFBQSxNQUNRcUMsS0FEUixHQUNpQy9ELE1BRGpDLENBQ1ErRCxLQURSO0FBQUEsMkJBQ2lDL0QsTUFEakMsQ0FDZWdHLFVBRGY7QUFBQSxNQUNlQSxVQURmLG1DQUM0QixDQUQ1QjtBQUVWLE1BQU1DLFNBQVMsR0FBRzNILEtBQUssQ0FBQ2hDLE9BQU4sQ0FBY2tDLEdBQWQsQ0FBbEI7O0FBRUEsTUFBSSxDQUFDeUgsU0FBTCxFQUFnQjtBQUNkaEIsb0JBQVFDLEtBQVIsbUJBQXlCMUcsR0FBekI7O0FBQ0EsV0FBT0YsS0FBUDtBQUNEOztBQUNELE1BQUk0SCxTQUFTLEdBQUcsZ0JBQUksQ0FBQ3hFLElBQUQsQ0FBSixFQUFZcUMsS0FBWixFQUFtQmtDLFNBQW5CLENBQWhCO0FBQ0EsTUFBSW5ILFFBQVEsR0FBR1IsS0FBZjtBQVRVLG1CQVdPNEgsU0FYUDtBQUFBLE1BV0h6RixNQVhHLGNBV0hBLE1BWEcsRUFhVjs7QUFDQSxNQUFJMEYsVUFBVSxHQUFHLG9CQUFRMUYsTUFBUixDQUFqQjs7QUFFQSxVQUFRaUIsSUFBUjtBQUNFO0FBQ0E7QUFDQTtBQUNBLFNBQUswRSw0QkFBcUIzRixNQUExQjtBQUNFO0FBQ0F5RixNQUFBQSxTQUFTLEdBQUcsK0JBQW1CekYsTUFBbkIsQ0FBWjtBQUNBOztBQUVGLFNBQUsyRiw0QkFBcUI5QyxJQUExQjtBQUNFO0FBQ0E7QUFDQTtBQUNBLFVBQU0rQyxTQUFTLEdBQUdILFNBQVMsQ0FBQ3pGLE1BQVYsQ0FBaUJ1RixVQUFqQixDQUFsQjs7QUFKRixrQ0FLdUQsaUNBQ25ERSxTQURtRCxFQUVuRDVILEtBQUssQ0FBQzlCLFFBQU4sQ0FBZTZKLFNBQWYsQ0FGbUQsRUFHbkR0QyxLQUhtRCxFQUluRGlDLFVBSm1ELEVBS25EO0FBQUNNLFFBQUFBLFdBQVcsRUFBRTtBQUFkLE9BTG1ELENBTHZEO0FBQUEsVUFLaUJDLGFBTGpCLHlCQUtTaEQsTUFMVDtBQUFBLFVBS3lDaUQsVUFMekMseUJBS2dDaEcsT0FMaEM7O0FBWUUsVUFBSSxDQUFDK0YsYUFBTCxFQUFvQjtBQUNsQixlQUFPakksS0FBUDtBQUNEOztBQUVENEgsTUFBQUEsU0FBUyxHQUFHSyxhQUFaOztBQUVBLFVBQUlMLFNBQVMsQ0FBQ08sR0FBZCxFQUFtQjtBQUNqQlAsUUFBQUEsU0FBUyxHQUFHLDZCQUFpQkEsU0FBakIsRUFBNEI1SCxLQUFLLENBQUNoQyxPQUFsQyxDQUFaO0FBQ0E0SixRQUFBQSxTQUFTLEdBQUcsNkJBQWlCQSxTQUFqQixFQUE0QjVILEtBQUssQ0FBQ2hDLE9BQWxDLENBQVo7QUFDRDs7QUFFRHdDLE1BQUFBLFFBQVEsR0FBRyxnQkFBSSxDQUFDLFVBQUQsRUFBYXVILFNBQWIsQ0FBSixFQUE2QkcsVUFBN0IsRUFBeUNsSSxLQUF6QyxDQUFYLENBdkJGLENBeUJFOztBQUNBOztBQUNGLFNBQUs4SCw0QkFBcUJYLE9BQTFCO0FBQ0U7QUFDQTtBQUNBO0FBQ0E7QUFDQSxVQUFNaUIsaUJBQWlCLEdBQUcseUJBQUlSLFNBQVMsQ0FBQ1QsT0FBZCxFQUF1QlEsU0FBUyxDQUFDUixPQUFqQyxDQUExQjtBQUVBLFVBQU1rQixZQUFZLEdBQUcseUJBQ25CRCxpQkFBaUIsQ0FDZGpJLEdBREgsQ0FDTyxVQUFBbUksR0FBRztBQUFBLGVBQ04seUJBQ0V0SSxLQUFLLENBQUNwQyxNQUFOLENBQWFvRSxJQUFiLENBQWtCLFVBQUFDLENBQUM7QUFBQSxpQkFBSUEsQ0FBQyxDQUFDeEcsRUFBRixLQUFTNk0sR0FBYjtBQUFBLFNBQW5CLENBREYsRUFFRSxDQUFDLFFBQUQsRUFBVyxRQUFYLENBRkYsQ0FETTtBQUFBLE9BRFYsRUFPR3JELE1BUEgsQ0FPVSxVQUFBM0UsQ0FBQztBQUFBLGVBQUlBLENBQUo7QUFBQSxPQVBYLENBRG1CLENBQXJCLENBUEYsQ0FrQkU7O0FBQ0F1SCxNQUFBQSxVQUFVLEdBQUdRLFlBQWIsQ0FuQkYsQ0FxQkU7O0FBQ0EsVUFBTUUsVUFBVSxHQUFHLCtDQUNqQlgsU0FBUyxDQUFDVCxPQURPLHVEQUNqQixtQkFDSWhILEdBREosQ0FDUSxVQUFBbUksR0FBRztBQUFBLGVBQ1AseUJBQ0V0SSxLQUFLLENBQUNwQyxNQUFOLENBQWFvRSxJQUFiLENBQWtCLFVBQUFDLENBQUM7QUFBQSxpQkFBSUEsQ0FBQyxDQUFDeEcsRUFBRixLQUFTNk0sR0FBYjtBQUFBLFNBQW5CLENBREYsRUFFRSxDQUFDLFFBQUQsRUFBVyxRQUFYLENBRkYsQ0FETztBQUFBLE9BRFgsRUFPR3JELE1BUEgsQ0FPVSxVQUFBM0UsQ0FBQztBQUFBLGVBQUlBLENBQUo7QUFBQSxPQVBYLENBRGlCLENBQW5CO0FBV0FzSCxNQUFBQSxTQUFTLG1DQUNKQSxTQURJO0FBRVB6RixRQUFBQSxNQUFNLEVBQUVvRztBQUZELFFBQVQ7QUFLQTs7QUFDRjtBQUNFO0FBNUVKOztBQStFQSxNQUFNQyxjQUFjLEdBQUd4SSxLQUFLLENBQUNoQyxPQUFOLENBQWNnRSxJQUFkLENBQW1CLFVBQUFtRCxDQUFDO0FBQUEsV0FBSUEsQ0FBQyxDQUFDc0QsSUFBRixLQUFXQyw2QkFBa0JDLFFBQWpDO0FBQUEsR0FBcEIsQ0FBdkI7O0FBRUEsTUFBSUgsY0FBYyxJQUFJQSxjQUFjLENBQUMvTSxFQUFmLEtBQXNCbU0sU0FBUyxDQUFDbk0sRUFBdEQsRUFBMEQ7QUFDeEQ7QUFDQW1NLElBQUFBLFNBQVMsQ0FBQ2EsSUFBVixHQUFpQkMsNkJBQWtCRSxJQUFuQztBQUNELEdBcEdTLENBc0dWOzs7QUFDQXBJLEVBQUFBLFFBQVEsR0FBRyxnQkFBSSxDQUFDLFNBQUQsRUFBWU4sR0FBWixDQUFKLEVBQXNCMEgsU0FBdEIsRUFBaUNwSCxRQUFqQyxDQUFYLENBdkdVLENBeUdWO0FBQ0E7QUFDQTs7QUFDQSxNQUFNcUksa0JBQWtCLEdBQUdDLG1DQUE0QjFGLElBQTVCLElBQ3ZCLENBQUN5RSxVQUFVLENBQUNILFVBQUQsQ0FBWCxDQUR1QixHQUV2QkcsVUFGSixDQTVHVSxDQWdIVjs7QUFDQSxNQUFNa0IsZ0JBQWdCLEdBQUcsbUNBQ3ZCRixrQkFEdUIsRUFFdkJySSxRQUFRLENBQUN0QyxRQUZjLEVBR3ZCc0MsUUFBUSxDQUFDeEMsT0FIYyxFQUl2QndDLFFBQVEsQ0FBQzVDLE1BSmMsQ0FBekI7QUFPQTRDLEVBQUFBLFFBQVEsR0FBRyxnQkFBSSxDQUFDLFVBQUQsQ0FBSixFQUFrQnVJLGdCQUFsQixFQUFvQ3ZJLFFBQXBDLENBQVgsQ0F4SFUsQ0F5SFY7QUFDQTs7QUFDQUEsRUFBQUEsUUFBUSxHQUFHd0ksd0JBQXdCLENBQUN4SSxRQUFELEVBQVdxSSxrQkFBWCxFQUErQmpCLFNBQS9CLENBQW5DO0FBRUEsU0FBT3BILFFBQVA7QUFDRDtBQUVEO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7OztBQUNPLElBQU15SSxvQkFBb0IsR0FBRyxTQUF2QkEsb0JBQXVCLENBQ2xDakosS0FEa0MsU0FHckI7QUFBQSxNQURaRSxHQUNZLFNBRFpBLEdBQ1k7QUFBQSxNQURQZ0osT0FDTyxTQURQQSxPQUNPO0FBQUEsK0JBREV4QixVQUNGO0FBQUEsTUFERUEsVUFDRixpQ0FEZSxDQUNmOztBQUNiLE1BQUlFLFNBQVMsbUNBQU81SCxLQUFLLENBQUNoQyxPQUFOLENBQWNrQyxHQUFkLENBQVAsR0FBOEJnSixPQUE5QixDQUFiOztBQUNBLE1BQU05RixJQUFJLEdBQUdqQyxNQUFNLENBQUNDLElBQVAsQ0FBWThILE9BQVosRUFBcUIsQ0FBckIsQ0FBYjs7QUFDQSxNQUFJOUYsSUFBSSxLQUFLLE9BQWIsRUFBc0I7QUFDcEIsUUFBTStGLFFBQVEsR0FBRyxxQ0FBeUJ2QixTQUF6QixDQUFqQixDQURvQixDQUVwQjs7QUFDQSxRQUFJdUIsUUFBSixFQUFjO0FBQ1p2QixNQUFBQSxTQUFTLGlEQUNKQSxTQURJLEdBRUosMERBQWtCQSxTQUFsQjtBQUE2QnVCLFFBQUFBLFFBQVEsRUFBUkE7QUFBN0IsVUFBd0NuSixLQUFLLENBQUM5QixRQUFOLENBQWUwSixTQUFTLENBQUN6RixNQUFWLENBQWlCdUYsVUFBakIsQ0FBZixDQUF4QyxDQUZJO0FBR1B5QixRQUFBQSxRQUFRLEVBQVJBO0FBSE8sUUFBVDtBQUtEO0FBQ0Y7O0FBRUQseUNBQ0tuSixLQURMO0FBRUVoQyxJQUFBQSxPQUFPLEVBQUVnQyxLQUFLLENBQUNoQyxPQUFOLENBQWNtQyxHQUFkLENBQWtCLFVBQUNnRixDQUFELEVBQUk5RSxDQUFKO0FBQUEsYUFBV0EsQ0FBQyxLQUFLSCxHQUFOLEdBQVkwSCxTQUFaLEdBQXdCekMsQ0FBbkM7QUFBQSxLQUFsQjtBQUZYO0FBSUQsQ0F0Qk07QUF3QlA7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7Ozs7QUFDTyxJQUFNaUUsZ0JBQWdCLEdBQUcsU0FBbkJBLGdCQUFtQixDQUM5QnBKLEtBRDhCLEVBRTlCMEIsTUFGOEI7QUFBQSxTQUk5QixDQUFDQSxNQUFNLENBQUNTLE1BQVIsR0FDSW5DLEtBREosbUNBR1NBLEtBSFQ7QUFJTWhDLElBQUFBLE9BQU8sZ0RBQU1nQyxLQUFLLENBQUNoQyxPQUFaLElBQXFCLDZCQUFpQjtBQUFDbUUsTUFBQUEsTUFBTSxFQUFFVCxNQUFNLENBQUNTLE1BQWhCO0FBQXdCMUcsTUFBQUEsRUFBRSxFQUFFaUcsTUFBTSxDQUFDakc7QUFBbkMsS0FBakIsQ0FBckI7QUFKYixJQUo4QjtBQUFBLENBQXpCO0FBV1A7QUFDQTtBQUNBO0FBQ0E7Ozs7O0FBQ08sSUFBTTROLHlCQUF5QixHQUFHLFNBQTVCQSx5QkFBNEIsQ0FDdkNySixLQUR1QyxTQUcxQjtBQUFBLE1BRForQixRQUNZLFNBRFpBLFFBQ1k7QUFBQSxNQURGcUIsSUFDRSxTQURGQSxJQUNFO0FBQUEsTUFESUssU0FDSixTQURJQSxTQUNKO0FBQ2IsTUFBTTZGLFlBQVksR0FBR3ZILFFBQVEsQ0FBQ25HLE1BQVQsQ0FBZ0JrSCxTQUFoQixDQUEwQk0sSUFBMUIsQ0FBckI7QUFDQSxNQUFNaEIsUUFBUSxHQUFHTCxRQUFRLENBQUN3SCxrQkFBVCxDQUE0Qm5HLElBQTVCLEVBQWtDSyxTQUFsQyxDQUFqQjtBQUNBLE1BQU00RCxZQUFZLEdBQUdqRixRQUFRLENBQUN4RyxNQUFULENBQWdCa0gsU0FBaEIsQ0FBMEJNLElBQTFCLENBQXJCOztBQUNBLE1BQUlrRyxZQUFZLEtBQUtqQyxZQUFyQixFQUFtQztBQUNqQyxXQUFPdEUsMkJBQTJCLENBQUMvQyxLQUFELEVBQVE7QUFDeEMrQixNQUFBQSxRQUFRLEVBQVJBLFFBRHdDO0FBRXhDc0YsTUFBQUEsWUFBWSx1Q0FDVGpFLElBRFMsRUFDRmlFLFlBREU7QUFGNEIsS0FBUixDQUFsQztBQU1EOztBQUNELHlDQUNLckgsS0FETDtBQUVFcEMsSUFBQUEsTUFBTSxFQUFFb0MsS0FBSyxDQUFDcEMsTUFBTixDQUFhdUMsR0FBYixDQUFpQixVQUFBOEIsQ0FBQztBQUFBLGFBQUtBLENBQUMsQ0FBQ3hHLEVBQUYsS0FBU3NHLFFBQVEsQ0FBQ3RHLEVBQWxCLEdBQXVCMkcsUUFBdkIsR0FBa0NILENBQXZDO0FBQUEsS0FBbEI7QUFGVjtBQUlELENBbkJNO0FBcUJQO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7Ozs7O0FBQ08sSUFBTXVILDRCQUE0QixHQUFHLFNBQS9CQSw0QkFBK0IsQ0FDMUN4SixLQUQwQyxFQUUxQzBCLE1BRjBDO0FBQUEseUNBSXZDMUIsS0FKdUM7QUFLMUNoQyxJQUFBQSxPQUFPLEVBQUVnQyxLQUFLLENBQUNoQyxPQUFOLENBQWNtQyxHQUFkLENBQWtCLFVBQUNnRixDQUFELEVBQUk5RSxDQUFKO0FBQUEsYUFBV0EsQ0FBQyxLQUFLcUIsTUFBTSxDQUFDeEIsR0FBYixtQ0FBdUJpRixDQUF2QjtBQUEwQnhJLFFBQUFBLFdBQVcsRUFBRSxDQUFDd0ksQ0FBQyxDQUFDeEk7QUFBMUMsV0FBeUR3SSxDQUFwRTtBQUFBLEtBQWxCO0FBTGlDO0FBQUEsQ0FBckM7QUFRUDtBQUNBO0FBQ0E7QUFDQTs7Ozs7QUFDTyxJQUFNc0UsMkJBQTJCLEdBQUcsU0FBOUJBLDJCQUE4QixDQUN6Q3pKLEtBRHlDLEVBRXpDMEIsTUFGeUM7QUFBQSx5Q0FJdEMxQixLQUpzQztBQUt6Q1gsSUFBQUEsZUFBZSxrQ0FDVlcsS0FBSyxDQUFDWCxlQURJO0FBRWIxQyxNQUFBQSxXQUFXLEVBQUUsQ0FBQ3FELEtBQUssQ0FBQ1gsZUFBTixDQUFzQjFDO0FBRnZCO0FBTDBCO0FBQUEsQ0FBcEM7QUFXUDtBQUNBO0FBQ0E7QUFDQTtBQUNBOzs7OztBQUNPLElBQU0rTSxrQ0FBa0MsR0FBRyxTQUFyQ0Esa0NBQXFDLENBQ2hEMUosS0FEZ0QsRUFFaEQwQixNQUZnRDtBQUFBLHlDQUk3QzFCLEtBSjZDO0FBS2hEWCxJQUFBQSxlQUFlLGtDQUNWVyxLQUFLLENBQUNYLGVBREk7QUFFYnRDLE1BQUFBLFdBQVcsRUFBRSxDQUFDaUQsS0FBSyxDQUFDWCxlQUFOLENBQXNCdEM7QUFGdkI7QUFMaUM7QUFBQSxDQUEzQztBQVdQO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7Ozs7O0FBQ08sSUFBTTRNLGlDQUFpQyxHQUFHLFNBQXBDQSxpQ0FBb0MsQ0FDL0MzSixLQUQrQyxFQUUvQzBCLE1BRitDO0FBQUEseUNBSTVDMUIsS0FKNEM7QUFLL0NoQyxJQUFBQSxPQUFPLEVBQUVnQyxLQUFLLENBQUNoQyxPQUFOLENBQWNtQyxHQUFkLENBQWtCLFVBQUNnRixDQUFELEVBQUk5RSxDQUFKO0FBQUEsYUFBV0EsQ0FBQyxLQUFLcUIsTUFBTSxDQUFDeEIsR0FBYixtQ0FBdUJpRixDQUF2QjtBQUEwQnpJLFFBQUFBLEtBQUssRUFBRWdGLE1BQU0sQ0FBQ2hGO0FBQXhDLFdBQWlEeUksQ0FBNUQ7QUFBQSxLQUFsQjtBQUxzQztBQUFBLENBQTFDO0FBUVA7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOzs7OztBQUNPLElBQU15RSw0QkFBNEIsR0FBRyxTQUEvQkEsNEJBQStCLENBQzFDNUosS0FEMEM7QUFBQSxNQUV6Q3lGLEtBRnlDLFNBRXpDQSxLQUZ5QztBQUFBLHlDQUl2Q3pGLEtBSnVDO0FBSzFDWCxJQUFBQSxlQUFlLGtDQUNWVyxLQUFLLENBQUNYLGVBREk7QUFFYjVDLE1BQUFBLFdBQVcsRUFBRWdKO0FBRkE7QUFMMkI7QUFBQSxDQUFyQztBQVdQO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7Ozs7QUFDTyxJQUFNb0UsZ0NBQWdDLEdBQUcsU0FBbkNBLGdDQUFtQyxDQUM5QzdKLEtBRDhDLFNBR2pDO0FBQUEsTUFEWnRELEtBQ1ksU0FEWkEsS0FDWTtBQUNiLHlDQUNLc0QsS0FETDtBQUVFWCxJQUFBQSxlQUFlLGtDQUNWVyxLQUFLLENBQUNYLGVBREk7QUFFYjNDLE1BQUFBLEtBQUssRUFBTEE7QUFGYTtBQUZqQjtBQU9ELENBWE07QUFhUDtBQUNBO0FBQ0E7QUFDQTtBQUNBOzs7OztBQUNPLElBQU1vTixvQkFBb0IsR0FBRyxTQUF2QkEsb0JBQXVCLENBQ2xDOUosS0FEa0MsRUFFbEMwQixNQUZrQyxFQUcvQjtBQUFBLE1BQ0krRyxJQURKLEdBQ2lCL0csTUFEakIsQ0FDSStHLElBREo7QUFBQSxNQUNVdkksR0FEVixHQUNpQndCLE1BRGpCLENBQ1V4QixHQURWO0FBRUgsTUFBTTZKLDJCQUEyQixHQUFHdEIsSUFBSSxLQUFLQyw2QkFBa0JDLFFBQS9EO0FBQ0EseUNBQ0szSSxLQURMO0FBRUVoQyxJQUFBQSxPQUFPLEVBQUVnQyxLQUFLLENBQUNoQyxPQUFOLENBQWNtQyxHQUFkLENBQWtCLFVBQUNnRixDQUFELEVBQUk5RSxDQUFKO0FBQUEsYUFDekJBLENBQUMsS0FBS0gsR0FBTixtQ0FFU2lGLENBRlQ7QUFHTXNELFFBQUFBLElBQUksRUFBSkE7QUFITixXQUtJc0IsMkJBQTJCLG1DQUV0QjVFLENBRnNCO0FBR3pCc0QsUUFBQUEsSUFBSSxFQUFFQyw2QkFBa0JFO0FBSEMsV0FLM0J6RCxDQVhxQjtBQUFBLEtBQWxCO0FBRlg7QUFnQkQsQ0F0Qk07QUF3QlA7QUFDQTtBQUNBO0FBQ0E7Ozs7O0FBQ08sSUFBTTZFLDBCQUEwQixHQUFHLFNBQTdCQSwwQkFBNkIsQ0FDeENoSyxLQUR3QyxFQUV4QzBCLE1BRndDLEVBRzNCO0FBQ2IsTUFBTXVELE1BQU0sR0FBR2pGLEtBQUssQ0FBQ2hDLE9BQU4sQ0FBYzBELE1BQU0sQ0FBQ3hCLEdBQXJCLENBQWY7QUFDQSxNQUFNUSxTQUFTLEdBQUcseUJBQUl1RSxNQUFKLEVBQVksQ0FBQyxPQUFELEVBQVUsWUFBVixFQUF3QixXQUF4QixDQUFaLENBQWxCO0FBRUEsTUFBSXpFLFFBQVEsR0FBRytHLGdCQUFnQixDQUFDdkgsS0FBRCxFQUFRO0FBQ3JDRSxJQUFBQSxHQUFHLEVBQUV3QixNQUFNLENBQUN4QixHQUR5QjtBQUVyQ2tELElBQUFBLElBQUksRUFBRSxTQUYrQjtBQUdyQ3FDLElBQUFBLEtBQUssRUFBRSxDQUFDL0U7QUFINkIsR0FBUixDQUEvQjtBQU1BRixFQUFBQSxRQUFRLEdBQUcrRyxnQkFBZ0IsQ0FBQy9HLFFBQUQsRUFBVztBQUNwQ04sSUFBQUEsR0FBRyxFQUFFd0IsTUFBTSxDQUFDeEIsR0FEd0I7QUFFcENrRCxJQUFBQSxJQUFJLEVBQUUsT0FGOEI7QUFHcENxQyxJQUFBQSxLQUFLLEVBQUUsaUNBQXFCUixNQUFNLENBQUNRLEtBQTVCLEVBQW1DUixNQUFNLENBQUN4SixFQUExQyxFQUE4QztBQUNuRGlGLE1BQUFBLFNBQVMsRUFBRSxDQUFDQTtBQUR1QyxLQUE5QztBQUg2QixHQUFYLENBQTNCO0FBUUEsU0FBT0YsUUFBUDtBQUNELENBdEJNO0FBd0JQO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7Ozs7O0FBQ08sSUFBTXlKLG1CQUFtQixHQUFHLFNBQXRCQSxtQkFBc0IsQ0FDakNqSyxLQURpQyxFQUVqQzBCLE1BRmlDLEVBR3BCO0FBQUEsTUFDTnhCLEdBRE0sR0FDQ3dCLE1BREQsQ0FDTnhCLEdBRE07QUFBQSwyQkFFUUYsS0FBSyxDQUFDaEMsT0FBTixDQUFja0MsR0FBZCxDQUZSO0FBQUEsTUFFTmlDLE1BRk0sc0JBRU5BLE1BRk07QUFBQSxNQUVFMUcsRUFGRixzQkFFRUEsRUFGRjtBQUliLE1BQU15TyxVQUFVLGlEQUNYbEssS0FBSyxDQUFDaEMsT0FBTixDQUFjNEcsS0FBZCxDQUFvQixDQUFwQixFQUF1QjFFLEdBQXZCLENBRFcsdUNBRVhGLEtBQUssQ0FBQ2hDLE9BQU4sQ0FBYzRHLEtBQWQsQ0FBb0IxRSxHQUFHLEdBQUcsQ0FBMUIsRUFBNkJGLEtBQUssQ0FBQ2hDLE9BQU4sQ0FBY3lDLE1BQTNDLENBRlcsRUFBaEI7QUFLQSxNQUFNc0ksZ0JBQWdCLEdBQUcsbUNBQXVCNUcsTUFBdkIsRUFBK0JuQyxLQUFLLENBQUM5QixRQUFyQyxFQUErQ2dNLFVBQS9DLEVBQTJEbEssS0FBSyxDQUFDcEMsTUFBakUsQ0FBekI7QUFDQSxNQUFNdU0sU0FBUyxHQUNiLGlDQUFxQm5LLEtBQUssQ0FBQ1YsTUFBTixDQUFhaEMsZUFBbEMsTUFBdUQ3QixFQUF2RCxtQ0FFU3VFLEtBQUssQ0FBQ1YsTUFGZjtBQUdNaEMsSUFBQUEsZUFBZSxFQUFFO0FBSHZCLE9BS0kwQyxLQUFLLENBQUNWLE1BTlo7QUFRQSxNQUFJa0IsUUFBUSxHQUFHLGdCQUFJLENBQUMsU0FBRCxDQUFKLEVBQWlCMEosVUFBakIsRUFBNkJsSyxLQUE3QixDQUFmO0FBQ0FRLEVBQUFBLFFBQVEsR0FBRyxnQkFBSSxDQUFDLFVBQUQsQ0FBSixFQUFrQnVJLGdCQUFsQixFQUFvQ3ZJLFFBQXBDLENBQVg7QUFDQUEsRUFBQUEsUUFBUSxHQUFHLGdCQUFJLENBQUMsUUFBRCxDQUFKLEVBQWdCMkosU0FBaEIsRUFBMkIzSixRQUEzQixDQUFYO0FBRUEsU0FBT3dJLHdCQUF3QixDQUFDeEksUUFBRCxFQUFXMkIsTUFBWCxFQUFtQi9ELFNBQW5CLENBQS9CO0FBQ0QsQ0ExQk07QUE0QlA7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7Ozs7QUFDTyxJQUFNZ00sZUFBZSxHQUFHLFNBQWxCQSxlQUFrQixDQUM3QnBLLEtBRDZCLEVBRTdCMEIsTUFGNkIsRUFHaEI7QUFDYixNQUFJVSxRQUFKO0FBQ0EsTUFBSWlJLFlBQUo7O0FBQ0EsTUFBSTNJLE1BQU0sQ0FBQzlGLE1BQVgsRUFBbUI7QUFDakJ3RyxJQUFBQSxRQUFRLEdBQUcsMkNBQXNCcEMsS0FBdEIsRUFBNkIwQixNQUFNLENBQUM5RixNQUFwQyxDQUFYOztBQUNBLFFBQUksQ0FBQ3dHLFFBQUwsRUFBZTtBQUNidUUsc0JBQVEyRCxJQUFSLENBQ0UsNkZBREYsRUFFRTVJLE1BQU0sQ0FBQzlGLE1BRlQ7O0FBSUEsYUFBT29FLEtBQVA7QUFDRDs7QUFFRCxRQUFNcUcsTUFBTSxHQUFHLG9DQUFtQmpFLFFBQW5CLEVBQTZCcEMsS0FBN0IsQ0FBZjtBQUNBb0MsSUFBQUEsUUFBUSxHQUFHaUUsTUFBTSxDQUFDcEcsS0FBbEI7QUFDQW9LLElBQUFBLFlBQVksR0FBR2hFLE1BQU0sQ0FBQ3hJLFNBQXRCO0FBQ0QsR0FiRCxNQWFPO0FBQUE7O0FBQ0w7QUFDQSxRQUFNME0sY0FBYyx3QkFBRzdJLE1BQU0sQ0FBQ3FHLFNBQVYsaUVBQXVCNUcsTUFBTSxDQUFDQyxJQUFQLENBQVlwQixLQUFLLENBQUM5QixRQUFsQixFQUE0QixDQUE1QixDQUEzQztBQUNBa0UsSUFBQUEsUUFBUSxHQUFHLElBQUlvSSxhQUFKLENBQVU7QUFDbkI5SixNQUFBQSxTQUFTLEVBQUUsSUFEUTtBQUVuQndGLE1BQUFBLGNBQWMsRUFBRSxJQUZHO0FBR25CL0QsTUFBQUEsTUFBTSxFQUFFb0k7QUFIVyxLQUFWLENBQVg7QUFLQUYsSUFBQUEsWUFBWSxHQUFHLEVBQWY7QUFDRDs7QUFDRCx5Q0FDS3JLLEtBREw7QUFFRXBDLElBQUFBLE1BQU0sZ0RBQU1vQyxLQUFLLENBQUNwQyxNQUFaLElBQW9Cd0UsUUFBcEIsRUFGUjtBQUdFdkUsSUFBQUEsU0FBUyxnREFBTW1DLEtBQUssQ0FBQ25DLFNBQVosSUFBdUJ3TSxZQUF2QixFQUhYO0FBSUU7QUFDQXRNLElBQUFBLFVBQVUsR0FBR3FFLFFBQVEsQ0FBQzNHLEVBQVosNkNBQW1CdUUsS0FBSyxDQUFDakMsVUFBekIsRUFMWjtBQU1FaUIsSUFBQUEsU0FBUyxFQUFFLG1DQUF1QmdCLEtBQUssQ0FBQ2hCLFNBQTdCLEVBQXdDb0QsUUFBeEM7QUFOYjtBQVFELENBckNNO0FBdUNQO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7Ozs7O0FBQ08sU0FBU3FJLGtCQUFULENBQ0x6SyxLQURLLFNBR0Y7QUFBQSxNQURGdkUsRUFDRSxTQURGQSxFQUNFO0FBQ0gsTUFBTXlFLEdBQUcsR0FBR3dLLE1BQU0sQ0FBQ0MsUUFBUCxDQUFnQmxQLEVBQWhCLElBQ1I7QUFDQWlQLEVBQUFBLE1BQU0sQ0FBQ2pQLEVBQUQsQ0FGRSxHQUdSdUUsS0FBSyxDQUFDcEMsTUFBTixDQUFhNEUsU0FBYixDQUF1QixVQUFBUCxDQUFDO0FBQUEsV0FBSUEsQ0FBQyxDQUFDeEcsRUFBRixLQUFTQSxFQUFiO0FBQUEsR0FBeEIsQ0FISjs7QUFJQSxNQUFJeUUsR0FBRyxHQUFHLENBQU4sSUFBV0EsR0FBRyxJQUFJRixLQUFLLENBQUNwQyxNQUFOLENBQWE2QyxNQUFuQyxFQUEyQztBQUN6QztBQUNBa0csb0JBQVEyRCxJQUFSLG9EQUF5RDdPLEVBQXpEOztBQUNBLFdBQU91RSxLQUFQO0FBQ0Q7O0FBVEUsTUFXSXBDLE1BWEosR0FXeURvQyxLQVh6RCxDQVdJcEMsTUFYSjtBQUFBLE1BV1lDLFNBWFosR0FXeURtQyxLQVh6RCxDQVdZbkMsU0FYWjtBQUFBLE1BV3VCRSxVQVh2QixHQVd5RGlDLEtBWHpELENBV3VCakMsVUFYdkI7QUFBQSxNQVdtQ2EsT0FYbkMsR0FXeURvQixLQVh6RCxDQVdtQ3BCLE9BWG5DO0FBQUEsTUFXNENELFNBWDVDLEdBV3lEcUIsS0FYekQsQ0FXNENyQixTQVg1QztBQVlILE1BQU1pTSxhQUFhLEdBQUdoTixNQUFNLENBQUNzQyxHQUFELENBQTVCOztBQUNBLE1BQU1NLFFBQVEsbUNBQ1RSLEtBRFM7QUFFWnBDLElBQUFBLE1BQU0sRUFBRSxvQ0FBY2dOLGFBQWEsQ0FBQ25QLEVBQTVCLEVBQWdDbUMsTUFBaEMsQ0FGSTtBQUdaQyxJQUFBQSxTQUFTLEVBQUUsMkNBQXFCcUMsR0FBckIsRUFBMEJyQyxTQUExQixDQUhDO0FBSVpFLElBQUFBLFVBQVUsRUFBRUEsVUFBVSxDQUFDa0gsTUFBWCxDQUFrQixVQUFBa0MsT0FBTztBQUFBLGFBQUlBLE9BQU8sS0FBS3lELGFBQWEsQ0FBQ25QLEVBQTlCO0FBQUEsS0FBekIsQ0FKQTtBQUtabUQsSUFBQUEsT0FBTyxFQUFFZ00sYUFBYSxDQUFDN0QsY0FBZCxDQUE2Qm5JLE9BQTdCLElBQXdDUixTQUF4QyxHQUFvRFEsT0FMakQ7QUFNWkQsSUFBQUEsU0FBUyxFQUFFaU0sYUFBYSxDQUFDN0QsY0FBZCxDQUE2QnBJLFNBQTdCLElBQTBDUCxTQUExQyxHQUFzRE8sU0FOckQ7QUFPWkssSUFBQUEsU0FBUyxFQUFFLHFDQUF5QmdCLEtBQUssQ0FBQ2hCLFNBQS9CLEVBQTBDNEwsYUFBMUMsQ0FQQyxDQVFaOztBQVJZLElBQWQ7O0FBV0EsU0FBT2hLLHFCQUFxQixDQUFDSixRQUFELENBQTVCO0FBQ0Q7QUFFRDtBQUNBO0FBQ0E7QUFDQTtBQUNBOzs7QUFDTyxJQUFNcUssbUJBQW1CLEdBQUcsU0FBdEJBLG1CQUFzQixDQUNqQzdLLEtBRGlDO0FBQUEsTUFFaEM4SyxLQUZnQyxTQUVoQ0EsS0FGZ0M7QUFBQSx5Q0FJOUI5SyxLQUo4QjtBQUtqQ2pDLElBQUFBLFVBQVUsRUFBRStNO0FBTHFCO0FBQUEsQ0FBNUI7QUFRUDtBQUNBO0FBQ0E7QUFDQTtBQUNBOzs7OztBQUNPLElBQU1DLHFCQUFxQixHQUFHLFNBQXhCQSxxQkFBd0IsQ0FDbkMvSyxLQURtQyxTQUd0QjtBQUFBLE1BRFp2RSxFQUNZLFNBRFpBLEVBQ1k7QUFDYixNQUFNeUUsR0FBRyxHQUFHd0ssTUFBTSxDQUFDQyxRQUFQLENBQWdCbFAsRUFBaEIsSUFDUjtBQUNBaVAsRUFBQUEsTUFBTSxDQUFDalAsRUFBRCxDQUZFLEdBR1J1RSxLQUFLLENBQUNwQyxNQUFOLENBQWE0RSxTQUFiLENBQXVCLFVBQUFQLENBQUM7QUFBQSxXQUFJQSxDQUFDLENBQUN4RyxFQUFGLEtBQVNBLEVBQWI7QUFBQSxHQUF4QixDQUhKOztBQUlBLE1BQUl5RSxHQUFHLEdBQUcsQ0FBTixJQUFXLENBQUNGLEtBQUssQ0FBQ3BDLE1BQU4sQ0FBYXNDLEdBQWIsQ0FBaEIsRUFBbUM7QUFDakN5RyxvQkFBUTJELElBQVIsaUJBQXNCcEssR0FBdEI7O0FBQ0EsV0FBT0YsS0FBUDtBQUNEOztBQVJZLE1BVU5wQyxNQVZNLEdBVUlvQyxLQVZKLENBVU5wQyxNQVZNO0FBV2IsTUFBTW9OLFFBQVEsR0FBR3BOLE1BQU0sQ0FBQ3NDLEdBQUQsQ0FBdkI7QUFFQSxNQUFNK0sscUJBQXFCLEdBQUdqTCxLQUFLLENBQUNqQyxVQUFOLENBQWlCeUUsU0FBakIsQ0FBMkIsVUFBQThGLEdBQUc7QUFBQSxXQUFJQSxHQUFHLEtBQUswQyxRQUFRLENBQUN2UCxFQUFyQjtBQUFBLEdBQTlCLENBQTlCO0FBQ0EsTUFBSXlQLFFBQVEscUJBQWNGLFFBQVEsQ0FBQ3BQLE1BQVQsQ0FBZ0JGLEtBQTlCLENBQVo7QUFDQSxNQUFJeVAsT0FBTyxHQUFHLENBQWQsQ0FmYSxDQWdCYjs7QUFDQSxTQUFPdk4sTUFBTSxDQUFDb0UsSUFBUCxDQUFZLFVBQUFDLENBQUM7QUFBQSxXQUFJQSxDQUFDLENBQUNyRyxNQUFGLENBQVNGLEtBQVQsS0FBbUJ3UCxRQUF2QjtBQUFBLEdBQWIsQ0FBUCxFQUFzRDtBQUNwREEsSUFBQUEsUUFBUSxxQkFBY0YsUUFBUSxDQUFDcFAsTUFBVCxDQUFnQkYsS0FBOUIsY0FBdUMsRUFBRXlQLE9BQXpDLENBQVI7QUFDRCxHQW5CWSxDQXFCYjs7O0FBQ0EsTUFBTXJGLFdBQVcsR0FBRyxvQ0FBZWtGLFFBQWYsRUFBeUJoTCxLQUFLLENBQUNILE1BQS9CLENBQXBCLENBdEJhLENBd0JiOztBQUNBLE1BQUksRUFBQ2lHLFdBQUQsYUFBQ0EsV0FBRCxlQUFDQSxXQUFXLENBQUVsSyxNQUFkLENBQUosRUFBMEI7QUFDeEIsV0FBT29FLEtBQVA7QUFDRDs7QUFDRDhGLEVBQUFBLFdBQVcsQ0FBQ2xLLE1BQVosQ0FBbUJGLEtBQW5CLEdBQTJCd1AsUUFBM0I7QUFDQXBGLEVBQUFBLFdBQVcsQ0FBQ3JLLEVBQVosR0FBaUIsMkJBQWUyUCx1QkFBZixDQUFqQixDQTdCYSxDQStCYjs7QUFDQSxNQUFJL0ksU0FBUyxHQUFHK0gsZUFBZSxDQUFDcEssS0FBRCxFQUFRO0FBQUNwRSxJQUFBQSxNQUFNLEVBQUVrSztBQUFULEdBQVIsQ0FBL0IsQ0FoQ2EsQ0FpQ2I7O0FBQ0EsTUFBTTFELFFBQVEsR0FBR0MsU0FBUyxDQUFDekUsTUFBVixDQUFpQnlFLFNBQVMsQ0FBQ3pFLE1BQVYsQ0FBaUI2QyxNQUFqQixHQUEwQixDQUEzQyxDQUFqQixDQWxDYSxDQW1DYjs7QUFDQSxNQUFNNEssYUFBYSxHQUFHLHdCQUNwQmhKLFNBQVMsQ0FBQ3RFLFVBQVYsQ0FBcUI2RyxLQUFyQixDQUEyQixDQUEzQixFQUE4QnZDLFNBQVMsQ0FBQ3RFLFVBQVYsQ0FBcUIwQyxNQUFuRCxDQURvQixFQUVwQndLLHFCQUZvQixFQUdwQjdJLFFBQVEsQ0FBQzNHLEVBSFcsQ0FBdEI7QUFNQTRHLEVBQUFBLFNBQVMsR0FBR3dJLG1CQUFtQixDQUFDeEksU0FBRCxFQUFZO0FBQUN5SSxJQUFBQSxLQUFLLEVBQUVPO0FBQVIsR0FBWixDQUEvQjtBQUVBLFNBQU96SyxxQkFBcUIsQ0FBQ3lCLFNBQUQsQ0FBNUI7QUFDRCxDQWhETTtBQWtEUDtBQUNBO0FBQ0E7QUFDQTtBQUNBOzs7OztBQUNPLElBQU1pSixnQkFBZ0IsR0FBRyxTQUFuQkEsZ0JBQW1CLENBQzlCdEwsS0FEOEIsRUFFOUIwQixNQUY4QixFQUdqQjtBQUNiLE1BQU02SixTQUFTLEdBQUcseUNBQTJCN0osTUFBTSxDQUFDOUYsTUFBbEMsQ0FBbEIsQ0FEYSxDQUdiOztBQUNBb0UsRUFBQUEsS0FBSyxDQUFDM0IsT0FBTixDQUFjZ0QsT0FBZCxDQUFzQixVQUFBbUssTUFBTTtBQUFBLFdBQUlBLE1BQU0sQ0FBQ0MsWUFBUCxDQUFvQjtBQUFDdkYsTUFBQUEsY0FBYyxFQUFFO0FBQWpCLEtBQXBCLENBQUo7QUFBQSxHQUE1QjtBQUVBLE1BQU03SCxPQUFPLGlEQUFPMkIsS0FBSyxDQUFDM0IsT0FBYixJQUFzQmtOLFNBQXRCLEVBQWI7QUFDQSxNQUFNak4sV0FBVyxHQUFHLDJCQUFlRCxPQUFmLEdBQXlCa04sU0FBUyxDQUFDOVAsRUFBbkMsNkNBQTBDdUUsS0FBSyxDQUFDMUIsV0FBaEQsR0FBcEI7QUFFQSx5Q0FDSzBCLEtBREw7QUFFRTNCLElBQUFBLE9BQU8sRUFBUEEsT0FGRjtBQUdFQyxJQUFBQSxXQUFXLEVBQVhBO0FBSEY7QUFLRCxDQWpCTTtBQW1CUDtBQUNBO0FBQ0E7QUFDQTtBQUNBOzs7OztBQUNPLElBQU1vTixtQkFBbUIsR0FBRyxTQUF0QkEsbUJBQXNCLENBQ2pDMUwsS0FEaUMsVUFHcEI7QUFBQSxNQURadkUsRUFDWSxVQURaQSxFQUNZO0FBQ2IsTUFBTXlFLEdBQUcsR0FBR0YsS0FBSyxDQUFDM0IsT0FBTixDQUFjbUUsU0FBZCxDQUF3QixVQUFBUCxDQUFDO0FBQUEsV0FBSUEsQ0FBQyxDQUFDeEcsRUFBRixLQUFTQSxFQUFiO0FBQUEsR0FBekIsQ0FBWjs7QUFDQSxNQUFJeUUsR0FBRyxHQUFHLENBQU4sSUFBV0EsR0FBRyxJQUFJRixLQUFLLENBQUMzQixPQUFOLENBQWNvQyxNQUFwQyxFQUE0QztBQUMxQ2tHLG9CQUFRMkQsSUFBUixpREFBc0Q3TyxFQUF0RDs7QUFDQSxXQUFPdUUsS0FBUDtBQUNEOztBQUxZLE1BT04zQixPQVBNLEdBT2tCMkIsS0FQbEIsQ0FPTjNCLE9BUE07QUFBQSxNQU9HQyxXQVBILEdBT2tCMEIsS0FQbEIsQ0FPRzFCLFdBUEg7QUFRYixNQUFNcU4sY0FBYyxHQUFHdE4sT0FBTyxDQUFDNkIsR0FBRCxDQUE5QjtBQUNBLHlDQUNLRixLQURMO0FBRUU7QUFDQTNCLElBQUFBLE9BQU8sRUFBRSxvQ0FBY3NOLGNBQWMsQ0FBQ2xRLEVBQTdCLEVBQWlDNEMsT0FBakMsQ0FIWDtBQUlFQyxJQUFBQSxXQUFXLEVBQUVBLFdBQVcsQ0FBQzJHLE1BQVosQ0FBbUIsVUFBQTJHLFFBQVE7QUFBQSxhQUFJQSxRQUFRLEtBQUtELGNBQWMsQ0FBQ2xRLEVBQWhDO0FBQUEsS0FBM0I7QUFKZjtBQU1ELENBbEJNO0FBb0JQO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7Ozs7O0FBQ08sSUFBTW9RLG9CQUFvQixHQUFHLFNBQXZCQSxvQkFBdUIsQ0FDbEM3TCxLQURrQztBQUFBLE1BRWpDOEssS0FGaUMsVUFFakNBLEtBRmlDO0FBQUEseUNBSS9COUssS0FKK0I7QUFLbEMxQixJQUFBQSxXQUFXLEVBQUUsMkJBQWUwQixLQUFLLENBQUMzQixPQUFyQixzQ0FBa0N5TSxLQUFsQztBQUxxQjtBQUFBLENBQTdCO0FBUVA7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7Ozs7QUFDTyxJQUFNZ0IsbUJBQW1CLEdBQUcsU0FBdEJBLG1CQUFzQixDQUNqQzlMLEtBRGlDLFVBR3BCO0FBQUEsTUFEWnZFLEVBQ1ksVUFEWkEsRUFDWTtBQUFBLE1BRFIrSCxLQUNRLFVBRFJBLEtBQ1E7QUFDYixNQUFNdEQsR0FBRyxHQUFHRixLQUFLLENBQUMzQixPQUFOLENBQWNtRSxTQUFkLENBQXdCLFVBQUFQLENBQUM7QUFBQSxXQUFJQSxDQUFDLENBQUN4RyxFQUFGLEtBQVNBLEVBQWI7QUFBQSxHQUF6QixDQUFaOztBQUNBLE1BQUl5RSxHQUFHLEdBQUcsQ0FBTixJQUFXQSxHQUFHLElBQUlGLEtBQUssQ0FBQzNCLE9BQU4sQ0FBY29DLE1BQXBDLEVBQTRDO0FBQzFDa0csb0JBQVEyRCxJQUFSLGlEQUFzRDdPLEVBQXREOztBQUNBLFdBQU91RSxLQUFQO0FBQ0Q7O0FBRUQsTUFBTStMLFVBQVUsdUNBQU8vTCxLQUFLLENBQUMzQixPQUFiLENBQWhCO0FBQ0EwTixFQUFBQSxVQUFVLENBQUM3TCxHQUFELENBQVYsQ0FBZ0J1TCxZQUFoQixDQUE2QmpJLEtBQTdCO0FBRUEseUNBQ0t4RCxLQURMO0FBRUUzQixJQUFBQSxPQUFPLEVBQUUwTjtBQUZYO0FBSUQsQ0FqQk07QUFtQlA7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7Ozs7QUFDTyxTQUFTQyxvQkFBVCxDQUNMaE0sS0FESyxFQUVMMEIsTUFGSyxFQUdGO0FBQ0g7QUFERyxNQUVZdUssVUFGWixHQUUwQnZLLE1BRjFCLENBRUlTLE1BRko7QUFBQSxNQUdJakUsUUFISixHQUdnQjhCLEtBSGhCLENBR0k5QixRQUhKLEVBS0g7O0FBQ0EsTUFBSSxDQUFDQSxRQUFRLENBQUMrTixVQUFELENBQWIsRUFBMkI7QUFDekIsV0FBT2pNLEtBQVA7QUFDRDtBQUVEOzs7QUFWRyxNQVlEcEMsTUFaQyxHQWNDb0MsS0FkRCxDQVlEcEMsTUFaQztBQUFBLHdCQWNDb0MsS0FkRCxDQWFEOUIsUUFiQztBQUFBLE1BYXdCZ0UsT0FieEIsbUJBYVcrSixVQWJYO0FBQUEsTUFhb0NDLFdBYnBDLCtEQWFXRCxVQWJYO0FBZUg7O0FBRUEsTUFBTUUsY0FBYyxHQUFHdk8sTUFBTSxDQUFDcUgsTUFBUCxDQUFjLFVBQUFoRCxDQUFDO0FBQUEsV0FBSUEsQ0FBQyxDQUFDckcsTUFBRixDQUFTdUcsTUFBVCxLQUFvQjhKLFVBQXhCO0FBQUEsR0FBZixFQUFtRDlMLEdBQW5ELENBQXVELFVBQUE4QixDQUFDO0FBQUEsV0FBSUEsQ0FBQyxDQUFDeEcsRUFBTjtBQUFBLEdBQXhELENBQXZCLENBakJHLENBbUJIOztBQUNBLE1BQUkrRSxRQUFRLEdBQUcyTCxjQUFjLENBQUNDLE1BQWYsQ0FBc0IsVUFBQ0MsSUFBRCxFQUFPNVEsRUFBUDtBQUFBLFdBQWNnUCxrQkFBa0IsQ0FBQzRCLElBQUQsRUFBTztBQUFDNVEsTUFBQUEsRUFBRSxFQUFGQTtBQUFELEtBQVAsQ0FBaEM7QUFBQSxHQUF0QixrQ0FDVnVFLEtBRFU7QUFFYjlCLElBQUFBLFFBQVEsRUFBRWdPO0FBRkcsS0FBZixDQXBCRyxDQXlCSDs7QUFDQSxNQUFNbE8sT0FBTyxHQUFHd0MsUUFBUSxDQUFDeEMsT0FBVCxDQUFpQmlILE1BQWpCLENBQXdCLFVBQUFBLE1BQU07QUFBQSxXQUFJLENBQUNBLE1BQU0sQ0FBQzlDLE1BQVAsQ0FBY2lELFFBQWQsQ0FBdUI2RyxVQUF2QixDQUFMO0FBQUEsR0FBOUIsQ0FBaEI7QUFFQXpMLEVBQUFBLFFBQVEsbUNBQU9BLFFBQVA7QUFBaUJ4QyxJQUFBQSxPQUFPLEVBQVBBO0FBQWpCLElBQVI7QUFFQSxTQUFPc08sa0NBQWtDLENBQUM5TCxRQUFELEVBQVc7QUFBQzJCLElBQUFBLE1BQU0sRUFBRThKO0FBQVQsR0FBWCxDQUF6QztBQUNEOztBQUVELFNBQVNLLGtDQUFULENBQTRDdE0sS0FBNUMsVUFBNkQ7QUFBQSxNQUFUbUMsTUFBUyxVQUFUQSxNQUFTO0FBQUEsTUFDdEQ1RCxpQkFEc0QsR0FDakN5QixLQURpQyxDQUN0RHpCLGlCQURzRDtBQUFBLDJCQUV6Q0EsaUJBRnlDO0FBQUEsTUFFcEQvQyxPQUZvRCxzQkFFcERBLE9BRm9EOztBQUczRCxNQUFJQSxPQUFKLEVBQWE7QUFBQSxRQUNKSSxNQURJLEdBQ01KLE9BRE4sQ0FDSkksTUFESTtBQUVYOztBQUZXLCtCQUdpQ0EsTUFBTSxDQUFDQyxZQUh4QztBQUFBLFFBR00wUSxNQUhOLHdCQUdIcEssTUFIRztBQUFBLFFBR2lCdEcsWUFIakIsb0VBR0hzRyxNQUhHO0FBSVg7O0FBQ0E1RCxJQUFBQSxpQkFBaUIsbUNBQ1pBLGlCQURZO0FBRWYvQyxNQUFBQSxPQUFPLGtDQUFNQSxPQUFOO0FBQWVJLFFBQUFBLE1BQU0sa0NBQU1BLE1BQU47QUFBY0MsVUFBQUEsWUFBWSxFQUFaQTtBQUFkO0FBQXJCO0FBRlEsTUFBakI7QUFJRDs7QUFFRCx5Q0FBV21FLEtBQVg7QUFBa0J6QixJQUFBQSxpQkFBaUIsRUFBakJBO0FBQWxCO0FBQ0Q7QUFDRDtBQUNBO0FBQ0E7QUFDQTtBQUNBOzs7QUFDTyxJQUFNaU8sMEJBQTBCLEdBQUcsU0FBN0JBLDBCQUE2QixDQUN4Q3hNLEtBRHdDLEVBRXhDMEIsTUFGd0M7QUFBQSx5Q0FJckMxQixLQUpxQztBQUt4Q3ZCLElBQUFBLGFBQWEsRUFBRWlELE1BQU0sQ0FBQ3hFO0FBTGtCO0FBQUEsQ0FBbkM7QUFRUDtBQUNBO0FBQ0E7QUFDQTtBQUNBOzs7OztBQUNPLElBQU11UCw0QkFBNEIsR0FBRyxTQUEvQkEsNEJBQStCLENBQzFDek0sS0FEMEMsRUFFMUMwQixNQUYwQztBQUFBLHlDQUl2QzFCLEtBSnVDO0FBSzFDdEIsSUFBQUEsZUFBZSxFQUFFZ0QsTUFBTSxDQUFDeEU7QUFMa0I7QUFBQSxDQUFyQztBQVFQO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7Ozs7O0FBQ08sSUFBTXdQLHVCQUF1QixHQUFHLFNBQTFCQSx1QkFBMEIsQ0FDckMxTSxLQURxQyxFQUVyQzBCLE1BRnFDLEVBR3hCO0FBQ2IseUNBQ0sxQixLQURMO0FBRUU3QixJQUFBQSxjQUFjLEVBQUV1RCxNQUFNLENBQUNTO0FBRnpCO0FBSUQsQ0FSTTtBQVVQO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7Ozs7O0FBQ08sSUFBTXdLLHVCQUF1QixHQUFHLFNBQTFCQSx1QkFBMEIsQ0FDckMzTSxLQURxQyxFQUVyQzBCLE1BRnFDLEVBR3hCO0FBQ2IsU0FBT2tMLHlCQUF5QixDQUFDNU0sS0FBRCxFQUFRO0FBQUNtQyxJQUFBQSxNQUFNLEVBQUVULE1BQU0sQ0FBQ1MsTUFBaEI7QUFBd0JxQixJQUFBQSxLQUFLLEVBQUU7QUFBQ3FKLE1BQUFBLEtBQUssRUFBRW5MLE1BQU0sQ0FBQ29MO0FBQWY7QUFBL0IsR0FBUixDQUFoQztBQUNELENBTE07QUFPUDtBQUNBO0FBQ0E7QUFDQTtBQUNBOzs7OztBQUNPLElBQU1DLHFCQUFxQixHQUFHLFNBQXhCQSxxQkFBd0IsQ0FBQy9NLEtBQUQ7QUFBQSx1REFDaEN4QyxpQkFEZ0MsR0FFaEN3QyxLQUFLLENBQUNnTixZQUYwQjtBQUduQ0EsSUFBQUEsWUFBWSxFQUFFaE4sS0FBSyxDQUFDZ047QUFIZTtBQUFBLENBQTlCO0FBTVA7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7Ozs7QUFDTyxJQUFNQyx1QkFBdUIsR0FBRyxTQUExQkEsdUJBQTBCLENBQ3JDak4sS0FEcUMsVUFReEI7QUFBQSw4QkFMWGtOLE9BS1c7QUFBQSw2Q0FMRHRSLE1BS0M7QUFBQSxNQUxEQSxNQUtDLHNDQUxRLEVBS1I7QUFBQSw2Q0FMWXVSLE9BS1o7QUFBQSxNQUxZQSxPQUtaLHNDQUxzQixFQUt0Qjs7QUFDYixNQUFJLENBQUN2UixNQUFNLENBQUN3UixRQUFaLEVBQXNCO0FBQ3BCLFdBQU9wTixLQUFQO0FBQ0Q7O0FBSFksTUFLTnFOLGtCQUxNLEdBS2dCRixPQUxoQixDQUtORSxrQkFMTSxFQU9iOztBQUNBLE1BQUlDLFdBQVcsR0FBRyxDQUFDRCxrQkFBRCxHQUFzQk4scUJBQXFCLENBQUMvTSxLQUFELENBQTNDLEdBQXFEQSxLQUF2RTs7QUFSYSw4Q0FTUUEsS0FBSyxDQUFDTCxPQVRkO0FBQUE7O0FBQUE7QUFTYiwyREFBb0M7QUFBQSxVQUF6QjROLE1BQXlCOztBQUNsQyxVQUFJLGtDQUFjQSxNQUFkLEtBQXlCLG9DQUFnQjNSLE1BQU0sQ0FBQ3dSLFFBQXZCLEVBQWlDRyxNQUFNLENBQUNuSyxJQUF4QyxDQUE3QixFQUE0RTtBQUMxRWtLLFFBQUFBLFdBQVcsR0FBR0MsTUFBTSxDQUFDQyxLQUFQLENBQ1pGLFdBRFksRUFFWix5Q0FBcUIxUixNQUFNLENBQUN3UixRQUE1QixFQUFzQ0csTUFBTSxDQUFDbkssSUFBN0MsRUFBbURtSyxNQUFNLENBQUNFLFdBQTFELENBRlksRUFHWjtBQUNBLFlBSlksQ0FBZDtBQU1EO0FBQ0Y7QUFsQlk7QUFBQTtBQUFBO0FBQUE7QUFBQTs7QUFvQmIsU0FBT0gsV0FBUDtBQUNELENBN0JNO0FBK0JQO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7Ozs7O0FBQ08sSUFBTUksaUJBQWlCLEdBQUcsU0FBcEJBLGlCQUFvQixDQUMvQjFOLEtBRCtCLEVBRS9CMEIsTUFGK0I7QUFBQSx5Q0FJNUIxQixLQUo0QjtBQUsvQnJCLElBQUFBLFNBQVMsb0JBRUorQyxNQUFNLENBQUNpTSxJQUZIO0FBTHNCO0FBQUEsQ0FBMUI7QUFXUDs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOzs7OztBQUNPLFNBQVNDLDhCQUFULENBQ0w1TixLQURLLEVBRUwwQixNQUZLLEVBR0s7QUFBQSxNQUNIOUYsTUFERyxHQUNPOEYsTUFEUCxDQUNIOUYsTUFERzs7QUFHVixNQUFNMkMsaUJBQWlCLG1DQUNsQnlCLEtBQUssQ0FBQ3pCLGlCQURZLHdDQUVoQjNDLE1BQU0sQ0FBQ0gsRUFGUyxFQUVKRyxNQUZJLEVBQXZCLENBSFUsQ0FRVjtBQUNBOzs7QUFDQSxNQUFNaVMsVUFBVSxHQUFHLENBQUMsT0FBRCxFQUFVLFNBQVYsQ0FBbkI7O0FBRUEsTUFDRUEsVUFBVSxDQUFDekksUUFBWCxDQUFvQnhKLE1BQU0sQ0FBQ0gsRUFBM0IsS0FDQUcsTUFBTSxDQUFDRCxPQURQLElBRUEsQ0FBQ3FFLEtBQUssQ0FBQ3pCLGlCQUFOLENBQXdCM0MsTUFBTSxDQUFDSCxFQUEvQixFQUFtQ0UsT0FIdEMsRUFJRTtBQUNBO0FBQ0FrUyxJQUFBQSxVQUFVLENBQUN4TSxPQUFYLENBQW1CLFVBQUF5TSxDQUFDLEVBQUk7QUFDdEIsVUFBSUEsQ0FBQyxLQUFLbFMsTUFBTSxDQUFDSCxFQUFqQixFQUFxQjtBQUNuQjhDLFFBQUFBLGlCQUFpQixDQUFDdVAsQ0FBRCxDQUFqQixtQ0FBMkJ2UCxpQkFBaUIsQ0FBQ3VQLENBQUQsQ0FBNUM7QUFBaURuUyxVQUFBQSxPQUFPLEVBQUU7QUFBMUQ7QUFDRDtBQUNGLEtBSkQ7QUFLRDs7QUFFRCxNQUFNNkUsUUFBUSxtQ0FDVFIsS0FEUztBQUVaekIsSUFBQUEsaUJBQWlCLEVBQWpCQTtBQUZZLElBQWQ7O0FBS0EsTUFBSTNDLE1BQU0sQ0FBQ0gsRUFBUCxLQUFjLFVBQWQsSUFBNEIsQ0FBQ0csTUFBTSxDQUFDRCxPQUF4QyxFQUFpRDtBQUMvQyxXQUFPcVEsb0JBQW9CLENBQUN4TCxRQUFELEVBQVc7QUFBQzJCLE1BQUFBLE1BQU0sRUFBRTtBQUFULEtBQVgsQ0FBM0I7QUFDRDs7QUFFRCxTQUFPM0IsUUFBUDtBQUNEO0FBRUQ7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7O0FBQ08sSUFBTXVOLGlCQUFpQixHQUFHLFNBQXBCQSxpQkFBb0IsQ0FDL0IvTixLQUQrQixFQUUvQjBCLE1BRitCO0FBQUEseUNBSTVCMUIsS0FKNEI7QUFLL0JuQixJQUFBQSxRQUFRLEVBQUVtQixLQUFLLENBQUN6QixpQkFBTixDQUF3QmpDLFVBQXhCLENBQW1DWCxPQUFuQyxtQ0FFRHFFLEtBQUssQ0FBQ25CLFFBRkw7QUFHSm1QLE1BQUFBLE1BQU0sRUFBRWhPLEtBQUssQ0FBQ25CLFFBQU4sQ0FBZW1QLE1BQWYsR0FBd0IsSUFBeEIsR0FBK0Isd0JBQVVoTyxLQUFLLENBQUNuQixRQUFoQjtBQUhuQyxTQUtObUIsS0FBSyxDQUFDbkIsUUFWcUI7QUFXL0JELElBQUFBLE9BQU8sRUFBRThDLE1BQU0sQ0FBQ2lNLElBQVAsSUFBZWpNLE1BQU0sQ0FBQ2lNLElBQVAsQ0FBWU0sTUFBM0IsR0FBb0N2TSxNQUFNLENBQUNpTSxJQUEzQyxHQUFrRDtBQVg1QjtBQUFBLENBQTFCO0FBY1A7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7Ozs7QUFDTyxJQUFNTyxlQUFlLEdBQUcsU0FBbEJBLGVBQWtCLENBQzdCbE8sS0FENkIsRUFFN0IwQixNQUY2QixFQUdoQjtBQUNiLHlDQUNLMUIsS0FETDtBQUVFcEIsSUFBQUEsT0FBTyxFQUFFO0FBRlg7QUFJRCxDQVJNO0FBVVA7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7Ozs7QUFDTyxJQUFNdVAsZ0JBQWdCLEdBQUcsU0FBbkJBLGdCQUFtQixDQUM5Qm5PLEtBRDhCLFVBR2pCO0FBQUEsTUFEWm9PLEdBQ1ksVUFEWkEsR0FDWTs7QUFDYixNQUFJak4sTUFBTSxDQUFDa04sTUFBUCxDQUFjck8sS0FBSyxDQUFDekIsaUJBQXBCLEVBQXVDOEUsSUFBdkMsQ0FBNEMsVUFBQXpILE1BQU07QUFBQSxXQUFJQSxNQUFNLENBQUNELE9BQVg7QUFBQSxHQUFsRCxDQUFKLEVBQTJFO0FBQ3pFLDJDQUNLcUUsS0FETDtBQUVFbkIsTUFBQUEsUUFBUSxnREFDSG1CLEtBQUssQ0FBQ25CLFFBREgsR0FFRjBILEtBQUssQ0FBQ0MsT0FBTixDQUFjNEgsR0FBRyxDQUFDRSxLQUFsQixJQUEyQjtBQUFDQyxRQUFBQSxhQUFhLHNDQUFNSCxHQUFHLENBQUNFLEtBQVY7QUFBZCxPQUEzQixHQUE2RCxFQUYzRCxHQUdGL0gsS0FBSyxDQUFDQyxPQUFOLENBQWM0SCxHQUFHLENBQUNJLE1BQWxCLElBQTRCO0FBQUNsUyxRQUFBQSxVQUFVLHNDQUFNOFIsR0FBRyxDQUFDSSxNQUFWO0FBQVgsT0FBNUIsR0FBNEQsRUFIMUQ7QUFGVjtBQVFEOztBQUVELFNBQU94TyxLQUFQO0FBQ0QsQ0FoQk07QUFpQlA7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7Ozs7QUFDTyxJQUFNeU8scUJBQXFCLEdBQUcsU0FBeEJBLHFCQUF3QixDQUNuQ3pPLEtBRG1DLEVBRW5DMEIsTUFGbUM7QUFBQSxTQUluQzFCLEtBQUssQ0FBQ2hCLFNBQU4sSUFBbUJnQixLQUFLLENBQUNoQixTQUFOLENBQWdCeUIsTUFBaEIsS0FBMkIsQ0FBOUMsbUNBRVNULEtBRlQ7QUFHTTtBQUNBO0FBQ0FoQixJQUFBQSxTQUFTLEVBQUUsa0NBQXNCZ0IsS0FBSyxDQUFDcEMsTUFBNUIsRUFBb0M7QUFBQzhRLE1BQUFBLFNBQVMsRUFBRTtBQUFaLEtBQXBDO0FBTGpCLE9BT0lDLHVCQUF1QixDQUFDM08sS0FBRCxFQUFRMEIsTUFBUixDQVhRO0FBQUEsQ0FBOUI7QUFhUDtBQUNBO0FBQ0E7QUFDQTtBQUNBOzs7OztBQUNPLElBQU1rTix3QkFBd0IsR0FBRyxTQUEzQkEsd0JBQTJCLENBQ3RDNU8sS0FEc0MsVUFHekI7QUFBQSxNQURaNk8sUUFDWSxVQURaQSxRQUNZO0FBQUEsTUFERjFILE9BQ0UsVUFERkEsT0FDRTtBQUFBLE1BQ05uSSxTQURNLEdBQ09nQixLQURQLENBQ05oQixTQURNO0FBR2IseUNBQ0tnQixLQURMO0FBRUVoQixJQUFBQSxTQUFTLEVBQUVBLFNBQVMsQ0FBQ21CLEdBQVYsQ0FBYyxVQUFDMk8sRUFBRCxFQUFLek8sQ0FBTDtBQUFBLGFBQ3ZCQSxDQUFDLEtBQUt3TyxRQUFOLG1DQUVTN1AsU0FBUyxDQUFDcUIsQ0FBRCxDQUZsQjtBQUdNekMsUUFBQUEsTUFBTSxrQ0FDRG9CLFNBQVMsQ0FBQ3FCLENBQUQsQ0FBVCxDQUFhekMsTUFEWiw0Q0FHSHVKLE9BSEcsRUFHTyxDQUFDbkksU0FBUyxDQUFDcUIsQ0FBRCxDQUFULENBQWF6QyxNQUFiLENBQW9CdUosT0FBcEIsQ0FIUjtBQUhaLFdBU0kySCxFQVZtQjtBQUFBLEtBQWQ7QUFGYjtBQWVELENBckJNO0FBdUJQO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7Ozs7QUFDTyxJQUFNQyxvQkFBb0IsR0FBRyxTQUF2QkEsb0JBQXVCLENBQ2xDL08sS0FEa0MsRUFFbEMwQixNQUZrQyxFQUdyQjtBQUNiO0FBRGEsTUFFTjlGLE1BRk0sR0FFYThGLE1BRmIsQ0FFTjlGLE1BRk07QUFBQSxNQUVFdVIsT0FGRixHQUVhekwsTUFGYixDQUVFeUwsT0FGRixFQUliO0FBQ0E7O0FBQ0EsTUFBTTZCLGFBQWEsR0FBR3BULE1BQU0sR0FDeEJxUix1QkFBdUIsQ0FBQ2pOLEtBQUQsRUFBUTtBQUM3QmtOLElBQUFBLE9BQU8sRUFBRTtBQUFDdFIsTUFBQUEsTUFBTSxFQUFOQSxNQUFEO0FBQVN1UixNQUFBQSxPQUFPLEVBQVBBO0FBQVQ7QUFEb0IsR0FBUixDQURDLEdBSXhCbk4sS0FKSjtBQU1BLE1BQU05QixRQUFRLEdBQUcsb0JBQVF3RCxNQUFNLENBQUN4RCxRQUFmLENBQWpCO0FBRUEsTUFBTStRLGNBQWMsR0FBRy9RLFFBQVEsQ0FBQ2tPLE1BQVQsRUFDckI7QUFDQSxZQUFDQyxJQUFEO0FBQUEscUZBQThCLEVBQTlCO0FBQUEsNkJBQVFzQixJQUFSO0FBQUEsUUFBUUEsSUFBUiw0QkFBZSxFQUFmO0FBQUEsUUFBc0J1QixJQUF0Qjs7QUFBQSwyQ0FDSzdDLElBREwsR0FFTTtBQUFvQnNCLE1BQUFBLElBQUksRUFBSkE7QUFBcEIsT0FBNkJ1QixJQUE3QixHQUFvQ2xQLEtBQUssQ0FBQzlCLFFBQTFDLEtBQXVELEVBRjdEO0FBQUEsR0FGcUIsRUFNckIsRUFOcUIsQ0FBdkIsQ0FkYSxDQXVCYjs7QUFDQSxNQUFNb1AsV0FBVyxtQ0FDWjBCLGFBRFk7QUFFZjlRLElBQUFBLFFBQVEsRUFBRSwwQ0FBcUI4USxhQUFyQixFQUFvQ0MsY0FBcEM7QUFGSyxJQUFqQixDQXhCYSxDQTZCYjs7O0FBQ0EsTUFBTUUsWUFBWSxHQUFHblAsS0FBSyxDQUFDTCxPQUFOLENBQWNzRixNQUFkLENBQXFCLFVBQUFtSyxDQUFDO0FBQUEsV0FBSUEsQ0FBQyxDQUFDQyxnQkFBTjtBQUFBLEdBQXRCLENBQXJCO0FBQ0EsTUFBTUMsY0FBYyxHQUFHdFAsS0FBSyxDQUFDTCxPQUFOLENBQWNzRixNQUFkLENBQXFCLFVBQUFtSyxDQUFDO0FBQUEsV0FBSSxDQUFDRCxZQUFZLENBQUMvSixRQUFiLENBQXNCZ0ssQ0FBdEIsQ0FBTDtBQUFBLEdBQXRCLENBQXZCO0FBRUEsTUFBTTdHLFVBQVUsR0FBR3BILE1BQU0sQ0FBQ0MsSUFBUCxDQUFZNk4sY0FBWixDQUFuQjtBQUNBLE1BQU1NLGlCQUFpQixHQUFHO0FBQ3hCaEgsSUFBQUEsVUFBVSxFQUFWQSxVQUR3QjtBQUV4QjRFLElBQUFBLE9BQU8sRUFBUEEsT0FGd0I7QUFHeEJnQyxJQUFBQSxZQUFZLEVBQVpBO0FBSHdCLEdBQTFCO0FBTUEsU0FBT0ssbUJBQW1CLENBQUNsQyxXQUFELEVBQWM7QUFBQzNOLElBQUFBLE9BQU8sRUFBRTJQLGNBQVY7QUFBMEJDLElBQUFBLGlCQUFpQixFQUFqQkE7QUFBMUIsR0FBZCxDQUExQjtBQUNELENBNUNNO0FBOENQO0FBQ0E7QUFDQTs7Ozs7QUFDTyxTQUFTQyxtQkFBVCxDQUNMeFAsS0FESyxFQUVMMEIsTUFGSyxFQU1LO0FBQUEsTUFDSC9CLE9BREcsR0FDMkIrQixNQUQzQixDQUNIL0IsT0FERztBQUFBLE1BQ000UCxpQkFETixHQUMyQjdOLE1BRDNCLENBQ002TixpQkFETixFQUdWOztBQUNBLE1BQU1FLGdCQUFnQixHQUFHLDBDQUN2QnpQLEtBRHVCLGtDQUdsQnhDLGlCQUhrQixHQUlsQndDLEtBQUssQ0FBQ2dOLFlBSlksR0FNdkJyTixPQU51QixFQU92QjtBQUNBNFAsRUFBQUEsaUJBUnVCLENBQXpCLENBSlUsQ0FlVjtBQUNBOztBQUNBLFNBQU9FLGdCQUFnQixDQUFDQyxTQUFqQixHQUNIQyxnQkFBZ0IsQ0FBQ0YsZ0JBQWdCLENBQUNuQyxXQUFsQixFQUErQmlDLGlCQUEvQixDQURiLEdBRUhFLGdCQUFnQixDQUFDbkMsV0FGckI7QUFHRDtBQUVEO0FBQ0E7QUFDQTs7O0FBQ0EsU0FBU3FDLGdCQUFULENBQTBCckMsV0FBMUIsRUFBaURpQyxpQkFBakQsRUFBaUc7QUFBQSxNQUN4RmhILFVBRHdGLEdBQ25EZ0gsaUJBRG1ELENBQ3hGaEgsVUFEd0Y7QUFBQSxNQUM1RTRFLE9BRDRFLEdBQ25Eb0MsaUJBRG1ELENBQzVFcEMsT0FENEU7QUFBQSxNQUNuRWdDLFlBRG1FLEdBQ25ESSxpQkFEbUQsQ0FDbkVKLFlBRG1FO0FBRS9GLE1BQU1qRixVQUFVLEdBQUdvRCxXQUFXLENBQUN0UCxPQUFaLENBQW9CaUgsTUFBcEIsQ0FBMkIsVUFBQUUsQ0FBQztBQUFBLFdBQzdDQSxDQUFDLENBQUNoRCxNQUFGLENBQVNILElBQVQsQ0FBYyxVQUFBNE4sT0FBTztBQUFBLGFBQUlySCxVQUFVLENBQUNuRCxRQUFYLENBQW9Cd0ssT0FBcEIsQ0FBSjtBQUFBLEtBQXJCLENBRDZDO0FBQUEsR0FBNUIsQ0FBbkI7QUFHQSxNQUFNQyxlQUF5QixHQUFHLHlCQUNoQzNGLFVBQVUsQ0FBQ2tDLE1BQVgsQ0FBa0IsVUFBQ0MsSUFBRCxFQUFPbEgsQ0FBUDtBQUFBLHlEQUFpQmtILElBQWpCLHVDQUEwQmxILENBQUMsQ0FBQ2hELE1BQTVCO0FBQUEsR0FBbEIsRUFBdUQsRUFBdkQsQ0FEZ0MsQ0FBbEM7QUFHQSxNQUFNMk4sU0FBUyxHQUFHdkgsVUFBVSxDQUFDOUgsTUFBWCxHQUFvQixDQUF0QztBQUVBLE1BQUlzUCxTQUFTLEdBQUcsQ0FBQ0QsU0FBRCxHQUNaeEMsV0FBVyxDQUFDMVAsTUFBWixDQUFtQnFILE1BQW5CLENBQTBCLFVBQUFoRCxDQUFDO0FBQUEsV0FBSUEsQ0FBQyxDQUFDckcsTUFBRixDQUFTdUcsTUFBVCxJQUFtQm9HLFVBQVUsQ0FBQ25ELFFBQVgsQ0FBb0JuRCxDQUFDLENBQUNyRyxNQUFGLENBQVN1RyxNQUE3QixDQUF2QjtBQUFBLEdBQTNCLENBRFksR0FFWixFQUZKO0FBSUEsTUFBTThNLGNBQWMsR0FBRzFHLFVBQVUsQ0FBQzZELE1BQVgsQ0FDckIsVUFBQ0MsSUFBRCxFQUFPNVEsRUFBUDtBQUFBLDJDQUNLNFEsSUFETCw0Q0FFRzVRLEVBRkgsRUFFUTZSLFdBQVcsQ0FBQ3BQLFFBQVosQ0FBcUJ6QyxFQUFyQixDQUZSO0FBQUEsR0FEcUIsRUFLckIsRUFMcUIsQ0FBdkI7O0FBUUEsTUFBSSxDQUFDc1UsU0FBUyxDQUFDdFAsTUFBWCxJQUFxQixDQUFDME0sT0FBTyxJQUFJLEVBQVosRUFBZ0I2QyxnQkFBaEIsS0FBcUMsS0FBOUQsRUFBcUU7QUFDbkU7QUFDQSxRQUFNM0osTUFBTSxHQUFHNEosZ0JBQWdCLENBQUMzQyxXQUFELEVBQWMyQixjQUFkLENBQS9CO0FBQ0EzQixJQUFBQSxXQUFXLEdBQUdqSCxNQUFNLENBQUNyRyxLQUFyQjtBQUNBK1AsSUFBQUEsU0FBUyxHQUFHMUosTUFBTSxDQUFDMEosU0FBbkI7QUFDRDs7QUFFRCxNQUFJekMsV0FBVyxDQUFDdE8sU0FBWixDQUFzQnlCLE1BQTFCLEVBQWtDO0FBQ2hDO0FBQ0FzUCxJQUFBQSxTQUFTLEdBQUd6QyxXQUFXLENBQUMxUCxNQUFaLENBQW1CcUgsTUFBbkIsQ0FDVixVQUFBaEQsQ0FBQztBQUFBLGFBQUlBLENBQUMsQ0FBQ3JHLE1BQUYsQ0FBU3VHLE1BQVQsSUFBbUJvRyxVQUFVLENBQUNuRCxRQUFYLENBQW9CbkQsQ0FBQyxDQUFDckcsTUFBRixDQUFTdUcsTUFBN0IsQ0FBdkI7QUFBQSxLQURTLENBQVo7QUFHQW1MLElBQUFBLFdBQVcsbUNBQ05BLFdBRE07QUFFVHRPLE1BQUFBLFNBQVMsRUFBRSxtQ0FBdUJzTyxXQUFXLENBQUN0TyxTQUFuQyxFQUE4QytRLFNBQTlDO0FBRkYsTUFBWDtBQUlELEdBdEM4RixDQXdDL0Y7OztBQUNBeEgsRUFBQUEsVUFBVSxDQUFDbEgsT0FBWCxDQUFtQixVQUFBYyxNQUFNLEVBQUk7QUFDM0IsUUFBTStOLGFBQWEsR0FBRzVDLFdBQVcsQ0FBQy9PLGlCQUFaLENBQThCL0MsT0FBOUIsQ0FBc0NJLE1BQXRDLENBQTZDQyxZQUE3QyxDQUEwRHNHLE1BQTFELENBQXRCLENBRDJCLENBRTNCOztBQUNBLFFBQ0UsQ0FBQWdMLE9BQU8sU0FBUCxJQUFBQSxPQUFPLFdBQVAsWUFBQUEsT0FBTyxDQUFFZ0Qsa0JBQVQsTUFBZ0MsS0FBaEMsS0FDQyxDQUFDNUosS0FBSyxDQUFDQyxPQUFOLENBQWMwSixhQUFkLENBQUQsSUFBaUMsQ0FBQ0EsYUFBYSxDQUFDelAsTUFEakQsQ0FERixFQUdFO0FBQ0E7QUFDQTZNLE1BQUFBLFdBQVcsR0FBRzhDLGtCQUFrQixDQUFDOUMsV0FBRCxFQUFjMkIsY0FBYyxDQUFDOU0sTUFBRCxDQUE1QixDQUFoQztBQUNEO0FBQ0YsR0FWRDtBQVlBLE1BQU1rTyxlQUFlLEdBQUdQLFNBQVMsR0FDN0IzTyxNQUFNLENBQUNDLElBQVAsQ0FBWWtNLFdBQVcsQ0FBQ3BQLFFBQXhCLENBRDZCLEdBRTdCLHlCQUFLaUQsTUFBTSxDQUFDQyxJQUFQLENBQVk2TixjQUFaLEVBQTRCcUIsTUFBNUIsQ0FBbUNULGVBQW5DLENBQUwsQ0FGSjtBQUlBLE1BQUlVLFlBQVksR0FBR3ZILHdCQUF3QixDQUFDc0UsV0FBRCxFQUFjK0MsZUFBZCxFQUErQmpTLFNBQS9CLENBQTNDLENBekQrRixDQTJEL0Y7QUFDQTs7QUFDQW1TLEVBQUFBLFlBQVksR0FBRzNQLHFCQUFxQixDQUFDMlAsWUFBRCxDQUFwQyxDQTdEK0YsQ0ErRC9GOztBQUNBLFNBQU9wQixZQUFZLElBQUlBLFlBQVksQ0FBQzFPLE1BQWIsR0FBc0IsQ0FBdEMsR0FDSCtPLG1CQUFtQixDQUFDZSxZQUFELEVBQWU7QUFDaEM1USxJQUFBQSxPQUFPLEVBQUV3UCxZQUR1QjtBQUVoQ0ksSUFBQUEsaUJBQWlCLGtDQUFNQSxpQkFBTjtBQUF5QkosTUFBQUEsWUFBWSxFQUFFO0FBQXZDO0FBRmUsR0FBZixDQURoQixHQUtIb0IsWUFMSjtBQU1EO0FBRUQ7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7O0FBQ08sU0FBU0Msb0JBQVQsQ0FDTHhRLEtBREssRUFFTDBCLE1BRkssRUFHSztBQUNWLFNBQU9rTCx5QkFBeUIsQ0FBQzVNLEtBQUQsRUFBUTtBQUFDbUMsSUFBQUEsTUFBTSxFQUFFVCxNQUFNLENBQUNTLE1BQWhCO0FBQXdCcUIsSUFBQUEsS0FBSyxFQUFFO0FBQUM5SCxNQUFBQSxLQUFLLEVBQUVnRyxNQUFNLENBQUNoRztBQUFmO0FBQS9CLEdBQVIsQ0FBaEM7QUFDRDs7QUFFRCxJQUFNK1UsNEJBQTRCLEdBQUcsQ0FBQyxPQUFELEVBQVUsT0FBVixFQUFtQixVQUFuQixDQUFyQztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFDQSxJQUFNQywwQkFBMEIsR0FBRyxTQUE3QkEsMEJBQTZCLENBQUNsTixLQUFELEVBQVF0QixPQUFSLEVBQW9CO0FBQ3JELE1BQU15TyxjQUFjLEdBQUd4UCxNQUFNLENBQUN5UCxPQUFQLENBQWVwTixLQUFmLEVBQXNCNEksTUFBdEIsQ0FBNkIsVUFBQ3lFLEdBQUQsRUFBTUMsS0FBTixFQUFnQjtBQUFBLGlEQUM3Q0EsS0FENkM7QUFBQSxRQUMzRHhQLEdBRDJEO0FBQUEsUUFDdERtRSxLQURzRCxjQUVsRTs7O0FBQ0EsUUFBSSxDQUFDZ0wsNEJBQTRCLENBQUNyTCxRQUE3QixDQUFzQzlELEdBQXRDLENBQUwsRUFBaUQ7QUFDL0MsYUFBT3VQLEdBQVA7QUFDRCxLQUxpRSxDQU9sRTtBQUNBOzs7QUFDQSxRQUFJdlAsR0FBRyxLQUFLLE9BQVIsSUFBbUIsQ0FBQyx1QkFBV21FLEtBQVgsQ0FBeEIsRUFBMkM7QUFDekMsYUFBT29MLEdBQVA7QUFDRCxLQVhpRSxDQWFsRTs7O0FBQ0EsMkNBQVdBLEdBQVgsNENBQWlCdlAsR0FBakIsRUFBdUIsMEJBQWNtRSxLQUFkLElBQXVCLDJCQUFVdkQsT0FBTyxDQUFDWixHQUFELENBQVAsSUFBZ0IsRUFBMUIsRUFBOEJtRSxLQUE5QixDQUF2QixHQUE4REEsS0FBckY7QUFDRCxHQWZzQixFQWVwQixFQWZvQixDQUF2QjtBQWlCQSxTQUFPa0wsY0FBUDtBQUNELENBbkJEO0FBcUJBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7OztBQUNPLFNBQVMvRCx5QkFBVCxDQUNMNU0sS0FESyxFQUVMMEIsTUFGSyxFQUdLO0FBQUEsTUFDSFMsTUFERyxHQUNjVCxNQURkLENBQ0hTLE1BREc7QUFBQSxNQUNLcUIsS0FETCxHQUNjOUIsTUFEZCxDQUNLOEIsS0FETDtBQUFBLE1BRUh0RixRQUZHLEdBRVM4QixLQUZULENBRUg5QixRQUZHO0FBR1YsTUFBTTZTLFFBQVEsR0FBRzdTLFFBQVEsQ0FBQ2lFLE1BQUQsQ0FBekI7O0FBRUEsTUFBSTRPLFFBQUosRUFBYztBQUNaLFFBQU1KLGNBQWMsR0FBR0QsMEJBQTBCLENBQUNsTixLQUFELEVBQVF1TixRQUFSLENBQWpELENBRFksQ0FFWjtBQUNBO0FBQ0E7O0FBQ0EsMkNBQ0svUSxLQURMO0FBRUU5QixNQUFBQSxRQUFRLGtDQUNIQSxRQURHLDRDQUVMaUUsTUFGSyxFQUVJLCtCQUFtQjRPLFFBQW5CLEVBQTZCSixjQUE3QixDQUZKO0FBRlY7QUFPRDs7QUFFRCxTQUFPM1EsS0FBUDtBQUNEO0FBRUQ7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOzs7QUFDTyxTQUFTMk8sdUJBQVQsQ0FDTDNPLEtBREssRUFFTDBCLE1BRkssRUFHRjtBQUFBOztBQUNIO0FBQ0EsTUFBTXNQLGVBQWUsR0FBRyxJQUFJdFAsTUFBTSxDQUFDd0wsT0FBbkM7QUFDQSxNQUFNK0QsU0FBUyw0QkFBR2pSLEtBQUssQ0FBQ2hCLFNBQU4sQ0FBZ0JnUyxlQUFoQixDQUFILDBEQUFHLHNCQUFrQ3BULE1BQXBEO0FBSEcsTUFJSUEsTUFKSixHQUljb0MsS0FKZCxDQUlJcEMsTUFKSixFQU1IOztBQUNBLE1BQU1tUyxTQUFTLEdBQUduUyxNQUFNLENBQUN1QyxHQUFQLENBQVcsVUFBQUYsS0FBSztBQUFBLFdBQ2hDZ1IsU0FBUyxJQUFJLENBQUNBLFNBQVMsQ0FBQ2hSLEtBQUssQ0FBQ3hFLEVBQVAsQ0FBdkIsSUFBcUN3RSxLQUFLLENBQUNyRSxNQUFOLENBQWE4RSxTQUFsRCxHQUNJVCxLQUFLLENBQUM2RCxpQkFBTixDQUF3QjtBQUN0QjtBQUNBcEQsTUFBQUEsU0FBUyxFQUFFO0FBRlcsS0FBeEIsQ0FESixHQUtJVCxLQU40QjtBQUFBLEdBQWhCLENBQWxCLENBUEcsQ0FnQkg7O0FBQ0EseUNBQ0tELEtBREw7QUFFRXBDLElBQUFBLE1BQU0sRUFBRW1TLFNBRlY7QUFHRS9RLElBQUFBLFNBQVMsRUFBRTtBQUhiO0FBS0Q7QUFFRDtBQUNBO0FBQ0E7QUFDQTtBQUNBOzs7QUFDTyxJQUFNa1MsZ0JBQWdCLEdBQUcsU0FBbkJBLGdCQUFtQixDQUM5QmxSLEtBRDhCLEVBRTlCMEIsTUFGOEIsRUFHakI7QUFBQSxNQUNOeVAsS0FETSxHQUNnQ3pQLE1BRGhDLENBQ055UCxLQURNO0FBQUEseUJBQ2dDelAsTUFEaEMsQ0FDQzBQLFFBREQ7QUFBQSxNQUNDQSxRQURELGlDQUNZQyx5QkFEWjs7QUFFYixNQUFJLENBQUNGLEtBQUssQ0FBQzFRLE1BQVgsRUFBbUI7QUFDakIsV0FBT1QsS0FBUDtBQUNEOztBQUVELE1BQU1SLG1CQUFtQixHQUFHK0csS0FBSyxDQUFDK0ssSUFBTixDQUFXSCxLQUFYLEVBQWtCL0UsTUFBbEIsQ0FDMUIsVUFBQ0MsSUFBRCxFQUFPbEgsQ0FBUCxFQUFVOUUsQ0FBVjtBQUFBLFdBQWdCLDZCQUFPa1IsMEJBQTBCLENBQUNwTSxDQUFELEVBQUk5RSxDQUFKLENBQWpDLEVBQXlDZ00sSUFBekMsQ0FBaEI7QUFBQSxHQUQwQixFQUUxQixFQUYwQixDQUE1QjtBQUtBLE1BQU05TSxXQUFXLEdBQUc7QUFDbEJpUyxJQUFBQSxTQUFTLEVBQUUsRUFETztBQUVsQkMsSUFBQUEsV0FBVyxFQUFFTixLQUZLO0FBR2xCQyxJQUFBQSxRQUFRLEVBQVJBO0FBSGtCLEdBQXBCO0FBTUEsTUFBTS9PLFNBQVMsR0FBRyw2QkFBTztBQUFDN0MsSUFBQUEsbUJBQW1CLEVBQW5CQSxtQkFBRDtBQUFzQkQsSUFBQUEsV0FBVyxFQUFYQTtBQUF0QixHQUFQLEVBQTJDUyxLQUEzQyxDQUFsQjtBQUVBLFNBQU8wUixtQkFBbUIsQ0FBQ3JQLFNBQUQsQ0FBMUI7QUFDRCxDQXZCTTtBQXlCUDtBQUNBO0FBQ0E7QUFDQTtBQUNBOzs7OztBQUNPLFNBQVNzUCwwQkFBVCxDQUNMM1IsS0FESyxFQUVMMEIsTUFGSyxFQUdLO0FBQ1YsTUFBSSxDQUFDMUIsS0FBSyxDQUFDVCxXQUFYLEVBQXdCO0FBQ3RCLFdBQU9TLEtBQVA7QUFDRDs7QUFIUyxNQUlINFIsUUFKRyxHQUlvQmxRLE1BSnBCLENBSUhrUSxRQUpHO0FBQUEsTUFJT0osU0FKUCxHQUlvQjlQLE1BSnBCLENBSU84UCxTQUpQO0FBQUEsMkJBS3NCeFIsS0FBSyxDQUFDVCxXQUw1QjtBQUFBLE1BS0hrUyxXQUxHLHNCQUtIQSxXQUxHO0FBQUEsTUFLVUwsUUFMVixzQkFLVUEsUUFMVjtBQU1WLE1BQU1TLGlCQUFpQixHQUFHQyxnQ0FBZ0MsQ0FBQzlSLEtBQUQsRUFBUTtBQUNoRTRSLElBQUFBLFFBQVEsRUFBUkEsUUFEZ0U7QUFFaEVHLElBQUFBLFFBQVEsRUFBRTtBQUFDQyxNQUFBQSxPQUFPLEVBQUUsQ0FBVjtBQUFhQyxNQUFBQSxPQUFPLEVBQUU7QUFBdEI7QUFGc0QsR0FBUixDQUExRCxDQU5VLENBV1Y7O0FBQ0EsTUFBTUMsY0FBYyxHQUFHLDRCQUFNLGFBQU4sRUFBcUIsNkJBQU87QUFBQ1YsSUFBQUEsU0FBUyxFQUFUQTtBQUFELEdBQVAsQ0FBckIsRUFBMENLLGlCQUExQyxDQUF2QjtBQUVBLFNBQU8scUJBQ0xLLGNBREssRUFFTCx3QkFBVyxHQUFYLEVBQWdCL1IsR0FBaEIsQ0FBb0JzUixXQUFXLENBQUNoUixNQUFaLEdBQXFCMFIscUJBQXJCLEdBQW9DO0FBQUEsV0FBTWYsUUFBUSxDQUFDSSxTQUFELENBQWQ7QUFBQSxHQUF4RCxDQUZLLENBQVA7QUFJRCxDLENBRUQ7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7O0FBQ08sU0FBU0UsbUJBQVQsQ0FBNkIxUixLQUE3QixFQUF3RDtBQUM3RCxNQUFJLENBQUNBLEtBQUssQ0FBQ1QsV0FBWCxFQUF3QjtBQUN0QixXQUFPUyxLQUFQO0FBQ0Q7O0FBSDRELE1BSXREeVIsV0FKc0QsR0FJdkN6UixLQUFLLENBQUNULFdBSmlDLENBSXREa1MsV0FKc0Q7O0FBQUEsK0NBS3JCQSxXQUxxQjtBQUFBLE1BS3REVyxJQUxzRDtBQUFBLE1BSzdDQyxvQkFMNkMsMEJBTzdEOzs7QUFDQSxNQUFNaFEsU0FBUyxHQUFHLDRCQUFNLGFBQU4sRUFBcUIsNkJBQU87QUFBQ29QLElBQUFBLFdBQVcsRUFBRVk7QUFBZCxHQUFQLENBQXJCLEVBQWtFclMsS0FBbEUsQ0FBbEI7QUFFQSxNQUFNNlIsaUJBQWlCLEdBQUdDLGdDQUFnQyxDQUFDelAsU0FBRCxFQUFZO0FBQ3BFdVAsSUFBQUEsUUFBUSxFQUFFUSxJQUFJLENBQUNwTixJQURxRDtBQUVwRStNLElBQUFBLFFBQVEsRUFBRTtBQUFDQyxNQUFBQSxPQUFPLEVBQUUsQ0FBVjtBQUFhQyxNQUFBQSxPQUFPLEVBQUU7QUFBdEI7QUFGMEQsR0FBWixDQUExRDtBQVY2RCxNQWV0RHhTLE9BZnNELEdBZTlCTyxLQWY4QixDQWV0RFAsT0Fmc0Q7QUFBQSxNQWU3Q0MsV0FmNkMsR0FlOUJNLEtBZjhCLENBZTdDTixXQWY2QztBQWdCN0QsU0FBTyxxQkFDTG1TLGlCQURLLEVBRUxTLGdCQUFnQixDQUNkRixJQURjLEVBRWQvUCxTQUFTLENBQUM5QyxXQUFWLElBQXlCOEMsU0FBUyxDQUFDOUMsV0FBVixDQUFzQmlTLFNBRmpDLEVBR2QvUixPQUhjLEVBSWRDLFdBSmMsQ0FGWCxDQUFQO0FBU0Q7O0FBRU0sU0FBUzRTLGdCQUFULENBQTBCRixJQUExQixFQUFnQ1osU0FBaEMsRUFBcUY7QUFBQSxNQUExQy9SLE9BQTBDLHVFQUF0QixFQUFzQjtBQUFBLE1BQWxCQyxXQUFrQix1RUFBSixFQUFJO0FBQzFGLFNBQU8sNEJBQWU7QUFBQzBTLElBQUFBLElBQUksRUFBSkEsSUFBRDtBQUFPWixJQUFBQSxTQUFTLEVBQVRBLFNBQVA7QUFBa0IvUixJQUFBQSxPQUFPLEVBQVBBLE9BQWxCO0FBQTJCQyxJQUFBQSxXQUFXLEVBQVhBO0FBQTNCLEdBQWYsRUFBd0Q2UyxLQUF4RCxFQUNMO0FBQ0E7QUFDQSxZQUFBQyxHQUFHO0FBQUEsV0FDRCw0QkFBYztBQUNaQSxNQUFBQSxHQUFHLEVBQUhBLEdBRFk7QUFFWlosTUFBQUEsUUFBUSxFQUFFUSxJQUFJLENBQUNwTixJQUZIO0FBR1pvTSxNQUFBQSxRQUFRLEVBQUUsa0JBQUEvSyxNQUFNO0FBQUEsZUFDZCxpQ0FBbUI7QUFDakJvTSxVQUFBQSxPQUFPLEVBQUVwTSxNQURRO0FBRWpCbUwsVUFBQUEsU0FBUyxFQUFUQTtBQUZpQixTQUFuQixDQURjO0FBQUE7QUFISixLQUFkLENBREM7QUFBQSxHQUhFLEVBY0w7QUFDQSxZQUFBa0IsR0FBRztBQUFBLFdBQUksMkJBQWFOLElBQUksQ0FBQ3BOLElBQWxCLEVBQXdCME4sR0FBeEIsQ0FBSjtBQUFBLEdBZkUsQ0FBUDtBQWlCRDtBQUVEO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7OztBQUNPLFNBQVNDLHlCQUFULENBQ0wzUyxLQURLLEVBRUwwQixNQUZLLEVBR0s7QUFBQSx3QkFDbUJBLE1BQU0sQ0FBQ3dMLE9BRDFCO0FBQUEsTUFDSHVGLE9BREcsbUJBQ0hBLE9BREc7QUFBQSxNQUNNakIsU0FETixtQkFDTUEsU0FETjtBQUdWLE1BQU1LLGlCQUFpQixHQUFHQyxnQ0FBZ0MsQ0FBQzlSLEtBQUQsRUFBUTtBQUNoRTRSLElBQUFBLFFBQVEsRUFBRWEsT0FBTyxDQUFDYixRQUQ4QztBQUVoRUcsSUFBQUEsUUFBUSxFQUFFO0FBQUNDLE1BQUFBLE9BQU8sRUFBRSxDQUFWO0FBQWFDLE1BQUFBLE9BQU8sRUFBRTtBQUF0QjtBQUZzRCxHQUFSLENBQTFEO0FBS0EsU0FBTyxxQkFDTEosaUJBREssRUFFTCwrQkFBa0I7QUFBQ1ksSUFBQUEsT0FBTyxFQUFQQSxPQUFEO0FBQVVqQixJQUFBQSxTQUFTLEVBQVRBO0FBQVYsR0FBbEIsRUFBd0NlLEtBQXhDLENBQ0UsVUFBQWxNLE1BQU07QUFBQSxXQUFJLGtDQUFvQjtBQUFDdUwsTUFBQUEsUUFBUSxFQUFFYSxPQUFPLENBQUNiLFFBQW5CO0FBQTZCSixNQUFBQSxTQUFTLEVBQUVuTDtBQUF4QyxLQUFwQixDQUFKO0FBQUEsR0FEUixFQUVFLFVBQUFxTSxHQUFHO0FBQUEsV0FBSSwyQkFBYUQsT0FBTyxDQUFDYixRQUFyQixFQUErQmMsR0FBL0IsQ0FBSjtBQUFBLEdBRkwsQ0FGSyxDQUFQO0FBT0Q7O0FBRU0sU0FBU0UsYUFBVCxHQUFvRDtBQUFBLE1BQTdCQyxZQUE2Qix1RUFBZCxFQUFjO0FBQUEsTUFBVmQsUUFBVTs7QUFDekQ7QUFDQTtBQUNBLE1BQUksQ0FBQ0EsUUFBRCxJQUFhLENBQUNBLFFBQVEsQ0FBQ0MsT0FBM0IsRUFBb0M7QUFDbEMsV0FBTyxFQUFQO0FBQ0Q7O0FBRUQsU0FBTztBQUNMQSxJQUFBQSxPQUFPLEVBQUVELFFBQVEsQ0FBQ0M7QUFEYixHQUFQO0FBR0Q7QUFFRDtBQUNBO0FBQ0E7QUFDQTtBQUNBOzs7QUFDTyxJQUFNYyxvQkFBb0IsR0FBRyxTQUF2QkEsb0JBQXVCLENBQ2xDOVMsS0FEa0MsVUFLckI7QUFBQSw4QkFGWGtOLE9BRVc7QUFBQSxNQUZEc0YsR0FFQyxrQkFGREEsR0FFQztBQUFBLE1BRklaLFFBRUosa0JBRklBLFFBRUo7QUFBQSxNQUZjRyxRQUVkLGtCQUZjQSxRQUVkO0FBQUEsTUFGd0JnQixXQUV4QixrQkFGd0JBLFdBRXhCO0FBQUEsTUFGcUMzQixRQUVyQyxrQkFGcUNBLFFBRXJDO0FBQ2IsTUFBTVMsaUJBQWlCLEdBQUdDLGdDQUFnQyxDQUFDOVIsS0FBRCxFQUFRO0FBQ2hFNFIsSUFBQUEsUUFBUSxFQUFSQSxRQURnRTtBQUVoRUcsSUFBQUEsUUFBUSxFQUFFYSxhQUFhLENBQUM1UyxLQUFLLENBQUNSLG1CQUFOLENBQTBCb1MsUUFBMUIsQ0FBRCxFQUFzQ0csUUFBdEM7QUFGeUMsR0FBUixDQUExRDtBQUlBLFNBQU8scUJBQ0xGLGlCQURLLEVBRUwseUJBQVlXLEdBQUcsQ0FBQ3pSLElBQUosRUFBWixFQUF3QndSLEtBQXhCLENBQ0Usa0JBQW1CO0FBQUEsUUFBakI5TSxLQUFpQixVQUFqQkEsS0FBaUI7QUFBQSxRQUFWdU4sSUFBVSxVQUFWQSxJQUFVO0FBQ2pCLFdBQU9BLElBQUksR0FDUDVCLFFBQVEsQ0FBQzJCLFdBQUQsQ0FERCxHQUVQLDRCQUFjO0FBQ1pQLE1BQUFBLEdBQUcsRUFBSEEsR0FEWTtBQUVaWixNQUFBQSxRQUFRLEVBQVJBLFFBRlk7QUFHWkcsTUFBQUEsUUFBUSxFQUFFdE0sS0FBSyxDQUFDc00sUUFISjtBQUlaZ0IsTUFBQUEsV0FBVyxFQUFFdE4sS0FKRDtBQUtaMkwsTUFBQUEsUUFBUSxFQUFSQTtBQUxZLEtBQWQsQ0FGSjtBQVNELEdBWEgsRUFZRSxVQUFBc0IsR0FBRztBQUFBLFdBQUksMkJBQWFkLFFBQWIsRUFBdUJjLEdBQXZCLENBQUo7QUFBQSxHQVpMLENBRkssQ0FBUDtBQWlCRCxDQTNCTTtBQTZCUDtBQUNBO0FBQ0E7QUFDQTtBQUNBOzs7OztBQUNPLElBQU1PLG1CQUFtQixHQUFHLFNBQXRCQSxtQkFBc0IsQ0FDakNqVCxLQURpQyxVQUdwQjtBQUFBLE1BRFo0RyxLQUNZLFVBRFpBLEtBQ1k7QUFBQSxNQURMZ0wsUUFDSyxVQURMQSxRQUNLOztBQUNiO0FBQ0FqTCxrQkFBUTJELElBQVIsQ0FBYTFELEtBQWI7O0FBQ0EsTUFBSSxDQUFDNUcsS0FBSyxDQUFDVCxXQUFYLEVBQXdCO0FBQ3RCLFdBQU9TLEtBQVA7QUFDRDs7QUFMWSw0QkFNOEJBLEtBQUssQ0FBQ1QsV0FOcEM7QUFBQSxNQU1Oa1MsV0FOTSx1QkFNTkEsV0FOTTtBQUFBLE1BTU9MLFFBTlAsdUJBTU9BLFFBTlA7QUFBQSxNQU1pQkksU0FOakIsdUJBTWlCQSxTQU5qQjtBQVFiLE1BQU1uUCxTQUFTLEdBQUd5UCxnQ0FBZ0MsQ0FBQzlSLEtBQUQsRUFBUTtBQUN4RDRSLElBQUFBLFFBQVEsRUFBUkEsUUFEd0Q7QUFFeERHLElBQUFBLFFBQVEsRUFBRTtBQUFDbkwsTUFBQUEsS0FBSyxFQUFMQTtBQUFEO0FBRjhDLEdBQVIsQ0FBbEQsQ0FSYSxDQWFiOztBQUNBLFNBQU8scUJBQ0x2RSxTQURLLEVBRUwsd0JBQVcsR0FBWCxFQUFnQmxDLEdBQWhCLENBQW9Cc1IsV0FBVyxDQUFDaFIsTUFBWixHQUFxQjBSLHFCQUFyQixHQUFvQztBQUFBLFdBQU1mLFFBQVEsQ0FBQ0ksU0FBRCxDQUFkO0FBQUEsR0FBeEQsQ0FGSyxDQUFQO0FBSUQsQ0FyQk07QUF1QlA7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7Ozs7QUFDTyxJQUFNMEIscUJBQXFCLEdBQUcsU0FBeEJBLHFCQUF3QixDQUNuQ2xULEtBRG1DLFVBR3RCO0FBQUEsTUFEWm1DLE1BQ1ksVUFEWkEsTUFDWTtBQUNiO0FBQ0EsTUFBTWdSLE9BQU8sR0FBRyxvQkFBUWhSLE1BQVIsQ0FBaEI7QUFFQSxTQUFPZ1IsT0FBTyxDQUFDL0csTUFBUixDQUFlLFVBQUNDLElBQUQsRUFBTzVRLEVBQVA7QUFBQSxXQUFjLDZCQUFpQjRRLElBQWpCLEVBQXVCNVEsRUFBdkIsQ0FBZDtBQUFBLEdBQWYsRUFBeUR1RSxLQUF6RCxDQUFQO0FBQ0QsQ0FSTTtBQVVQO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7Ozs7O0FBQ08sSUFBTW9ULGlCQUFpQixHQUFHLFNBQXBCQSxpQkFBb0IsQ0FDL0JwVCxLQUQrQixFQUUvQjBCLE1BRitCO0FBQUEseUNBSTVCMUIsS0FKNEI7QUFLL0J2QyxJQUFBQSxPQUFPLGtDQUNGdUMsS0FBSyxDQUFDdkMsT0FESixHQUVGaUUsTUFBTSxDQUFDaU0sSUFGTDtBQUx3QjtBQUFBLENBQTFCO0FBVVA7QUFDQTtBQUNBOzs7OztBQUNPLFNBQVNzQyxnQkFBVCxDQUNMalEsS0FESyxFQUVMOUIsUUFGSyxFQUdrQztBQUN2QyxNQUFNbVYsS0FBYyxHQUFHLEVBQXZCO0FBQ0EsTUFBTUMsYUFBYSxHQUFHblMsTUFBTSxDQUFDa04sTUFBUCxDQUFjblEsUUFBZCxFQUF3QmtPLE1BQXhCLENBQStCLFVBQUNDLElBQUQsRUFBZ0JuSyxPQUFoQixFQUE0QjtBQUMvRSxRQUFNcVIsV0FBVyxHQUFHLGtDQUFpQnJSLE9BQWpCLEVBQTBCbEMsS0FBSyxDQUFDYixZQUFoQyxDQUFwQjtBQUNBLFdBQU9vVSxXQUFXLElBQUlBLFdBQVcsQ0FBQzlTLE1BQTNCLEdBQW9DNEwsSUFBSSxDQUFDaUUsTUFBTCxDQUFZaUQsV0FBWixDQUFwQyxHQUErRGxILElBQXRFO0FBQ0QsR0FIcUIsRUFHbkJnSCxLQUhtQixDQUF0QjtBQUtBLFNBQU87QUFDTHJULElBQUFBLEtBQUssa0NBQ0FBLEtBREE7QUFFSHBDLE1BQUFBLE1BQU0sZ0RBQU1vQyxLQUFLLENBQUNwQyxNQUFaLHVDQUF1QjBWLGFBQXZCLEVBRkg7QUFHSHZWLE1BQUFBLFVBQVUsZ0RBRUwseUNBQXdCdVYsYUFBeEIsQ0FGSyx1Q0FHTHRULEtBQUssQ0FBQ2pDLFVBSEQ7QUFIUCxNQURBO0FBVUxnUyxJQUFBQSxTQUFTLEVBQUV1RDtBQVZOLEdBQVA7QUFZRDtBQUVEO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7O0FBQ08sU0FBU2xELGtCQUFULENBQTRCcFEsS0FBNUIsRUFBbUNrQyxPQUFuQyxFQUE0QztBQUNqRCxNQUFNZ08sYUFBYSxHQUFHLHdFQUNqQmhPLE9BRGlCO0FBRXBCcEQsSUFBQUEsa0JBQWtCLEVBQUVrQixLQUFLLENBQUNsQjtBQUZOLEtBQXRCOztBQUlBLE1BQU0wVSxNQUFNLG1DQUNQeFQsS0FBSyxDQUFDekIsaUJBQU4sQ0FBd0IvQyxPQUF4QixDQUFnQ0ksTUFBaEMsQ0FBdUNDLFlBRGhDLEdBRVBxVSxhQUZPLENBQVo7O0FBS0EsU0FBTyxnQkFBSSxDQUFDLG1CQUFELEVBQXNCLFNBQXRCLEVBQWlDLFFBQWpDLEVBQTJDLGNBQTNDLENBQUosRUFBZ0VzRCxNQUFoRSxFQUF3RXhULEtBQXhFLENBQVA7QUFDRDs7QUFFTSxTQUFTdVIsMEJBQVQsQ0FBb0NhLElBQXBDLEVBQTBDcUIsS0FBMUMsRUFBaUQ7QUFDdEQsTUFBTTdCLFFBQVEsR0FBR1EsSUFBSSxDQUFDcE4sSUFBTCw0QkFBOEJ5TyxLQUE5QixDQUFqQjtBQUNBLDhDQUNHN0IsUUFESCxFQUNjO0FBQ1Y7QUFDQUksSUFBQUEsT0FBTyxFQUFFLENBRkM7QUFHVkMsSUFBQUEsT0FBTyxFQUFFLEVBSEM7QUFJVkwsSUFBQUEsUUFBUSxFQUFSQSxRQUpVO0FBS1ZoTCxJQUFBQSxLQUFLLEVBQUU7QUFMRyxHQURkO0FBU0Q7O0FBRU0sU0FBU2tMLGdDQUFULENBQTBDOVIsS0FBMUMsVUFBdUU7QUFBQSxNQUFyQjRSLFFBQXFCLFVBQXJCQSxRQUFxQjtBQUFBLE1BQVhHLFFBQVcsVUFBWEEsUUFBVztBQUM1RTtBQUNBLFNBQU8sNEJBQU0scUJBQU4sRUFBNkIsNEJBQU1ILFFBQU4sRUFBZ0IsNkJBQU9HLFFBQVAsQ0FBaEIsQ0FBN0IsRUFBZ0UvUixLQUFoRSxDQUFQO0FBQ0Q7QUFDRDtBQUNBO0FBQ0E7OztBQUNPLFNBQVNnSix3QkFBVCxDQUNMaEosS0FESyxFQUVMbUMsTUFGSyxFQUdMOEYsYUFISyxFQUlLO0FBQ1YsTUFBTWtMLE9BQU8sR0FBRyxPQUFPaFIsTUFBUCxLQUFrQixRQUFsQixHQUE2QixDQUFDQSxNQUFELENBQTdCLEdBQXdDQSxNQUF4RDtBQUNBLE1BQU00TixTQUFrQixHQUFHLEVBQTNCO0FBQ0EsTUFBTTFGLFlBQW1CLEdBQUcsRUFBNUI7QUFFQXJLLEVBQUFBLEtBQUssQ0FBQ3BDLE1BQU4sQ0FBYXlELE9BQWIsQ0FBcUIsVUFBQ1UsUUFBRCxFQUFXMUIsQ0FBWCxFQUFpQjtBQUNwQyxRQUFJMEIsUUFBUSxDQUFDbkcsTUFBVCxDQUFnQnVHLE1BQWhCLElBQTBCZ1IsT0FBTyxDQUFDL04sUUFBUixDQUFpQnJELFFBQVEsQ0FBQ25HLE1BQVQsQ0FBZ0J1RyxNQUFqQyxDQUE5QixFQUF3RTtBQUN0RTtBQUNBLFVBQU1DLFFBQVEsR0FDWjZGLGFBQWEsSUFBSUEsYUFBYSxDQUFDeUwsV0FBL0IsR0FDSTNSLFFBREosR0FFSUEsUUFBUSxDQUFDb0UsaUJBQVQsQ0FBMkJuRyxLQUFLLENBQUM5QixRQUFqQyxFQUEyQytKLGFBQTNDLENBSE47O0FBRnNFLGlDQU8zQyxvQ0FBbUI3RixRQUFuQixFQUE2QnBDLEtBQTdCLEVBQW9DQSxLQUFLLENBQUNuQyxTQUFOLENBQWdCd0MsQ0FBaEIsQ0FBcEMsQ0FQMkM7QUFBQSxVQU8vRHhDLFNBUCtELHdCQU8vREEsU0FQK0Q7QUFBQSxVQU9wRG9DLEtBUG9ELHdCQU9wREEsS0FQb0Q7O0FBU3RFOFAsTUFBQUEsU0FBUyxDQUFDNEQsSUFBVixDQUFlMVQsS0FBZjtBQUNBb0ssTUFBQUEsWUFBWSxDQUFDc0osSUFBYixDQUFrQjlWLFNBQWxCO0FBQ0QsS0FYRCxNQVdPO0FBQ0xrUyxNQUFBQSxTQUFTLENBQUM0RCxJQUFWLENBQWU1UixRQUFmO0FBQ0FzSSxNQUFBQSxZQUFZLENBQUNzSixJQUFiLENBQWtCM1QsS0FBSyxDQUFDbkMsU0FBTixDQUFnQndDLENBQWhCLENBQWxCO0FBQ0Q7QUFDRixHQWhCRDs7QUFrQkEsTUFBTUcsUUFBUSxtQ0FDVFIsS0FEUztBQUVacEMsSUFBQUEsTUFBTSxFQUFFbVMsU0FGSTtBQUdabFMsSUFBQUEsU0FBUyxFQUFFd007QUFIQyxJQUFkOztBQU1BLFNBQU83SixRQUFQO0FBQ0Q7O0FBRU0sU0FBU0kscUJBQVQsQ0FBbURaLEtBQW5ELEVBQWdFO0FBQ3JFO0FBQ0EsTUFBTTRULGdCQUFnQixHQUFHNVQsS0FBSyxDQUFDcEMsTUFBTixDQUFhcUgsTUFBYixDQUN2QixVQUFBaEQsQ0FBQztBQUFBLFdBQ0NBLENBQUMsQ0FBQ3JHLE1BQUYsQ0FBUzhFLFNBQVQsSUFDQXVCLENBQUMsQ0FBQ3JHLE1BQUYsQ0FBUytFLFNBRFQsSUFFQXNCLENBQUMsQ0FBQ3JHLE1BQUYsQ0FBUytFLFNBQVQsQ0FBbUJoRixPQUZuQixJQUdBO0FBQ0E0SyxJQUFBQSxLQUFLLENBQUNDLE9BQU4sQ0FBY3ZFLENBQUMsQ0FBQzRSLGVBQWhCLENBTEQ7QUFBQSxHQURzQixDQUF6Qjs7QUFTQSxNQUFJLENBQUNELGdCQUFnQixDQUFDblQsTUFBdEIsRUFBOEI7QUFDNUIsMkNBQ0tULEtBREw7QUFFRVgsTUFBQUEsZUFBZSxrQ0FDVlcsS0FBSyxDQUFDWCxlQURJO0FBRWI3QyxRQUFBQSxNQUFNLEVBQUUsSUFGSztBQUdiTSxRQUFBQSxpQkFBaUIsRUFBRTtBQUhOO0FBRmpCO0FBUUQ7O0FBRUQsTUFBTWdYLFlBQThCLEdBQUdGLGdCQUFnQixDQUFDeEgsTUFBakIsQ0FDckMsVUFBQ0MsSUFBRCxFQUFPcE0sS0FBUDtBQUFBLFdBQWlCLENBQ2Y7QUFDQThULElBQUFBLElBQUksQ0FBQ0MsR0FBTCxDQUFTM0gsSUFBSSxDQUFDLENBQUQsQ0FBYixFQUFrQnBNLEtBQUssQ0FBQzRULGVBQU4sQ0FBc0IsQ0FBdEIsQ0FBbEIsQ0FGZSxFQUdmO0FBQ0FFLElBQUFBLElBQUksQ0FBQ0UsR0FBTCxDQUFTNUgsSUFBSSxDQUFDLENBQUQsQ0FBYixFQUFrQnBNLEtBQUssQ0FBQzRULGVBQU4sQ0FBc0IsQ0FBdEIsQ0FBbEIsQ0FKZSxDQUFqQjtBQUFBLEdBRHFDLEVBT3JDLENBQUNuSixNQUFNLENBQUN3SixRQUFELENBQVAsRUFBbUIsQ0FBQ0EsUUFBcEIsQ0FQcUMsQ0FBdkM7QUFTQSxNQUFNcFgsaUJBQWlCLEdBQUcsd0NBQTRCZ1gsWUFBNUIsQ0FBMUI7QUFFQSx5Q0FDSzlULEtBREw7QUFFRVgsSUFBQUEsZUFBZSxrQ0FDVlcsS0FBSyxDQUFDWCxlQURJO0FBRWI1QyxNQUFBQSxXQUFXLEVBQUUsc0JBQVV1RCxLQUFLLENBQUNYLGVBQU4sQ0FBc0I1QyxXQUFoQyxFQUE2Q3FYLFlBQTdDLElBQ1Q5VCxLQUFLLENBQUNYLGVBQU4sQ0FBc0I1QyxXQURiLEdBRVRxWCxZQUFZLENBQUMsQ0FBRCxDQUpIO0FBS2J0WCxNQUFBQSxNQUFNLEVBQUVzWCxZQUxLO0FBTWJoWCxNQUFBQSxpQkFBaUIsRUFBakJBO0FBTmE7QUFGakI7QUFXRDtBQUVEO0FBQ0E7QUFDQTtBQUNBOzs7QUFDTyxJQUFNcVgsb0JBQW9CLEdBQUcsU0FBdkJBLG9CQUF1QixDQUNsQ25VLEtBRGtDO0FBQUEsTUFFakM5QyxJQUZpQyxVQUVqQ0EsSUFGaUM7QUFBQSx5Q0FJL0I4QyxLQUorQjtBQUtsQ1YsSUFBQUEsTUFBTSxrQ0FDRFUsS0FBSyxDQUFDVixNQURMO0FBRUpwQyxNQUFBQSxJQUFJLEVBQUpBLElBRkk7QUFHSkksTUFBQUEsZUFBZSxFQUFFO0FBSGI7QUFMNEI7QUFBQSxDQUE3QixDLENBWVA7O0FBQ0E7QUFDQTtBQUNBO0FBQ0E7Ozs7O0FBQ08sU0FBUzhXLGtCQUFULENBQ0xwVSxLQURLLFVBR0s7QUFBQSwrQkFEVDNDLFFBQ1M7QUFBQSxNQURUQSxRQUNTLGdDQURFLEVBQ0Y7QUFDVixNQUFNZ1gsV0FBVyxHQUFHaFgsUUFBUSxDQUFDb0QsTUFBVCxJQUFtQnBELFFBQVEsQ0FBQ0EsUUFBUSxDQUFDb0QsTUFBVCxHQUFrQixDQUFuQixDQUEvQzs7QUFFQSxNQUFNRCxRQUFRLG1DQUNUUixLQURTO0FBRVpWLElBQUFBLE1BQU0sa0NBQ0RVLEtBQUssQ0FBQ1YsTUFETDtBQUVKO0FBQ0FqQyxNQUFBQSxRQUFRLEVBQUVBLFFBQVEsQ0FBQzRILE1BQVQsQ0FBZ0IsVUFBQUUsQ0FBQztBQUFBLGVBQUksQ0FBQyxpQ0FBcUJBLENBQXJCLENBQUw7QUFBQSxPQUFqQixDQUhOO0FBSUpqSSxNQUFBQSxJQUFJLEVBQUVtWCxXQUFXLElBQUlBLFdBQVcsQ0FBQ0MsVUFBWixDQUF1QkMsUUFBdEMsR0FBaURwWCx3QkFBYXFYLElBQTlELEdBQXFFeFUsS0FBSyxDQUFDVixNQUFOLENBQWFwQztBQUpwRjtBQUZNLElBQWQsQ0FIVSxDQWFWOzs7QUFiVSxNQWNISSxlQWRHLEdBY2dCMEMsS0FBSyxDQUFDVixNQWR0QixDQWNIaEMsZUFkRyxFQWdCVjs7QUFDQSxNQUFJLENBQUNBLGVBQUwsRUFBc0I7QUFDcEIsV0FBT2tELFFBQVA7QUFDRCxHQW5CUyxDQXFCVjs7O0FBQ0EsTUFBTWlVLE9BQU8sR0FBR3BYLFFBQVEsQ0FBQzJFLElBQVQsQ0FBYyxVQUFBbUQsQ0FBQztBQUFBLFdBQUlBLENBQUMsQ0FBQzFKLEVBQUYsS0FBUzZCLGVBQWUsQ0FBQzdCLEVBQTdCO0FBQUEsR0FBZixDQUFoQixDQXRCVSxDQXdCVjs7QUFDQSxNQUFNaVosUUFBUSxHQUFHRCxPQUFPLElBQUksaUNBQXFCQSxPQUFyQixDQUE1Qjs7QUFDQSxNQUFJQyxRQUFRLElBQUlELE9BQWhCLEVBQXlCO0FBQ3ZCLFFBQU1FLFlBQVksR0FBRyxpQ0FBcUJGLE9BQXJCLEVBQThCQyxRQUE5QixDQUFyQjtBQUNBLFFBQU1FLFNBQVMsR0FBRzVVLEtBQUssQ0FBQ2hDLE9BQU4sQ0FBY3dFLFNBQWQsQ0FBd0IsVUFBQXFTLEdBQUc7QUFBQSxhQUFJQSxHQUFHLENBQUNwWixFQUFKLEtBQVdpWixRQUFmO0FBQUEsS0FBM0IsQ0FBbEIsQ0FGdUIsQ0FHdkI7O0FBQ0EsV0FBT25OLGdCQUFnQixDQUFDL0csUUFBRCxFQUFXO0FBQ2hDTixNQUFBQSxHQUFHLEVBQUUwVSxTQUQyQjtBQUVoQ3hSLE1BQUFBLElBQUksRUFBRSxPQUYwQjtBQUdoQ3FDLE1BQUFBLEtBQUssRUFBRWtQO0FBSHlCLEtBQVgsQ0FBdkI7QUFLRDs7QUFFRCxTQUFPblUsUUFBUDtBQUNEO0FBRUQ7QUFDQTtBQUNBO0FBQ0E7OztBQUNPLElBQU1zVSx5QkFBeUIsR0FBRyxTQUE1QkEseUJBQTRCLENBQ3ZDOVUsS0FEdUMsVUFHMUI7QUFBQSxNQURaeVUsT0FDWSxVQURaQSxPQUNZO0FBQUEsTUFESE0sZ0JBQ0csVUFESEEsZ0JBQ0c7QUFDYix5Q0FDSy9VLEtBREw7QUFFRVYsSUFBQUEsTUFBTSxrQ0FDRFUsS0FBSyxDQUFDVixNQURMO0FBRUpoQyxNQUFBQSxlQUFlLEVBQUVtWCxPQUZiO0FBR0pNLE1BQUFBLGdCQUFnQixFQUFoQkE7QUFISTtBQUZSO0FBUUQsQ0FaTTtBQWNQO0FBQ0E7QUFDQTtBQUNBOzs7OztBQUNPLFNBQVNDLG9CQUFULENBQ0xoVixLQURLLFVBR0s7QUFBQSxNQURUeVUsT0FDUyxVQURUQSxPQUNTOztBQUNWLE1BQUksQ0FBQ0EsT0FBTCxFQUFjO0FBQ1osV0FBT3pVLEtBQVA7QUFDRDs7QUFFRCxNQUFNUSxRQUFRLG1DQUNUUixLQURTO0FBRVpWLElBQUFBLE1BQU0sa0NBQ0RVLEtBQUssQ0FBQ1YsTUFETDtBQUVKaEMsTUFBQUEsZUFBZSxFQUFFO0FBRmI7QUFGTSxJQUFkOztBQVFBLE1BQUksaUNBQXFCbVgsT0FBckIsQ0FBSixFQUFtQztBQUNqQyxRQUFNRyxTQUFTLEdBQUdwVSxRQUFRLENBQUN4QyxPQUFULENBQWlCd0UsU0FBakIsQ0FBMkIsVUFBQTJDLENBQUM7QUFBQSxhQUFJQSxDQUFDLENBQUMxSixFQUFGLEtBQVMsaUNBQXFCZ1osT0FBckIsQ0FBYjtBQUFBLEtBQTVCLENBQWxCO0FBRUEsV0FBT0csU0FBUyxHQUFHLENBQUMsQ0FBYixHQUFpQjNLLG1CQUFtQixDQUFDekosUUFBRCxFQUFXO0FBQUNOLE1BQUFBLEdBQUcsRUFBRTBVO0FBQU4sS0FBWCxDQUFwQyxHQUFtRXBVLFFBQTFFO0FBQ0QsR0FqQlMsQ0FtQlY7OztBQUNBLE1BQU0ySixTQUFTLG1DQUNWbkssS0FBSyxDQUFDVixNQURJO0FBRWJqQyxJQUFBQSxRQUFRLEVBQUUyQyxLQUFLLENBQUNWLE1BQU4sQ0FBYWpDLFFBQWIsQ0FBc0I0SCxNQUF0QixDQUE2QixVQUFBRSxDQUFDO0FBQUEsYUFBSUEsQ0FBQyxDQUFDMUosRUFBRixLQUFTZ1osT0FBTyxDQUFDaFosRUFBckI7QUFBQSxLQUE5QixDQUZHO0FBR2I2QixJQUFBQSxlQUFlLEVBQUU7QUFISixJQUFmOztBQU1BLHlDQUNLMEMsS0FETDtBQUVFVixJQUFBQSxNQUFNLEVBQUU2SztBQUZWO0FBSUQ7QUFFRDtBQUNBO0FBQ0E7QUFDQTs7O0FBQ08sU0FBUzhLLDRCQUFULENBQ0xqVixLQURLLEVBRUxrTixPQUZLLEVBR0s7QUFBQSxNQUNIak4sS0FERyxHQUNlaU4sT0FEZixDQUNIak4sS0FERztBQUFBLE1BQ0l3VSxPQURKLEdBQ2V2SCxPQURmLENBQ0l1SCxPQURKO0FBRVYsTUFBTUMsUUFBUSxHQUFHLGlDQUFxQkQsT0FBckIsQ0FBakIsQ0FGVSxDQUlWOztBQUNBLE1BQUlHLFNBQUo7QUFDQSxNQUFJbFMsVUFBVSxHQUFHLENBQUN6QyxLQUFLLENBQUN4RSxFQUFQLENBQWpCO0FBQ0EsTUFBSStFLFFBQVEsR0FBR1IsS0FBZixDQVBVLENBUVY7O0FBQ0EsTUFBSTBVLFFBQUosRUFBYztBQUNaRSxJQUFBQSxTQUFTLEdBQUc1VSxLQUFLLENBQUNoQyxPQUFOLENBQWN3RSxTQUFkLENBQXdCLFVBQUEyQyxDQUFDO0FBQUEsYUFBSUEsQ0FBQyxDQUFDMUosRUFBRixLQUFTaVosUUFBYjtBQUFBLEtBQXpCLENBQVo7O0FBRUEsUUFBSSxDQUFDMVUsS0FBSyxDQUFDaEMsT0FBTixDQUFjNFcsU0FBZCxDQUFMLEVBQStCO0FBQzdCO0FBQ0E7QUFDQTtBQUNBLFVBQU1NLGlCQUFpQixtQ0FDbEJULE9BRGtCO0FBRXJCSCxRQUFBQSxVQUFVLGtDQUNMRyxPQUFPLENBQUNILFVBREg7QUFFUkksVUFBQUEsUUFBUSxFQUFFO0FBRkY7QUFGVyxRQUF2Qjs7QUFRQSw2Q0FDSzFVLEtBREw7QUFFRVYsUUFBQUEsTUFBTSxrQ0FDRFUsS0FBSyxDQUFDVixNQURMO0FBRUpqQyxVQUFBQSxRQUFRLGdEQUFNMkMsS0FBSyxDQUFDVixNQUFOLENBQWFqQyxRQUFuQixJQUE2QjZYLGlCQUE3QixFQUZKO0FBR0o1WCxVQUFBQSxlQUFlLEVBQUU0WDtBQUhiO0FBRlI7QUFRRDs7QUFDRCxRQUFNalEsTUFBTSxHQUFHakYsS0FBSyxDQUFDaEMsT0FBTixDQUFjNFcsU0FBZCxDQUFmO0FBeEJZLDBCQXlCVzNQLE1BekJYLENBeUJMa0MsT0F6Qks7QUFBQSxRQXlCTEEsT0F6QkssZ0NBeUJLLEVBekJMO0FBMEJaLFFBQU1nTyxlQUFlLEdBQUdoTyxPQUFPLENBQUMvQixRQUFSLENBQWlCbkYsS0FBSyxDQUFDeEUsRUFBdkIsQ0FBeEI7QUFFQWlILElBQUFBLFVBQVUsR0FBR3lTLGVBQWUsR0FDeEI7QUFDQWhPLElBQUFBLE9BQU8sQ0FBQ2xDLE1BQVIsQ0FBZSxVQUFBaEQsQ0FBQztBQUFBLGFBQUlBLENBQUMsS0FBS2hDLEtBQUssQ0FBQ3hFLEVBQWhCO0FBQUEsS0FBaEIsQ0FGd0IsaURBR3BCMEwsT0FIb0IsSUFHWGxILEtBQUssQ0FBQ3hFLEVBSEssRUFBNUI7QUFJRCxHQWhDRCxNQWdDTztBQUNMO0FBQ0EsUUFBTW1NLFNBQVMsR0FBRyxrQ0FBc0IsRUFBdEIsRUFBMEI2TSxPQUExQixDQUFsQjtBQUNBRyxJQUFBQSxTQUFTLEdBQUc1VSxLQUFLLENBQUNoQyxPQUFOLENBQWN5QyxNQUExQixDQUhLLENBS0w7O0FBQ0FELElBQUFBLFFBQVEsbUNBQ0hSLEtBREc7QUFFTmhDLE1BQUFBLE9BQU8sZ0RBQU1nQyxLQUFLLENBQUNoQyxPQUFaLElBQXFCNEosU0FBckIsRUFGRDtBQUdOdEksTUFBQUEsTUFBTSxrQ0FDRFUsS0FBSyxDQUFDVixNQURMO0FBRUpqQyxRQUFBQSxRQUFRLEVBQUUyQyxLQUFLLENBQUNWLE1BQU4sQ0FBYWpDLFFBQWIsQ0FBc0I0SCxNQUF0QixDQUE2QixVQUFBRSxDQUFDO0FBQUEsaUJBQUlBLENBQUMsQ0FBQzFKLEVBQUYsS0FBU2daLE9BQU8sQ0FBQ2haLEVBQXJCO0FBQUEsU0FBOUIsQ0FGTjtBQUdKNkIsUUFBQUEsZUFBZSxFQUFFc0ssU0FBUyxDQUFDbkM7QUFIdkI7QUFIQSxNQUFSO0FBU0Q7O0FBRUQsU0FBTzhCLGdCQUFnQixDQUFDL0csUUFBRCxFQUFXO0FBQ2hDTixJQUFBQSxHQUFHLEVBQUUwVSxTQUQyQjtBQUVoQ3hSLElBQUFBLElBQUksRUFBRSxTQUYwQjtBQUdoQ3FDLElBQUFBLEtBQUssRUFBRS9DO0FBSHlCLEdBQVgsQ0FBdkI7QUFLRDtBQUVEO0FBQ0E7QUFDQTtBQUNBOzs7QUFDTyxTQUFTMFMsc0JBQVQsQ0FDTHBWLEtBREssVUFHSztBQUFBLE1BRFRtQyxNQUNTLFVBRFRBLE1BQ1M7QUFBQSxNQUREa1QsTUFDQyxVQUREQSxNQUNDO0FBQUEsTUFET25ZLElBQ1AsVUFET0EsSUFDUDtBQUNWLE1BQU1nRixPQUFPLEdBQUdsQyxLQUFLLENBQUM5QixRQUFOLENBQWVpRSxNQUFmLENBQWhCOztBQUNBLE1BQUksQ0FBQ0QsT0FBTCxFQUFjO0FBQ1osV0FBT2xDLEtBQVA7QUFDRDs7QUFDRCxNQUFJc1YsUUFBUSxHQUFHcFksSUFBZjs7QUFDQSxNQUFJLENBQUNvWSxRQUFMLEVBQWU7QUFDYixRQUFNQyxXQUFXLEdBQUcseUJBQUlyVCxPQUFKLEVBQWEsQ0FBQyxZQUFELEVBQWVtVCxNQUFmLENBQWIsQ0FBcEIsQ0FEYSxDQUViOztBQUNBQyxJQUFBQSxRQUFRLEdBQUdDLFdBQVcsR0FDbEJwVSxNQUFNLENBQUNDLElBQVAsQ0FBWW9VLHFCQUFaLEVBQXdCeFQsSUFBeEIsQ0FBNkIsVUFBQW9OLENBQUM7QUFBQSxhQUFJQSxDQUFDLEtBQUttRyxXQUFWO0FBQUEsS0FBOUIsQ0FEa0IsR0FFbEJDLHNCQUFXQyxTQUZmO0FBR0Q7O0FBRUQsTUFBTUMsTUFBTSxHQUFHLGdDQUFvQnhULE9BQXBCLEVBQTZCbVQsTUFBN0IsRUFBcUNDLFFBQXJDLENBQWY7QUFDQSxTQUFPLGdCQUFJLENBQUMsVUFBRCxFQUFhblQsTUFBYixDQUFKLEVBQTBCdVQsTUFBMUIsRUFBa0MxVixLQUFsQyxDQUFQO0FBQ0Q7QUFFRDtBQUNBO0FBQ0E7QUFDQTs7O0FBQ08sU0FBUzJWLHFCQUFULENBQ0wzVixLQURLLFVBR0s7QUFBQSxNQURUbUMsTUFDUyxVQURUQSxNQUNTO0FBQUEsTUFERGtULE1BQ0MsVUFEREEsTUFDQztBQUNWLE1BQU1uVCxPQUFPLEdBQUdsQyxLQUFLLENBQUM5QixRQUFOLENBQWVpRSxNQUFmLENBQWhCOztBQUNBLE1BQUksQ0FBQ0QsT0FBTCxFQUFjO0FBQ1osV0FBT2xDLEtBQVA7QUFDRDs7QUFDRCxNQUFNa0ksVUFBVSxHQUFHLDRCQUFnQmhHLE9BQWhCLEVBQXlCbVQsTUFBekIsQ0FBbkI7QUFFQSxTQUFPLGdCQUFJLENBQUMsVUFBRCxFQUFhbFQsTUFBYixDQUFKLEVBQTBCK0YsVUFBMUIsRUFBc0NsSSxLQUF0QyxDQUFQO0FBQ0Q7QUFFRDtBQUNBO0FBQ0E7QUFDQTtBQUNBOzs7QUFDTyxTQUFTNFYsc0JBQVQsQ0FDTDVWLEtBREssVUFHSztBQUFBLE1BRFRtQyxNQUNTLFVBRFRBLE1BQ1M7QUFBQSxNQUREa1QsTUFDQyxVQUREQSxNQUNDO0FBQ1YsTUFBTW5ULE9BQU8sR0FBR2xDLEtBQUssQ0FBQzlCLFFBQU4sQ0FBZWlFLE1BQWYsQ0FBaEI7O0FBQ0EsTUFBSSxDQUFDRCxPQUFMLEVBQWM7QUFDWixXQUFPbEMsS0FBUDtBQUNEOztBQUNELE1BQU02VixRQUFRLEdBQUczVCxPQUFPLENBQUNxSyxNQUFSLENBQWUvSixTQUFmLENBQXlCLFVBQUEyQyxDQUFDO0FBQUEsV0FBSUEsQ0FBQyxDQUFDSCxJQUFGLEtBQVdxUSxNQUFmO0FBQUEsR0FBMUIsQ0FBakI7O0FBQ0EsTUFBSVEsUUFBUSxHQUFHLENBQWYsRUFBa0I7QUFDaEIsV0FBTzdWLEtBQVA7QUFDRDs7QUFSUyxNQVNIc0MsSUFURyxHQVNLSixPQUFPLENBQUNxSyxNQUFSLENBQWVzSixRQUFmLENBVEwsQ0FTSHZULElBVEc7QUFVVixNQUFNd1QsSUFBSSxHQUFHNVQsT0FBTyxDQUFDNlQsYUFBUixDQUNWNVYsR0FEVSxDQUNOLFVBQUE2VixHQUFHO0FBQUEsV0FBSSw0QkFBZ0JBLEdBQUcsQ0FBQ0MsT0FBSixDQUFZSixRQUFaLENBQWhCLEVBQXVDdlQsSUFBdkMsQ0FBSjtBQUFBLEdBREcsRUFDK0MsSUFEL0MsRUFFVjRULElBRlUsQ0FFTCxJQUZLLENBQWI7QUFJQSxtQ0FBS0osSUFBTDtBQUVBLFNBQU85VixLQUFQO0FBQ0Q7QUFFRDtBQUNBO0FBQ0E7QUFDQTtBQUNBOzs7QUFDTyxTQUFTbVcsNkJBQVQsQ0FDTG5XLEtBREssVUFHSztBQUFBLE1BRFRtQyxNQUNTLFVBRFRBLE1BQ1M7QUFBQSxNQUREaVUsT0FDQyxVQUREQSxPQUNDO0FBQ1YsTUFBTWxVLE9BQU8sR0FBR2xDLEtBQUssQ0FBQzlCLFFBQU4sQ0FBZWlFLE1BQWYsQ0FBaEI7O0FBQ0EsTUFBSSxDQUFDRCxPQUFMLEVBQWM7QUFDWixXQUFPbEMsS0FBUDtBQUNEOztBQUNELE1BQUl1RSxTQUFTLEdBQUdyQyxPQUFPLENBQUNxSyxNQUF4QjtBQUNBcEwsRUFBQUEsTUFBTSxDQUFDQyxJQUFQLENBQVlnVixPQUFaLEVBQXFCL1UsT0FBckIsQ0FBNkIsVUFBQWdVLE1BQU0sRUFBSTtBQUNyQyxRQUFNUSxRQUFRLEdBQUczVCxPQUFPLENBQUNxSyxNQUFSLENBQWUvSixTQUFmLENBQXlCLFVBQUEyQyxDQUFDO0FBQUEsYUFBSUEsQ0FBQyxDQUFDSCxJQUFGLEtBQVdxUSxNQUFmO0FBQUEsS0FBMUIsQ0FBakI7O0FBQ0EsUUFBSVEsUUFBUSxJQUFJLENBQWhCLEVBQW1CO0FBQ2pCLFVBQU1RLGFBQWEsR0FBR0QsT0FBTyxDQUFDZixNQUFELENBQTdCO0FBQ0EsVUFBTXRRLEtBQUssR0FBR1IsU0FBUyxDQUFDc1IsUUFBRCxDQUF2QjtBQUNBdFIsTUFBQUEsU0FBUyxHQUFHLDRCQUFNLDZCQUFPO0FBQUM4UixRQUFBQSxhQUFhLEVBQWJBO0FBQUQsT0FBUCxFQUF3QnRSLEtBQXhCLENBQU4sRUFDVlIsU0FEVSxDQUFaO0FBR0Q7QUFDRixHQVREO0FBV0EsTUFBTTJELFVBQVUsR0FBRywrQkFBbUJoRyxPQUFuQixFQUE0QjtBQUFDcUssSUFBQUEsTUFBTSxFQUFFaEk7QUFBVCxHQUE1QixDQUFuQjtBQUNBLFNBQU8sNEJBQU0sVUFBTixFQUFrQixrRUFBU3BDLE1BQVQsRUFBa0IrRixVQUFsQixFQUFsQixFQUFrRGxJLEtBQWxELENBQVA7QUFDRDtBQUVEO0FBQ0E7QUFDQTs7O0FBQ08sU0FBU3NXLDZCQUFULENBQ0x0VyxLQURLLEVBRUwwQixNQUZLLEVBR0s7QUFDVix5Q0FDSzFCLEtBREw7QUFFRVYsSUFBQUEsTUFBTSxrQ0FDRFUsS0FBSyxDQUFDVixNQURMO0FBRUovQixNQUFBQSxPQUFPLEVBQUUsQ0FBQ3lDLEtBQUssQ0FBQ1YsTUFBTixDQUFhL0I7QUFGbkI7QUFGUjtBQU9EOztBQUVNLFNBQVNnWixtQ0FBVCxDQUNMdlcsS0FESyxVQUdLO0FBQUEsTUFEVEUsR0FDUyxVQURUQSxHQUNTO0FBQUEsTUFESnRFLE1BQ0ksVUFESkEsTUFDSTtBQUNWLE1BQU0rTCxTQUFTLEdBQUczSCxLQUFLLENBQUNoQyxPQUFOLENBQWNrQyxHQUFkLENBQWxCOztBQUNBLE1BQUksQ0FBQ3lILFNBQUwsRUFBZ0I7QUFDZGhCLG9CQUFRQyxLQUFSLG1CQUF5QjFHLEdBQXpCOztBQUNBLFdBQU9GLEtBQVA7QUFDRDs7QUFDRCxNQUFJMkgsU0FBUyxDQUFDckYsSUFBVixLQUFtQmtVLHdCQUFhQyxTQUFwQyxFQUErQztBQUM3QzlQLG9CQUFRQyxLQUFSOztBQUdBLFdBQU81RyxLQUFQO0FBQ0Q7O0FBRUQsTUFBTTBXLE9BQU8sR0FBR0MsbUJBQW1CLENBQUMvYSxNQUFELENBQW5DO0FBRUEsU0FBTyw0QkFBTSxTQUFOLEVBQWlCLDRCQUFNLDZCQUFPOGEsT0FBUCxFQUFnQi9PLFNBQWhCLENBQU4sQ0FBakIsRUFBb0QzSCxLQUFwRCxDQUFQO0FBQ0Q7O0FBRUQsU0FBUzJXLG1CQUFULENBQTZCL2EsTUFBN0IsRUFBcUM7QUFDbkMsTUFBTWdiLE9BQU8sR0FBRyxDQUFDLFlBQUQsRUFBZSxVQUFmLENBQWhCO0FBQ0EsU0FBT3pWLE1BQU0sQ0FBQ0MsSUFBUCxDQUFZeEYsTUFBWixFQUFvQndRLE1BQXBCLENBQTJCLFVBQUNDLElBQUQsRUFBT2pKLElBQVAsRUFBZ0I7QUFDaEQsUUFBSSxDQUFDd1QsT0FBTyxDQUFDeFIsUUFBUixDQUFpQmhDLElBQWpCLENBQUwsRUFBNkI7QUFDM0J1RCxzQkFBUUMsS0FBUiwwRkFDb0Z4RCxJQURwRjs7QUFHQSxhQUFPaUosSUFBUDtBQUNELEtBTitDLENBUWhEOzs7QUFDQUEsSUFBQUEsSUFBSSxDQUFDakosSUFBRCxDQUFKLEdBQWF4SCxNQUFNLENBQUN3SCxJQUFELENBQW5CO0FBQ0EsV0FBT2lKLElBQVA7QUFDRCxHQVhNLEVBV0osRUFYSSxDQUFQO0FBWUQ7QUFDRDtBQUNBO0FBQ0E7OztBQUNPLFNBQVN3SyxrQ0FBVCxDQUNMN1csS0FESyxVQUdLO0FBQUEsTUFEVHBFLE1BQ1MsVUFEVEEsTUFDUzs7QUFDVixNQUFJLENBQUNBLE1BQUwsRUFBYTtBQUNYLFdBQU9vRSxLQUFQO0FBQ0Q7O0FBQ0QsTUFBTTBXLE9BQU8sR0FBR0MsbUJBQW1CLENBQUMvYSxNQUFELENBQW5DO0FBQ0EsU0FBTyw0QkFBTSxpQkFBTixFQUF5Qiw2QkFBTzhhLE9BQVAsQ0FBekIsRUFBMEMxVyxLQUExQyxDQUFQO0FBQ0QsQyxDQUVEO0FBQ0E7QUFDQTs7O0FBQ0EsU0FBUzhXLDhCQUFULENBQXdDclIsS0FBeEMsRUFBb0R0RCxNQUFwRCxFQUFvRTRVLGVBQXBFLEVBQTZGO0FBQUE7O0FBQzNGLE1BQUl4USxLQUFLLENBQUNDLE9BQU4sQ0FBY2YsS0FBZCxDQUFKLEVBQTBCO0FBQ3hCO0FBQ0EsUUFBTXVSLFFBQVEsR0FBR3ZSLEtBQUssQ0FDbkJ0RixHQURjLENBQ1YsVUFBQThXLENBQUM7QUFBQSxhQUFJSCw4QkFBOEIsQ0FBQ0csQ0FBRCxFQUFJOVUsTUFBSixFQUFZNFUsZUFBWixDQUFsQztBQUFBLEtBRFMsRUFFZDlSLE1BRmMsQ0FFUCxVQUFBM0UsQ0FBQztBQUFBLGFBQUlBLENBQUo7QUFBQSxLQUZNLENBQWpCO0FBR0EsV0FBTzBXLFFBQVEsQ0FBQ3ZXLE1BQVQsR0FBa0J1VyxRQUFsQixHQUE2QixJQUFwQztBQUNEOztBQUNELE1BQUksT0FBT3ZSLEtBQUssQ0FBQ3RELE1BQWIsS0FBd0IsUUFBeEIsSUFBb0NzRCxLQUFLLENBQUN0RCxNQUFOLEtBQWlCQSxNQUF6RCxFQUFpRTtBQUMvRDtBQUNBLDJDQUNLc0QsS0FETDtBQUVFdEQsTUFBQUEsTUFBTSxFQUFFNFU7QUFGVjtBQUlELEdBTkQsTUFNTyxJQUFJeFEsS0FBSyxDQUFDQyxPQUFOLENBQWNmLEtBQUssQ0FBQ3RELE1BQXBCLEtBQStCc0QsS0FBSyxDQUFDdEQsTUFBTixDQUFhaUQsUUFBYixDQUFzQmpELE1BQXRCLENBQW5DLEVBQWtFO0FBQ3ZFO0FBQ0EsMkNBQ0tzRCxLQURMO0FBRUV0RCxNQUFBQSxNQUFNLEVBQUVzRCxLQUFLLENBQUN0RCxNQUFOLENBQWFoQyxHQUFiLENBQWlCLFVBQUFHLENBQUM7QUFBQSxlQUFLQSxDQUFDLEtBQUs2QixNQUFOLEdBQWU0VSxlQUFmLEdBQWlDelcsQ0FBdEM7QUFBQSxPQUFsQjtBQUZWO0FBSUQsR0FOTSxNQU1BLElBQUksaUJBQUFtRixLQUFLLENBQUM3SixNQUFOLHdEQUFjdUcsTUFBZCxJQUF3QixtQkFBQXNELEtBQUssQ0FBQzdKLE1BQU4sa0VBQWN1RyxNQUFkLE1BQXlCQSxNQUFyRCxFQUE2RDtBQUNsRTtBQUNBLDJDQUNLc0QsS0FETDtBQUVFN0osTUFBQUEsTUFBTSxrQ0FDRDZKLEtBQUssQ0FBQzdKLE1BREw7QUFFSnVHLFFBQUFBLE1BQU0sRUFBRTRVO0FBRko7QUFGUjtBQU9ELEdBVE0sTUFTQSxJQUFJLHFCQUFTdFIsS0FBVCxLQUFtQkEsS0FBSyxDQUFDbEUsY0FBTixDQUFxQlksTUFBckIsQ0FBdkIsRUFBcUQ7QUFDMUQ7QUFDQSxnREFBUzRVLGVBQVQsRUFBMkJ0UixLQUFLLENBQUN0RCxNQUFELENBQWhDO0FBQ0Q7O0FBRUQsU0FBTyxJQUFQO0FBQ0QsQyxDQUVEOzs7QUFDQSxTQUFTK1UsbUJBQVQsQ0FBNkJ6UixLQUE3QixFQUFvQztBQUFBOztBQUNsQyxNQUFJYyxLQUFLLENBQUNDLE9BQU4sQ0FBY2YsS0FBZCxDQUFKLEVBQTBCO0FBQ3hCO0FBQ0EsUUFBTTBSLFlBQVksR0FBRzFSLEtBQUssQ0FBQ3RGLEdBQU4sQ0FBVStXLG1CQUFWLEVBQStCalMsTUFBL0IsQ0FBc0MsVUFBQTNFLENBQUM7QUFBQSxhQUFJQSxDQUFKO0FBQUEsS0FBdkMsQ0FBckI7QUFDQSxXQUFPNlcsWUFBWSxDQUFDMVcsTUFBYixHQUFzQjBXLFlBQXRCLEdBQXFDLElBQTVDO0FBQ0QsR0FMaUMsQ0FPbEM7OztBQUNBLFNBQU8sQ0FBQTFSLEtBQUssU0FBTCxJQUFBQSxLQUFLLFdBQUwsaUNBQUFBLEtBQUssQ0FBRXlDLFVBQVAsd0VBQW1CeUYsSUFBbkIsQ0FBd0JsUyxFQUF4QixLQUE4QixJQUFyQztBQUNELEMsQ0FFRDs7O0FBQ0EsU0FBUzJiLG1CQUFULENBQTZCcFgsS0FBN0IsRUFBb0NxWCxVQUFwQyxVQUFtRjtBQUFBLE1BQWxDalUsSUFBa0MsVUFBbENBLElBQWtDO0FBQUEsTUFBNUJxSyxXQUE0QixVQUE1QkEsV0FBNEI7QUFBQSxNQUFmNkosWUFBZSxVQUFmQSxZQUFlOztBQUNqRjtBQUNBO0FBQ0EsTUFBSSxDQUFDRCxVQUFMLEVBQWlCO0FBQ2YsV0FBT3JYLEtBQVA7QUFDRDs7QUFDRCxNQUFNdVgsWUFBWSxHQUNoQm5VLElBQUksS0FBSyxRQUFULEdBQ0lpVSxVQUFVLENBQUNqTCxNQUFYLENBQWtCLFVBQUNDLElBQUQsRUFBT21MLFNBQVA7QUFBQSxXQUFxQi9NLGtCQUFrQixDQUFDNEIsSUFBRCxFQUFPO0FBQUM1USxNQUFBQSxFQUFFLEVBQUUrYixTQUFTLENBQUMvYjtBQUFmLEtBQVAsQ0FBdkM7QUFBQSxHQUFsQixFQUFxRnVFLEtBQXJGLENBREosR0FFSXVHLEtBQUssQ0FBQ0MsT0FBTixDQUFjeEcsS0FBSyxDQUFDb0QsSUFBRCxDQUFuQixvQ0FFS3BELEtBRkwsNENBR0dvRCxJQUhILEVBR1VwRCxLQUFLLENBQUNvRCxJQUFELENBQUwsQ0FBWTZCLE1BQVosQ0FBbUIsVUFBQXdTLENBQUM7QUFBQSxXQUFJLENBQUNKLFVBQVUsQ0FBQ3JWLElBQVgsQ0FBZ0IsVUFBQXdWLFNBQVM7QUFBQSxhQUFJQyxDQUFDLENBQUNoYyxFQUFGLEtBQVMrYixTQUFTLENBQUMvYixFQUF2QjtBQUFBLEtBQXpCLENBQUw7QUFBQSxHQUFwQixDQUhWLEtBS0E7QUFDQXVFLEVBQUFBLEtBVE4sQ0FOaUYsQ0FpQmpGOztBQUNBLE1BQU0wWCxVQUFVLHdDQUNiakssV0FEYSxFQUNDNkosWUFBWSxHQUN2QjtBQUNBQSxFQUFBQSxZQUFZLENBQUNDLFlBQUQsRUFBZUYsVUFBZixDQUZXLEdBR3ZCO0FBQ0Y5USxFQUFBQSxLQUFLLENBQUNDLE9BQU4sQ0FBYytRLFlBQVksQ0FBQzlKLFdBQUQsQ0FBMUIsa0RBQ004SixZQUFZLENBQUM5SixXQUFELENBRGxCLHVDQUNvQzRKLFVBRHBDLEtBRUU7QUFDRix1QkFBU0UsWUFBWSxDQUFDOUosV0FBRCxDQUFyQixvQ0FFTzhKLFlBQVksQ0FBQzlKLFdBQUQsQ0FGbkIsR0FHTzRKLFVBSFAsSUFLRUUsWUFBWSxDQUFDOUosV0FBRCxDQWJGLENBQWhCO0FBZ0JBLHlDQUNLOEosWUFETCxHQUVLRyxVQUZMO0FBSUQ7O0FBRUQsU0FBU0MscUJBQVQsQ0FDRTNYLEtBREYsRUFFRW1DLE1BRkYsRUFHRXlWLFdBSEYsRUFJSztBQUNILFNBQU8sK0JBQVksQ0FDakIsNkJBQU9DLHlCQUFQLEVBQWtDO0FBQUMxVixJQUFBQSxNQUFNLEVBQU5BLE1BQUQ7QUFBU3lWLElBQUFBLFdBQVcsRUFBWEE7QUFBVCxHQUFsQyxDQURpQixFQUVqQiw2QkFBTzVMLG9CQUFQLEVBQTZCO0FBQUM3SixJQUFBQSxNQUFNLEVBQU5BO0FBQUQsR0FBN0IsQ0FGaUIsQ0FBWixFQUdKbkMsS0FISSxDQUFQO0FBSUQ7O0FBRU0sU0FBUzhYLDZCQUFULENBQ0w5WCxLQURLLEVBRUxtQyxNQUZLLEVBR0x5VixXQUhLLEVBSUY7QUFBQTs7QUFDSCxNQUFNRyxlQUFlLEdBQUcsdUNBQWtCL1gsS0FBbEIsRUFBeUJBLEtBQUssQ0FBQ0gsTUFBL0IsQ0FBeEI7QUFDQSxNQUFNd0MsU0FBUyxHQUFHc1YscUJBQXFCLENBQUMzWCxLQUFELEVBQVFtQyxNQUFSLEVBQWdCeVYsV0FBaEIsQ0FBdkMsQ0FGRyxDQUdIOztBQUNBLE1BQU1JLGtCQUFrQix1Q0FBT2hZLEtBQUssQ0FBQ2pDLFVBQWIsQ0FBeEIsQ0FKRyxDQU1IOztBQUNBc0UsRUFBQUEsU0FBUyxDQUFDNFYsb0JBQVYsR0FBaUM5VyxNQUFNLENBQUNDLElBQVAsQ0FBWXBCLEtBQUssQ0FBQzlCLFFBQWxCLEVBQTRCaUMsR0FBNUIsQ0FBZ0MsVUFBQUcsQ0FBQztBQUFBLFdBQ2hFQSxDQUFDLEtBQUs2QixNQUFOLEdBQWV5VixXQUFmLEdBQTZCdFgsQ0FEbUM7QUFBQSxHQUFqQyxDQUFqQyxDQVBHLENBV0g7O0FBQ0EsK0JBQUkrQixTQUFTLENBQUN2RSxlQUFkLGtEQUFJLHNCQUEyQjJDLE1BQS9CLEVBQXVDO0FBQUE7O0FBQ3JDO0FBQ0E0QixJQUFBQSxTQUFTLENBQUNwRCxtQkFBViw0QkFBZ0M4WSxlQUFoQyxhQUFnQ0EsZUFBaEMsdUJBQWdDQSxlQUFlLENBQUUvWSxTQUFqRCx5RUFBOEQsRUFBOUQ7QUFDQXFELElBQUFBLFNBQVMsQ0FBQ3RFLFVBQVYsdUNBQTJCaWEsa0JBQTNCO0FBQ0Q7O0FBRUQsU0FBTzNWLFNBQVA7QUFDRDs7QUFFTSxTQUFTd1YseUJBQVQsQ0FDTDdYLEtBREssVUFHRjtBQUFBLE1BREZtQyxNQUNFLFVBREZBLE1BQ0U7QUFBQSxNQURNeVYsV0FDTixVQURNQSxXQUNOO0FBQ0gsTUFBTUcsZUFBZSxHQUFHLHVDQUFrQi9YLEtBQWxCLEVBQXlCQSxLQUFLLENBQUNILE1BQS9CLENBQXhCO0FBRUEsTUFBTXdDLFNBQVMsR0FBR3JDLEtBQUssQ0FBQ0wsT0FBTixDQUFjeU0sTUFBZCxDQUNoQixVQUNFOEwsU0FERixVQUdLO0FBQUEsUUFERjlVLElBQ0UsVUFERkEsSUFDRTtBQUFBLFFBRElxSyxXQUNKLFVBRElBLFdBQ0o7QUFBQSxRQURpQjBLLHVCQUNqQixVQURpQkEsdUJBQ2pCO0FBQUEsUUFEMENDLGtCQUMxQyxVQUQwQ0Esa0JBQzFDO0FBQUEsUUFEOERkLFlBQzlELFVBRDhEQSxZQUM5RDtBQUFBLFFBRDRFZSxhQUM1RSxVQUQ0RUEsYUFDNUU7QUFDSDtBQUNBLFFBQU03VSxLQUFLLEdBQUcsb0JBQVFKLElBQVIsQ0FBZDtBQUNBLFFBQU1rVixZQUFZLEdBQUcsb0JBQVE3SyxXQUFSLENBQXJCO0FBQ0EsUUFBTThLLFVBQVUsR0FBR1IsZUFBZSxHQUFHdlUsS0FBSyxDQUFDckQsR0FBTixDQUFVLFVBQUFzWCxDQUFDO0FBQUEsYUFBSU0sZUFBZSxDQUFDTixDQUFELENBQW5CO0FBQUEsS0FBWCxDQUFILEdBQXdDLEVBQTFFO0FBRUEsUUFBSWUsYUFBYSxHQUFHTixTQUFwQjtBQUNBSyxJQUFBQSxVQUFVLENBQUNsWCxPQUFYLENBQW1CLFVBQUNtVyxTQUFELEVBQVluWCxDQUFaLEVBQWtCO0FBQUE7O0FBQ25DLFVBQU1vWSxhQUFhLEdBQUc7QUFDcEJyVixRQUFBQSxJQUFJLEVBQUVJLEtBQUssQ0FBQ25ELENBQUQsQ0FEUztBQUVwQm9OLFFBQUFBLFdBQVcsRUFBRTZLLFlBQVksQ0FBQ2pZLENBQUQsQ0FGTDtBQUdwQitYLFFBQUFBLGtCQUFrQixFQUFsQkEsa0JBSG9CO0FBSXBCZCxRQUFBQSxZQUFZLEVBQVpBO0FBSm9CLE9BQXRCO0FBT0EsVUFBTW9CLFlBQVksR0FDaEIsQ0FBQVAsdUJBQXVCLFNBQXZCLElBQUFBLHVCQUF1QixXQUF2QixZQUFBQSx1QkFBdUIsQ0FBR1gsU0FBSCxFQUFjclYsTUFBZCxFQUFzQnlWLFdBQXRCLENBQXZCLEtBQ0FkLDhCQUE4QixDQUFDVSxTQUFELEVBQVlyVixNQUFaLEVBQW9CeVYsV0FBcEIsQ0FGaEM7QUFHQVksTUFBQUEsYUFBYSxHQUFHRSxZQUFZLEdBQ3hCQyx1QkFBdUIsQ0FBQ0gsYUFBRCxFQUFnQkUsWUFBaEIsRUFBOEJELGFBQTlCLENBREMsR0FFeEJELGFBRko7O0FBSUEsVUFDRUMsYUFBYSxDQUFDaEwsV0FBZCxLQUE4QnJQLFNBQTlCLDZCQUNBb2EsYUFBYSxDQUFDQyxhQUFhLENBQUNoTCxXQUFmLENBRGIsa0RBQ0Esc0JBQTBDaE4sTUFEMUMsSUFFQTRYLGFBSEYsRUFJRTtBQUNBRyxRQUFBQSxhQUFhLENBQUNILGFBQUQsQ0FBYixHQUErQmIsU0FBUyxDQUFDclgsR0FBVixDQUFjLFVBQUF5WSxJQUFJO0FBQUEsaUJBQUlBLElBQUksQ0FBQ25kLEVBQVQ7QUFBQSxTQUFsQixDQUEvQjtBQUNEO0FBQ0YsS0F0QkQ7QUF3QkEsV0FBTytjLGFBQVA7QUFDRCxHQXBDZSxFQXFDaEJ4WSxLQXJDZ0IsQ0FBbEI7QUF3Q0EsU0FBT3FDLFNBQVA7QUFDRDs7QUFFRCxTQUFTc1csdUJBQVQsQ0FDRTNZLEtBREYsRUFFRTBZLFlBRkYsVUFJRTtBQUFBLE1BREN0VixJQUNELFVBRENBLElBQ0Q7QUFBQSxNQURPcUssV0FDUCxVQURPQSxXQUNQO0FBQUEsTUFEb0IySyxrQkFDcEIsVUFEb0JBLGtCQUNwQjtBQUFBLE1BRHdDZCxZQUN4QyxVQUR3Q0EsWUFDeEM7QUFDQTtBQUNBO0FBQ0EsTUFBSWpWLFNBQVMsR0FBRytVLG1CQUFtQixDQUFDcFgsS0FBRCxFQUFRMFksWUFBUixFQUFzQjtBQUFDdFYsSUFBQUEsSUFBSSxFQUFKQSxJQUFEO0FBQU9xSyxJQUFBQSxXQUFXLEVBQVhBLFdBQVA7QUFBb0I2SixJQUFBQSxZQUFZLEVBQVpBO0FBQXBCLEdBQXRCLENBQW5DO0FBQ0EsTUFBTUgsWUFBWSxHQUFHLENBQUFpQixrQkFBa0IsU0FBbEIsSUFBQUEsa0JBQWtCLFdBQWxCLFlBQUFBLGtCQUFrQixDQUFHTSxZQUFILENBQWxCLEtBQXNDeEIsbUJBQW1CLENBQUN3QixZQUFELENBQTlFOztBQUVBLE1BQUl2QixZQUFKLEVBQWtCO0FBQ2hCOVUsSUFBQUEsU0FBUyxHQUFHLG9CQUFROFUsWUFBUixFQUFzQi9LLE1BQXRCLENBQTZCLFVBQUNDLElBQUQsRUFBT3dNLFdBQVAsRUFBdUI7QUFDOUQ7QUFDQTtBQUNBLGFBQU9sQixxQkFBcUIsQ0FBQ3RMLElBQUQsRUFBT3dNLFdBQVAsRUFBb0JBLFdBQXBCLENBQTVCO0FBQ0QsS0FKVyxFQUlUeFcsU0FKUyxDQUFaO0FBS0Q7O0FBQ0QsU0FBT0EsU0FBUDtBQUNEIiwic291cmNlc0NvbnRlbnQiOlsiLy8gQ29weXJpZ2h0IChjKSAyMDIzIFViZXIgVGVjaG5vbG9naWVzLCBJbmMuXG4vL1xuLy8gUGVybWlzc2lvbiBpcyBoZXJlYnkgZ3JhbnRlZCwgZnJlZSBvZiBjaGFyZ2UsIHRvIGFueSBwZXJzb24gb2J0YWluaW5nIGEgY29weVxuLy8gb2YgdGhpcyBzb2Z0d2FyZSBhbmQgYXNzb2NpYXRlZCBkb2N1bWVudGF0aW9uIGZpbGVzICh0aGUgXCJTb2Z0d2FyZVwiKSwgdG8gZGVhbFxuLy8gaW4gdGhlIFNvZnR3YXJlIHdpdGhvdXQgcmVzdHJpY3Rpb24sIGluY2x1ZGluZyB3aXRob3V0IGxpbWl0YXRpb24gdGhlIHJpZ2h0c1xuLy8gdG8gdXNlLCBjb3B5LCBtb2RpZnksIG1lcmdlLCBwdWJsaXNoLCBkaXN0cmlidXRlLCBzdWJsaWNlbnNlLCBhbmQvb3Igc2VsbFxuLy8gY29waWVzIG9mIHRoZSBTb2Z0d2FyZSwgYW5kIHRvIHBlcm1pdCBwZXJzb25zIHRvIHdob20gdGhlIFNvZnR3YXJlIGlzXG4vLyBmdXJuaXNoZWQgdG8gZG8gc28sIHN1YmplY3QgdG8gdGhlIGZvbGxvd2luZyBjb25kaXRpb25zOlxuLy9cbi8vIFRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlIGFuZCB0aGlzIHBlcm1pc3Npb24gbm90aWNlIHNoYWxsIGJlIGluY2x1ZGVkIGluXG4vLyBhbGwgY29waWVzIG9yIHN1YnN0YW50aWFsIHBvcnRpb25zIG9mIHRoZSBTb2Z0d2FyZS5cbi8vXG4vLyBUSEUgU09GVFdBUkUgSVMgUFJPVklERUQgXCJBUyBJU1wiLCBXSVRIT1VUIFdBUlJBTlRZIE9GIEFOWSBLSU5ELCBFWFBSRVNTIE9SXG4vLyBJTVBMSUVELCBJTkNMVURJTkcgQlVUIE5PVCBMSU1JVEVEIFRPIFRIRSBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSxcbi8vIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFORCBOT05JTkZSSU5HRU1FTlQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRVxuLy8gQVVUSE9SUyBPUiBDT1BZUklHSFQgSE9MREVSUyBCRSBMSUFCTEUgRk9SIEFOWSBDTEFJTSwgREFNQUdFUyBPUiBPVEhFUlxuLy8gTElBQklMSVRZLCBXSEVUSEVSIElOIEFOIEFDVElPTiBPRiBDT05UUkFDVCwgVE9SVCBPUiBPVEhFUldJU0UsIEFSSVNJTkcgRlJPTSxcbi8vIE9VVCBPRiBPUiBJTiBDT05ORUNUSU9OIFdJVEggVEhFIFNPRlRXQVJFIE9SIFRIRSBVU0UgT1IgT1RIRVIgREVBTElOR1MgSU5cbi8vIFRIRSBTT0ZUV0FSRS5cblxuaW1wb3J0IHtjb25zb2xlIGFzIENvbnNvbGV9IGZyb20gJ2dsb2JhbC93aW5kb3cnO1xuaW1wb3J0IHtkaXNhYmxlU3RhY2tDYXB0dXJpbmcsIHdpdGhUYXNrfSBmcm9tICdyZWFjdC1wYWxtL3Rhc2tzJztcbmltcG9ydCBjbG9uZURlZXAgZnJvbSAnbG9kYXNoLmNsb25lZGVlcCc7XG5pbXBvcnQgdW5pcSBmcm9tICdsb2Rhc2gudW5pcSc7XG5pbXBvcnQgZ2V0IGZyb20gJ2xvZGFzaC5nZXQnO1xuaW1wb3J0IHhvciBmcm9tICdsb2Rhc2gueG9yJztcbmltcG9ydCBwaWNrIGZyb20gJ2xvZGFzaC5waWNrJztcbmltcG9ydCBpc0VxdWFsIGZyb20gJ2xvZGFzaC5pc2VxdWFsJztcbmltcG9ydCBjb3B5IGZyb20gJ2NvcHktdG8tY2xpcGJvYXJkJztcbmltcG9ydCBkZWVwbWVyZ2UgZnJvbSAnZGVlcG1lcmdlJztcbi8vIFRhc2tzXG5pbXBvcnQge0xPQURfRklMRV9UQVNLLCBVTldSQVBfVEFTSywgUFJPQ0VTU19GSUxFX0RBVEEsIERFTEFZX1RBU0t9IGZyb20gJ0BrZXBsZXIuZ2wvdGFza3MnO1xuLy8gQWN0aW9uc1xuaW1wb3J0IHtcbiAgYXBwbHlMYXllckNvbmZpZyxcbiAgbGF5ZXJDb25maWdDaGFuZ2UsXG4gIGxheWVyVHlwZUNoYW5nZSxcbiAgbGF5ZXJWaXNDb25maWdDaGFuZ2UsXG4gIGxheWVyVmlzdWFsQ2hhbm5lbENvbmZpZ0NoYW5nZSxcbiAgbG9hZEZpbGVzRXJyLFxuICBsb2FkRmlsZXNTdWNjZXNzLFxuICBsb2FkRmlsZVN0ZXBTdWNjZXNzLFxuICBsb2FkTmV4dEZpbGUsXG4gIG5leHRGaWxlQmF0Y2gsXG4gIFJlY2VpdmVNYXBDb25maWdQYXlsb2FkLFxuICBWaXNTdGF0ZUFjdGlvbnMsXG4gIE1hcFN0YXRlQWN0aW9ucyxcbiAgcHJvY2Vzc0ZpbGVDb250ZW50LFxuICBBY3Rpb25UeXBlc1xufSBmcm9tICdAa2VwbGVyLmdsL2FjdGlvbnMnO1xuXG4vLyBVdGlsc1xuaW1wb3J0IHtcbiAgc2V0LFxuICB0b0FycmF5LFxuICBhcnJheUluc2VydCxcbiAgZ2VuZXJhdGVIYXNoSWQsXG4gIGlzUGxhaW5PYmplY3QsXG4gIGlzT2JqZWN0LFxuICBhZGROZXdMYXllcnNUb1NwbGl0TWFwLFxuICBjb21wdXRlU3BsaXRNYXBMYXllcnMsXG4gIHJlbW92ZUxheWVyRnJvbVNwbGl0TWFwcyxcbiAgaXNSZ2JDb2xvcixcbiAgcGFyc2VGaWVsZFZhbHVlLFxuICBhcHBseUZpbHRlckZpZWxkTmFtZSxcbiAgYXBwbHlGaWx0ZXJzVG9EYXRhc2V0cyxcbiAgZmVhdHVyZVRvRmlsdGVyVmFsdWUsXG4gIGZpbHRlckRhdGFzZXRDUFUsXG4gIEZJTFRFUl9VUERBVEVSX1BST1BTLFxuICBnZW5lcmF0ZVBvbHlnb25GaWx0ZXIsXG4gIGdldERlZmF1bHRGaWx0ZXIsXG4gIGdldEZpbHRlcklkSW5GZWF0dXJlLFxuICBnZXRUaW1lV2lkZ2V0VGl0bGVGb3JtYXR0ZXIsXG4gIGlzSW5SYW5nZSxcbiAgTElNSVRFRF9GSUxURVJfRUZGRUNUX1BST1BTLFxuICB1cGRhdGVGaWx0ZXJEYXRhSWQsXG4gIGdldEZpbHRlclBsb3QsXG4gIGdldERlZmF1bHRGaWx0ZXJQbG90VHlwZVxufSBmcm9tICdAa2VwbGVyLmdsL3V0aWxzJztcblxuLy8gTWVyZ2Vyc1xuaW1wb3J0IHtcbiAgVklTX1NUQVRFX01FUkdFUlMsXG4gIHZhbGlkYXRlTGF5ZXJXaXRoRGF0YSxcbiAgY3JlYXRlTGF5ZXJGcm9tQ29uZmlnLFxuICBzZXJpYWxpemVMYXllcixcbiAgc2VyaWFsaXplVmlzU3RhdGUsXG4gIHBhcnNlTGF5ZXJDb25maWdcbn0gZnJvbSAnLi92aXMtc3RhdGUtbWVyZ2VyJztcbmltcG9ydCB7bWVyZ2VTdGF0ZUZyb21NZXJnZXJzLCBpc1ZhbGlkTWVyZ2VyfSBmcm9tICcuL21lcmdlci1oYW5kbGVyJztcbmltcG9ydCB7TGF5ZXIsIExheWVyQ2xhc3NlcywgTEFZRVJfSURfTEVOR1RIfSBmcm9tICdAa2VwbGVyLmdsL2xheWVycyc7XG5pbXBvcnQge1xuICBFRElUT1JfTU9ERVMsXG4gIFNPUlRfT1JERVIsXG4gIEZJTFRFUl9UWVBFUyxcbiAgRklMVEVSX1ZJRVdfVFlQRVMsXG4gIE1BWF9ERUZBVUxUX1RPT0xUSVBTLFxuICBERUZBVUxUX1RFWFRfTEFCRUwsXG4gIENPTVBBUkVfVFlQRVNcbn0gZnJvbSAnQGtlcGxlci5nbC9jb25zdGFudHMnO1xuaW1wb3J0IHtcbiAgcGlja18sXG4gIG1lcmdlXyxcbiAgc3dhcF8sXG4gIGFwcGx5XyxcbiAgY29tcG9zZV8sXG4gIHJlbW92ZUVsZW1lbnRBdEluZGV4LFxuICBmaWx0ZXJPdXRCeUlkXG59IGZyb20gJy4vY29tcG9zZXItaGVscGVycyc7XG5cbmltcG9ydCBLZXBsZXJHTFNjaGVtYSwge1Zpc1N0YXRlLCBNZXJnZXIsIFBvc3RNZXJnZXJQYXlsb2FkfSBmcm9tICdAa2VwbGVyLmdsL3NjaGVtYXMnO1xuXG5pbXBvcnQge0ZpbHRlciwgSW50ZXJhY3Rpb25Db25maWcsIEFuaW1hdGlvbkNvbmZpZywgRWRpdG9yLCBGaWVsZH0gZnJvbSAnQGtlcGxlci5nbC90eXBlcyc7XG5pbXBvcnQge0xvYWRlcn0gZnJvbSAnQGxvYWRlcnMuZ2wvbG9hZGVyLXV0aWxzJztcblxuaW1wb3J0IHtjYWxjdWxhdGVMYXllckRhdGEsIGZpbmREZWZhdWx0TGF5ZXIsIGdldExheWVyT3JkZXJGcm9tTGF5ZXJzfSBmcm9tICcuL2xheWVyLXV0aWxzJztcbmltcG9ydCB7XG4gIGNvcHlUYWJsZUFuZFVwZGF0ZSxcbiAgRGF0YXNldHMsXG4gIHBpblRhYmxlQ29sdW1ucyxcbiAgc29ydERhdGFzZXRCeUNvbHVtbixcbiAgYXNzaWduR3B1Q2hhbm5lbCxcbiAgc2V0RmlsdGVyR3B1TW9kZSxcbiAgY3JlYXRlTmV3RGF0YUVudHJ5XG59IGZyb20gJ0BrZXBsZXIuZ2wvdGFibGUnO1xuaW1wb3J0IHtmaW5kRmllbGRzVG9TaG93fSBmcm9tICcuL2ludGVyYWN0aW9uLXV0aWxzJztcbmltcG9ydCB7aGFzUHJvcHNUb01lcmdlLCBnZXRQcm9wVmFsdWVUb01lcmdlcn0gZnJvbSAnLi9tZXJnZXItaGFuZGxlcic7XG5pbXBvcnQge21lcmdlRGF0YXNldHNCeU9yZGVyfSBmcm9tICcuL3Zpcy1zdGF0ZS1tZXJnZXInO1xuaW1wb3J0IHtmaXhFZmZlY3RPcmRlcn0gZnJvbSAnQGtlcGxlci5nbC91dGlscyc7XG5pbXBvcnQge2NyZWF0ZURlY2tFZmZlY3RGcm9tQ29uZmlnfSBmcm9tICdAa2VwbGVyLmdsL2VmZmVjdHMnO1xuXG4vLyByZWFjdC1wYWxtXG4vLyBkaXNhYmxlIGNhcHR1cmUgZXhjZXB0aW9uIGZvciByZWFjdC1wYWxtIGNhbGwgdG8gd2l0aFRhc2tcbmRpc2FibGVTdGFja0NhcHR1cmluZygpO1xuXG4vKipcbiAqIFVwZGF0ZXJzIGZvciBgdmlzU3RhdGVgIHJlZHVjZXIuIENhbiBiZSB1c2VkIGluIHlvdXIgcm9vdCByZWR1Y2VyIHRvIGRpcmVjdGx5IG1vZGlmeSBrZXBsZXIuZ2wncyBzdGF0ZS5cbiAqIFJlYWQgbW9yZSBhYm91dCBbVXNpbmcgdXBkYXRlcnNdKC4uL2FkdmFuY2VkLXVzYWdlL3VzaW5nLXVwZGF0ZXJzLm1kKVxuICpcbiAqIEBwdWJsaWNcbiAqIEBleGFtcGxlXG4gKlxuICogaW1wb3J0IGtlcGxlckdsUmVkdWNlciwge3Zpc1N0YXRlVXBkYXRlcnN9IGZyb20gJ2tlcGxlci5nbC9yZWR1Y2Vycyc7XG4gKiAvLyBSb290IFJlZHVjZXJcbiAqIGNvbnN0IHJlZHVjZXJzID0gY29tYmluZVJlZHVjZXJzKHtcbiAqICBrZXBsZXJHbDoga2VwbGVyR2xSZWR1Y2VyLFxuICogIGFwcDogYXBwUmVkdWNlclxuICogfSk7XG4gKlxuICogY29uc3QgY29tcG9zZWRSZWR1Y2VyID0gKHN0YXRlLCBhY3Rpb24pID0+IHtcbiAqICBzd2l0Y2ggKGFjdGlvbi50eXBlKSB7XG4gKiAgICBjYXNlICdDTElDS19CVVRUT04nOlxuICogICAgICByZXR1cm4ge1xuICogICAgICAgIC4uLnN0YXRlLFxuICogICAgICAgIGtlcGxlckdsOiB7XG4gKiAgICAgICAgICAuLi5zdGF0ZS5rZXBsZXJHbCxcbiAqICAgICAgICAgIGZvbzoge1xuICogICAgICAgICAgICAgLi4uc3RhdGUua2VwbGVyR2wuZm9vLFxuICogICAgICAgICAgICAgdmlzU3RhdGU6IHZpc1N0YXRlVXBkYXRlcnMuZW5sYXJnZUZpbHRlclVwZGF0ZXIoXG4gKiAgICAgICAgICAgICAgIHN0YXRlLmtlcGxlckdsLmZvby52aXNTdGF0ZSxcbiAqICAgICAgICAgICAgICAge2lkeDogMH1cbiAqICAgICAgICAgICAgIClcbiAqICAgICAgICAgIH1cbiAqICAgICAgICB9XG4gKiAgICAgIH07XG4gKiAgfVxuICogIHJldHVybiByZWR1Y2VycyhzdGF0ZSwgYWN0aW9uKTtcbiAqIH07XG4gKlxuICogZXhwb3J0IGRlZmF1bHQgY29tcG9zZWRSZWR1Y2VyO1xuICovXG4vKiBlc2xpbnQtZGlzYWJsZSBuby11bnVzZWQtdmFycyAqL1xuLy8gQHRzLWlnbm9yZVxuY29uc3QgdmlzU3RhdGVVcGRhdGVycyA9IG51bGw7XG4vKiBlc2xpbnQtZW5hYmxlIG5vLXVudXNlZC12YXJzICovXG5cbmV4cG9ydCBjb25zdCBkZWZhdWx0SW50ZXJhY3Rpb25Db25maWc6IEludGVyYWN0aW9uQ29uZmlnID0ge1xuICB0b29sdGlwOiB7XG4gICAgaWQ6ICd0b29sdGlwJyxcbiAgICBsYWJlbDogJ2ludGVyYWN0aW9ucy50b29sdGlwJyxcbiAgICBlbmFibGVkOiB0cnVlLFxuICAgIGNvbmZpZzoge1xuICAgICAgZmllbGRzVG9TaG93OiB7fSxcbiAgICAgIGNvbXBhcmVNb2RlOiBmYWxzZSxcbiAgICAgIGNvbXBhcmVUeXBlOiBDT01QQVJFX1RZUEVTLkFCU09MVVRFXG4gICAgfVxuICB9LFxuICBnZW9jb2Rlcjoge1xuICAgIGlkOiAnZ2VvY29kZXInLFxuICAgIGxhYmVsOiAnaW50ZXJhY3Rpb25zLmdlb2NvZGVyJyxcbiAgICBlbmFibGVkOiBmYWxzZSxcbiAgICBwb3NpdGlvbjogbnVsbFxuICB9LFxuICBicnVzaDoge1xuICAgIGlkOiAnYnJ1c2gnLFxuICAgIGxhYmVsOiAnaW50ZXJhY3Rpb25zLmJydXNoJyxcbiAgICBlbmFibGVkOiBmYWxzZSxcbiAgICBjb25maWc6IHtcbiAgICAgIC8vIHNpemUgaXMgaW4ga21cbiAgICAgIHNpemU6IDAuNVxuICAgIH1cbiAgfSxcbiAgY29vcmRpbmF0ZToge1xuICAgIGlkOiAnY29vcmRpbmF0ZScsXG4gICAgbGFiZWw6ICdpbnRlcmFjdGlvbnMuY29vcmRpbmF0ZScsXG4gICAgZW5hYmxlZDogZmFsc2UsXG4gICAgcG9zaXRpb246IG51bGxcbiAgfVxufTtcblxuZXhwb3J0IGNvbnN0IERFRkFVTFRfQU5JTUFUSU9OX0NPTkZJRzogQW5pbWF0aW9uQ29uZmlnID0ge1xuICBkb21haW46IG51bGwsXG4gIGN1cnJlbnRUaW1lOiBudWxsLFxuICBzcGVlZDogMSxcbiAgaXNBbmltYXRpbmc6IGZhbHNlLFxuICB0aW1lRm9ybWF0OiBudWxsLFxuICB0aW1lem9uZTogbnVsbCxcbiAgZGVmYXVsdFRpbWVGb3JtYXQ6IG51bGwsXG4gIGhpZGVDb250cm9sOiBmYWxzZSxcbiAgZHVyYXRpb246IG51bGxcbn07XG5cbmV4cG9ydCBjb25zdCBERUZBVUxUX0VESVRPUjogRWRpdG9yID0ge1xuICBtb2RlOiBFRElUT1JfTU9ERVMuRFJBV19QT0xZR09OLFxuICBmZWF0dXJlczogW10sXG4gIHNlbGVjdGVkRmVhdHVyZTogbnVsbCxcbiAgdmlzaWJsZTogdHJ1ZVxufTtcblxuLyoqXG4gKiBEZWZhdWx0IGluaXRpYWwgYHZpc1N0YXRlYFxuICogQG1lbWJlcm9mIHZpc1N0YXRlVXBkYXRlcnNcbiAqIEBjb25zdGFudFxuICogQHB1YmxpY1xuICovXG5leHBvcnQgY29uc3QgSU5JVElBTF9WSVNfU1RBVEU6IFZpc1N0YXRlID0ge1xuICAvLyBtYXAgaW5mb1xuICBtYXBJbmZvOiB7XG4gICAgdGl0bGU6ICcnLFxuICAgIGRlc2NyaXB0aW9uOiAnJ1xuICB9LFxuICAvLyBsYXllcnNcbiAgbGF5ZXJzOiBbXSxcbiAgbGF5ZXJEYXRhOiBbXSxcbiAgbGF5ZXJUb0JlTWVyZ2VkOiBbXSxcbiAgbGF5ZXJPcmRlcjogW10sXG5cbiAgLy8gZmlsdGVyc1xuICBmaWx0ZXJzOiBbXSxcbiAgZmlsdGVyVG9CZU1lcmdlZDogW10sXG5cbiAgLy8gYSBjb2xsZWN0aW9uIG9mIG11bHRpcGxlIGRhdGFzZXRcbiAgZGF0YXNldHM6IHt9LFxuICBlZGl0aW5nRGF0YXNldDogdW5kZWZpbmVkLFxuXG4gIC8vIGVmZmVjdHNcbiAgZWZmZWN0czogW10sXG4gIGVmZmVjdE9yZGVyOiBbXSxcblxuICBpbnRlcmFjdGlvbkNvbmZpZzogZGVmYXVsdEludGVyYWN0aW9uQ29uZmlnLFxuICBpbnRlcmFjdGlvblRvQmVNZXJnZWQ6IHt9LFxuXG4gIGxheWVyQmxlbmRpbmc6ICdub3JtYWwnLFxuICBvdmVybGF5QmxlbmRpbmc6ICdub3JtYWwnLFxuICBob3ZlckluZm86IHVuZGVmaW5lZCxcbiAgY2xpY2tlZDogdW5kZWZpbmVkLFxuICBtb3VzZVBvczoge30sXG4gIG1heERlZmF1bHRUb29sdGlwczogTUFYX0RFRkFVTFRfVE9PTFRJUFMsXG5cbiAgLy8gdGhpcyBpcyB1c2VkIHdoZW4gdXNlciBzcGxpdCBtYXBzXG4gIHNwbGl0TWFwczogW1xuICAgIC8vIHRoaXMgd2lsbCBjb250YWluIGEgbGlzdCBvZiBvYmplY3RzIHRvXG4gICAgLy8gZGVzY3JpYmUgdGhlIHN0YXRlIG9mIGxheWVyIGF2YWlsYWJpbGl0eSBhbmQgdmlzaWJpbGl0eSBmb3IgZWFjaCBtYXBcbiAgICAvLyBbXG4gICAgLy8gICB7XG4gICAgLy8gICAgICBsYXllcnM6IHtsYXllcl9pZDogdHJ1ZSB8IGZhbHNlfVxuICAgIC8vICAgfVxuICAgIC8vIF1cbiAgXSxcbiAgc3BsaXRNYXBzVG9CZU1lcmdlZDogW10sXG4gIGlzTWVyZ2luZ0RhdGFzZXRzOiB7fSxcbiAgLy8gZGVmYXVsdHMgbGF5ZXIgY2xhc3Nlc1xuICBsYXllckNsYXNzZXM6IExheWVyQ2xhc3NlcyxcblxuICAvLyBkZWZhdWx0IGFuaW1hdGlvblxuICAvLyB0aW1lIGluIHVuaXggdGltZXN0YW1wIChtaWxsaXNlY29uZHMpICh0aGUgbnVtYmVyIG9mIHNlY29uZHMgc2luY2UgdGhlIFVuaXggRXBvY2gpXG4gIGFuaW1hdGlvbkNvbmZpZzogREVGQVVMVF9BTklNQVRJT05fQ09ORklHLFxuXG4gIGVkaXRvcjogREVGQVVMVF9FRElUT1IsXG5cbiAgZmlsZUxvYWRpbmc6IGZhbHNlLFxuICBmaWxlTG9hZGluZ1Byb2dyZXNzOiB7fSxcblxuICBsb2FkZXJzOiBbXSxcbiAgbG9hZE9wdGlvbnM6IHt9LFxuXG4gIC8vIHZpc1N0YXRlTWVyZ2Vyc1xuICBtZXJnZXJzOiBWSVNfU1RBVEVfTUVSR0VSUyxcblxuICAvLyBrZXBsZXIgc2NoZW1hc1xuICBzY2hlbWE6IEtlcGxlckdMU2NoZW1hXG59O1xuXG50eXBlIFVwZGF0ZVN0YXRlV2l0aExheWVyQW5kRGF0YVR5cGUgPSB7XG4gIGxheWVyczogTGF5ZXJbXTtcbiAgbGF5ZXJEYXRhOiBhbnlbXTtcbn07XG5cbi8qKlxuICogVXBkYXRlIHN0YXRlIHdpdGggdXBkYXRlZCBsYXllciBhbmQgbGF5ZXJEYXRhXG4gKlxuICovXG5leHBvcnQgZnVuY3Rpb24gdXBkYXRlU3RhdGVXaXRoTGF5ZXJBbmREYXRhPFMgZXh0ZW5kcyBVcGRhdGVTdGF0ZVdpdGhMYXllckFuZERhdGFUeXBlPihcbiAgc3RhdGU6IFMsXG4gIHtsYXllckRhdGEsIGxheWVyLCBpZHh9OiB7bGF5ZXJEYXRhPzogYW55OyBsYXllcjogTGF5ZXI7IGlkeDogbnVtYmVyfVxuKTogUyB7XG4gIHJldHVybiB7XG4gICAgLi4uc3RhdGUsXG4gICAgbGF5ZXJzOiBzdGF0ZS5sYXllcnMubWFwKChseXIsIGkpID0+IChpID09PSBpZHggPyBsYXllciA6IGx5cikpLFxuICAgIGxheWVyRGF0YTogbGF5ZXJEYXRhXG4gICAgICA/IHN0YXRlLmxheWVyRGF0YS5tYXAoKGQsIGkpID0+IChpID09PSBpZHggPyBsYXllckRhdGEgOiBkKSlcbiAgICAgIDogc3RhdGUubGF5ZXJEYXRhXG4gIH07XG59XG5cbmV4cG9ydCBmdW5jdGlvbiB1cGRhdGVTdGF0ZU9uTGF5ZXJWaXNpYmlsaXR5Q2hhbmdlPFMgZXh0ZW5kcyBWaXNTdGF0ZT4oc3RhdGU6IFMsIGxheWVyOiBMYXllcik6IFMge1xuICBsZXQgbmV3U3RhdGUgPSBzdGF0ZTtcbiAgaWYgKHN0YXRlLnNwbGl0TWFwcy5sZW5ndGgpIHtcbiAgICBuZXdTdGF0ZSA9IHtcbiAgICAgIC4uLnN0YXRlLFxuICAgICAgc3BsaXRNYXBzOiBsYXllci5jb25maWcuaXNWaXNpYmxlXG4gICAgICAgID8gYWRkTmV3TGF5ZXJzVG9TcGxpdE1hcChzdGF0ZS5zcGxpdE1hcHMsIGxheWVyKVxuICAgICAgICA6IHJlbW92ZUxheWVyRnJvbVNwbGl0TWFwcyhzdGF0ZS5zcGxpdE1hcHMsIGxheWVyKVxuICAgIH07XG4gIH1cblxuICBpZiAobGF5ZXIuY29uZmlnLmFuaW1hdGlvbi5lbmFibGVkKSB7XG4gICAgbmV3U3RhdGUgPSB1cGRhdGVBbmltYXRpb25Eb21haW4oc3RhdGUpO1xuICB9XG5cbiAgcmV0dXJuIG5ld1N0YXRlO1xufVxuXG4vKipcbiAqIENvbXBhcmVzIHR3byBvYmplY3RzIChvciBhcnJheXMpIGFuZCByZXR1cm5zIGEgbmV3IG9iamVjdCB3aXRoIG9ubHkgdGhlXG4gKiBwcm9wZXJ0aWVzIHRoYXQgaGF2ZSBjaGFuZ2VkIGJldHdlZW4gdGhlIHR3byBvYmplY3RzLlxuICovXG5mdW5jdGlvbiBwaWNrQ2hhbmdlZFByb3BzPFQ+KHByZXY6IFQsIG5leHQ6IFQpOiBQYXJ0aWFsPFQ+IHtcbiAgY29uc3QgY2hhbmdlZFByb3BzOiBQYXJ0aWFsPFQ+ID0ge307XG4gIGNvbnN0IHBpY2tQcm9wc09mID0gb2JqID0+IHtcbiAgICBPYmplY3Qua2V5cyhvYmopLmZvckVhY2goa2V5ID0+IHtcbiAgICAgIGlmICghY2hhbmdlZFByb3BzLmhhc093blByb3BlcnR5KGtleSkgJiYgIWlzRXF1YWwocHJldltrZXldLCBuZXh0W2tleV0pKSB7XG4gICAgICAgIGNoYW5nZWRQcm9wc1trZXldID0gbmV4dFtrZXldO1xuICAgICAgfVxuICAgIH0pO1xuICB9O1xuICBwaWNrUHJvcHNPZihwcmV2KTtcbiAgcGlja1Byb3BzT2YobmV4dCk7XG4gIHJldHVybiBjaGFuZ2VkUHJvcHM7XG59XG5cbmNvbnN0IFZJU1VBTF9DSEFOTkVMX1BST1BfVFlQRVMgPSBbJ2ZpZWxkJywgJ3NjYWxlJywgJ2RvbWFpbicsICdhZ2dyZWdhdGlvbiddO1xuXG4vKipcbiAqIEFwcGx5IGxheWVyIGNvbmZpZ1xuICogQG1lbWJlcm9mIHZpc1N0YXRlVXBkYXRlcnNcbiAqIEByZXR1cm5zIG5leHRTdGF0ZVxuICovXG4vLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgY29tcGxleGl0eSwgbWF4LXN0YXRlbWVudHNcbmV4cG9ydCBmdW5jdGlvbiBhcHBseUxheWVyQ29uZmlnVXBkYXRlcihcbiAgc3RhdGU6IFZpc1N0YXRlLFxuICBhY3Rpb246IFZpc1N0YXRlQWN0aW9ucy5BcHBseUxheWVyQ29uZmlnVXBkYXRlckFjdGlvblxuKTogVmlzU3RhdGUge1xuICBjb25zdCB7b2xkTGF5ZXJJZCwgbmV3TGF5ZXJDb25maWcsIGxheWVySW5kZXh9ID0gYWN0aW9uO1xuICBjb25zdCBuZXdQYXJzZWRMYXllciA9XG4gICAgLy8gd2lsbCBtb3ZlIHZpc3VhbENoYW5uZWxzIHRvIHRoZSBjb25maWcgcHJvcFxuICAgIHBhcnNlTGF5ZXJDb25maWcoc3RhdGUuc2NoZW1hLCBuZXdMYXllckNvbmZpZyk7XG4gIGNvbnN0IG9sZExheWVyID0gc3RhdGUubGF5ZXJzLmZpbmQobCA9PiBsLmlkID09PSBvbGRMYXllcklkKTtcbiAgaWYgKCFvbGRMYXllciB8fCAhbmV3UGFyc2VkTGF5ZXIpIHtcbiAgICByZXR1cm4gc3RhdGU7XG4gIH1cbiAgaWYgKGxheWVySW5kZXggIT09IG51bGwgJiYgbGF5ZXJJbmRleCAhPT0gdW5kZWZpbmVkICYmIHN0YXRlLmxheWVyc1tsYXllckluZGV4XSAhPT0gb2xkTGF5ZXIpIHtcbiAgICAvLyBsYXllckluZGV4IGlzIHByb3ZpZGVkLCBidXQgaXQgZG9lc24ndCBtYXRjaCB0aGUgb2xkTGF5ZXJcbiAgICByZXR1cm4gc3RhdGU7XG4gIH1cbiAgY29uc3QgZGF0YXNldCA9IHN0YXRlLmRhdGFzZXRzW25ld1BhcnNlZExheWVyLmNvbmZpZy5kYXRhSWRdO1xuICBpZiAoIWRhdGFzZXQpIHtcbiAgICByZXR1cm4gc3RhdGU7XG4gIH1cbiAgLy8gTWFrZSBzdXJlIHRoZSBsYXllciBpcyB2YWxpZCBhbmQgY29udmVydCBpdCB0byBMYXllclxuICBjb25zdCBuZXdMYXllciA9IHZhbGlkYXRlTGF5ZXJXaXRoRGF0YShkYXRhc2V0LCBuZXdQYXJzZWRMYXllciwgc3RhdGUubGF5ZXJDbGFzc2VzKTtcbiAgaWYgKCFuZXdMYXllcikge1xuICAgIHJldHVybiBzdGF0ZTtcbiAgfVxuXG4gIGxldCBuZXh0U3RhdGUgPSBzdGF0ZTtcblxuICBpZiAobmV3TGF5ZXIudHlwZSAmJiBuZXdMYXllci50eXBlICE9PSBvbGRMYXllci50eXBlKSB7XG4gICAgY29uc3Qgb2xkTGF5ZXJJbmRleCA9IHN0YXRlLmxheWVycy5maW5kSW5kZXgobCA9PiBsLmlkID09PSBvbGRMYXllcklkKTtcbiAgICBpZiAob2xkTGF5ZXJJbmRleCA+PSAwKSB7XG4gICAgICBuZXh0U3RhdGUgPSBsYXllclR5cGVDaGFuZ2VVcGRhdGVyKG5leHRTdGF0ZSwgbGF5ZXJUeXBlQ2hhbmdlKG9sZExheWVyLCBuZXdMYXllci50eXBlKSk7XG4gICAgICAvLyBsYXllclR5cGVDaGFuZ2VVcGRhdGVyIGNoYW5nZXMgdGhlIGlkIG9mIHRoZSBsYXllciwgc28gd2UgbmVlZCB0byBvYnRhaW4gdGhlIG5ldyBpZFxuICAgICAgLy8gYnV0IGZpcnN0IG1ha2Ugc3VyZSB0aGF0IHRoZSBsYXllciB3YXMgbm90IHJlbW92ZWRcbiAgICAgIGlmIChuZXh0U3RhdGUubGF5ZXJzLmxlbmd0aCA9PT0gc3RhdGUubGF5ZXJzLmxlbmd0aCkge1xuICAgICAgICBjb25zdCBuZXdMYXllcklkID0gbmV4dFN0YXRlLmxheWVyc1tvbGRMYXllckluZGV4XS5pZDtcbiAgICAgICAgbmV4dFN0YXRlID0gYXBwbHlMYXllckNvbmZpZ1VwZGF0ZXIoXG4gICAgICAgICAgbmV4dFN0YXRlLFxuICAgICAgICAgIGFwcGx5TGF5ZXJDb25maWcobmV3TGF5ZXJJZCwgey4uLm5ld0xheWVyQ29uZmlnLCBpZDogbmV3TGF5ZXJJZH0pXG4gICAgICAgICk7XG4gICAgICB9XG4gICAgfVxuICAgIHJldHVybiBuZXh0U3RhdGU7XG4gIH1cblxuICAvLyBzZXJpYWxpemVMYXllcigpIG1pZ2h0IHJldHVybiBudWxsIGlmIHRoZSBvbGQgbGF5ZXIgaXMgbm90IHZhbGlkLFxuICAvLyB3ZSBzaG91bGQgc3RpbGwgYXBwbHkgdGhlIGNoYW5nZXMgaW4gdGhhdCBjYXNlXG4gIGNvbnN0IHNlcmlhbGl6ZWRPbGRMYXllciA9IHNlcmlhbGl6ZUxheWVyKG9sZExheWVyLCBzdGF0ZS5zY2hlbWEpID8/IHtjb25maWc6IHt9fTtcbiAgY29uc3Qgc2VyaWFsaXplZE5ld0xheWVyID0gc2VyaWFsaXplTGF5ZXIobmV3TGF5ZXIsIHN0YXRlLnNjaGVtYSk7XG4gIGlmICghc2VyaWFsaXplZE5ld0xheWVyKSB7XG4gICAgcmV0dXJuIHN0YXRlO1xuICB9XG4gIGlmICghaXNFcXVhbChzZXJpYWxpemVkT2xkTGF5ZXIsIHNlcmlhbGl6ZWROZXdMYXllcikpIHtcbiAgICBjb25zdCBjaGFuZ2VkID0gcGlja0NoYW5nZWRQcm9wcyhzZXJpYWxpemVkT2xkTGF5ZXIuY29uZmlnLCBzZXJpYWxpemVkTmV3TGF5ZXIuY29uZmlnKTtcblxuICAgIGlmICgndmlzQ29uZmlnJyBpbiBjaGFuZ2VkKSB7XG4gICAgICBpZiAoY2hhbmdlZC52aXNDb25maWcpIHtcbiAgICAgICAgbmV4dFN0YXRlID0gbGF5ZXJWaXNDb25maWdDaGFuZ2VVcGRhdGVyKFxuICAgICAgICAgIG5leHRTdGF0ZSxcbiAgICAgICAgICBsYXllclZpc0NvbmZpZ0NoYW5nZShvbGRMYXllciwgY2hhbmdlZC52aXNDb25maWcpXG4gICAgICAgICk7XG4gICAgICB9XG4gICAgICBkZWxldGUgY2hhbmdlZC52aXNDb25maWc7XG4gICAgfVxuXG4gICAgT2JqZWN0LmtleXMob2xkTGF5ZXIudmlzdWFsQ2hhbm5lbHMpLmZvckVhY2goY2hhbm5lbE5hbWUgPT4ge1xuICAgICAgY29uc3QgY2hhbm5lbCA9IG9sZExheWVyLnZpc3VhbENoYW5uZWxzW2NoYW5uZWxOYW1lXTtcbiAgICAgIGNvbnN0IGNoYW5uZWxQcm9wTmFtZXMgPSBWSVNVQUxfQ0hBTk5FTF9QUk9QX1RZUEVTLm1hcChwcm9wID0+IGNoYW5uZWxbcHJvcF0pO1xuICAgICAgaWYgKGNoYW5uZWxQcm9wTmFtZXMuc29tZShwcm9wID0+IHByb3AgaW4gY2hhbmdlZCkpIHtcbiAgICAgICAgbmV4dFN0YXRlID0gbGF5ZXJWaXN1YWxDaGFubmVsQ2hhbmdlVXBkYXRlcihcbiAgICAgICAgICBuZXh0U3RhdGUsXG4gICAgICAgICAgbGF5ZXJWaXN1YWxDaGFubmVsQ29uZmlnQ2hhbmdlKFxuICAgICAgICAgICAgb2xkTGF5ZXIsXG4gICAgICAgICAgICBwaWNrKG5ld0xheWVyLmNvbmZpZywgY2hhbm5lbFByb3BOYW1lcyksXG4gICAgICAgICAgICBjaGFubmVsTmFtZVxuICAgICAgICAgIClcbiAgICAgICAgKTtcbiAgICAgICAgZm9yIChjb25zdCBwcm9wIG9mIGNoYW5uZWxQcm9wTmFtZXMpIHtcbiAgICAgICAgICBkZWxldGUgY2hhbmdlZFtwcm9wXTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH0pO1xuXG4gICAgaWYgKE9iamVjdC5rZXlzKGNoYW5nZWQpLmxlbmd0aCA+IDApIHtcbiAgICAgIG5leHRTdGF0ZSA9IGxheWVyQ29uZmlnQ2hhbmdlVXBkYXRlcihcbiAgICAgICAgbmV4dFN0YXRlLFxuICAgICAgICBsYXllckNvbmZpZ0NoYW5nZShvbGRMYXllciwgcGljayhuZXdMYXllci5jb25maWcsIE9iamVjdC5rZXlzKGNoYW5nZWQpKSlcbiAgICAgICk7XG4gICAgfVxuICB9XG5cbiAgcmV0dXJuIG5leHRTdGF0ZTtcbn1cblxuLyoqXG4gKiBVcGRhdGUgbGF5ZXIgYmFzZSBjb25maWc6IGRhdGFJZCwgbGFiZWwsIGNvbHVtbiwgaXNWaXNpYmxlXG4gKiBAbWVtYmVyb2YgdmlzU3RhdGVVcGRhdGVyc1xuICogQHJldHVybnMgbmV4dFN0YXRlXG4gKi9cbi8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBjb21wbGV4aXR5XG5leHBvcnQgZnVuY3Rpb24gbGF5ZXJDb25maWdDaGFuZ2VVcGRhdGVyKFxuICBzdGF0ZTogVmlzU3RhdGUsXG4gIGFjdGlvbjogVmlzU3RhdGVBY3Rpb25zLkxheWVyQ29uZmlnQ2hhbmdlVXBkYXRlckFjdGlvblxuKTogVmlzU3RhdGUge1xuICBjb25zdCB7b2xkTGF5ZXJ9ID0gYWN0aW9uO1xuICBjb25zdCBpZHggPSBzdGF0ZS5sYXllcnMuZmluZEluZGV4KGwgPT4gbC5pZCA9PT0gb2xkTGF5ZXIuaWQpO1xuICBjb25zdCBwcm9wcyA9IE9iamVjdC5rZXlzKGFjdGlvbi5uZXdDb25maWcpO1xuICBpZiAoXG4gICAgdHlwZW9mIGFjdGlvbi5uZXdDb25maWcuZGF0YUlkID09PSAnc3RyaW5nJyAmJlxuICAgIGFjdGlvbi5uZXdDb25maWcuZGF0YUlkICE9PSBvbGRMYXllci5jb25maWcuZGF0YUlkXG4gICkge1xuICAgIGNvbnN0IHtkYXRhSWQsIC4uLnJlc3RDb25maWd9ID0gYWN0aW9uLm5ld0NvbmZpZztcbiAgICBjb25zdCBzdGF0ZVdpdGhEYXRhSWQgPSBsYXllckRhdGFJZENoYW5nZVVwZGF0ZXIoc3RhdGUsIHtcbiAgICAgIG9sZExheWVyLFxuICAgICAgbmV3Q29uZmlnOiB7ZGF0YUlkfVxuICAgIH0pO1xuICAgIGNvbnN0IG5leHRMYXllciA9IHN0YXRlV2l0aERhdGFJZC5sYXllcnMuZmluZChsID0+IGwuaWQgPT09IG9sZExheWVyLmlkKTtcbiAgICByZXR1cm4gbmV4dExheWVyICYmIE9iamVjdC5rZXlzKHJlc3RDb25maWcpLmxlbmd0aFxuICAgICAgPyBsYXllckNvbmZpZ0NoYW5nZVVwZGF0ZXIoc3RhdGVXaXRoRGF0YUlkLCB7b2xkTGF5ZXI6IG5leHRMYXllciwgbmV3Q29uZmlnOiByZXN0Q29uZmlnfSlcbiAgICAgIDogc3RhdGVXaXRoRGF0YUlkO1xuICB9XG5cbiAgbGV0IG5ld0xheWVyID0gb2xkTGF5ZXIudXBkYXRlTGF5ZXJDb25maWcoYWN0aW9uLm5ld0NvbmZpZyk7XG5cbiAgbGV0IGxheWVyRGF0YTtcblxuICBpZiAobmV3TGF5ZXIuc2hvdWxkQ2FsY3VsYXRlTGF5ZXJEYXRhKHByb3BzKSkge1xuICAgIGNvbnN0IG9sZExheWVyRGF0YSA9IHN0YXRlLmxheWVyRGF0YVtpZHhdO1xuXG4gICAgY29uc3QgdXBkYXRlTGF5ZXJEYXRhUmVzdWx0ID0gY2FsY3VsYXRlTGF5ZXJEYXRhKG5ld0xheWVyLCBzdGF0ZSwgb2xkTGF5ZXJEYXRhKTtcbiAgICBuZXdMYXllciA9IHVwZGF0ZUxheWVyRGF0YVJlc3VsdC5sYXllcjtcbiAgICBsYXllckRhdGEgPSB1cGRhdGVMYXllckRhdGFSZXN1bHQubGF5ZXJEYXRhO1xuICB9XG5cbiAgbGV0IG5ld1N0YXRlID0gc3RhdGU7XG4gIGlmICgnaXNWaXNpYmxlJyBpbiBhY3Rpb24ubmV3Q29uZmlnKSB7XG4gICAgbmV3U3RhdGUgPSB1cGRhdGVTdGF0ZU9uTGF5ZXJWaXNpYmlsaXR5Q2hhbmdlKHN0YXRlLCBuZXdMYXllcik7XG4gIH1cblxuICByZXR1cm4gdXBkYXRlU3RhdGVXaXRoTGF5ZXJBbmREYXRhKG5ld1N0YXRlLCB7XG4gICAgbGF5ZXI6IG5ld0xheWVyLFxuICAgIGxheWVyRGF0YSxcbiAgICBpZHhcbiAgfSk7XG59XG5cbi8qKlxuICogVXBkYXRlcyBpc1ZhbGlkIGZsYWcgb2YgYSBsYXllci5cbiAqIFVwZGF0ZXMgaXNWaXNpYmxlIGJhc2VkIG9uIHRoZSB2YWx1ZSBvZiBpc1ZhbGlkLlxuICogVHJpZ2dlcnMgdXBkYXRlIG9mIGRhdGEgZm9yIHRoZSBsYXllciBpbiBvcmRlciB0byBnZXQgZXJyb3JzIGFnYWluIGR1cmluZyBuZXh0IHVwZGF0ZSBpdGVyYXRpb24uXG4gKiBAbWVtYmVyb2YgdmlzU3RhdGVVcGRhdGVyc1xuICogQHJldHVybnMgbmV4dFN0YXRlXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBsYXllclNldElzVmFsaWRVcGRhdGVyKFxuICBzdGF0ZTogVmlzU3RhdGUsXG4gIGFjdGlvbjogVmlzU3RhdGVBY3Rpb25zLkxheWVyU2V0SXNWYWxpZFVwZGF0ZXJBY3Rpb25cbik6IFZpc1N0YXRlIHtcbiAgY29uc3Qge29sZExheWVyLCBpc1ZhbGlkfSA9IGFjdGlvbjtcblxuICBjb25zdCBpZHggPSBzdGF0ZS5sYXllcnMuZmluZEluZGV4KGwgPT4gbC5pZCA9PT0gb2xkTGF5ZXIuaWQpO1xuICBjb25zdCBsYXllclRvVXBkYXRlID0gc3RhdGUubGF5ZXJzW2lkeF07XG4gIGlmIChsYXllclRvVXBkYXRlKSB7XG4gICAgbGV0IG5ld0xheWVyO1xuICAgIGxldCBuZXdEYXRhID0gbnVsbDtcblxuICAgIGlmIChpc1ZhbGlkKSB7XG4gICAgICAvLyBUcmlnZ2VyIGRhdGEgdXBkYXRlIGluIG9yZGVyIHRvIHNob3cgZXJyb3JzIGFnYWluIGlmIHByZXNlbnQuXG4gICAgICBjb25zdCB7bGF5ZXIsIGxheWVyRGF0YX0gPSBjYWxjdWxhdGVMYXllckRhdGEobGF5ZXJUb1VwZGF0ZSwgc3RhdGUsIHVuZGVmaW5lZCk7XG4gICAgICBuZXdMYXllciA9IGxheWVyO1xuICAgICAgbmV3RGF0YSA9IGxheWVyRGF0YTtcbiAgICB9IGVsc2Uge1xuICAgICAgbmV3TGF5ZXIgPSBsYXllclRvVXBkYXRlLnVwZGF0ZUxheWVyQ29uZmlnKHtcbiAgICAgICAgaXNWaXNpYmxlOiBmYWxzZVxuICAgICAgfSk7XG4gICAgICBuZXdMYXllci5pc1ZhbGlkID0gZmFsc2U7XG4gICAgfVxuXG4gICAgcmV0dXJuIHVwZGF0ZVN0YXRlV2l0aExheWVyQW5kRGF0YShzdGF0ZSwge2lkeCwgbGF5ZXI6IG5ld0xheWVyLCBsYXllckRhdGE6IG5ld0RhdGF9KTtcbiAgfVxuXG4gIHJldHVybiBzdGF0ZTtcbn1cblxuZnVuY3Rpb24gYWRkT3JSZW1vdmVUZXh0TGFiZWxzKG5ld0ZpZWxkcywgdGV4dExhYmVsLCBkZWZhdWx0VGV4dExhYmVsID0gREVGQVVMVF9URVhUX0xBQkVMKSB7XG4gIGxldCBuZXdUZXh0TGFiZWwgPSB0ZXh0TGFiZWwuc2xpY2UoKTtcblxuICBjb25zdCBjdXJyZW50RmllbGRzID0gdGV4dExhYmVsLm1hcCh0bCA9PiB0bC5maWVsZCAmJiB0bC5maWVsZC5uYW1lKS5maWx0ZXIoZCA9PiBkKTtcblxuICBjb25zdCBhZGRGaWVsZHMgPSBuZXdGaWVsZHMuZmlsdGVyKGYgPT4gIWN1cnJlbnRGaWVsZHMuaW5jbHVkZXMoZi5uYW1lKSk7XG4gIGNvbnN0IGRlbGV0ZUZpZWxkcyA9IGN1cnJlbnRGaWVsZHMuZmlsdGVyKGYgPT4gIW5ld0ZpZWxkcy5maW5kKGZkID0+IGZkLm5hbWUgPT09IGYpKTtcblxuICAvLyBkZWxldGVcbiAgbmV3VGV4dExhYmVsID0gbmV3VGV4dExhYmVsLmZpbHRlcih0bCA9PiB0bC5maWVsZCAmJiAhZGVsZXRlRmllbGRzLmluY2x1ZGVzKHRsLmZpZWxkLm5hbWUpKTtcbiAgbmV3VGV4dExhYmVsID0gIW5ld1RleHRMYWJlbC5sZW5ndGggPyBbZGVmYXVsdFRleHRMYWJlbF0gOiBuZXdUZXh0TGFiZWw7XG5cbiAgLy8gYWRkXG4gIG5ld1RleHRMYWJlbCA9IFtcbiAgICAuLi5uZXdUZXh0TGFiZWwuZmlsdGVyKHRsID0+IHRsLmZpZWxkKSxcbiAgICAuLi5hZGRGaWVsZHMubWFwKGFmID0+ICh7XG4gICAgICAuLi5kZWZhdWx0VGV4dExhYmVsLFxuICAgICAgZmllbGQ6IGFmXG4gICAgfSkpXG4gIF07XG5cbiAgcmV0dXJuIG5ld1RleHRMYWJlbDtcbn1cblxuZnVuY3Rpb24gdXBkYXRlVGV4dExhYmVsUHJvcEFuZFZhbHVlKGlkeCwgcHJvcCwgdmFsdWUsIHRleHRMYWJlbCkge1xuICBpZiAoIXRleHRMYWJlbFtpZHhdLmhhc093blByb3BlcnR5KHByb3ApKSB7XG4gICAgcmV0dXJuIHRleHRMYWJlbDtcbiAgfVxuXG4gIGxldCBuZXdUZXh0TGFiZWwgPSB0ZXh0TGFiZWwuc2xpY2UoKTtcblxuICBpZiAocHJvcCA9PT0gJ2ZpZWxkJyAmJiB2YWx1ZSA9PT0gbnVsbCAmJiB0ZXh0TGFiZWwubGVuZ3RoID4gMSkge1xuICAgIC8vIHJlbW92ZSBsYWJlbCB3aGVuIGZpZWxkIHZhbHVlIGlzIHNldCB0byBudWxsXG4gICAgbmV3VGV4dExhYmVsLnNwbGljZShpZHgsIDEpO1xuICB9IGVsc2UgaWYgKHByb3ApIHtcbiAgICBuZXdUZXh0TGFiZWwgPSB0ZXh0TGFiZWwubWFwKCh0bCwgaSkgPT4gKGkgPT09IGlkeCA/IHsuLi50bCwgW3Byb3BdOiB2YWx1ZX0gOiB0bCkpO1xuICB9XG5cbiAgcmV0dXJuIG5ld1RleHRMYWJlbDtcbn1cblxuLyoqXG4gKiBVcGRhdGUgbGF5ZXIgYmFzZSBjb25maWc6IGRhdGFJZCwgbGFiZWwsIGNvbHVtbiwgaXNWaXNpYmxlXG4gKiBAbWVtYmVyb2YgdmlzU3RhdGVVcGRhdGVyc1xuICogQHJldHVybnMgbmV4dFN0YXRlXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBsYXllclRleHRMYWJlbENoYW5nZVVwZGF0ZXIoXG4gIHN0YXRlOiBWaXNTdGF0ZSxcbiAgYWN0aW9uOiBWaXNTdGF0ZUFjdGlvbnMuTGF5ZXJUZXh0TGFiZWxDaGFuZ2VVcGRhdGVyQWN0aW9uXG4pOiBWaXNTdGF0ZSB7XG4gIGNvbnN0IHtvbGRMYXllciwgaWR4LCBwcm9wLCB2YWx1ZX0gPSBhY3Rpb247XG4gIGNvbnN0IHt0ZXh0TGFiZWx9ID0gb2xkTGF5ZXIuY29uZmlnO1xuXG4gIC8vIHdoZW4gYWRkaW5nIGEgbmV3IGVtcHR5IHRleHQgbGFiZWwsXG4gIC8vIHJlbHkgb24gdGhlIGxheWVyJ3MgZGVmYXVsdCBjb25maWcsIG9yIHVzZSB0aGUgY29uc3RhbnQgREVGQVVMVF9URVhUX0xBQkVMXG4gIGNvbnN0IGRlZmF1bHRUZXh0TGFiZWwgPVxuICAgIG9sZExheWVyLmdldERlZmF1bHRMYXllckNvbmZpZyh7ZGF0YUlkOiAnJ30pPy50ZXh0TGFiZWw/LlswXSA/PyBERUZBVUxUX1RFWFRfTEFCRUw7XG5cbiAgbGV0IG5ld1RleHRMYWJlbCA9IHRleHRMYWJlbC5zbGljZSgpO1xuICBpZiAoIXRleHRMYWJlbFtpZHhdICYmIGlkeCA9PT0gdGV4dExhYmVsLmxlbmd0aCkge1xuICAgIC8vIGlmIGlkeCBpcyBzZXQgdG8gbGVuZ3RoLCBhZGQgZW1wdHkgdGV4dCBsYWJlbFxuICAgIG5ld1RleHRMYWJlbCA9IFsuLi50ZXh0TGFiZWwsIGRlZmF1bHRUZXh0TGFiZWxdO1xuICB9XG5cbiAgaWYgKGlkeCA9PT0gJ2FsbCcgJiYgcHJvcCA9PT0gJ2ZpZWxkcycpIHtcbiAgICBuZXdUZXh0TGFiZWwgPSBhZGRPclJlbW92ZVRleHRMYWJlbHModmFsdWUsIHRleHRMYWJlbCwgZGVmYXVsdFRleHRMYWJlbCk7XG4gIH0gZWxzZSB7XG4gICAgbmV3VGV4dExhYmVsID0gdXBkYXRlVGV4dExhYmVsUHJvcEFuZFZhbHVlKGlkeCwgcHJvcCwgdmFsdWUsIG5ld1RleHRMYWJlbCk7XG4gIH1cbiAgLy8gdXBkYXRlIHRleHQgbGFiZWwgcHJvcCBhbmQgdmFsdWVcbiAgcmV0dXJuIGxheWVyQ29uZmlnQ2hhbmdlVXBkYXRlcihzdGF0ZSwge1xuICAgIG9sZExheWVyLFxuICAgIG5ld0NvbmZpZzoge3RleHRMYWJlbDogbmV3VGV4dExhYmVsfVxuICB9KTtcbn1cblxuZnVuY3Rpb24gdmFsaWRhdGVFeGlzdGluZ0xheWVyV2l0aERhdGEoZGF0YXNldCwgbGF5ZXJDbGFzc2VzLCBsYXllciwgc2NoZW1hKSB7XG4gIGNvbnN0IGxvYWRlZExheWVyID0gc2VyaWFsaXplTGF5ZXIobGF5ZXIsIHNjaGVtYSk7XG4gIHJldHVybiBsb2FkZWRMYXllclxuICAgID8gdmFsaWRhdGVMYXllcldpdGhEYXRhKGRhdGFzZXQsIGxvYWRlZExheWVyLCBsYXllckNsYXNzZXMsIHtcbiAgICAgICAgYWxsb3dFbXB0eUNvbHVtbjogdHJ1ZVxuICAgICAgfSlcbiAgICA6IG51bGw7XG59XG5cbi8qKlxuICogVXBkYXRlIGxheWVyIGNvbmZpZyBkYXRhSWRcbiAqIEBtZW1iZXJvZiB2aXNTdGF0ZVVwZGF0ZXJzXG4gKiBAcmV0dXJucyBuZXh0U3RhdGVcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGxheWVyRGF0YUlkQ2hhbmdlVXBkYXRlcihcbiAgc3RhdGU6IFZpc1N0YXRlLFxuICBhY3Rpb246IHtcbiAgICBvbGRMYXllcjogTGF5ZXI7XG4gICAgbmV3Q29uZmlnOiB7XG4gICAgICBkYXRhSWQ6IHN0cmluZztcbiAgICB9O1xuICB9XG4pOiBWaXNTdGF0ZSB7XG4gIGNvbnN0IHtvbGRMYXllciwgbmV3Q29uZmlnfSA9IGFjdGlvbjtcbiAgY29uc3Qge2RhdGFJZH0gPSBuZXdDb25maWc7XG5cbiAgaWYgKCFvbGRMYXllciB8fCAhc3RhdGUuZGF0YXNldHNbZGF0YUlkXSkge1xuICAgIHJldHVybiBzdGF0ZTtcbiAgfVxuICBjb25zdCBpZHggPSBzdGF0ZS5sYXllcnMuZmluZEluZGV4KGwgPT4gbC5pZCA9PT0gb2xkTGF5ZXIuaWQpO1xuXG4gIGxldCBuZXdMYXllciA9IG9sZExheWVyLnVwZGF0ZUxheWVyQ29uZmlnKHtkYXRhSWR9KTtcbiAgLy8gdGhpcyBtYXkgaGFwcGVuIHdoZW4gYSBsYXllciBpcyBuZXcgKHR5cGU6IG51bGwgYW5kIG5vIGNvbHVtbnMpIGJ1dCBpdCdzIG5vdCByZWFkeSB0byBiZSBzYXZlZFxuICBpZiAobmV3TGF5ZXIuaXNWYWxpZFRvU2F2ZSgpKSB7XG4gICAgY29uc3QgdmFsaWRhdGVkID0gdmFsaWRhdGVFeGlzdGluZ0xheWVyV2l0aERhdGEoXG4gICAgICBzdGF0ZS5kYXRhc2V0c1tkYXRhSWRdLFxuICAgICAgc3RhdGUubGF5ZXJDbGFzc2VzLFxuICAgICAgbmV3TGF5ZXIsXG4gICAgICBzdGF0ZS5zY2hlbWFcbiAgICApO1xuICAgIC8vIGlmIGNhbnQgdmFsaWRhdGUgaXQgd2l0aCBkYXRhIGNyZWF0ZSBhIG5ldyBvbmVcbiAgICBpZiAoIXZhbGlkYXRlZCkge1xuICAgICAgLy8gQHRzLWV4cGVjdC1lcnJvciBUT0RPOiBjaGVja2luZyBvbGRMYXllci50eXBlICE9PSBudWxsXG4gICAgICBuZXdMYXllciA9IG5ldyBzdGF0ZS5sYXllckNsYXNzZXNbb2xkTGF5ZXIudHlwZV0oe2RhdGFJZCwgaWQ6IG9sZExheWVyLmlkfSk7XG4gICAgfSBlbHNlIHtcbiAgICAgIG5ld0xheWVyID0gdmFsaWRhdGVkO1xuICAgIH1cbiAgfVxuXG4gIG5ld0xheWVyID0gbmV3TGF5ZXIudXBkYXRlTGF5ZXJDb25maWcoe1xuICAgIGlzVmlzaWJsZTogb2xkTGF5ZXIuY29uZmlnLmlzVmlzaWJsZSxcbiAgICBpc0NvbmZpZ0FjdGl2ZTogdHJ1ZVxuICB9KTtcblxuICBuZXdMYXllci51cGRhdGVMYXllckRvbWFpbihzdGF0ZS5kYXRhc2V0cyk7XG4gIGNvbnN0IHtsYXllckRhdGEsIGxheWVyfSA9IGNhbGN1bGF0ZUxheWVyRGF0YShuZXdMYXllciwgc3RhdGUsIHVuZGVmaW5lZCk7XG5cbiAgcmV0dXJuIHVwZGF0ZVN0YXRlV2l0aExheWVyQW5kRGF0YShzdGF0ZSwge2xheWVyRGF0YSwgbGF5ZXIsIGlkeH0pO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gc2V0SW5pdGlhbExheWVyQ29uZmlnKGxheWVyLCBkYXRhc2V0cywgbGF5ZXJDbGFzc2VzKTogTGF5ZXIge1xuICBsZXQgbmV3TGF5ZXIgPSBsYXllcjtcbiAgaWYgKCFPYmplY3Qua2V5cyhkYXRhc2V0cykubGVuZ3RoKSB7XG4gICAgLy8gbm8gZGF0YSBpcyBsb2FkZWRcbiAgICByZXR1cm4gbGF5ZXI7XG4gIH1cbiAgaWYgKCFsYXllci5jb25maWcuZGF0YUlkKSB7XG4gICAgLy8gc2V0IGxheWVyIGRhdGFJZFxuICAgIG5ld0xheWVyID0gbGF5ZXIudXBkYXRlTGF5ZXJDb25maWcoe2RhdGFJZDogT2JqZWN0LmtleXMoZGF0YXNldHMpWzBdfSk7XG4gIH1cbiAgY29uc3QgZGF0YXNldCA9IGRhdGFzZXRzW25ld0xheWVyLmNvbmZpZy5kYXRhSWRdO1xuICBpZiAoIWRhdGFzZXQpIHtcbiAgICByZXR1cm4gbGF5ZXI7XG4gIH1cblxuICAvLyBmaW5kIGRlZmF1dCBsYXllciBwcm9wc1xuICBjb25zdCByZXN1bHQgPVxuICAgIHR5cGVvZiBsYXllckNsYXNzZXNbbmV3TGF5ZXIudHlwZV0uZmluZERlZmF1bHRMYXllclByb3BzID09PSAnZnVuY3Rpb24nXG4gICAgICA/IGxheWVyQ2xhc3Nlc1tuZXdMYXllci50eXBlXS5maW5kRGVmYXVsdExheWVyUHJvcHMoZGF0YXNldCwgW10pXG4gICAgICA6IHtwcm9wczogW119O1xuXG4gIC8vIGFuIGFycmF5IG9mIHBvc3NpYmxlIHByb3BzLCB1c2UgMXN0IG9uZVxuICBjb25zdCBwcm9wcyA9IEFycmF5LmlzQXJyYXkocmVzdWx0KSA/IHJlc3VsdCA6IHJlc3VsdC5wcm9wcyB8fCBbXTtcblxuICBpZiAocHJvcHMubGVuZ3RoKSB7XG4gICAgbmV3TGF5ZXIgPSBuZXcgbGF5ZXJDbGFzc2VzW2xheWVyLnR5cGVdKHtcbiAgICAgIC4uLnByb3BzWzBdLFxuICAgICAgbGFiZWw6IG5ld0xheWVyLmNvbmZpZy5sYWJlbCxcbiAgICAgIGRhdGFJZDogbmV3TGF5ZXIuY29uZmlnLmRhdGFJZCxcbiAgICAgIGlzVmlzaWJsZTogdHJ1ZSxcbiAgICAgIGlzQ29uZmlnQWN0aXZlOiBuZXdMYXllci5jb25maWcuaXNDb25maWdBY3RpdmVcbiAgICB9KTtcblxuICAgIHJldHVybiB0eXBlb2YgbmV3TGF5ZXIuc2V0SW5pdGlhbExheWVyQ29uZmlnID09PSAnZnVuY3Rpb24nXG4gICAgICA/IG5ld0xheWVyLnNldEluaXRpYWxMYXllckNvbmZpZyhkYXRhc2V0KVxuICAgICAgOiBuZXdMYXllcjtcbiAgfVxuXG4gIHJldHVybiBuZXdMYXllcjtcbn1cbi8qKlxuICogVXBkYXRlIGxheWVyIHR5cGUuIFByZXZpZXdzIGxheWVyIGNvbmZpZyB3aWxsIGJlIGNvcGllZCBpZiBhcHBsaWNhYmxlLlxuICogQG1lbWJlcm9mIHZpc1N0YXRlVXBkYXRlcnNcbiAqIEBwdWJsaWNcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGxheWVyVHlwZUNoYW5nZVVwZGF0ZXIoXG4gIHN0YXRlOiBWaXNTdGF0ZSxcbiAgYWN0aW9uOiBWaXNTdGF0ZUFjdGlvbnMuTGF5ZXJUeXBlQ2hhbmdlVXBkYXRlckFjdGlvblxuKTogVmlzU3RhdGUge1xuICBjb25zdCB7b2xkTGF5ZXIsIG5ld1R5cGV9ID0gYWN0aW9uO1xuICBpZiAoIW9sZExheWVyKSB7XG4gICAgcmV0dXJuIHN0YXRlO1xuICB9XG4gIGNvbnN0IG9sZElkID0gb2xkTGF5ZXIuaWQ7XG4gIGNvbnN0IGlkeCA9IHN0YXRlLmxheWVycy5maW5kSW5kZXgobCA9PiBsLmlkID09PSBvbGRJZCk7XG5cbiAgaWYgKCFzdGF0ZS5sYXllckNsYXNzZXNbbmV3VHlwZV0pIHtcbiAgICBDb25zb2xlLmVycm9yKGAke25ld1R5cGV9IGlzIG5vdCBhIHZhbGlkIGxheWVyIHR5cGVgKTtcbiAgICByZXR1cm4gc3RhdGU7XG4gIH1cbiAgbGV0IG5ld0xheWVyID0gbmV3IHN0YXRlLmxheWVyQ2xhc3Nlc1tuZXdUeXBlXSh7XG4gICAgLy8ga2VlcCBvbGQgbGF5ZXIgbGFibGUgYW5kIGlzQ29uZmlnQWN0aXZlXG4gICAgbGFiZWw6IG9sZExheWVyLmNvbmZpZy5sYWJlbCxcbiAgICBpc0NvbmZpZ0FjdGl2ZTogb2xkTGF5ZXIuY29uZmlnLmlzQ29uZmlnQWN0aXZlLFxuICAgIGRhdGFJZDogb2xkTGF5ZXIuY29uZmlnLmRhdGFJZFxuICB9KTtcblxuICBpZiAoIW9sZExheWVyLnR5cGUpIHtcbiAgICAvLyBpZiBzZXR0aW5nIGxheWVyIHR5cGUgb24gYW4gZW1wdHkgbGF5ZXJcbiAgICBuZXdMYXllciA9IHNldEluaXRpYWxMYXllckNvbmZpZyhuZXdMYXllciwgc3RhdGUuZGF0YXNldHMsIHN0YXRlLmxheWVyQ2xhc3Nlcyk7XG4gIH0gZWxzZSB7XG4gICAgLy8gZ2V0IGEgbWludCBsYXllciwgd2l0aCBuZXcgaWQgYW5kIHR5cGVcbiAgICAvLyBiZWNhdXNlIGRlY2suZ2wgdXNlcyBpZCB0byBtYXRjaCBiZXR3ZWVuIG5ldyBhbmQgb2xkIGxheWVyLlxuICAgIC8vIElmIHR5cGUgaGFzIGNoYW5nZWQgYnV0IGlkIGlzIHRoZSBzYW1lLCBpdCB3aWxsIGJyZWFrXG4gICAgbmV3TGF5ZXIuYXNzaWduQ29uZmlnVG9MYXllcihvbGRMYXllci5jb25maWcsIG9sZExheWVyLnZpc0NvbmZpZ1NldHRpbmdzKTtcbiAgICBuZXdMYXllci51cGRhdGVMYXllckRvbWFpbihzdGF0ZS5kYXRhc2V0cyk7XG4gIH1cblxuICBjb25zdCB7Y2xpY2tlZCwgaG92ZXJJbmZvfSA9IHN0YXRlO1xuXG4gIGxldCBuZXdTdGF0ZSA9IHtcbiAgICAuLi5zdGF0ZSxcbiAgICBjbGlja2VkOiBvbGRMYXllci5pc0xheWVySG92ZXJlZChjbGlja2VkKSA/IHVuZGVmaW5lZCA6IGNsaWNrZWQsXG4gICAgaG92ZXJJbmZvOiBvbGRMYXllci5pc0xheWVySG92ZXJlZChob3ZlckluZm8pID8gdW5kZWZpbmVkIDogaG92ZXJJbmZvXG4gIH07XG5cbiAgY29uc3Qge2xheWVyRGF0YSwgbGF5ZXJ9ID0gY2FsY3VsYXRlTGF5ZXJEYXRhKG5ld0xheWVyLCBuZXdTdGF0ZSk7XG4gIG5ld1N0YXRlID0gdXBkYXRlU3RhdGVXaXRoTGF5ZXJBbmREYXRhKG5ld1N0YXRlLCB7bGF5ZXJEYXRhLCBsYXllciwgaWR4fSk7XG5cbiAgaWYgKGxheWVyLmNvbmZpZy5hbmltYXRpb24uZW5hYmxlZCB8fCBvbGRMYXllci5jb25maWcuYW5pbWF0aW9uLmVuYWJsZWQpIHtcbiAgICBuZXdTdGF0ZSA9IHVwZGF0ZUFuaW1hdGlvbkRvbWFpbihuZXdTdGF0ZSk7XG4gIH1cblxuICAvLyB1cGRhdGUgc3BsaXRNYXAgbGF5ZXIgaWRcbiAgaWYgKHN0YXRlLnNwbGl0TWFwcy5sZW5ndGgpIHtcbiAgICBuZXdTdGF0ZSA9IHtcbiAgICAgIC4uLm5ld1N0YXRlLFxuICAgICAgc3BsaXRNYXBzOiBuZXdTdGF0ZS5zcGxpdE1hcHMubWFwKHNldHRpbmdzID0+IHtcbiAgICAgICAgY29uc3Qge1tvbGRJZF06IG9sZExheWVyTWFwLCAuLi5vdGhlckxheWVyc30gPSBzZXR0aW5ncy5sYXllcnM7XG4gICAgICAgIHJldHVybiBvbGRJZCBpbiBzZXR0aW5ncy5sYXllcnNcbiAgICAgICAgICA/IHtcbiAgICAgICAgICAgICAgLi4uc2V0dGluZ3MsXG4gICAgICAgICAgICAgIGxheWVyczoge1xuICAgICAgICAgICAgICAgIC4uLm90aGVyTGF5ZXJzLFxuICAgICAgICAgICAgICAgIFtsYXllci5pZF06IG9sZExheWVyTWFwXG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgICA6IHNldHRpbmdzO1xuICAgICAgfSlcbiAgICB9O1xuICB9XG5cbiAgLy8gdXBkYXRlIGxheWVyT3JkZXIgd2l0aCBuZXcgaWRcbiAgbmV3U3RhdGUgPSB7XG4gICAgLi4ubmV3U3RhdGUsXG4gICAgbGF5ZXJPcmRlcjogbmV3U3RhdGUubGF5ZXJPcmRlci5tYXAobGF5ZXJJZCA9PlxuICAgICAgbGF5ZXJJZCA9PT0gb2xkTGF5ZXIuaWQgPyBuZXdMYXllci5pZCA6IGxheWVySWRcbiAgICApXG4gIH07XG5cbiAgcmV0dXJuIG5ld1N0YXRlO1xufVxuXG4vKipcbiAqIFVwZGF0ZSBsYXllciB2aXN1YWwgY2hhbm5lbFxuICogQG1lbWJlcm9mIHZpc1N0YXRlVXBkYXRlcnNcbiAqIEByZXR1cm5zIHtPYmplY3R9IG5leHRTdGF0ZVxuICogQHB1YmxpY1xuICovXG5leHBvcnQgZnVuY3Rpb24gbGF5ZXJWaXN1YWxDaGFubmVsQ2hhbmdlVXBkYXRlcihcbiAgc3RhdGU6IFZpc1N0YXRlLFxuICBhY3Rpb246IFZpc1N0YXRlQWN0aW9ucy5MYXllclZpc3VhbENoYW5uZWxDb25maWdDaGFuZ2VVcGRhdGVyQWN0aW9uXG4pOiBWaXNTdGF0ZSB7XG4gIGNvbnN0IHtvbGRMYXllciwgbmV3Q29uZmlnLCBjaGFubmVsfSA9IGFjdGlvbjtcbiAgaWYgKCFvbGRMYXllci5jb25maWcuZGF0YUlkKSB7XG4gICAgcmV0dXJuIHN0YXRlO1xuICB9XG4gIGNvbnN0IGRhdGFzZXQgPSBzdGF0ZS5kYXRhc2V0c1tvbGRMYXllci5jb25maWcuZGF0YUlkXTtcblxuICBjb25zdCBpZHggPSBzdGF0ZS5sYXllcnMuZmluZEluZGV4KGwgPT4gbC5pZCA9PT0gb2xkTGF5ZXIuaWQpO1xuICBjb25zdCBuZXdMYXllciA9IG9sZExheWVyLnVwZGF0ZUxheWVyQ29uZmlnKG5ld0NvbmZpZyk7XG5cbiAgbmV3TGF5ZXIudXBkYXRlTGF5ZXJWaXN1YWxDaGFubmVsKGRhdGFzZXQsIGNoYW5uZWwpO1xuXG4gIGNvbnN0IG9sZExheWVyRGF0YSA9IHN0YXRlLmxheWVyRGF0YVtpZHhdO1xuICBjb25zdCB7bGF5ZXJEYXRhLCBsYXllcn0gPSBjYWxjdWxhdGVMYXllckRhdGEobmV3TGF5ZXIsIHN0YXRlLCBvbGRMYXllckRhdGEpO1xuXG4gIHJldHVybiB1cGRhdGVTdGF0ZVdpdGhMYXllckFuZERhdGEoc3RhdGUsIHtsYXllckRhdGEsIGxheWVyLCBpZHh9KTtcbn1cblxuLyoqXG4gKiBVcGRhdGUgbGF5ZXIgYHZpc0NvbmZpZ2BcbiAqIEBtZW1iZXJvZiB2aXNTdGF0ZVVwZGF0ZXJzXG4gKiBAcHVibGljXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBsYXllclZpc0NvbmZpZ0NoYW5nZVVwZGF0ZXIoXG4gIHN0YXRlOiBWaXNTdGF0ZSxcbiAgYWN0aW9uOiBWaXNTdGF0ZUFjdGlvbnMuTGF5ZXJWaXNDb25maWdDaGFuZ2VVcGRhdGVyQWN0aW9uXG4pOiBWaXNTdGF0ZSB7XG4gIGNvbnN0IHtvbGRMYXllcn0gPSBhY3Rpb247XG4gIGNvbnN0IGlkeCA9IHN0YXRlLmxheWVycy5maW5kSW5kZXgobCA9PiBsLmlkID09PSBvbGRMYXllci5pZCk7XG4gIGNvbnN0IHByb3BzID0gT2JqZWN0LmtleXMoYWN0aW9uLm5ld1Zpc0NvbmZpZyk7XG4gIGNvbnN0IG5ld1Zpc0NvbmZpZyA9IHtcbiAgICAuLi5vbGRMYXllci5jb25maWcudmlzQ29uZmlnLFxuICAgIC4uLmFjdGlvbi5uZXdWaXNDb25maWdcbiAgfTtcblxuICBjb25zdCBuZXdMYXllciA9IG9sZExheWVyLnVwZGF0ZUxheWVyQ29uZmlnKHt2aXNDb25maWc6IG5ld1Zpc0NvbmZpZ30pO1xuXG4gIGlmIChuZXdMYXllci5zaG91bGRDYWxjdWxhdGVMYXllckRhdGEocHJvcHMpKSB7XG4gICAgY29uc3Qgb2xkTGF5ZXJEYXRhID0gc3RhdGUubGF5ZXJEYXRhW2lkeF07XG4gICAgY29uc3Qge2xheWVyRGF0YSwgbGF5ZXJ9ID0gY2FsY3VsYXRlTGF5ZXJEYXRhKG5ld0xheWVyLCBzdGF0ZSwgb2xkTGF5ZXJEYXRhKTtcbiAgICByZXR1cm4gdXBkYXRlU3RhdGVXaXRoTGF5ZXJBbmREYXRhKHN0YXRlLCB7bGF5ZXJEYXRhLCBsYXllciwgaWR4fSk7XG4gIH1cblxuICByZXR1cm4gdXBkYXRlU3RhdGVXaXRoTGF5ZXJBbmREYXRhKHN0YXRlLCB7bGF5ZXI6IG5ld0xheWVyLCBpZHh9KTtcbn1cblxuLyoqXG4gKiBVcGRhdGUgZmlsdGVyIHByb3BlcnR5XG4gKiBAbWVtYmVyb2YgdmlzU3RhdGVVcGRhdGVyc1xuICogQHB1YmxpY1xuICovXG5leHBvcnQgZnVuY3Rpb24gc2V0RmlsdGVyQW5pbWF0aW9uVGltZVVwZGF0ZXIoXG4gIHN0YXRlOiBWaXNTdGF0ZSxcbiAgYWN0aW9uOiBWaXNTdGF0ZUFjdGlvbnMuU2V0RmlsdGVyQW5pbWF0aW9uVGltZVVwZGF0ZXJBY3Rpb25cbik6IFZpc1N0YXRlIHtcbiAgcmV0dXJuIHNldEZpbHRlclVwZGF0ZXIoc3RhdGUsIGFjdGlvbik7XG59XG5cbi8qKlxuICogVXBkYXRlIGZpbHRlciBhbmltYXRpb24gd2luZG93XG4gKiBAbWVtYmVyb2YgdmlzU3RhdGVVcGRhdGVyc1xuICogQHB1YmxpY1xuICovXG5leHBvcnQgZnVuY3Rpb24gc2V0RmlsdGVyQW5pbWF0aW9uV2luZG93VXBkYXRlcihcbiAgc3RhdGU6IFZpc1N0YXRlLFxuICB7aWQsIGFuaW1hdGlvbldpbmRvd306IFZpc1N0YXRlQWN0aW9ucy5TZXRGaWx0ZXJBbmltYXRpb25XaW5kb3dVcGRhdGVyQWN0aW9uXG4pOiBWaXNTdGF0ZSB7XG4gIHJldHVybiB7XG4gICAgLi4uc3RhdGUsXG4gICAgZmlsdGVyczogc3RhdGUuZmlsdGVycy5tYXAoZiA9PlxuICAgICAgZi5pZCA9PT0gaWRcbiAgICAgICAgPyB7XG4gICAgICAgICAgICAuLi5mLFxuICAgICAgICAgICAgYW5pbWF0aW9uV2luZG93XG4gICAgICAgICAgfVxuICAgICAgICA6IGZcbiAgICApXG4gIH07XG59XG4vKipcbiAqIFVwZGF0ZSBmaWx0ZXIgcHJvcGVydHlcbiAqIEBtZW1iZXJvZiB2aXNTdGF0ZVVwZGF0ZXJzXG4gKiBAcHVibGljXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBzZXRGaWx0ZXJVcGRhdGVyKFxuICBzdGF0ZTogVmlzU3RhdGUsXG4gIGFjdGlvbjogVmlzU3RhdGVBY3Rpb25zLlNldEZpbHRlclVwZGF0ZXJBY3Rpb25cbik6IFZpc1N0YXRlIHtcbiAgY29uc3Qge2lkeCwgcHJvcCwgdmFsdWUsIHZhbHVlSW5kZXggPSAwfSA9IGFjdGlvbjtcbiAgY29uc3Qgb2xkRmlsdGVyID0gc3RhdGUuZmlsdGVyc1tpZHhdO1xuXG4gIGlmICghb2xkRmlsdGVyKSB7XG4gICAgQ29uc29sZS5lcnJvcihgZmlsdGVycy4ke2lkeH0gaXMgdW5kZWZpbmVkYCk7XG4gICAgcmV0dXJuIHN0YXRlO1xuICB9XG4gIGxldCBuZXdGaWx0ZXIgPSBzZXQoW3Byb3BdLCB2YWx1ZSwgb2xkRmlsdGVyKTtcbiAgbGV0IG5ld1N0YXRlID0gc3RhdGU7XG5cbiAgY29uc3Qge2RhdGFJZH0gPSBuZXdGaWx0ZXI7XG5cbiAgLy8gRW5zdXJpbmcgYmFja3dhcmQgY29tcGF0aWJpbGl0eVxuICBsZXQgZGF0YXNldElkcyA9IHRvQXJyYXkoZGF0YUlkKTtcblxuICBzd2l0Y2ggKHByb3ApIHtcbiAgICAvLyBUT0RPOiBOZXh0IFBSIGZvciBVSSBpZiB3ZSB1cGRhdGUgZGF0YUlkLCB3ZSBuZWVkIHRvIGNvbnNpZGVyIHR3byBjYXNlczpcbiAgICAvLyAxLiBkYXRhSWQgaXMgZW1wdHk6IGNyZWF0ZSBhIGRlZmF1bHQgZmlsdGVyXG4gICAgLy8gMi4gQWRkIGEgbmV3IGRhdGFzZXQgaWRcbiAgICBjYXNlIEZJTFRFUl9VUERBVEVSX1BST1BTLmRhdGFJZDpcbiAgICAgIC8vIGlmIHRyeWluZyB0byB1cGRhdGUgZmlsdGVyIGRhdGFJZC4gY3JlYXRlIGFuIGVtcHR5IG5ldyBmaWx0ZXJcbiAgICAgIG5ld0ZpbHRlciA9IHVwZGF0ZUZpbHRlckRhdGFJZChkYXRhSWQpO1xuICAgICAgYnJlYWs7XG5cbiAgICBjYXNlIEZJTFRFUl9VUERBVEVSX1BST1BTLm5hbWU6XG4gICAgICAvLyB3ZSBhcmUgc3VwcG9ydGluZyB0aGUgY3VycmVudCBmdW5jdGlvbmFsaXR5XG4gICAgICAvLyBUT0RPOiBOZXh0IFBSIGZvciBVSSBmaWx0ZXIgbmFtZSB3aWxsIG9ubHkgdXBkYXRlIGZpbHRlciBuYW1lIGJ1dCBpdCB3b24ndCBoYXZlIHNpZGUgZWZmZWN0c1xuICAgICAgLy8gd2UgYXJlIGdvbm5hIHVzZSBwYWlyIG9mIGRhdGFzZXRzIGFuZCBmaWVsZElkeCB0byB1cGRhdGUgdGhlIGZpbHRlclxuICAgICAgY29uc3QgZGF0YXNldElkID0gbmV3RmlsdGVyLmRhdGFJZFt2YWx1ZUluZGV4XTtcbiAgICAgIGNvbnN0IHtmaWx0ZXI6IHVwZGF0ZWRGaWx0ZXIsIGRhdGFzZXQ6IG5ld0RhdGFzZXR9ID0gYXBwbHlGaWx0ZXJGaWVsZE5hbWUoXG4gICAgICAgIG5ld0ZpbHRlcixcbiAgICAgICAgc3RhdGUuZGF0YXNldHNbZGF0YXNldElkXSxcbiAgICAgICAgdmFsdWUsXG4gICAgICAgIHZhbHVlSW5kZXgsXG4gICAgICAgIHttZXJnZURvbWFpbjogZmFsc2V9XG4gICAgICApO1xuICAgICAgaWYgKCF1cGRhdGVkRmlsdGVyKSB7XG4gICAgICAgIHJldHVybiBzdGF0ZTtcbiAgICAgIH1cblxuICAgICAgbmV3RmlsdGVyID0gdXBkYXRlZEZpbHRlcjtcblxuICAgICAgaWYgKG5ld0ZpbHRlci5ncHUpIHtcbiAgICAgICAgbmV3RmlsdGVyID0gc2V0RmlsdGVyR3B1TW9kZShuZXdGaWx0ZXIsIHN0YXRlLmZpbHRlcnMpO1xuICAgICAgICBuZXdGaWx0ZXIgPSBhc3NpZ25HcHVDaGFubmVsKG5ld0ZpbHRlciwgc3RhdGUuZmlsdGVycyk7XG4gICAgICB9XG5cbiAgICAgIG5ld1N0YXRlID0gc2V0KFsnZGF0YXNldHMnLCBkYXRhc2V0SWRdLCBuZXdEYXRhc2V0LCBzdGF0ZSk7XG5cbiAgICAgIC8vIG9ubHkgZmlsdGVyIHRoZSBjdXJyZW50IGRhdGFzZXRcbiAgICAgIGJyZWFrO1xuICAgIGNhc2UgRklMVEVSX1VQREFURVJfUFJPUFMubGF5ZXJJZDpcbiAgICAgIC8vIFdlIG5lZWQgdG8gdXBkYXRlIG9ubHkgZGF0YXNldElkL3MgaWYgd2UgaGF2ZSBhZGRlZC9yZW1vdmVkIGxheWVyc1xuICAgICAgLy8gLSBjaGVjayBmb3IgbGF5ZXJJZCBjaGFuZ2VzIChYT1Igd29ya3MgYmVjYXVzZSBvZiBzdHJpbmcgdmFsdWVzKVxuICAgICAgLy8gaWYgbm8gZGlmZmVyZW5jZXMgYmV0d2VlbiBsYXllcklkcywgZG9uJ3QgZG8gYW55IGZpbHRlcmluZ1xuICAgICAgLy8gQHRzLWlnbm9yZVxuICAgICAgY29uc3QgbGF5ZXJJZERpZmZlcmVuY2UgPSB4b3IobmV3RmlsdGVyLmxheWVySWQsIG9sZEZpbHRlci5sYXllcklkKTtcblxuICAgICAgY29uc3QgbGF5ZXJEYXRhSWRzID0gdW5pcTxzdHJpbmc+KFxuICAgICAgICBsYXllcklkRGlmZmVyZW5jZVxuICAgICAgICAgIC5tYXAobGlkID0+XG4gICAgICAgICAgICBnZXQoXG4gICAgICAgICAgICAgIHN0YXRlLmxheWVycy5maW5kKGwgPT4gbC5pZCA9PT0gbGlkKSxcbiAgICAgICAgICAgICAgWydjb25maWcnLCAnZGF0YUlkJ11cbiAgICAgICAgICAgIClcbiAgICAgICAgICApXG4gICAgICAgICAgLmZpbHRlcihkID0+IGQpIGFzIHN0cmluZ1tdXG4gICAgICApO1xuXG4gICAgICAvLyBvbmx5IGZpbHRlciBkYXRhc2V0c0lkc1xuICAgICAgZGF0YXNldElkcyA9IGxheWVyRGF0YUlkcztcblxuICAgICAgLy8gVXBkYXRlIG5ld0ZpbHRlciBkYXRhSWRzXG4gICAgICBjb25zdCBuZXdEYXRhSWRzID0gdW5pcTxzdHJpbmc+KFxuICAgICAgICBuZXdGaWx0ZXIubGF5ZXJJZFxuICAgICAgICAgID8ubWFwKGxpZCA9PlxuICAgICAgICAgICAgZ2V0KFxuICAgICAgICAgICAgICBzdGF0ZS5sYXllcnMuZmluZChsID0+IGwuaWQgPT09IGxpZCksXG4gICAgICAgICAgICAgIFsnY29uZmlnJywgJ2RhdGFJZCddXG4gICAgICAgICAgICApXG4gICAgICAgICAgKVxuICAgICAgICAgIC5maWx0ZXIoZCA9PiBkKSBhcyBzdHJpbmdbXVxuICAgICAgKTtcblxuICAgICAgbmV3RmlsdGVyID0ge1xuICAgICAgICAuLi5uZXdGaWx0ZXIsXG4gICAgICAgIGRhdGFJZDogbmV3RGF0YUlkc1xuICAgICAgfTtcblxuICAgICAgYnJlYWs7XG4gICAgZGVmYXVsdDpcbiAgICAgIGJyZWFrO1xuICB9XG5cbiAgY29uc3QgZW5sYXJnZWRGaWx0ZXIgPSBzdGF0ZS5maWx0ZXJzLmZpbmQoZiA9PiBmLnZpZXcgPT09IEZJTFRFUl9WSUVXX1RZUEVTLmVubGFyZ2VkKTtcblxuICBpZiAoZW5sYXJnZWRGaWx0ZXIgJiYgZW5sYXJnZWRGaWx0ZXIuaWQgIT09IG5ld0ZpbHRlci5pZCkge1xuICAgIC8vIHRoZXJlIHNob3VsZCBiZSBvbmx5IG9uZSBlbmxhcmdlZCBmaWx0ZXJcbiAgICBuZXdGaWx0ZXIudmlldyA9IEZJTFRFUl9WSUVXX1RZUEVTLnNpZGU7XG4gIH1cblxuICAvLyBzYXZlIG5ldyBmaWx0ZXJzIHRvIG5ld1N0YXRlXG4gIG5ld1N0YXRlID0gc2V0KFsnZmlsdGVycycsIGlkeF0sIG5ld0ZpbHRlciwgbmV3U3RhdGUpO1xuXG4gIC8vIGlmIHdlIGFyZSBjdXJyZW50bHkgc2V0dGluZyBhIHByb3AgdGhhdCBvbmx5IHJlcXVpcmVzIHRvIGZpbHRlciB0aGUgY3VycmVudFxuICAvLyBkYXRhc2V0IHdlIHdpbGwgcGFzcyBvbmx5IHRoZSBjdXJyZW50IGRhdGFzZXQgdG8gYXBwbHlGaWx0ZXJzVG9EYXRhc2V0cyBhbmRcbiAgLy8gdXBkYXRlQWxsTGF5ZXJEb21haW5EYXRhIG90aGVyd2lzZSB3ZSBwYXNzIHRoZSBhbGwgbGlzdCBvZiBkYXRhc2V0cyBhcyBkZWZpbmVkIGluIGRhdGFJZFxuICBjb25zdCBkYXRhc2V0SWRzVG9GaWx0ZXIgPSBMSU1JVEVEX0ZJTFRFUl9FRkZFQ1RfUFJPUFNbcHJvcF1cbiAgICA/IFtkYXRhc2V0SWRzW3ZhbHVlSW5kZXhdXVxuICAgIDogZGF0YXNldElkcztcblxuICAvLyBmaWx0ZXIgZGF0YVxuICBjb25zdCBmaWx0ZXJlZERhdGFzZXRzID0gYXBwbHlGaWx0ZXJzVG9EYXRhc2V0cyhcbiAgICBkYXRhc2V0SWRzVG9GaWx0ZXIsXG4gICAgbmV3U3RhdGUuZGF0YXNldHMsXG4gICAgbmV3U3RhdGUuZmlsdGVycyxcbiAgICBuZXdTdGF0ZS5sYXllcnNcbiAgKTtcblxuICBuZXdTdGF0ZSA9IHNldChbJ2RhdGFzZXRzJ10sIGZpbHRlcmVkRGF0YXNldHMsIG5ld1N0YXRlKTtcbiAgLy8gZGF0YUlkIGlzIGFuIGFycmF5XG4gIC8vIHBhc3Mgb25seSB0aGUgZGF0YXNldCB3ZSBuZWVkIHRvIHVwZGF0ZVxuICBuZXdTdGF0ZSA9IHVwZGF0ZUFsbExheWVyRG9tYWluRGF0YShuZXdTdGF0ZSwgZGF0YXNldElkc1RvRmlsdGVyLCBuZXdGaWx0ZXIpO1xuXG4gIHJldHVybiBuZXdTdGF0ZTtcbn1cblxuLyoqXG4gKiBTZXQgdGhlIHByb3BlcnR5IG9mIGEgZmlsdGVyIHBsb3RcbiAqIEBtZW1iZXJvZiB2aXNTdGF0ZVVwZGF0ZXJzXG4gKiBAcHVibGljXG4gKi9cbmV4cG9ydCBjb25zdCBzZXRGaWx0ZXJQbG90VXBkYXRlciA9IChcbiAgc3RhdGU6IFZpc1N0YXRlLFxuICB7aWR4LCBuZXdQcm9wLCB2YWx1ZUluZGV4ID0gMH06IFZpc1N0YXRlQWN0aW9ucy5TZXRGaWx0ZXJQbG90VXBkYXRlckFjdGlvblxuKTogVmlzU3RhdGUgPT4ge1xuICBsZXQgbmV3RmlsdGVyID0gey4uLnN0YXRlLmZpbHRlcnNbaWR4XSwgLi4ubmV3UHJvcH07XG4gIGNvbnN0IHByb3AgPSBPYmplY3Qua2V5cyhuZXdQcm9wKVswXTtcbiAgaWYgKHByb3AgPT09ICd5QXhpcycpIHtcbiAgICBjb25zdCBwbG90VHlwZSA9IGdldERlZmF1bHRGaWx0ZXJQbG90VHlwZShuZXdGaWx0ZXIpO1xuICAgIC8vIFRPRE86IHBsb3QgaXMgbm90IHN1cHBvcnRlZCBpbiBtdWx0aSBkYXRhc2V0IGZpbHRlciBmb3Igbm93XG4gICAgaWYgKHBsb3RUeXBlKSB7XG4gICAgICBuZXdGaWx0ZXIgPSB7XG4gICAgICAgIC4uLm5ld0ZpbHRlcixcbiAgICAgICAgLi4uZ2V0RmlsdGVyUGxvdCh7Li4ubmV3RmlsdGVyLCBwbG90VHlwZX0sIHN0YXRlLmRhdGFzZXRzW25ld0ZpbHRlci5kYXRhSWRbdmFsdWVJbmRleF1dKSxcbiAgICAgICAgcGxvdFR5cGVcbiAgICAgIH07XG4gICAgfVxuICB9XG5cbiAgcmV0dXJuIHtcbiAgICAuLi5zdGF0ZSxcbiAgICBmaWx0ZXJzOiBzdGF0ZS5maWx0ZXJzLm1hcCgoZiwgaSkgPT4gKGkgPT09IGlkeCA/IG5ld0ZpbHRlciA6IGYpKVxuICB9O1xufTtcblxuLyoqXG4gKiBBZGQgYSBuZXcgZmlsdGVyXG4gKiBAbWVtYmVyb2YgdmlzU3RhdGVVcGRhdGVyc1xuICogQHB1YmxpY1xuICovXG5leHBvcnQgY29uc3QgYWRkRmlsdGVyVXBkYXRlciA9IChcbiAgc3RhdGU6IFZpc1N0YXRlLFxuICBhY3Rpb246IFZpc1N0YXRlQWN0aW9ucy5BZGRGaWx0ZXJVcGRhdGVyQWN0aW9uXG4pOiBWaXNTdGF0ZSA9PlxuICAhYWN0aW9uLmRhdGFJZFxuICAgID8gc3RhdGVcbiAgICA6IHtcbiAgICAgICAgLi4uc3RhdGUsXG4gICAgICAgIGZpbHRlcnM6IFsuLi5zdGF0ZS5maWx0ZXJzLCBnZXREZWZhdWx0RmlsdGVyKHtkYXRhSWQ6IGFjdGlvbi5kYXRhSWQsIGlkOiBhY3Rpb24uaWR9KV1cbiAgICAgIH07XG5cbi8qKlxuICogU2V0IGxheWVyIGNvbG9yIHBhbGV0dGUgdWkgc3RhdGVcbiAqIEBtZW1iZXJvZiB2aXNTdGF0ZVVwZGF0ZXJzXG4gKi9cbmV4cG9ydCBjb25zdCBsYXllckNvbG9yVUlDaGFuZ2VVcGRhdGVyID0gKFxuICBzdGF0ZTogVmlzU3RhdGUsXG4gIHtvbGRMYXllciwgcHJvcCwgbmV3Q29uZmlnfTogVmlzU3RhdGVBY3Rpb25zLkxheWVyQ29sb3JVSUNoYW5nZVVwZGF0ZXJBY3Rpb25cbik6IFZpc1N0YXRlID0+IHtcbiAgY29uc3Qgb2xkVml4Q29uZmlnID0gb2xkTGF5ZXIuY29uZmlnLnZpc0NvbmZpZ1twcm9wXTtcbiAgY29uc3QgbmV3TGF5ZXIgPSBvbGRMYXllci51cGRhdGVMYXllckNvbG9yVUkocHJvcCwgbmV3Q29uZmlnKTtcbiAgY29uc3QgbmV3VmlzQ29uZmlnID0gbmV3TGF5ZXIuY29uZmlnLnZpc0NvbmZpZ1twcm9wXTtcbiAgaWYgKG9sZFZpeENvbmZpZyAhPT0gbmV3VmlzQ29uZmlnKSB7XG4gICAgcmV0dXJuIGxheWVyVmlzQ29uZmlnQ2hhbmdlVXBkYXRlcihzdGF0ZSwge1xuICAgICAgb2xkTGF5ZXIsXG4gICAgICBuZXdWaXNDb25maWc6IHtcbiAgICAgICAgW3Byb3BdOiBuZXdWaXNDb25maWdcbiAgICAgIH1cbiAgICB9KTtcbiAgfVxuICByZXR1cm4ge1xuICAgIC4uLnN0YXRlLFxuICAgIGxheWVyczogc3RhdGUubGF5ZXJzLm1hcChsID0+IChsLmlkID09PSBvbGRMYXllci5pZCA/IG5ld0xheWVyIDogbCkpXG4gIH07XG59O1xuXG4vKipcbiAqIFN0YXJ0IGFuZCBlbmQgZmlsdGVyIGFuaW1hdGlvblxuICogQG1lbWJlcm9mIHZpc1N0YXRlVXBkYXRlcnNcbiAqIEBwdWJsaWNcbiAqL1xuZXhwb3J0IGNvbnN0IHRvZ2dsZUZpbHRlckFuaW1hdGlvblVwZGF0ZXIgPSAoXG4gIHN0YXRlOiBWaXNTdGF0ZSxcbiAgYWN0aW9uOiBWaXNTdGF0ZUFjdGlvbnMuVG9nZ2xlRmlsdGVyQW5pbWF0aW9uVXBkYXRlckFjdGlvblxuKTogVmlzU3RhdGUgPT4gKHtcbiAgLi4uc3RhdGUsXG4gIGZpbHRlcnM6IHN0YXRlLmZpbHRlcnMubWFwKChmLCBpKSA9PiAoaSA9PT0gYWN0aW9uLmlkeCA/IHsuLi5mLCBpc0FuaW1hdGluZzogIWYuaXNBbmltYXRpbmd9IDogZikpXG59KTtcblxuLyoqXG4gKiBAbWVtYmVyb2YgdmlzU3RhdGVVcGRhdGVyc1xuICogQHB1YmxpY1xuICovXG5leHBvcnQgY29uc3QgdG9nZ2xlTGF5ZXJBbmltYXRpb25VcGRhdGVyID0gKFxuICBzdGF0ZTogVmlzU3RhdGUsXG4gIGFjdGlvbjogVmlzU3RhdGVBY3Rpb25zLlRvZ2dsZUxheWVyQW5pbWF0aW9uVXBkYXRlckFjdGlvblxuKTogVmlzU3RhdGUgPT4gKHtcbiAgLi4uc3RhdGUsXG4gIGFuaW1hdGlvbkNvbmZpZzoge1xuICAgIC4uLnN0YXRlLmFuaW1hdGlvbkNvbmZpZyxcbiAgICBpc0FuaW1hdGluZzogIXN0YXRlLmFuaW1hdGlvbkNvbmZpZy5pc0FuaW1hdGluZ1xuICB9XG59KTtcblxuLyoqXG4gKiBIaWRlIGFuZCBzaG93IGxheWVyIGFuaW1hdGlvbiBjb250cm9sXG4gKiBAbWVtYmVyb2YgdmlzU3RhdGVVcGRhdGVyc1xuICogQHB1YmxpY1xuICovXG5leHBvcnQgY29uc3QgdG9nZ2xlTGF5ZXJBbmltYXRpb25Db250cm9sVXBkYXRlciA9IChcbiAgc3RhdGU6IFZpc1N0YXRlLFxuICBhY3Rpb246IFZpc1N0YXRlQWN0aW9ucy5Ub2dnbGVMYXllckFuaW1hdGlvbkNvbnRyb2xVcGRhdGVyQWN0aW9uXG4pOiBWaXNTdGF0ZSA9PiAoe1xuICAuLi5zdGF0ZSxcbiAgYW5pbWF0aW9uQ29uZmlnOiB7XG4gICAgLi4uc3RhdGUuYW5pbWF0aW9uQ29uZmlnLFxuICAgIGhpZGVDb250cm9sOiAhc3RhdGUuYW5pbWF0aW9uQ29uZmlnLmhpZGVDb250cm9sXG4gIH1cbn0pO1xuXG4vKipcbiAqIENoYW5nZSBmaWx0ZXIgYW5pbWF0aW9uIHNwZWVkXG4gKiBAbWVtYmVyb2YgdmlzU3RhdGVVcGRhdGVyc1xuICogQHB1YmxpY1xuICovXG5leHBvcnQgY29uc3QgdXBkYXRlRmlsdGVyQW5pbWF0aW9uU3BlZWRVcGRhdGVyID0gKFxuICBzdGF0ZTogVmlzU3RhdGUsXG4gIGFjdGlvbjogVmlzU3RhdGVBY3Rpb25zLlVwZGF0ZUZpbHRlckFuaW1hdGlvblNwZWVkVXBkYXRlckFjdGlvblxuKTogVmlzU3RhdGUgPT4gKHtcbiAgLi4uc3RhdGUsXG4gIGZpbHRlcnM6IHN0YXRlLmZpbHRlcnMubWFwKChmLCBpKSA9PiAoaSA9PT0gYWN0aW9uLmlkeCA/IHsuLi5mLCBzcGVlZDogYWN0aW9uLnNwZWVkfSA6IGYpKVxufSk7XG5cbi8qKlxuICogUmVzZXQgYW5pbWF0aW9uIGNvbmZpZyBjdXJyZW50IHRpbWUgdG8gYSBzcGVjaWZpZWQgdmFsdWVcbiAqIEBtZW1iZXJvZiB2aXNTdGF0ZVVwZGF0ZXJzXG4gKiBAcHVibGljXG4gKlxuICovXG5leHBvcnQgY29uc3Qgc2V0TGF5ZXJBbmltYXRpb25UaW1lVXBkYXRlciA9IChcbiAgc3RhdGU6IFZpc1N0YXRlLFxuICB7dmFsdWV9OiBWaXNTdGF0ZUFjdGlvbnMuU2V0TGF5ZXJBbmltYXRpb25UaW1lVXBkYXRlckFjdGlvblxuKTogVmlzU3RhdGUgPT4gKHtcbiAgLi4uc3RhdGUsXG4gIGFuaW1hdGlvbkNvbmZpZzoge1xuICAgIC4uLnN0YXRlLmFuaW1hdGlvbkNvbmZpZyxcbiAgICBjdXJyZW50VGltZTogdmFsdWVcbiAgfVxufSk7XG5cbi8qKlxuICogVXBkYXRlIGFuaW1hdGlvbiBzcGVlZCB3aXRoIHRoZSB2ZXJ0aWNhbCBzcGVlZCBzbGlkZXJcbiAqIEBtZW1iZXJvZiB2aXNTdGF0ZVVwZGF0ZXJzXG4gKiBAcHVibGljXG4gKlxuICovXG5leHBvcnQgY29uc3QgdXBkYXRlTGF5ZXJBbmltYXRpb25TcGVlZFVwZGF0ZXIgPSAoXG4gIHN0YXRlOiBWaXNTdGF0ZSxcbiAge3NwZWVkfTogVmlzU3RhdGVBY3Rpb25zLlVwZGF0ZUxheWVyQW5pbWF0aW9uU3BlZWRVcGRhdGVyQWN0aW9uXG4pOiBWaXNTdGF0ZSA9PiB7XG4gIHJldHVybiB7XG4gICAgLi4uc3RhdGUsXG4gICAgYW5pbWF0aW9uQ29uZmlnOiB7XG4gICAgICAuLi5zdGF0ZS5hbmltYXRpb25Db25maWcsXG4gICAgICBzcGVlZFxuICAgIH1cbiAgfTtcbn07XG5cbi8qKlxuICogU2hvdyBsYXJnZXIgdGltZSBmaWx0ZXIgYXQgYm90dG9tIGZvciB0aW1lIHBsYXliYWNrIChhcHBseSB0byB0aW1lIGZpbHRlciBvbmx5KVxuICogQG1lbWJlcm9mIHZpc1N0YXRlVXBkYXRlcnNcbiAqIEBwdWJsaWNcbiAqL1xuZXhwb3J0IGNvbnN0IHNldEZpbHRlclZpZXdVcGRhdGVyID0gKFxuICBzdGF0ZTogVmlzU3RhdGUsXG4gIGFjdGlvbjogVmlzU3RhdGVBY3Rpb25zLlNldEZpbHRlclZpZXdVcGRhdGVyQWN0aW9uXG4pID0+IHtcbiAgY29uc3Qge3ZpZXcsIGlkeH0gPSBhY3Rpb247XG4gIGNvbnN0IHNob3VsZFJlc2V0T3RoZXJGaWx0ZXJzVmlldyA9IHZpZXcgPT09IEZJTFRFUl9WSUVXX1RZUEVTLmVubGFyZ2VkO1xuICByZXR1cm4ge1xuICAgIC4uLnN0YXRlLFxuICAgIGZpbHRlcnM6IHN0YXRlLmZpbHRlcnMubWFwKChmLCBpKSA9PlxuICAgICAgaSA9PT0gaWR4XG4gICAgICAgID8ge1xuICAgICAgICAgICAgLi4uZixcbiAgICAgICAgICAgIHZpZXdcbiAgICAgICAgICB9XG4gICAgICAgIDogc2hvdWxkUmVzZXRPdGhlckZpbHRlcnNWaWV3XG4gICAgICAgID8ge1xuICAgICAgICAgICAgLi4uZixcbiAgICAgICAgICAgIHZpZXc6IEZJTFRFUl9WSUVXX1RZUEVTLnNpZGVcbiAgICAgICAgICB9XG4gICAgICAgIDogZlxuICAgIClcbiAgfTtcbn07XG5cbi8qKlxuICogVG9nZ2xlcyBmaWx0ZXIgZmVhdHVyZSB2aXNpYmlsaXR5XG4gKiBAbWVtYmVyb2YgdmlzU3RhdGVVcGRhdGVyc1xuICovXG5leHBvcnQgY29uc3QgdG9nZ2xlRmlsdGVyRmVhdHVyZVVwZGF0ZXIgPSAoXG4gIHN0YXRlOiBWaXNTdGF0ZSxcbiAgYWN0aW9uOiBWaXNTdGF0ZUFjdGlvbnMuVG9nZ2xlRmlsdGVyRmVhdHVyZVVwZGF0ZXJBY3Rpb25cbik6IFZpc1N0YXRlID0+IHtcbiAgY29uc3QgZmlsdGVyID0gc3RhdGUuZmlsdGVyc1thY3Rpb24uaWR4XTtcbiAgY29uc3QgaXNWaXNpYmxlID0gZ2V0KGZpbHRlciwgWyd2YWx1ZScsICdwcm9wZXJ0aWVzJywgJ2lzVmlzaWJsZSddKTtcblxuICBsZXQgbmV3U3RhdGUgPSBzZXRGaWx0ZXJVcGRhdGVyKHN0YXRlLCB7XG4gICAgaWR4OiBhY3Rpb24uaWR4LFxuICAgIHByb3A6ICdlbmFibGVkJyxcbiAgICB2YWx1ZTogIWlzVmlzaWJsZVxuICB9KTtcblxuICBuZXdTdGF0ZSA9IHNldEZpbHRlclVwZGF0ZXIobmV3U3RhdGUsIHtcbiAgICBpZHg6IGFjdGlvbi5pZHgsXG4gICAgcHJvcDogJ3ZhbHVlJyxcbiAgICB2YWx1ZTogZmVhdHVyZVRvRmlsdGVyVmFsdWUoZmlsdGVyLnZhbHVlLCBmaWx0ZXIuaWQsIHtcbiAgICAgIGlzVmlzaWJsZTogIWlzVmlzaWJsZVxuICAgIH0pXG4gIH0pO1xuXG4gIHJldHVybiBuZXdTdGF0ZTtcbn07XG5cbi8qKlxuICogUmVtb3ZlIGEgZmlsdGVyXG4gKiBAbWVtYmVyb2YgdmlzU3RhdGVVcGRhdGVyc1xuICogQHB1YmxpY1xuICovXG5leHBvcnQgY29uc3QgcmVtb3ZlRmlsdGVyVXBkYXRlciA9IChcbiAgc3RhdGU6IFZpc1N0YXRlLFxuICBhY3Rpb246IFZpc1N0YXRlQWN0aW9ucy5SZW1vdmVGaWx0ZXJVcGRhdGVyQWN0aW9uXG4pOiBWaXNTdGF0ZSA9PiB7XG4gIGNvbnN0IHtpZHh9ID0gYWN0aW9uO1xuICBjb25zdCB7ZGF0YUlkLCBpZH0gPSBzdGF0ZS5maWx0ZXJzW2lkeF07XG5cbiAgY29uc3QgbmV3RmlsdGVycyA9IFtcbiAgICAuLi5zdGF0ZS5maWx0ZXJzLnNsaWNlKDAsIGlkeCksXG4gICAgLi4uc3RhdGUuZmlsdGVycy5zbGljZShpZHggKyAxLCBzdGF0ZS5maWx0ZXJzLmxlbmd0aClcbiAgXTtcblxuICBjb25zdCBmaWx0ZXJlZERhdGFzZXRzID0gYXBwbHlGaWx0ZXJzVG9EYXRhc2V0cyhkYXRhSWQsIHN0YXRlLmRhdGFzZXRzLCBuZXdGaWx0ZXJzLCBzdGF0ZS5sYXllcnMpO1xuICBjb25zdCBuZXdFZGl0b3IgPVxuICAgIGdldEZpbHRlcklkSW5GZWF0dXJlKHN0YXRlLmVkaXRvci5zZWxlY3RlZEZlYXR1cmUpID09PSBpZFxuICAgICAgPyB7XG4gICAgICAgICAgLi4uc3RhdGUuZWRpdG9yLFxuICAgICAgICAgIHNlbGVjdGVkRmVhdHVyZTogbnVsbFxuICAgICAgICB9XG4gICAgICA6IHN0YXRlLmVkaXRvcjtcblxuICBsZXQgbmV3U3RhdGUgPSBzZXQoWydmaWx0ZXJzJ10sIG5ld0ZpbHRlcnMsIHN0YXRlKTtcbiAgbmV3U3RhdGUgPSBzZXQoWydkYXRhc2V0cyddLCBmaWx0ZXJlZERhdGFzZXRzLCBuZXdTdGF0ZSk7XG4gIG5ld1N0YXRlID0gc2V0KFsnZWRpdG9yJ10sIG5ld0VkaXRvciwgbmV3U3RhdGUpO1xuXG4gIHJldHVybiB1cGRhdGVBbGxMYXllckRvbWFpbkRhdGEobmV3U3RhdGUsIGRhdGFJZCwgdW5kZWZpbmVkKTtcbn07XG5cbi8qKlxuICogQWRkIGEgbmV3IGxheWVyXG4gKiBAbWVtYmVyb2YgdmlzU3RhdGVVcGRhdGVyc1xuICogQHB1YmxpY1xuICovXG5leHBvcnQgY29uc3QgYWRkTGF5ZXJVcGRhdGVyID0gKFxuICBzdGF0ZTogVmlzU3RhdGUsXG4gIGFjdGlvbjogVmlzU3RhdGVBY3Rpb25zLkFkZExheWVyVXBkYXRlckFjdGlvblxuKTogVmlzU3RhdGUgPT4ge1xuICBsZXQgbmV3TGF5ZXI7XG4gIGxldCBuZXdMYXllckRhdGE7XG4gIGlmIChhY3Rpb24uY29uZmlnKSB7XG4gICAgbmV3TGF5ZXIgPSBjcmVhdGVMYXllckZyb21Db25maWcoc3RhdGUsIGFjdGlvbi5jb25maWcpO1xuICAgIGlmICghbmV3TGF5ZXIpIHtcbiAgICAgIENvbnNvbGUud2FybihcbiAgICAgICAgJ0ZhaWxlZCB0byBjcmVhdGUgbGF5ZXIgZnJvbSBjb25maWcsIGl0IHVzdWFsbHkgbWVhbnMgdGhlIGNvbmZpZyBpcyBub3QgYmUgaW4gY29ycmVjdCBmb3JtYXQnLFxuICAgICAgICBhY3Rpb24uY29uZmlnXG4gICAgICApO1xuICAgICAgcmV0dXJuIHN0YXRlO1xuICAgIH1cblxuICAgIGNvbnN0IHJlc3VsdCA9IGNhbGN1bGF0ZUxheWVyRGF0YShuZXdMYXllciwgc3RhdGUpO1xuICAgIG5ld0xheWVyID0gcmVzdWx0LmxheWVyO1xuICAgIG5ld0xheWVyRGF0YSA9IHJlc3VsdC5sYXllckRhdGE7XG4gIH0gZWxzZSB7XG4gICAgLy8gY3JlYXRlIGFuIGVtcHR5IGxheWVyIHdpdGggYSBzcGVjaWZpYyBkYXRhc2V0IG9yIGEgZGVmYXVsdCBvbmVcbiAgICBjb25zdCBkZWZhdWx0RGF0YXNldCA9IGFjdGlvbi5kYXRhc2V0SWQgPz8gT2JqZWN0LmtleXMoc3RhdGUuZGF0YXNldHMpWzBdO1xuICAgIG5ld0xheWVyID0gbmV3IExheWVyKHtcbiAgICAgIGlzVmlzaWJsZTogdHJ1ZSxcbiAgICAgIGlzQ29uZmlnQWN0aXZlOiB0cnVlLFxuICAgICAgZGF0YUlkOiBkZWZhdWx0RGF0YXNldFxuICAgIH0pO1xuICAgIG5ld0xheWVyRGF0YSA9IHt9O1xuICB9XG4gIHJldHVybiB7XG4gICAgLi4uc3RhdGUsXG4gICAgbGF5ZXJzOiBbLi4uc3RhdGUubGF5ZXJzLCBuZXdMYXllcl0sXG4gICAgbGF5ZXJEYXRhOiBbLi4uc3RhdGUubGF5ZXJEYXRhLCBuZXdMYXllckRhdGFdLFxuICAgIC8vIGFkZCBuZXcgbGF5ZXIgYXQgdGhlIHRvcFxuICAgIGxheWVyT3JkZXI6IFtuZXdMYXllci5pZCwgLi4uc3RhdGUubGF5ZXJPcmRlcl0sXG4gICAgc3BsaXRNYXBzOiBhZGROZXdMYXllcnNUb1NwbGl0TWFwKHN0YXRlLnNwbGl0TWFwcywgbmV3TGF5ZXIpXG4gIH07XG59O1xuXG4vKipcbiAqIHJlbW92ZSBsYXllclxuICogQG1lbWJlcm9mIHZpc1N0YXRlVXBkYXRlcnNcbiAqIEBwdWJsaWNcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHJlbW92ZUxheWVyVXBkYXRlcjxUIGV4dGVuZHMgVmlzU3RhdGU+KFxuICBzdGF0ZTogVCxcbiAge2lkfTogVmlzU3RhdGVBY3Rpb25zLlJlbW92ZUxheWVyVXBkYXRlckFjdGlvblxuKTogVCB7XG4gIGNvbnN0IGlkeCA9IE51bWJlci5pc0Zpbml0ZShpZClcbiAgICA/IC8vIHN1cHBvcnQgb2xkZXIgQVBJLCByZW1vdmUgbGF5ZXIgYnkgaWR4XG4gICAgICBOdW1iZXIoaWQpXG4gICAgOiBzdGF0ZS5sYXllcnMuZmluZEluZGV4KGwgPT4gbC5pZCA9PT0gaWQpO1xuICBpZiAoaWR4IDwgMCB8fCBpZHggPj0gc3RhdGUubGF5ZXJzLmxlbmd0aCkge1xuICAgIC8vIGludmFsaWQgaW5kZXhcbiAgICBDb25zb2xlLndhcm4oYGNhbiBub3QgcmVtb3ZlIGxheWVyIHdpdGggaW52YWxpZCBpZHxpZHggJHtpZH1gKTtcbiAgICByZXR1cm4gc3RhdGU7XG4gIH1cblxuICBjb25zdCB7bGF5ZXJzLCBsYXllckRhdGEsIGxheWVyT3JkZXIsIGNsaWNrZWQsIGhvdmVySW5mb30gPSBzdGF0ZTtcbiAgY29uc3QgbGF5ZXJUb1JlbW92ZSA9IGxheWVyc1tpZHhdO1xuICBjb25zdCBuZXdTdGF0ZSA9IHtcbiAgICAuLi5zdGF0ZSxcbiAgICBsYXllcnM6IGZpbHRlck91dEJ5SWQobGF5ZXJUb1JlbW92ZS5pZCkobGF5ZXJzKSxcbiAgICBsYXllckRhdGE6IHJlbW92ZUVsZW1lbnRBdEluZGV4KGlkeCkobGF5ZXJEYXRhKSxcbiAgICBsYXllck9yZGVyOiBsYXllck9yZGVyLmZpbHRlcihsYXllcklkID0+IGxheWVySWQgIT09IGxheWVyVG9SZW1vdmUuaWQpLFxuICAgIGNsaWNrZWQ6IGxheWVyVG9SZW1vdmUuaXNMYXllckhvdmVyZWQoY2xpY2tlZCkgPyB1bmRlZmluZWQgOiBjbGlja2VkLFxuICAgIGhvdmVySW5mbzogbGF5ZXJUb1JlbW92ZS5pc0xheWVySG92ZXJlZChob3ZlckluZm8pID8gdW5kZWZpbmVkIDogaG92ZXJJbmZvLFxuICAgIHNwbGl0TWFwczogcmVtb3ZlTGF5ZXJGcm9tU3BsaXRNYXBzKHN0YXRlLnNwbGl0TWFwcywgbGF5ZXJUb1JlbW92ZSlcbiAgICAvLyBUT0RPOiB1cGRhdGUgZmlsdGVycywgY3JlYXRlIGhlbHBlciB0byByZW1vdmUgbGF5ZXIgZm9ybSBmaWx0ZXIgKHJlbW92ZSBsYXllcmlkIGFuZCBkYXRhaWQpIGlmIG1hcHBlZFxuICB9O1xuXG4gIHJldHVybiB1cGRhdGVBbmltYXRpb25Eb21haW4obmV3U3RhdGUpO1xufVxuXG4vKipcbiAqIFJlb3JkZXIgbGF5ZXJcbiAqIEBtZW1iZXJvZiB2aXNTdGF0ZVVwZGF0ZXJzXG4gKiBAcHVibGljXG4gKi9cbmV4cG9ydCBjb25zdCByZW9yZGVyTGF5ZXJVcGRhdGVyID0gKFxuICBzdGF0ZTogVmlzU3RhdGUsXG4gIHtvcmRlcn06IFZpc1N0YXRlQWN0aW9ucy5SZW9yZGVyTGF5ZXJVcGRhdGVyQWN0aW9uXG4pOiBWaXNTdGF0ZSA9PiAoe1xuICAuLi5zdGF0ZSxcbiAgbGF5ZXJPcmRlcjogb3JkZXJcbn0pO1xuXG4vKipcbiAqIGR1cGxpY2F0ZSBsYXllclxuICogQG1lbWJlcm9mIHZpc1N0YXRlVXBkYXRlcnNcbiAqIEBwdWJsaWNcbiAqL1xuZXhwb3J0IGNvbnN0IGR1cGxpY2F0ZUxheWVyVXBkYXRlciA9IChcbiAgc3RhdGU6IFZpc1N0YXRlLFxuICB7aWR9OiBWaXNTdGF0ZUFjdGlvbnMuRHVwbGljYXRlTGF5ZXJVcGRhdGVyQWN0aW9uXG4pOiBWaXNTdGF0ZSA9PiB7XG4gIGNvbnN0IGlkeCA9IE51bWJlci5pc0Zpbml0ZShpZClcbiAgICA/IC8vIHN1cHBvcnQgb2xkZXIgQVBJLCByZW1vdmUgbGF5ZXIgYnkgaWR4XG4gICAgICBOdW1iZXIoaWQpXG4gICAgOiBzdGF0ZS5sYXllcnMuZmluZEluZGV4KGwgPT4gbC5pZCA9PT0gaWQpO1xuICBpZiAoaWR4IDwgMCB8fCAhc3RhdGUubGF5ZXJzW2lkeF0pIHtcbiAgICBDb25zb2xlLndhcm4oYGxheWVyICR7aWR4fSBub3QgZm91bmQgaW4gbGF5ZXJPcmRlcmApO1xuICAgIHJldHVybiBzdGF0ZTtcbiAgfVxuXG4gIGNvbnN0IHtsYXllcnN9ID0gc3RhdGU7XG4gIGNvbnN0IG9yaWdpbmFsID0gbGF5ZXJzW2lkeF07XG5cbiAgY29uc3Qgb3JpZ2luYWxMYXllck9yZGVySWR4ID0gc3RhdGUubGF5ZXJPcmRlci5maW5kSW5kZXgobGlkID0+IGxpZCA9PT0gb3JpZ2luYWwuaWQpO1xuICBsZXQgbmV3TGFiZWwgPSBgQ29weSBvZiAke29yaWdpbmFsLmNvbmZpZy5sYWJlbH1gO1xuICBsZXQgcG9zdGZpeCA9IDA7XG4gIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBuby1sb29wLWZ1bmNcbiAgd2hpbGUgKGxheWVycy5maW5kKGwgPT4gbC5jb25maWcubGFiZWwgPT09IG5ld0xhYmVsKSkge1xuICAgIG5ld0xhYmVsID0gYENvcHkgb2YgJHtvcmlnaW5hbC5jb25maWcubGFiZWx9ICR7Kytwb3N0Zml4fWA7XG4gIH1cblxuICAvLyBjb2xsZWN0IGxheWVyIGNvbmZpZyBmcm9tIG9yaWdpbmFsXG4gIGNvbnN0IGxvYWRlZExheWVyID0gc2VyaWFsaXplTGF5ZXIob3JpZ2luYWwsIHN0YXRlLnNjaGVtYSk7XG5cbiAgLy8gYXNzaWduIG5ldyBpZCBhbmQgbGFiZWwgdG8gY29waWVkIGxheWVyXG4gIGlmICghbG9hZGVkTGF5ZXI/LmNvbmZpZykge1xuICAgIHJldHVybiBzdGF0ZTtcbiAgfVxuICBsb2FkZWRMYXllci5jb25maWcubGFiZWwgPSBuZXdMYWJlbDtcbiAgbG9hZGVkTGF5ZXIuaWQgPSBnZW5lcmF0ZUhhc2hJZChMQVlFUl9JRF9MRU5HVEgpO1xuXG4gIC8vIGFkZCBsYXllciB0byBzdGF0ZVxuICBsZXQgbmV4dFN0YXRlID0gYWRkTGF5ZXJVcGRhdGVyKHN0YXRlLCB7Y29uZmlnOiBsb2FkZWRMYXllcn0pO1xuICAvLyByZXRyaWV2ZSBuZXdseSBjcmVhdGVkIGxheWVyXG4gIGNvbnN0IG5ld0xheWVyID0gbmV4dFN0YXRlLmxheWVyc1tuZXh0U3RhdGUubGF5ZXJzLmxlbmd0aCAtIDFdO1xuICAvLyB1cGRhdGUgbGF5ZXIgb3JkZXIgd2l0aCBuZXdMeWFlci5pZFxuICBjb25zdCBuZXdMYXllck9yZGVyID0gYXJyYXlJbnNlcnQoXG4gICAgbmV4dFN0YXRlLmxheWVyT3JkZXIuc2xpY2UoMSwgbmV4dFN0YXRlLmxheWVyT3JkZXIubGVuZ3RoKSxcbiAgICBvcmlnaW5hbExheWVyT3JkZXJJZHgsXG4gICAgbmV3TGF5ZXIuaWRcbiAgKTtcblxuICBuZXh0U3RhdGUgPSByZW9yZGVyTGF5ZXJVcGRhdGVyKG5leHRTdGF0ZSwge29yZGVyOiBuZXdMYXllck9yZGVyfSk7XG5cbiAgcmV0dXJuIHVwZGF0ZUFuaW1hdGlvbkRvbWFpbihuZXh0U3RhdGUpO1xufTtcblxuLyoqXG4gKiBBZGQgYSBuZXcgZWZmZWN0XG4gKiBAbWVtYmVyb2YgdmlzU3RhdGVVcGRhdGVyc1xuICogQHB1YmxpY1xuICovXG5leHBvcnQgY29uc3QgYWRkRWZmZWN0VXBkYXRlciA9IChcbiAgc3RhdGU6IFZpc1N0YXRlLFxuICBhY3Rpb246IFZpc1N0YXRlQWN0aW9ucy5BZGRFZmZlY3RVcGRhdGVyQWN0aW9uXG4pOiBWaXNTdGF0ZSA9PiB7XG4gIGNvbnN0IG5ld0VmZmVjdCA9IGNyZWF0ZURlY2tFZmZlY3RGcm9tQ29uZmlnKGFjdGlvbi5jb25maWcpO1xuXG4gIC8vIGNvbGxhcHNlIGNvbmZpZ3VyYXRvcnMgZm9yIG90aGVyIGVmZmVjdHNcbiAgc3RhdGUuZWZmZWN0cy5mb3JFYWNoKGVmZmVjdCA9PiBlZmZlY3QudXBkYXRlQ29uZmlnKHtpc0NvbmZpZ0FjdGl2ZTogZmFsc2V9KSk7XG5cbiAgY29uc3QgZWZmZWN0cyA9IFsuLi5zdGF0ZS5lZmZlY3RzLCBuZXdFZmZlY3RdO1xuICBjb25zdCBlZmZlY3RPcmRlciA9IGZpeEVmZmVjdE9yZGVyKGVmZmVjdHMsIFtuZXdFZmZlY3QuaWQsIC4uLnN0YXRlLmVmZmVjdE9yZGVyXSk7XG5cbiAgcmV0dXJuIHtcbiAgICAuLi5zdGF0ZSxcbiAgICBlZmZlY3RzLFxuICAgIGVmZmVjdE9yZGVyXG4gIH07XG59O1xuXG4vKipcbiAqIHJlbW92ZSBlZmZlY3RcbiAqIEBtZW1iZXJvZiB2aXNTdGF0ZVVwZGF0ZXJzXG4gKiBAcHVibGljXG4gKi9cbmV4cG9ydCBjb25zdCByZW1vdmVFZmZlY3RVcGRhdGVyID0gKFxuICBzdGF0ZTogVmlzU3RhdGUsXG4gIHtpZH06IFZpc1N0YXRlQWN0aW9ucy5SZW1vdmVFZmZlY3RVcGRhdGVyQWN0aW9uXG4pOiBWaXNTdGF0ZSA9PiB7XG4gIGNvbnN0IGlkeCA9IHN0YXRlLmVmZmVjdHMuZmluZEluZGV4KGwgPT4gbC5pZCA9PT0gaWQpO1xuICBpZiAoaWR4IDwgMCB8fCBpZHggPj0gc3RhdGUuZWZmZWN0cy5sZW5ndGgpIHtcbiAgICBDb25zb2xlLndhcm4oYGNhbiBub3QgcmVtb3ZlIGVmZmVjdCB3aXRoIGludmFsaWQgaWQgJHtpZH1gKTtcbiAgICByZXR1cm4gc3RhdGU7XG4gIH1cblxuICBjb25zdCB7ZWZmZWN0cywgZWZmZWN0T3JkZXJ9ID0gc3RhdGU7XG4gIGNvbnN0IGVmZmVjdFRvUmVtb3ZlID0gZWZmZWN0c1tpZHhdO1xuICByZXR1cm4ge1xuICAgIC4uLnN0YXRlLFxuICAgIC8vIEB0cy1leHBlY3QtZXJyb3IgZml4ZWQgaW4gdHNcbiAgICBlZmZlY3RzOiBmaWx0ZXJPdXRCeUlkKGVmZmVjdFRvUmVtb3ZlLmlkKShlZmZlY3RzKSxcbiAgICBlZmZlY3RPcmRlcjogZWZmZWN0T3JkZXIuZmlsdGVyKGVmZmVjdElkID0+IGVmZmVjdElkICE9PSBlZmZlY3RUb1JlbW92ZS5pZClcbiAgfTtcbn07XG5cbi8qKlxuICogUmVvcmRlciBlZmZlY3RcbiAqIEBtZW1iZXJvZiB2aXNTdGF0ZVVwZGF0ZXJzXG4gKiBAcHVibGljXG4gKi9cbmV4cG9ydCBjb25zdCByZW9yZGVyRWZmZWN0VXBkYXRlciA9IChcbiAgc3RhdGU6IFZpc1N0YXRlLFxuICB7b3JkZXJ9OiBWaXNTdGF0ZUFjdGlvbnMuUmVvcmRlckVmZmVjdFVwZGF0ZXJBY3Rpb25cbik6IFZpc1N0YXRlID0+ICh7XG4gIC4uLnN0YXRlLFxuICBlZmZlY3RPcmRlcjogZml4RWZmZWN0T3JkZXIoc3RhdGUuZWZmZWN0cywgWy4uLm9yZGVyXSlcbn0pO1xuXG4vKipcbiAqIFVwZGF0ZSBlZmZlY3RcbiAqIEBtZW1iZXJvZiB2aXNTdGF0ZVVwZGF0ZXJzXG4gKiBAcHVibGljXG4gKi9cbmV4cG9ydCBjb25zdCB1cGRhdGVFZmZlY3RVcGRhdGVyID0gKFxuICBzdGF0ZTogVmlzU3RhdGUsXG4gIHtpZCwgcHJvcHN9OiBWaXNTdGF0ZUFjdGlvbnMuVXBkYXRlRWZmZWN0VXBkYXRlckFjdGlvblxuKTogVmlzU3RhdGUgPT4ge1xuICBjb25zdCBpZHggPSBzdGF0ZS5lZmZlY3RzLmZpbmRJbmRleChsID0+IGwuaWQgPT09IGlkKTtcbiAgaWYgKGlkeCA8IDAgfHwgaWR4ID49IHN0YXRlLmVmZmVjdHMubGVuZ3RoKSB7XG4gICAgQ29uc29sZS53YXJuKGBjYW4gbm90IHVwZGF0ZSBlZmZlY3Qgd2l0aCBpbnZhbGlkIGlkICR7aWR9YCk7XG4gICAgcmV0dXJuIHN0YXRlO1xuICB9XG5cbiAgY29uc3QgbmV3RWZmZWN0cyA9IFsuLi5zdGF0ZS5lZmZlY3RzXTtcbiAgbmV3RWZmZWN0c1tpZHhdLnVwZGF0ZUNvbmZpZyhwcm9wcyk7XG5cbiAgcmV0dXJuIHtcbiAgICAuLi5zdGF0ZSxcbiAgICBlZmZlY3RzOiBuZXdFZmZlY3RzXG4gIH07XG59O1xuXG4vKipcbiAqIFJlbW92ZSBhIGRhdGFzZXQgYW5kIGFsbCBsYXllcnMsIGZpbHRlcnMsIHRvb2x0aXAgY29uZmlncyB0aGF0IGJhc2VkIG9uIGl0XG4gKiBAbWVtYmVyb2YgdmlzU3RhdGVVcGRhdGVyc1xuICogQHB1YmxpY1xuICovXG5leHBvcnQgZnVuY3Rpb24gcmVtb3ZlRGF0YXNldFVwZGF0ZXI8VCBleHRlbmRzIFZpc1N0YXRlPihcbiAgc3RhdGU6IFQsXG4gIGFjdGlvbjogVmlzU3RhdGVBY3Rpb25zLlJlbW92ZURhdGFzZXRVcGRhdGVyQWN0aW9uXG4pOiBUIHtcbiAgLy8gZXh0cmFjdCBkYXRhc2V0IGtleVxuICBjb25zdCB7ZGF0YUlkOiBkYXRhc2V0S2V5fSA9IGFjdGlvbjtcbiAgY29uc3Qge2RhdGFzZXRzfSA9IHN0YXRlO1xuXG4gIC8vIGNoZWNrIGlmIGRhdGFzZXQgaXMgcHJlc2VudFxuICBpZiAoIWRhdGFzZXRzW2RhdGFzZXRLZXldKSB7XG4gICAgcmV0dXJuIHN0YXRlO1xuICB9XG5cbiAgLyogZXNsaW50LWRpc2FibGUgbm8tdW51c2VkLXZhcnMgKi9cbiAgY29uc3Qge1xuICAgIGxheWVycyxcbiAgICBkYXRhc2V0czoge1tkYXRhc2V0S2V5XTogZGF0YXNldCwgLi4ubmV3RGF0YXNldHN9XG4gIH0gPSBzdGF0ZTtcbiAgLyogZXNsaW50LWVuYWJsZSBuby11bnVzZWQtdmFycyAqL1xuXG4gIGNvbnN0IGxheWVyc1RvUmVtb3ZlID0gbGF5ZXJzLmZpbHRlcihsID0+IGwuY29uZmlnLmRhdGFJZCA9PT0gZGF0YXNldEtleSkubWFwKGwgPT4gbC5pZCk7XG5cbiAgLy8gcmVtb3ZlIGxheWVycyBhbmQgZGF0YXNldHNcbiAgbGV0IG5ld1N0YXRlID0gbGF5ZXJzVG9SZW1vdmUucmVkdWNlKChhY2N1LCBpZCkgPT4gcmVtb3ZlTGF5ZXJVcGRhdGVyKGFjY3UsIHtpZH0pLCB7XG4gICAgLi4uc3RhdGUsXG4gICAgZGF0YXNldHM6IG5ld0RhdGFzZXRzXG4gIH0pO1xuXG4gIC8vIHJlbW92ZSBmaWx0ZXJzXG4gIGNvbnN0IGZpbHRlcnMgPSBuZXdTdGF0ZS5maWx0ZXJzLmZpbHRlcihmaWx0ZXIgPT4gIWZpbHRlci5kYXRhSWQuaW5jbHVkZXMoZGF0YXNldEtleSkpO1xuXG4gIG5ld1N0YXRlID0gey4uLm5ld1N0YXRlLCBmaWx0ZXJzfTtcblxuICByZXR1cm4gcmVtb3ZlRGF0YXNldEZyb21JbnRlcmFjdGlvbkNvbmZpZyhuZXdTdGF0ZSwge2RhdGFJZDogZGF0YXNldEtleX0pO1xufVxuXG5mdW5jdGlvbiByZW1vdmVEYXRhc2V0RnJvbUludGVyYWN0aW9uQ29uZmlnKHN0YXRlLCB7ZGF0YUlkfSkge1xuICBsZXQge2ludGVyYWN0aW9uQ29uZmlnfSA9IHN0YXRlO1xuICBjb25zdCB7dG9vbHRpcH0gPSBpbnRlcmFjdGlvbkNvbmZpZztcbiAgaWYgKHRvb2x0aXApIHtcbiAgICBjb25zdCB7Y29uZmlnfSA9IHRvb2x0aXA7XG4gICAgLyogZXNsaW50LWRpc2FibGUgbm8tdW51c2VkLXZhcnMgKi9cbiAgICBjb25zdCB7W2RhdGFJZF06IGZpZWxkcywgLi4uZmllbGRzVG9TaG93fSA9IGNvbmZpZy5maWVsZHNUb1Nob3c7XG4gICAgLyogZXNsaW50LWVuYWJsZSBuby11bnVzZWQtdmFycyAqL1xuICAgIGludGVyYWN0aW9uQ29uZmlnID0ge1xuICAgICAgLi4uaW50ZXJhY3Rpb25Db25maWcsXG4gICAgICB0b29sdGlwOiB7Li4udG9vbHRpcCwgY29uZmlnOiB7Li4uY29uZmlnLCBmaWVsZHNUb1Nob3d9fVxuICAgIH07XG4gIH1cblxuICByZXR1cm4gey4uLnN0YXRlLCBpbnRlcmFjdGlvbkNvbmZpZ307XG59XG4vKipcbiAqIHVwZGF0ZSBsYXllciBibGVuZGluZyBtb2RlXG4gKiBAbWVtYmVyb2YgdmlzU3RhdGVVcGRhdGVyc1xuICogQHB1YmxpY1xuICovXG5leHBvcnQgY29uc3QgdXBkYXRlTGF5ZXJCbGVuZGluZ1VwZGF0ZXIgPSAoXG4gIHN0YXRlOiBWaXNTdGF0ZSxcbiAgYWN0aW9uOiBWaXNTdGF0ZUFjdGlvbnMuVXBkYXRlTGF5ZXJCbGVuZGluZ1VwZGF0ZXJBY3Rpb25cbik6IFZpc1N0YXRlID0+ICh7XG4gIC4uLnN0YXRlLFxuICBsYXllckJsZW5kaW5nOiBhY3Rpb24ubW9kZVxufSk7XG5cbi8qKlxuICogdXBkYXRlIG92ZXJsYXkgYmxlbmRpbmcgbW9kZVxuICogQG1lbWJlcm9mIHZpc1N0YXRlVXBkYXRlcnNcbiAqIEBwdWJsaWNcbiAqL1xuZXhwb3J0IGNvbnN0IHVwZGF0ZU92ZXJsYXlCbGVuZGluZ1VwZGF0ZXIgPSAoXG4gIHN0YXRlOiBWaXNTdGF0ZSxcbiAgYWN0aW9uOiBWaXNTdGF0ZUFjdGlvbnMuVXBkYXRlT3ZlcmxheUJsZW5kaW5nVXBkYXRlckFjdGlvblxuKTogVmlzU3RhdGUgPT4gKHtcbiAgLi4uc3RhdGUsXG4gIG92ZXJsYXlCbGVuZGluZzogYWN0aW9uLm1vZGVcbn0pO1xuXG4vKipcbiAqIERpc3BsYXkgZGF0YXNldCB0YWJsZSBpbiBhIG1vZGFsXG4gKiBAbWVtYmVyb2YgdmlzU3RhdGVVcGRhdGVyc1xuICogQHB1YmxpY1xuICovXG5leHBvcnQgY29uc3Qgc2hvd0RhdGFzZXRUYWJsZVVwZGF0ZXIgPSAoXG4gIHN0YXRlOiBWaXNTdGF0ZSxcbiAgYWN0aW9uOiBWaXNTdGF0ZUFjdGlvbnMuU2hvd0RhdGFzZXRUYWJsZVVwZGF0ZXJBY3Rpb25cbik6IFZpc1N0YXRlID0+IHtcbiAgcmV0dXJuIHtcbiAgICAuLi5zdGF0ZSxcbiAgICBlZGl0aW5nRGF0YXNldDogYWN0aW9uLmRhdGFJZFxuICB9O1xufTtcblxuLyoqXG4gKiBBZGQgY3VzdG9tIGNvbG9yIGZvciBkYXRhc2V0cyBhbmQgbGF5ZXJzXG4gKiBAbWVtYmVyb2YgdmlzU3RhdGVVcGRhdGVyc1xuICogQHB1YmxpY1xuICovXG5leHBvcnQgY29uc3QgdXBkYXRlVGFibGVDb2xvclVwZGF0ZXIgPSAoXG4gIHN0YXRlOiBWaXNTdGF0ZSxcbiAgYWN0aW9uOiBWaXNTdGF0ZUFjdGlvbnMuVXBkYXRlRGF0YXNldENvbG9yVXBkYXRlclxuKTogVmlzU3RhdGUgPT4ge1xuICByZXR1cm4gdXBkYXRlRGF0YXNldFByb3BzVXBkYXRlcihzdGF0ZSwge2RhdGFJZDogYWN0aW9uLmRhdGFJZCwgcHJvcHM6IHtjb2xvcjogYWN0aW9uLm5ld0NvbG9yfX0pO1xufTtcblxuLyoqXG4gKiByZXNldCB2aXNTdGF0ZSB0byBpbml0aWFsIFN0YXRlXG4gKiBAbWVtYmVyb2YgdmlzU3RhdGVVcGRhdGVyc1xuICogQHB1YmxpY1xuICovXG5leHBvcnQgY29uc3QgcmVzZXRNYXBDb25maWdVcGRhdGVyID0gKHN0YXRlOiBWaXNTdGF0ZSk6IFZpc1N0YXRlID0+ICh7XG4gIC4uLklOSVRJQUxfVklTX1NUQVRFLFxuICAuLi5zdGF0ZS5pbml0aWFsU3RhdGUsXG4gIGluaXRpYWxTdGF0ZTogc3RhdGUuaW5pdGlhbFN0YXRlXG59KTtcblxuLyoqXG4gKiBQcm9wYWdhdGUgYHZpc1N0YXRlYCByZWR1Y2VyIHdpdGggYSBuZXcgY29uZmlndXJhdGlvbi4gQ3VycmVudCBjb25maWcgd2lsbCBiZSBvdmVycmlkZS5cbiAqIEBtZW1iZXJvZiB2aXNTdGF0ZVVwZGF0ZXJzXG4gKiBAcHVibGljXG4gKi9cbmV4cG9ydCBjb25zdCByZWNlaXZlTWFwQ29uZmlnVXBkYXRlciA9IChcbiAgc3RhdGU6IFZpc1N0YXRlLFxuICB7XG4gICAgcGF5bG9hZDoge2NvbmZpZyA9IHt9LCBvcHRpb25zID0ge319XG4gIH06IHtcbiAgICB0eXBlPzogdHlwZW9mIEFjdGlvblR5cGVzLlJFQ0VJVkVfTUFQX0NPTkZJRztcbiAgICBwYXlsb2FkOiBSZWNlaXZlTWFwQ29uZmlnUGF5bG9hZDtcbiAgfVxuKTogVmlzU3RhdGUgPT4ge1xuICBpZiAoIWNvbmZpZy52aXNTdGF0ZSkge1xuICAgIHJldHVybiBzdGF0ZTtcbiAgfVxuXG4gIGNvbnN0IHtrZWVwRXhpc3RpbmdDb25maWd9ID0gb3B0aW9ucztcblxuICAvLyByZXNldCBjb25maWcgaWYga2VlcEV4aXN0aW5nQ29uZmlnIGlzIGZhbHN5XG4gIGxldCBtZXJnZWRTdGF0ZSA9ICFrZWVwRXhpc3RpbmdDb25maWcgPyByZXNldE1hcENvbmZpZ1VwZGF0ZXIoc3RhdGUpIDogc3RhdGU7XG4gIGZvciAoY29uc3QgbWVyZ2VyIG9mIHN0YXRlLm1lcmdlcnMpIHtcbiAgICBpZiAoaXNWYWxpZE1lcmdlcihtZXJnZXIpICYmIGhhc1Byb3BzVG9NZXJnZShjb25maWcudmlzU3RhdGUsIG1lcmdlci5wcm9wKSkge1xuICAgICAgbWVyZ2VkU3RhdGUgPSBtZXJnZXIubWVyZ2UoXG4gICAgICAgIG1lcmdlZFN0YXRlLFxuICAgICAgICBnZXRQcm9wVmFsdWVUb01lcmdlcihjb25maWcudmlzU3RhdGUsIG1lcmdlci5wcm9wLCBtZXJnZXIudG9NZXJnZVByb3ApLFxuICAgICAgICAvLyBmcm9tQ29uZmlnXG4gICAgICAgIHRydWVcbiAgICAgICk7XG4gICAgfVxuICB9XG5cbiAgcmV0dXJuIG1lcmdlZFN0YXRlO1xufTtcblxuLyoqXG4gKiBUcmlnZ2VyIGxheWVyIGhvdmVyIGV2ZW50IHdpdGggaG92ZXJlZCBvYmplY3RcbiAqIEBtZW1iZXJvZiB2aXNTdGF0ZVVwZGF0ZXJzXG4gKiBAcHVibGljXG4gKi9cbmV4cG9ydCBjb25zdCBsYXllckhvdmVyVXBkYXRlciA9IChcbiAgc3RhdGU6IFZpc1N0YXRlLFxuICBhY3Rpb246IFZpc1N0YXRlQWN0aW9ucy5PbkxheWVySG92ZXJVcGRhdGVyQWN0aW9uXG4pOiBWaXNTdGF0ZSA9PiAoe1xuICAuLi5zdGF0ZSxcbiAgaG92ZXJJbmZvOiB7XG4gICAgLy8gZGVjay5nbCBpbmZvIGlzIG11dGFibGVcbiAgICAuLi5hY3Rpb24uaW5mb1xuICB9XG59KTtcblxuLyogZXNsaW50LWVuYWJsZSBtYXgtc3RhdGVtZW50cyAqL1xuXG4vKipcbiAqIFVwZGF0ZSBgaW50ZXJhY3Rpb25Db25maWdgXG4gKiBAbWVtYmVyb2YgdmlzU3RhdGVVcGRhdGVyc1xuICogQHB1YmxpY1xuICovXG5leHBvcnQgZnVuY3Rpb24gaW50ZXJhY3Rpb25Db25maWdDaGFuZ2VVcGRhdGVyKFxuICBzdGF0ZTogVmlzU3RhdGUsXG4gIGFjdGlvbjogVmlzU3RhdGVBY3Rpb25zLkludGVyYWN0aW9uQ29uZmlnQ2hhbmdlVXBkYXRlckFjdGlvblxuKTogVmlzU3RhdGUge1xuICBjb25zdCB7Y29uZmlnfSA9IGFjdGlvbjtcblxuICBjb25zdCBpbnRlcmFjdGlvbkNvbmZpZyA9IHtcbiAgICAuLi5zdGF0ZS5pbnRlcmFjdGlvbkNvbmZpZyxcbiAgICAuLi57W2NvbmZpZy5pZF06IGNvbmZpZ31cbiAgfTtcblxuICAvLyBEb24ndCBlbmFibGUgdG9vbHRpcCBhbmQgYnJ1c2ggYXQgdGhlIHNhbWUgdGltZVxuICAvLyBidXQgY29vcmRpbmF0ZXMgY2FuIGJlIHNob3duIGF0IGFsbCB0aW1lXG4gIGNvbnN0IGNvbnRyYWRpY3QgPSBbJ2JydXNoJywgJ3Rvb2x0aXAnXTtcblxuICBpZiAoXG4gICAgY29udHJhZGljdC5pbmNsdWRlcyhjb25maWcuaWQpICYmXG4gICAgY29uZmlnLmVuYWJsZWQgJiZcbiAgICAhc3RhdGUuaW50ZXJhY3Rpb25Db25maWdbY29uZmlnLmlkXS5lbmFibGVkXG4gICkge1xuICAgIC8vIG9ubHkgZW5hYmxlIG9uZSBpbnRlcmFjdGlvbiBhdCBhIHRpbWVcbiAgICBjb250cmFkaWN0LmZvckVhY2goayA9PiB7XG4gICAgICBpZiAoayAhPT0gY29uZmlnLmlkKSB7XG4gICAgICAgIGludGVyYWN0aW9uQ29uZmlnW2tdID0gey4uLmludGVyYWN0aW9uQ29uZmlnW2tdLCBlbmFibGVkOiBmYWxzZX07XG4gICAgICB9XG4gICAgfSk7XG4gIH1cblxuICBjb25zdCBuZXdTdGF0ZSA9IHtcbiAgICAuLi5zdGF0ZSxcbiAgICBpbnRlcmFjdGlvbkNvbmZpZ1xuICB9O1xuXG4gIGlmIChjb25maWcuaWQgPT09ICdnZW9jb2RlcicgJiYgIWNvbmZpZy5lbmFibGVkKSB7XG4gICAgcmV0dXJuIHJlbW92ZURhdGFzZXRVcGRhdGVyKG5ld1N0YXRlLCB7ZGF0YUlkOiAnZ2VvY29kZXJfZGF0YXNldCd9KTtcbiAgfVxuXG4gIHJldHVybiBuZXdTdGF0ZTtcbn1cblxuLyoqXG4gKiBUcmlnZ2VyIGxheWVyIGNsaWNrIGV2ZW50IHdpdGggY2xpY2tlZCBvYmplY3RcbiAqIEBtZW1iZXJvZiB2aXNTdGF0ZVVwZGF0ZXJzXG4gKiBAcHVibGljXG4gKi9cbmV4cG9ydCBjb25zdCBsYXllckNsaWNrVXBkYXRlciA9IChcbiAgc3RhdGU6IFZpc1N0YXRlLFxuICBhY3Rpb246IFZpc1N0YXRlQWN0aW9ucy5PbkxheWVyQ2xpY2tVcGRhdGVyQWN0aW9uXG4pOiBWaXNTdGF0ZSA9PiAoe1xuICAuLi5zdGF0ZSxcbiAgbW91c2VQb3M6IHN0YXRlLmludGVyYWN0aW9uQ29uZmlnLmNvb3JkaW5hdGUuZW5hYmxlZFxuICAgID8ge1xuICAgICAgICAuLi5zdGF0ZS5tb3VzZVBvcyxcbiAgICAgICAgcGlubmVkOiBzdGF0ZS5tb3VzZVBvcy5waW5uZWQgPyBudWxsIDogY2xvbmVEZWVwKHN0YXRlLm1vdXNlUG9zKVxuICAgICAgfVxuICAgIDogc3RhdGUubW91c2VQb3MsXG4gIGNsaWNrZWQ6IGFjdGlvbi5pbmZvICYmIGFjdGlvbi5pbmZvLnBpY2tlZCA/IGFjdGlvbi5pbmZvIDogbnVsbFxufSk7XG5cbi8qKlxuICogVHJpZ2dlciBtYXAgY2xpY2sgZXZlbnQsIHVuc2VsZWN0IGNsaWNrZWQgb2JqZWN0XG4gKiBAbWVtYmVyb2YgdmlzU3RhdGVVcGRhdGVyc1xuICogQHB1YmxpY1xuICovXG5leHBvcnQgY29uc3QgbWFwQ2xpY2tVcGRhdGVyID0gKFxuICBzdGF0ZTogVmlzU3RhdGUsXG4gIGFjdGlvbjogVmlzU3RhdGVBY3Rpb25zLk9uTWFwQ2xpY2tVcGRhdGVyQWN0aW9uXG4pOiBWaXNTdGF0ZSA9PiB7XG4gIHJldHVybiB7XG4gICAgLi4uc3RhdGUsXG4gICAgY2xpY2tlZDogbnVsbFxuICB9O1xufTtcblxuLyoqXG4gKiBUcmlnZ2VyIG1hcCBtb3ZlIGV2ZW50XG4gKiBAbWVtYmVyb2YgdmlzU3RhdGVVcGRhdGVyc1xuICogQHB1YmxpY1xuICovXG5leHBvcnQgY29uc3QgbW91c2VNb3ZlVXBkYXRlciA9IChcbiAgc3RhdGU6IFZpc1N0YXRlLFxuICB7ZXZ0fTogVmlzU3RhdGVBY3Rpb25zLk9uTW91c2VNb3ZlVXBkYXRlckFjdGlvblxuKTogVmlzU3RhdGUgPT4ge1xuICBpZiAoT2JqZWN0LnZhbHVlcyhzdGF0ZS5pbnRlcmFjdGlvbkNvbmZpZykuc29tZShjb25maWcgPT4gY29uZmlnLmVuYWJsZWQpKSB7XG4gICAgcmV0dXJuIHtcbiAgICAgIC4uLnN0YXRlLFxuICAgICAgbW91c2VQb3M6IHtcbiAgICAgICAgLi4uc3RhdGUubW91c2VQb3MsXG4gICAgICAgIC4uLihBcnJheS5pc0FycmF5KGV2dC5wb2ludCkgPyB7bW91c2VQb3NpdGlvbjogWy4uLmV2dC5wb2ludF19IDoge30pLFxuICAgICAgICAuLi4oQXJyYXkuaXNBcnJheShldnQubG5nTGF0KSA/IHtjb29yZGluYXRlOiBbLi4uZXZ0LmxuZ0xhdF19IDoge30pXG4gICAgICB9XG4gICAgfTtcbiAgfVxuXG4gIHJldHVybiBzdGF0ZTtcbn07XG4vKipcbiAqIFRvZ2dsZSB2aXNpYmlsaXR5IG9mIGEgbGF5ZXIgZm9yIGEgc3BsaXQgbWFwXG4gKiBAbWVtYmVyb2YgdmlzU3RhdGVVcGRhdGVyc1xuICogQHB1YmxpY1xuICovXG5leHBvcnQgY29uc3QgdG9nZ2xlU3BsaXRNYXBVcGRhdGVyID0gKFxuICBzdGF0ZTogVmlzU3RhdGUsXG4gIGFjdGlvbjogTWFwU3RhdGVBY3Rpb25zLlRvZ2dsZVNwbGl0TWFwVXBkYXRlckFjdGlvblxuKTogVmlzU3RhdGUgPT5cbiAgc3RhdGUuc3BsaXRNYXBzICYmIHN0YXRlLnNwbGl0TWFwcy5sZW5ndGggPT09IDBcbiAgICA/IHtcbiAgICAgICAgLi4uc3RhdGUsXG4gICAgICAgIC8vIG1heWJlIHdlIHNob3VsZCB1c2UgYW4gYXJyYXkgdG8gc3RvcmUgc3RhdGUgZm9yIGEgc2luZ2xlIG1hcCBhcyB3ZWxsXG4gICAgICAgIC8vIGlmIGN1cnJlbnQgbWFwcyBsZW5ndGggaXMgZXF1YWwgdG8gMCBpdCBtZWFucyB0aGF0IHdlIGFyZSBhYm91dCB0byBzcGxpdCB0aGUgdmlld1xuICAgICAgICBzcGxpdE1hcHM6IGNvbXB1dGVTcGxpdE1hcExheWVycyhzdGF0ZS5sYXllcnMsIHtkdXBsaWNhdGU6IGZhbHNlfSlcbiAgICAgIH1cbiAgICA6IGNsb3NlU3BlY2lmaWNNYXBBdEluZGV4KHN0YXRlLCBhY3Rpb24pO1xuXG4vKipcbiAqIFRvZ2dsZSB2aXNpYmlsaXR5IG9mIGEgbGF5ZXIgaW4gYSBzcGxpdCBtYXBcbiAqIEBtZW1iZXJvZiB2aXNTdGF0ZVVwZGF0ZXJzXG4gKiBAcHVibGljXG4gKi9cbmV4cG9ydCBjb25zdCB0b2dnbGVMYXllckZvck1hcFVwZGF0ZXIgPSAoXG4gIHN0YXRlOiBWaXNTdGF0ZSxcbiAge21hcEluZGV4LCBsYXllcklkfTogVmlzU3RhdGVBY3Rpb25zLlRvZ2dsZUxheWVyRm9yTWFwVXBkYXRlckFjdGlvblxuKTogVmlzU3RhdGUgPT4ge1xuICBjb25zdCB7c3BsaXRNYXBzfSA9IHN0YXRlO1xuXG4gIHJldHVybiB7XG4gICAgLi4uc3RhdGUsXG4gICAgc3BsaXRNYXBzOiBzcGxpdE1hcHMubWFwKChzbSwgaSkgPT5cbiAgICAgIGkgPT09IG1hcEluZGV4XG4gICAgICAgID8ge1xuICAgICAgICAgICAgLi4uc3BsaXRNYXBzW2ldLFxuICAgICAgICAgICAgbGF5ZXJzOiB7XG4gICAgICAgICAgICAgIC4uLnNwbGl0TWFwc1tpXS5sYXllcnMsXG4gICAgICAgICAgICAgIC8vIGlmIGxheWVySWQgbm90IGluIGxheWVycywgc2V0IGl0IHRvIHZpc2libGVcbiAgICAgICAgICAgICAgW2xheWVySWRdOiAhc3BsaXRNYXBzW2ldLmxheWVyc1tsYXllcklkXVxuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cbiAgICAgICAgOiBzbVxuICAgIClcbiAgfTtcbn07XG5cbi8qKlxuICogQWRkIG5ldyBkYXRhc2V0IHRvIGB2aXNTdGF0ZWAsIHdpdGggb3B0aW9uIHRvIGxvYWQgYSBtYXAgY29uZmlnIGFsb25nIHdpdGggdGhlIGRhdGFzZXRzXG4gKiBAbWVtYmVyb2YgdmlzU3RhdGVVcGRhdGVyc1xuICogQHB1YmxpY1xuICovXG4vLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgY29tcGxleGl0eVxuZXhwb3J0IGNvbnN0IHVwZGF0ZVZpc0RhdGFVcGRhdGVyID0gKFxuICBzdGF0ZTogVmlzU3RhdGUsXG4gIGFjdGlvbjogVmlzU3RhdGVBY3Rpb25zLlVwZGF0ZVZpc0RhdGFVcGRhdGVyQWN0aW9uXG4pOiBWaXNTdGF0ZSA9PiB7XG4gIC8vIGRhdGFzZXRzIGNhbiBiZSBhIHNpbmdsZSBkYXRhIGVudHJpZXMgb3IgYW4gYXJyYXkgb2YgbXVsdGlwbGUgZGF0YSBlbnRyaWVzXG4gIGNvbnN0IHtjb25maWcsIG9wdGlvbnN9ID0gYWN0aW9uO1xuXG4gIC8vIGFwcGx5IGNvbmZpZyBpZiBwYXNzZWQgZnJvbSBhY3Rpb25cbiAgLy8gVE9ETzogd2UgZG9uJ3QgaGFuZGxlIGFzeW4gbWVyZ2VycyBoZXJlIHlldFxuICBjb25zdCBwcmV2aW91c1N0YXRlID0gY29uZmlnXG4gICAgPyByZWNlaXZlTWFwQ29uZmlnVXBkYXRlcihzdGF0ZSwge1xuICAgICAgICBwYXlsb2FkOiB7Y29uZmlnLCBvcHRpb25zfVxuICAgICAgfSlcbiAgICA6IHN0YXRlO1xuXG4gIGNvbnN0IGRhdGFzZXRzID0gdG9BcnJheShhY3Rpb24uZGF0YXNldHMpO1xuXG4gIGNvbnN0IG5ld0RhdGFFbnRyaWVzID0gZGF0YXNldHMucmVkdWNlKFxuICAgIC8vIEB0cy1leHBlY3QtZXJyb3IgIFR5cGUgJ3t9JyBpcyBtaXNzaW5nIHRoZSBmb2xsb3dpbmcgcHJvcGVydGllcyBmcm9tIHR5cGUgJ1Byb3RvRGF0YXNldCc6IGRhdGEsIGluZm9cbiAgICAoYWNjdSwge2luZm8gPSB7fSwgLi4ucmVzdH0gPSB7fSkgPT4gKHtcbiAgICAgIC4uLmFjY3UsXG4gICAgICAuLi4oY3JlYXRlTmV3RGF0YUVudHJ5KHtpbmZvLCAuLi5yZXN0fSwgc3RhdGUuZGF0YXNldHMpIHx8IHt9KVxuICAgIH0pLFxuICAgIHt9XG4gICk7XG5cbiAgLy8gc2F2ZSBuZXcgZGF0YXNldCBlbnRyeSB0byBzdGF0ZVxuICBjb25zdCBtZXJnZWRTdGF0ZSA9IHtcbiAgICAuLi5wcmV2aW91c1N0YXRlLFxuICAgIGRhdGFzZXRzOiBtZXJnZURhdGFzZXRzQnlPcmRlcihwcmV2aW91c1N0YXRlLCBuZXdEYXRhRW50cmllcylcbiAgfTtcblxuICAvLyBtZXJnZSBzdGF0ZSB3aXRoIGNvbmZpZyB0byBiZSBtZXJnZWRcbiAgY29uc3QgbGF5ZXJNZXJnZXJzID0gc3RhdGUubWVyZ2Vycy5maWx0ZXIobSA9PiBtLndhaXRGb3JMYXllckRhdGEpO1xuICBjb25zdCBkYXRhc2V0TWVyZ2VycyA9IHN0YXRlLm1lcmdlcnMuZmlsdGVyKG0gPT4gIWxheWVyTWVyZ2Vycy5pbmNsdWRlcyhtKSk7XG5cbiAgY29uc3QgbmV3RGF0YUlkcyA9IE9iamVjdC5rZXlzKG5ld0RhdGFFbnRyaWVzKTtcbiAgY29uc3QgcG9zdE1lcmdlclBheWxvYWQgPSB7XG4gICAgbmV3RGF0YUlkcyxcbiAgICBvcHRpb25zLFxuICAgIGxheWVyTWVyZ2Vyc1xuICB9O1xuXG4gIHJldHVybiBhcHBseU1lcmdlcnNVcGRhdGVyKG1lcmdlZFN0YXRlLCB7bWVyZ2VyczogZGF0YXNldE1lcmdlcnMsIHBvc3RNZXJnZXJQYXlsb2FkfSk7XG59O1xuXG4vKipcbiAqIEFkZCBuZXcgZGF0YXNldCB0byBgdmlzU3RhdGVgLCB3aXRoIG9wdGlvbiB0byBsb2FkIGEgbWFwIGNvbmZpZyBhbG9uZyB3aXRoIHRoZSBkYXRhc2V0c1xuICovXG5leHBvcnQgZnVuY3Rpb24gYXBwbHlNZXJnZXJzVXBkYXRlcihcbiAgc3RhdGU6IFZpc1N0YXRlLFxuICBhY3Rpb246IHtcbiAgICBtZXJnZXJzOiBNZXJnZXI8YW55PltdO1xuICAgIHBvc3RNZXJnZXJQYXlsb2FkOiBQb3N0TWVyZ2VyUGF5bG9hZDtcbiAgfVxuKTogVmlzU3RhdGUge1xuICBjb25zdCB7bWVyZ2VycywgcG9zdE1lcmdlclBheWxvYWR9ID0gYWN0aW9uO1xuXG4gIC8vIG1lcmdlIHN0YXRlIHdpdGggY29uZmlnIHRvIGJlIG1lcmdlZFxuICBjb25zdCBtZXJnZVN0YXRlUmVzdWx0ID0gbWVyZ2VTdGF0ZUZyb21NZXJnZXJzKFxuICAgIHN0YXRlLFxuICAgIHtcbiAgICAgIC4uLklOSVRJQUxfVklTX1NUQVRFLFxuICAgICAgLi4uc3RhdGUuaW5pdGlhbFN0YXRlXG4gICAgfSxcbiAgICBtZXJnZXJzLFxuICAgIC8vIG5ld0RhdGFJZHMsXG4gICAgcG9zdE1lcmdlclBheWxvYWRcbiAgKTtcblxuICAvLyBpZiBhbGwgbWVyZ2VkLCBraWNrdXAgcG9zdCBtZXJnZSBwcm9jZXNzXG4gIC8vIGlmIG5vdCB3YWl0XG4gIHJldHVybiBtZXJnZVN0YXRlUmVzdWx0LmFsbE1lcmdlZFxuICAgID8gcG9zdE1lcmdlVXBkYXRlcihtZXJnZVN0YXRlUmVzdWx0Lm1lcmdlZFN0YXRlLCBwb3N0TWVyZ2VyUGF5bG9hZClcbiAgICA6IG1lcmdlU3RhdGVSZXN1bHQubWVyZ2VkU3RhdGU7XG59XG5cbi8qKlxuICogQWRkIG5ldyBkYXRhc2V0IHRvIGB2aXNTdGF0ZWAsIHdpdGggb3B0aW9uIHRvIGxvYWQgYSBtYXAgY29uZmlnIGFsb25nIHdpdGggdGhlIGRhdGFzZXRzXG4gKi9cbmZ1bmN0aW9uIHBvc3RNZXJnZVVwZGF0ZXIobWVyZ2VkU3RhdGU6IFZpc1N0YXRlLCBwb3N0TWVyZ2VyUGF5bG9hZDogUG9zdE1lcmdlclBheWxvYWQpOiBWaXNTdGF0ZSB7XG4gIGNvbnN0IHtuZXdEYXRhSWRzLCBvcHRpb25zLCBsYXllck1lcmdlcnN9ID0gcG9zdE1lcmdlclBheWxvYWQ7XG4gIGNvbnN0IG5ld0ZpbHRlcnMgPSBtZXJnZWRTdGF0ZS5maWx0ZXJzLmZpbHRlcihmID0+XG4gICAgZi5kYXRhSWQuZmluZChmRGF0YUlkID0+IG5ld0RhdGFJZHMuaW5jbHVkZXMoZkRhdGFJZCkpXG4gICk7XG4gIGNvbnN0IGRhdGFzZXRGaWx0ZXJlZDogc3RyaW5nW10gPSB1bmlxKFxuICAgIG5ld0ZpbHRlcnMucmVkdWNlKChhY2N1LCBmKSA9PiBbLi4uYWNjdSwgLi4uZi5kYXRhSWRdLCBbXSBhcyBzdHJpbmdbXSlcbiAgKTtcbiAgY29uc3QgZGF0YUVtcHR5ID0gbmV3RGF0YUlkcy5sZW5ndGggPCAxO1xuXG4gIGxldCBuZXdMYXllcnMgPSAhZGF0YUVtcHR5XG4gICAgPyBtZXJnZWRTdGF0ZS5sYXllcnMuZmlsdGVyKGwgPT4gbC5jb25maWcuZGF0YUlkICYmIG5ld0RhdGFJZHMuaW5jbHVkZXMobC5jb25maWcuZGF0YUlkKSlcbiAgICA6IFtdO1xuXG4gIGNvbnN0IG5ld0RhdGFFbnRyaWVzID0gbmV3RGF0YUlkcy5yZWR1Y2UoXG4gICAgKGFjY3UsIGlkKSA9PiAoe1xuICAgICAgLi4uYWNjdSxcbiAgICAgIFtpZF06IG1lcmdlZFN0YXRlLmRhdGFzZXRzW2lkXVxuICAgIH0pLFxuICAgIHt9XG4gICk7XG5cbiAgaWYgKCFuZXdMYXllcnMubGVuZ3RoICYmIChvcHRpb25zIHx8IHt9KS5hdXRvQ3JlYXRlTGF5ZXJzICE9PSBmYWxzZSkge1xuICAgIC8vIG5vIGxheWVyIG1lcmdlZCwgZmluZCBkZWZhdWx0c1xuICAgIGNvbnN0IHJlc3VsdCA9IGFkZERlZmF1bHRMYXllcnMobWVyZ2VkU3RhdGUsIG5ld0RhdGFFbnRyaWVzKTtcbiAgICBtZXJnZWRTdGF0ZSA9IHJlc3VsdC5zdGF0ZTtcbiAgICBuZXdMYXllcnMgPSByZXN1bHQubmV3TGF5ZXJzO1xuICB9XG5cbiAgaWYgKG1lcmdlZFN0YXRlLnNwbGl0TWFwcy5sZW5ndGgpIHtcbiAgICAvLyBpZiBtYXAgaXMgc3BsaXQsIGFkZCBuZXcgbGF5ZXJzIHRvIHNwbGl0TWFwc1xuICAgIG5ld0xheWVycyA9IG1lcmdlZFN0YXRlLmxheWVycy5maWx0ZXIoXG4gICAgICBsID0+IGwuY29uZmlnLmRhdGFJZCAmJiBuZXdEYXRhSWRzLmluY2x1ZGVzKGwuY29uZmlnLmRhdGFJZClcbiAgICApO1xuICAgIG1lcmdlZFN0YXRlID0ge1xuICAgICAgLi4ubWVyZ2VkU3RhdGUsXG4gICAgICBzcGxpdE1hcHM6IGFkZE5ld0xheWVyc1RvU3BsaXRNYXAobWVyZ2VkU3RhdGUuc3BsaXRNYXBzLCBuZXdMYXllcnMpXG4gICAgfTtcbiAgfVxuXG4gIC8vIGlmIG5vIHRvb2x0aXBzIG1lcmdlZCBhZGQgZGVmYXVsdCB0b29sdGlwc1xuICBuZXdEYXRhSWRzLmZvckVhY2goZGF0YUlkID0+IHtcbiAgICBjb25zdCB0b29sdGlwRmllbGRzID0gbWVyZ2VkU3RhdGUuaW50ZXJhY3Rpb25Db25maWcudG9vbHRpcC5jb25maWcuZmllbGRzVG9TaG93W2RhdGFJZF07XG4gICAgLy8gbG9hZGluZyBkYXRhc2V0OiBhdXRvQ3JlYXRlVG9vbHRpcHMgaXMgZmFsc2UgYW5kIHdlIGRvbid0IHdhbnQgdG8gcnVuIGFkZERlZmF1bHRUb29sdGlwcyB3aGVuIHRvb2x0aXBGaWVsZHMgaXMgZW1wdHlcbiAgICBpZiAoXG4gICAgICBvcHRpb25zPy5hdXRvQ3JlYXRlVG9vbHRpcHMgIT09IGZhbHNlICYmXG4gICAgICAoIUFycmF5LmlzQXJyYXkodG9vbHRpcEZpZWxkcykgfHwgIXRvb2x0aXBGaWVsZHMubGVuZ3RoKVxuICAgICkge1xuICAgICAgLy8gYWRkaW5nIGRhdGFzZXQ6IGF1dG9DcmVhdGVUb29sdGlwcyBpcyB0cnVlXG4gICAgICBtZXJnZWRTdGF0ZSA9IGFkZERlZmF1bHRUb29sdGlwcyhtZXJnZWRTdGF0ZSwgbmV3RGF0YUVudHJpZXNbZGF0YUlkXSk7XG4gICAgfVxuICB9KTtcblxuICBjb25zdCB1cGRhdGVkRGF0YXNldHMgPSBkYXRhRW1wdHlcbiAgICA/IE9iamVjdC5rZXlzKG1lcmdlZFN0YXRlLmRhdGFzZXRzKVxuICAgIDogdW5pcShPYmplY3Qua2V5cyhuZXdEYXRhRW50cmllcykuY29uY2F0KGRhdGFzZXRGaWx0ZXJlZCkpO1xuXG4gIGxldCB1cGRhdGVkU3RhdGUgPSB1cGRhdGVBbGxMYXllckRvbWFpbkRhdGEobWVyZ2VkU3RhdGUsIHVwZGF0ZWREYXRhc2V0cywgdW5kZWZpbmVkKTtcblxuICAvLyByZWdpc3RlciBsYXllciBhbmltYXRpb24gZG9tYWluLFxuICAvLyBuZWVkIHRvIGJlIGNhbGxlZCBhZnRlciBsYXllciBkYXRhIGlzIGNhbGN1bGF0ZWRcbiAgdXBkYXRlZFN0YXRlID0gdXBkYXRlQW5pbWF0aW9uRG9tYWluKHVwZGF0ZWRTdGF0ZSk7XG5cbiAgLy8gdHJ5IHRvIHByb2Nlc3MgbGF5ZXJNZXJnZXJzIGFmdGVyIGRhdGFzZXQrZGF0YXNldE1lcmdlcnNcbiAgcmV0dXJuIGxheWVyTWVyZ2VycyAmJiBsYXllck1lcmdlcnMubGVuZ3RoID4gMFxuICAgID8gYXBwbHlNZXJnZXJzVXBkYXRlcih1cGRhdGVkU3RhdGUsIHtcbiAgICAgICAgbWVyZ2VyczogbGF5ZXJNZXJnZXJzLFxuICAgICAgICBwb3N0TWVyZ2VyUGF5bG9hZDogey4uLnBvc3RNZXJnZXJQYXlsb2FkLCBsYXllck1lcmdlcnM6IFtdfVxuICAgICAgfSlcbiAgICA6IHVwZGF0ZWRTdGF0ZTtcbn1cblxuLyoqXG4gKiBSZW5hbWUgYW4gZXhpc3RpbmcgZGF0YXNldCBpbiBgdmlzU3RhdGVgXG4gKiBAbWVtYmVyb2YgdmlzU3RhdGVVcGRhdGVyc1xuICogQHB1YmxpY1xuICovXG5leHBvcnQgZnVuY3Rpb24gcmVuYW1lRGF0YXNldFVwZGF0ZXIoXG4gIHN0YXRlOiBWaXNTdGF0ZSxcbiAgYWN0aW9uOiBWaXNTdGF0ZUFjdGlvbnMuUmVuYW1lRGF0YXNldFVwZGF0ZXJBY3Rpb25cbik6IFZpc1N0YXRlIHtcbiAgcmV0dXJuIHVwZGF0ZURhdGFzZXRQcm9wc1VwZGF0ZXIoc3RhdGUsIHtkYXRhSWQ6IGFjdGlvbi5kYXRhSWQsIHByb3BzOiB7bGFiZWw6IGFjdGlvbi5sYWJlbH19KTtcbn1cblxuY29uc3QgQUxMT1dFRF9VUERBVEVfREFUQVNFVF9QUk9QUyA9IFsnbGFiZWwnLCAnY29sb3InLCAnbWV0YWRhdGEnXTtcblxuLyoqXG4gKiBWYWxpZGF0ZXMgcHJvcGVydGllcyBiZWZvcmUgdXBkYXRpbmcgdGhlIGRhdGFzZXQuXG4gKiBNYWtlcyBzdXJlIGVhY2ggcHJvcGVydHkgaXMgaW4gdGhlIGFsbG93ZWQgbGlzdFxuICogTWFrZXMgc3VyZSBjb2xvciB2YWx1ZSBpcyBSR0JcbiAqIFBlcmZvcm1zIGRlZXAgbWVyZ2Ugd2hlbiB1cGRhdGluZyBtZXRhZGF0YVxuICovXG5jb25zdCB2YWxpZGF0ZURhdGFzZXRVcGRhdGVQcm9wcyA9IChwcm9wcywgZGF0YXNldCkgPT4ge1xuICBjb25zdCB2YWxpZGF0ZWRQcm9wcyA9IE9iamVjdC5lbnRyaWVzKHByb3BzKS5yZWR1Y2UoKGFjYywgZW50cnkpID0+IHtcbiAgICBjb25zdCBba2V5LCB2YWx1ZV0gPSBlbnRyeTtcbiAgICAvLyBpcyBpdCBhbGxvd2VkID9cbiAgICBpZiAoIUFMTE9XRURfVVBEQVRFX0RBVEFTRVRfUFJPUFMuaW5jbHVkZXMoa2V5KSkge1xuICAgICAgcmV0dXJuIGFjYztcbiAgICB9XG5cbiAgICAvLyBpZiB3ZSBhcmUgYWRkaW5nIGEgY29sb3IgYnV0IGl0IGlzIG5vdCBSR0Igd2UgZG9uJ3QgYWNjZXB0IHRoZSB2YWx1ZVxuICAgIC8vIGluIHRoZSBmdXR1cmUgYXMgd2UgYWRkIG1vcmUgcHJvcHMgd2Ugc2hvdWxkIGNoYW5nZSB0aGlzIGlmIGludG8gYSBzd2l0Y2hcbiAgICBpZiAoa2V5ID09PSAnY29sb3InICYmICFpc1JnYkNvbG9yKHZhbHVlKSkge1xuICAgICAgcmV0dXJuIGFjYztcbiAgICB9XG5cbiAgICAvLyBkbyB3ZSBuZWVkIGRlZXAgbWVyZ2UgP1xuICAgIHJldHVybiB7Li4uYWNjLCBba2V5XTogaXNQbGFpbk9iamVjdCh2YWx1ZSkgPyBkZWVwbWVyZ2UoZGF0YXNldFtrZXldIHx8IHt9LCB2YWx1ZSkgOiB2YWx1ZX07XG4gIH0sIHt9KTtcblxuICByZXR1cm4gdmFsaWRhdGVkUHJvcHM7XG59O1xuXG4vKipcbiAqIFVwZGF0ZSBEYXRhc2V0IHByb3BzIChsYWJlbCwgY29sb3IsIG1ldGEpLiBEbyBub3QgdXNlIHRvIHVwZGF0ZSBkYXRhIG9yIGFueSByZWxhdGVkIHByb3BlcnRpZXNcbiAqIEBtZW1iZXJvZiB2aXNTdGF0ZVVwZGF0ZXJzXG4gKiBAcHVibGljXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiB1cGRhdGVEYXRhc2V0UHJvcHNVcGRhdGVyKFxuICBzdGF0ZTogVmlzU3RhdGUsXG4gIGFjdGlvbjogVmlzU3RhdGVBY3Rpb25zLlVwZGF0ZURhdGFzZXRQcm9wc1VwZGF0ZXJBY3Rpb25cbik6IFZpc1N0YXRlIHtcbiAgY29uc3Qge2RhdGFJZCwgcHJvcHN9ID0gYWN0aW9uO1xuICBjb25zdCB7ZGF0YXNldHN9ID0gc3RhdGU7XG4gIGNvbnN0IGV4aXN0aW5nID0gZGF0YXNldHNbZGF0YUlkXTtcblxuICBpZiAoZXhpc3RpbmcpIHtcbiAgICBjb25zdCB2YWxpZGF0ZWRQcm9wcyA9IHZhbGlkYXRlRGF0YXNldFVwZGF0ZVByb3BzKHByb3BzLCBleGlzdGluZyk7XG4gICAgLy8gIHZhbGlkYXRlIHByb3BzOiBqdXN0IGNvbG9yIGZvciBub3dcbiAgICAvLyAgd2Ugb25seSBhbGxvdyBsYWJlbCwgY29sb3IgYW5kIG1ldGEgdG8gYmUgdXBkYXRlZFxuICAgIC8vIGNvbnN0IG5ld1RhYmxlID0gY29weVRhYmxlQW5kVXBkYXRlKGV4aXN0aW5nLCB2YWxpZGF0ZWRQcm9wcyk7XG4gICAgcmV0dXJuIHtcbiAgICAgIC4uLnN0YXRlLFxuICAgICAgZGF0YXNldHM6IHtcbiAgICAgICAgLi4uZGF0YXNldHMsXG4gICAgICAgIFtkYXRhSWRdOiBjb3B5VGFibGVBbmRVcGRhdGUoZXhpc3RpbmcsIHZhbGlkYXRlZFByb3BzKVxuICAgICAgfVxuICAgIH07XG4gIH1cblxuICByZXR1cm4gc3RhdGU7XG59XG5cbi8qKlxuICogV2hlbiBhIHVzZXIgY2xpY2tzIG9uIHRoZSBzcGVjaWZpYyBtYXAgY2xvc2luZyBpY29uXG4gKiB0aGUgYXBwbGljYXRpb24gd2lsbCBjbG9zZSB0aGUgc2VsZWN0ZWQgbWFwXG4gKiBhbmQgd2lsbCBtZXJnZSB0aGUgcmVtYWluaW5nIG9uZSB3aXRoIHRoZSBnbG9iYWwgc3RhdGVcbiAqIFRPRE86IGkgdGhpbmsgaW4gdGhlIGZ1dHVyZSB0aGlzIGFjdGlvbiBzaG91bGQgYmUgY2FsbGVkIG1lcmdlIG1hcCBsYXllcnMgd2l0aCBnbG9iYWwgc2V0dGluZ3NcbiAqIEBwYXJhbSB7T2JqZWN0fSBzdGF0ZSBgdmlzU3RhdGVgXG4gKiBAcGFyYW0ge09iamVjdH0gYWN0aW9uIGFjdGlvblxuICogQHJldHVybnMge09iamVjdH0gbmV4dFN0YXRlXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBjbG9zZVNwZWNpZmljTWFwQXRJbmRleDxTIGV4dGVuZHMgVmlzU3RhdGU+KFxuICBzdGF0ZTogUyxcbiAgYWN0aW9uOiBNYXBTdGF0ZUFjdGlvbnMuVG9nZ2xlU3BsaXRNYXBVcGRhdGVyQWN0aW9uXG4pOiBTIHtcbiAgLy8gcmV0cmlldmUgbGF5ZXJzIG1ldGEgZGF0YSBmcm9tIHRoZSByZW1haW5pbmcgbWFwIHRoYXQgd2UgbmVlZCB0byBrZWVwXG4gIGNvbnN0IGluZGV4VG9SZXRyaWV2ZSA9IDEgLSBhY3Rpb24ucGF5bG9hZDtcbiAgY29uc3QgbWFwTGF5ZXJzID0gc3RhdGUuc3BsaXRNYXBzW2luZGV4VG9SZXRyaWV2ZV0/LmxheWVycztcbiAgY29uc3Qge2xheWVyc30gPSBzdGF0ZTtcblxuICAvLyB1cGRhdGUgbGF5ZXIgdmlzaWJpbGl0eVxuICBjb25zdCBuZXdMYXllcnMgPSBsYXllcnMubWFwKGxheWVyID0+XG4gICAgbWFwTGF5ZXJzICYmICFtYXBMYXllcnNbbGF5ZXIuaWRdICYmIGxheWVyLmNvbmZpZy5pc1Zpc2libGVcbiAgICAgID8gbGF5ZXIudXBkYXRlTGF5ZXJDb25maWcoe1xuICAgICAgICAgIC8vIGlmIGxheWVyLmlkIGlzIG5vdCBpbiBtYXBMYXllcnMsIGl0IHNob3VsZCBiZSBpblZpc2libGVcbiAgICAgICAgICBpc1Zpc2libGU6IGZhbHNlXG4gICAgICAgIH0pXG4gICAgICA6IGxheWVyXG4gICk7XG5cbiAgLy8gZGVsZXRlIG1hcFxuICByZXR1cm4ge1xuICAgIC4uLnN0YXRlLFxuICAgIGxheWVyczogbmV3TGF5ZXJzLFxuICAgIHNwbGl0TWFwczogW11cbiAgfTtcbn1cblxuLyoqXG4gKiBUcmlnZ2VyIGZpbGUgbG9hZGluZyBkaXNwYXRjaCBgYWRkRGF0YVRvTWFwYCBpZiBzdWNjZWVkLCBvciBgbG9hZEZpbGVzRXJyYCBpZiBmYWlsZWRcbiAqIEBtZW1iZXJvZiB2aXNTdGF0ZVVwZGF0ZXJzXG4gKiBAcHVibGljXG4gKi9cbmV4cG9ydCBjb25zdCBsb2FkRmlsZXNVcGRhdGVyID0gKFxuICBzdGF0ZTogVmlzU3RhdGUsXG4gIGFjdGlvbjogVmlzU3RhdGVBY3Rpb25zLkxvYWRGaWxlc1VwZGF0ZXJBY3Rpb25cbik6IFZpc1N0YXRlID0+IHtcbiAgY29uc3Qge2ZpbGVzLCBvbkZpbmlzaCA9IGxvYWRGaWxlc1N1Y2Nlc3N9ID0gYWN0aW9uO1xuICBpZiAoIWZpbGVzLmxlbmd0aCkge1xuICAgIHJldHVybiBzdGF0ZTtcbiAgfVxuXG4gIGNvbnN0IGZpbGVMb2FkaW5nUHJvZ3Jlc3MgPSBBcnJheS5mcm9tKGZpbGVzKS5yZWR1Y2UoXG4gICAgKGFjY3UsIGYsIGkpID0+IG1lcmdlXyhpbml0aWFsRmlsZUxvYWRpbmdQcm9ncmVzcyhmLCBpKSkoYWNjdSksXG4gICAge31cbiAgKTtcblxuICBjb25zdCBmaWxlTG9hZGluZyA9IHtcbiAgICBmaWxlQ2FjaGU6IFtdLFxuICAgIGZpbGVzVG9Mb2FkOiBmaWxlcyxcbiAgICBvbkZpbmlzaFxuICB9O1xuXG4gIGNvbnN0IG5leHRTdGF0ZSA9IG1lcmdlXyh7ZmlsZUxvYWRpbmdQcm9ncmVzcywgZmlsZUxvYWRpbmd9KShzdGF0ZSk7XG5cbiAgcmV0dXJuIGxvYWROZXh0RmlsZVVwZGF0ZXIobmV4dFN0YXRlKTtcbn07XG5cbi8qKlxuICogU3VjZXNzZnVsbHkgbG9hZGVkIG9uZSBmaWxlLCBtb3ZlIG9uIHRvIHRoZSBuZXh0IG9uZVxuICogQG1lbWJlcm9mIHZpc1N0YXRlVXBkYXRlcnNcbiAqIEBwdWJsaWNcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGxvYWRGaWxlU3RlcFN1Y2Nlc3NVcGRhdGVyKFxuICBzdGF0ZTogVmlzU3RhdGUsXG4gIGFjdGlvbjogVmlzU3RhdGVBY3Rpb25zLkxvYWRGaWxlU3RlcFN1Y2Nlc3NBY3Rpb25cbik6IFZpc1N0YXRlIHtcbiAgaWYgKCFzdGF0ZS5maWxlTG9hZGluZykge1xuICAgIHJldHVybiBzdGF0ZTtcbiAgfVxuICBjb25zdCB7ZmlsZU5hbWUsIGZpbGVDYWNoZX0gPSBhY3Rpb247XG4gIGNvbnN0IHtmaWxlc1RvTG9hZCwgb25GaW5pc2h9ID0gc3RhdGUuZmlsZUxvYWRpbmc7XG4gIGNvbnN0IHN0YXRlV2l0aFByb2dyZXNzID0gdXBkYXRlRmlsZUxvYWRpbmdQcm9ncmVzc1VwZGF0ZXIoc3RhdGUsIHtcbiAgICBmaWxlTmFtZSxcbiAgICBwcm9ncmVzczoge3BlcmNlbnQ6IDEsIG1lc3NhZ2U6ICdEb25lJ31cbiAgfSk7XG5cbiAgLy8gc2F2ZSBwcm9jZXNzZWQgZmlsZSB0byBmaWxlQ2FjaGVcbiAgY29uc3Qgc3RhdGVXaXRoQ2FjaGUgPSBwaWNrXygnZmlsZUxvYWRpbmcnKShtZXJnZV8oe2ZpbGVDYWNoZX0pKShzdGF0ZVdpdGhQcm9ncmVzcyk7XG5cbiAgcmV0dXJuIHdpdGhUYXNrKFxuICAgIHN0YXRlV2l0aENhY2hlLFxuICAgIERFTEFZX1RBU0soMjAwKS5tYXAoZmlsZXNUb0xvYWQubGVuZ3RoID8gbG9hZE5leHRGaWxlIDogKCkgPT4gb25GaW5pc2goZmlsZUNhY2hlKSlcbiAgKTtcbn1cblxuLy8gd2l0aFRhc2s8VD4oc3RhdGU6IFQsIHRhc2s6IGFueSk6IFRcblxuLyoqXG4gKlxuICogQG1lbWJlcm9mIHZpc1N0YXRlVXBkYXRlcnNcbiAqIEBwdWJsaWNcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGxvYWROZXh0RmlsZVVwZGF0ZXIoc3RhdGU6IFZpc1N0YXRlKTogVmlzU3RhdGUge1xuICBpZiAoIXN0YXRlLmZpbGVMb2FkaW5nKSB7XG4gICAgcmV0dXJuIHN0YXRlO1xuICB9XG4gIGNvbnN0IHtmaWxlc1RvTG9hZH0gPSBzdGF0ZS5maWxlTG9hZGluZztcbiAgY29uc3QgW2ZpbGUsIC4uLnJlbWFpbmluZ0ZpbGVzVG9Mb2FkXSA9IGZpbGVzVG9Mb2FkO1xuXG4gIC8vIHNhdmUgZmlsZXNUb0xvYWQgdG8gc3RhdGVcbiAgY29uc3QgbmV4dFN0YXRlID0gcGlja18oJ2ZpbGVMb2FkaW5nJykobWVyZ2VfKHtmaWxlc1RvTG9hZDogcmVtYWluaW5nRmlsZXNUb0xvYWR9KSkoc3RhdGUpO1xuXG4gIGNvbnN0IHN0YXRlV2l0aFByb2dyZXNzID0gdXBkYXRlRmlsZUxvYWRpbmdQcm9ncmVzc1VwZGF0ZXIobmV4dFN0YXRlLCB7XG4gICAgZmlsZU5hbWU6IGZpbGUubmFtZSxcbiAgICBwcm9ncmVzczoge3BlcmNlbnQ6IDAsIG1lc3NhZ2U6ICdsb2FkaW5nLi4uJ31cbiAgfSk7XG5cbiAgY29uc3Qge2xvYWRlcnMsIGxvYWRPcHRpb25zfSA9IHN0YXRlO1xuICByZXR1cm4gd2l0aFRhc2soXG4gICAgc3RhdGVXaXRoUHJvZ3Jlc3MsXG4gICAgbWFrZUxvYWRGaWxlVGFzayhcbiAgICAgIGZpbGUsXG4gICAgICBuZXh0U3RhdGUuZmlsZUxvYWRpbmcgJiYgbmV4dFN0YXRlLmZpbGVMb2FkaW5nLmZpbGVDYWNoZSxcbiAgICAgIGxvYWRlcnMsXG4gICAgICBsb2FkT3B0aW9uc1xuICAgIClcbiAgKTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIG1ha2VMb2FkRmlsZVRhc2soZmlsZSwgZmlsZUNhY2hlLCBsb2FkZXJzOiBMb2FkZXJbXSA9IFtdLCBsb2FkT3B0aW9ucyA9IHt9KSB7XG4gIHJldHVybiBMT0FEX0ZJTEVfVEFTSyh7ZmlsZSwgZmlsZUNhY2hlLCBsb2FkZXJzLCBsb2FkT3B0aW9uc30pLmJpbWFwKFxuICAgIC8vIHByZXR0aWVyIGlnbm9yZVxuICAgIC8vIHN1Y2Nlc3NcbiAgICBnZW4gPT5cbiAgICAgIG5leHRGaWxlQmF0Y2goe1xuICAgICAgICBnZW4sXG4gICAgICAgIGZpbGVOYW1lOiBmaWxlLm5hbWUsXG4gICAgICAgIG9uRmluaXNoOiByZXN1bHQgPT5cbiAgICAgICAgICBwcm9jZXNzRmlsZUNvbnRlbnQoe1xuICAgICAgICAgICAgY29udGVudDogcmVzdWx0LFxuICAgICAgICAgICAgZmlsZUNhY2hlXG4gICAgICAgICAgfSlcbiAgICAgIH0pLFxuXG4gICAgLy8gZXJyb3JcbiAgICBlcnIgPT4gbG9hZEZpbGVzRXJyKGZpbGUubmFtZSwgZXJyKVxuICApO1xufVxuXG4vKipcbiAqXG4gKiBAbWVtYmVyb2YgdmlzU3RhdGVVcGRhdGVyc1xuICogQHB1YmxpY1xuICovXG5leHBvcnQgZnVuY3Rpb24gcHJvY2Vzc0ZpbGVDb250ZW50VXBkYXRlcihcbiAgc3RhdGU6IFZpc1N0YXRlLFxuICBhY3Rpb246IFZpc1N0YXRlQWN0aW9ucy5Qcm9jZXNzRmlsZUNvbnRlbnRVcGRhdGVyQWN0aW9uXG4pOiBWaXNTdGF0ZSB7XG4gIGNvbnN0IHtjb250ZW50LCBmaWxlQ2FjaGV9ID0gYWN0aW9uLnBheWxvYWQ7XG5cbiAgY29uc3Qgc3RhdGVXaXRoUHJvZ3Jlc3MgPSB1cGRhdGVGaWxlTG9hZGluZ1Byb2dyZXNzVXBkYXRlcihzdGF0ZSwge1xuICAgIGZpbGVOYW1lOiBjb250ZW50LmZpbGVOYW1lLFxuICAgIHByb2dyZXNzOiB7cGVyY2VudDogMSwgbWVzc2FnZTogJ3Byb2Nlc3NpbmcuLi4nfVxuICB9KTtcblxuICByZXR1cm4gd2l0aFRhc2soXG4gICAgc3RhdGVXaXRoUHJvZ3Jlc3MsXG4gICAgUFJPQ0VTU19GSUxFX0RBVEEoe2NvbnRlbnQsIGZpbGVDYWNoZX0pLmJpbWFwKFxuICAgICAgcmVzdWx0ID0+IGxvYWRGaWxlU3RlcFN1Y2Nlc3Moe2ZpbGVOYW1lOiBjb250ZW50LmZpbGVOYW1lLCBmaWxlQ2FjaGU6IHJlc3VsdH0pLFxuICAgICAgZXJyID0+IGxvYWRGaWxlc0Vycihjb250ZW50LmZpbGVOYW1lLCBlcnIpXG4gICAgKVxuICApO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gcGFyc2VQcm9ncmVzcyhwcmV2UHJvZ3Jlc3MgPSB7fSwgcHJvZ3Jlc3MpIHtcbiAgLy8gVGhpcyBoYXBwZW5zIHdoZW4gcmVjZWl2aW5nIHF1ZXJ5IG1ldGFkYXRhIG9yIG90aGVyIGNhc2VzIHdlIGRvbid0XG4gIC8vIGhhdmUgYW4gdXBkYXRlIGZvciB0aGUgdXNlci5cbiAgaWYgKCFwcm9ncmVzcyB8fCAhcHJvZ3Jlc3MucGVyY2VudCkge1xuICAgIHJldHVybiB7fTtcbiAgfVxuXG4gIHJldHVybiB7XG4gICAgcGVyY2VudDogcHJvZ3Jlc3MucGVyY2VudFxuICB9O1xufVxuXG4vKipcbiAqIGdldHMgY2FsbGVkIHdpdGggcGF5bG9hZCA9IEFzeW5jR2VuZXJhdG9yPD8/Pz5cbiAqIEBtZW1iZXJvZiB2aXNTdGF0ZVVwZGF0ZXJzXG4gKiBAcHVibGljXG4gKi9cbmV4cG9ydCBjb25zdCBuZXh0RmlsZUJhdGNoVXBkYXRlciA9IChcbiAgc3RhdGU6IFZpc1N0YXRlLFxuICB7XG4gICAgcGF5bG9hZDoge2dlbiwgZmlsZU5hbWUsIHByb2dyZXNzLCBhY2N1bXVsYXRlZCwgb25GaW5pc2h9XG4gIH06IFZpc1N0YXRlQWN0aW9ucy5OZXh0RmlsZUJhdGNoVXBkYXRlckFjdGlvblxuKTogVmlzU3RhdGUgPT4ge1xuICBjb25zdCBzdGF0ZVdpdGhQcm9ncmVzcyA9IHVwZGF0ZUZpbGVMb2FkaW5nUHJvZ3Jlc3NVcGRhdGVyKHN0YXRlLCB7XG4gICAgZmlsZU5hbWUsXG4gICAgcHJvZ3Jlc3M6IHBhcnNlUHJvZ3Jlc3Moc3RhdGUuZmlsZUxvYWRpbmdQcm9ncmVzc1tmaWxlTmFtZV0sIHByb2dyZXNzKVxuICB9KTtcbiAgcmV0dXJuIHdpdGhUYXNrKFxuICAgIHN0YXRlV2l0aFByb2dyZXNzLFxuICAgIFVOV1JBUF9UQVNLKGdlbi5uZXh0KCkpLmJpbWFwKFxuICAgICAgKHt2YWx1ZSwgZG9uZX0pID0+IHtcbiAgICAgICAgcmV0dXJuIGRvbmVcbiAgICAgICAgICA/IG9uRmluaXNoKGFjY3VtdWxhdGVkKVxuICAgICAgICAgIDogbmV4dEZpbGVCYXRjaCh7XG4gICAgICAgICAgICAgIGdlbixcbiAgICAgICAgICAgICAgZmlsZU5hbWUsXG4gICAgICAgICAgICAgIHByb2dyZXNzOiB2YWx1ZS5wcm9ncmVzcyxcbiAgICAgICAgICAgICAgYWNjdW11bGF0ZWQ6IHZhbHVlLFxuICAgICAgICAgICAgICBvbkZpbmlzaFxuICAgICAgICAgICAgfSk7XG4gICAgICB9LFxuICAgICAgZXJyID0+IGxvYWRGaWxlc0VycihmaWxlTmFtZSwgZXJyKVxuICAgIClcbiAgKTtcbn07XG5cbi8qKlxuICogVHJpZ2dlciBsb2FkaW5nIGZpbGUgZXJyb3JcbiAqIEBtZW1iZXJvZiB2aXNTdGF0ZVVwZGF0ZXJzXG4gKiBAcHVibGljXG4gKi9cbmV4cG9ydCBjb25zdCBsb2FkRmlsZXNFcnJVcGRhdGVyID0gKFxuICBzdGF0ZTogVmlzU3RhdGUsXG4gIHtlcnJvciwgZmlsZU5hbWV9OiBWaXNTdGF0ZUFjdGlvbnMuTG9hZEZpbGVzRXJyVXBkYXRlckFjdGlvblxuKTogVmlzU3RhdGUgPT4ge1xuICAvLyB1cGRhdGUgdWkgd2l0aCBlcnJvciBtZXNzYWdlXG4gIENvbnNvbGUud2FybihlcnJvcik7XG4gIGlmICghc3RhdGUuZmlsZUxvYWRpbmcpIHtcbiAgICByZXR1cm4gc3RhdGU7XG4gIH1cbiAgY29uc3Qge2ZpbGVzVG9Mb2FkLCBvbkZpbmlzaCwgZmlsZUNhY2hlfSA9IHN0YXRlLmZpbGVMb2FkaW5nO1xuXG4gIGNvbnN0IG5leHRTdGF0ZSA9IHVwZGF0ZUZpbGVMb2FkaW5nUHJvZ3Jlc3NVcGRhdGVyKHN0YXRlLCB7XG4gICAgZmlsZU5hbWUsXG4gICAgcHJvZ3Jlc3M6IHtlcnJvcn1cbiAgfSk7XG5cbiAgLy8ga2ljayBvZmYgbmV4dCBmaWxlIG9yIGZpbmlzaFxuICByZXR1cm4gd2l0aFRhc2soXG4gICAgbmV4dFN0YXRlLFxuICAgIERFTEFZX1RBU0soMjAwKS5tYXAoZmlsZXNUb0xvYWQubGVuZ3RoID8gbG9hZE5leHRGaWxlIDogKCkgPT4gb25GaW5pc2goZmlsZUNhY2hlKSlcbiAgKTtcbn07XG5cbi8qKlxuICogV2hlbiBzZWxlY3QgZGF0YXNldCBmb3IgZXhwb3J0LCBhcHBseSBjcHUgZmlsdGVyIHRvIHNlbGVjdGVkIGRhdGFzZXRcbiAqIEBtZW1iZXJvZiB2aXNTdGF0ZVVwZGF0ZXJzXG4gKiBAcHVibGljXG4gKi9cbmV4cG9ydCBjb25zdCBhcHBseUNQVUZpbHRlclVwZGF0ZXIgPSAoXG4gIHN0YXRlOiBWaXNTdGF0ZSxcbiAge2RhdGFJZH06IFZpc1N0YXRlQWN0aW9ucy5BcHBseUNQVUZpbHRlclVwZGF0ZXJBY3Rpb25cbik6IFZpc1N0YXRlID0+IHtcbiAgLy8gYXBwbHkgY3B1RmlsdGVyXG4gIGNvbnN0IGRhdGFJZHMgPSB0b0FycmF5KGRhdGFJZCk7XG5cbiAgcmV0dXJuIGRhdGFJZHMucmVkdWNlKChhY2N1LCBpZCkgPT4gZmlsdGVyRGF0YXNldENQVShhY2N1LCBpZCksIHN0YXRlKTtcbn07XG5cbi8qKlxuICogVXNlciBpbnB1dCB0byB1cGRhdGUgdGhlIGluZm8gb2YgdGhlIG1hcFxuICogQG1lbWJlcm9mIHZpc1N0YXRlVXBkYXRlcnNcbiAqIEBwdWJsaWNcbiAqL1xuZXhwb3J0IGNvbnN0IHNldE1hcEluZm9VcGRhdGVyID0gKFxuICBzdGF0ZTogVmlzU3RhdGUsXG4gIGFjdGlvbjogVmlzU3RhdGVBY3Rpb25zLlNldE1hcEluZm9VcGRhdGVyQWN0aW9uXG4pOiBWaXNTdGF0ZSA9PiAoe1xuICAuLi5zdGF0ZSxcbiAgbWFwSW5mbzoge1xuICAgIC4uLnN0YXRlLm1hcEluZm8sXG4gICAgLi4uYWN0aW9uLmluZm9cbiAgfVxufSk7XG4vKipcbiAqIEhlbHBlciBmdW5jdGlvbiB0byB1cGRhdGUgQWxsIGxheWVyIGRvbWFpbiBhbmQgbGF5ZXIgZGF0YSBvZiBzdGF0ZVxuICovXG5leHBvcnQgZnVuY3Rpb24gYWRkRGVmYXVsdExheWVycyhcbiAgc3RhdGU6IFZpc1N0YXRlLFxuICBkYXRhc2V0czogRGF0YXNldHNcbik6IHtzdGF0ZTogVmlzU3RhdGU7IG5ld0xheWVyczogTGF5ZXJbXX0ge1xuICBjb25zdCBlbXB0eTogTGF5ZXJbXSA9IFtdO1xuICBjb25zdCBkZWZhdWx0TGF5ZXJzID0gT2JqZWN0LnZhbHVlcyhkYXRhc2V0cykucmVkdWNlKChhY2N1OiBMYXllcltdLCBkYXRhc2V0KSA9PiB7XG4gICAgY29uc3QgZm91bmRMYXllcnMgPSBmaW5kRGVmYXVsdExheWVyKGRhdGFzZXQsIHN0YXRlLmxheWVyQ2xhc3Nlcyk7XG4gICAgcmV0dXJuIGZvdW5kTGF5ZXJzICYmIGZvdW5kTGF5ZXJzLmxlbmd0aCA/IGFjY3UuY29uY2F0KGZvdW5kTGF5ZXJzKSA6IGFjY3U7XG4gIH0sIGVtcHR5KTtcblxuICByZXR1cm4ge1xuICAgIHN0YXRlOiB7XG4gICAgICAuLi5zdGF0ZSxcbiAgICAgIGxheWVyczogWy4uLnN0YXRlLmxheWVycywgLi4uZGVmYXVsdExheWVyc10sXG4gICAgICBsYXllck9yZGVyOiBbXG4gICAgICAgIC8vIHB1dCBuZXcgbGF5ZXJzIG9uIHRvcCBvZiBvbGQgb25lcyBpbiByZXZlcnNlXG4gICAgICAgIC4uLmdldExheWVyT3JkZXJGcm9tTGF5ZXJzKGRlZmF1bHRMYXllcnMpLFxuICAgICAgICAuLi5zdGF0ZS5sYXllck9yZGVyXG4gICAgICBdXG4gICAgfSxcbiAgICBuZXdMYXllcnM6IGRlZmF1bHRMYXllcnNcbiAgfTtcbn1cblxuLyoqXG4gKiBoZWxwZXIgZnVuY3Rpb24gdG8gZmluZCBkZWZhdWx0IHRvb2x0aXBzXG4gKiBAcGFyYW0ge09iamVjdH0gc3RhdGVcbiAqIEBwYXJhbSB7T2JqZWN0fSBkYXRhc2V0XG4gKiBAcmV0dXJucyB7T2JqZWN0fSBuZXh0U3RhdGVcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGFkZERlZmF1bHRUb29sdGlwcyhzdGF0ZSwgZGF0YXNldCkge1xuICBjb25zdCB0b29sdGlwRmllbGRzID0gZmluZEZpZWxkc1RvU2hvdyh7XG4gICAgLi4uZGF0YXNldCxcbiAgICBtYXhEZWZhdWx0VG9vbHRpcHM6IHN0YXRlLm1heERlZmF1bHRUb29sdGlwc1xuICB9KTtcbiAgY29uc3QgbWVyZ2VkID0ge1xuICAgIC4uLnN0YXRlLmludGVyYWN0aW9uQ29uZmlnLnRvb2x0aXAuY29uZmlnLmZpZWxkc1RvU2hvdyxcbiAgICAuLi50b29sdGlwRmllbGRzXG4gIH07XG5cbiAgcmV0dXJuIHNldChbJ2ludGVyYWN0aW9uQ29uZmlnJywgJ3Rvb2x0aXAnLCAnY29uZmlnJywgJ2ZpZWxkc1RvU2hvdyddLCBtZXJnZWQsIHN0YXRlKTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGluaXRpYWxGaWxlTG9hZGluZ1Byb2dyZXNzKGZpbGUsIGluZGV4KSB7XG4gIGNvbnN0IGZpbGVOYW1lID0gZmlsZS5uYW1lIHx8IGBVbnRpdGxlZCBGaWxlICR7aW5kZXh9YDtcbiAgcmV0dXJuIHtcbiAgICBbZmlsZU5hbWVdOiB7XG4gICAgICAvLyBwZXJjZW50IG9mIGN1cnJlbnQgZmlsZVxuICAgICAgcGVyY2VudDogMCxcbiAgICAgIG1lc3NhZ2U6ICcnLFxuICAgICAgZmlsZU5hbWUsXG4gICAgICBlcnJvcjogbnVsbFxuICAgIH1cbiAgfTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHVwZGF0ZUZpbGVMb2FkaW5nUHJvZ3Jlc3NVcGRhdGVyKHN0YXRlLCB7ZmlsZU5hbWUsIHByb2dyZXNzfSkge1xuICAvLyBAdHMtZXhwZWN0LWVycm9yXG4gIHJldHVybiBwaWNrXygnZmlsZUxvYWRpbmdQcm9ncmVzcycpKHBpY2tfKGZpbGVOYW1lKShtZXJnZV8ocHJvZ3Jlc3MpKSkoc3RhdGUpO1xufVxuLyoqXG4gKiBIZWxwZXIgZnVuY3Rpb24gdG8gdXBkYXRlIGxheWVyIGRvbWFpbnMgZm9yIGFuIGFycmF5IG9mIGRhdGFzZXRzXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiB1cGRhdGVBbGxMYXllckRvbWFpbkRhdGEoXG4gIHN0YXRlOiBWaXNTdGF0ZSxcbiAgZGF0YUlkOiBzdHJpbmcgfCBzdHJpbmdbXSxcbiAgdXBkYXRlZEZpbHRlcj86IEZpbHRlclxuKTogVmlzU3RhdGUge1xuICBjb25zdCBkYXRhSWRzID0gdHlwZW9mIGRhdGFJZCA9PT0gJ3N0cmluZycgPyBbZGF0YUlkXSA6IGRhdGFJZDtcbiAgY29uc3QgbmV3TGF5ZXJzOiBMYXllcltdID0gW107XG4gIGNvbnN0IG5ld0xheWVyRGF0YTogYW55W10gPSBbXTtcblxuICBzdGF0ZS5sYXllcnMuZm9yRWFjaCgob2xkTGF5ZXIsIGkpID0+IHtcbiAgICBpZiAob2xkTGF5ZXIuY29uZmlnLmRhdGFJZCAmJiBkYXRhSWRzLmluY2x1ZGVzKG9sZExheWVyLmNvbmZpZy5kYXRhSWQpKSB7XG4gICAgICAvLyBObyBuZWVkIHRvIHJlY2FsY3VsYXRlIGxheWVyIGRvbWFpbiBpZiBmaWx0ZXIgaGFzIGZpeGVkIGRvbWFpblxuICAgICAgY29uc3QgbmV3TGF5ZXIgPVxuICAgICAgICB1cGRhdGVkRmlsdGVyICYmIHVwZGF0ZWRGaWx0ZXIuZml4ZWREb21haW5cbiAgICAgICAgICA/IG9sZExheWVyXG4gICAgICAgICAgOiBvbGRMYXllci51cGRhdGVMYXllckRvbWFpbihzdGF0ZS5kYXRhc2V0cywgdXBkYXRlZEZpbHRlcik7XG5cbiAgICAgIGNvbnN0IHtsYXllckRhdGEsIGxheWVyfSA9IGNhbGN1bGF0ZUxheWVyRGF0YShuZXdMYXllciwgc3RhdGUsIHN0YXRlLmxheWVyRGF0YVtpXSk7XG5cbiAgICAgIG5ld0xheWVycy5wdXNoKGxheWVyKTtcbiAgICAgIG5ld0xheWVyRGF0YS5wdXNoKGxheWVyRGF0YSk7XG4gICAgfSBlbHNlIHtcbiAgICAgIG5ld0xheWVycy5wdXNoKG9sZExheWVyKTtcbiAgICAgIG5ld0xheWVyRGF0YS5wdXNoKHN0YXRlLmxheWVyRGF0YVtpXSk7XG4gICAgfVxuICB9KTtcblxuICBjb25zdCBuZXdTdGF0ZSA9IHtcbiAgICAuLi5zdGF0ZSxcbiAgICBsYXllcnM6IG5ld0xheWVycyxcbiAgICBsYXllckRhdGE6IG5ld0xheWVyRGF0YVxuICB9O1xuXG4gIHJldHVybiBuZXdTdGF0ZTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHVwZGF0ZUFuaW1hdGlvbkRvbWFpbjxTIGV4dGVuZHMgVmlzU3RhdGU+KHN0YXRlOiBTKTogUyB7XG4gIC8vIG1lcmdlIGFsbCBhbmltYXRhYmxlIGxheWVyIGRvbWFpbiBhbmQgdXBkYXRlIGdsb2JhbCBjb25maWdcbiAgY29uc3QgYW5pbWF0YWJsZUxheWVycyA9IHN0YXRlLmxheWVycy5maWx0ZXIoXG4gICAgbCA9PlxuICAgICAgbC5jb25maWcuaXNWaXNpYmxlICYmXG4gICAgICBsLmNvbmZpZy5hbmltYXRpb24gJiZcbiAgICAgIGwuY29uZmlnLmFuaW1hdGlvbi5lbmFibGVkICYmXG4gICAgICAvLyBAdHMtZXhwZWN0LWVycm9yIHRyaXAtbGF5ZXItb25seVxuICAgICAgQXJyYXkuaXNBcnJheShsLmFuaW1hdGlvbkRvbWFpbilcbiAgKTtcblxuICBpZiAoIWFuaW1hdGFibGVMYXllcnMubGVuZ3RoKSB7XG4gICAgcmV0dXJuIHtcbiAgICAgIC4uLnN0YXRlLFxuICAgICAgYW5pbWF0aW9uQ29uZmlnOiB7XG4gICAgICAgIC4uLnN0YXRlLmFuaW1hdGlvbkNvbmZpZyxcbiAgICAgICAgZG9tYWluOiBudWxsLFxuICAgICAgICBkZWZhdWx0VGltZUZvcm1hdDogbnVsbFxuICAgICAgfVxuICAgIH07XG4gIH1cblxuICBjb25zdCBtZXJnZWREb21haW46IFtudW1iZXIsIG51bWJlcl0gPSBhbmltYXRhYmxlTGF5ZXJzLnJlZHVjZShcbiAgICAoYWNjdSwgbGF5ZXIpID0+IFtcbiAgICAgIC8vIEB0cy1leHBlY3QtZXJyb3IgdHJpcC1sYXllci1vbmx5XG4gICAgICBNYXRoLm1pbihhY2N1WzBdLCBsYXllci5hbmltYXRpb25Eb21haW5bMF0pLFxuICAgICAgLy8gQHRzLWV4cGVjdC1lcnJvciB0cmlwLWxheWVyLW9ubHlcbiAgICAgIE1hdGgubWF4KGFjY3VbMV0sIGxheWVyLmFuaW1hdGlvbkRvbWFpblsxXSlcbiAgICBdLFxuICAgIFtOdW1iZXIoSW5maW5pdHkpLCAtSW5maW5pdHldXG4gICk7XG4gIGNvbnN0IGRlZmF1bHRUaW1lRm9ybWF0ID0gZ2V0VGltZVdpZGdldFRpdGxlRm9ybWF0dGVyKG1lcmdlZERvbWFpbik7XG5cbiAgcmV0dXJuIHtcbiAgICAuLi5zdGF0ZSxcbiAgICBhbmltYXRpb25Db25maWc6IHtcbiAgICAgIC4uLnN0YXRlLmFuaW1hdGlvbkNvbmZpZyxcbiAgICAgIGN1cnJlbnRUaW1lOiBpc0luUmFuZ2Uoc3RhdGUuYW5pbWF0aW9uQ29uZmlnLmN1cnJlbnRUaW1lLCBtZXJnZWREb21haW4pXG4gICAgICAgID8gc3RhdGUuYW5pbWF0aW9uQ29uZmlnLmN1cnJlbnRUaW1lXG4gICAgICAgIDogbWVyZ2VkRG9tYWluWzBdLFxuICAgICAgZG9tYWluOiBtZXJnZWREb21haW4sXG4gICAgICBkZWZhdWx0VGltZUZvcm1hdFxuICAgIH1cbiAgfTtcbn1cblxuLyoqXG4gKiBVcGRhdGUgdGhlIHN0YXR1cyBvZiB0aGUgZWRpdG9yXG4gKiBAbWVtYmVyb2YgdmlzU3RhdGVVcGRhdGVyc1xuICovXG5leHBvcnQgY29uc3Qgc2V0RWRpdG9yTW9kZVVwZGF0ZXIgPSAoXG4gIHN0YXRlOiBWaXNTdGF0ZSxcbiAge21vZGV9OiBWaXNTdGF0ZUFjdGlvbnMuU2V0RWRpdG9yTW9kZVVwZGF0ZXJBY3Rpb25cbik6IFZpc1N0YXRlID0+ICh7XG4gIC4uLnN0YXRlLFxuICBlZGl0b3I6IHtcbiAgICAuLi5zdGF0ZS5lZGl0b3IsXG4gICAgbW9kZSxcbiAgICBzZWxlY3RlZEZlYXR1cmU6IG51bGxcbiAgfVxufSk7XG5cbi8vIGNvbnN0IGZlYXR1cmVUb0ZpbHRlclZhbHVlID0gKGZlYXR1cmUpID0+ICh7Li4uZmVhdHVyZSwgaWQ6IGZlYXR1cmUuaWR9KTtcbi8qKlxuICogVXBkYXRlIGVkaXRvciBmZWF0dXJlc1xuICogQG1lbWJlcm9mIHZpc1N0YXRlVXBkYXRlcnNcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHNldEZlYXR1cmVzVXBkYXRlcihcbiAgc3RhdGU6IFZpc1N0YXRlLFxuICB7ZmVhdHVyZXMgPSBbXX06IFZpc1N0YXRlQWN0aW9ucy5TZXRGZWF0dXJlc1VwZGF0ZXJBY3Rpb25cbik6IFZpc1N0YXRlIHtcbiAgY29uc3QgbGFzdEZlYXR1cmUgPSBmZWF0dXJlcy5sZW5ndGggJiYgZmVhdHVyZXNbZmVhdHVyZXMubGVuZ3RoIC0gMV07XG5cbiAgY29uc3QgbmV3U3RhdGUgPSB7XG4gICAgLi4uc3RhdGUsXG4gICAgZWRpdG9yOiB7XG4gICAgICAuLi5zdGF0ZS5lZGl0b3IsXG4gICAgICAvLyBvbmx5IHNhdmUgbm9uZSBmaWx0ZXIgZmVhdHVyZXMgdG8gZWRpdG9yXG4gICAgICBmZWF0dXJlczogZmVhdHVyZXMuZmlsdGVyKGYgPT4gIWdldEZpbHRlcklkSW5GZWF0dXJlKGYpKSxcbiAgICAgIG1vZGU6IGxhc3RGZWF0dXJlICYmIGxhc3RGZWF0dXJlLnByb3BlcnRpZXMuaXNDbG9zZWQgPyBFRElUT1JfTU9ERVMuRURJVCA6IHN0YXRlLmVkaXRvci5tb2RlXG4gICAgfVxuICB9O1xuXG4gIC8vIFJldHJpZXZlIGV4aXN0aW5nIGZlYXR1cmVcbiAgY29uc3Qge3NlbGVjdGVkRmVhdHVyZX0gPSBzdGF0ZS5lZGl0b3I7XG5cbiAgLy8gSWYgbm8gZmVhdHVyZSBpcyBzZWxlY3RlZCB3ZSBjYW4gc2ltcGx5IHJldHVybiBzaW5jZSBubyBvcGVyYXRpb25zXG4gIGlmICghc2VsZWN0ZWRGZWF0dXJlKSB7XG4gICAgcmV0dXJuIG5ld1N0YXRlO1xuICB9XG5cbiAgLy8gVE9ETzogY2hlY2sgaWYgdGhlIGZlYXR1cmUgaGFzIGNoYW5nZWRcbiAgY29uc3QgZmVhdHVyZSA9IGZlYXR1cmVzLmZpbmQoZiA9PiBmLmlkID09PSBzZWxlY3RlZEZlYXR1cmUuaWQpO1xuXG4gIC8vIGlmIGZlYXR1cmUgaXMgcGFydCBvZiBhIGZpbHRlclxuICBjb25zdCBmaWx0ZXJJZCA9IGZlYXR1cmUgJiYgZ2V0RmlsdGVySWRJbkZlYXR1cmUoZmVhdHVyZSk7XG4gIGlmIChmaWx0ZXJJZCAmJiBmZWF0dXJlKSB7XG4gICAgY29uc3QgZmVhdHVyZVZhbHVlID0gZmVhdHVyZVRvRmlsdGVyVmFsdWUoZmVhdHVyZSwgZmlsdGVySWQpO1xuICAgIGNvbnN0IGZpbHRlcklkeCA9IHN0YXRlLmZpbHRlcnMuZmluZEluZGV4KGZpbCA9PiBmaWwuaWQgPT09IGZpbHRlcklkKTtcbiAgICAvLyBAdHMtaWdub3JlXG4gICAgcmV0dXJuIHNldEZpbHRlclVwZGF0ZXIobmV3U3RhdGUsIHtcbiAgICAgIGlkeDogZmlsdGVySWR4LFxuICAgICAgcHJvcDogJ3ZhbHVlJyxcbiAgICAgIHZhbHVlOiBmZWF0dXJlVmFsdWVcbiAgICB9KTtcbiAgfVxuXG4gIHJldHVybiBuZXdTdGF0ZTtcbn1cblxuLyoqXG4gKiBTZXQgdGhlIGN1cnJlbnQgc2VsZWN0ZWQgZmVhdHVyZVxuICogQG1lbWJlcm9mIHVpU3RhdGVVcGRhdGVyc1xuICovXG5leHBvcnQgY29uc3Qgc2V0U2VsZWN0ZWRGZWF0dXJlVXBkYXRlciA9IChcbiAgc3RhdGU6IFZpc1N0YXRlLFxuICB7ZmVhdHVyZSwgc2VsZWN0aW9uQ29udGV4dH06IFZpc1N0YXRlQWN0aW9ucy5TZXRTZWxlY3RlZEZlYXR1cmVVcGRhdGVyQWN0aW9uXG4pOiBWaXNTdGF0ZSA9PiB7XG4gIHJldHVybiB7XG4gICAgLi4uc3RhdGUsXG4gICAgZWRpdG9yOiB7XG4gICAgICAuLi5zdGF0ZS5lZGl0b3IsXG4gICAgICBzZWxlY3RlZEZlYXR1cmU6IGZlYXR1cmUsXG4gICAgICBzZWxlY3Rpb25Db250ZXh0XG4gICAgfVxuICB9O1xufTtcblxuLyoqXG4gKiBEZWxldGUgZXhpc3RpbmcgZmVhdHVyZSBmcm9tIGZpbHRlcnNcbiAqIEBtZW1iZXJvZiB2aXNTdGF0ZVVwZGF0ZXJzXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBkZWxldGVGZWF0dXJlVXBkYXRlcihcbiAgc3RhdGU6IFZpc1N0YXRlLFxuICB7ZmVhdHVyZX06IFZpc1N0YXRlQWN0aW9ucy5EZWxldGVGZWF0dXJlVXBkYXRlckFjdGlvblxuKTogVmlzU3RhdGUge1xuICBpZiAoIWZlYXR1cmUpIHtcbiAgICByZXR1cm4gc3RhdGU7XG4gIH1cblxuICBjb25zdCBuZXdTdGF0ZSA9IHtcbiAgICAuLi5zdGF0ZSxcbiAgICBlZGl0b3I6IHtcbiAgICAgIC4uLnN0YXRlLmVkaXRvcixcbiAgICAgIHNlbGVjdGVkRmVhdHVyZTogbnVsbFxuICAgIH1cbiAgfTtcblxuICBpZiAoZ2V0RmlsdGVySWRJbkZlYXR1cmUoZmVhdHVyZSkpIHtcbiAgICBjb25zdCBmaWx0ZXJJZHggPSBuZXdTdGF0ZS5maWx0ZXJzLmZpbmRJbmRleChmID0+IGYuaWQgPT09IGdldEZpbHRlcklkSW5GZWF0dXJlKGZlYXR1cmUpKTtcblxuICAgIHJldHVybiBmaWx0ZXJJZHggPiAtMSA/IHJlbW92ZUZpbHRlclVwZGF0ZXIobmV3U3RhdGUsIHtpZHg6IGZpbHRlcklkeH0pIDogbmV3U3RhdGU7XG4gIH1cblxuICAvLyBtb2RpZnkgZWRpdG9yIG9iamVjdFxuICBjb25zdCBuZXdFZGl0b3IgPSB7XG4gICAgLi4uc3RhdGUuZWRpdG9yLFxuICAgIGZlYXR1cmVzOiBzdGF0ZS5lZGl0b3IuZmVhdHVyZXMuZmlsdGVyKGYgPT4gZi5pZCAhPT0gZmVhdHVyZS5pZCksXG4gICAgc2VsZWN0ZWRGZWF0dXJlOiBudWxsXG4gIH07XG5cbiAgcmV0dXJuIHtcbiAgICAuLi5zdGF0ZSxcbiAgICBlZGl0b3I6IG5ld0VkaXRvclxuICB9O1xufVxuXG4vKipcbiAqIFRvZ2dsZSBmZWF0dXJlIGFzIGxheWVyIGZpbHRlclxuICogQG1lbWJlcm9mIHZpc1N0YXRlVXBkYXRlcnNcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHNldFBvbHlnb25GaWx0ZXJMYXllclVwZGF0ZXIoXG4gIHN0YXRlOiBWaXNTdGF0ZSxcbiAgcGF5bG9hZDogVmlzU3RhdGVBY3Rpb25zLlNldFBvbHlnb25GaWx0ZXJMYXllclVwZGF0ZXJBY3Rpb25cbik6IFZpc1N0YXRlIHtcbiAgY29uc3Qge2xheWVyLCBmZWF0dXJlfSA9IHBheWxvYWQ7XG4gIGNvbnN0IGZpbHRlcklkID0gZ2V0RmlsdGVySWRJbkZlYXR1cmUoZmVhdHVyZSk7XG5cbiAgLy8gbGV0IG5ld0ZpbHRlciA9IG51bGw7XG4gIGxldCBmaWx0ZXJJZHg7XG4gIGxldCBuZXdMYXllcklkID0gW2xheWVyLmlkXTtcbiAgbGV0IG5ld1N0YXRlID0gc3RhdGU7XG4gIC8vIElmIHBvbHlnb24gZmlsdGVyIGFscmVhZHkgZXhpc3RzLCB3ZSBuZWVkIHRvIGZpbmQgb3V0IGlmIHRoZSBjdXJyZW50IGxheWVyIGlzIGFscmVhZHkgaW5jbHVkZWRcbiAgaWYgKGZpbHRlcklkKSB7XG4gICAgZmlsdGVySWR4ID0gc3RhdGUuZmlsdGVycy5maW5kSW5kZXgoZiA9PiBmLmlkID09PSBmaWx0ZXJJZCk7XG5cbiAgICBpZiAoIXN0YXRlLmZpbHRlcnNbZmlsdGVySWR4XSkge1xuICAgICAgLy8gd2hhdCBpZiBmaWx0ZXIgZG9lc24ndCBleGlzdD8uLi4gbm90IHBvc3NpYmxlLlxuICAgICAgLy8gYmVjYXVzZSBmZWF0dXJlcyBpbiB0aGUgZWRpdG9yIGlzIHBhc3NlZCBpbiBmcm9tIGZpbHRlcnMgYW5kIGVkaXRvcnMuXG4gICAgICAvLyBidXQgd2Ugd2lsbCBtb3ZlIHRoaXMgZmVhdHVyZSBiYWNrIHRvIGVkaXRvciBqdXN0IGluIGNhc2VcbiAgICAgIGNvbnN0IG5vbmVGaWx0ZXJGZWF0dXJlID0ge1xuICAgICAgICAuLi5mZWF0dXJlLFxuICAgICAgICBwcm9wZXJ0aWVzOiB7XG4gICAgICAgICAgLi4uZmVhdHVyZS5wcm9wZXJ0aWVzLFxuICAgICAgICAgIGZpbHRlcklkOiBudWxsXG4gICAgICAgIH1cbiAgICAgIH07XG5cbiAgICAgIHJldHVybiB7XG4gICAgICAgIC4uLnN0YXRlLFxuICAgICAgICBlZGl0b3I6IHtcbiAgICAgICAgICAuLi5zdGF0ZS5lZGl0b3IsXG4gICAgICAgICAgZmVhdHVyZXM6IFsuLi5zdGF0ZS5lZGl0b3IuZmVhdHVyZXMsIG5vbmVGaWx0ZXJGZWF0dXJlXSxcbiAgICAgICAgICBzZWxlY3RlZEZlYXR1cmU6IG5vbmVGaWx0ZXJGZWF0dXJlXG4gICAgICAgIH1cbiAgICAgIH07XG4gICAgfVxuICAgIGNvbnN0IGZpbHRlciA9IHN0YXRlLmZpbHRlcnNbZmlsdGVySWR4XTtcbiAgICBjb25zdCB7bGF5ZXJJZCA9IFtdfSA9IGZpbHRlcjtcbiAgICBjb25zdCBpc0xheWVySW5jbHVkZWQgPSBsYXllcklkLmluY2x1ZGVzKGxheWVyLmlkKTtcblxuICAgIG5ld0xheWVySWQgPSBpc0xheWVySW5jbHVkZWRcbiAgICAgID8gLy8gaWYgbGF5ZXIgaXMgaW5jbHVkZWQsIHJlbW92ZSBpdFxuICAgICAgICBsYXllcklkLmZpbHRlcihsID0+IGwgIT09IGxheWVyLmlkKVxuICAgICAgOiBbLi4ubGF5ZXJJZCwgbGF5ZXIuaWRdO1xuICB9IGVsc2Uge1xuICAgIC8vIGlmIHdlIGhhdmVuJ3QgY3JlYXRlIHRoZSBwb2x5Z29uIGZpbHRlciwgY3JlYXRlIGl0XG4gICAgY29uc3QgbmV3RmlsdGVyID0gZ2VuZXJhdGVQb2x5Z29uRmlsdGVyKFtdLCBmZWF0dXJlKTtcbiAgICBmaWx0ZXJJZHggPSBzdGF0ZS5maWx0ZXJzLmxlbmd0aDtcblxuICAgIC8vIGFkZCBmZWF0dXJlLCByZW1vdmUgZmVhdHVyZSBmcm9tIGVpZHRvclxuICAgIG5ld1N0YXRlID0ge1xuICAgICAgLi4uc3RhdGUsXG4gICAgICBmaWx0ZXJzOiBbLi4uc3RhdGUuZmlsdGVycywgbmV3RmlsdGVyXSxcbiAgICAgIGVkaXRvcjoge1xuICAgICAgICAuLi5zdGF0ZS5lZGl0b3IsXG4gICAgICAgIGZlYXR1cmVzOiBzdGF0ZS5lZGl0b3IuZmVhdHVyZXMuZmlsdGVyKGYgPT4gZi5pZCAhPT0gZmVhdHVyZS5pZCksXG4gICAgICAgIHNlbGVjdGVkRmVhdHVyZTogbmV3RmlsdGVyLnZhbHVlXG4gICAgICB9XG4gICAgfTtcbiAgfVxuXG4gIHJldHVybiBzZXRGaWx0ZXJVcGRhdGVyKG5ld1N0YXRlLCB7XG4gICAgaWR4OiBmaWx0ZXJJZHgsXG4gICAgcHJvcDogJ2xheWVySWQnLFxuICAgIHZhbHVlOiBuZXdMYXllcklkXG4gIH0pO1xufVxuXG4vKipcbiAqIEBtZW1iZXJvZiB2aXNTdGF0ZVVwZGF0ZXJzXG4gKiBAcHVibGljXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBzb3J0VGFibGVDb2x1bW5VcGRhdGVyKFxuICBzdGF0ZTogVmlzU3RhdGUsXG4gIHtkYXRhSWQsIGNvbHVtbiwgbW9kZX06IFZpc1N0YXRlQWN0aW9ucy5Tb3J0VGFibGVDb2x1bW5VcGRhdGVyQWN0aW9uXG4pOiBWaXNTdGF0ZSB7XG4gIGNvbnN0IGRhdGFzZXQgPSBzdGF0ZS5kYXRhc2V0c1tkYXRhSWRdO1xuICBpZiAoIWRhdGFzZXQpIHtcbiAgICByZXR1cm4gc3RhdGU7XG4gIH1cbiAgbGV0IHNvcnRNb2RlID0gbW9kZTtcbiAgaWYgKCFzb3J0TW9kZSkge1xuICAgIGNvbnN0IGN1cnJlbnRNb2RlID0gZ2V0KGRhdGFzZXQsIFsnc29ydENvbHVtbicsIGNvbHVtbl0pO1xuICAgIC8vIEB0cy1pZ25vcmUgLSBzaG91bGQgYmUgZml4YWJsZSBpbiBhIFRTIGZpbGVcbiAgICBzb3J0TW9kZSA9IGN1cnJlbnRNb2RlXG4gICAgICA/IE9iamVjdC5rZXlzKFNPUlRfT1JERVIpLmZpbmQobSA9PiBtICE9PSBjdXJyZW50TW9kZSlcbiAgICAgIDogU09SVF9PUkRFUi5BU0NFTkRJTkc7XG4gIH1cblxuICBjb25zdCBzb3J0ZWQgPSBzb3J0RGF0YXNldEJ5Q29sdW1uKGRhdGFzZXQsIGNvbHVtbiwgc29ydE1vZGUpO1xuICByZXR1cm4gc2V0KFsnZGF0YXNldHMnLCBkYXRhSWRdLCBzb3J0ZWQsIHN0YXRlKTtcbn1cblxuLyoqXG4gKiBAbWVtYmVyb2YgdmlzU3RhdGVVcGRhdGVyc1xuICogQHB1YmxpY1xuICovXG5leHBvcnQgZnVuY3Rpb24gcGluVGFibGVDb2x1bW5VcGRhdGVyKFxuICBzdGF0ZTogVmlzU3RhdGUsXG4gIHtkYXRhSWQsIGNvbHVtbn06IFZpc1N0YXRlQWN0aW9ucy5QaW5UYWJsZUNvbHVtblVwZGF0ZXJBY3Rpb25cbik6IFZpc1N0YXRlIHtcbiAgY29uc3QgZGF0YXNldCA9IHN0YXRlLmRhdGFzZXRzW2RhdGFJZF07XG4gIGlmICghZGF0YXNldCkge1xuICAgIHJldHVybiBzdGF0ZTtcbiAgfVxuICBjb25zdCBuZXdEYXRhc2V0ID0gcGluVGFibGVDb2x1bW5zKGRhdGFzZXQsIGNvbHVtbik7XG5cbiAgcmV0dXJuIHNldChbJ2RhdGFzZXRzJywgZGF0YUlkXSwgbmV3RGF0YXNldCwgc3RhdGUpO1xufVxuXG4vKipcbiAqIENvcHkgY29sdW1uIGNvbnRlbnQgYXMgc3RyaW5nc1xuICogQG1lbWJlcm9mIHZpc1N0YXRlVXBkYXRlcnNcbiAqIEBwdWJsaWNcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGNvcHlUYWJsZUNvbHVtblVwZGF0ZXIoXG4gIHN0YXRlOiBWaXNTdGF0ZSxcbiAge2RhdGFJZCwgY29sdW1ufTogVmlzU3RhdGVBY3Rpb25zLkNvcHlUYWJsZUNvbHVtblVwZGF0ZXJBY3Rpb25cbik6IFZpc1N0YXRlIHtcbiAgY29uc3QgZGF0YXNldCA9IHN0YXRlLmRhdGFzZXRzW2RhdGFJZF07XG4gIGlmICghZGF0YXNldCkge1xuICAgIHJldHVybiBzdGF0ZTtcbiAgfVxuICBjb25zdCBmaWVsZElkeCA9IGRhdGFzZXQuZmllbGRzLmZpbmRJbmRleChmID0+IGYubmFtZSA9PT0gY29sdW1uKTtcbiAgaWYgKGZpZWxkSWR4IDwgMCkge1xuICAgIHJldHVybiBzdGF0ZTtcbiAgfVxuICBjb25zdCB7dHlwZX0gPSBkYXRhc2V0LmZpZWxkc1tmaWVsZElkeF07XG4gIGNvbnN0IHRleHQgPSBkYXRhc2V0LmRhdGFDb250YWluZXJcbiAgICAubWFwKHJvdyA9PiBwYXJzZUZpZWxkVmFsdWUocm93LnZhbHVlQXQoZmllbGRJZHgpLCB0eXBlKSwgdHJ1ZSlcbiAgICAuam9pbignXFxuJyk7XG5cbiAgY29weSh0ZXh0KTtcblxuICByZXR1cm4gc3RhdGU7XG59XG5cbi8qKlxuICogU2V0IGRpc3BsYXkgZm9ybWF0IGZyb20gY29sdW1ucyBmcm9tIHVzZXIgc2VsZWN0aW9uXG4gKiBAbWVtYmVyb2YgdmlzU3RhdGVVcGRhdGVyc1xuICogQHB1YmxpY1xuICovXG5leHBvcnQgZnVuY3Rpb24gc2V0Q29sdW1uRGlzcGxheUZvcm1hdFVwZGF0ZXIoXG4gIHN0YXRlOiBWaXNTdGF0ZSxcbiAge2RhdGFJZCwgZm9ybWF0c306IFZpc1N0YXRlQWN0aW9ucy5TZXRDb2x1bW5EaXNwbGF5Rm9ybWF0VXBkYXRlckFjdGlvblxuKTogVmlzU3RhdGUge1xuICBjb25zdCBkYXRhc2V0ID0gc3RhdGUuZGF0YXNldHNbZGF0YUlkXTtcbiAgaWYgKCFkYXRhc2V0KSB7XG4gICAgcmV0dXJuIHN0YXRlO1xuICB9XG4gIGxldCBuZXdGaWVsZHMgPSBkYXRhc2V0LmZpZWxkcztcbiAgT2JqZWN0LmtleXMoZm9ybWF0cykuZm9yRWFjaChjb2x1bW4gPT4ge1xuICAgIGNvbnN0IGZpZWxkSWR4ID0gZGF0YXNldC5maWVsZHMuZmluZEluZGV4KGYgPT4gZi5uYW1lID09PSBjb2x1bW4pO1xuICAgIGlmIChmaWVsZElkeCA+PSAwKSB7XG4gICAgICBjb25zdCBkaXNwbGF5Rm9ybWF0ID0gZm9ybWF0c1tjb2x1bW5dO1xuICAgICAgY29uc3QgZmllbGQgPSBuZXdGaWVsZHNbZmllbGRJZHhdO1xuICAgICAgbmV3RmllbGRzID0gc3dhcF8obWVyZ2VfKHtkaXNwbGF5Rm9ybWF0fSkoZmllbGQpIGFzIHtpZDogc3RyaW5nfSkoXG4gICAgICAgIG5ld0ZpZWxkcyBhcyB7aWQ6IHN0cmluZ31bXVxuICAgICAgKSBhcyBGaWVsZFtdO1xuICAgIH1cbiAgfSk7XG5cbiAgY29uc3QgbmV3RGF0YXNldCA9IGNvcHlUYWJsZUFuZFVwZGF0ZShkYXRhc2V0LCB7ZmllbGRzOiBuZXdGaWVsZHMgYXMgRmllbGRbXX0pO1xuICByZXR1cm4gcGlja18oJ2RhdGFzZXRzJykobWVyZ2VfKHtbZGF0YUlkXTogbmV3RGF0YXNldH0pKShzdGF0ZSk7XG59XG5cbi8qKlxuICogVXBkYXRlIGVkaXRvclxuICovXG5leHBvcnQgZnVuY3Rpb24gdG9nZ2xlRWRpdG9yVmlzaWJpbGl0eVVwZGF0ZXIoXG4gIHN0YXRlOiBWaXNTdGF0ZSxcbiAgYWN0aW9uOiBWaXNTdGF0ZUFjdGlvbnMuVG9nZ2xlRWRpdG9yVmlzaWJpbGl0eVVwZGF0ZXJBY3Rpb25cbik6IFZpc1N0YXRlIHtcbiAgcmV0dXJuIHtcbiAgICAuLi5zdGF0ZSxcbiAgICBlZGl0b3I6IHtcbiAgICAgIC4uLnN0YXRlLmVkaXRvcixcbiAgICAgIHZpc2libGU6ICFzdGF0ZS5lZGl0b3IudmlzaWJsZVxuICAgIH1cbiAgfTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHNldEZpbHRlckFuaW1hdGlvblRpbWVDb25maWdVcGRhdGVyKFxuICBzdGF0ZTogVmlzU3RhdGUsXG4gIHtpZHgsIGNvbmZpZ306IFZpc1N0YXRlQWN0aW9ucy5TZXRGaWx0ZXJBbmltYXRpb25UaW1lQ29uZmlnQWN0aW9uXG4pOiBWaXNTdGF0ZSB7XG4gIGNvbnN0IG9sZEZpbHRlciA9IHN0YXRlLmZpbHRlcnNbaWR4XTtcbiAgaWYgKCFvbGRGaWx0ZXIpIHtcbiAgICBDb25zb2xlLmVycm9yKGBmaWx0ZXJzLiR7aWR4fSBpcyB1bmRlZmluZWRgKTtcbiAgICByZXR1cm4gc3RhdGU7XG4gIH1cbiAgaWYgKG9sZEZpbHRlci50eXBlICE9PSBGSUxURVJfVFlQRVMudGltZVJhbmdlKSB7XG4gICAgQ29uc29sZS5lcnJvcihcbiAgICAgIGBzZXRGaWx0ZXJBbmltYXRpb25UaW1lQ29uZmlnIGNhbiBvbmx5IGJlIGNhbGxlZCB0byB1cGRhdGUgYSB0aW1lIGZpbHRlci4gY2hlY2sgZmlsdGVyLnR5cGUgPT09ICd0aW1lUmFuZ2UnYFxuICAgICk7XG4gICAgcmV0dXJuIHN0YXRlO1xuICB9XG5cbiAgY29uc3QgdXBkYXRlcyA9IGNoZWNrVGltZUNvbmZpZ0FyZ3MoY29uZmlnKTtcblxuICByZXR1cm4gcGlja18oJ2ZpbHRlcnMnKShzd2FwXyhtZXJnZV8odXBkYXRlcykob2xkRmlsdGVyKSkpKHN0YXRlKTtcbn1cblxuZnVuY3Rpb24gY2hlY2tUaW1lQ29uZmlnQXJncyhjb25maWcpIHtcbiAgY29uc3QgYWxsb3dlZCA9IFsndGltZUZvcm1hdCcsICd0aW1lem9uZSddO1xuICByZXR1cm4gT2JqZWN0LmtleXMoY29uZmlnKS5yZWR1Y2UoKGFjY3UsIHByb3ApID0+IHtcbiAgICBpZiAoIWFsbG93ZWQuaW5jbHVkZXMocHJvcCkpIHtcbiAgICAgIENvbnNvbGUuZXJyb3IoXG4gICAgICAgIGBzZXRMYXllckFuaW1hdGlvblRpbWVDb25maWcgdGFrZXMgdGltZUZvcm1hdCBhbmQvb3IgdGltZXpvbmUgYXMgb3B0aW9ucywgZm91bmQgJHtwcm9wfWBcbiAgICAgICk7XG4gICAgICByZXR1cm4gYWNjdTtcbiAgICB9XG5cbiAgICAvLyBoZXJlIHdlIGFyZSBOT1QgY2hlY2tpbmcgaWYgdGltZXpvbmUgb3IgdGltZUZvcm1hdCBpbnB1dCBpcyB2YWxpZFxuICAgIGFjY3VbcHJvcF0gPSBjb25maWdbcHJvcF07XG4gICAgcmV0dXJuIGFjY3U7XG4gIH0sIHt9KTtcbn1cbi8qKlxuICogVXBkYXRlIGVkaXRvclxuICovXG5leHBvcnQgZnVuY3Rpb24gc2V0TGF5ZXJBbmltYXRpb25UaW1lQ29uZmlnVXBkYXRlcihcbiAgc3RhdGU6IFZpc1N0YXRlLFxuICB7Y29uZmlnfTogVmlzU3RhdGVBY3Rpb25zLlNldExheWVyQW5pbWF0aW9uVGltZUNvbmZpZ0FjdGlvblxuKTogVmlzU3RhdGUge1xuICBpZiAoIWNvbmZpZykge1xuICAgIHJldHVybiBzdGF0ZTtcbiAgfVxuICBjb25zdCB1cGRhdGVzID0gY2hlY2tUaW1lQ29uZmlnQXJncyhjb25maWcpO1xuICByZXR1cm4gcGlja18oJ2FuaW1hdGlvbkNvbmZpZycpKG1lcmdlXyh1cGRhdGVzKSkoc3RhdGUpO1xufVxuXG4vLyBGaW5kIGRhdGFJZCBmcm9tIGEgc2F2ZWQgdmlzU3RhdGUgcHJvcGVydHk6XG4vLyBsYXllcnMsIGZpbHRlcnMsIGludGVyYWN0aW9ucywgbGF5ZXJCbGVuZGluZywgb3ZlcmxheUJsZW5kaW5nLCBzcGxpdE1hcHMsIGFuaW1hdGlvbkNvbmZpZywgZWRpdG9yXG4vLyByZXBsYWNlIGl0IHdpdGggYW5vdGhlciBkYXRhSWRcbmZ1bmN0aW9uIGRlZmF1bHRSZXBsYWNlUGFyZW50RGF0YXNldElkcyh2YWx1ZTogYW55LCBkYXRhSWQ6IHN0cmluZywgZGF0YUlkVG9SZXBsYWNlOiBzdHJpbmcpIHtcbiAgaWYgKEFycmF5LmlzQXJyYXkodmFsdWUpKSB7XG4gICAgLy8gZm9yIGxheWVycywgZmlsdGVycywgY2FsbCBkZWZhdWx0UmVwbGFjZVBhcmVudERhdGFzZXRJZHMgb24gZWFjaCBpdGVtIGluIGFycmF5XG4gICAgY29uc3QgcmVwbGFjZWQgPSB2YWx1ZVxuICAgICAgLm1hcCh2ID0+IGRlZmF1bHRSZXBsYWNlUGFyZW50RGF0YXNldElkcyh2LCBkYXRhSWQsIGRhdGFJZFRvUmVwbGFjZSkpXG4gICAgICAuZmlsdGVyKGQgPT4gZCk7XG4gICAgcmV0dXJuIHJlcGxhY2VkLmxlbmd0aCA/IHJlcGxhY2VkIDogbnVsbDtcbiAgfVxuICBpZiAodHlwZW9mIHZhbHVlLmRhdGFJZCA9PT0gJ3N0cmluZycgJiYgdmFsdWUuZGF0YUlkID09PSBkYXRhSWQpIHtcbiAgICAvLyBvdGhlcnNcbiAgICByZXR1cm4ge1xuICAgICAgLi4udmFsdWUsXG4gICAgICBkYXRhSWQ6IGRhdGFJZFRvUmVwbGFjZVxuICAgIH07XG4gIH0gZWxzZSBpZiAoQXJyYXkuaXNBcnJheSh2YWx1ZS5kYXRhSWQpICYmIHZhbHVlLmRhdGFJZC5pbmNsdWRlcyhkYXRhSWQpKSB7XG4gICAgLy8gZmlsdGVyXG4gICAgcmV0dXJuIHtcbiAgICAgIC4uLnZhbHVlLFxuICAgICAgZGF0YUlkOiB2YWx1ZS5kYXRhSWQubWFwKGQgPT4gKGQgPT09IGRhdGFJZCA/IGRhdGFJZFRvUmVwbGFjZSA6IGQpKVxuICAgIH07XG4gIH0gZWxzZSBpZiAodmFsdWUuY29uZmlnPy5kYXRhSWQgJiYgdmFsdWUuY29uZmlnPy5kYXRhSWQgPT09IGRhdGFJZCkge1xuICAgIC8vIGxheWVyXG4gICAgcmV0dXJuIHtcbiAgICAgIC4uLnZhbHVlLFxuICAgICAgY29uZmlnOiB7XG4gICAgICAgIC4uLnZhbHVlLmNvbmZpZyxcbiAgICAgICAgZGF0YUlkOiBkYXRhSWRUb1JlcGxhY2VcbiAgICAgIH1cbiAgICB9O1xuICB9IGVsc2UgaWYgKGlzT2JqZWN0KHZhbHVlKSAmJiB2YWx1ZS5oYXNPd25Qcm9wZXJ0eShkYXRhSWQpKSB7XG4gICAgLy8gZm9yIHZhbHVlIHNhdmVkIGFzIHtbZGF0YUlkXTogey4uLn19XG4gICAgcmV0dXJuIHtbZGF0YUlkVG9SZXBsYWNlXTogdmFsdWVbZGF0YUlkXX07XG4gIH1cblxuICByZXR1cm4gbnVsbDtcbn1cblxuLy8gRmluZCBkYXRhc2V0SWRzIGRlcml2ZWQgYSBzYXZlZCB2aXNTdGF0ZSBQcm9wZXJ0eTtcbmZ1bmN0aW9uIGZpbmRDaGlsZERhdGFzZXRJZHModmFsdWUpIHtcbiAgaWYgKEFycmF5LmlzQXJyYXkodmFsdWUpKSB7XG4gICAgLy8gZm9yIGxheWVycywgZmlsdGVycywgY2FsbCBkZWZhdWx0UmVwbGFjZVBhcmVudERhdGFzZXRJZHMgb24gZWFjaCBpdGVtIGluIGFycmF5XG4gICAgY29uc3QgY2hpbGREYXRhSWRzID0gdmFsdWUubWFwKGZpbmRDaGlsZERhdGFzZXRJZHMpLmZpbHRlcihkID0+IGQpO1xuICAgIHJldHVybiBjaGlsZERhdGFJZHMubGVuZ3RoID8gY2hpbGREYXRhSWRzIDogbnVsbDtcbiAgfVxuXG4gIC8vIGNoaWxkIGRhdGEgaWQgdXN1YWxseSBzdG9yZXMgaW4gdGhlIGRlcml2ZWQgZGF0YXNldCBpbmZvXG4gIHJldHVybiB2YWx1ZT8ubmV3RGF0YXNldD8uaW5mby5pZCB8fCBudWxsO1xufVxuXG4vLyBtb3ZlZCB1bm1lcmdlZCBsYXllcnMsIGZpbHRlcnMsIGludGVyYWN0aW9uc1xuZnVuY3Rpb24gbW92ZVZhbHVlVG9CZU1lcmdlZChzdGF0ZSwgcHJvcFZhbHVlcywge3Byb3AsIHRvTWVyZ2VQcm9wLCBzYXZlVW5tZXJnZWR9KSB7XG4gIC8vIHJlbW92ZSBwcm9wIHZhbHVlIGZyb20gc3RhdGVcbiAgLy8gVE9ETzogc2hvdWxkIHdlIGFkZCByZW1vdmUgdXBkYXRlciB0byBtZXJnZXIgYXMgd2VsbD9cbiAgaWYgKCFwcm9wVmFsdWVzKSB7XG4gICAgcmV0dXJuIHN0YXRlO1xuICB9XG4gIGNvbnN0IHN0YXRlUmVtb3ZlZCA9XG4gICAgcHJvcCA9PT0gJ2xheWVycydcbiAgICAgID8gcHJvcFZhbHVlcy5yZWR1Y2UoKGFjY3UsIHByb3BWYWx1ZSkgPT4gcmVtb3ZlTGF5ZXJVcGRhdGVyKGFjY3UsIHtpZDogcHJvcFZhbHVlLmlkfSksIHN0YXRlKVxuICAgICAgOiBBcnJheS5pc0FycmF5KHN0YXRlW3Byb3BdKVxuICAgICAgPyB7XG4gICAgICAgICAgLi4uc3RhdGUsXG4gICAgICAgICAgW3Byb3BdOiBzdGF0ZVtwcm9wXS5maWx0ZXIocCA9PiAhcHJvcFZhbHVlcy5maW5kKHByb3BWYWx1ZSA9PiBwLmlkID09PSBwcm9wVmFsdWUuaWQpKVxuICAgICAgICB9XG4gICAgICA6IC8vIGlmIG5vdCBhcnJheSwgd2Ugd29uJ3QgcmVtb3ZlIGl0LCByZW1vdmUgZGF0YXNldCBzaG91bGQgaGFuZGxlIGl0XG4gICAgICAgIHN0YXRlO1xuXG4gIC8vIG1vdmUgdG8gc3RhdGVUb0JlTWVyZ2VkXG4gIGNvbnN0IHRvQmVNZXJnZWQgPSB7XG4gICAgW3RvTWVyZ2VQcm9wXTogc2F2ZVVubWVyZ2VkXG4gICAgICA/IC8vIGNhbGwgbWVyZ2Ugc2F2ZVVubWVyZ2VkIG1ldGhvZFxuICAgICAgICBzYXZlVW5tZXJnZWQoc3RhdGVSZW1vdmVkLCBwcm9wVmFsdWVzKVxuICAgICAgOiAvLyBpZiB0b01lcmdlUHJvcCBpcyBhcmFheSwgYXBwZW5kIHRvIGl0XG4gICAgICBBcnJheS5pc0FycmF5KHN0YXRlUmVtb3ZlZFt0b01lcmdlUHJvcF0pXG4gICAgICA/IFsuLi5zdGF0ZVJlbW92ZWRbdG9NZXJnZVByb3BdLCAuLi5wcm9wVmFsdWVzXVxuICAgICAgOiAvLyBzYXZlIHByb3BWYWx1ZXMgdG8gdG9NZXJnZVxuICAgICAgaXNPYmplY3Qoc3RhdGVSZW1vdmVkW3RvTWVyZ2VQcm9wXSlcbiAgICAgID8ge1xuICAgICAgICAgIC4uLnN0YXRlUmVtb3ZlZFt0b01lcmdlUHJvcF0sXG4gICAgICAgICAgLi4ucHJvcFZhbHVlc1xuICAgICAgICB9XG4gICAgICA6IHN0YXRlUmVtb3ZlZFt0b01lcmdlUHJvcF1cbiAgfTtcblxuICByZXR1cm4ge1xuICAgIC4uLnN0YXRlUmVtb3ZlZCxcbiAgICAuLi50b0JlTWVyZ2VkXG4gIH07XG59XG5cbmZ1bmN0aW9uIHJlcGxhY2VEYXRhc2V0QW5kRGVwczxUIGV4dGVuZHMgVmlzU3RhdGU+KFxuICBzdGF0ZTogVCxcbiAgZGF0YUlkOiBzdHJpbmcsXG4gIGRhdGFJZFRvVXNlOiBzdHJpbmdcbik6IFQge1xuICByZXR1cm4gY29tcG9zZV88VD4oW1xuICAgIGFwcGx5XyhyZXBsYWNlRGF0YXNldERlcHNJblN0YXRlLCB7ZGF0YUlkLCBkYXRhSWRUb1VzZX0pLFxuICAgIGFwcGx5XyhyZW1vdmVEYXRhc2V0VXBkYXRlciwge2RhdGFJZH0pXG4gIF0pKHN0YXRlKTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHByZXBhcmVTdGF0ZUZvckRhdGFzZXRSZXBsYWNlPFQgZXh0ZW5kcyBWaXNTdGF0ZT4oXG4gIHN0YXRlOiBULFxuICBkYXRhSWQ6IHN0cmluZyxcbiAgZGF0YUlkVG9Vc2U6IHN0cmluZ1xuKTogVCB7XG4gIGNvbnN0IHNlcmlhbGl6ZWRTdGF0ZSA9IHNlcmlhbGl6ZVZpc1N0YXRlKHN0YXRlLCBzdGF0ZS5zY2hlbWEpO1xuICBjb25zdCBuZXh0U3RhdGUgPSByZXBsYWNlRGF0YXNldEFuZERlcHMoc3RhdGUsIGRhdGFJZCwgZGF0YUlkVG9Vc2UpO1xuICAvLyBtYWtlIGEgY29weSBvZiBsYXllck9yZGVyLCBiZWNhdXNlIGxheWVyIGlkIHdpbGwgYmUgcmVtb3ZlZCBmcm9tIGl0IGJ5IGNhbGxpbmcgcmVtb3ZlTGF5ZXJVcGRhdGVyXG4gIGNvbnN0IHByZXNlcnZlTGF5ZXJPcmRlciA9IFsuLi5zdGF0ZS5sYXllck9yZGVyXTtcblxuICAvLyBwcmVzZXJ2ZSBkYXRhc2V0IG9yZGVyXG4gIG5leHRTdGF0ZS5wcmVzZXJ2ZURhdGFzZXRPcmRlciA9IE9iamVjdC5rZXlzKHN0YXRlLmRhdGFzZXRzKS5tYXAoZCA9PlxuICAgIGQgPT09IGRhdGFJZCA/IGRhdGFJZFRvVXNlIDogZFxuICApO1xuXG4gIC8vIHByZXNlcnZlTGF5ZXJPcmRlclxuICBpZiAobmV4dFN0YXRlLmxheWVyVG9CZU1lcmdlZD8ubGVuZ3RoKSB7XG4gICAgLy8gY29weSBzcGxpdCBtYXBzIHRvIGJlIG1lcmdlZCwgYmVjYXVzZSBpdCB3aWxsIGJlIHJlc2V0IGluIHJlbW92ZSBsYXllclxuICAgIG5leHRTdGF0ZS5zcGxpdE1hcHNUb0JlTWVyZ2VkID0gc2VyaWFsaXplZFN0YXRlPy5zcGxpdE1hcHMgPz8gW107XG4gICAgbmV4dFN0YXRlLmxheWVyT3JkZXIgPSBbLi4ucHJlc2VydmVMYXllck9yZGVyXTtcbiAgfVxuXG4gIHJldHVybiBuZXh0U3RhdGU7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiByZXBsYWNlRGF0YXNldERlcHNJblN0YXRlPFQgZXh0ZW5kcyBWaXNTdGF0ZT4oXG4gIHN0YXRlOiBULFxuICB7ZGF0YUlkLCBkYXRhSWRUb1VzZX06IHtkYXRhSWQ6IHN0cmluZzsgZGF0YUlkVG9Vc2U6IHN0cmluZ31cbik6IFQge1xuICBjb25zdCBzZXJpYWxpemVkU3RhdGUgPSBzZXJpYWxpemVWaXNTdGF0ZShzdGF0ZSwgc3RhdGUuc2NoZW1hKTtcblxuICBjb25zdCBuZXh0U3RhdGUgPSBzdGF0ZS5tZXJnZXJzLnJlZHVjZShcbiAgICAoXG4gICAgICBhY2N1U3RhdGUsXG4gICAgICB7cHJvcCwgdG9NZXJnZVByb3AsIHJlcGxhY2VQYXJlbnREYXRhc2V0SWRzLCBnZXRDaGlsZERhdGFzZXRJZHMsIHNhdmVVbm1lcmdlZCwgcHJlc2VydmVPcmRlcn1cbiAgICApID0+IHtcbiAgICAgIC8vIGdldCBkYXRhc2V0IGlkcyB0aGF0IGFyZSBkZXBlbmRzIG9uIHRoaXMgZGF0YXNldFxuICAgICAgY29uc3QgcHJvcHMgPSB0b0FycmF5KHByb3ApO1xuICAgICAgY29uc3QgdG9NZXJnZVByb3BzID0gdG9BcnJheSh0b01lcmdlUHJvcCk7XG4gICAgICBjb25zdCBzYXZlZFByb3BzID0gc2VyaWFsaXplZFN0YXRlID8gcHJvcHMubWFwKHAgPT4gc2VyaWFsaXplZFN0YXRlW3BdKSA6IFtdO1xuXG4gICAgICBsZXQgcmVwbGFjZWRTdGF0ZSA9IGFjY3VTdGF0ZTtcbiAgICAgIHNhdmVkUHJvcHMuZm9yRWFjaCgocHJvcFZhbHVlLCBpKSA9PiB7XG4gICAgICAgIGNvbnN0IG1lcmdlck9wdGlvbnMgPSB7XG4gICAgICAgICAgcHJvcDogcHJvcHNbaV0sXG4gICAgICAgICAgdG9NZXJnZVByb3A6IHRvTWVyZ2VQcm9wc1tpXSxcbiAgICAgICAgICBnZXRDaGlsZERhdGFzZXRJZHMsXG4gICAgICAgICAgc2F2ZVVubWVyZ2VkXG4gICAgICAgIH07XG5cbiAgICAgICAgY29uc3QgcmVwbGFjZWRJdGVtID1cbiAgICAgICAgICByZXBsYWNlUGFyZW50RGF0YXNldElkcz8uKHByb3BWYWx1ZSwgZGF0YUlkLCBkYXRhSWRUb1VzZSkgfHxcbiAgICAgICAgICBkZWZhdWx0UmVwbGFjZVBhcmVudERhdGFzZXRJZHMocHJvcFZhbHVlLCBkYXRhSWQsIGRhdGFJZFRvVXNlKTtcbiAgICAgICAgcmVwbGFjZWRTdGF0ZSA9IHJlcGxhY2VkSXRlbVxuICAgICAgICAgID8gcmVwbGFjZVByb3BWYWx1ZUluU3RhdGUocmVwbGFjZWRTdGF0ZSwgcmVwbGFjZWRJdGVtLCBtZXJnZXJPcHRpb25zKVxuICAgICAgICAgIDogcmVwbGFjZWRTdGF0ZTtcblxuICAgICAgICBpZiAoXG4gICAgICAgICAgbWVyZ2VyT3B0aW9ucy50b01lcmdlUHJvcCAhPT0gdW5kZWZpbmVkICYmXG4gICAgICAgICAgcmVwbGFjZWRTdGF0ZVttZXJnZXJPcHRpb25zLnRvTWVyZ2VQcm9wXT8ubGVuZ3RoICYmXG4gICAgICAgICAgcHJlc2VydmVPcmRlclxuICAgICAgICApIHtcbiAgICAgICAgICByZXBsYWNlZFN0YXRlW3ByZXNlcnZlT3JkZXJdID0gcHJvcFZhbHVlLm1hcChpdGVtID0+IGl0ZW0uaWQpO1xuICAgICAgICB9XG4gICAgICB9KTtcblxuICAgICAgcmV0dXJuIHJlcGxhY2VkU3RhdGU7XG4gICAgfSxcbiAgICBzdGF0ZVxuICApO1xuXG4gIHJldHVybiBuZXh0U3RhdGU7XG59XG5cbmZ1bmN0aW9uIHJlcGxhY2VQcm9wVmFsdWVJblN0YXRlKFxuICBzdGF0ZSxcbiAgcmVwbGFjZWRJdGVtLFxuICB7cHJvcCwgdG9NZXJnZVByb3AsIGdldENoaWxkRGF0YXNldElkcywgc2F2ZVVubWVyZ2VkfVxuKSB7XG4gIC8vIHByb3AgaXMgZGVwZW5kcyBvbiB0aGUgZGF0YXNldCB0byBiZSByZXBsYWNlZFxuICAvLyByZW1vdmUgcHJvcCBmcm9tIHN0YXRlLCBhbmQgbW92ZSBpdCB0byB0b0JlTWVyZ2VkXG4gIGxldCBuZXh0U3RhdGUgPSBtb3ZlVmFsdWVUb0JlTWVyZ2VkKHN0YXRlLCByZXBsYWNlZEl0ZW0sIHtwcm9wLCB0b01lcmdlUHJvcCwgc2F2ZVVubWVyZ2VkfSk7XG4gIGNvbnN0IGNoaWxkRGF0YUlkcyA9IGdldENoaWxkRGF0YXNldElkcz8uKHJlcGxhY2VkSXRlbSkgfHwgZmluZENoaWxkRGF0YXNldElkcyhyZXBsYWNlZEl0ZW0pO1xuXG4gIGlmIChjaGlsZERhdGFJZHMpIHtcbiAgICBuZXh0U3RhdGUgPSB0b0FycmF5KGNoaWxkRGF0YUlkcykucmVkdWNlKChhY2N1LCBjaGlsZERhdGFJZCkgPT4ge1xuICAgICAgLy8gc2hvdWxkbid0IG5lZWQgdG8gY2hhbmdlIGNoaWxkIGRhdGFzZXQgaWQsXG4gICAgICAvLyBidXQgc3RpbGwgbmVlZCB0byBtb3ZlIG91dCBvZiBzdGF0ZSBhbmQgbWVyZ2UgYmFjayBpblxuICAgICAgcmV0dXJuIHJlcGxhY2VEYXRhc2V0QW5kRGVwcyhhY2N1LCBjaGlsZERhdGFJZCwgY2hpbGREYXRhSWQpO1xuICAgIH0sIG5leHRTdGF0ZSk7XG4gIH1cbiAgcmV0dXJuIG5leHRTdGF0ZTtcbn1cbiJdfQ==
|
|
3154
|
+
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uL3NyYy92aXMtc3RhdGUtdXBkYXRlcnMudHMiXSwibmFtZXMiOlsidmlzU3RhdGVVcGRhdGVycyIsImRlZmF1bHRJbnRlcmFjdGlvbkNvbmZpZyIsInRvb2x0aXAiLCJpZCIsImxhYmVsIiwiZW5hYmxlZCIsImNvbmZpZyIsImZpZWxkc1RvU2hvdyIsImNvbXBhcmVNb2RlIiwiY29tcGFyZVR5cGUiLCJDT01QQVJFX1RZUEVTIiwiQUJTT0xVVEUiLCJnZW9jb2RlciIsInBvc2l0aW9uIiwiYnJ1c2giLCJzaXplIiwiY29vcmRpbmF0ZSIsIkRFRkFVTFRfQU5JTUFUSU9OX0NPTkZJRyIsImRvbWFpbiIsImN1cnJlbnRUaW1lIiwic3BlZWQiLCJpc0FuaW1hdGluZyIsInRpbWVGb3JtYXQiLCJ0aW1lem9uZSIsImRlZmF1bHRUaW1lRm9ybWF0IiwiaGlkZUNvbnRyb2wiLCJkdXJhdGlvbiIsIkRFRkFVTFRfRURJVE9SIiwibW9kZSIsIkVESVRPUl9NT0RFUyIsIkRSQVdfUE9MWUdPTiIsImZlYXR1cmVzIiwic2VsZWN0ZWRGZWF0dXJlIiwidmlzaWJsZSIsIklOSVRJQUxfVklTX1NUQVRFIiwibWFwSW5mbyIsInRpdGxlIiwiZGVzY3JpcHRpb24iLCJsYXllcnMiLCJsYXllckRhdGEiLCJsYXllclRvQmVNZXJnZWQiLCJsYXllck9yZGVyIiwiZmlsdGVycyIsImZpbHRlclRvQmVNZXJnZWQiLCJkYXRhc2V0cyIsImVkaXRpbmdEYXRhc2V0IiwidW5kZWZpbmVkIiwiZWZmZWN0cyIsImVmZmVjdE9yZGVyIiwiaW50ZXJhY3Rpb25Db25maWciLCJpbnRlcmFjdGlvblRvQmVNZXJnZWQiLCJsYXllckJsZW5kaW5nIiwib3ZlcmxheUJsZW5kaW5nIiwiaG92ZXJJbmZvIiwiY2xpY2tlZCIsIm1vdXNlUG9zIiwibWF4RGVmYXVsdFRvb2x0aXBzIiwiTUFYX0RFRkFVTFRfVE9PTFRJUFMiLCJzcGxpdE1hcHMiLCJzcGxpdE1hcHNUb0JlTWVyZ2VkIiwiaXNNZXJnaW5nRGF0YXNldHMiLCJsYXllckNsYXNzZXMiLCJMYXllckNsYXNzZXMiLCJhbmltYXRpb25Db25maWciLCJlZGl0b3IiLCJmaWxlTG9hZGluZyIsImZpbGVMb2FkaW5nUHJvZ3Jlc3MiLCJsb2FkZXJzIiwibG9hZE9wdGlvbnMiLCJtZXJnZXJzIiwiVklTX1NUQVRFX01FUkdFUlMiLCJzY2hlbWEiLCJLZXBsZXJHTFNjaGVtYSIsInVwZGF0ZVN0YXRlV2l0aExheWVyQW5kRGF0YSIsInN0YXRlIiwibGF5ZXIiLCJpZHgiLCJtYXAiLCJseXIiLCJpIiwiZCIsInVwZGF0ZVN0YXRlT25MYXllclZpc2liaWxpdHlDaGFuZ2UiLCJuZXdTdGF0ZSIsImxlbmd0aCIsImlzVmlzaWJsZSIsImFuaW1hdGlvbiIsInVwZGF0ZUFuaW1hdGlvbkRvbWFpbiIsInBpY2tDaGFuZ2VkUHJvcHMiLCJwcmV2IiwibmV4dCIsImNoYW5nZWRQcm9wcyIsInBpY2tQcm9wc09mIiwib2JqIiwiT2JqZWN0Iiwia2V5cyIsImZvckVhY2giLCJrZXkiLCJoYXNPd25Qcm9wZXJ0eSIsIlZJU1VBTF9DSEFOTkVMX1BST1BfVFlQRVMiLCJhcHBseUxheWVyQ29uZmlnVXBkYXRlciIsImFjdGlvbiIsIm9sZExheWVySWQiLCJuZXdMYXllckNvbmZpZyIsImxheWVySW5kZXgiLCJuZXdQYXJzZWRMYXllciIsIm9sZExheWVyIiwiZmluZCIsImwiLCJkYXRhc2V0IiwiZGF0YUlkIiwibmV3TGF5ZXIiLCJuZXh0U3RhdGUiLCJ0eXBlIiwib2xkTGF5ZXJJbmRleCIsImZpbmRJbmRleCIsImxheWVyVHlwZUNoYW5nZVVwZGF0ZXIiLCJuZXdMYXllcklkIiwic2VyaWFsaXplZE9sZExheWVyIiwic2VyaWFsaXplZE5ld0xheWVyIiwiY2hhbmdlZCIsInZpc0NvbmZpZyIsImxheWVyVmlzQ29uZmlnQ2hhbmdlVXBkYXRlciIsInZpc3VhbENoYW5uZWxzIiwiY2hhbm5lbE5hbWUiLCJjaGFubmVsIiwiY2hhbm5lbFByb3BOYW1lcyIsInByb3AiLCJzb21lIiwibGF5ZXJWaXN1YWxDaGFubmVsQ2hhbmdlVXBkYXRlciIsImxheWVyQ29uZmlnQ2hhbmdlVXBkYXRlciIsInByb3BzIiwibmV3Q29uZmlnIiwicmVzdENvbmZpZyIsInN0YXRlV2l0aERhdGFJZCIsImxheWVyRGF0YUlkQ2hhbmdlVXBkYXRlciIsIm5leHRMYXllciIsInVwZGF0ZUxheWVyQ29uZmlnIiwic2hvdWxkQ2FsY3VsYXRlTGF5ZXJEYXRhIiwib2xkTGF5ZXJEYXRhIiwidXBkYXRlTGF5ZXJEYXRhUmVzdWx0IiwibGF5ZXJTZXRJc1ZhbGlkVXBkYXRlciIsImlzVmFsaWQiLCJsYXllclRvVXBkYXRlIiwibmV3RGF0YSIsImFkZE9yUmVtb3ZlVGV4dExhYmVscyIsIm5ld0ZpZWxkcyIsInRleHRMYWJlbCIsImRlZmF1bHRUZXh0TGFiZWwiLCJERUZBVUxUX1RFWFRfTEFCRUwiLCJuZXdUZXh0TGFiZWwiLCJzbGljZSIsImN1cnJlbnRGaWVsZHMiLCJ0bCIsImZpZWxkIiwibmFtZSIsImZpbHRlciIsImFkZEZpZWxkcyIsImYiLCJpbmNsdWRlcyIsImRlbGV0ZUZpZWxkcyIsImZkIiwiYWYiLCJ1cGRhdGVUZXh0TGFiZWxQcm9wQW5kVmFsdWUiLCJ2YWx1ZSIsInNwbGljZSIsImxheWVyVGV4dExhYmVsQ2hhbmdlVXBkYXRlciIsImdldERlZmF1bHRMYXllckNvbmZpZyIsInZhbGlkYXRlRXhpc3RpbmdMYXllcldpdGhEYXRhIiwibG9hZGVkTGF5ZXIiLCJhbGxvd0VtcHR5Q29sdW1uIiwiaXNWYWxpZFRvU2F2ZSIsInZhbGlkYXRlZCIsImlzQ29uZmlnQWN0aXZlIiwidXBkYXRlTGF5ZXJEb21haW4iLCJzZXRJbml0aWFsTGF5ZXJDb25maWciLCJyZXN1bHQiLCJmaW5kRGVmYXVsdExheWVyUHJvcHMiLCJBcnJheSIsImlzQXJyYXkiLCJuZXdUeXBlIiwib2xkSWQiLCJDb25zb2xlIiwiZXJyb3IiLCJhc3NpZ25Db25maWdUb0xheWVyIiwidmlzQ29uZmlnU2V0dGluZ3MiLCJpc0xheWVySG92ZXJlZCIsInNldHRpbmdzIiwib2xkTGF5ZXJNYXAiLCJvdGhlckxheWVycyIsImxheWVySWQiLCJ1cGRhdGVMYXllclZpc3VhbENoYW5uZWwiLCJuZXdWaXNDb25maWciLCJzZXRGaWx0ZXJBbmltYXRpb25UaW1lVXBkYXRlciIsInNldEZpbHRlclVwZGF0ZXIiLCJzZXRGaWx0ZXJBbmltYXRpb25XaW5kb3dVcGRhdGVyIiwiYW5pbWF0aW9uV2luZG93IiwidmFsdWVJbmRleCIsIm9sZEZpbHRlciIsIm5ld0ZpbHRlciIsImRhdGFzZXRJZHMiLCJGSUxURVJfVVBEQVRFUl9QUk9QUyIsImRhdGFzZXRJZCIsIm1lcmdlRG9tYWluIiwidXBkYXRlZEZpbHRlciIsIm5ld0RhdGFzZXQiLCJncHUiLCJsYXllcklkRGlmZmVyZW5jZSIsImxheWVyRGF0YUlkcyIsImxpZCIsIm5ld0RhdGFJZHMiLCJlbmxhcmdlZEZpbHRlciIsInZpZXciLCJGSUxURVJfVklFV19UWVBFUyIsImVubGFyZ2VkIiwic2lkZSIsImRhdGFzZXRJZHNUb0ZpbHRlciIsIkxJTUlURURfRklMVEVSX0VGRkVDVF9QUk9QUyIsImZpbHRlcmVkRGF0YXNldHMiLCJ1cGRhdGVBbGxMYXllckRvbWFpbkRhdGEiLCJzZXRGaWx0ZXJQbG90VXBkYXRlciIsIm5ld1Byb3AiLCJwbG90VHlwZSIsImFkZEZpbHRlclVwZGF0ZXIiLCJsYXllckNvbG9yVUlDaGFuZ2VVcGRhdGVyIiwib2xkVml4Q29uZmlnIiwidXBkYXRlTGF5ZXJDb2xvclVJIiwidG9nZ2xlRmlsdGVyQW5pbWF0aW9uVXBkYXRlciIsInRvZ2dsZUxheWVyQW5pbWF0aW9uVXBkYXRlciIsInRvZ2dsZUxheWVyQW5pbWF0aW9uQ29udHJvbFVwZGF0ZXIiLCJ1cGRhdGVGaWx0ZXJBbmltYXRpb25TcGVlZFVwZGF0ZXIiLCJzZXRMYXllckFuaW1hdGlvblRpbWVVcGRhdGVyIiwidXBkYXRlTGF5ZXJBbmltYXRpb25TcGVlZFVwZGF0ZXIiLCJzZXRGaWx0ZXJWaWV3VXBkYXRlciIsInNob3VsZFJlc2V0T3RoZXJGaWx0ZXJzVmlldyIsInRvZ2dsZUZpbHRlckZlYXR1cmVVcGRhdGVyIiwicmVtb3ZlRmlsdGVyVXBkYXRlciIsIm5ld0ZpbHRlcnMiLCJuZXdFZGl0b3IiLCJhZGRMYXllclVwZGF0ZXIiLCJuZXdMYXllckRhdGEiLCJ3YXJuIiwiZGVmYXVsdERhdGFzZXQiLCJMYXllciIsInJlbW92ZUxheWVyVXBkYXRlciIsIk51bWJlciIsImlzRmluaXRlIiwibGF5ZXJUb1JlbW92ZSIsInJlb3JkZXJMYXllclVwZGF0ZXIiLCJvcmRlciIsImR1cGxpY2F0ZUxheWVyVXBkYXRlciIsIm9yaWdpbmFsIiwib3JpZ2luYWxMYXllck9yZGVySWR4IiwibmV3TGFiZWwiLCJwb3N0Zml4IiwiTEFZRVJfSURfTEVOR1RIIiwibmV3TGF5ZXJPcmRlciIsImFkZEVmZmVjdFVwZGF0ZXIiLCJuZXdFZmZlY3QiLCJlZmZlY3QiLCJzZXRQcm9wcyIsInJlbW92ZUVmZmVjdFVwZGF0ZXIiLCJlZmZlY3RUb1JlbW92ZSIsImVmZmVjdElkIiwicmVvcmRlckVmZmVjdFVwZGF0ZXIiLCJ1cGRhdGVFZmZlY3RVcGRhdGVyIiwiaWR4MiIsImVmZmVjdE9yZGVySWQiLCJuZXdFZmZlY3RzIiwicmVtb3ZlRGF0YXNldFVwZGF0ZXIiLCJkYXRhc2V0S2V5IiwibmV3RGF0YXNldHMiLCJsYXllcnNUb1JlbW92ZSIsInJlZHVjZSIsImFjY3UiLCJyZW1vdmVEYXRhc2V0RnJvbUludGVyYWN0aW9uQ29uZmlnIiwiZmllbGRzIiwidXBkYXRlTGF5ZXJCbGVuZGluZ1VwZGF0ZXIiLCJ1cGRhdGVPdmVybGF5QmxlbmRpbmdVcGRhdGVyIiwic2hvd0RhdGFzZXRUYWJsZVVwZGF0ZXIiLCJ1cGRhdGVUYWJsZUNvbG9yVXBkYXRlciIsInVwZGF0ZURhdGFzZXRQcm9wc1VwZGF0ZXIiLCJjb2xvciIsIm5ld0NvbG9yIiwicmVzZXRNYXBDb25maWdVcGRhdGVyIiwiaW5pdGlhbFN0YXRlIiwicmVjZWl2ZU1hcENvbmZpZ1VwZGF0ZXIiLCJwYXlsb2FkIiwib3B0aW9ucyIsInZpc1N0YXRlIiwia2VlcEV4aXN0aW5nQ29uZmlnIiwibWVyZ2VkU3RhdGUiLCJtZXJnZXIiLCJtZXJnZSIsInRvTWVyZ2VQcm9wIiwibGF5ZXJIb3ZlclVwZGF0ZXIiLCJpbmZvIiwiaW50ZXJhY3Rpb25Db25maWdDaGFuZ2VVcGRhdGVyIiwiY29udHJhZGljdCIsImsiLCJsYXllckNsaWNrVXBkYXRlciIsInBpbm5lZCIsInBpY2tlZCIsIm1hcENsaWNrVXBkYXRlciIsIm1vdXNlTW92ZVVwZGF0ZXIiLCJldnQiLCJ2YWx1ZXMiLCJwb2ludCIsIm1vdXNlUG9zaXRpb24iLCJsbmdMYXQiLCJ0b2dnbGVTcGxpdE1hcFVwZGF0ZXIiLCJkdXBsaWNhdGUiLCJjbG9zZVNwZWNpZmljTWFwQXRJbmRleCIsInRvZ2dsZUxheWVyRm9yTWFwVXBkYXRlciIsIm1hcEluZGV4Iiwic20iLCJ1cGRhdGVWaXNEYXRhVXBkYXRlciIsInByZXZpb3VzU3RhdGUiLCJuZXdEYXRhRW50cmllcyIsInJlc3QiLCJsYXllck1lcmdlcnMiLCJtIiwid2FpdEZvckxheWVyRGF0YSIsImRhdGFzZXRNZXJnZXJzIiwicG9zdE1lcmdlclBheWxvYWQiLCJhcHBseU1lcmdlcnNVcGRhdGVyIiwibWVyZ2VTdGF0ZVJlc3VsdCIsImFsbE1lcmdlZCIsInBvc3RNZXJnZVVwZGF0ZXIiLCJmRGF0YUlkIiwiZGF0YXNldEZpbHRlcmVkIiwiZGF0YUVtcHR5IiwibmV3TGF5ZXJzIiwiYXV0b0NyZWF0ZUxheWVycyIsImFkZERlZmF1bHRMYXllcnMiLCJ0b29sdGlwRmllbGRzIiwiYXV0b0NyZWF0ZVRvb2x0aXBzIiwiYWRkRGVmYXVsdFRvb2x0aXBzIiwidXBkYXRlZERhdGFzZXRzIiwiY29uY2F0IiwidXBkYXRlZFN0YXRlIiwicmVuYW1lRGF0YXNldFVwZGF0ZXIiLCJBTExPV0VEX1VQREFURV9EQVRBU0VUX1BST1BTIiwidmFsaWRhdGVEYXRhc2V0VXBkYXRlUHJvcHMiLCJ2YWxpZGF0ZWRQcm9wcyIsImVudHJpZXMiLCJhY2MiLCJlbnRyeSIsImV4aXN0aW5nIiwiaW5kZXhUb1JldHJpZXZlIiwibWFwTGF5ZXJzIiwibG9hZEZpbGVzVXBkYXRlciIsImZpbGVzIiwib25GaW5pc2giLCJsb2FkRmlsZXNTdWNjZXNzIiwiZnJvbSIsImluaXRpYWxGaWxlTG9hZGluZ1Byb2dyZXNzIiwiZmlsZUNhY2hlIiwiZmlsZXNUb0xvYWQiLCJsb2FkTmV4dEZpbGVVcGRhdGVyIiwibG9hZEZpbGVTdGVwU3VjY2Vzc1VwZGF0ZXIiLCJmaWxlTmFtZSIsInN0YXRlV2l0aFByb2dyZXNzIiwidXBkYXRlRmlsZUxvYWRpbmdQcm9ncmVzc1VwZGF0ZXIiLCJwcm9ncmVzcyIsInBlcmNlbnQiLCJtZXNzYWdlIiwic3RhdGVXaXRoQ2FjaGUiLCJsb2FkTmV4dEZpbGUiLCJmaWxlIiwicmVtYWluaW5nRmlsZXNUb0xvYWQiLCJtYWtlTG9hZEZpbGVUYXNrIiwiYmltYXAiLCJnZW4iLCJjb250ZW50IiwiZXJyIiwicHJvY2Vzc0ZpbGVDb250ZW50VXBkYXRlciIsInBhcnNlUHJvZ3Jlc3MiLCJwcmV2UHJvZ3Jlc3MiLCJuZXh0RmlsZUJhdGNoVXBkYXRlciIsImFjY3VtdWxhdGVkIiwiZW5kc1dpdGgiLCJkYXRhIiwiZG9uZSIsImxvYWRGaWxlc0VyclVwZGF0ZXIiLCJhcHBseUNQVUZpbHRlclVwZGF0ZXIiLCJkYXRhSWRzIiwic2V0TWFwSW5mb1VwZGF0ZXIiLCJlbXB0eSIsImRlZmF1bHRMYXllcnMiLCJmb3VuZExheWVycyIsIm1lcmdlZCIsImluZGV4IiwiZml4ZWREb21haW4iLCJwdXNoIiwiYW5pbWF0YWJsZUxheWVycyIsImFuaW1hdGlvbkRvbWFpbiIsIm1lcmdlZERvbWFpbiIsIk1hdGgiLCJtaW4iLCJtYXgiLCJJbmZpbml0eSIsInNldEVkaXRvck1vZGVVcGRhdGVyIiwic2V0RmVhdHVyZXNVcGRhdGVyIiwibGFzdEZlYXR1cmUiLCJwcm9wZXJ0aWVzIiwiaXNDbG9zZWQiLCJFRElUIiwiZmVhdHVyZSIsImZpbHRlcklkIiwiYmJveCIsImZlYXR1cmVWYWx1ZSIsImZpbHRlcklkeCIsImZpbCIsInNldFNlbGVjdGVkRmVhdHVyZVVwZGF0ZXIiLCJzZWxlY3Rpb25Db250ZXh0IiwiZGVsZXRlRmVhdHVyZVVwZGF0ZXIiLCJzZXRQb2x5Z29uRmlsdGVyTGF5ZXJVcGRhdGVyIiwibm9uZUZpbHRlckZlYXR1cmUiLCJpc0xheWVySW5jbHVkZWQiLCJzb3J0VGFibGVDb2x1bW5VcGRhdGVyIiwiY29sdW1uIiwic29ydE1vZGUiLCJjdXJyZW50TW9kZSIsIlNPUlRfT1JERVIiLCJBU0NFTkRJTkciLCJzb3J0ZWQiLCJwaW5UYWJsZUNvbHVtblVwZGF0ZXIiLCJjb3B5VGFibGVDb2x1bW5VcGRhdGVyIiwiZmllbGRJZHgiLCJ0ZXh0IiwiZGF0YUNvbnRhaW5lciIsInJvdyIsInZhbHVlQXQiLCJqb2luIiwic2V0Q29sdW1uRGlzcGxheUZvcm1hdFVwZGF0ZXIiLCJmb3JtYXRzIiwiZGlzcGxheUZvcm1hdCIsInRvZ2dsZUVkaXRvclZpc2liaWxpdHlVcGRhdGVyIiwic2V0RmlsdGVyQW5pbWF0aW9uVGltZUNvbmZpZ1VwZGF0ZXIiLCJGSUxURVJfVFlQRVMiLCJ0aW1lUmFuZ2UiLCJ1cGRhdGVzIiwiY2hlY2tUaW1lQ29uZmlnQXJncyIsImFsbG93ZWQiLCJzZXRMYXllckFuaW1hdGlvblRpbWVDb25maWdVcGRhdGVyIiwiZGVmYXVsdFJlcGxhY2VQYXJlbnREYXRhc2V0SWRzIiwiZGF0YUlkVG9SZXBsYWNlIiwicmVwbGFjZWQiLCJ2IiwiZmluZENoaWxkRGF0YXNldElkcyIsImNoaWxkRGF0YUlkcyIsIm1vdmVWYWx1ZVRvQmVNZXJnZWQiLCJwcm9wVmFsdWVzIiwic2F2ZVVubWVyZ2VkIiwic3RhdGVSZW1vdmVkIiwicHJvcFZhbHVlIiwicCIsInRvQmVNZXJnZWQiLCJyZXBsYWNlRGF0YXNldEFuZERlcHMiLCJkYXRhSWRUb1VzZSIsInJlcGxhY2VEYXRhc2V0RGVwc0luU3RhdGUiLCJwcmVwYXJlU3RhdGVGb3JEYXRhc2V0UmVwbGFjZSIsInNlcmlhbGl6ZWRTdGF0ZSIsInByZXNlcnZlTGF5ZXJPcmRlciIsInByZXNlcnZlRGF0YXNldE9yZGVyIiwiYWNjdVN0YXRlIiwicmVwbGFjZVBhcmVudERhdGFzZXRJZHMiLCJnZXRDaGlsZERhdGFzZXRJZHMiLCJwcmVzZXJ2ZU9yZGVyIiwidG9NZXJnZVByb3BzIiwic2F2ZWRQcm9wcyIsInJlcGxhY2VkU3RhdGUiLCJtZXJnZXJPcHRpb25zIiwicmVwbGFjZWRJdGVtIiwicmVwbGFjZVByb3BWYWx1ZUluU3RhdGUiLCJpdGVtIiwiY2hpbGREYXRhSWQiXSwibWFwcGluZ3MiOiI7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0FBR0E7O0FBQ0E7O0FBQ0E7O0FBQ0E7O0FBQ0E7O0FBQ0E7O0FBQ0E7O0FBQ0E7O0FBQ0E7O0FBQ0E7O0FBQ0E7O0FBRUE7O0FBRUE7O0FBbUJBOztBQTZCQTs7QUFRQTs7QUFDQTs7QUFDQTs7QUFTQTs7QUFVQTs7QUFLQTs7QUFDQTs7QUFTQTs7QUFJQTs7Ozs7Ozs7Ozs7Ozs7OztBQUVBO0FBQ0E7QUFDQTtBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFDQTtBQUNBOztBQUNBLElBQU1BLGdCQUFnQixHQUFHLElBQXpCO0FBQ0E7O0FBRU8sSUFBTUMsd0JBQTJDLEdBQUc7QUFDekRDLEVBQUFBLE9BQU8sRUFBRTtBQUNQQyxJQUFBQSxFQUFFLEVBQUUsU0FERztBQUVQQyxJQUFBQSxLQUFLLEVBQUUsc0JBRkE7QUFHUEMsSUFBQUEsT0FBTyxFQUFFLElBSEY7QUFJ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dEJEO0FBd0JBLFdBQU9vZCxhQUFQO0FBQ0QsR0FwQ2UsRUFxQ2hCN1ksS0FyQ2dCLENBQWxCO0FBd0NBLFNBQU9xQyxTQUFQO0FBQ0Q7O0FBRUQsU0FBUzJXLHVCQUFULENBQ0VoWixLQURGLEVBRUUrWSxZQUZGLFVBSUU7QUFBQSxNQURDM1YsSUFDRCxVQURDQSxJQUNEO0FBQUEsTUFET3VLLFdBQ1AsVUFET0EsV0FDUDtBQUFBLE1BRG9COEssa0JBQ3BCLFVBRG9CQSxrQkFDcEI7QUFBQSxNQUR3Q2QsWUFDeEMsVUFEd0NBLFlBQ3hDO0FBQ0E7QUFDQTtBQUNBLE1BQUl0VixTQUFTLEdBQUdvVixtQkFBbUIsQ0FBQ3pYLEtBQUQsRUFBUStZLFlBQVIsRUFBc0I7QUFBQzNWLElBQUFBLElBQUksRUFBSkEsSUFBRDtBQUFPdUssSUFBQUEsV0FBVyxFQUFYQSxXQUFQO0FBQW9CZ0ssSUFBQUEsWUFBWSxFQUFaQTtBQUFwQixHQUF0QixDQUFuQztBQUNBLE1BQU1ILFlBQVksR0FBRyxDQUFBaUIsa0JBQWtCLFNBQWxCLElBQUFBLGtCQUFrQixXQUFsQixZQUFBQSxrQkFBa0IsQ0FBR00sWUFBSCxDQUFsQixLQUFzQ3hCLG1CQUFtQixDQUFDd0IsWUFBRCxDQUE5RTs7QUFFQSxNQUFJdkIsWUFBSixFQUFrQjtBQUNoQm5WLElBQUFBLFNBQVMsR0FBRyxvQkFBUW1WLFlBQVIsRUFBc0JsTCxNQUF0QixDQUE2QixVQUFDQyxJQUFELEVBQU8yTSxXQUFQLEVBQXVCO0FBQzlEO0FBQ0E7QUFDQSxhQUFPbEIscUJBQXFCLENBQUN6TCxJQUFELEVBQU8yTSxXQUFQLEVBQW9CQSxXQUFwQixDQUE1QjtBQUNELEtBSlcsRUFJVDdXLFNBSlMsQ0FBWjtBQUtEOztBQUNELFNBQU9BLFNBQVA7QUFDRCIsInNvdXJjZXNDb250ZW50IjpbIi8vIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBNSVRcbi8vIENvcHlyaWdodCBjb250cmlidXRvcnMgdG8gdGhlIGtlcGxlci5nbCBwcm9qZWN0XG5cbmltcG9ydCBiYm94IGZyb20gJ0B0dXJmL2Jib3gnO1xuaW1wb3J0IHtjb25zb2xlIGFzIENvbnNvbGV9IGZyb20gJ2dsb2JhbC93aW5kb3cnO1xuaW1wb3J0IHtkaXNhYmxlU3RhY2tDYXB0dXJpbmcsIHdpdGhUYXNrfSBmcm9tICdyZWFjdC1wYWxtL3Rhc2tzJztcbmltcG9ydCBjbG9uZURlZXAgZnJvbSAnbG9kYXNoLmNsb25lZGVlcCc7XG5pbXBvcnQgdW5pcSBmcm9tICdsb2Rhc2gudW5pcSc7XG5pbXBvcnQgZ2V0IGZyb20gJ2xvZGFzaC5nZXQnO1xuaW1wb3J0IHhvciBmcm9tICdsb2Rhc2gueG9yJztcbmltcG9ydCBwaWNrIGZyb20gJ2xvZGFzaC5waWNrJztcbmltcG9ydCBpc0VxdWFsIGZyb20gJ2xvZGFzaC5pc2VxdWFsJztcbmltcG9ydCBjb3B5IGZyb20gJ2NvcHktdG8tY2xpcGJvYXJkJztcbmltcG9ydCBkZWVwbWVyZ2UgZnJvbSAnZGVlcG1lcmdlJztcbi8vIFRhc2tzXG5pbXBvcnQge0xPQURfRklMRV9UQVNLLCBVTldSQVBfVEFTSywgUFJPQ0VTU19GSUxFX0RBVEEsIERFTEFZX1RBU0t9IGZyb20gJ0BrZXBsZXIuZ2wvdGFza3MnO1xuLy8gQWN0aW9uc1xuaW1wb3J0IHtcbiAgYXBwbHlMYXllckNvbmZpZyxcbiAgbGF5ZXJDb25maWdDaGFuZ2UsXG4gIGxheWVyVHlwZUNoYW5nZSxcbiAgbGF5ZXJWaXNDb25maWdDaGFuZ2UsXG4gIGxheWVyVmlzdWFsQ2hhbm5lbENvbmZpZ0NoYW5nZSxcbiAgbG9hZEZpbGVzRXJyLFxuICBsb2FkRmlsZXNTdWNjZXNzLFxuICBsb2FkRmlsZVN0ZXBTdWNjZXNzLFxuICBsb2FkTmV4dEZpbGUsXG4gIG5leHRGaWxlQmF0Y2gsXG4gIFJlY2VpdmVNYXBDb25maWdQYXlsb2FkLFxuICBWaXNTdGF0ZUFjdGlvbnMsXG4gIE1hcFN0YXRlQWN0aW9ucyxcbiAgcHJvY2Vzc0ZpbGVDb250ZW50LFxuICBBY3Rpb25UeXBlc1xufSBmcm9tICdAa2VwbGVyLmdsL2FjdGlvbnMnO1xuXG4vLyBVdGlsc1xuaW1wb3J0IHtcbiAgc2V0LFxuICB0b0FycmF5LFxuICBhcnJheUluc2VydCxcbiAgZ2VuZXJhdGVIYXNoSWQsXG4gIGlzUGxhaW5PYmplY3QsXG4gIGlzT2JqZWN0LFxuICBhZGROZXdMYXllcnNUb1NwbGl0TWFwLFxuICBjb21wdXRlU3BsaXRNYXBMYXllcnMsXG4gIHJlbW92ZUxheWVyRnJvbVNwbGl0TWFwcyxcbiAgaXNSZ2JDb2xvcixcbiAgcGFyc2VGaWVsZFZhbHVlLFxuICBhcHBseUZpbHRlckZpZWxkTmFtZSxcbiAgYXBwbHlGaWx0ZXJzVG9EYXRhc2V0cyxcbiAgZmVhdHVyZVRvRmlsdGVyVmFsdWUsXG4gIGZpbHRlckRhdGFzZXRDUFUsXG4gIEZJTFRFUl9VUERBVEVSX1BST1BTLFxuICBnZW5lcmF0ZVBvbHlnb25GaWx0ZXIsXG4gIGdldERlZmF1bHRGaWx0ZXIsXG4gIGdldEZpbHRlcklkSW5GZWF0dXJlLFxuICBnZXRUaW1lV2lkZ2V0VGl0bGVGb3JtYXR0ZXIsXG4gIGlzSW5SYW5nZSxcbiAgTElNSVRFRF9GSUxURVJfRUZGRUNUX1BST1BTLFxuICB1cGRhdGVGaWx0ZXJEYXRhSWQsXG4gIGdldEZpbHRlclBsb3QsXG4gIGdldERlZmF1bHRGaWx0ZXJQbG90VHlwZVxufSBmcm9tICdAa2VwbGVyLmdsL3V0aWxzJztcblxuLy8gTWVyZ2Vyc1xuaW1wb3J0IHtcbiAgVklTX1NUQVRFX01FUkdFUlMsXG4gIHZhbGlkYXRlTGF5ZXJXaXRoRGF0YSxcbiAgY3JlYXRlTGF5ZXJGcm9tQ29uZmlnLFxuICBzZXJpYWxpemVMYXllcixcbiAgc2VyaWFsaXplVmlzU3RhdGUsXG4gIHBhcnNlTGF5ZXJDb25maWdcbn0gZnJvbSAnLi92aXMtc3RhdGUtbWVyZ2VyJztcbmltcG9ydCB7bWVyZ2VTdGF0ZUZyb21NZXJnZXJzLCBpc1ZhbGlkTWVyZ2VyfSBmcm9tICcuL21lcmdlci1oYW5kbGVyJztcbmltcG9ydCB7TGF5ZXIsIExheWVyQ2xhc3NlcywgTEFZRVJfSURfTEVOR1RIfSBmcm9tICdAa2VwbGVyLmdsL2xheWVycyc7XG5pbXBvcnQge1xuICBFRElUT1JfTU9ERVMsXG4gIFNPUlRfT1JERVIsXG4gIEZJTFRFUl9UWVBFUyxcbiAgRklMVEVSX1ZJRVdfVFlQRVMsXG4gIE1BWF9ERUZBVUxUX1RPT0xUSVBTLFxuICBERUZBVUxUX1RFWFRfTEFCRUwsXG4gIENPTVBBUkVfVFlQRVNcbn0gZnJvbSAnQGtlcGxlci5nbC9jb25zdGFudHMnO1xuaW1wb3J0IHtcbiAgcGlja18sXG4gIG1lcmdlXyxcbiAgc3dhcF8sXG4gIGFwcGx5XyxcbiAgY29tcG9zZV8sXG4gIHJlbW92ZUVsZW1lbnRBdEluZGV4LFxuICBmaWx0ZXJPdXRCeUlkXG59IGZyb20gJy4vY29tcG9zZXItaGVscGVycyc7XG5cbmltcG9ydCBLZXBsZXJHTFNjaGVtYSwge1Zpc1N0YXRlLCBNZXJnZXIsIFBvc3RNZXJnZXJQYXlsb2FkfSBmcm9tICdAa2VwbGVyLmdsL3NjaGVtYXMnO1xuXG5pbXBvcnQge0ZpbHRlciwgSW50ZXJhY3Rpb25Db25maWcsIEFuaW1hdGlvbkNvbmZpZywgRWRpdG9yLCBGaWVsZH0gZnJvbSAnQGtlcGxlci5nbC90eXBlcyc7XG5pbXBvcnQge0xvYWRlcn0gZnJvbSAnQGxvYWRlcnMuZ2wvbG9hZGVyLXV0aWxzJztcblxuaW1wb3J0IHtjYWxjdWxhdGVMYXllckRhdGEsIGZpbmREZWZhdWx0TGF5ZXIsIGdldExheWVyT3JkZXJGcm9tTGF5ZXJzfSBmcm9tICcuL2xheWVyLXV0aWxzJztcbmltcG9ydCB7XG4gIGNvcHlUYWJsZUFuZFVwZGF0ZSxcbiAgRGF0YXNldHMsXG4gIHBpblRhYmxlQ29sdW1ucyxcbiAgc29ydERhdGFzZXRCeUNvbHVtbixcbiAgYXNzaWduR3B1Q2hhbm5lbCxcbiAgc2V0RmlsdGVyR3B1TW9kZSxcbiAgY3JlYXRlTmV3RGF0YUVudHJ5XG59IGZyb20gJ0BrZXBsZXIuZ2wvdGFibGUnO1xuaW1wb3J0IHtmaW5kRmllbGRzVG9TaG93fSBmcm9tICcuL2ludGVyYWN0aW9uLXV0aWxzJztcbmltcG9ydCB7aGFzUHJvcHNUb01lcmdlLCBnZXRQcm9wVmFsdWVUb01lcmdlcn0gZnJvbSAnLi9tZXJnZXItaGFuZGxlcic7XG5pbXBvcnQge21lcmdlRGF0YXNldHNCeU9yZGVyfSBmcm9tICcuL3Zpcy1zdGF0ZS1tZXJnZXInO1xuaW1wb3J0IHtmaXhFZmZlY3RPcmRlcn0gZnJvbSAnQGtlcGxlci5nbC91dGlscyc7XG5pbXBvcnQge2NyZWF0ZUVmZmVjdH0gZnJvbSAnQGtlcGxlci5nbC9lZmZlY3RzJztcblxuLy8gcmVhY3QtcGFsbVxuLy8gZGlzYWJsZSBjYXB0dXJlIGV4Y2VwdGlvbiBmb3IgcmVhY3QtcGFsbSBjYWxsIHRvIHdpdGhUYXNrXG5kaXNhYmxlU3RhY2tDYXB0dXJpbmcoKTtcblxuLyoqXG4gKiBVcGRhdGVycyBmb3IgYHZpc1N0YXRlYCByZWR1Y2VyLiBDYW4gYmUgdXNlZCBpbiB5b3VyIHJvb3QgcmVkdWNlciB0byBkaXJlY3RseSBtb2RpZnkga2VwbGVyLmdsJ3Mgc3RhdGUuXG4gKiBSZWFkIG1vcmUgYWJvdXQgW1VzaW5nIHVwZGF0ZXJzXSguLi9hZHZhbmNlZC11c2FnZS91c2luZy11cGRhdGVycy5tZClcbiAqXG4gKiBAcHVibGljXG4gKiBAZXhhbXBsZVxuICpcbiAqIGltcG9ydCBrZXBsZXJHbFJlZHVjZXIsIHt2aXNTdGF0ZVVwZGF0ZXJzfSBmcm9tICdrZXBsZXIuZ2wvcmVkdWNlcnMnO1xuICogLy8gUm9vdCBSZWR1Y2VyXG4gKiBjb25zdCByZWR1Y2VycyA9IGNvbWJpbmVSZWR1Y2Vycyh7XG4gKiAga2VwbGVyR2w6IGtlcGxlckdsUmVkdWNlcixcbiAqICBhcHA6IGFwcFJlZHVjZXJcbiAqIH0pO1xuICpcbiAqIGNvbnN0IGNvbXBvc2VkUmVkdWNlciA9IChzdGF0ZSwgYWN0aW9uKSA9PiB7XG4gKiAgc3dpdGNoIChhY3Rpb24udHlwZSkge1xuICogICAgY2FzZSAnQ0xJQ0tfQlVUVE9OJzpcbiAqICAgICAgcmV0dXJuIHtcbiAqICAgICAgICAuLi5zdGF0ZSxcbiAqICAgICAgICBrZXBsZXJHbDoge1xuICogICAgICAgICAgLi4uc3RhdGUua2VwbGVyR2wsXG4gKiAgICAgICAgICBmb286IHtcbiAqICAgICAgICAgICAgIC4uLnN0YXRlLmtlcGxlckdsLmZvbyxcbiAqICAgICAgICAgICAgIHZpc1N0YXRlOiB2aXNTdGF0ZVVwZGF0ZXJzLmVubGFyZ2VGaWx0ZXJVcGRhdGVyKFxuICogICAgICAgICAgICAgICBzdGF0ZS5rZXBsZXJHbC5mb28udmlzU3RhdGUsXG4gKiAgICAgICAgICAgICAgIHtpZHg6IDB9XG4gKiAgICAgICAgICAgICApXG4gKiAgICAgICAgICB9XG4gKiAgICAgICAgfVxuICogICAgICB9O1xuICogIH1cbiAqICByZXR1cm4gcmVkdWNlcnMoc3RhdGUsIGFjdGlvbik7XG4gKiB9O1xuICpcbiAqIGV4cG9ydCBkZWZhdWx0IGNvbXBvc2VkUmVkdWNlcjtcbiAqL1xuLyogZXNsaW50LWRpc2FibGUgbm8tdW51c2VkLXZhcnMgKi9cbi8vIEB0cy1pZ25vcmVcbmNvbnN0IHZpc1N0YXRlVXBkYXRlcnMgPSBudWxsO1xuLyogZXNsaW50LWVuYWJsZSBuby11bnVzZWQtdmFycyAqL1xuXG5leHBvcnQgY29uc3QgZGVmYXVsdEludGVyYWN0aW9uQ29uZmlnOiBJbnRlcmFjdGlvbkNvbmZpZyA9IHtcbiAgdG9vbHRpcDoge1xuICAgIGlkOiAndG9vbHRpcCcsXG4gICAgbGFiZWw6ICdpbnRlcmFjdGlvbnMudG9vbHRpcCcsXG4gICAgZW5hYmxlZDogdHJ1ZSxcbiAgICBjb25maWc6IHtcbiAgICAgIGZpZWxkc1RvU2hvdzoge30sXG4gICAgICBjb21wYXJlTW9kZTogZmFsc2UsXG4gICAgICBjb21wYXJlVHlwZTogQ09NUEFSRV9UWVBFUy5BQlNPTFVURVxuICAgIH1cbiAgfSxcbiAgZ2VvY29kZXI6IHtcbiAgICBpZDogJ2dlb2NvZGVyJyxcbiAgICBsYWJlbDogJ2ludGVyYWN0aW9ucy5nZW9jb2RlcicsXG4gICAgZW5hYmxlZDogZmFsc2UsXG4gICAgcG9zaXRpb246IG51bGxcbiAgfSxcbiAgYnJ1c2g6IHtcbiAgICBpZDogJ2JydXNoJyxcbiAgICBsYWJlbDogJ2ludGVyYWN0aW9ucy5icnVzaCcsXG4gICAgZW5hYmxlZDogZmFsc2UsXG4gICAgY29uZmlnOiB7XG4gICAgICAvLyBzaXplIGlzIGluIGttXG4gICAgICBzaXplOiAwLjVcbiAgICB9XG4gIH0sXG4gIGNvb3JkaW5hdGU6IHtcbiAgICBpZDogJ2Nvb3JkaW5hdGUnLFxuICAgIGxhYmVsOiAnaW50ZXJhY3Rpb25zLmNvb3JkaW5hdGUnLFxuICAgIGVuYWJsZWQ6IGZhbHNlLFxuICAgIHBvc2l0aW9uOiBudWxsXG4gIH1cbn07XG5cbmV4cG9ydCBjb25zdCBERUZBVUxUX0FOSU1BVElPTl9DT05GSUc6IEFuaW1hdGlvbkNvbmZpZyA9IHtcbiAgZG9tYWluOiBudWxsLFxuICBjdXJyZW50VGltZTogbnVsbCxcbiAgc3BlZWQ6IDEsXG4gIGlzQW5pbWF0aW5nOiBmYWxzZSxcbiAgdGltZUZvcm1hdDogbnVsbCxcbiAgdGltZXpvbmU6IG51bGwsXG4gIGRlZmF1bHRUaW1lRm9ybWF0OiBudWxsLFxuICBoaWRlQ29udHJvbDogZmFsc2UsXG4gIGR1cmF0aW9uOiBudWxsXG59O1xuXG5leHBvcnQgY29uc3QgREVGQVVMVF9FRElUT1I6IEVkaXRvciA9IHtcbiAgbW9kZTogRURJVE9SX01PREVTLkRSQVdfUE9MWUdPTixcbiAgZmVhdHVyZXM6IFtdLFxuICBzZWxlY3RlZEZlYXR1cmU6IG51bGwsXG4gIHZpc2libGU6IHRydWVcbn07XG5cbi8qKlxuICogRGVmYXVsdCBpbml0aWFsIGB2aXNTdGF0ZWBcbiAqIEBtZW1iZXJvZiB2aXNTdGF0ZVVwZGF0ZXJzXG4gKiBAY29uc3RhbnRcbiAqIEBwdWJsaWNcbiAqL1xuZXhwb3J0IGNvbnN0IElOSVRJQUxfVklTX1NUQVRFOiBWaXNTdGF0ZSA9IHtcbiAgLy8gbWFwIGluZm9cbiAgbWFwSW5mbzoge1xuICAgIHRpdGxlOiAnJyxcbiAgICBkZXNjcmlwdGlvbjogJydcbiAgfSxcbiAgLy8gbGF5ZXJzXG4gIGxheWVyczogW10sXG4gIGxheWVyRGF0YTogW10sXG4gIGxheWVyVG9CZU1lcmdlZDogW10sXG4gIGxheWVyT3JkZXI6IFtdLFxuXG4gIC8vIGZpbHRlcnNcbiAgZmlsdGVyczogW10sXG4gIGZpbHRlclRvQmVNZXJnZWQ6IFtdLFxuXG4gIC8vIGEgY29sbGVjdGlvbiBvZiBtdWx0aXBsZSBkYXRhc2V0XG4gIGRhdGFzZXRzOiB7fSxcbiAgZWRpdGluZ0RhdGFzZXQ6IHVuZGVmaW5lZCxcblxuICAvLyBlZmZlY3RzXG4gIGVmZmVjdHM6IFtdLFxuICBlZmZlY3RPcmRlcjogW10sXG5cbiAgaW50ZXJhY3Rpb25Db25maWc6IGRlZmF1bHRJbnRlcmFjdGlvbkNvbmZpZyxcbiAgaW50ZXJhY3Rpb25Ub0JlTWVyZ2VkOiB7fSxcblxuICBsYXllckJsZW5kaW5nOiAnbm9ybWFsJyxcbiAgb3ZlcmxheUJsZW5kaW5nOiAnbm9ybWFsJyxcbiAgaG92ZXJJbmZvOiB1bmRlZmluZWQsXG4gIGNsaWNrZWQ6IHVuZGVmaW5lZCxcbiAgbW91c2VQb3M6IHt9LFxuICBtYXhEZWZhdWx0VG9vbHRpcHM6IE1BWF9ERUZBVUxUX1RPT0xUSVBTLFxuXG4gIC8vIHRoaXMgaXMgdXNlZCB3aGVuIHVzZXIgc3BsaXQgbWFwc1xuICBzcGxpdE1hcHM6IFtcbiAgICAvLyB0aGlzIHdpbGwgY29udGFpbiBhIGxpc3Qgb2Ygb2JqZWN0cyB0b1xuICAgIC8vIGRlc2NyaWJlIHRoZSBzdGF0ZSBvZiBsYXllciBhdmFpbGFiaWxpdHkgYW5kIHZpc2liaWxpdHkgZm9yIGVhY2ggbWFwXG4gICAgLy8gW1xuICAgIC8vICAge1xuICAgIC8vICAgICAgbGF5ZXJzOiB7bGF5ZXJfaWQ6IHRydWUgfCBmYWxzZX1cbiAgICAvLyAgIH1cbiAgICAvLyBdXG4gIF0sXG4gIHNwbGl0TWFwc1RvQmVNZXJnZWQ6IFtdLFxuICBpc01lcmdpbmdEYXRhc2V0czoge30sXG4gIC8vIGRlZmF1bHRzIGxheWVyIGNsYXNzZXNcbiAgbGF5ZXJDbGFzc2VzOiBMYXllckNsYXNzZXMsXG5cbiAgLy8gZGVmYXVsdCBhbmltYXRpb25cbiAgLy8gdGltZSBpbiB1bml4IHRpbWVzdGFtcCAobWlsbGlzZWNvbmRzKSAodGhlIG51bWJlciBvZiBzZWNvbmRzIHNpbmNlIHRoZSBVbml4IEVwb2NoKVxuICBhbmltYXRpb25Db25maWc6IERFRkFVTFRfQU5JTUFUSU9OX0NPTkZJRyxcblxuICBlZGl0b3I6IERFRkFVTFRfRURJVE9SLFxuXG4gIGZpbGVMb2FkaW5nOiBmYWxzZSxcbiAgZmlsZUxvYWRpbmdQcm9ncmVzczoge30sXG5cbiAgbG9hZGVyczogW10sXG4gIGxvYWRPcHRpb25zOiB7fSxcblxuICAvLyB2aXNTdGF0ZU1lcmdlcnNcbiAgbWVyZ2VyczogVklTX1NUQVRFX01FUkdFUlMsXG5cbiAgLy8ga2VwbGVyIHNjaGVtYXNcbiAgc2NoZW1hOiBLZXBsZXJHTFNjaGVtYVxufTtcblxudHlwZSBVcGRhdGVTdGF0ZVdpdGhMYXllckFuZERhdGFUeXBlID0ge1xuICBsYXllcnM6IExheWVyW107XG4gIGxheWVyRGF0YTogYW55W107XG59O1xuXG4vKipcbiAqIFVwZGF0ZSBzdGF0ZSB3aXRoIHVwZGF0ZWQgbGF5ZXIgYW5kIGxheWVyRGF0YVxuICpcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHVwZGF0ZVN0YXRlV2l0aExheWVyQW5kRGF0YTxTIGV4dGVuZHMgVXBkYXRlU3RhdGVXaXRoTGF5ZXJBbmREYXRhVHlwZT4oXG4gIHN0YXRlOiBTLFxuICB7bGF5ZXJEYXRhLCBsYXllciwgaWR4fToge2xheWVyRGF0YT86IGFueTsgbGF5ZXI6IExheWVyOyBpZHg6IG51bWJlcn1cbik6IFMge1xuICByZXR1cm4ge1xuICAgIC4uLnN0YXRlLFxuICAgIGxheWVyczogc3RhdGUubGF5ZXJzLm1hcCgobHlyLCBpKSA9PiAoaSA9PT0gaWR4ID8gbGF5ZXIgOiBseXIpKSxcbiAgICBsYXllckRhdGE6IGxheWVyRGF0YVxuICAgICAgPyBzdGF0ZS5sYXllckRhdGEubWFwKChkLCBpKSA9PiAoaSA9PT0gaWR4ID8gbGF5ZXJEYXRhIDogZCkpXG4gICAgICA6IHN0YXRlLmxheWVyRGF0YVxuICB9O1xufVxuXG5leHBvcnQgZnVuY3Rpb24gdXBkYXRlU3RhdGVPbkxheWVyVmlzaWJpbGl0eUNoYW5nZTxTIGV4dGVuZHMgVmlzU3RhdGU+KHN0YXRlOiBTLCBsYXllcjogTGF5ZXIpOiBTIHtcbiAgbGV0IG5ld1N0YXRlID0gc3RhdGU7XG4gIGlmIChzdGF0ZS5zcGxpdE1hcHMubGVuZ3RoKSB7XG4gICAgbmV3U3RhdGUgPSB7XG4gICAgICAuLi5zdGF0ZSxcbiAgICAgIHNwbGl0TWFwczogbGF5ZXIuY29uZmlnLmlzVmlzaWJsZVxuICAgICAgICA/IGFkZE5ld0xheWVyc1RvU3BsaXRNYXAoc3RhdGUuc3BsaXRNYXBzLCBsYXllcilcbiAgICAgICAgOiByZW1vdmVMYXllckZyb21TcGxpdE1hcHMoc3RhdGUuc3BsaXRNYXBzLCBsYXllcilcbiAgICB9O1xuICB9XG5cbiAgaWYgKGxheWVyLmNvbmZpZy5hbmltYXRpb24uZW5hYmxlZCkge1xuICAgIG5ld1N0YXRlID0gdXBkYXRlQW5pbWF0aW9uRG9tYWluKHN0YXRlKTtcbiAgfVxuXG4gIHJldHVybiBuZXdTdGF0ZTtcbn1cblxuLyoqXG4gKiBDb21wYXJlcyB0d28gb2JqZWN0cyAob3IgYXJyYXlzKSBhbmQgcmV0dXJucyBhIG5ldyBvYmplY3Qgd2l0aCBvbmx5IHRoZVxuICogcHJvcGVydGllcyB0aGF0IGhhdmUgY2hhbmdlZCBiZXR3ZWVuIHRoZSB0d28gb2JqZWN0cy5cbiAqL1xuZnVuY3Rpb24gcGlja0NoYW5nZWRQcm9wczxUPihwcmV2OiBULCBuZXh0OiBUKTogUGFydGlhbDxUPiB7XG4gIGNvbnN0IGNoYW5nZWRQcm9wczogUGFydGlhbDxUPiA9IHt9O1xuICBjb25zdCBwaWNrUHJvcHNPZiA9IG9iaiA9PiB7XG4gICAgT2JqZWN0LmtleXMob2JqKS5mb3JFYWNoKGtleSA9PiB7XG4gICAgICBpZiAoIWNoYW5nZWRQcm9wcy5oYXNPd25Qcm9wZXJ0eShrZXkpICYmICFpc0VxdWFsKHByZXZba2V5XSwgbmV4dFtrZXldKSkge1xuICAgICAgICBjaGFuZ2VkUHJvcHNba2V5XSA9IG5leHRba2V5XTtcbiAgICAgIH1cbiAgICB9KTtcbiAgfTtcbiAgcGlja1Byb3BzT2YocHJldik7XG4gIHBpY2tQcm9wc09mKG5leHQpO1xuICByZXR1cm4gY2hhbmdlZFByb3BzO1xufVxuXG5jb25zdCBWSVNVQUxfQ0hBTk5FTF9QUk9QX1RZUEVTID0gWydmaWVsZCcsICdzY2FsZScsICdkb21haW4nLCAnYWdncmVnYXRpb24nXTtcblxuLyoqXG4gKiBBcHBseSBsYXllciBjb25maWdcbiAqIEBtZW1iZXJvZiB2aXNTdGF0ZVVwZGF0ZXJzXG4gKiBAcmV0dXJucyBuZXh0U3RhdGVcbiAqL1xuLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIGNvbXBsZXhpdHksIG1heC1zdGF0ZW1lbnRzXG5leHBvcnQgZnVuY3Rpb24gYXBwbHlMYXllckNvbmZpZ1VwZGF0ZXIoXG4gIHN0YXRlOiBWaXNTdGF0ZSxcbiAgYWN0aW9uOiBWaXNTdGF0ZUFjdGlvbnMuQXBwbHlMYXllckNvbmZpZ1VwZGF0ZXJBY3Rpb25cbik6IFZpc1N0YXRlIHtcbiAgY29uc3Qge29sZExheWVySWQsIG5ld0xheWVyQ29uZmlnLCBsYXllckluZGV4fSA9IGFjdGlvbjtcbiAgY29uc3QgbmV3UGFyc2VkTGF5ZXIgPVxuICAgIC8vIHdpbGwgbW92ZSB2aXN1YWxDaGFubmVscyB0byB0aGUgY29uZmlnIHByb3BcbiAgICBwYXJzZUxheWVyQ29uZmlnKHN0YXRlLnNjaGVtYSwgbmV3TGF5ZXJDb25maWcpO1xuICBjb25zdCBvbGRMYXllciA9IHN0YXRlLmxheWVycy5maW5kKGwgPT4gbC5pZCA9PT0gb2xkTGF5ZXJJZCk7XG4gIGlmICghb2xkTGF5ZXIgfHwgIW5ld1BhcnNlZExheWVyKSB7XG4gICAgcmV0dXJuIHN0YXRlO1xuICB9XG4gIGlmIChsYXllckluZGV4ICE9PSBudWxsICYmIGxheWVySW5kZXggIT09IHVuZGVmaW5lZCAmJiBzdGF0ZS5sYXllcnNbbGF5ZXJJbmRleF0gIT09IG9sZExheWVyKSB7XG4gICAgLy8gbGF5ZXJJbmRleCBpcyBwcm92aWRlZCwgYnV0IGl0IGRvZXNuJ3QgbWF0Y2ggdGhlIG9sZExheWVyXG4gICAgcmV0dXJuIHN0YXRlO1xuICB9XG4gIGNvbnN0IGRhdGFzZXQgPSBzdGF0ZS5kYXRhc2V0c1tuZXdQYXJzZWRMYXllci5jb25maWcuZGF0YUlkXTtcbiAgaWYgKCFkYXRhc2V0KSB7XG4gICAgcmV0dXJuIHN0YXRlO1xuICB9XG4gIC8vIE1ha2Ugc3VyZSB0aGUgbGF5ZXIgaXMgdmFsaWQgYW5kIGNvbnZlcnQgaXQgdG8gTGF5ZXJcbiAgY29uc3QgbmV3TGF5ZXIgPSB2YWxpZGF0ZUxheWVyV2l0aERhdGEoZGF0YXNldCwgbmV3UGFyc2VkTGF5ZXIsIHN0YXRlLmxheWVyQ2xhc3Nlcyk7XG4gIGlmICghbmV3TGF5ZXIpIHtcbiAgICByZXR1cm4gc3RhdGU7XG4gIH1cblxuICBsZXQgbmV4dFN0YXRlID0gc3RhdGU7XG5cbiAgaWYgKG5ld0xheWVyLnR5cGUgJiYgbmV3TGF5ZXIudHlwZSAhPT0gb2xkTGF5ZXIudHlwZSkge1xuICAgIGNvbnN0IG9sZExheWVySW5kZXggPSBzdGF0ZS5sYXllcnMuZmluZEluZGV4KGwgPT4gbC5pZCA9PT0gb2xkTGF5ZXJJZCk7XG4gICAgaWYgKG9sZExheWVySW5kZXggPj0gMCkge1xuICAgICAgbmV4dFN0YXRlID0gbGF5ZXJUeXBlQ2hhbmdlVXBkYXRlcihuZXh0U3RhdGUsIGxheWVyVHlwZUNoYW5nZShvbGRMYXllciwgbmV3TGF5ZXIudHlwZSkpO1xuICAgICAgLy8gbGF5ZXJUeXBlQ2hhbmdlVXBkYXRlciBjaGFuZ2VzIHRoZSBpZCBvZiB0aGUgbGF5ZXIsIHNvIHdlIG5lZWQgdG8gb2J0YWluIHRoZSBuZXcgaWRcbiAgICAgIC8vIGJ1dCBmaXJzdCBtYWtlIHN1cmUgdGhhdCB0aGUgbGF5ZXIgd2FzIG5vdCByZW1vdmVkXG4gICAgICBpZiAobmV4dFN0YXRlLmxheWVycy5sZW5ndGggPT09IHN0YXRlLmxheWVycy5sZW5ndGgpIHtcbiAgICAgICAgY29uc3QgbmV3TGF5ZXJJZCA9IG5leHRTdGF0ZS5sYXllcnNbb2xkTGF5ZXJJbmRleF0uaWQ7XG4gICAgICAgIG5leHRTdGF0ZSA9IGFwcGx5TGF5ZXJDb25maWdVcGRhdGVyKFxuICAgICAgICAgIG5leHRTdGF0ZSxcbiAgICAgICAgICBhcHBseUxheWVyQ29uZmlnKG5ld0xheWVySWQsIHsuLi5uZXdMYXllckNvbmZpZywgaWQ6IG5ld0xheWVySWR9KVxuICAgICAgICApO1xuICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4gbmV4dFN0YXRlO1xuICB9XG5cbiAgLy8gc2VyaWFsaXplTGF5ZXIoKSBtaWdodCByZXR1cm4gbnVsbCBpZiB0aGUgb2xkIGxheWVyIGlzIG5vdCB2YWxpZCxcbiAgLy8gd2Ugc2hvdWxkIHN0aWxsIGFwcGx5IHRoZSBjaGFuZ2VzIGluIHRoYXQgY2FzZVxuICBjb25zdCBzZXJpYWxpemVkT2xkTGF5ZXIgPSBzZXJpYWxpemVMYXllcihvbGRMYXllciwgc3RhdGUuc2NoZW1hKSA/PyB7Y29uZmlnOiB7fX07XG4gIGNvbnN0IHNlcmlhbGl6ZWROZXdMYXllciA9IHNlcmlhbGl6ZUxheWVyKG5ld0xheWVyLCBzdGF0ZS5zY2hlbWEpO1xuICBpZiAoIXNlcmlhbGl6ZWROZXdMYXllcikge1xuICAgIHJldHVybiBzdGF0ZTtcbiAgfVxuICBpZiAoIWlzRXF1YWwoc2VyaWFsaXplZE9sZExheWVyLCBzZXJpYWxpemVkTmV3TGF5ZXIpKSB7XG4gICAgY29uc3QgY2hhbmdlZCA9IHBpY2tDaGFuZ2VkUHJvcHMoc2VyaWFsaXplZE9sZExheWVyLmNvbmZpZywgc2VyaWFsaXplZE5ld0xheWVyLmNvbmZpZyk7XG5cbiAgICBpZiAoJ3Zpc0NvbmZpZycgaW4gY2hhbmdlZCkge1xuICAgICAgaWYgKGNoYW5nZWQudmlzQ29uZmlnKSB7XG4gICAgICAgIG5leHRTdGF0ZSA9IGxheWVyVmlzQ29uZmlnQ2hhbmdlVXBkYXRlcihcbiAgICAgICAgICBuZXh0U3RhdGUsXG4gICAgICAgICAgbGF5ZXJWaXNDb25maWdDaGFuZ2Uob2xkTGF5ZXIsIGNoYW5nZWQudmlzQ29uZmlnKVxuICAgICAgICApO1xuICAgICAgfVxuICAgICAgZGVsZXRlIGNoYW5nZWQudmlzQ29uZmlnO1xuICAgIH1cblxuICAgIE9iamVjdC5rZXlzKG9sZExheWVyLnZpc3VhbENoYW5uZWxzKS5mb3JFYWNoKGNoYW5uZWxOYW1lID0+IHtcbiAgICAgIGNvbnN0IGNoYW5uZWwgPSBvbGRMYXllci52aXN1YWxDaGFubmVsc1tjaGFubmVsTmFtZV07XG4gICAgICBjb25zdCBjaGFubmVsUHJvcE5hbWVzID0gVklTVUFMX0NIQU5ORUxfUFJPUF9UWVBFUy5tYXAocHJvcCA9PiBjaGFubmVsW3Byb3BdKTtcbiAgICAgIGlmIChjaGFubmVsUHJvcE5hbWVzLnNvbWUocHJvcCA9PiBwcm9wIGluIGNoYW5nZWQpKSB7XG4gICAgICAgIG5leHRTdGF0ZSA9IGxheWVyVmlzdWFsQ2hhbm5lbENoYW5nZVVwZGF0ZXIoXG4gICAgICAgICAgbmV4dFN0YXRlLFxuICAgICAgICAgIGxheWVyVmlzdWFsQ2hhbm5lbENvbmZpZ0NoYW5nZShcbiAgICAgICAgICAgIG9sZExheWVyLFxuICAgICAgICAgICAgcGljayhuZXdMYXllci5jb25maWcsIGNoYW5uZWxQcm9wTmFtZXMpLFxuICAgICAgICAgICAgY2hhbm5lbE5hbWVcbiAgICAgICAgICApXG4gICAgICAgICk7XG4gICAgICAgIGZvciAoY29uc3QgcHJvcCBvZiBjaGFubmVsUHJvcE5hbWVzKSB7XG4gICAgICAgICAgZGVsZXRlIGNoYW5nZWRbcHJvcF07XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9KTtcblxuICAgIGlmIChPYmplY3Qua2V5cyhjaGFuZ2VkKS5sZW5ndGggPiAwKSB7XG4gICAgICBuZXh0U3RhdGUgPSBsYXllckNvbmZpZ0NoYW5nZVVwZGF0ZXIoXG4gICAgICAgIG5leHRTdGF0ZSxcbiAgICAgICAgbGF5ZXJDb25maWdDaGFuZ2Uob2xkTGF5ZXIsIHBpY2sobmV3TGF5ZXIuY29uZmlnLCBPYmplY3Qua2V5cyhjaGFuZ2VkKSkpXG4gICAgICApO1xuICAgIH1cbiAgfVxuXG4gIHJldHVybiBuZXh0U3RhdGU7XG59XG5cbi8qKlxuICogVXBkYXRlIGxheWVyIGJhc2UgY29uZmlnOiBkYXRhSWQsIGxhYmVsLCBjb2x1bW4sIGlzVmlzaWJsZVxuICogQG1lbWJlcm9mIHZpc1N0YXRlVXBkYXRlcnNcbiAqIEByZXR1cm5zIG5leHRTdGF0ZVxuICovXG4vLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgY29tcGxleGl0eVxuZXhwb3J0IGZ1bmN0aW9uIGxheWVyQ29uZmlnQ2hhbmdlVXBkYXRlcihcbiAgc3RhdGU6IFZpc1N0YXRlLFxuICBhY3Rpb246IFZpc1N0YXRlQWN0aW9ucy5MYXllckNvbmZpZ0NoYW5nZVVwZGF0ZXJBY3Rpb25cbik6IFZpc1N0YXRlIHtcbiAgY29uc3Qge29sZExheWVyfSA9IGFjdGlvbjtcbiAgY29uc3QgaWR4ID0gc3RhdGUubGF5ZXJzLmZpbmRJbmRleChsID0+IGwuaWQgPT09IG9sZExheWVyLmlkKTtcbiAgY29uc3QgcHJvcHMgPSBPYmplY3Qua2V5cyhhY3Rpb24ubmV3Q29uZmlnKTtcbiAgaWYgKFxuICAgIHR5cGVvZiBhY3Rpb24ubmV3Q29uZmlnLmRhdGFJZCA9PT0gJ3N0cmluZycgJiZcbiAgICBhY3Rpb24ubmV3Q29uZmlnLmRhdGFJZCAhPT0gb2xkTGF5ZXIuY29uZmlnLmRhdGFJZFxuICApIHtcbiAgICBjb25zdCB7ZGF0YUlkLCAuLi5yZXN0Q29uZmlnfSA9IGFjdGlvbi5uZXdDb25maWc7XG4gICAgY29uc3Qgc3RhdGVXaXRoRGF0YUlkID0gbGF5ZXJEYXRhSWRDaGFuZ2VVcGRhdGVyKHN0YXRlLCB7XG4gICAgICBvbGRMYXllcixcbiAgICAgIG5ld0NvbmZpZzoge2RhdGFJZH1cbiAgICB9KTtcbiAgICBjb25zdCBuZXh0TGF5ZXIgPSBzdGF0ZVdpdGhEYXRhSWQubGF5ZXJzLmZpbmQobCA9PiBsLmlkID09PSBvbGRMYXllci5pZCk7XG4gICAgcmV0dXJuIG5leHRMYXllciAmJiBPYmplY3Qua2V5cyhyZXN0Q29uZmlnKS5sZW5ndGhcbiAgICAgID8gbGF5ZXJDb25maWdDaGFuZ2VVcGRhdGVyKHN0YXRlV2l0aERhdGFJZCwge29sZExheWVyOiBuZXh0TGF5ZXIsIG5ld0NvbmZpZzogcmVzdENvbmZpZ30pXG4gICAgICA6IHN0YXRlV2l0aERhdGFJZDtcbiAgfVxuXG4gIGxldCBuZXdMYXllciA9IG9sZExheWVyLnVwZGF0ZUxheWVyQ29uZmlnKGFjdGlvbi5uZXdDb25maWcpO1xuXG4gIGxldCBsYXllckRhdGE7XG5cbiAgaWYgKG5ld0xheWVyLnNob3VsZENhbGN1bGF0ZUxheWVyRGF0YShwcm9wcykpIHtcbiAgICBjb25zdCBvbGRMYXllckRhdGEgPSBzdGF0ZS5sYXllckRhdGFbaWR4XTtcblxuICAgIGNvbnN0IHVwZGF0ZUxheWVyRGF0YVJlc3VsdCA9IGNhbGN1bGF0ZUxheWVyRGF0YShuZXdMYXllciwgc3RhdGUsIG9sZExheWVyRGF0YSk7XG4gICAgbmV3TGF5ZXIgPSB1cGRhdGVMYXllckRhdGFSZXN1bHQubGF5ZXI7XG4gICAgbGF5ZXJEYXRhID0gdXBkYXRlTGF5ZXJEYXRhUmVzdWx0LmxheWVyRGF0YTtcbiAgfVxuXG4gIGxldCBuZXdTdGF0ZSA9IHN0YXRlO1xuICBpZiAoJ2lzVmlzaWJsZScgaW4gYWN0aW9uLm5ld0NvbmZpZykge1xuICAgIG5ld1N0YXRlID0gdXBkYXRlU3RhdGVPbkxheWVyVmlzaWJpbGl0eUNoYW5nZShzdGF0ZSwgbmV3TGF5ZXIpO1xuICB9XG5cbiAgcmV0dXJuIHVwZGF0ZVN0YXRlV2l0aExheWVyQW5kRGF0YShuZXdTdGF0ZSwge1xuICAgIGxheWVyOiBuZXdMYXllcixcbiAgICBsYXllckRhdGEsXG4gICAgaWR4XG4gIH0pO1xufVxuXG4vKipcbiAqIFVwZGF0ZXMgaXNWYWxpZCBmbGFnIG9mIGEgbGF5ZXIuXG4gKiBVcGRhdGVzIGlzVmlzaWJsZSBiYXNlZCBvbiB0aGUgdmFsdWUgb2YgaXNWYWxpZC5cbiAqIFRyaWdnZXJzIHVwZGF0ZSBvZiBkYXRhIGZvciB0aGUgbGF5ZXIgaW4gb3JkZXIgdG8gZ2V0IGVycm9ycyBhZ2FpbiBkdXJpbmcgbmV4dCB1cGRhdGUgaXRlcmF0aW9uLlxuICogQG1lbWJlcm9mIHZpc1N0YXRlVXBkYXRlcnNcbiAqIEByZXR1cm5zIG5leHRTdGF0ZVxuICovXG5leHBvcnQgZnVuY3Rpb24gbGF5ZXJTZXRJc1ZhbGlkVXBkYXRlcihcbiAgc3RhdGU6IFZpc1N0YXRlLFxuICBhY3Rpb246IFZpc1N0YXRlQWN0aW9ucy5MYXllclNldElzVmFsaWRVcGRhdGVyQWN0aW9uXG4pOiBWaXNTdGF0ZSB7XG4gIGNvbnN0IHtvbGRMYXllciwgaXNWYWxpZH0gPSBhY3Rpb247XG5cbiAgY29uc3QgaWR4ID0gc3RhdGUubGF5ZXJzLmZpbmRJbmRleChsID0+IGwuaWQgPT09IG9sZExheWVyLmlkKTtcbiAgY29uc3QgbGF5ZXJUb1VwZGF0ZSA9IHN0YXRlLmxheWVyc1tpZHhdO1xuICBpZiAobGF5ZXJUb1VwZGF0ZSkge1xuICAgIGxldCBuZXdMYXllcjtcbiAgICBsZXQgbmV3RGF0YSA9IG51bGw7XG5cbiAgICBpZiAoaXNWYWxpZCkge1xuICAgICAgLy8gVHJpZ2dlciBkYXRhIHVwZGF0ZSBpbiBvcmRlciB0byBzaG93IGVycm9ycyBhZ2FpbiBpZiBwcmVzZW50LlxuICAgICAgY29uc3Qge2xheWVyLCBsYXllckRhdGF9ID0gY2FsY3VsYXRlTGF5ZXJEYXRhKGxheWVyVG9VcGRhdGUsIHN0YXRlLCB1bmRlZmluZWQpO1xuICAgICAgbmV3TGF5ZXIgPSBsYXllcjtcbiAgICAgIG5ld0RhdGEgPSBsYXllckRhdGE7XG4gICAgfSBlbHNlIHtcbiAgICAgIG5ld0xheWVyID0gbGF5ZXJUb1VwZGF0ZS51cGRhdGVMYXllckNvbmZpZyh7XG4gICAgICAgIGlzVmlzaWJsZTogZmFsc2VcbiAgICAgIH0pO1xuICAgICAgbmV3TGF5ZXIuaXNWYWxpZCA9IGZhbHNlO1xuICAgIH1cblxuICAgIHJldHVybiB1cGRhdGVTdGF0ZVdpdGhMYXllckFuZERhdGEoc3RhdGUsIHtpZHgsIGxheWVyOiBuZXdMYXllciwgbGF5ZXJEYXRhOiBuZXdEYXRhfSk7XG4gIH1cblxuICByZXR1cm4gc3RhdGU7XG59XG5cbmZ1bmN0aW9uIGFkZE9yUmVtb3ZlVGV4dExhYmVscyhuZXdGaWVsZHMsIHRleHRMYWJlbCwgZGVmYXVsdFRleHRMYWJlbCA9IERFRkFVTFRfVEVYVF9MQUJFTCkge1xuICBsZXQgbmV3VGV4dExhYmVsID0gdGV4dExhYmVsLnNsaWNlKCk7XG5cbiAgY29uc3QgY3VycmVudEZpZWxkcyA9IHRleHRMYWJlbC5tYXAodGwgPT4gdGwuZmllbGQgJiYgdGwuZmllbGQubmFtZSkuZmlsdGVyKGQgPT4gZCk7XG5cbiAgY29uc3QgYWRkRmllbGRzID0gbmV3RmllbGRzLmZpbHRlcihmID0+ICFjdXJyZW50RmllbGRzLmluY2x1ZGVzKGYubmFtZSkpO1xuICBjb25zdCBkZWxldGVGaWVsZHMgPSBjdXJyZW50RmllbGRzLmZpbHRlcihmID0+ICFuZXdGaWVsZHMuZmluZChmZCA9PiBmZC5uYW1lID09PSBmKSk7XG5cbiAgLy8gZGVsZXRlXG4gIG5ld1RleHRMYWJlbCA9IG5ld1RleHRMYWJlbC5maWx0ZXIodGwgPT4gdGwuZmllbGQgJiYgIWRlbGV0ZUZpZWxkcy5pbmNsdWRlcyh0bC5maWVsZC5uYW1lKSk7XG4gIG5ld1RleHRMYWJlbCA9ICFuZXdUZXh0TGFiZWwubGVuZ3RoID8gW2RlZmF1bHRUZXh0TGFiZWxdIDogbmV3VGV4dExhYmVsO1xuXG4gIC8vIGFkZFxuICBuZXdUZXh0TGFiZWwgPSBbXG4gICAgLi4ubmV3VGV4dExhYmVsLmZpbHRlcih0bCA9PiB0bC5maWVsZCksXG4gICAgLi4uYWRkRmllbGRzLm1hcChhZiA9PiAoe1xuICAgICAgLi4uZGVmYXVsdFRleHRMYWJlbCxcbiAgICAgIGZpZWxkOiBhZlxuICAgIH0pKVxuICBdO1xuXG4gIHJldHVybiBuZXdUZXh0TGFiZWw7XG59XG5cbmZ1bmN0aW9uIHVwZGF0ZVRleHRMYWJlbFByb3BBbmRWYWx1ZShpZHgsIHByb3AsIHZhbHVlLCB0ZXh0TGFiZWwpIHtcbiAgaWYgKCF0ZXh0TGFiZWxbaWR4XS5oYXNPd25Qcm9wZXJ0eShwcm9wKSkge1xuICAgIHJldHVybiB0ZXh0TGFiZWw7XG4gIH1cblxuICBsZXQgbmV3VGV4dExhYmVsID0gdGV4dExhYmVsLnNsaWNlKCk7XG5cbiAgaWYgKHByb3AgPT09ICdmaWVsZCcgJiYgdmFsdWUgPT09IG51bGwgJiYgdGV4dExhYmVsLmxlbmd0aCA+IDEpIHtcbiAgICAvLyByZW1vdmUgbGFiZWwgd2hlbiBmaWVsZCB2YWx1ZSBpcyBzZXQgdG8gbnVsbFxuICAgIG5ld1RleHRMYWJlbC5zcGxpY2UoaWR4LCAxKTtcbiAgfSBlbHNlIGlmIChwcm9wKSB7XG4gICAgbmV3VGV4dExhYmVsID0gdGV4dExhYmVsLm1hcCgodGwsIGkpID0+IChpID09PSBpZHggPyB7Li4udGwsIFtwcm9wXTogdmFsdWV9IDogdGwpKTtcbiAgfVxuXG4gIHJldHVybiBuZXdUZXh0TGFiZWw7XG59XG5cbi8qKlxuICogVXBkYXRlIGxheWVyIGJhc2UgY29uZmlnOiBkYXRhSWQsIGxhYmVsLCBjb2x1bW4sIGlzVmlzaWJsZVxuICogQG1lbWJlcm9mIHZpc1N0YXRlVXBkYXRlcnNcbiAqIEByZXR1cm5zIG5leHRTdGF0ZVxuICovXG5leHBvcnQgZnVuY3Rpb24gbGF5ZXJUZXh0TGFiZWxDaGFuZ2VVcGRhdGVyKFxuICBzdGF0ZTogVmlzU3RhdGUsXG4gIGFjdGlvbjogVmlzU3RhdGVBY3Rpb25zLkxheWVyVGV4dExhYmVsQ2hhbmdlVXBkYXRlckFjdGlvblxuKTogVmlzU3RhdGUge1xuICBjb25zdCB7b2xkTGF5ZXIsIGlkeCwgcHJvcCwgdmFsdWV9ID0gYWN0aW9uO1xuICBjb25zdCB7dGV4dExhYmVsfSA9IG9sZExheWVyLmNvbmZpZztcblxuICAvLyB3aGVuIGFkZGluZyBhIG5ldyBlbXB0eSB0ZXh0IGxhYmVsLFxuICAvLyByZWx5IG9uIHRoZSBsYXllcidzIGRlZmF1bHQgY29uZmlnLCBvciB1c2UgdGhlIGNvbnN0YW50IERFRkFVTFRfVEVYVF9MQUJFTFxuICBjb25zdCBkZWZhdWx0VGV4dExhYmVsID1cbiAgICBvbGRMYXllci5nZXREZWZhdWx0TGF5ZXJDb25maWcoe2RhdGFJZDogJyd9KT8udGV4dExhYmVsPy5bMF0gPz8gREVGQVVMVF9URVhUX0xBQkVMO1xuXG4gIGxldCBuZXdUZXh0TGFiZWwgPSB0ZXh0TGFiZWwuc2xpY2UoKTtcbiAgaWYgKCF0ZXh0TGFiZWxbaWR4XSAmJiBpZHggPT09IHRleHRMYWJlbC5sZW5ndGgpIHtcbiAgICAvLyBpZiBpZHggaXMgc2V0IHRvIGxlbmd0aCwgYWRkIGVtcHR5IHRleHQgbGFiZWxcbiAgICBuZXdUZXh0TGFiZWwgPSBbLi4udGV4dExhYmVsLCBkZWZhdWx0VGV4dExhYmVsXTtcbiAgfVxuXG4gIGlmIChpZHggPT09ICdhbGwnICYmIHByb3AgPT09ICdmaWVsZHMnKSB7XG4gICAgbmV3VGV4dExhYmVsID0gYWRkT3JSZW1vdmVUZXh0TGFiZWxzKHZhbHVlLCB0ZXh0TGFiZWwsIGRlZmF1bHRUZXh0TGFiZWwpO1xuICB9IGVsc2Uge1xuICAgIG5ld1RleHRMYWJlbCA9IHVwZGF0ZVRleHRMYWJlbFByb3BBbmRWYWx1ZShpZHgsIHByb3AsIHZhbHVlLCBuZXdUZXh0TGFiZWwpO1xuICB9XG4gIC8vIHVwZGF0ZSB0ZXh0IGxhYmVsIHByb3AgYW5kIHZhbHVlXG4gIHJldHVybiBsYXllckNvbmZpZ0NoYW5nZVVwZGF0ZXIoc3RhdGUsIHtcbiAgICBvbGRMYXllcixcbiAgICBuZXdDb25maWc6IHt0ZXh0TGFiZWw6IG5ld1RleHRMYWJlbH1cbiAgfSk7XG59XG5cbmZ1bmN0aW9uIHZhbGlkYXRlRXhpc3RpbmdMYXllcldpdGhEYXRhKGRhdGFzZXQsIGxheWVyQ2xhc3NlcywgbGF5ZXIsIHNjaGVtYSkge1xuICBjb25zdCBsb2FkZWRMYXllciA9IHNlcmlhbGl6ZUxheWVyKGxheWVyLCBzY2hlbWEpO1xuICByZXR1cm4gbG9hZGVkTGF5ZXJcbiAgICA/IHZhbGlkYXRlTGF5ZXJXaXRoRGF0YShkYXRhc2V0LCBsb2FkZWRMYXllciwgbGF5ZXJDbGFzc2VzLCB7XG4gICAgICAgIGFsbG93RW1wdHlDb2x1bW46IHRydWVcbiAgICAgIH0pXG4gICAgOiBudWxsO1xufVxuXG4vKipcbiAqIFVwZGF0ZSBsYXllciBjb25maWcgZGF0YUlkXG4gKiBAbWVtYmVyb2YgdmlzU3RhdGVVcGRhdGVyc1xuICogQHJldHVybnMgbmV4dFN0YXRlXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBsYXllckRhdGFJZENoYW5nZVVwZGF0ZXIoXG4gIHN0YXRlOiBWaXNTdGF0ZSxcbiAgYWN0aW9uOiB7XG4gICAgb2xkTGF5ZXI6IExheWVyO1xuICAgIG5ld0NvbmZpZzoge1xuICAgICAgZGF0YUlkOiBzdHJpbmc7XG4gICAgfTtcbiAgfVxuKTogVmlzU3RhdGUge1xuICBjb25zdCB7b2xkTGF5ZXIsIG5ld0NvbmZpZ30gPSBhY3Rpb247XG4gIGNvbnN0IHtkYXRhSWR9ID0gbmV3Q29uZmlnO1xuXG4gIGlmICghb2xkTGF5ZXIgfHwgIXN0YXRlLmRhdGFzZXRzW2RhdGFJZF0pIHtcbiAgICByZXR1cm4gc3RhdGU7XG4gIH1cbiAgY29uc3QgaWR4ID0gc3RhdGUubGF5ZXJzLmZpbmRJbmRleChsID0+IGwuaWQgPT09IG9sZExheWVyLmlkKTtcblxuICBsZXQgbmV3TGF5ZXIgPSBvbGRMYXllci51cGRhdGVMYXllckNvbmZpZyh7ZGF0YUlkfSk7XG4gIC8vIHRoaXMgbWF5IGhhcHBlbiB3aGVuIGEgbGF5ZXIgaXMgbmV3ICh0eXBlOiBudWxsIGFuZCBubyBjb2x1bW5zKSBidXQgaXQncyBub3QgcmVhZHkgdG8gYmUgc2F2ZWRcbiAgaWYgKG5ld0xheWVyLmlzVmFsaWRUb1NhdmUoKSkge1xuICAgIGNvbnN0IHZhbGlkYXRlZCA9IHZhbGlkYXRlRXhpc3RpbmdMYXllcldpdGhEYXRhKFxuICAgICAgc3RhdGUuZGF0YXNldHNbZGF0YUlkXSxcbiAgICAgIHN0YXRlLmxheWVyQ2xhc3NlcyxcbiAgICAgIG5ld0xheWVyLFxuICAgICAgc3RhdGUuc2NoZW1hXG4gICAgKTtcbiAgICAvLyBpZiBjYW50IHZhbGlkYXRlIGl0IHdpdGggZGF0YSBjcmVhdGUgYSBuZXcgb25lXG4gICAgaWYgKCF2YWxpZGF0ZWQpIHtcbiAgICAgIC8vIEB0cy1leHBlY3QtZXJyb3IgVE9ETzogY2hlY2tpbmcgb2xkTGF5ZXIudHlwZSAhPT0gbnVsbFxuICAgICAgbmV3TGF5ZXIgPSBuZXcgc3RhdGUubGF5ZXJDbGFzc2VzW29sZExheWVyLnR5cGVdKHtkYXRhSWQsIGlkOiBvbGRMYXllci5pZH0pO1xuICAgIH0gZWxzZSB7XG4gICAgICBuZXdMYXllciA9IHZhbGlkYXRlZDtcbiAgICB9XG4gIH1cblxuICBuZXdMYXllciA9IG5ld0xheWVyLnVwZGF0ZUxheWVyQ29uZmlnKHtcbiAgICBpc1Zpc2libGU6IG9sZExheWVyLmNvbmZpZy5pc1Zpc2libGUsXG4gICAgaXNDb25maWdBY3RpdmU6IHRydWVcbiAgfSk7XG5cbiAgbmV3TGF5ZXIudXBkYXRlTGF5ZXJEb21haW4oc3RhdGUuZGF0YXNldHMpO1xuICBjb25zdCB7bGF5ZXJEYXRhLCBsYXllcn0gPSBjYWxjdWxhdGVMYXllckRhdGEobmV3TGF5ZXIsIHN0YXRlLCB1bmRlZmluZWQpO1xuXG4gIHJldHVybiB1cGRhdGVTdGF0ZVdpdGhMYXllckFuZERhdGEoc3RhdGUsIHtsYXllckRhdGEsIGxheWVyLCBpZHh9KTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHNldEluaXRpYWxMYXllckNvbmZpZyhsYXllciwgZGF0YXNldHMsIGxheWVyQ2xhc3Nlcyk6IExheWVyIHtcbiAgbGV0IG5ld0xheWVyID0gbGF5ZXI7XG4gIGlmICghT2JqZWN0LmtleXMoZGF0YXNldHMpLmxlbmd0aCkge1xuICAgIC8vIG5vIGRhdGEgaXMgbG9hZGVkXG4gICAgcmV0dXJuIGxheWVyO1xuICB9XG4gIGlmICghbGF5ZXIuY29uZmlnLmRhdGFJZCkge1xuICAgIC8vIHNldCBsYXllciBkYXRhSWRcbiAgICBuZXdMYXllciA9IGxheWVyLnVwZGF0ZUxheWVyQ29uZmlnKHtkYXRhSWQ6IE9iamVjdC5rZXlzKGRhdGFzZXRzKVswXX0pO1xuICB9XG4gIGNvbnN0IGRhdGFzZXQgPSBkYXRhc2V0c1tuZXdMYXllci5jb25maWcuZGF0YUlkXTtcbiAgaWYgKCFkYXRhc2V0KSB7XG4gICAgcmV0dXJuIGxheWVyO1xuICB9XG5cbiAgLy8gZmluZCBkZWZhdXQgbGF5ZXIgcHJvcHNcbiAgY29uc3QgcmVzdWx0ID1cbiAgICB0eXBlb2YgbGF5ZXJDbGFzc2VzW25ld0xheWVyLnR5cGVdLmZpbmREZWZhdWx0TGF5ZXJQcm9wcyA9PT0gJ2Z1bmN0aW9uJ1xuICAgICAgPyBsYXllckNsYXNzZXNbbmV3TGF5ZXIudHlwZV0uZmluZERlZmF1bHRMYXllclByb3BzKGRhdGFzZXQsIFtdKVxuICAgICAgOiB7cHJvcHM6IFtdfTtcblxuICAvLyBhbiBhcnJheSBvZiBwb3NzaWJsZSBwcm9wcywgdXNlIDFzdCBvbmVcbiAgY29uc3QgcHJvcHMgPSBBcnJheS5pc0FycmF5KHJlc3VsdCkgPyByZXN1bHQgOiByZXN1bHQucHJvcHMgfHwgW107XG5cbiAgaWYgKHByb3BzLmxlbmd0aCkge1xuICAgIG5ld0xheWVyID0gbmV3IGxheWVyQ2xhc3Nlc1tsYXllci50eXBlXSh7XG4gICAgICAuLi5wcm9wc1swXSxcbiAgICAgIGxhYmVsOiBuZXdMYXllci5jb25maWcubGFiZWwsXG4gICAgICBkYXRhSWQ6IG5ld0xheWVyLmNvbmZpZy5kYXRhSWQsXG4gICAgICBpc1Zpc2libGU6IHRydWUsXG4gICAgICBpc0NvbmZpZ0FjdGl2ZTogbmV3TGF5ZXIuY29uZmlnLmlzQ29uZmlnQWN0aXZlXG4gICAgfSk7XG5cbiAgICByZXR1cm4gdHlwZW9mIG5ld0xheWVyLnNldEluaXRpYWxMYXllckNvbmZpZyA9PT0gJ2Z1bmN0aW9uJ1xuICAgICAgPyBuZXdMYXllci5zZXRJbml0aWFsTGF5ZXJDb25maWcoZGF0YXNldClcbiAgICAgIDogbmV3TGF5ZXI7XG4gIH1cblxuICByZXR1cm4gbmV3TGF5ZXI7XG59XG4vKipcbiAqIFVwZGF0ZSBsYXllciB0eXBlLiBQcmV2aWV3cyBsYXllciBjb25maWcgd2lsbCBiZSBjb3BpZWQgaWYgYXBwbGljYWJsZS5cbiAqIEBtZW1iZXJvZiB2aXNTdGF0ZVVwZGF0ZXJzXG4gKiBAcHVibGljXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBsYXllclR5cGVDaGFuZ2VVcGRhdGVyKFxuICBzdGF0ZTogVmlzU3RhdGUsXG4gIGFjdGlvbjogVmlzU3RhdGVBY3Rpb25zLkxheWVyVHlwZUNoYW5nZVVwZGF0ZXJBY3Rpb25cbik6IFZpc1N0YXRlIHtcbiAgY29uc3Qge29sZExheWVyLCBuZXdUeXBlfSA9IGFjdGlvbjtcbiAgaWYgKCFvbGRMYXllcikge1xuICAgIHJldHVybiBzdGF0ZTtcbiAgfVxuICBjb25zdCBvbGRJZCA9IG9sZExheWVyLmlkO1xuICBjb25zdCBpZHggPSBzdGF0ZS5sYXllcnMuZmluZEluZGV4KGwgPT4gbC5pZCA9PT0gb2xkSWQpO1xuXG4gIGlmICghc3RhdGUubGF5ZXJDbGFzc2VzW25ld1R5cGVdKSB7XG4gICAgQ29uc29sZS5lcnJvcihgJHtuZXdUeXBlfSBpcyBub3QgYSB2YWxpZCBsYXllciB0eXBlYCk7XG4gICAgcmV0dXJuIHN0YXRlO1xuICB9XG4gIGxldCBuZXdMYXllciA9IG5ldyBzdGF0ZS5sYXllckNsYXNzZXNbbmV3VHlwZV0oe1xuICAgIC8vIGtlZXAgb2xkIGxheWVyIGxhYmxlIGFuZCBpc0NvbmZpZ0FjdGl2ZVxuICAgIGxhYmVsOiBvbGRMYXllci5jb25maWcubGFiZWwsXG4gICAgaXNDb25maWdBY3RpdmU6IG9sZExheWVyLmNvbmZpZy5pc0NvbmZpZ0FjdGl2ZSxcbiAgICBkYXRhSWQ6IG9sZExheWVyLmNvbmZpZy5kYXRhSWRcbiAgfSk7XG5cbiAgaWYgKCFvbGRMYXllci50eXBlKSB7XG4gICAgLy8gaWYgc2V0dGluZyBsYXllciB0eXBlIG9uIGFuIGVtcHR5IGxheWVyXG4gICAgbmV3TGF5ZXIgPSBzZXRJbml0aWFsTGF5ZXJDb25maWcobmV3TGF5ZXIsIHN0YXRlLmRhdGFzZXRzLCBzdGF0ZS5sYXllckNsYXNzZXMpO1xuICB9IGVsc2Uge1xuICAgIC8vIGdldCBhIG1pbnQgbGF5ZXIsIHdpdGggbmV3IGlkIGFuZCB0eXBlXG4gICAgLy8gYmVjYXVzZSBkZWNrLmdsIHVzZXMgaWQgdG8gbWF0Y2ggYmV0d2VlbiBuZXcgYW5kIG9sZCBsYXllci5cbiAgICAvLyBJZiB0eXBlIGhhcyBjaGFuZ2VkIGJ1dCBpZCBpcyB0aGUgc2FtZSwgaXQgd2lsbCBicmVha1xuICAgIG5ld0xheWVyLmFzc2lnbkNvbmZpZ1RvTGF5ZXIob2xkTGF5ZXIuY29uZmlnLCBvbGRMYXllci52aXNDb25maWdTZXR0aW5ncyk7XG4gICAgbmV3TGF5ZXIudXBkYXRlTGF5ZXJEb21haW4oc3RhdGUuZGF0YXNldHMpO1xuICB9XG5cbiAgY29uc3Qge2NsaWNrZWQsIGhvdmVySW5mb30gPSBzdGF0ZTtcblxuICBsZXQgbmV3U3RhdGUgPSB7XG4gICAgLi4uc3RhdGUsXG4gICAgY2xpY2tlZDogb2xkTGF5ZXIuaXNMYXllckhvdmVyZWQoY2xpY2tlZCkgPyB1bmRlZmluZWQgOiBjbGlja2VkLFxuICAgIGhvdmVySW5mbzogb2xkTGF5ZXIuaXNMYXllckhvdmVyZWQoaG92ZXJJbmZvKSA/IHVuZGVmaW5lZCA6IGhvdmVySW5mb1xuICB9O1xuXG4gIGNvbnN0IHtsYXllckRhdGEsIGxheWVyfSA9IGNhbGN1bGF0ZUxheWVyRGF0YShuZXdMYXllciwgbmV3U3RhdGUpO1xuICBuZXdTdGF0ZSA9IHVwZGF0ZVN0YXRlV2l0aExheWVyQW5kRGF0YShuZXdTdGF0ZSwge2xheWVyRGF0YSwgbGF5ZXIsIGlkeH0pO1xuXG4gIGlmIChsYXllci5jb25maWcuYW5pbWF0aW9uLmVuYWJsZWQgfHwgb2xkTGF5ZXIuY29uZmlnLmFuaW1hdGlvbi5lbmFibGVkKSB7XG4gICAgbmV3U3RhdGUgPSB1cGRhdGVBbmltYXRpb25Eb21haW4obmV3U3RhdGUpO1xuICB9XG5cbiAgLy8gdXBkYXRlIHNwbGl0TWFwIGxheWVyIGlkXG4gIGlmIChzdGF0ZS5zcGxpdE1hcHMubGVuZ3RoKSB7XG4gICAgbmV3U3RhdGUgPSB7XG4gICAgICAuLi5uZXdTdGF0ZSxcbiAgICAgIHNwbGl0TWFwczogbmV3U3RhdGUuc3BsaXRNYXBzLm1hcChzZXR0aW5ncyA9PiB7XG4gICAgICAgIGNvbnN0IHtbb2xkSWRdOiBvbGRMYXllck1hcCwgLi4ub3RoZXJMYXllcnN9ID0gc2V0dGluZ3MubGF5ZXJzO1xuICAgICAgICByZXR1cm4gb2xkSWQgaW4gc2V0dGluZ3MubGF5ZXJzXG4gICAgICAgICAgPyB7XG4gICAgICAgICAgICAgIC4uLnNldHRpbmdzLFxuICAgICAgICAgICAgICBsYXllcnM6IHtcbiAgICAgICAgICAgICAgICAuLi5vdGhlckxheWVycyxcbiAgICAgICAgICAgICAgICBbbGF5ZXIuaWRdOiBvbGRMYXllck1hcFxuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgICAgOiBzZXR0aW5ncztcbiAgICAgIH0pXG4gICAgfTtcbiAgfVxuXG4gIC8vIHVwZGF0ZSBsYXllck9yZGVyIHdpdGggbmV3IGlkXG4gIG5ld1N0YXRlID0ge1xuICAgIC4uLm5ld1N0YXRlLFxuICAgIGxheWVyT3JkZXI6IG5ld1N0YXRlLmxheWVyT3JkZXIubWFwKGxheWVySWQgPT5cbiAgICAgIGxheWVySWQgPT09IG9sZExheWVyLmlkID8gbmV3TGF5ZXIuaWQgOiBsYXllcklkXG4gICAgKVxuICB9O1xuXG4gIHJldHVybiBuZXdTdGF0ZTtcbn1cblxuLyoqXG4gKiBVcGRhdGUgbGF5ZXIgdmlzdWFsIGNoYW5uZWxcbiAqIEBtZW1iZXJvZiB2aXNTdGF0ZVVwZGF0ZXJzXG4gKiBAcmV0dXJucyB7T2JqZWN0fSBuZXh0U3RhdGVcbiAqIEBwdWJsaWNcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGxheWVyVmlzdWFsQ2hhbm5lbENoYW5nZVVwZGF0ZXIoXG4gIHN0YXRlOiBWaXNTdGF0ZSxcbiAgYWN0aW9uOiBWaXNTdGF0ZUFjdGlvbnMuTGF5ZXJWaXN1YWxDaGFubmVsQ29uZmlnQ2hhbmdlVXBkYXRlckFjdGlvblxuKTogVmlzU3RhdGUge1xuICBjb25zdCB7b2xkTGF5ZXIsIG5ld0NvbmZpZywgY2hhbm5lbH0gPSBhY3Rpb247XG4gIGlmICghb2xkTGF5ZXIuY29uZmlnLmRhdGFJZCkge1xuICAgIHJldHVybiBzdGF0ZTtcbiAgfVxuICBjb25zdCBkYXRhc2V0ID0gc3RhdGUuZGF0YXNldHNbb2xkTGF5ZXIuY29uZmlnLmRhdGFJZF07XG5cbiAgY29uc3QgaWR4ID0gc3RhdGUubGF5ZXJzLmZpbmRJbmRleChsID0+IGwuaWQgPT09IG9sZExheWVyLmlkKTtcbiAgY29uc3QgbmV3TGF5ZXIgPSBvbGRMYXllci51cGRhdGVMYXllckNvbmZpZyhuZXdDb25maWcpO1xuXG4gIG5ld0xheWVyLnVwZGF0ZUxheWVyVmlzdWFsQ2hhbm5lbChkYXRhc2V0LCBjaGFubmVsKTtcblxuICBjb25zdCBvbGRMYXllckRhdGEgPSBzdGF0ZS5sYXllckRhdGFbaWR4XTtcbiAgY29uc3Qge2xheWVyRGF0YSwgbGF5ZXJ9ID0gY2FsY3VsYXRlTGF5ZXJEYXRhKG5ld0xheWVyLCBzdGF0ZSwgb2xkTGF5ZXJEYXRhKTtcblxuICByZXR1cm4gdXBkYXRlU3RhdGVXaXRoTGF5ZXJBbmREYXRhKHN0YXRlLCB7bGF5ZXJEYXRhLCBsYXllciwgaWR4fSk7XG59XG5cbi8qKlxuICogVXBkYXRlIGxheWVyIGB2aXNDb25maWdgXG4gKiBAbWVtYmVyb2YgdmlzU3RhdGVVcGRhdGVyc1xuICogQHB1YmxpY1xuICovXG5leHBvcnQgZnVuY3Rpb24gbGF5ZXJWaXNDb25maWdDaGFuZ2VVcGRhdGVyKFxuICBzdGF0ZTogVmlzU3RhdGUsXG4gIGFjdGlvbjogVmlzU3RhdGVBY3Rpb25zLkxheWVyVmlzQ29uZmlnQ2hhbmdlVXBkYXRlckFjdGlvblxuKTogVmlzU3RhdGUge1xuICBjb25zdCB7b2xkTGF5ZXJ9ID0gYWN0aW9uO1xuICBjb25zdCBpZHggPSBzdGF0ZS5sYXllcnMuZmluZEluZGV4KGwgPT4gbC5pZCA9PT0gb2xkTGF5ZXIuaWQpO1xuICBjb25zdCBwcm9wcyA9IE9iamVjdC5rZXlzKGFjdGlvbi5uZXdWaXNDb25maWcpO1xuICBjb25zdCBuZXdWaXNDb25maWcgPSB7XG4gICAgLi4ub2xkTGF5ZXIuY29uZmlnLnZpc0NvbmZpZyxcbiAgICAuLi5hY3Rpb24ubmV3VmlzQ29uZmlnXG4gIH07XG5cbiAgY29uc3QgbmV3TGF5ZXIgPSBvbGRMYXllci51cGRhdGVMYXllckNvbmZpZyh7dmlzQ29uZmlnOiBuZXdWaXNDb25maWd9KTtcblxuICBpZiAobmV3TGF5ZXIuc2hvdWxkQ2FsY3VsYXRlTGF5ZXJEYXRhKHByb3BzKSkge1xuICAgIGNvbnN0IG9sZExheWVyRGF0YSA9IHN0YXRlLmxheWVyRGF0YVtpZHhdO1xuICAgIGNvbnN0IHtsYXllckRhdGEsIGxheWVyfSA9IGNhbGN1bGF0ZUxheWVyRGF0YShuZXdMYXllciwgc3RhdGUsIG9sZExheWVyRGF0YSk7XG4gICAgcmV0dXJuIHVwZGF0ZVN0YXRlV2l0aExheWVyQW5kRGF0YShzdGF0ZSwge2xheWVyRGF0YSwgbGF5ZXIsIGlkeH0pO1xuICB9XG5cbiAgcmV0dXJuIHVwZGF0ZVN0YXRlV2l0aExheWVyQW5kRGF0YShzdGF0ZSwge2xheWVyOiBuZXdMYXllciwgaWR4fSk7XG59XG5cbi8qKlxuICogVXBkYXRlIGZpbHRlciBwcm9wZXJ0eVxuICogQG1lbWJlcm9mIHZpc1N0YXRlVXBkYXRlcnNcbiAqIEBwdWJsaWNcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHNldEZpbHRlckFuaW1hdGlvblRpbWVVcGRhdGVyKFxuICBzdGF0ZTogVmlzU3RhdGUsXG4gIGFjdGlvbjogVmlzU3RhdGVBY3Rpb25zLlNldEZpbHRlckFuaW1hdGlvblRpbWVVcGRhdGVyQWN0aW9uXG4pOiBWaXNTdGF0ZSB7XG4gIHJldHVybiBzZXRGaWx0ZXJVcGRhdGVyKHN0YXRlLCBhY3Rpb24pO1xufVxuXG4vKipcbiAqIFVwZGF0ZSBmaWx0ZXIgYW5pbWF0aW9uIHdpbmRvd1xuICogQG1lbWJlcm9mIHZpc1N0YXRlVXBkYXRlcnNcbiAqIEBwdWJsaWNcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHNldEZpbHRlckFuaW1hdGlvbldpbmRvd1VwZGF0ZXIoXG4gIHN0YXRlOiBWaXNTdGF0ZSxcbiAge2lkLCBhbmltYXRpb25XaW5kb3d9OiBWaXNTdGF0ZUFjdGlvbnMuU2V0RmlsdGVyQW5pbWF0aW9uV2luZG93VXBkYXRlckFjdGlvblxuKTogVmlzU3RhdGUge1xuICByZXR1cm4ge1xuICAgIC4uLnN0YXRlLFxuICAgIGZpbHRlcnM6IHN0YXRlLmZpbHRlcnMubWFwKGYgPT5cbiAgICAgIGYuaWQgPT09IGlkXG4gICAgICAgID8ge1xuICAgICAgICAgICAgLi4uZixcbiAgICAgICAgICAgIGFuaW1hdGlvbldpbmRvd1xuICAgICAgICAgIH1cbiAgICAgICAgOiBmXG4gICAgKVxuICB9O1xufVxuLyoqXG4gKiBVcGRhdGUgZmlsdGVyIHByb3BlcnR5XG4gKiBAbWVtYmVyb2YgdmlzU3RhdGVVcGRhdGVyc1xuICogQHB1YmxpY1xuICovXG5leHBvcnQgZnVuY3Rpb24gc2V0RmlsdGVyVXBkYXRlcihcbiAgc3RhdGU6IFZpc1N0YXRlLFxuICBhY3Rpb246IFZpc1N0YXRlQWN0aW9ucy5TZXRGaWx0ZXJVcGRhdGVyQWN0aW9uXG4pOiBWaXNTdGF0ZSB7XG4gIGNvbnN0IHtpZHgsIHByb3AsIHZhbHVlLCB2YWx1ZUluZGV4ID0gMH0gPSBhY3Rpb247XG4gIGNvbnN0IG9sZEZpbHRlciA9IHN0YXRlLmZpbHRlcnNbaWR4XTtcblxuICBpZiAoIW9sZEZpbHRlcikge1xuICAgIENvbnNvbGUuZXJyb3IoYGZpbHRlcnMuJHtpZHh9IGlzIHVuZGVmaW5lZGApO1xuICAgIHJldHVybiBzdGF0ZTtcbiAgfVxuICBsZXQgbmV3RmlsdGVyID0gc2V0KFtwcm9wXSwgdmFsdWUsIG9sZEZpbHRlcik7XG4gIGxldCBuZXdTdGF0ZSA9IHN0YXRlO1xuXG4gIGNvbnN0IHtkYXRhSWR9ID0gbmV3RmlsdGVyO1xuXG4gIC8vIEVuc3VyaW5nIGJhY2t3YXJkIGNvbXBhdGliaWxpdHlcbiAgbGV0IGRhdGFzZXRJZHMgPSB0b0FycmF5KGRhdGFJZCk7XG5cbiAgc3dpdGNoIChwcm9wKSB7XG4gICAgLy8gVE9ETzogTmV4dCBQUiBmb3IgVUkgaWYgd2UgdXBkYXRlIGRhdGFJZCwgd2UgbmVlZCB0byBjb25zaWRlciB0d28gY2FzZXM6XG4gICAgLy8gMS4gZGF0YUlkIGlzIGVtcHR5OiBjcmVhdGUgYSBkZWZhdWx0IGZpbHRlclxuICAgIC8vIDIuIEFkZCBhIG5ldyBkYXRhc2V0IGlkXG4gICAgY2FzZSBGSUxURVJfVVBEQVRFUl9QUk9QUy5kYXRhSWQ6XG4gICAgICAvLyBpZiB0cnlpbmcgdG8gdXBkYXRlIGZpbHRlciBkYXRhSWQuIGNyZWF0ZSBhbiBlbXB0eSBuZXcgZmlsdGVyXG4gICAgICBuZXdGaWx0ZXIgPSB1cGRhdGVGaWx0ZXJEYXRhSWQoZGF0YUlkKTtcbiAgICAgIGJyZWFrO1xuXG4gICAgY2FzZSBGSUxURVJfVVBEQVRFUl9QUk9QUy5uYW1lOlxuICAgICAgLy8gd2UgYXJlIHN1cHBvcnRpbmcgdGhlIGN1cnJlbnQgZnVuY3Rpb25hbGl0eVxuICAgICAgLy8gVE9ETzogTmV4dCBQUiBmb3IgVUkgZmlsdGVyIG5hbWUgd2lsbCBvbmx5IHVwZGF0ZSBmaWx0ZXIgbmFtZSBidXQgaXQgd29uJ3QgaGF2ZSBzaWRlIGVmZmVjdHNcbiAgICAgIC8vIHdlIGFyZSBnb25uYSB1c2UgcGFpciBvZiBkYXRhc2V0cyBhbmQgZmllbGRJZHggdG8gdXBkYXRlIHRoZSBmaWx0ZXJcbiAgICAgIGNvbnN0IGRhdGFzZXRJZCA9IG5ld0ZpbHRlci5kYXRhSWRbdmFsdWVJbmRleF07XG4gICAgICBjb25zdCB7ZmlsdGVyOiB1cGRhdGVkRmlsdGVyLCBkYXRhc2V0OiBuZXdEYXRhc2V0fSA9IGFwcGx5RmlsdGVyRmllbGROYW1lKFxuICAgICAgICBuZXdGaWx0ZXIsXG4gICAgICAgIHN0YXRlLmRhdGFzZXRzW2RhdGFzZXRJZF0sXG4gICAgICAgIHZhbHVlLFxuICAgICAgICB2YWx1ZUluZGV4LFxuICAgICAgICB7bWVyZ2VEb21haW46IGZhbHNlfVxuICAgICAgKTtcbiAgICAgIGlmICghdXBkYXRlZEZpbHRlcikge1xuICAgICAgICByZXR1cm4gc3RhdGU7XG4gICAgICB9XG5cbiAgICAgIG5ld0ZpbHRlciA9IHVwZGF0ZWRGaWx0ZXI7XG5cbiAgICAgIGlmIChuZXdGaWx0ZXIuZ3B1KSB7XG4gICAgICAgIG5ld0ZpbHRlciA9IHNldEZpbHRlckdwdU1vZGUobmV3RmlsdGVyLCBzdGF0ZS5maWx0ZXJzKTtcbiAgICAgICAgbmV3RmlsdGVyID0gYXNzaWduR3B1Q2hhbm5lbChuZXdGaWx0ZXIsIHN0YXRlLmZpbHRlcnMpO1xuICAgICAgfVxuXG4gICAgICBuZXdTdGF0ZSA9IHNldChbJ2RhdGFzZXRzJywgZGF0YXNldElkXSwgbmV3RGF0YXNldCwgc3RhdGUpO1xuXG4gICAgICAvLyBvbmx5IGZpbHRlciB0aGUgY3VycmVudCBkYXRhc2V0XG4gICAgICBicmVhaztcbiAgICBjYXNlIEZJTFRFUl9VUERBVEVSX1BST1BTLmxheWVySWQ6XG4gICAgICAvLyBXZSBuZWVkIHRvIHVwZGF0ZSBvbmx5IGRhdGFzZXRJZC9zIGlmIHdlIGhhdmUgYWRkZWQvcmVtb3ZlZCBsYXllcnNcbiAgICAgIC8vIC0gY2hlY2sgZm9yIGxheWVySWQgY2hhbmdlcyAoWE9SIHdvcmtzIGJlY2F1c2Ugb2Ygc3RyaW5nIHZhbHVlcylcbiAgICAgIC8vIGlmIG5vIGRpZmZlcmVuY2VzIGJldHdlZW4gbGF5ZXJJZHMsIGRvbid0IGRvIGFueSBmaWx0ZXJpbmdcbiAgICAgIC8vIEB0cy1pZ25vcmVcbiAgICAgIGNvbnN0IGxheWVySWREaWZmZXJlbmNlID0geG9yKG5ld0ZpbHRlci5sYXllcklkLCBvbGRGaWx0ZXIubGF5ZXJJZCk7XG5cbiAgICAgIGNvbnN0IGxheWVyRGF0YUlkcyA9IHVuaXE8c3RyaW5nPihcbiAgICAgICAgbGF5ZXJJZERpZmZlcmVuY2VcbiAgICAgICAgICAubWFwKGxpZCA9PlxuICAgICAgICAgICAgZ2V0KFxuICAgICAgICAgICAgICBzdGF0ZS5sYXllcnMuZmluZChsID0+IGwuaWQgPT09IGxpZCksXG4gICAgICAgICAgICAgIFsnY29uZmlnJywgJ2RhdGFJZCddXG4gICAgICAgICAgICApXG4gICAgICAgICAgKVxuICAgICAgICAgIC5maWx0ZXIoZCA9PiBkKSBhcyBzdHJpbmdbXVxuICAgICAgKTtcblxuICAgICAgLy8gb25seSBmaWx0ZXIgZGF0YXNldHNJZHNcbiAgICAgIGRhdGFzZXRJZHMgPSBsYXllckRhdGFJZHM7XG5cbiAgICAgIC8vIFVwZGF0ZSBuZXdGaWx0ZXIgZGF0YUlkc1xuICAgICAgY29uc3QgbmV3RGF0YUlkcyA9IHVuaXE8c3RyaW5nPihcbiAgICAgICAgbmV3RmlsdGVyLmxheWVySWRcbiAgICAgICAgICA/Lm1hcChsaWQgPT5cbiAgICAgICAgICAgIGdldChcbiAgICAgICAgICAgICAgc3RhdGUubGF5ZXJzLmZpbmQobCA9PiBsLmlkID09PSBsaWQpLFxuICAgICAgICAgICAgICBbJ2NvbmZpZycsICdkYXRhSWQnXVxuICAgICAgICAgICAgKVxuICAgICAgICAgIClcbiAgICAgICAgICAuZmlsdGVyKGQgPT4gZCkgYXMgc3RyaW5nW11cbiAgICAgICk7XG5cbiAgICAgIG5ld0ZpbHRlciA9IHtcbiAgICAgICAgLi4ubmV3RmlsdGVyLFxuICAgICAgICBkYXRhSWQ6IG5ld0RhdGFJZHNcbiAgICAgIH07XG5cbiAgICAgIGJyZWFrO1xuICAgIGRlZmF1bHQ6XG4gICAgICBicmVhaztcbiAgfVxuXG4gIGNvbnN0IGVubGFyZ2VkRmlsdGVyID0gc3RhdGUuZmlsdGVycy5maW5kKGYgPT4gZi52aWV3ID09PSBGSUxURVJfVklFV19UWVBFUy5lbmxhcmdlZCk7XG5cbiAgaWYgKGVubGFyZ2VkRmlsdGVyICYmIGVubGFyZ2VkRmlsdGVyLmlkICE9PSBuZXdGaWx0ZXIuaWQpIHtcbiAgICAvLyB0aGVyZSBzaG91bGQgYmUgb25seSBvbmUgZW5sYXJnZWQgZmlsdGVyXG4gICAgbmV3RmlsdGVyLnZpZXcgPSBGSUxURVJfVklFV19UWVBFUy5zaWRlO1xuICB9XG5cbiAgLy8gc2F2ZSBuZXcgZmlsdGVycyB0byBuZXdTdGF0ZVxuICBuZXdTdGF0ZSA9IHNldChbJ2ZpbHRlcnMnLCBpZHhdLCBuZXdGaWx0ZXIsIG5ld1N0YXRlKTtcblxuICAvLyBpZiB3ZSBhcmUgY3VycmVudGx5IHNldHRpbmcgYSBwcm9wIHRoYXQgb25seSByZXF1aXJlcyB0byBmaWx0ZXIgdGhlIGN1cnJlbnRcbiAgLy8gZGF0YXNldCB3ZSB3aWxsIHBhc3Mgb25seSB0aGUgY3VycmVudCBkYXRhc2V0IHRvIGFwcGx5RmlsdGVyc1RvRGF0YXNldHMgYW5kXG4gIC8vIHVwZGF0ZUFsbExheWVyRG9tYWluRGF0YSBvdGhlcndpc2Ugd2UgcGFzcyB0aGUgYWxsIGxpc3Qgb2YgZGF0YXNldHMgYXMgZGVmaW5lZCBpbiBkYXRhSWRcbiAgY29uc3QgZGF0YXNldElkc1RvRmlsdGVyID0gTElNSVRFRF9GSUxURVJfRUZGRUNUX1BST1BTW3Byb3BdXG4gICAgPyBbZGF0YXNldElkc1t2YWx1ZUluZGV4XV1cbiAgICA6IGRhdGFzZXRJZHM7XG5cbiAgLy8gZmlsdGVyIGRhdGFcbiAgY29uc3QgZmlsdGVyZWREYXRhc2V0cyA9IGFwcGx5RmlsdGVyc1RvRGF0YXNldHMoXG4gICAgZGF0YXNldElkc1RvRmlsdGVyLFxuICAgIG5ld1N0YXRlLmRhdGFzZXRzLFxuICAgIG5ld1N0YXRlLmZpbHRlcnMsXG4gICAgbmV3U3RhdGUubGF5ZXJzXG4gICk7XG5cbiAgbmV3U3RhdGUgPSBzZXQoWydkYXRhc2V0cyddLCBmaWx0ZXJlZERhdGFzZXRzLCBuZXdTdGF0ZSk7XG4gIC8vIGRhdGFJZCBpcyBhbiBhcnJheVxuICAvLyBwYXNzIG9ubHkgdGhlIGRhdGFzZXQgd2UgbmVlZCB0byB1cGRhdGVcbiAgbmV3U3RhdGUgPSB1cGRhdGVBbGxMYXllckRvbWFpbkRhdGEobmV3U3RhdGUsIGRhdGFzZXRJZHNUb0ZpbHRlciwgbmV3RmlsdGVyKTtcblxuICByZXR1cm4gbmV3U3RhdGU7XG59XG5cbi8qKlxuICogU2V0IHRoZSBwcm9wZXJ0eSBvZiBhIGZpbHRlciBwbG90XG4gKiBAbWVtYmVyb2YgdmlzU3RhdGVVcGRhdGVyc1xuICogQHB1YmxpY1xuICovXG5leHBvcnQgY29uc3Qgc2V0RmlsdGVyUGxvdFVwZGF0ZXIgPSAoXG4gIHN0YXRlOiBWaXNTdGF0ZSxcbiAge2lkeCwgbmV3UHJvcCwgdmFsdWVJbmRleCA9IDB9OiBWaXNTdGF0ZUFjdGlvbnMuU2V0RmlsdGVyUGxvdFVwZGF0ZXJBY3Rpb25cbik6IFZpc1N0YXRlID0+IHtcbiAgbGV0IG5ld0ZpbHRlciA9IHsuLi5zdGF0ZS5maWx0ZXJzW2lkeF0sIC4uLm5ld1Byb3B9O1xuICBjb25zdCBwcm9wID0gT2JqZWN0LmtleXMobmV3UHJvcClbMF07XG4gIGlmIChwcm9wID09PSAneUF4aXMnKSB7XG4gICAgY29uc3QgcGxvdFR5cGUgPSBnZXREZWZhdWx0RmlsdGVyUGxvdFR5cGUobmV3RmlsdGVyKTtcbiAgICAvLyBUT0RPOiBwbG90IGlzIG5vdCBzdXBwb3J0ZWQgaW4gbXVsdGkgZGF0YXNldCBmaWx0ZXIgZm9yIG5vd1xuICAgIGlmIChwbG90VHlwZSkge1xuICAgICAgbmV3RmlsdGVyID0ge1xuICAgICAgICAuLi5uZXdGaWx0ZXIsXG4gICAgICAgIC4uLmdldEZpbHRlclBsb3Qoey4uLm5ld0ZpbHRlciwgcGxvdFR5cGV9LCBzdGF0ZS5kYXRhc2V0c1tuZXdGaWx0ZXIuZGF0YUlkW3ZhbHVlSW5kZXhdXSksXG4gICAgICAgIHBsb3RUeXBlXG4gICAgICB9O1xuICAgIH1cbiAgfVxuXG4gIHJldHVybiB7XG4gICAgLi4uc3RhdGUsXG4gICAgZmlsdGVyczogc3RhdGUuZmlsdGVycy5tYXAoKGYsIGkpID0+IChpID09PSBpZHggPyBuZXdGaWx0ZXIgOiBmKSlcbiAgfTtcbn07XG5cbi8qKlxuICogQWRkIGEgbmV3IGZpbHRlclxuICogQG1lbWJlcm9mIHZpc1N0YXRlVXBkYXRlcnNcbiAqIEBwdWJsaWNcbiAqL1xuZXhwb3J0IGNvbnN0IGFkZEZpbHRlclVwZGF0ZXIgPSAoXG4gIHN0YXRlOiBWaXNTdGF0ZSxcbiAgYWN0aW9uOiBWaXNTdGF0ZUFjdGlvbnMuQWRkRmlsdGVyVXBkYXRlckFjdGlvblxuKTogVmlzU3RhdGUgPT5cbiAgIWFjdGlvbi5kYXRhSWRcbiAgICA/IHN0YXRlXG4gICAgOiB7XG4gICAgICAgIC4uLnN0YXRlLFxuICAgICAgICBmaWx0ZXJzOiBbLi4uc3RhdGUuZmlsdGVycywgZ2V0RGVmYXVsdEZpbHRlcih7ZGF0YUlkOiBhY3Rpb24uZGF0YUlkLCBpZDogYWN0aW9uLmlkfSldXG4gICAgICB9O1xuXG4vKipcbiAqIFNldCBsYXllciBjb2xvciBwYWxldHRlIHVpIHN0YXRlXG4gKiBAbWVtYmVyb2YgdmlzU3RhdGVVcGRhdGVyc1xuICovXG5leHBvcnQgY29uc3QgbGF5ZXJDb2xvclVJQ2hhbmdlVXBkYXRlciA9IChcbiAgc3RhdGU6IFZpc1N0YXRlLFxuICB7b2xkTGF5ZXIsIHByb3AsIG5ld0NvbmZpZ306IFZpc1N0YXRlQWN0aW9ucy5MYXllckNvbG9yVUlDaGFuZ2VVcGRhdGVyQWN0aW9uXG4pOiBWaXNTdGF0ZSA9PiB7XG4gIGNvbnN0IG9sZFZpeENvbmZpZyA9IG9sZExheWVyLmNvbmZpZy52aXNDb25maWdbcHJvcF07XG4gIGNvbnN0IG5ld0xheWVyID0gb2xkTGF5ZXIudXBkYXRlTGF5ZXJDb2xvclVJKHByb3AsIG5ld0NvbmZpZyk7XG4gIGNvbnN0IG5ld1Zpc0NvbmZpZyA9IG5ld0xheWVyLmNvbmZpZy52aXNDb25maWdbcHJvcF07XG4gIGlmIChvbGRWaXhDb25maWcgIT09IG5ld1Zpc0NvbmZpZykge1xuICAgIHJldHVybiBsYXllclZpc0NvbmZpZ0NoYW5nZVVwZGF0ZXIoc3RhdGUsIHtcbiAgICAgIG9sZExheWVyLFxuICAgICAgbmV3VmlzQ29uZmlnOiB7XG4gICAgICAgIFtwcm9wXTogbmV3VmlzQ29uZmlnXG4gICAgICB9XG4gICAgfSk7XG4gIH1cbiAgcmV0dXJuIHtcbiAgICAuLi5zdGF0ZSxcbiAgICBsYXllcnM6IHN0YXRlLmxheWVycy5tYXAobCA9PiAobC5pZCA9PT0gb2xkTGF5ZXIuaWQgPyBuZXdMYXllciA6IGwpKVxuICB9O1xufTtcblxuLyoqXG4gKiBTdGFydCBhbmQgZW5kIGZpbHRlciBhbmltYXRpb25cbiAqIEBtZW1iZXJvZiB2aXNTdGF0ZVVwZGF0ZXJzXG4gKiBAcHVibGljXG4gKi9cbmV4cG9ydCBjb25zdCB0b2dnbGVGaWx0ZXJBbmltYXRpb25VcGRhdGVyID0gKFxuICBzdGF0ZTogVmlzU3RhdGUsXG4gIGFjdGlvbjogVmlzU3RhdGVBY3Rpb25zLlRvZ2dsZUZpbHRlckFuaW1hdGlvblVwZGF0ZXJBY3Rpb25cbik6IFZpc1N0YXRlID0+ICh7XG4gIC4uLnN0YXRlLFxuICBmaWx0ZXJzOiBzdGF0ZS5maWx0ZXJzLm1hcCgoZiwgaSkgPT4gKGkgPT09IGFjdGlvbi5pZHggPyB7Li4uZiwgaXNBbmltYXRpbmc6ICFmLmlzQW5pbWF0aW5nfSA6IGYpKVxufSk7XG5cbi8qKlxuICogQG1lbWJlcm9mIHZpc1N0YXRlVXBkYXRlcnNcbiAqIEBwdWJsaWNcbiAqL1xuZXhwb3J0IGNvbnN0IHRvZ2dsZUxheWVyQW5pbWF0aW9uVXBkYXRlciA9IChcbiAgc3RhdGU6IFZpc1N0YXRlLFxuICBhY3Rpb246IFZpc1N0YXRlQWN0aW9ucy5Ub2dnbGVMYXllckFuaW1hdGlvblVwZGF0ZXJBY3Rpb25cbik6IFZpc1N0YXRlID0+ICh7XG4gIC4uLnN0YXRlLFxuICBhbmltYXRpb25Db25maWc6IHtcbiAgICAuLi5zdGF0ZS5hbmltYXRpb25Db25maWcsXG4gICAgaXNBbmltYXRpbmc6ICFzdGF0ZS5hbmltYXRpb25Db25maWcuaXNBbmltYXRpbmdcbiAgfVxufSk7XG5cbi8qKlxuICogSGlkZSBhbmQgc2hvdyBsYXllciBhbmltYXRpb24gY29udHJvbFxuICogQG1lbWJlcm9mIHZpc1N0YXRlVXBkYXRlcnNcbiAqIEBwdWJsaWNcbiAqL1xuZXhwb3J0IGNvbnN0IHRvZ2dsZUxheWVyQW5pbWF0aW9uQ29udHJvbFVwZGF0ZXIgPSAoXG4gIHN0YXRlOiBWaXNTdGF0ZSxcbiAgYWN0aW9uOiBWaXNTdGF0ZUFjdGlvbnMuVG9nZ2xlTGF5ZXJBbmltYXRpb25Db250cm9sVXBkYXRlckFjdGlvblxuKTogVmlzU3RhdGUgPT4gKHtcbiAgLi4uc3RhdGUsXG4gIGFuaW1hdGlvbkNvbmZpZzoge1xuICAgIC4uLnN0YXRlLmFuaW1hdGlvbkNvbmZpZyxcbiAgICBoaWRlQ29udHJvbDogIXN0YXRlLmFuaW1hdGlvbkNvbmZpZy5oaWRlQ29udHJvbFxuICB9XG59KTtcblxuLyoqXG4gKiBDaGFuZ2UgZmlsdGVyIGFuaW1hdGlvbiBzcGVlZFxuICogQG1lbWJlcm9mIHZpc1N0YXRlVXBkYXRlcnNcbiAqIEBwdWJsaWNcbiAqL1xuZXhwb3J0IGNvbnN0IHVwZGF0ZUZpbHRlckFuaW1hdGlvblNwZWVkVXBkYXRlciA9IChcbiAgc3RhdGU6IFZpc1N0YXRlLFxuICBhY3Rpb246IFZpc1N0YXRlQWN0aW9ucy5VcGRhdGVGaWx0ZXJBbmltYXRpb25TcGVlZFVwZGF0ZXJBY3Rpb25cbik6IFZpc1N0YXRlID0+ICh7XG4gIC4uLnN0YXRlLFxuICBmaWx0ZXJzOiBzdGF0ZS5maWx0ZXJzLm1hcCgoZiwgaSkgPT4gKGkgPT09IGFjdGlvbi5pZHggPyB7Li4uZiwgc3BlZWQ6IGFjdGlvbi5zcGVlZH0gOiBmKSlcbn0pO1xuXG4vKipcbiAqIFJlc2V0IGFuaW1hdGlvbiBjb25maWcgY3VycmVudCB0aW1lIHRvIGEgc3BlY2lmaWVkIHZhbHVlXG4gKiBAbWVtYmVyb2YgdmlzU3RhdGVVcGRhdGVyc1xuICogQHB1YmxpY1xuICpcbiAqL1xuZXhwb3J0IGNvbnN0IHNldExheWVyQW5pbWF0aW9uVGltZVVwZGF0ZXIgPSAoXG4gIHN0YXRlOiBWaXNTdGF0ZSxcbiAge3ZhbHVlfTogVmlzU3RhdGVBY3Rpb25zLlNldExheWVyQW5pbWF0aW9uVGltZVVwZGF0ZXJBY3Rpb25cbik6IFZpc1N0YXRlID0+ICh7XG4gIC4uLnN0YXRlLFxuICBhbmltYXRpb25Db25maWc6IHtcbiAgICAuLi5zdGF0ZS5hbmltYXRpb25Db25maWcsXG4gICAgY3VycmVudFRpbWU6IHZhbHVlXG4gIH1cbn0pO1xuXG4vKipcbiAqIFVwZGF0ZSBhbmltYXRpb24gc3BlZWQgd2l0aCB0aGUgdmVydGljYWwgc3BlZWQgc2xpZGVyXG4gKiBAbWVtYmVyb2YgdmlzU3RhdGVVcGRhdGVyc1xuICogQHB1YmxpY1xuICpcbiAqL1xuZXhwb3J0IGNvbnN0IHVwZGF0ZUxheWVyQW5pbWF0aW9uU3BlZWRVcGRhdGVyID0gKFxuICBzdGF0ZTogVmlzU3RhdGUsXG4gIHtzcGVlZH06IFZpc1N0YXRlQWN0aW9ucy5VcGRhdGVMYXllckFuaW1hdGlvblNwZWVkVXBkYXRlckFjdGlvblxuKTogVmlzU3RhdGUgPT4ge1xuICByZXR1cm4ge1xuICAgIC4uLnN0YXRlLFxuICAgIGFuaW1hdGlvbkNvbmZpZzoge1xuICAgICAgLi4uc3RhdGUuYW5pbWF0aW9uQ29uZmlnLFxuICAgICAgc3BlZWRcbiAgICB9XG4gIH07XG59O1xuXG4vKipcbiAqIFNob3cgbGFyZ2VyIHRpbWUgZmlsdGVyIGF0IGJvdHRvbSBmb3IgdGltZSBwbGF5YmFjayAoYXBwbHkgdG8gdGltZSBmaWx0ZXIgb25seSlcbiAqIEBtZW1iZXJvZiB2aXNTdGF0ZVVwZGF0ZXJzXG4gKiBAcHVibGljXG4gKi9cbmV4cG9ydCBjb25zdCBzZXRGaWx0ZXJWaWV3VXBkYXRlciA9IChcbiAgc3RhdGU6IFZpc1N0YXRlLFxuICBhY3Rpb246IFZpc1N0YXRlQWN0aW9ucy5TZXRGaWx0ZXJWaWV3VXBkYXRlckFjdGlvblxuKSA9PiB7XG4gIGNvbnN0IHt2aWV3LCBpZHh9ID0gYWN0aW9uO1xuICBjb25zdCBzaG91bGRSZXNldE90aGVyRmlsdGVyc1ZpZXcgPSB2aWV3ID09PSBGSUxURVJfVklFV19UWVBFUy5lbmxhcmdlZDtcbiAgcmV0dXJuIHtcbiAgICAuLi5zdGF0ZSxcbiAgICBmaWx0ZXJzOiBzdGF0ZS5maWx0ZXJzLm1hcCgoZiwgaSkgPT5cbiAgICAgIGkgPT09IGlkeFxuICAgICAgICA/IHtcbiAgICAgICAgICAgIC4uLmYsXG4gICAgICAgICAgICB2aWV3XG4gICAgICAgICAgfVxuICAgICAgICA6IHNob3VsZFJlc2V0T3RoZXJGaWx0ZXJzVmlld1xuICAgICAgICA/IHtcbiAgICAgICAgICAgIC4uLmYsXG4gICAgICAgICAgICB2aWV3OiBGSUxURVJfVklFV19UWVBFUy5zaWRlXG4gICAgICAgICAgfVxuICAgICAgICA6IGZcbiAgICApXG4gIH07XG59O1xuXG4vKipcbiAqIFRvZ2dsZXMgZmlsdGVyIGZlYXR1cmUgdmlzaWJpbGl0eVxuICogQG1lbWJlcm9mIHZpc1N0YXRlVXBkYXRlcnNcbiAqL1xuZXhwb3J0IGNvbnN0IHRvZ2dsZUZpbHRlckZlYXR1cmVVcGRhdGVyID0gKFxuICBzdGF0ZTogVmlzU3RhdGUsXG4gIGFjdGlvbjogVmlzU3RhdGVBY3Rpb25zLlRvZ2dsZUZpbHRlckZlYXR1cmVVcGRhdGVyQWN0aW9uXG4pOiBWaXNTdGF0ZSA9PiB7XG4gIGNvbnN0IGZpbHRlciA9IHN0YXRlLmZpbHRlcnNbYWN0aW9uLmlkeF07XG4gIGNvbnN0IGlzVmlzaWJsZSA9IGdldChmaWx0ZXIsIFsndmFsdWUnLCAncHJvcGVydGllcycsICdpc1Zpc2libGUnXSk7XG5cbiAgbGV0IG5ld1N0YXRlID0gc2V0RmlsdGVyVXBkYXRlcihzdGF0ZSwge1xuICAgIGlkeDogYWN0aW9uLmlkeCxcbiAgICBwcm9wOiAnZW5hYmxlZCcsXG4gICAgdmFsdWU6ICFpc1Zpc2libGVcbiAgfSk7XG5cbiAgbmV3U3RhdGUgPSBzZXRGaWx0ZXJVcGRhdGVyKG5ld1N0YXRlLCB7XG4gICAgaWR4OiBhY3Rpb24uaWR4LFxuICAgIHByb3A6ICd2YWx1ZScsXG4gICAgdmFsdWU6IGZlYXR1cmVUb0ZpbHRlclZhbHVlKGZpbHRlci52YWx1ZSwgZmlsdGVyLmlkLCB7XG4gICAgICBpc1Zpc2libGU6ICFpc1Zpc2libGVcbiAgICB9KVxuICB9KTtcblxuICByZXR1cm4gbmV3U3RhdGU7XG59O1xuXG4vKipcbiAqIFJlbW92ZSBhIGZpbHRlclxuICogQG1lbWJlcm9mIHZpc1N0YXRlVXBkYXRlcnNcbiAqIEBwdWJsaWNcbiAqL1xuZXhwb3J0IGNvbnN0IHJlbW92ZUZpbHRlclVwZGF0ZXIgPSAoXG4gIHN0YXRlOiBWaXNTdGF0ZSxcbiAgYWN0aW9uOiBWaXNTdGF0ZUFjdGlvbnMuUmVtb3ZlRmlsdGVyVXBkYXRlckFjdGlvblxuKTogVmlzU3RhdGUgPT4ge1xuICBjb25zdCB7aWR4fSA9IGFjdGlvbjtcbiAgY29uc3Qge2RhdGFJZCwgaWR9ID0gc3RhdGUuZmlsdGVyc1tpZHhdO1xuXG4gIGNvbnN0IG5ld0ZpbHRlcnMgPSBbXG4gICAgLi4uc3RhdGUuZmlsdGVycy5zbGljZSgwLCBpZHgpLFxuICAgIC4uLnN0YXRlLmZpbHRlcnMuc2xpY2UoaWR4ICsgMSwgc3RhdGUuZmlsdGVycy5sZW5ndGgpXG4gIF07XG5cbiAgY29uc3QgZmlsdGVyZWREYXRhc2V0cyA9IGFwcGx5RmlsdGVyc1RvRGF0YXNldHMoZGF0YUlkLCBzdGF0ZS5kYXRhc2V0cywgbmV3RmlsdGVycywgc3RhdGUubGF5ZXJzKTtcbiAgY29uc3QgbmV3RWRpdG9yID1cbiAgICBnZXRGaWx0ZXJJZEluRmVhdHVyZShzdGF0ZS5lZGl0b3Iuc2VsZWN0ZWRGZWF0dXJlKSA9PT0gaWRcbiAgICAgID8ge1xuICAgICAgICAgIC4uLnN0YXRlLmVkaXRvcixcbiAgICAgICAgICBzZWxlY3RlZEZlYXR1cmU6IG51bGxcbiAgICAgICAgfVxuICAgICAgOiBzdGF0ZS5lZGl0b3I7XG5cbiAgbGV0IG5ld1N0YXRlID0gc2V0KFsnZmlsdGVycyddLCBuZXdGaWx0ZXJzLCBzdGF0ZSk7XG4gIG5ld1N0YXRlID0gc2V0KFsnZGF0YXNldHMnXSwgZmlsdGVyZWREYXRhc2V0cywgbmV3U3RhdGUpO1xuICBuZXdTdGF0ZSA9IHNldChbJ2VkaXRvciddLCBuZXdFZGl0b3IsIG5ld1N0YXRlKTtcblxuICByZXR1cm4gdXBkYXRlQWxsTGF5ZXJEb21haW5EYXRhKG5ld1N0YXRlLCBkYXRhSWQsIHVuZGVmaW5lZCk7XG59O1xuXG4vKipcbiAqIEFkZCBhIG5ldyBsYXllclxuICogQG1lbWJlcm9mIHZpc1N0YXRlVXBkYXRlcnNcbiAqIEBwdWJsaWNcbiAqL1xuZXhwb3J0IGNvbnN0IGFkZExheWVyVXBkYXRlciA9IChcbiAgc3RhdGU6IFZpc1N0YXRlLFxuICBhY3Rpb246IFZpc1N0YXRlQWN0aW9ucy5BZGRMYXllclVwZGF0ZXJBY3Rpb25cbik6IFZpc1N0YXRlID0+IHtcbiAgbGV0IG5ld0xheWVyO1xuICBsZXQgbmV3TGF5ZXJEYXRhO1xuICBpZiAoYWN0aW9uLmNvbmZpZykge1xuICAgIG5ld0xheWVyID0gY3JlYXRlTGF5ZXJGcm9tQ29uZmlnKHN0YXRlLCBhY3Rpb24uY29uZmlnKTtcbiAgICBpZiAoIW5ld0xheWVyKSB7XG4gICAgICBDb25zb2xlLndhcm4oXG4gICAgICAgICdGYWlsZWQgdG8gY3JlYXRlIGxheWVyIGZyb20gY29uZmlnLCBpdCB1c3VhbGx5IG1lYW5zIHRoZSBjb25maWcgaXMgbm90IGJlIGluIGNvcnJlY3QgZm9ybWF0JyxcbiAgICAgICAgYWN0aW9uLmNvbmZpZ1xuICAgICAgKTtcbiAgICAgIHJldHVybiBzdGF0ZTtcbiAgICB9XG5cbiAgICBjb25zdCByZXN1bHQgPSBjYWxjdWxhdGVMYXllckRhdGEobmV3TGF5ZXIsIHN0YXRlKTtcbiAgICBuZXdMYXllciA9IHJlc3VsdC5sYXllcjtcbiAgICBuZXdMYXllckRhdGEgPSByZXN1bHQubGF5ZXJEYXRhO1xuICB9IGVsc2Uge1xuICAgIC8vIGNyZWF0ZSBhbiBlbXB0eSBsYXllciB3aXRoIGEgc3BlY2lmaWMgZGF0YXNldCBvciBhIGRlZmF1bHQgb25lXG4gICAgY29uc3QgZGVmYXVsdERhdGFzZXQgPSBhY3Rpb24uZGF0YXNldElkID8/IE9iamVjdC5rZXlzKHN0YXRlLmRhdGFzZXRzKVswXTtcbiAgICBuZXdMYXllciA9IG5ldyBMYXllcih7XG4gICAgICBpc1Zpc2libGU6IHRydWUsXG4gICAgICBpc0NvbmZpZ0FjdGl2ZTogdHJ1ZSxcbiAgICAgIGRhdGFJZDogZGVmYXVsdERhdGFzZXRcbiAgICB9KTtcbiAgICBuZXdMYXllckRhdGEgPSB7fTtcbiAgfVxuXG4gIGxldCBuZXdTdGF0ZSA9IHtcbiAgICAuLi5zdGF0ZSxcbiAgICBsYXllcnM6IFsuLi5zdGF0ZS5sYXllcnMsIG5ld0xheWVyXSxcbiAgICBsYXllckRhdGE6IFsuLi5zdGF0ZS5sYXllckRhdGEsIG5ld0xheWVyRGF0YV0sXG4gICAgLy8gYWRkIG5ldyBsYXllciBhdCB0aGUgdG9wXG4gICAgbGF5ZXJPcmRlcjogW25ld0xheWVyLmlkLCAuLi5zdGF0ZS5sYXllck9yZGVyXSxcbiAgICBzcGxpdE1hcHM6IGFkZE5ld0xheWVyc1RvU3BsaXRNYXAoc3RhdGUuc3BsaXRNYXBzLCBuZXdMYXllcilcbiAgfTtcblxuICBpZiAobmV3TGF5ZXIuY29uZmlnLmFuaW1hdGlvbi5lbmFibGVkKSB7XG4gICAgbmV3U3RhdGUgPSB1cGRhdGVBbmltYXRpb25Eb21haW4obmV3U3RhdGUpO1xuICB9XG5cbiAgcmV0dXJuIG5ld1N0YXRlO1xufTtcblxuLyoqXG4gKiByZW1vdmUgbGF5ZXJcbiAqIEBtZW1iZXJvZiB2aXNTdGF0ZVVwZGF0ZXJzXG4gKiBAcHVibGljXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiByZW1vdmVMYXllclVwZGF0ZXI8VCBleHRlbmRzIFZpc1N0YXRlPihcbiAgc3RhdGU6IFQsXG4gIHtpZH06IFZpc1N0YXRlQWN0aW9ucy5SZW1vdmVMYXllclVwZGF0ZXJBY3Rpb25cbik6IFQge1xuICBjb25zdCBpZHggPSBOdW1iZXIuaXNGaW5pdGUoaWQpXG4gICAgPyAvLyBzdXBwb3J0IG9sZGVyIEFQSSwgcmVtb3ZlIGxheWVyIGJ5IGlkeFxuICAgICAgTnVtYmVyKGlkKVxuICAgIDogc3RhdGUubGF5ZXJzLmZpbmRJbmRleChsID0+IGwuaWQgPT09IGlkKTtcbiAgaWYgKGlkeCA8IDAgfHwgaWR4ID49IHN0YXRlLmxheWVycy5sZW5ndGgpIHtcbiAgICAvLyBpbnZhbGlkIGluZGV4XG4gICAgQ29uc29sZS53YXJuKGBjYW4gbm90IHJlbW92ZSBsYXllciB3aXRoIGludmFsaWQgaWR8aWR4ICR7aWR9YCk7XG4gICAgcmV0dXJuIHN0YXRlO1xuICB9XG5cbiAgY29uc3Qge2xheWVycywgbGF5ZXJEYXRhLCBsYXllck9yZGVyLCBjbGlja2VkLCBob3ZlckluZm99ID0gc3RhdGU7XG4gIGNvbnN0IGxheWVyVG9SZW1vdmUgPSBsYXllcnNbaWR4XTtcbiAgY29uc3QgbmV3U3RhdGUgPSB7XG4gICAgLi4uc3RhdGUsXG4gICAgbGF5ZXJzOiBmaWx0ZXJPdXRCeUlkKGxheWVyVG9SZW1vdmUuaWQpKGxheWVycyksXG4gICAgbGF5ZXJEYXRhOiByZW1vdmVFbGVtZW50QXRJbmRleChpZHgpKGxheWVyRGF0YSksXG4gICAgbGF5ZXJPcmRlcjogbGF5ZXJPcmRlci5maWx0ZXIobGF5ZXJJZCA9PiBsYXllcklkICE9PSBsYXllclRvUmVtb3ZlLmlkKSxcbiAgICBjbGlja2VkOiBsYXllclRvUmVtb3ZlLmlzTGF5ZXJIb3ZlcmVkKGNsaWNrZWQpID8gdW5kZWZpbmVkIDogY2xpY2tlZCxcbiAgICBob3ZlckluZm86IGxheWVyVG9SZW1vdmUuaXNMYXllckhvdmVyZWQoaG92ZXJJbmZvKSA/IHVuZGVmaW5lZCA6IGhvdmVySW5mbyxcbiAgICBzcGxpdE1hcHM6IHJlbW92ZUxheWVyRnJvbVNwbGl0TWFwcyhzdGF0ZS5zcGxpdE1hcHMsIGxheWVyVG9SZW1vdmUpXG4gICAgLy8gVE9ETzogdXBkYXRlIGZpbHRlcnMsIGNyZWF0ZSBoZWxwZXIgdG8gcmVtb3ZlIGxheWVyIGZvcm0gZmlsdGVyIChyZW1vdmUgbGF5ZXJpZCBhbmQgZGF0YWlkKSBpZiBtYXBwZWRcbiAgfTtcblxuICByZXR1cm4gdXBkYXRlQW5pbWF0aW9uRG9tYWluKG5ld1N0YXRlKTtcbn1cblxuLyoqXG4gKiBSZW9yZGVyIGxheWVyXG4gKiBAbWVtYmVyb2YgdmlzU3RhdGVVcGRhdGVyc1xuICogQHB1YmxpY1xuICovXG5leHBvcnQgY29uc3QgcmVvcmRlckxheWVyVXBkYXRlciA9IChcbiAgc3RhdGU6IFZpc1N0YXRlLFxuICB7b3JkZXJ9OiBWaXNTdGF0ZUFjdGlvbnMuUmVvcmRlckxheWVyVXBkYXRlckFjdGlvblxuKTogVmlzU3RhdGUgPT4gKHtcbiAgLi4uc3RhdGUsXG4gIGxheWVyT3JkZXI6IG9yZGVyXG59KTtcblxuLyoqXG4gKiBkdXBsaWNhdGUgbGF5ZXJcbiAqIEBtZW1iZXJvZiB2aXNTdGF0ZVVwZGF0ZXJzXG4gKiBAcHVibGljXG4gKi9cbmV4cG9ydCBjb25zdCBkdXBsaWNhdGVMYXllclVwZGF0ZXIgPSAoXG4gIHN0YXRlOiBWaXNTdGF0ZSxcbiAge2lkfTogVmlzU3RhdGVBY3Rpb25zLkR1cGxpY2F0ZUxheWVyVXBkYXRlckFjdGlvblxuKTogVmlzU3RhdGUgPT4ge1xuICBjb25zdCBpZHggPSBOdW1iZXIuaXNGaW5pdGUoaWQpXG4gICAgPyAvLyBzdXBwb3J0IG9sZGVyIEFQSSwgcmVtb3ZlIGxheWVyIGJ5IGlkeFxuICAgICAgTnVtYmVyKGlkKVxuICAgIDogc3RhdGUubGF5ZXJzLmZpbmRJbmRleChsID0+IGwuaWQgPT09IGlkKTtcbiAgaWYgKGlkeCA8IDAgfHwgIXN0YXRlLmxheWVyc1tpZHhdKSB7XG4gICAgQ29uc29sZS53YXJuKGBsYXllciAke2lkeH0gbm90IGZvdW5kIGluIGxheWVyT3JkZXJgKTtcbiAgICByZXR1cm4gc3RhdGU7XG4gIH1cblxuICBjb25zdCB7bGF5ZXJzfSA9IHN0YXRlO1xuICBjb25zdCBvcmlnaW5hbCA9IGxheWVyc1tpZHhdO1xuXG4gIGNvbnN0IG9yaWdpbmFsTGF5ZXJPcmRlcklkeCA9IHN0YXRlLmxheWVyT3JkZXIuZmluZEluZGV4KGxpZCA9PiBsaWQgPT09IG9yaWdpbmFsLmlkKTtcbiAgbGV0IG5ld0xhYmVsID0gYENvcHkgb2YgJHtvcmlnaW5hbC5jb25maWcubGFiZWx9YDtcbiAgbGV0IHBvc3RmaXggPSAwO1xuICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgbm8tbG9vcC1mdW5jXG4gIHdoaWxlIChsYXllcnMuZmluZChsID0+IGwuY29uZmlnLmxhYmVsID09PSBuZXdMYWJlbCkpIHtcbiAgICBuZXdMYWJlbCA9IGBDb3B5IG9mICR7b3JpZ2luYWwuY29uZmlnLmxhYmVsfSAkeysrcG9zdGZpeH1gO1xuICB9XG5cbiAgLy8gY29sbGVjdCBsYXllciBjb25maWcgZnJvbSBvcmlnaW5hbFxuICBjb25zdCBsb2FkZWRMYXllciA9IHNlcmlhbGl6ZUxheWVyKG9yaWdpbmFsLCBzdGF0ZS5zY2hlbWEpO1xuXG4gIC8vIGFzc2lnbiBuZXcgaWQgYW5kIGxhYmVsIHRvIGNvcGllZCBsYXllclxuICBpZiAoIWxvYWRlZExheWVyPy5jb25maWcpIHtcbiAgICByZXR1cm4gc3RhdGU7XG4gIH1cbiAgbG9hZGVkTGF5ZXIuY29uZmlnLmxhYmVsID0gbmV3TGFiZWw7XG4gIGxvYWRlZExheWVyLmlkID0gZ2VuZXJhdGVIYXNoSWQoTEFZRVJfSURfTEVOR1RIKTtcblxuICAvLyBhZGQgbGF5ZXIgdG8gc3RhdGVcbiAgbGV0IG5leHRTdGF0ZSA9IGFkZExheWVyVXBkYXRlcihzdGF0ZSwge2NvbmZpZzogbG9hZGVkTGF5ZXJ9KTtcbiAgLy8gcmV0cmlldmUgbmV3bHkgY3JlYXRlZCBsYXllclxuICBjb25zdCBuZXdMYXllciA9IG5leHRTdGF0ZS5sYXllcnNbbmV4dFN0YXRlLmxheWVycy5sZW5ndGggLSAxXTtcbiAgLy8gdXBkYXRlIGxheWVyIG9yZGVyIHdpdGggbmV3THlhZXIuaWRcbiAgY29uc3QgbmV3TGF5ZXJPcmRlciA9IGFycmF5SW5zZXJ0KFxuICAgIG5leHRTdGF0ZS5sYXllck9yZGVyLnNsaWNlKDEsIG5leHRTdGF0ZS5sYXllck9yZGVyLmxlbmd0aCksXG4gICAgb3JpZ2luYWxMYXllck9yZGVySWR4LFxuICAgIG5ld0xheWVyLmlkXG4gICk7XG5cbiAgbmV4dFN0YXRlID0gcmVvcmRlckxheWVyVXBkYXRlcihuZXh0U3RhdGUsIHtvcmRlcjogbmV3TGF5ZXJPcmRlcn0pO1xuXG4gIHJldHVybiB1cGRhdGVBbmltYXRpb25Eb21haW4obmV4dFN0YXRlKTtcbn07XG5cbi8qKlxuICogQWRkIGEgbmV3IGVmZmVjdFxuICogQG1lbWJlcm9mIHZpc1N0YXRlVXBkYXRlcnNcbiAqIEBwdWJsaWNcbiAqL1xuZXhwb3J0IGNvbnN0IGFkZEVmZmVjdFVwZGF0ZXIgPSAoXG4gIHN0YXRlOiBWaXNTdGF0ZSxcbiAgYWN0aW9uOiBWaXNTdGF0ZUFjdGlvbnMuQWRkRWZmZWN0VXBkYXRlckFjdGlvblxuKTogVmlzU3RhdGUgPT4ge1xuICBjb25zdCBuZXdFZmZlY3QgPSBjcmVhdGVFZmZlY3QoYWN0aW9uLmNvbmZpZyk7XG5cbiAgLy8gY29sbGFwc2UgY29uZmlndXJhdG9ycyBmb3Igb3RoZXIgZWZmZWN0c1xuICBzdGF0ZS5lZmZlY3RzLmZvckVhY2goZWZmZWN0ID0+IGVmZmVjdC5zZXRQcm9wcyh7aXNDb25maWdBY3RpdmU6IGZhbHNlfSkpO1xuXG4gIGNvbnN0IGVmZmVjdHMgPSBbLi4uc3RhdGUuZWZmZWN0cywgbmV3RWZmZWN0XTtcbiAgY29uc3QgZWZmZWN0T3JkZXIgPSBmaXhFZmZlY3RPcmRlcihlZmZlY3RzLCBbbmV3RWZmZWN0LmlkLCAuLi5zdGF0ZS5lZmZlY3RPcmRlcl0pO1xuXG4gIHJldHVybiB7XG4gICAgLi4uc3RhdGUsXG4gICAgZWZmZWN0cyxcbiAgICBlZmZlY3RPcmRlclxuICB9O1xufTtcblxuLyoqXG4gKiByZW1vdmUgZWZmZWN0XG4gKiBAbWVtYmVyb2YgdmlzU3RhdGVVcGRhdGVyc1xuICogQHB1YmxpY1xuICovXG5leHBvcnQgY29uc3QgcmVtb3ZlRWZmZWN0VXBkYXRlciA9IChcbiAgc3RhdGU6IFZpc1N0YXRlLFxuICB7aWR9OiBWaXNTdGF0ZUFjdGlvbnMuUmVtb3ZlRWZmZWN0VXBkYXRlckFjdGlvblxuKTogVmlzU3RhdGUgPT4ge1xuICBjb25zdCBpZHggPSBzdGF0ZS5lZmZlY3RzLmZpbmRJbmRleChsID0+IGwuaWQgPT09IGlkKTtcbiAgaWYgKGlkeCA8IDAgfHwgaWR4ID49IHN0YXRlLmVmZmVjdHMubGVuZ3RoKSB7XG4gICAgQ29uc29sZS53YXJuKGBjYW4gbm90IHJlbW92ZSBlZmZlY3Qgd2l0aCBpbnZhbGlkIGlkICR7aWR9YCk7XG4gICAgcmV0dXJuIHN0YXRlO1xuICB9XG5cbiAgY29uc3Qge2VmZmVjdHMsIGVmZmVjdE9yZGVyfSA9IHN0YXRlO1xuICBjb25zdCBlZmZlY3RUb1JlbW92ZSA9IGVmZmVjdHNbaWR4XTtcbiAgcmV0dXJuIHtcbiAgICAuLi5zdGF0ZSxcbiAgICAvLyBAdHMtZXhwZWN0LWVycm9yIGZpeGVkIGluIHRzXG4gICAgZWZmZWN0czogZmlsdGVyT3V0QnlJZChlZmZlY3RUb1JlbW92ZS5pZCkoZWZmZWN0cyksXG4gICAgZWZmZWN0T3JkZXI6IGVmZmVjdE9yZGVyLmZpbHRlcihlZmZlY3RJZCA9PiBlZmZlY3RJZCAhPT0gZWZmZWN0VG9SZW1vdmUuaWQpXG4gIH07XG59O1xuXG4vKipcbiAqIFJlb3JkZXIgZWZmZWN0XG4gKiBAbWVtYmVyb2YgdmlzU3RhdGVVcGRhdGVyc1xuICogQHB1YmxpY1xuICovXG5leHBvcnQgY29uc3QgcmVvcmRlckVmZmVjdFVwZGF0ZXIgPSAoXG4gIHN0YXRlOiBWaXNTdGF0ZSxcbiAge29yZGVyfTogVmlzU3RhdGVBY3Rpb25zLlJlb3JkZXJFZmZlY3RVcGRhdGVyQWN0aW9uXG4pOiBWaXNTdGF0ZSA9PiAoe1xuICAuLi5zdGF0ZSxcbiAgZWZmZWN0T3JkZXI6IGZpeEVmZmVjdE9yZGVyKHN0YXRlLmVmZmVjdHMsIFsuLi5vcmRlcl0pXG59KTtcblxuLyoqXG4gKiBVcGRhdGUgZWZmZWN0XG4gKiBAbWVtYmVyb2YgdmlzU3RhdGVVcGRhdGVyc1xuICogQHB1YmxpY1xuICovXG5leHBvcnQgY29uc3QgdXBkYXRlRWZmZWN0VXBkYXRlciA9IChcbiAgc3RhdGU6IFZpc1N0YXRlLFxuICB7aWQsIHByb3BzfTogVmlzU3RhdGVBY3Rpb25zLlVwZGF0ZUVmZmVjdFVwZGF0ZXJBY3Rpb25cbik6IFZpc1N0YXRlID0+IHtcbiAgY29uc3QgaWR4ID0gc3RhdGUuZWZmZWN0cy5maW5kSW5kZXgobCA9PiBsLmlkID09PSBpZCk7XG4gIGlmIChpZHggPCAwIHx8IGlkeCA+PSBzdGF0ZS5lZmZlY3RzLmxlbmd0aCkge1xuICAgIENvbnNvbGUud2FybihgY2FuIG5vdCB1cGRhdGUgZWZmZWN0IHdpdGggaW52YWxpZCBpZCAke2lkfWApO1xuICAgIHJldHVybiBzdGF0ZTtcbiAgfVxuXG4gIGxldCBlZmZlY3RPcmRlciA9IHN0YXRlLmVmZmVjdE9yZGVyO1xuICBpZiAocHJvcHMuaWQgIT09IHVuZGVmaW5lZCAmJiBwcm9wcy5pZCAhPT0gaWQpIHtcbiAgICBjb25zdCBpZHgyID0gc3RhdGUuZWZmZWN0cy5maW5kSW5kZXgobCA9PiBsLmlkID09PSBwcm9wcy5pZCk7XG4gICAgaWYgKGlkeDIgPj0gMCkge1xuICAgICAgQ29uc29sZS53YXJuKGBjYW4gbm90IHVwZGF0ZSBlZmZlY3Qgd2l0aCBleGlzdGluZyBlZmZlY3QgaWQgJHtpZH1gKTtcbiAgICAgIHJldHVybiBzdGF0ZTtcbiAgICB9XG5cbiAgICBlZmZlY3RPcmRlciA9IGVmZmVjdE9yZGVyLm1hcChlZmZlY3RPcmRlcklkID0+XG4gICAgICBlZmZlY3RPcmRlcklkID09PSBpZCA/IChwcm9wcy5pZCBhcyBzdHJpbmcpIDogZWZmZWN0T3JkZXJJZFxuICAgICk7XG4gIH1cblxuICBjb25zdCBuZXdFZmZlY3RzID0gWy4uLnN0YXRlLmVmZmVjdHNdO1xuICBuZXdFZmZlY3RzW2lkeF0uc2V0UHJvcHMocHJvcHMpO1xuXG4gIHJldHVybiB7XG4gICAgLi4uc3RhdGUsXG4gICAgZWZmZWN0czogbmV3RWZmZWN0cyxcbiAgICBlZmZlY3RPcmRlclxuICB9O1xufTtcblxuLyoqXG4gKiBSZW1vdmUgYSBkYXRhc2V0IGFuZCBhbGwgbGF5ZXJzLCBmaWx0ZXJzLCB0b29sdGlwIGNvbmZpZ3MgdGhhdCBiYXNlZCBvbiBpdFxuICogQG1lbWJlcm9mIHZpc1N0YXRlVXBkYXRlcnNcbiAqIEBwdWJsaWNcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHJlbW92ZURhdGFzZXRVcGRhdGVyPFQgZXh0ZW5kcyBWaXNTdGF0ZT4oXG4gIHN0YXRlOiBULFxuICBhY3Rpb246IFZpc1N0YXRlQWN0aW9ucy5SZW1vdmVEYXRhc2V0VXBkYXRlckFjdGlvblxuKTogVCB7XG4gIC8vIGV4dHJhY3QgZGF0YXNldCBrZXlcbiAgY29uc3Qge2RhdGFJZDogZGF0YXNldEtleX0gPSBhY3Rpb247XG4gIGNvbnN0IHtkYXRhc2V0c30gPSBzdGF0ZTtcblxuICAvLyBjaGVjayBpZiBkYXRhc2V0IGlzIHByZXNlbnRcbiAgaWYgKCFkYXRhc2V0c1tkYXRhc2V0S2V5XSkge1xuICAgIHJldHVybiBzdGF0ZTtcbiAgfVxuXG4gIC8qIGVzbGludC1kaXNhYmxlIG5vLXVudXNlZC12YXJzICovXG4gIGNvbnN0IHtcbiAgICBsYXllcnMsXG4gICAgZGF0YXNldHM6IHtbZGF0YXNldEtleV06IGRhdGFzZXQsIC4uLm5ld0RhdGFzZXRzfVxuICB9ID0gc3RhdGU7XG4gIC8qIGVzbGludC1lbmFibGUgbm8tdW51c2VkLXZhcnMgKi9cblxuICBjb25zdCBsYXllcnNUb1JlbW92ZSA9IGxheWVycy5maWx0ZXIobCA9PiBsLmNvbmZpZy5kYXRhSWQgPT09IGRhdGFzZXRLZXkpLm1hcChsID0+IGwuaWQpO1xuXG4gIC8vIHJlbW92ZSBsYXllcnMgYW5kIGRhdGFzZXRzXG4gIGxldCBuZXdTdGF0ZSA9IGxheWVyc1RvUmVtb3ZlLnJlZHVjZSgoYWNjdSwgaWQpID0+IHJlbW92ZUxheWVyVXBkYXRlcihhY2N1LCB7aWR9KSwge1xuICAgIC4uLnN0YXRlLFxuICAgIGRhdGFzZXRzOiBuZXdEYXRhc2V0c1xuICB9KTtcblxuICAvLyByZW1vdmUgZmlsdGVyc1xuICBjb25zdCBmaWx0ZXJzID0gbmV3U3RhdGUuZmlsdGVycy5maWx0ZXIoZmlsdGVyID0+ICFmaWx0ZXIuZGF0YUlkLmluY2x1ZGVzKGRhdGFzZXRLZXkpKTtcblxuICBuZXdTdGF0ZSA9IHsuLi5uZXdTdGF0ZSwgZmlsdGVyc307XG5cbiAgcmV0dXJuIHJlbW92ZURhdGFzZXRGcm9tSW50ZXJhY3Rpb25Db25maWcobmV3U3RhdGUsIHtkYXRhSWQ6IGRhdGFzZXRLZXl9KTtcbn1cblxuZnVuY3Rpb24gcmVtb3ZlRGF0YXNldEZyb21JbnRlcmFjdGlvbkNvbmZpZyhzdGF0ZSwge2RhdGFJZH0pIHtcbiAgbGV0IHtpbnRlcmFjdGlvbkNvbmZpZ30gPSBzdGF0ZTtcbiAgY29uc3Qge3Rvb2x0aXB9ID0gaW50ZXJhY3Rpb25Db25maWc7XG4gIGlmICh0b29sdGlwKSB7XG4gICAgY29uc3Qge2NvbmZpZ30gPSB0b29sdGlwO1xuICAgIC8qIGVzbGludC1kaXNhYmxlIG5vLXVudXNlZC12YXJzICovXG4gICAgY29uc3Qge1tkYXRhSWRdOiBmaWVsZHMsIC4uLmZpZWxkc1RvU2hvd30gPSBjb25maWcuZmllbGRzVG9TaG93O1xuICAgIC8qIGVzbGludC1lbmFibGUgbm8tdW51c2VkLXZhcnMgKi9cbiAgICBpbnRlcmFjdGlvbkNvbmZpZyA9IHtcbiAgICAgIC4uLmludGVyYWN0aW9uQ29uZmlnLFxuICAgICAgdG9vbHRpcDogey4uLnRvb2x0aXAsIGNvbmZpZzogey4uLmNvbmZpZywgZmllbGRzVG9TaG93fX1cbiAgICB9O1xuICB9XG5cbiAgcmV0dXJuIHsuLi5zdGF0ZSwgaW50ZXJhY3Rpb25Db25maWd9O1xufVxuLyoqXG4gKiB1cGRhdGUgbGF5ZXIgYmxlbmRpbmcgbW9kZVxuICogQG1lbWJlcm9mIHZpc1N0YXRlVXBkYXRlcnNcbiAqIEBwdWJsaWNcbiAqL1xuZXhwb3J0IGNvbnN0IHVwZGF0ZUxheWVyQmxlbmRpbmdVcGRhdGVyID0gKFxuICBzdGF0ZTogVmlzU3RhdGUsXG4gIGFjdGlvbjogVmlzU3RhdGVBY3Rpb25zLlVwZGF0ZUxheWVyQmxlbmRpbmdVcGRhdGVyQWN0aW9uXG4pOiBWaXNTdGF0ZSA9PiAoe1xuICAuLi5zdGF0ZSxcbiAgbGF5ZXJCbGVuZGluZzogYWN0aW9uLm1vZGVcbn0pO1xuXG4vKipcbiAqIHVwZGF0ZSBvdmVybGF5IGJsZW5kaW5nIG1vZGVcbiAqIEBtZW1iZXJvZiB2aXNTdGF0ZVVwZGF0ZXJzXG4gKiBAcHVibGljXG4gKi9cbmV4cG9ydCBjb25zdCB1cGRhdGVPdmVybGF5QmxlbmRpbmdVcGRhdGVyID0gKFxuICBzdGF0ZTogVmlzU3RhdGUsXG4gIGFjdGlvbjogVmlzU3RhdGVBY3Rpb25zLlVwZGF0ZU92ZXJsYXlCbGVuZGluZ1VwZGF0ZXJBY3Rpb25cbik6IFZpc1N0YXRlID0+ICh7XG4gIC4uLnN0YXRlLFxuICBvdmVybGF5QmxlbmRpbmc6IGFjdGlvbi5tb2RlXG59KTtcblxuLyoqXG4gKiBEaXNwbGF5IGRhdGFzZXQgdGFibGUgaW4gYSBtb2RhbFxuICogQG1lbWJlcm9mIHZpc1N0YXRlVXBkYXRlcnNcbiAqIEBwdWJsaWNcbiAqL1xuZXhwb3J0IGNvbnN0IHNob3dEYXRhc2V0VGFibGVVcGRhdGVyID0gKFxuICBzdGF0ZTogVmlzU3RhdGUsXG4gIGFjdGlvbjogVmlzU3RhdGVBY3Rpb25zLlNob3dEYXRhc2V0VGFibGVVcGRhdGVyQWN0aW9uXG4pOiBWaXNTdGF0ZSA9PiB7XG4gIHJldHVybiB7XG4gICAgLi4uc3RhdGUsXG4gICAgZWRpdGluZ0RhdGFzZXQ6IGFjdGlvbi5kYXRhSWRcbiAgfTtcbn07XG5cbi8qKlxuICogQWRkIGN1c3RvbSBjb2xvciBmb3IgZGF0YXNldHMgYW5kIGxheWVyc1xuICogQG1lbWJlcm9mIHZpc1N0YXRlVXBkYXRlcnNcbiAqIEBwdWJsaWNcbiAqL1xuZXhwb3J0IGNvbnN0IHVwZGF0ZVRhYmxlQ29sb3JVcGRhdGVyID0gKFxuICBzdGF0ZTogVmlzU3RhdGUsXG4gIGFjdGlvbjogVmlzU3RhdGVBY3Rpb25zLlVwZGF0ZURhdGFzZXRDb2xvclVwZGF0ZXJcbik6IFZpc1N0YXRlID0+IHtcbiAgcmV0dXJuIHVwZGF0ZURhdGFzZXRQcm9wc1VwZGF0ZXIoc3RhdGUsIHtkYXRhSWQ6IGFjdGlvbi5kYXRhSWQsIHByb3BzOiB7Y29sb3I6IGFjdGlvbi5uZXdDb2xvcn19KTtcbn07XG5cbi8qKlxuICogcmVzZXQgdmlzU3RhdGUgdG8gaW5pdGlhbCBTdGF0ZVxuICogQG1lbWJlcm9mIHZpc1N0YXRlVXBkYXRlcnNcbiAqIEBwdWJsaWNcbiAqL1xuZXhwb3J0IGNvbnN0IHJlc2V0TWFwQ29uZmlnVXBkYXRlciA9IChzdGF0ZTogVmlzU3RhdGUpOiBWaXNTdGF0ZSA9PiAoe1xuICAuLi5JTklUSUFMX1ZJU19TVEFURSxcbiAgLi4uc3RhdGUuaW5pdGlhbFN0YXRlLFxuICBpbml0aWFsU3RhdGU6IHN0YXRlLmluaXRpYWxTdGF0ZVxufSk7XG5cbi8qKlxuICogUHJvcGFnYXRlIGB2aXNTdGF0ZWAgcmVkdWNlciB3aXRoIGEgbmV3IGNvbmZpZ3VyYXRpb24uIEN1cnJlbnQgY29uZmlnIHdpbGwgYmUgb3ZlcnJpZGUuXG4gKiBAbWVtYmVyb2YgdmlzU3RhdGVVcGRhdGVyc1xuICogQHB1YmxpY1xuICovXG5leHBvcnQgY29uc3QgcmVjZWl2ZU1hcENvbmZpZ1VwZGF0ZXIgPSAoXG4gIHN0YXRlOiBWaXNTdGF0ZSxcbiAge1xuICAgIHBheWxvYWQ6IHtjb25maWcgPSB7fSwgb3B0aW9ucyA9IHt9fVxuICB9OiB7XG4gICAgdHlwZT86IHR5cGVvZiBBY3Rpb25UeXBlcy5SRUNFSVZFX01BUF9DT05GSUc7XG4gICAgcGF5bG9hZDogUmVjZWl2ZU1hcENvbmZpZ1BheWxvYWQ7XG4gIH1cbik6IFZpc1N0YXRlID0+IHtcbiAgaWYgKCFjb25maWcudmlzU3RhdGUpIHtcbiAgICByZXR1cm4gc3RhdGU7XG4gIH1cblxuICBjb25zdCB7a2VlcEV4aXN0aW5nQ29uZmlnfSA9IG9wdGlvbnM7XG5cbiAgLy8gcmVzZXQgY29uZmlnIGlmIGtlZXBFeGlzdGluZ0NvbmZpZyBpcyBmYWxzeVxuICBsZXQgbWVyZ2VkU3RhdGUgPSAha2VlcEV4aXN0aW5nQ29uZmlnID8gcmVzZXRNYXBDb25maWdVcGRhdGVyKHN0YXRlKSA6IHN0YXRlO1xuICBmb3IgKGNvbnN0IG1lcmdlciBvZiBzdGF0ZS5tZXJnZXJzKSB7XG4gICAgaWYgKGlzVmFsaWRNZXJnZXIobWVyZ2VyKSAmJiBoYXNQcm9wc1RvTWVyZ2UoY29uZmlnLnZpc1N0YXRlLCBtZXJnZXIucHJvcCkpIHtcbiAgICAgIG1lcmdlZFN0YXRlID0gbWVyZ2VyLm1lcmdlKFxuICAgICAgICBtZXJnZWRTdGF0ZSxcbiAgICAgICAgZ2V0UHJvcFZhbHVlVG9NZXJnZXIoY29uZmlnLnZpc1N0YXRlLCBtZXJnZXIucHJvcCwgbWVyZ2VyLnRvTWVyZ2VQcm9wKSxcbiAgICAgICAgLy8gZnJvbUNvbmZpZ1xuICAgICAgICB0cnVlXG4gICAgICApO1xuICAgIH1cbiAgfVxuXG4gIHJldHVybiBtZXJnZWRTdGF0ZTtcbn07XG5cbi8qKlxuICogVHJpZ2dlciBsYXllciBob3ZlciBldmVudCB3aXRoIGhvdmVyZWQgb2JqZWN0XG4gKiBAbWVtYmVyb2YgdmlzU3RhdGVVcGRhdGVyc1xuICogQHB1YmxpY1xuICovXG5leHBvcnQgY29uc3QgbGF5ZXJIb3ZlclVwZGF0ZXIgPSAoXG4gIHN0YXRlOiBWaXNTdGF0ZSxcbiAgYWN0aW9uOiBWaXNTdGF0ZUFjdGlvbnMuT25MYXllckhvdmVyVXBkYXRlckFjdGlvblxuKTogVmlzU3RhdGUgPT4gKHtcbiAgLi4uc3RhdGUsXG4gIGhvdmVySW5mbzoge1xuICAgIC8vIGRlY2suZ2wgaW5mbyBpcyBtdXRhYmxlXG4gICAgLi4uYWN0aW9uLmluZm9cbiAgfVxufSk7XG5cbi8qIGVzbGludC1lbmFibGUgbWF4LXN0YXRlbWVudHMgKi9cblxuLyoqXG4gKiBVcGRhdGUgYGludGVyYWN0aW9uQ29uZmlnYFxuICogQG1lbWJlcm9mIHZpc1N0YXRlVXBkYXRlcnNcbiAqIEBwdWJsaWNcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGludGVyYWN0aW9uQ29uZmlnQ2hhbmdlVXBkYXRlcihcbiAgc3RhdGU6IFZpc1N0YXRlLFxuICBhY3Rpb246IFZpc1N0YXRlQWN0aW9ucy5JbnRlcmFjdGlvbkNvbmZpZ0NoYW5nZVVwZGF0ZXJBY3Rpb25cbik6IFZpc1N0YXRlIHtcbiAgY29uc3Qge2NvbmZpZ30gPSBhY3Rpb247XG5cbiAgY29uc3QgaW50ZXJhY3Rpb25Db25maWcgPSB7XG4gICAgLi4uc3RhdGUuaW50ZXJhY3Rpb25Db25maWcsXG4gICAgLi4ue1tjb25maWcuaWRdOiBjb25maWd9XG4gIH07XG5cbiAgLy8gRG9uJ3QgZW5hYmxlIHRvb2x0aXAgYW5kIGJydXNoIGF0IHRoZSBzYW1lIHRpbWVcbiAgLy8gYnV0IGNvb3JkaW5hdGVzIGNhbiBiZSBzaG93biBhdCBhbGwgdGltZVxuICBjb25zdCBjb250cmFkaWN0ID0gWydicnVzaCcsICd0b29sdGlwJ107XG5cbiAgaWYgKFxuICAgIGNvbnRyYWRpY3QuaW5jbHVkZXMoY29uZmlnLmlkKSAmJlxuICAgIGNvbmZpZy5lbmFibGVkICYmXG4gICAgIXN0YXRlLmludGVyYWN0aW9uQ29uZmlnW2NvbmZpZy5pZF0uZW5hYmxlZFxuICApIHtcbiAgICAvLyBvbmx5IGVuYWJsZSBvbmUgaW50ZXJhY3Rpb24gYXQgYSB0aW1lXG4gICAgY29udHJhZGljdC5mb3JFYWNoKGsgPT4ge1xuICAgICAgaWYgKGsgIT09IGNvbmZpZy5pZCkge1xuICAgICAgICBpbnRlcmFjdGlvbkNvbmZpZ1trXSA9IHsuLi5pbnRlcmFjdGlvbkNvbmZpZ1trXSwgZW5hYmxlZDogZmFsc2V9O1xuICAgICAgfVxuICAgIH0pO1xuICB9XG5cbiAgY29uc3QgbmV3U3RhdGUgPSB7XG4gICAgLi4uc3RhdGUsXG4gICAgaW50ZXJhY3Rpb25Db25maWdcbiAgfTtcblxuICBpZiAoY29uZmlnLmlkID09PSAnZ2VvY29kZXInICYmICFjb25maWcuZW5hYmxlZCkge1xuICAgIHJldHVybiByZW1vdmVEYXRhc2V0VXBkYXRlcihuZXdTdGF0ZSwge2RhdGFJZDogJ2dlb2NvZGVyX2RhdGFzZXQnfSk7XG4gIH1cblxuICByZXR1cm4gbmV3U3RhdGU7XG59XG5cbi8qKlxuICogVHJpZ2dlciBsYXllciBjbGljayBldmVudCB3aXRoIGNsaWNrZWQgb2JqZWN0XG4gKiBAbWVtYmVyb2YgdmlzU3RhdGVVcGRhdGVyc1xuICogQHB1YmxpY1xuICovXG5leHBvcnQgY29uc3QgbGF5ZXJDbGlja1VwZGF0ZXIgPSAoXG4gIHN0YXRlOiBWaXNTdGF0ZSxcbiAgYWN0aW9uOiBWaXNTdGF0ZUFjdGlvbnMuT25MYXllckNsaWNrVXBkYXRlckFjdGlvblxuKTogVmlzU3RhdGUgPT4gKHtcbiAgLi4uc3RhdGUsXG4gIG1vdXNlUG9zOiBzdGF0ZS5pbnRlcmFjdGlvbkNvbmZpZy5jb29yZGluYXRlLmVuYWJsZWRcbiAgICA/IHtcbiAgICAgICAgLi4uc3RhdGUubW91c2VQb3MsXG4gICAgICAgIHBpbm5lZDogc3RhdGUubW91c2VQb3MucGlubmVkID8gbnVsbCA6IGNsb25lRGVlcChzdGF0ZS5tb3VzZVBvcylcbiAgICAgIH1cbiAgICA6IHN0YXRlLm1vdXNlUG9zLFxuICBjbGlja2VkOiBhY3Rpb24uaW5mbyAmJiBhY3Rpb24uaW5mby5waWNrZWQgPyBhY3Rpb24uaW5mbyA6IG51bGxcbn0pO1xuXG4vKipcbiAqIFRyaWdnZXIgbWFwIGNsaWNrIGV2ZW50LCB1bnNlbGVjdCBjbGlja2VkIG9iamVjdFxuICogQG1lbWJlcm9mIHZpc1N0YXRlVXBkYXRlcnNcbiAqIEBwdWJsaWNcbiAqL1xuZXhwb3J0IGNvbnN0IG1hcENsaWNrVXBkYXRlciA9IChcbiAgc3RhdGU6IFZpc1N0YXRlLFxuICBhY3Rpb246IFZpc1N0YXRlQWN0aW9ucy5Pbk1hcENsaWNrVXBkYXRlckFjdGlvblxuKTogVmlzU3RhdGUgPT4ge1xuICByZXR1cm4ge1xuICAgIC4uLnN0YXRlLFxuICAgIGNsaWNrZWQ6IG51bGxcbiAgfTtcbn07XG5cbi8qKlxuICogVHJpZ2dlciBtYXAgbW92ZSBldmVudFxuICogQG1lbWJlcm9mIHZpc1N0YXRlVXBkYXRlcnNcbiAqIEBwdWJsaWNcbiAqL1xuZXhwb3J0IGNvbnN0IG1vdXNlTW92ZVVwZGF0ZXIgPSAoXG4gIHN0YXRlOiBWaXNTdGF0ZSxcbiAge2V2dH06IFZpc1N0YXRlQWN0aW9ucy5Pbk1vdXNlTW92ZVVwZGF0ZXJBY3Rpb25cbik6IFZpc1N0YXRlID0+IHtcbiAgaWYgKE9iamVjdC52YWx1ZXMoc3RhdGUuaW50ZXJhY3Rpb25Db25maWcpLnNvbWUoY29uZmlnID0+IGNvbmZpZy5lbmFibGVkKSkge1xuICAgIHJldHVybiB7XG4gICAgICAuLi5zdGF0ZSxcbiAgICAgIG1vdXNlUG9zOiB7XG4gICAgICAgIC4uLnN0YXRlLm1vdXNlUG9zLFxuICAgICAgICAuLi4oQXJyYXkuaXNBcnJheShldnQucG9pbnQpID8ge21vdXNlUG9zaXRpb246IFsuLi5ldnQucG9pbnRdfSA6IHt9KSxcbiAgICAgICAgLi4uKEFycmF5LmlzQXJyYXkoZXZ0LmxuZ0xhdCkgPyB7Y29vcmRpbmF0ZTogWy4uLmV2dC5sbmdMYXRdfSA6IHt9KVxuICAgICAgfVxuICAgIH07XG4gIH1cblxuICByZXR1cm4gc3RhdGU7XG59O1xuLyoqXG4gKiBUb2dnbGUgdmlzaWJpbGl0eSBvZiBhIGxheWVyIGZvciBhIHNwbGl0IG1hcFxuICogQG1lbWJlcm9mIHZpc1N0YXRlVXBkYXRlcnNcbiAqIEBwdWJsaWNcbiAqL1xuZXhwb3J0IGNvbnN0IHRvZ2dsZVNwbGl0TWFwVXBkYXRlciA9IChcbiAgc3RhdGU6IFZpc1N0YXRlLFxuICBhY3Rpb246IE1hcFN0YXRlQWN0aW9ucy5Ub2dnbGVTcGxpdE1hcFVwZGF0ZXJBY3Rpb25cbik6IFZpc1N0YXRlID0+XG4gIHN0YXRlLnNwbGl0TWFwcyAmJiBzdGF0ZS5zcGxpdE1hcHMubGVuZ3RoID09PSAwXG4gICAgPyB7XG4gICAgICAgIC4uLnN0YXRlLFxuICAgICAgICAvLyBtYXliZSB3ZSBzaG91bGQgdXNlIGFuIGFycmF5IHRvIHN0b3JlIHN0YXRlIGZvciBhIHNpbmdsZSBtYXAgYXMgd2VsbFxuICAgICAgICAvLyBpZiBjdXJyZW50IG1hcHMgbGVuZ3RoIGlzIGVxdWFsIHRvIDAgaXQgbWVhbnMgdGhhdCB3ZSBhcmUgYWJvdXQgdG8gc3BsaXQgdGhlIHZpZXdcbiAgICAgICAgc3BsaXRNYXBzOiBjb21wdXRlU3BsaXRNYXBMYXllcnMoc3RhdGUubGF5ZXJzLCB7ZHVwbGljYXRlOiBmYWxzZX0pXG4gICAgICB9XG4gICAgOiBjbG9zZVNwZWNpZmljTWFwQXRJbmRleChzdGF0ZSwgYWN0aW9uKTtcblxuLyoqXG4gKiBUb2dnbGUgdmlzaWJpbGl0eSBvZiBhIGxheWVyIGluIGEgc3BsaXQgbWFwXG4gKiBAbWVtYmVyb2YgdmlzU3RhdGVVcGRhdGVyc1xuICogQHB1YmxpY1xuICovXG5leHBvcnQgY29uc3QgdG9nZ2xlTGF5ZXJGb3JNYXBVcGRhdGVyID0gKFxuICBzdGF0ZTogVmlzU3RhdGUsXG4gIHttYXBJbmRleCwgbGF5ZXJJZH06IFZpc1N0YXRlQWN0aW9ucy5Ub2dnbGVMYXllckZvck1hcFVwZGF0ZXJBY3Rpb25cbik6IFZpc1N0YXRlID0+IHtcbiAgY29uc3Qge3NwbGl0TWFwc30gPSBzdGF0ZTtcblxuICByZXR1cm4ge1xuICAgIC4uLnN0YXRlLFxuICAgIHNwbGl0TWFwczogc3BsaXRNYXBzLm1hcCgoc20sIGkpID0+XG4gICAgICBpID09PSBtYXBJbmRleFxuICAgICAgICA/IHtcbiAgICAgICAgICAgIC4uLnNwbGl0TWFwc1tpXSxcbiAgICAgICAgICAgIGxheWVyczoge1xuICAgICAgICAgICAgICAuLi5zcGxpdE1hcHNbaV0ubGF5ZXJzLFxuICAgICAgICAgICAgICAvLyBpZiBsYXllcklkIG5vdCBpbiBsYXllcnMsIHNldCBpdCB0byB2aXNpYmxlXG4gICAgICAgICAgICAgIFtsYXllcklkXTogIXNwbGl0TWFwc1tpXS5sYXllcnNbbGF5ZXJJZF1cbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG4gICAgICAgIDogc21cbiAgICApXG4gIH07XG59O1xuXG4vKipcbiAqIEFkZCBuZXcgZGF0YXNldCB0byBgdmlzU3RhdGVgLCB3aXRoIG9wdGlvbiB0byBsb2FkIGEgbWFwIGNvbmZpZyBhbG9uZyB3aXRoIHRoZSBkYXRhc2V0c1xuICogQG1lbWJlcm9mIHZpc1N0YXRlVXBkYXRlcnNcbiAqIEBwdWJsaWNcbiAqL1xuLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIGNvbXBsZXhpdHlcbmV4cG9ydCBjb25zdCB1cGRhdGVWaXNEYXRhVXBkYXRlciA9IChcbiAgc3RhdGU6IFZpc1N0YXRlLFxuICBhY3Rpb246IFZpc1N0YXRlQWN0aW9ucy5VcGRhdGVWaXNEYXRhVXBkYXRlckFjdGlvblxuKTogVmlzU3RhdGUgPT4ge1xuICAvLyBkYXRhc2V0cyBjYW4gYmUgYSBzaW5nbGUgZGF0YSBlbnRyaWVzIG9yIGFuIGFycmF5IG9mIG11bHRpcGxlIGRhdGEgZW50cmllc1xuICBjb25zdCB7Y29uZmlnLCBvcHRpb25zfSA9IGFjdGlvbjtcblxuICAvLyBhcHBseSBjb25maWcgaWYgcGFzc2VkIGZyb20gYWN0aW9uXG4gIC8vIFRPRE86IHdlIGRvbid0IGhhbmRsZSBhc3luIG1lcmdlcnMgaGVyZSB5ZXRcbiAgY29uc3QgcHJldmlvdXNTdGF0ZSA9IGNvbmZpZ1xuICAgID8gcmVjZWl2ZU1hcENvbmZpZ1VwZGF0ZXIoc3RhdGUsIHtcbiAgICAgICAgcGF5bG9hZDoge2NvbmZpZywgb3B0aW9uc31cbiAgICAgIH0pXG4gICAgOiBzdGF0ZTtcblxuICBjb25zdCBkYXRhc2V0cyA9IHRvQXJyYXkoYWN0aW9uLmRhdGFzZXRzKTtcblxuICBjb25zdCBuZXdEYXRhRW50cmllcyA9IGRhdGFzZXRzLnJlZHVjZShcbiAgICAvLyBAdHMtZXhwZWN0LWVycm9yICBUeXBlICd7fScgaXMgbWlzc2luZyB0aGUgZm9sbG93aW5nIHByb3BlcnRpZXMgZnJvbSB0eXBlICdQcm90b0RhdGFzZXQnOiBkYXRhLCBpbmZvXG4gICAgKGFjY3UsIHtpbmZvID0ge30sIC4uLnJlc3R9ID0ge30pID0+ICh7XG4gICAgICAuLi5hY2N1LFxuICAgICAgLi4uKGNyZWF0ZU5ld0RhdGFFbnRyeSh7aW5mbywgLi4ucmVzdH0sIHN0YXRlLmRhdGFzZXRzKSB8fCB7fSlcbiAgICB9KSxcbiAgICB7fVxuICApO1xuXG4gIC8vIHNhdmUgbmV3IGRhdGFzZXQgZW50cnkgdG8gc3RhdGVcbiAgY29uc3QgbWVyZ2VkU3RhdGUgPSB7XG4gICAgLi4ucHJldmlvdXNTdGF0ZSxcbiAgICBkYXRhc2V0czogbWVyZ2VEYXRhc2V0c0J5T3JkZXIocHJldmlvdXNTdGF0ZSwgbmV3RGF0YUVudHJpZXMpXG4gIH07XG5cbiAgLy8gbWVyZ2Ugc3RhdGUgd2l0aCBjb25maWcgdG8gYmUgbWVyZ2VkXG4gIGNvbnN0IGxheWVyTWVyZ2VycyA9IHN0YXRlLm1lcmdlcnMuZmlsdGVyKG0gPT4gbS53YWl0Rm9yTGF5ZXJEYXRhKTtcbiAgY29uc3QgZGF0YXNldE1lcmdlcnMgPSBzdGF0ZS5tZXJnZXJzLmZpbHRlcihtID0+ICFsYXllck1lcmdlcnMuaW5jbHVkZXMobSkpO1xuXG4gIGNvbnN0IG5ld0RhdGFJZHMgPSBPYmplY3Qua2V5cyhuZXdEYXRhRW50cmllcyk7XG4gIGNvbnN0IHBvc3RNZXJnZXJQYXlsb2FkID0ge1xuICAgIG5ld0RhdGFJZHMsXG4gICAgb3B0aW9ucyxcbiAgICBsYXllck1lcmdlcnNcbiAgfTtcblxuICByZXR1cm4gYXBwbHlNZXJnZXJzVXBkYXRlcihtZXJnZWRTdGF0ZSwge21lcmdlcnM6IGRhdGFzZXRNZXJnZXJzLCBwb3N0TWVyZ2VyUGF5bG9hZH0pO1xufTtcblxuLyoqXG4gKiBBZGQgbmV3IGRhdGFzZXQgdG8gYHZpc1N0YXRlYCwgd2l0aCBvcHRpb24gdG8gbG9hZCBhIG1hcCBjb25maWcgYWxvbmcgd2l0aCB0aGUgZGF0YXNldHNcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGFwcGx5TWVyZ2Vyc1VwZGF0ZXIoXG4gIHN0YXRlOiBWaXNTdGF0ZSxcbiAgYWN0aW9uOiB7XG4gICAgbWVyZ2VyczogTWVyZ2VyPGFueT5bXTtcbiAgICBwb3N0TWVyZ2VyUGF5bG9hZDogUG9zdE1lcmdlclBheWxvYWQ7XG4gIH1cbik6IFZpc1N0YXRlIHtcbiAgY29uc3Qge21lcmdlcnMsIHBvc3RNZXJnZXJQYXlsb2FkfSA9IGFjdGlvbjtcblxuICAvLyBtZXJnZSBzdGF0ZSB3aXRoIGNvbmZpZyB0byBiZSBtZXJnZWRcbiAgY29uc3QgbWVyZ2VTdGF0ZVJlc3VsdCA9IG1lcmdlU3RhdGVGcm9tTWVyZ2VycyhcbiAgICBzdGF0ZSxcbiAgICB7XG4gICAgICAuLi5JTklUSUFMX1ZJU19TVEFURSxcbiAgICAgIC4uLnN0YXRlLmluaXRpYWxTdGF0ZVxuICAgIH0sXG4gICAgbWVyZ2VycyxcbiAgICAvLyBuZXdEYXRhSWRzLFxuICAgIHBvc3RNZXJnZXJQYXlsb2FkXG4gICk7XG5cbiAgLy8gaWYgYWxsIG1lcmdlZCwga2lja3VwIHBvc3QgbWVyZ2UgcHJvY2Vzc1xuICAvLyBpZiBub3Qgd2FpdFxuICByZXR1cm4gbWVyZ2VTdGF0ZVJlc3VsdC5hbGxNZXJnZWRcbiAgICA/IHBvc3RNZXJnZVVwZGF0ZXIobWVyZ2VTdGF0ZVJlc3VsdC5tZXJnZWRTdGF0ZSwgcG9zdE1lcmdlclBheWxvYWQpXG4gICAgOiBtZXJnZVN0YXRlUmVzdWx0Lm1lcmdlZFN0YXRlO1xufVxuXG4vKipcbiAqIEFkZCBuZXcgZGF0YXNldCB0byBgdmlzU3RhdGVgLCB3aXRoIG9wdGlvbiB0byBsb2FkIGEgbWFwIGNvbmZpZyBhbG9uZyB3aXRoIHRoZSBkYXRhc2V0c1xuICovXG5mdW5jdGlvbiBwb3N0TWVyZ2VVcGRhdGVyKG1lcmdlZFN0YXRlOiBWaXNTdGF0ZSwgcG9zdE1lcmdlclBheWxvYWQ6IFBvc3RNZXJnZXJQYXlsb2FkKTogVmlzU3RhdGUge1xuICBjb25zdCB7bmV3RGF0YUlkcywgb3B0aW9ucywgbGF5ZXJNZXJnZXJzfSA9IHBvc3RNZXJnZXJQYXlsb2FkO1xuICBjb25zdCBuZXdGaWx0ZXJzID0gbWVyZ2VkU3RhdGUuZmlsdGVycy5maWx0ZXIoZiA9PlxuICAgIGYuZGF0YUlkLmZpbmQoZkRhdGFJZCA9PiBuZXdEYXRhSWRzLmluY2x1ZGVzKGZEYXRhSWQpKVxuICApO1xuICBjb25zdCBkYXRhc2V0RmlsdGVyZWQ6IHN0cmluZ1tdID0gdW5pcShcbiAgICBuZXdGaWx0ZXJzLnJlZHVjZSgoYWNjdSwgZikgPT4gWy4uLmFjY3UsIC4uLmYuZGF0YUlkXSwgW10gYXMgc3RyaW5nW10pXG4gICk7XG4gIGNvbnN0IGRhdGFFbXB0eSA9IG5ld0RhdGFJZHMubGVuZ3RoIDwgMTtcblxuICBsZXQgbmV3TGF5ZXJzID0gIWRhdGFFbXB0eVxuICAgID8gbWVyZ2VkU3RhdGUubGF5ZXJzLmZpbHRlcihsID0+IGwuY29uZmlnLmRhdGFJZCAmJiBuZXdEYXRhSWRzLmluY2x1ZGVzKGwuY29uZmlnLmRhdGFJZCkpXG4gICAgOiBbXTtcblxuICBjb25zdCBuZXdEYXRhRW50cmllcyA9IG5ld0RhdGFJZHMucmVkdWNlKFxuICAgIChhY2N1LCBpZCkgPT4gKHtcbiAgICAgIC4uLmFjY3UsXG4gICAgICBbaWRdOiBtZXJnZWRTdGF0ZS5kYXRhc2V0c1tpZF1cbiAgICB9KSxcbiAgICB7fVxuICApO1xuXG4gIGlmICghbmV3TGF5ZXJzLmxlbmd0aCAmJiAob3B0aW9ucyB8fCB7fSkuYXV0b0NyZWF0ZUxheWVycyAhPT0gZmFsc2UpIHtcbiAgICAvLyBubyBsYXllciBtZXJnZWQsIGZpbmQgZGVmYXVsdHNcbiAgICBjb25zdCByZXN1bHQgPSBhZGREZWZhdWx0TGF5ZXJzKG1lcmdlZFN0YXRlLCBuZXdEYXRhRW50cmllcyk7XG4gICAgbWVyZ2VkU3RhdGUgPSByZXN1bHQuc3RhdGU7XG4gICAgbmV3TGF5ZXJzID0gcmVzdWx0Lm5ld0xheWVycztcbiAgfVxuXG4gIGlmIChtZXJnZWRTdGF0ZS5zcGxpdE1hcHMubGVuZ3RoKSB7XG4gICAgLy8gaWYgbWFwIGlzIHNwbGl0LCBhZGQgbmV3IGxheWVycyB0byBzcGxpdE1hcHNcbiAgICBuZXdMYXllcnMgPSBtZXJnZWRTdGF0ZS5sYXllcnMuZmlsdGVyKFxuICAgICAgbCA9PiBsLmNvbmZpZy5kYXRhSWQgJiYgbmV3RGF0YUlkcy5pbmNsdWRlcyhsLmNvbmZpZy5kYXRhSWQpXG4gICAgKTtcbiAgICBtZXJnZWRTdGF0ZSA9IHtcbiAgICAgIC4uLm1lcmdlZFN0YXRlLFxuICAgICAgc3BsaXRNYXBzOiBhZGROZXdMYXllcnNUb1NwbGl0TWFwKG1lcmdlZFN0YXRlLnNwbGl0TWFwcywgbmV3TGF5ZXJzKVxuICAgIH07XG4gIH1cblxuICAvLyBpZiBubyB0b29sdGlwcyBtZXJnZWQgYWRkIGRlZmF1bHQgdG9vbHRpcHNcbiAgbmV3RGF0YUlkcy5mb3JFYWNoKGRhdGFJZCA9PiB7XG4gICAgY29uc3QgdG9vbHRpcEZpZWxkcyA9IG1lcmdlZFN0YXRlLmludGVyYWN0aW9uQ29uZmlnLnRvb2x0aXAuY29uZmlnLmZpZWxkc1RvU2hvd1tkYXRhSWRdO1xuICAgIC8vIGxvYWRpbmcgZGF0YXNldDogYXV0b0NyZWF0ZVRvb2x0aXBzIGlzIGZhbHNlIGFuZCB3ZSBkb24ndCB3YW50IHRvIHJ1biBhZGREZWZhdWx0VG9vbHRpcHMgd2hlbiB0b29sdGlwRmllbGRzIGlzIGVtcHR5XG4gICAgaWYgKFxuICAgICAgb3B0aW9ucz8uYXV0b0NyZWF0ZVRvb2x0aXBzICE9PSBmYWxzZSAmJlxuICAgICAgKCFBcnJheS5pc0FycmF5KHRvb2x0aXBGaWVsZHMpIHx8ICF0b29sdGlwRmllbGRzLmxlbmd0aClcbiAgICApIHtcbiAgICAgIC8vIGFkZGluZyBkYXRhc2V0OiBhdXRvQ3JlYXRlVG9vbHRpcHMgaXMgdHJ1ZVxuICAgICAgbWVyZ2VkU3RhdGUgPSBhZGREZWZhdWx0VG9vbHRpcHMobWVyZ2VkU3RhdGUsIG5ld0RhdGFFbnRyaWVzW2RhdGFJZF0pO1xuICAgIH1cbiAgfSk7XG5cbiAgY29uc3QgdXBkYXRlZERhdGFzZXRzID0gZGF0YUVtcHR5XG4gICAgPyBPYmplY3Qua2V5cyhtZXJnZWRTdGF0ZS5kYXRhc2V0cylcbiAgICA6IHVuaXEoT2JqZWN0LmtleXMobmV3RGF0YUVudHJpZXMpLmNvbmNhdChkYXRhc2V0RmlsdGVyZWQpKTtcblxuICBsZXQgdXBkYXRlZFN0YXRlID0gdXBkYXRlQWxsTGF5ZXJEb21haW5EYXRhKG1lcmdlZFN0YXRlLCB1cGRhdGVkRGF0YXNldHMsIHVuZGVmaW5lZCk7XG5cbiAgLy8gcmVnaXN0ZXIgbGF5ZXIgYW5pbWF0aW9uIGRvbWFpbixcbiAgLy8gbmVlZCB0byBiZSBjYWxsZWQgYWZ0ZXIgbGF5ZXIgZGF0YSBpcyBjYWxjdWxhdGVkXG4gIHVwZGF0ZWRTdGF0ZSA9IHVwZGF0ZUFuaW1hdGlvbkRvbWFpbih1cGRhdGVkU3RhdGUpO1xuXG4gIC8vIHRyeSB0byBwcm9jZXNzIGxheWVyTWVyZ2VycyBhZnRlciBkYXRhc2V0K2RhdGFzZXRNZXJnZXJzXG4gIHJldHVybiBsYXllck1lcmdlcnMgJiYgbGF5ZXJNZXJnZXJzLmxlbmd0aCA+IDBcbiAgICA/IGFwcGx5TWVyZ2Vyc1VwZGF0ZXIodXBkYXRlZFN0YXRlLCB7XG4gICAgICAgIG1lcmdlcnM6IGxheWVyTWVyZ2VycyxcbiAgICAgICAgcG9zdE1lcmdlclBheWxvYWQ6IHsuLi5wb3N0TWVyZ2VyUGF5bG9hZCwgbGF5ZXJNZXJnZXJzOiBbXX1cbiAgICAgIH0pXG4gICAgOiB1cGRhdGVkU3RhdGU7XG59XG5cbi8qKlxuICogUmVuYW1lIGFuIGV4aXN0aW5nIGRhdGFzZXQgaW4gYHZpc1N0YXRlYFxuICogQG1lbWJlcm9mIHZpc1N0YXRlVXBkYXRlcnNcbiAqIEBwdWJsaWNcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHJlbmFtZURhdGFzZXRVcGRhdGVyKFxuICBzdGF0ZTogVmlzU3RhdGUsXG4gIGFjdGlvbjogVmlzU3RhdGVBY3Rpb25zLlJlbmFtZURhdGFzZXRVcGRhdGVyQWN0aW9uXG4pOiBWaXNTdGF0ZSB7XG4gIHJldHVybiB1cGRhdGVEYXRhc2V0UHJvcHNVcGRhdGVyKHN0YXRlLCB7ZGF0YUlkOiBhY3Rpb24uZGF0YUlkLCBwcm9wczoge2xhYmVsOiBhY3Rpb24ubGFiZWx9fSk7XG59XG5cbmNvbnN0IEFMTE9XRURfVVBEQVRFX0RBVEFTRVRfUFJPUFMgPSBbJ2xhYmVsJywgJ2NvbG9yJywgJ21ldGFkYXRhJ107XG5cbi8qKlxuICogVmFsaWRhdGVzIHByb3BlcnRpZXMgYmVmb3JlIHVwZGF0aW5nIHRoZSBkYXRhc2V0LlxuICogTWFrZXMgc3VyZSBlYWNoIHByb3BlcnR5IGlzIGluIHRoZSBhbGxvd2VkIGxpc3RcbiAqIE1ha2VzIHN1cmUgY29sb3IgdmFsdWUgaXMgUkdCXG4gKiBQZXJmb3JtcyBkZWVwIG1lcmdlIHdoZW4gdXBkYXRpbmcgbWV0YWRhdGFcbiAqL1xuY29uc3QgdmFsaWRhdGVEYXRhc2V0VXBkYXRlUHJvcHMgPSAocHJvcHMsIGRhdGFzZXQpID0+IHtcbiAgY29uc3QgdmFsaWRhdGVkUHJvcHMgPSBPYmplY3QuZW50cmllcyhwcm9wcykucmVkdWNlKChhY2MsIGVudHJ5KSA9PiB7XG4gICAgY29uc3QgW2tleSwgdmFsdWVdID0gZW50cnk7XG4gICAgLy8gaXMgaXQgYWxsb3dlZCA/XG4gICAgaWYgKCFBTExPV0VEX1VQREFURV9EQVRBU0VUX1BST1BTLmluY2x1ZGVzKGtleSkpIHtcbiAgICAgIHJldHVybiBhY2M7XG4gICAgfVxuXG4gICAgLy8gaWYgd2UgYXJlIGFkZGluZyBhIGNvbG9yIGJ1dCBpdCBpcyBub3QgUkdCIHdlIGRvbid0IGFjY2VwdCB0aGUgdmFsdWVcbiAgICAvLyBpbiB0aGUgZnV0dXJlIGFzIHdlIGFkZCBtb3JlIHByb3BzIHdlIHNob3VsZCBjaGFuZ2UgdGhpcyBpZiBpbnRvIGEgc3dpdGNoXG4gICAgaWYgKGtleSA9PT0gJ2NvbG9yJyAmJiAhaXNSZ2JDb2xvcih2YWx1ZSkpIHtcbiAgICAgIHJldHVybiBhY2M7XG4gICAgfVxuXG4gICAgLy8gZG8gd2UgbmVlZCBkZWVwIG1lcmdlID9cbiAgICByZXR1cm4gey4uLmFjYywgW2tleV06IGlzUGxhaW5PYmplY3QodmFsdWUpID8gZGVlcG1lcmdlKGRhdGFzZXRba2V5XSB8fCB7fSwgdmFsdWUpIDogdmFsdWV9O1xuICB9LCB7fSk7XG5cbiAgcmV0dXJuIHZhbGlkYXRlZFByb3BzO1xufTtcblxuLyoqXG4gKiBVcGRhdGUgRGF0YXNldCBwcm9wcyAobGFiZWwsIGNvbG9yLCBtZXRhKS4gRG8gbm90IHVzZSB0byB1cGRhdGUgZGF0YSBvciBhbnkgcmVsYXRlZCBwcm9wZXJ0aWVzXG4gKiBAbWVtYmVyb2YgdmlzU3RhdGVVcGRhdGVyc1xuICogQHB1YmxpY1xuICovXG5leHBvcnQgZnVuY3Rpb24gdXBkYXRlRGF0YXNldFByb3BzVXBkYXRlcihcbiAgc3RhdGU6IFZpc1N0YXRlLFxuICBhY3Rpb246IFZpc1N0YXRlQWN0aW9ucy5VcGRhdGVEYXRhc2V0UHJvcHNVcGRhdGVyQWN0aW9uXG4pOiBWaXNTdGF0ZSB7XG4gIGNvbnN0IHtkYXRhSWQsIHByb3BzfSA9IGFjdGlvbjtcbiAgY29uc3Qge2RhdGFzZXRzfSA9IHN0YXRlO1xuICBjb25zdCBleGlzdGluZyA9IGRhdGFzZXRzW2RhdGFJZF07XG5cbiAgaWYgKGV4aXN0aW5nKSB7XG4gICAgY29uc3QgdmFsaWRhdGVkUHJvcHMgPSB2YWxpZGF0ZURhdGFzZXRVcGRhdGVQcm9wcyhwcm9wcywgZXhpc3RpbmcpO1xuICAgIC8vICB2YWxpZGF0ZSBwcm9wczoganVzdCBjb2xvciBmb3Igbm93XG4gICAgLy8gIHdlIG9ubHkgYWxsb3cgbGFiZWwsIGNvbG9yIGFuZCBtZXRhIHRvIGJlIHVwZGF0ZWRcbiAgICAvLyBjb25zdCBuZXdUYWJsZSA9IGNvcHlUYWJsZUFuZFVwZGF0ZShleGlzdGluZywgdmFsaWRhdGVkUHJvcHMpO1xuICAgIHJldHVybiB7XG4gICAgICAuLi5zdGF0ZSxcbiAgICAgIGRhdGFzZXRzOiB7XG4gICAgICAgIC4uLmRhdGFzZXRzLFxuICAgICAgICBbZGF0YUlkXTogY29weVRhYmxlQW5kVXBkYXRlKGV4aXN0aW5nLCB2YWxpZGF0ZWRQcm9wcylcbiAgICAgIH1cbiAgICB9O1xuICB9XG5cbiAgcmV0dXJuIHN0YXRlO1xufVxuXG4vKipcbiAqIFdoZW4gYSB1c2VyIGNsaWNrcyBvbiB0aGUgc3BlY2lmaWMgbWFwIGNsb3NpbmcgaWNvblxuICogdGhlIGFwcGxpY2F0aW9uIHdpbGwgY2xvc2UgdGhlIHNlbGVjdGVkIG1hcFxuICogYW5kIHdpbGwgbWVyZ2UgdGhlIHJlbWFpbmluZyBvbmUgd2l0aCB0aGUgZ2xvYmFsIHN0YXRlXG4gKiBUT0RPOiBpIHRoaW5rIGluIHRoZSBmdXR1cmUgdGhpcyBhY3Rpb24gc2hvdWxkIGJlIGNhbGxlZCBtZXJnZSBtYXAgbGF5ZXJzIHdpdGggZ2xvYmFsIHNldHRpbmdzXG4gKiBAcGFyYW0ge09iamVjdH0gc3RhdGUgYHZpc1N0YXRlYFxuICogQHBhcmFtIHtPYmplY3R9IGFjdGlvbiBhY3Rpb25cbiAqIEByZXR1cm5zIHtPYmplY3R9IG5leHRTdGF0ZVxuICovXG5leHBvcnQgZnVuY3Rpb24gY2xvc2VTcGVjaWZpY01hcEF0SW5kZXg8UyBleHRlbmRzIFZpc1N0YXRlPihcbiAgc3RhdGU6IFMsXG4gIGFjdGlvbjogTWFwU3RhdGVBY3Rpb25zLlRvZ2dsZVNwbGl0TWFwVXBkYXRlckFjdGlvblxuKTogUyB7XG4gIC8vIHJldHJpZXZlIGxheWVycyBtZXRhIGRhdGEgZnJvbSB0aGUgcmVtYWluaW5nIG1hcCB0aGF0IHdlIG5lZWQgdG8ga2VlcFxuICBjb25zdCBpbmRleFRvUmV0cmlldmUgPSAxIC0gYWN0aW9uLnBheWxvYWQ7XG4gIGNvbnN0IG1hcExheWVycyA9IHN0YXRlLnNwbGl0TWFwc1tpbmRleFRvUmV0cmlldmVdPy5sYXllcnM7XG4gIGNvbnN0IHtsYXllcnN9ID0gc3RhdGU7XG5cbiAgLy8gdXBkYXRlIGxheWVyIHZpc2liaWxpdHlcbiAgY29uc3QgbmV3TGF5ZXJzID0gbGF5ZXJzLm1hcChsYXllciA9PlxuICAgIG1hcExheWVycyAmJiAhbWFwTGF5ZXJzW2xheWVyLmlkXSAmJiBsYXllci5jb25maWcuaXNWaXNpYmxlXG4gICAgICA/IGxheWVyLnVwZGF0ZUxheWVyQ29uZmlnKHtcbiAgICAgICAgICAvLyBpZiBsYXllci5pZCBpcyBub3QgaW4gbWFwTGF5ZXJzLCBpdCBzaG91bGQgYmUgaW5WaXNpYmxlXG4gICAgICAgICAgaXNWaXNpYmxlOiBmYWxzZVxuICAgICAgICB9KVxuICAgICAgOiBsYXllclxuICApO1xuXG4gIC8vIGRlbGV0ZSBtYXBcbiAgcmV0dXJuIHtcbiAgICAuLi5zdGF0ZSxcbiAgICBsYXllcnM6IG5ld0xheWVycyxcbiAgICBzcGxpdE1hcHM6IFtdXG4gIH07XG59XG5cbi8qKlxuICogVHJpZ2dlciBmaWxlIGxvYWRpbmcgZGlzcGF0Y2ggYGFkZERhdGFUb01hcGAgaWYgc3VjY2VlZCwgb3IgYGxvYWRGaWxlc0VycmAgaWYgZmFpbGVkXG4gKiBAbWVtYmVyb2YgdmlzU3RhdGVVcGRhdGVyc1xuICogQHB1YmxpY1xuICovXG5leHBvcnQgY29uc3QgbG9hZEZpbGVzVXBkYXRlciA9IChcbiAgc3RhdGU6IFZpc1N0YXRlLFxuICBhY3Rpb246IFZpc1N0YXRlQWN0aW9ucy5Mb2FkRmlsZXNVcGRhdGVyQWN0aW9uXG4pOiBWaXNTdGF0ZSA9PiB7XG4gIGNvbnN0IHtmaWxlcywgb25GaW5pc2ggPSBsb2FkRmlsZXNTdWNjZXNzfSA9IGFjdGlvbjtcbiAgaWYgKCFmaWxlcy5sZW5ndGgpIHtcbiAgICByZXR1cm4gc3RhdGU7XG4gIH1cblxuICBjb25zdCBmaWxlTG9hZGluZ1Byb2dyZXNzID0gQXJyYXkuZnJvbShmaWxlcykucmVkdWNlKFxuICAgIChhY2N1LCBmLCBpKSA9PiBtZXJnZV8oaW5pdGlhbEZpbGVMb2FkaW5nUHJvZ3Jlc3MoZiwgaSkpKGFjY3UpLFxuICAgIHt9XG4gICk7XG5cbiAgY29uc3QgZmlsZUxvYWRpbmcgPSB7XG4gICAgZmlsZUNhY2hlOiBbXSxcbiAgICBmaWxlc1RvTG9hZDogZmlsZXMsXG4gICAgb25GaW5pc2hcbiAgfTtcblxuICBjb25zdCBuZXh0U3RhdGUgPSBtZXJnZV8oe2ZpbGVMb2FkaW5nUHJvZ3Jlc3MsIGZpbGVMb2FkaW5nfSkoc3RhdGUpO1xuXG4gIHJldHVybiBsb2FkTmV4dEZpbGVVcGRhdGVyKG5leHRTdGF0ZSk7XG59O1xuXG4vKipcbiAqIFN1Y2Vzc2Z1bGx5IGxvYWRlZCBvbmUgZmlsZSwgbW92ZSBvbiB0byB0aGUgbmV4dCBvbmVcbiAqIEBtZW1iZXJvZiB2aXNTdGF0ZVVwZGF0ZXJzXG4gKiBAcHVibGljXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBsb2FkRmlsZVN0ZXBTdWNjZXNzVXBkYXRlcihcbiAgc3RhdGU6IFZpc1N0YXRlLFxuICBhY3Rpb246IFZpc1N0YXRlQWN0aW9ucy5Mb2FkRmlsZVN0ZXBTdWNjZXNzQWN0aW9uXG4pOiBWaXNTdGF0ZSB7XG4gIGlmICghc3RhdGUuZmlsZUxvYWRpbmcpIHtcbiAgICByZXR1cm4gc3RhdGU7XG4gIH1cbiAgY29uc3Qge2ZpbGVOYW1lLCBmaWxlQ2FjaGV9ID0gYWN0aW9uO1xuICBjb25zdCB7ZmlsZXNUb0xvYWQsIG9uRmluaXNofSA9IHN0YXRlLmZpbGVMb2FkaW5nO1xuICBjb25zdCBzdGF0ZVdpdGhQcm9ncmVzcyA9IHVwZGF0ZUZpbGVMb2FkaW5nUHJvZ3Jlc3NVcGRhdGVyKHN0YXRlLCB7XG4gICAgZmlsZU5hbWUsXG4gICAgcHJvZ3Jlc3M6IHtwZXJjZW50OiAxLCBtZXNzYWdlOiAnRG9uZSd9XG4gIH0pO1xuXG4gIC8vIHNhdmUgcHJvY2Vzc2VkIGZpbGUgdG8gZmlsZUNhY2hlXG4gIGNvbnN0IHN0YXRlV2l0aENhY2hlID0gcGlja18oJ2ZpbGVMb2FkaW5nJykobWVyZ2VfKHtmaWxlQ2FjaGV9KSkoc3RhdGVXaXRoUHJvZ3Jlc3MpO1xuXG4gIHJldHVybiB3aXRoVGFzayhcbiAgICBzdGF0ZVdpdGhDYWNoZSxcbiAgICBERUxBWV9UQVNLKDIwMCkubWFwKGZpbGVzVG9Mb2FkLmxlbmd0aCA/IGxvYWROZXh0RmlsZSA6ICgpID0+IG9uRmluaXNoKGZpbGVDYWNoZSkpXG4gICk7XG59XG5cbi8vIHdpdGhUYXNrPFQ+KHN0YXRlOiBULCB0YXNrOiBhbnkpOiBUXG5cbi8qKlxuICpcbiAqIEBtZW1iZXJvZiB2aXNTdGF0ZVVwZGF0ZXJzXG4gKiBAcHVibGljXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBsb2FkTmV4dEZpbGVVcGRhdGVyKHN0YXRlOiBWaXNTdGF0ZSk6IFZpc1N0YXRlIHtcbiAgaWYgKCFzdGF0ZS5maWxlTG9hZGluZykge1xuICAgIHJldHVybiBzdGF0ZTtcbiAgfVxuICBjb25zdCB7ZmlsZXNUb0xvYWR9ID0gc3RhdGUuZmlsZUxvYWRpbmc7XG4gIGNvbnN0IFtmaWxlLCAuLi5yZW1haW5pbmdGaWxlc1RvTG9hZF0gPSBmaWxlc1RvTG9hZDtcblxuICAvLyBzYXZlIGZpbGVzVG9Mb2FkIHRvIHN0YXRlXG4gIGNvbnN0IG5leHRTdGF0ZSA9IHBpY2tfKCdmaWxlTG9hZGluZycpKG1lcmdlXyh7ZmlsZXNUb0xvYWQ6IHJlbWFpbmluZ0ZpbGVzVG9Mb2FkfSkpKHN0YXRlKTtcblxuICBjb25zdCBzdGF0ZVdpdGhQcm9ncmVzcyA9IHVwZGF0ZUZpbGVMb2FkaW5nUHJvZ3Jlc3NVcGRhdGVyKG5leHRTdGF0ZSwge1xuICAgIGZpbGVOYW1lOiBmaWxlLm5hbWUsXG4gICAgcHJvZ3Jlc3M6IHtwZXJjZW50OiAwLCBtZXNzYWdlOiAnbG9hZGluZy4uLid9XG4gIH0pO1xuXG4gIGNvbnN0IHtsb2FkZXJzLCBsb2FkT3B0aW9uc30gPSBzdGF0ZTtcbiAgcmV0dXJuIHdpdGhUYXNrKFxuICAgIHN0YXRlV2l0aFByb2dyZXNzLFxuICAgIG1ha2VMb2FkRmlsZVRhc2soXG4gICAgICBmaWxlLFxuICAgICAgbmV4dFN0YXRlLmZpbGVMb2FkaW5nICYmIG5leHRTdGF0ZS5maWxlTG9hZGluZy5maWxlQ2FjaGUsXG4gICAgICBsb2FkZXJzLFxuICAgICAgbG9hZE9wdGlvbnNcbiAgICApXG4gICk7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBtYWtlTG9hZEZpbGVUYXNrKGZpbGUsIGZpbGVDYWNoZSwgbG9hZGVyczogTG9hZGVyW10gPSBbXSwgbG9hZE9wdGlvbnMgPSB7fSkge1xuICByZXR1cm4gTE9BRF9GSUxFX1RBU0soe2ZpbGUsIGZpbGVDYWNoZSwgbG9hZGVycywgbG9hZE9wdGlvbnN9KS5iaW1hcChcbiAgICAvLyBwcmV0dGllciBpZ25vcmVcbiAgICAvLyBzdWNjZXNzXG4gICAgZ2VuID0+XG4gICAgICBuZXh0RmlsZUJhdGNoKHtcbiAgICAgICAgZ2VuLFxuICAgICAgICBmaWxlTmFtZTogZmlsZS5uYW1lLFxuICAgICAgICBvbkZpbmlzaDogcmVzdWx0ID0+XG4gICAgICAgICAgcHJvY2Vzc0ZpbGVDb250ZW50KHtcbiAgICAgICAgICAgIGNvbnRlbnQ6IHJlc3VsdCxcbiAgICAgICAgICAgIGZpbGVDYWNoZVxuICAgICAgICAgIH0pXG4gICAgICB9KSxcblxuICAgIC8vIGVycm9yXG4gICAgZXJyID0+IGxvYWRGaWxlc0VycihmaWxlLm5hbWUsIGVycilcbiAgKTtcbn1cblxuLyoqXG4gKlxuICogQG1lbWJlcm9mIHZpc1N0YXRlVXBkYXRlcnNcbiAqIEBwdWJsaWNcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHByb2Nlc3NGaWxlQ29udGVudFVwZGF0ZXIoXG4gIHN0YXRlOiBWaXNTdGF0ZSxcbiAgYWN0aW9uOiBWaXNTdGF0ZUFjdGlvbnMuUHJvY2Vzc0ZpbGVDb250ZW50VXBkYXRlckFjdGlvblxuKTogVmlzU3RhdGUge1xuICBjb25zdCB7Y29udGVudCwgZmlsZUNhY2hlfSA9IGFjdGlvbi5wYXlsb2FkO1xuXG4gIGNvbnN0IHN0YXRlV2l0aFByb2dyZXNzID0gdXBkYXRlRmlsZUxvYWRpbmdQcm9ncmVzc1VwZGF0ZXIoc3RhdGUsIHtcbiAgICBmaWxlTmFtZTogY29udGVudC5maWxlTmFtZSxcbiAgICBwcm9ncmVzczoge3BlcmNlbnQ6IDEsIG1lc3NhZ2U6ICdwcm9jZXNzaW5nLi4uJ31cbiAgfSk7XG5cbiAgcmV0dXJuIHdpdGhUYXNrKFxuICAgIHN0YXRlV2l0aFByb2dyZXNzLFxuICAgIFBST0NFU1NfRklMRV9EQVRBKHtjb250ZW50LCBmaWxlQ2FjaGV9KS5iaW1hcChcbiAgICAgIHJlc3VsdCA9PiBsb2FkRmlsZVN0ZXBTdWNjZXNzKHtmaWxlTmFtZTogY29udGVudC5maWxlTmFtZSwgZmlsZUNhY2hlOiByZXN1bHR9KSxcbiAgICAgIGVyciA9PiBsb2FkRmlsZXNFcnIoY29udGVudC5maWxlTmFtZSwgZXJyKVxuICAgIClcbiAgKTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHBhcnNlUHJvZ3Jlc3MocHJldlByb2dyZXNzID0ge30sIHByb2dyZXNzKSB7XG4gIC8vIFRoaXMgaGFwcGVucyB3aGVuIHJlY2VpdmluZyBxdWVyeSBtZXRhZGF0YSBvciBvdGhlciBjYXNlcyB3ZSBkb24ndFxuICAvLyBoYXZlIGFuIHVwZGF0ZSBmb3IgdGhlIHVzZXIuXG4gIGlmICghcHJvZ3Jlc3MgfHwgIXByb2dyZXNzLnBlcmNlbnQpIHtcbiAgICByZXR1cm4ge307XG4gIH1cblxuICByZXR1cm4ge1xuICAgIHBlcmNlbnQ6IHByb2dyZXNzLnBlcmNlbnRcbiAgfTtcbn1cblxuLyoqXG4gKiBnZXRzIGNhbGxlZCB3aXRoIHBheWxvYWQgPSBBc3luY0dlbmVyYXRvcjw/Pz8+XG4gKiBAbWVtYmVyb2YgdmlzU3RhdGVVcGRhdGVyc1xuICogQHB1YmxpY1xuICovXG5leHBvcnQgY29uc3QgbmV4dEZpbGVCYXRjaFVwZGF0ZXIgPSAoXG4gIHN0YXRlOiBWaXNTdGF0ZSxcbiAge1xuICAgIHBheWxvYWQ6IHtnZW4sIGZpbGVOYW1lLCBwcm9ncmVzcywgYWNjdW11bGF0ZWQsIG9uRmluaXNofVxuICB9OiBWaXNTdGF0ZUFjdGlvbnMuTmV4dEZpbGVCYXRjaFVwZGF0ZXJBY3Rpb25cbik6IFZpc1N0YXRlID0+IHtcbiAgY29uc3Qgc3RhdGVXaXRoUHJvZ3Jlc3MgPSB1cGRhdGVGaWxlTG9hZGluZ1Byb2dyZXNzVXBkYXRlcihzdGF0ZSwge1xuICAgIGZpbGVOYW1lLFxuICAgIHByb2dyZXNzOiBwYXJzZVByb2dyZXNzKHN0YXRlLmZpbGVMb2FkaW5nUHJvZ3Jlc3NbZmlsZU5hbWVdLCBwcm9ncmVzcylcbiAgfSk7XG5cbiAgcmV0dXJuIHdpdGhUYXNrKHN0YXRlV2l0aFByb2dyZXNzLCBbXG4gICAgLi4uKGZpbGVOYW1lLmVuZHNXaXRoKCdhcnJvdycpICYmIGFjY3VtdWxhdGVkPy5kYXRhPy5sZW5ndGggPiAwXG4gICAgICA/IFtcbiAgICAgICAgICBQUk9DRVNTX0ZJTEVfREFUQSh7Y29udGVudDogYWNjdW11bGF0ZWQsIGZpbGVDYWNoZTogW119KS5iaW1hcChcbiAgICAgICAgICAgIHJlc3VsdCA9PiBsb2FkRmlsZXNTdWNjZXNzKHJlc3VsdCksXG4gICAgICAgICAgICBlcnIgPT4gbG9hZEZpbGVzRXJyKGZpbGVOYW1lLCBlcnIpXG4gICAgICAgICAgKVxuICAgICAgICBdXG4gICAgICA6IFtdKSxcbiAgICBVTldSQVBfVEFTSyhnZW4ubmV4dCgpKS5iaW1hcChcbiAgICAgICh7dmFsdWUsIGRvbmV9KSA9PiB7XG4gICAgICAgIHJldHVybiBkb25lXG4gICAgICAgICAgPyBvbkZpbmlzaChhY2N1bXVsYXRlZClcbiAgICAgICAgICA6IG5leHRGaWxlQmF0Y2goe1xuICAgICAgICAgICAgICBnZW4sXG4gICAgICAgICAgICAgIGZpbGVOYW1lLFxuICAgICAgICAgICAgICBwcm9ncmVzczogdmFsdWUucHJvZ3Jlc3MsXG4gICAgICAgICAgICAgIGFjY3VtdWxhdGVkOiB2YWx1ZSxcbiAgICAgICAgICAgICAgb25GaW5pc2hcbiAgICAgICAgICAgIH0pO1xuICAgICAgfSxcbiAgICAgIGVyciA9PiBsb2FkRmlsZXNFcnIoZmlsZU5hbWUsIGVycilcbiAgICApXG4gIF0pO1xufTtcblxuLyoqXG4gKiBUcmlnZ2VyIGxvYWRpbmcgZmlsZSBlcnJvclxuICogQG1lbWJlcm9mIHZpc1N0YXRlVXBkYXRlcnNcbiAqIEBwdWJsaWNcbiAqL1xuZXhwb3J0IGNvbnN0IGxvYWRGaWxlc0VyclVwZGF0ZXIgPSAoXG4gIHN0YXRlOiBWaXNTdGF0ZSxcbiAge2Vycm9yLCBmaWxlTmFtZX06IFZpc1N0YXRlQWN0aW9ucy5Mb2FkRmlsZXNFcnJVcGRhdGVyQWN0aW9uXG4pOiBWaXNTdGF0ZSA9PiB7XG4gIC8vIHVwZGF0ZSB1aSB3aXRoIGVycm9yIG1lc3NhZ2VcbiAgQ29uc29sZS53YXJuKGVycm9yKTtcbiAgaWYgKCFzdGF0ZS5maWxlTG9hZGluZykge1xuICAgIHJldHVybiBzdGF0ZTtcbiAgfVxuICBjb25zdCB7ZmlsZXNUb0xvYWQsIG9uRmluaXNoLCBmaWxlQ2FjaGV9ID0gc3RhdGUuZmlsZUxvYWRpbmc7XG5cbiAgY29uc3QgbmV4dFN0YXRlID0gdXBkYXRlRmlsZUxvYWRpbmdQcm9ncmVzc1VwZGF0ZXIoc3RhdGUsIHtcbiAgICBmaWxlTmFtZSxcbiAgICBwcm9ncmVzczoge2Vycm9yfVxuICB9KTtcblxuICAvLyBraWNrIG9mZiBuZXh0IGZpbGUgb3IgZmluaXNoXG4gIHJldHVybiB3aXRoVGFzayhcbiAgICBuZXh0U3RhdGUsXG4gICAgREVMQVlfVEFTSygyMDApLm1hcChmaWxlc1RvTG9hZC5sZW5ndGggPyBsb2FkTmV4dEZpbGUgOiAoKSA9PiBvbkZpbmlzaChmaWxlQ2FjaGUpKVxuICApO1xufTtcblxuLyoqXG4gKiBXaGVuIHNlbGVjdCBkYXRhc2V0IGZvciBleHBvcnQsIGFwcGx5IGNwdSBmaWx0ZXIgdG8gc2VsZWN0ZWQgZGF0YXNldFxuICogQG1lbWJlcm9mIHZpc1N0YXRlVXBkYXRlcnNcbiAqIEBwdWJsaWNcbiAqL1xuZXhwb3J0IGNvbnN0IGFwcGx5Q1BVRmlsdGVyVXBkYXRlciA9IChcbiAgc3RhdGU6IFZpc1N0YXRlLFxuICB7ZGF0YUlkfTogVmlzU3RhdGVBY3Rpb25zLkFwcGx5Q1BVRmlsdGVyVXBkYXRlckFjdGlvblxuKTogVmlzU3RhdGUgPT4ge1xuICAvLyBhcHBseSBjcHVGaWx0ZXJcbiAgY29uc3QgZGF0YUlkcyA9IHRvQXJyYXkoZGF0YUlkKTtcblxuICByZXR1cm4gZGF0YUlkcy5yZWR1Y2UoKGFjY3UsIGlkKSA9PiBmaWx0ZXJEYXRhc2V0Q1BVKGFjY3UsIGlkKSwgc3RhdGUpO1xufTtcblxuLyoqXG4gKiBVc2VyIGlucHV0IHRvIHVwZGF0ZSB0aGUgaW5mbyBvZiB0aGUgbWFwXG4gKiBAbWVtYmVyb2YgdmlzU3RhdGVVcGRhdGVyc1xuICogQHB1YmxpY1xuICovXG5leHBvcnQgY29uc3Qgc2V0TWFwSW5mb1VwZGF0ZXIgPSAoXG4gIHN0YXRlOiBWaXNTdGF0ZSxcbiAgYWN0aW9uOiBWaXNTdGF0ZUFjdGlvbnMuU2V0TWFwSW5mb1VwZGF0ZXJBY3Rpb25cbik6IFZpc1N0YXRlID0+ICh7XG4gIC4uLnN0YXRlLFxuICBtYXBJbmZvOiB7XG4gICAgLi4uc3RhdGUubWFwSW5mbyxcbiAgICAuLi5hY3Rpb24uaW5mb1xuICB9XG59KTtcbi8qKlxuICogSGVscGVyIGZ1bmN0aW9uIHRvIHVwZGF0ZSBBbGwgbGF5ZXIgZG9tYWluIGFuZCBsYXllciBkYXRhIG9mIHN0YXRlXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBhZGREZWZhdWx0TGF5ZXJzKFxuICBzdGF0ZTogVmlzU3RhdGUsXG4gIGRhdGFzZXRzOiBEYXRhc2V0c1xuKToge3N0YXRlOiBWaXNTdGF0ZTsgbmV3TGF5ZXJzOiBMYXllcltdfSB7XG4gIGNvbnN0IGVtcHR5OiBMYXllcltdID0gW107XG4gIGNvbnN0IGRlZmF1bHRMYXllcnMgPSBPYmplY3QudmFsdWVzKGRhdGFzZXRzKS5yZWR1Y2UoKGFjY3U6IExheWVyW10sIGRhdGFzZXQpID0+IHtcbiAgICBjb25zdCBmb3VuZExheWVycyA9IGZpbmREZWZhdWx0TGF5ZXIoZGF0YXNldCwgc3RhdGUubGF5ZXJDbGFzc2VzKTtcbiAgICByZXR1cm4gZm91bmRMYXllcnMgJiYgZm91bmRMYXllcnMubGVuZ3RoID8gYWNjdS5jb25jYXQoZm91bmRMYXllcnMpIDogYWNjdTtcbiAgfSwgZW1wdHkpO1xuXG4gIHJldHVybiB7XG4gICAgc3RhdGU6IHtcbiAgICAgIC4uLnN0YXRlLFxuICAgICAgbGF5ZXJzOiBbLi4uc3RhdGUubGF5ZXJzLCAuLi5kZWZhdWx0TGF5ZXJzXSxcbiAgICAgIGxheWVyT3JkZXI6IFtcbiAgICAgICAgLy8gcHV0IG5ldyBsYXllcnMgb24gdG9wIG9mIG9sZCBvbmVzIGluIHJldmVyc2VcbiAgICAgICAgLi4uZ2V0TGF5ZXJPcmRlckZyb21MYXllcnMoZGVmYXVsdExheWVycyksXG4gICAgICAgIC4uLnN0YXRlLmxheWVyT3JkZXJcbiAgICAgIF1cbiAgICB9LFxuICAgIG5ld0xheWVyczogZGVmYXVsdExheWVyc1xuICB9O1xufVxuXG4vKipcbiAqIGhlbHBlciBmdW5jdGlvbiB0byBmaW5kIGRlZmF1bHQgdG9vbHRpcHNcbiAqIEBwYXJhbSB7T2JqZWN0fSBzdGF0ZVxuICogQHBhcmFtIHtPYmplY3R9IGRhdGFzZXRcbiAqIEByZXR1cm5zIHtPYmplY3R9IG5leHRTdGF0ZVxuICovXG5leHBvcnQgZnVuY3Rpb24gYWRkRGVmYXVsdFRvb2x0aXBzKHN0YXRlLCBkYXRhc2V0KSB7XG4gIGNvbnN0IHRvb2x0aXBGaWVsZHMgPSBmaW5kRmllbGRzVG9TaG93KHtcbiAgICAuLi5kYXRhc2V0LFxuICAgIG1heERlZmF1bHRUb29sdGlwczogc3RhdGUubWF4RGVmYXVsdFRvb2x0aXBzXG4gIH0pO1xuICBjb25zdCBtZXJnZWQgPSB7XG4gICAgLi4uc3RhdGUuaW50ZXJhY3Rpb25Db25maWcudG9vbHRpcC5jb25maWcuZmllbGRzVG9TaG93LFxuICAgIC4uLnRvb2x0aXBGaWVsZHNcbiAgfTtcblxuICByZXR1cm4gc2V0KFsnaW50ZXJhY3Rpb25Db25maWcnLCAndG9vbHRpcCcsICdjb25maWcnLCAnZmllbGRzVG9TaG93J10sIG1lcmdlZCwgc3RhdGUpO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gaW5pdGlhbEZpbGVMb2FkaW5nUHJvZ3Jlc3MoZmlsZSwgaW5kZXgpIHtcbiAgY29uc3QgZmlsZU5hbWUgPSBmaWxlLm5hbWUgfHwgYFVudGl0bGVkIEZpbGUgJHtpbmRleH1gO1xuICByZXR1cm4ge1xuICAgIFtmaWxlTmFtZV06IHtcbiAgICAgIC8vIHBlcmNlbnQgb2YgY3VycmVudCBmaWxlXG4gICAgICBwZXJjZW50OiAwLFxuICAgICAgbWVzc2FnZTogJycsXG4gICAgICBmaWxlTmFtZSxcbiAgICAgIGVycm9yOiBudWxsXG4gICAgfVxuICB9O1xufVxuXG5leHBvcnQgZnVuY3Rpb24gdXBkYXRlRmlsZUxvYWRpbmdQcm9ncmVzc1VwZGF0ZXIoc3RhdGUsIHtmaWxlTmFtZSwgcHJvZ3Jlc3N9KSB7XG4gIC8vIEB0cy1leHBlY3QtZXJyb3JcbiAgcmV0dXJuIHBpY2tfKCdmaWxlTG9hZGluZ1Byb2dyZXNzJykocGlja18oZmlsZU5hbWUpKG1lcmdlXyhwcm9ncmVzcykpKShzdGF0ZSk7XG59XG4vKipcbiAqIEhlbHBlciBmdW5jdGlvbiB0byB1cGRhdGUgbGF5ZXIgZG9tYWlucyBmb3IgYW4gYXJyYXkgb2YgZGF0YXNldHNcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHVwZGF0ZUFsbExheWVyRG9tYWluRGF0YShcbiAgc3RhdGU6IFZpc1N0YXRlLFxuICBkYXRhSWQ6IHN0cmluZyB8IHN0cmluZ1tdLFxuICB1cGRhdGVkRmlsdGVyPzogRmlsdGVyXG4pOiBWaXNTdGF0ZSB7XG4gIGNvbnN0IGRhdGFJZHMgPSB0eXBlb2YgZGF0YUlkID09PSAnc3RyaW5nJyA/IFtkYXRhSWRdIDogZGF0YUlkO1xuICBjb25zdCBuZXdMYXllcnM6IExheWVyW10gPSBbXTtcbiAgY29uc3QgbmV3TGF5ZXJEYXRhOiBhbnlbXSA9IFtdO1xuXG4gIHN0YXRlLmxheWVycy5mb3JFYWNoKChvbGRMYXllciwgaSkgPT4ge1xuICAgIGlmIChvbGRMYXllci5jb25maWcuZGF0YUlkICYmIGRhdGFJZHMuaW5jbHVkZXMob2xkTGF5ZXIuY29uZmlnLmRhdGFJZCkpIHtcbiAgICAgIC8vIE5vIG5lZWQgdG8gcmVjYWxjdWxhdGUgbGF5ZXIgZG9tYWluIGlmIGZpbHRlciBoYXMgZml4ZWQgZG9tYWluXG4gICAgICBjb25zdCBuZXdMYXllciA9XG4gICAgICAgIHVwZGF0ZWRGaWx0ZXIgJiYgdXBkYXRlZEZpbHRlci5maXhlZERvbWFpblxuICAgICAgICAgID8gb2xkTGF5ZXJcbiAgICAgICAgICA6IG9sZExheWVyLnVwZGF0ZUxheWVyRG9tYWluKHN0YXRlLmRhdGFzZXRzLCB1cGRhdGVkRmlsdGVyKTtcblxuICAgICAgY29uc3Qge2xheWVyRGF0YSwgbGF5ZXJ9ID0gY2FsY3VsYXRlTGF5ZXJEYXRhKG5ld0xheWVyLCBzdGF0ZSwgc3RhdGUubGF5ZXJEYXRhW2ldKTtcblxuICAgICAgbmV3TGF5ZXJzLnB1c2gobGF5ZXIpO1xuICAgICAgbmV3TGF5ZXJEYXRhLnB1c2gobGF5ZXJEYXRhKTtcbiAgICB9IGVsc2Uge1xuICAgICAgbmV3TGF5ZXJzLnB1c2gob2xkTGF5ZXIpO1xuICAgICAgbmV3TGF5ZXJEYXRhLnB1c2goc3RhdGUubGF5ZXJEYXRhW2ldKTtcbiAgICB9XG4gIH0pO1xuXG4gIGNvbnN0IG5ld1N0YXRlID0ge1xuICAgIC4uLnN0YXRlLFxuICAgIGxheWVyczogbmV3TGF5ZXJzLFxuICAgIGxheWVyRGF0YTogbmV3TGF5ZXJEYXRhXG4gIH07XG5cbiAgcmV0dXJuIG5ld1N0YXRlO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gdXBkYXRlQW5pbWF0aW9uRG9tYWluPFMgZXh0ZW5kcyBWaXNTdGF0ZT4oc3RhdGU6IFMpOiBTIHtcbiAgLy8gbWVyZ2UgYWxsIGFuaW1hdGFibGUgbGF5ZXIgZG9tYWluIGFuZCB1cGRhdGUgZ2xvYmFsIGNvbmZpZ1xuICBjb25zdCBhbmltYXRhYmxlTGF5ZXJzID0gc3RhdGUubGF5ZXJzLmZpbHRlcihcbiAgICBsID0+XG4gICAgICBsLmNvbmZpZy5pc1Zpc2libGUgJiZcbiAgICAgIGwuY29uZmlnLmFuaW1hdGlvbiAmJlxuICAgICAgbC5jb25maWcuYW5pbWF0aW9uLmVuYWJsZWQgJiZcbiAgICAgIC8vIEB0cy1leHBlY3QtZXJyb3IgdHJpcC1sYXllci1vbmx5XG4gICAgICBBcnJheS5pc0FycmF5KGwuYW5pbWF0aW9uRG9tYWluKVxuICApO1xuXG4gIGlmICghYW5pbWF0YWJsZUxheWVycy5sZW5ndGgpIHtcbiAgICByZXR1cm4ge1xuICAgICAgLi4uc3RhdGUsXG4gICAgICBhbmltYXRpb25Db25maWc6IHtcbiAgICAgICAgLi4uc3RhdGUuYW5pbWF0aW9uQ29uZmlnLFxuICAgICAgICBkb21haW46IG51bGwsXG4gICAgICAgIGRlZmF1bHRUaW1lRm9ybWF0OiBudWxsXG4gICAgICB9XG4gICAgfTtcbiAgfVxuXG4gIGNvbnN0IG1lcmdlZERvbWFpbjogW251bWJlciwgbnVtYmVyXSA9IGFuaW1hdGFibGVMYXllcnMucmVkdWNlKFxuICAgIChhY2N1LCBsYXllcikgPT4gW1xuICAgICAgLy8gQHRzLWV4cGVjdC1lcnJvciB0cmlwLWxheWVyLW9ubHlcbiAgICAgIE1hdGgubWluKGFjY3VbMF0sIGxheWVyLmFuaW1hdGlvbkRvbWFpblswXSksXG4gICAgICAvLyBAdHMtZXhwZWN0LWVycm9yIHRyaXAtbGF5ZXItb25seVxuICAgICAgTWF0aC5tYXgoYWNjdVsxXSwgbGF5ZXIuYW5pbWF0aW9uRG9tYWluWzFdKVxuICAgIF0sXG4gICAgW051bWJlcihJbmZpbml0eSksIC1JbmZpbml0eV1cbiAgKTtcbiAgY29uc3QgZGVmYXVsdFRpbWVGb3JtYXQgPSBnZXRUaW1lV2lkZ2V0VGl0bGVGb3JtYXR0ZXIobWVyZ2VkRG9tYWluKTtcblxuICByZXR1cm4ge1xuICAgIC4uLnN0YXRlLFxuICAgIGFuaW1hdGlvbkNvbmZpZzoge1xuICAgICAgLi4uc3RhdGUuYW5pbWF0aW9uQ29uZmlnLFxuICAgICAgY3VycmVudFRpbWU6IGlzSW5SYW5nZShzdGF0ZS5hbmltYXRpb25Db25maWcuY3VycmVudFRpbWUsIG1lcmdlZERvbWFpbilcbiAgICAgICAgPyBzdGF0ZS5hbmltYXRpb25Db25maWcuY3VycmVudFRpbWVcbiAgICAgICAgOiBtZXJnZWREb21haW5bMF0sXG4gICAgICBkb21haW46IG1lcmdlZERvbWFpbixcbiAgICAgIGRlZmF1bHRUaW1lRm9ybWF0XG4gICAgfVxuICB9O1xufVxuXG4vKipcbiAqIFVwZGF0ZSB0aGUgc3RhdHVzIG9mIHRoZSBlZGl0b3JcbiAqIEBtZW1iZXJvZiB2aXNTdGF0ZVVwZGF0ZXJzXG4gKi9cbmV4cG9ydCBjb25zdCBzZXRFZGl0b3JNb2RlVXBkYXRlciA9IChcbiAgc3RhdGU6IFZpc1N0YXRlLFxuICB7bW9kZX06IFZpc1N0YXRlQWN0aW9ucy5TZXRFZGl0b3JNb2RlVXBkYXRlckFjdGlvblxuKTogVmlzU3RhdGUgPT4gKHtcbiAgLi4uc3RhdGUsXG4gIGVkaXRvcjoge1xuICAgIC4uLnN0YXRlLmVkaXRvcixcbiAgICBtb2RlLFxuICAgIHNlbGVjdGVkRmVhdHVyZTogbnVsbFxuICB9XG59KTtcblxuLy8gY29uc3QgZmVhdHVyZVRvRmlsdGVyVmFsdWUgPSAoZmVhdHVyZSkgPT4gKHsuLi5mZWF0dXJlLCBpZDogZmVhdHVyZS5pZH0pO1xuLyoqXG4gKiBVcGRhdGUgZWRpdG9yIGZlYXR1cmVzXG4gKiBAbWVtYmVyb2YgdmlzU3RhdGVVcGRhdGVyc1xuICovXG5leHBvcnQgZnVuY3Rpb24gc2V0RmVhdHVyZXNVcGRhdGVyKFxuICBzdGF0ZTogVmlzU3RhdGUsXG4gIHtmZWF0dXJlcyA9IFtdfTogVmlzU3RhdGVBY3Rpb25zLlNldEZlYXR1cmVzVXBkYXRlckFjdGlvblxuKTogVmlzU3RhdGUge1xuICBjb25zdCBsYXN0RmVhdHVyZSA9IGZlYXR1cmVzLmxlbmd0aCAmJiBmZWF0dXJlc1tmZWF0dXJlcy5sZW5ndGggLSAxXTtcblxuICBjb25zdCBuZXdTdGF0ZSA9IHtcbiAgICAuLi5zdGF0ZSxcbiAgICBlZGl0b3I6IHtcbiAgICAgIC4uLnN0YXRlLmVkaXRvcixcbiAgICAgIC8vIG9ubHkgc2F2ZSBub25lIGZpbHRlciBmZWF0dXJlcyB0byBlZGl0b3JcbiAgICAgIGZlYXR1cmVzOiBmZWF0dXJlcy5maWx0ZXIoZiA9PiAhZ2V0RmlsdGVySWRJbkZlYXR1cmUoZikpLFxuICAgICAgbW9kZTogbGFzdEZlYXR1cmUgJiYgbGFzdEZlYXR1cmUucHJvcGVydGllcy5pc0Nsb3NlZCA/IEVESVRPUl9NT0RFUy5FRElUIDogc3RhdGUuZWRpdG9yLm1vZGVcbiAgICB9XG4gIH07XG5cbiAgLy8gUmV0cmlldmUgZXhpc3RpbmcgZmVhdHVyZVxuICBjb25zdCB7c2VsZWN0ZWRGZWF0dXJlfSA9IHN0YXRlLmVkaXRvcjtcblxuICAvLyBJZiBubyBmZWF0dXJlIGlzIHNlbGVjdGVkIHdlIGNhbiBzaW1wbHkgcmV0dXJuIHNpbmNlIG5vIG9wZXJhdGlvbnNcbiAgaWYgKCFzZWxlY3RlZEZlYXR1cmUpIHtcbiAgICByZXR1cm4gbmV3U3RhdGU7XG4gIH1cblxuICAvLyBUT0RPOiBjaGVjayBpZiB0aGUgZmVhdHVyZSBoYXMgY2hhbmdlZFxuICBjb25zdCBmZWF0dXJlID0gZmVhdHVyZXMuZmluZChmID0+IGYuaWQgPT09IHNlbGVjdGVkRmVhdHVyZS5pZCk7XG5cbiAgLy8gaWYgZmVhdHVyZSBpcyBwYXJ0IG9mIGEgZmlsdGVyXG4gIGNvbnN0IGZpbHRlcklkID0gZmVhdHVyZSAmJiBnZXRGaWx0ZXJJZEluRmVhdHVyZShmZWF0dXJlKTtcbiAgaWYgKGZpbHRlcklkICYmIGZlYXR1cmUpIHtcbiAgICAvLyBhZGQgYmJveCBmb3IgcG9seWdvbiBmaWx0ZXIgdG8gc3BlZWQgdXAgZmlsdGVyaW5nXG4gICAgaWYgKGZlYXR1cmUucHJvcGVydGllcykgZmVhdHVyZS5wcm9wZXJ0aWVzLmJib3ggPSBiYm94KGZlYXR1cmUpO1xuICAgIGNvbnN0IGZlYXR1cmVWYWx1ZSA9IGZlYXR1cmVUb0ZpbHRlclZhbHVlKGZlYXR1cmUsIGZpbHRlcklkKTtcbiAgICBjb25zdCBmaWx0ZXJJZHggPSBzdGF0ZS5maWx0ZXJzLmZpbmRJbmRleChmaWwgPT4gZmlsLmlkID09PSBmaWx0ZXJJZCk7XG4gICAgLy8gQHRzLWlnbm9yZVxuICAgIHJldHVybiBzZXRGaWx0ZXJVcGRhdGVyKG5ld1N0YXRlLCB7XG4gICAgICBpZHg6IGZpbHRlcklkeCxcbiAgICAgIHByb3A6ICd2YWx1ZScsXG4gICAgICB2YWx1ZTogZmVhdHVyZVZhbHVlXG4gICAgfSk7XG4gIH1cblxuICByZXR1cm4gbmV3U3RhdGU7XG59XG5cbi8qKlxuICogU2V0IHRoZSBjdXJyZW50IHNlbGVjdGVkIGZlYXR1cmVcbiAqIEBtZW1iZXJvZiB1aVN0YXRlVXBkYXRlcnNcbiAqL1xuZXhwb3J0IGNvbnN0IHNldFNlbGVjdGVkRmVhdHVyZVVwZGF0ZXIgPSAoXG4gIHN0YXRlOiBWaXNTdGF0ZSxcbiAge2ZlYXR1cmUsIHNlbGVjdGlvbkNvbnRleHR9OiBWaXNTdGF0ZUFjdGlvbnMuU2V0U2VsZWN0ZWRGZWF0dXJlVXBkYXRlckFjdGlvblxuKTogVmlzU3RhdGUgPT4ge1xuICAvLyBhZGQgYmJveCBmb3IgcG9seWdvbiBmaWx0ZXIgdG8gc3BlZWQgdXAgZmlsdGVyaW5nXG4gICBpZiAoZmVhdHVyZSAmJiBmZWF0dXJlLnByb3BlcnRpZXMpIGZlYXR1cmUucHJvcGVydGllcy5iYm94ID0gYmJveChmZWF0dXJlKTtcbiAgcmV0dXJuIHtcbiAgICAuLi5zdGF0ZSxcbiAgICBlZGl0b3I6IHtcbiAgICAgIC4uLnN0YXRlLmVkaXRvcixcbiAgICAgIHNlbGVjdGVkRmVhdHVyZTogZmVhdHVyZSxcbiAgICAgIHNlbGVjdGlvbkNvbnRleHRcbiAgICB9XG4gIH07XG59O1xuXG4vKipcbiAqIERlbGV0ZSBleGlzdGluZyBmZWF0dXJlIGZyb20gZmlsdGVyc1xuICogQG1lbWJlcm9mIHZpc1N0YXRlVXBkYXRlcnNcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGRlbGV0ZUZlYXR1cmVVcGRhdGVyKFxuICBzdGF0ZTogVmlzU3RhdGUsXG4gIHtmZWF0dXJlfTogVmlzU3RhdGVBY3Rpb25zLkRlbGV0ZUZlYXR1cmVVcGRhdGVyQWN0aW9uXG4pOiBWaXNTdGF0ZSB7XG4gIGlmICghZmVhdHVyZSkge1xuICAgIHJldHVybiBzdGF0ZTtcbiAgfVxuXG4gIGNvbnN0IG5ld1N0YXRlID0ge1xuICAgIC4uLnN0YXRlLFxuICAgIGVkaXRvcjoge1xuICAgICAgLi4uc3RhdGUuZWRpdG9yLFxuICAgICAgc2VsZWN0ZWRGZWF0dXJlOiBudWxsXG4gICAgfVxuICB9O1xuXG4gIGlmIChnZXRGaWx0ZXJJZEluRmVhdHVyZShmZWF0dXJlKSkge1xuICAgIGNvbnN0IGZpbHRlcklkeCA9IG5ld1N0YXRlLmZpbHRlcnMuZmluZEluZGV4KGYgPT4gZi5pZCA9PT0gZ2V0RmlsdGVySWRJbkZlYXR1cmUoZmVhdHVyZSkpO1xuXG4gICAgcmV0dXJuIGZpbHRlcklkeCA+IC0xID8gcmVtb3ZlRmlsdGVyVXBkYXRlcihuZXdTdGF0ZSwge2lkeDogZmlsdGVySWR4fSkgOiBuZXdTdGF0ZTtcbiAgfVxuXG4gIC8vIG1vZGlmeSBlZGl0b3Igb2JqZWN0XG4gIGNvbnN0IG5ld0VkaXRvciA9IHtcbiAgICAuLi5zdGF0ZS5lZGl0b3IsXG4gICAgZmVhdHVyZXM6IHN0YXRlLmVkaXRvci5mZWF0dXJlcy5maWx0ZXIoZiA9PiBmLmlkICE9PSBmZWF0dXJlLmlkKSxcbiAgICBzZWxlY3RlZEZlYXR1cmU6IG51bGxcbiAgfTtcblxuICByZXR1cm4ge1xuICAgIC4uLnN0YXRlLFxuICAgIGVkaXRvcjogbmV3RWRpdG9yXG4gIH07XG59XG5cbi8qKlxuICogVG9nZ2xlIGZlYXR1cmUgYXMgbGF5ZXIgZmlsdGVyXG4gKiBAbWVtYmVyb2YgdmlzU3RhdGVVcGRhdGVyc1xuICovXG5leHBvcnQgZnVuY3Rpb24gc2V0UG9seWdvbkZpbHRlckxheWVyVXBkYXRlcihcbiAgc3RhdGU6IFZpc1N0YXRlLFxuICBwYXlsb2FkOiBWaXNTdGF0ZUFjdGlvbnMuU2V0UG9seWdvbkZpbHRlckxheWVyVXBkYXRlckFjdGlvblxuKTogVmlzU3RhdGUge1xuICBjb25zdCB7bGF5ZXIsIGZlYXR1cmV9ID0gcGF5bG9hZDtcbiAgY29uc3QgZmlsdGVySWQgPSBnZXRGaWx0ZXJJZEluRmVhdHVyZShmZWF0dXJlKTtcblxuICAvLyBsZXQgbmV3RmlsdGVyID0gbnVsbDtcbiAgbGV0IGZpbHRlcklkeDtcbiAgbGV0IG5ld0xheWVySWQgPSBbbGF5ZXIuaWRdO1xuICBsZXQgbmV3U3RhdGUgPSBzdGF0ZTtcbiAgLy8gSWYgcG9seWdvbiBmaWx0ZXIgYWxyZWFkeSBleGlzdHMsIHdlIG5lZWQgdG8gZmluZCBvdXQgaWYgdGhlIGN1cnJlbnQgbGF5ZXIgaXMgYWxyZWFkeSBpbmNsdWRlZFxuICBpZiAoZmlsdGVySWQpIHtcbiAgICBmaWx0ZXJJZHggPSBzdGF0ZS5maWx0ZXJzLmZpbmRJbmRleChmID0+IGYuaWQgPT09IGZpbHRlcklkKTtcblxuICAgIGlmICghc3RhdGUuZmlsdGVyc1tmaWx0ZXJJZHhdKSB7XG4gICAgICAvLyB3aGF0IGlmIGZpbHRlciBkb2Vzbid0IGV4aXN0Py4uLiBub3QgcG9zc2libGUuXG4gICAgICAvLyBiZWNhdXNlIGZlYXR1cmVzIGluIHRoZSBlZGl0b3IgaXMgcGFzc2VkIGluIGZyb20gZmlsdGVycyBhbmQgZWRpdG9ycy5cbiAgICAgIC8vIGJ1dCB3ZSB3aWxsIG1vdmUgdGhpcyBmZWF0dXJlIGJhY2sgdG8gZWRpdG9yIGp1c3QgaW4gY2FzZVxuICAgICAgY29uc3Qgbm9uZUZpbHRlckZlYXR1cmUgPSB7XG4gICAgICAgIC4uLmZlYXR1cmUsXG4gICAgICAgIHByb3BlcnRpZXM6IHtcbiAgICAgICAgICAuLi5mZWF0dXJlLnByb3BlcnRpZXMsXG4gICAgICAgICAgZmlsdGVySWQ6IG51bGxcbiAgICAgICAgfVxuICAgICAgfTtcblxuICAgICAgcmV0dXJuIHtcbiAgICAgICAgLi4uc3RhdGUsXG4gICAgICAgIGVkaXRvcjoge1xuICAgICAgICAgIC4uLnN0YXRlLmVkaXRvcixcbiAgICAgICAgICBmZWF0dXJlczogWy4uLnN0YXRlLmVkaXRvci5mZWF0dXJlcywgbm9uZUZpbHRlckZlYXR1cmVdLFxuICAgICAgICAgIHNlbGVjdGVkRmVhdHVyZTogbm9uZUZpbHRlckZlYXR1cmVcbiAgICAgICAgfVxuICAgICAgfTtcbiAgICB9XG4gICAgY29uc3QgZmlsdGVyID0gc3RhdGUuZmlsdGVyc1tmaWx0ZXJJZHhdO1xuICAgIGNvbnN0IHtsYXllcklkID0gW119ID0gZmlsdGVyO1xuICAgIGNvbnN0IGlzTGF5ZXJJbmNsdWRlZCA9IGxheWVySWQuaW5jbHVkZXMobGF5ZXIuaWQpO1xuXG4gICAgbmV3TGF5ZXJJZCA9IGlzTGF5ZXJJbmNsdWRlZFxuICAgICAgPyAvLyBpZiBsYXllciBpcyBpbmNsdWRlZCwgcmVtb3ZlIGl0XG4gICAgICAgIGxheWVySWQuZmlsdGVyKGwgPT4gbCAhPT0gbGF5ZXIuaWQpXG4gICAgICA6IFsuLi5sYXllcklkLCBsYXllci5pZF07XG4gIH0gZWxzZSB7XG4gICAgLy8gaWYgd2UgaGF2ZW4ndCBjcmVhdGUgdGhlIHBvbHlnb24gZmlsdGVyLCBjcmVhdGUgaXRcbiAgICBjb25zdCBuZXdGaWx0ZXIgPSBnZW5lcmF0ZVBvbHlnb25GaWx0ZXIoW10sIGZlYXR1cmUpO1xuICAgIGZpbHRlcklkeCA9IHN0YXRlLmZpbHRlcnMubGVuZ3RoO1xuXG4gICAgLy8gYWRkIGZlYXR1cmUsIHJlbW92ZSBmZWF0dXJlIGZyb20gZWlkdG9yXG4gICAgbmV3U3RhdGUgPSB7XG4gICAgICAuLi5zdGF0ZSxcbiAgICAgIGZpbHRlcnM6IFsuLi5zdGF0ZS5maWx0ZXJzLCBuZXdGaWx0ZXJdLFxuICAgICAgZWRpdG9yOiB7XG4gICAgICAgIC4uLnN0YXRlLmVkaXRvcixcbiAgICAgICAgZmVhdHVyZXM6IHN0YXRlLmVkaXRvci5mZWF0dXJlcy5maWx0ZXIoZiA9PiBmLmlkICE9PSBmZWF0dXJlLmlkKSxcbiAgICAgICAgc2VsZWN0ZWRGZWF0dXJlOiBuZXdGaWx0ZXIudmFsdWVcbiAgICAgIH1cbiAgICB9O1xuICB9XG5cbiAgcmV0dXJuIHNldEZpbHRlclVwZGF0ZXIobmV3U3RhdGUsIHtcbiAgICBpZHg6IGZpbHRlcklkeCxcbiAgICBwcm9wOiAnbGF5ZXJJZCcsXG4gICAgdmFsdWU6IG5ld0xheWVySWRcbiAgfSk7XG59XG5cbi8qKlxuICogQG1lbWJlcm9mIHZpc1N0YXRlVXBkYXRlcnNcbiAqIEBwdWJsaWNcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHNvcnRUYWJsZUNvbHVtblVwZGF0ZXIoXG4gIHN0YXRlOiBWaXNTdGF0ZSxcbiAge2RhdGFJZCwgY29sdW1uLCBtb2RlfTogVmlzU3RhdGVBY3Rpb25zLlNvcnRUYWJsZUNvbHVtblVwZGF0ZXJBY3Rpb25cbik6IFZpc1N0YXRlIHtcbiAgY29uc3QgZGF0YXNldCA9IHN0YXRlLmRhdGFzZXRzW2RhdGFJZF07XG4gIGlmICghZGF0YXNldCkge1xuICAgIHJldHVybiBzdGF0ZTtcbiAgfVxuICBsZXQgc29ydE1vZGUgPSBtb2RlO1xuICBpZiAoIXNvcnRNb2RlKSB7XG4gICAgY29uc3QgY3VycmVudE1vZGUgPSBnZXQoZGF0YXNldCwgWydzb3J0Q29sdW1uJywgY29sdW1uXSk7XG4gICAgLy8gQHRzLWlnbm9yZSAtIHNob3VsZCBiZSBmaXhhYmxlIGluIGEgVFMgZmlsZVxuICAgIHNvcnRNb2RlID0gY3VycmVudE1vZGVcbiAgICAgID8gT2JqZWN0LmtleXMoU09SVF9PUkRFUikuZmluZChtID0+IG0gIT09IGN1cnJlbnRNb2RlKVxuICAgICAgOiBTT1JUX09SREVSLkFTQ0VORElORztcbiAgfVxuXG4gIGNvbnN0IHNvcnRlZCA9IHNvcnREYXRhc2V0QnlDb2x1bW4oZGF0YXNldCwgY29sdW1uLCBzb3J0TW9kZSk7XG4gIHJldHVybiBzZXQoWydkYXRhc2V0cycsIGRhdGFJZF0sIHNvcnRlZCwgc3RhdGUpO1xufVxuXG4vKipcbiAqIEBtZW1iZXJvZiB2aXNTdGF0ZVVwZGF0ZXJzXG4gKiBAcHVibGljXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBwaW5UYWJsZUNvbHVtblVwZGF0ZXIoXG4gIHN0YXRlOiBWaXNTdGF0ZSxcbiAge2RhdGFJZCwgY29sdW1ufTogVmlzU3RhdGVBY3Rpb25zLlBpblRhYmxlQ29sdW1uVXBkYXRlckFjdGlvblxuKTogVmlzU3RhdGUge1xuICBjb25zdCBkYXRhc2V0ID0gc3RhdGUuZGF0YXNldHNbZGF0YUlkXTtcbiAgaWYgKCFkYXRhc2V0KSB7XG4gICAgcmV0dXJuIHN0YXRlO1xuICB9XG4gIGNvbnN0IG5ld0RhdGFzZXQgPSBwaW5UYWJsZUNvbHVtbnMoZGF0YXNldCwgY29sdW1uKTtcblxuICByZXR1cm4gc2V0KFsnZGF0YXNldHMnLCBkYXRhSWRdLCBuZXdEYXRhc2V0LCBzdGF0ZSk7XG59XG5cbi8qKlxuICogQ29weSBjb2x1bW4gY29udGVudCBhcyBzdHJpbmdzXG4gKiBAbWVtYmVyb2YgdmlzU3RhdGVVcGRhdGVyc1xuICogQHB1YmxpY1xuICovXG5leHBvcnQgZnVuY3Rpb24gY29weVRhYmxlQ29sdW1uVXBkYXRlcihcbiAgc3RhdGU6IFZpc1N0YXRlLFxuICB7ZGF0YUlkLCBjb2x1bW59OiBWaXNTdGF0ZUFjdGlvbnMuQ29weVRhYmxlQ29sdW1uVXBkYXRlckFjdGlvblxuKTogVmlzU3RhdGUge1xuICBjb25zdCBkYXRhc2V0ID0gc3RhdGUuZGF0YXNldHNbZGF0YUlkXTtcbiAgaWYgKCFkYXRhc2V0KSB7XG4gICAgcmV0dXJuIHN0YXRlO1xuICB9XG4gIGNvbnN0IGZpZWxkSWR4ID0gZGF0YXNldC5maWVsZHMuZmluZEluZGV4KGYgPT4gZi5uYW1lID09PSBjb2x1bW4pO1xuICBpZiAoZmllbGRJZHggPCAwKSB7XG4gICAgcmV0dXJuIHN0YXRlO1xuICB9XG4gIGNvbnN0IHt0eXBlfSA9IGRhdGFzZXQuZmllbGRzW2ZpZWxkSWR4XTtcbiAgY29uc3QgdGV4dCA9IGRhdGFzZXQuZGF0YUNvbnRhaW5lclxuICAgIC5tYXAocm93ID0+IHBhcnNlRmllbGRWYWx1ZShyb3cudmFsdWVBdChmaWVsZElkeCksIHR5cGUpLCB0cnVlKVxuICAgIC5qb2luKCdcXG4nKTtcblxuICBjb3B5KHRleHQpO1xuXG4gIHJldHVybiBzdGF0ZTtcbn1cblxuLyoqXG4gKiBTZXQgZGlzcGxheSBmb3JtYXQgZnJvbSBjb2x1bW5zIGZyb20gdXNlciBzZWxlY3Rpb25cbiAqIEBtZW1iZXJvZiB2aXNTdGF0ZVVwZGF0ZXJzXG4gKiBAcHVibGljXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBzZXRDb2x1bW5EaXNwbGF5Rm9ybWF0VXBkYXRlcihcbiAgc3RhdGU6IFZpc1N0YXRlLFxuICB7ZGF0YUlkLCBmb3JtYXRzfTogVmlzU3RhdGVBY3Rpb25zLlNldENvbHVtbkRpc3BsYXlGb3JtYXRVcGRhdGVyQWN0aW9uXG4pOiBWaXNTdGF0ZSB7XG4gIGNvbnN0IGRhdGFzZXQgPSBzdGF0ZS5kYXRhc2V0c1tkYXRhSWRdO1xuICBpZiAoIWRhdGFzZXQpIHtcbiAgICByZXR1cm4gc3RhdGU7XG4gIH1cbiAgbGV0IG5ld0ZpZWxkcyA9IGRhdGFzZXQuZmllbGRzO1xuICBPYmplY3Qua2V5cyhmb3JtYXRzKS5mb3JFYWNoKGNvbHVtbiA9PiB7XG4gICAgY29uc3QgZmllbGRJZHggPSBkYXRhc2V0LmZpZWxkcy5maW5kSW5kZXgoZiA9PiBmLm5hbWUgPT09IGNvbHVtbik7XG4gICAgaWYgKGZpZWxkSWR4ID49IDApIHtcbiAgICAgIGNvbnN0IGRpc3BsYXlGb3JtYXQgPSBmb3JtYXRzW2NvbHVtbl07XG4gICAgICBjb25zdCBmaWVsZCA9IG5ld0ZpZWxkc1tmaWVsZElkeF07XG4gICAgICBuZXdGaWVsZHMgPSBzd2FwXyhtZXJnZV8oe2Rpc3BsYXlGb3JtYXR9KShmaWVsZCkgYXMge2lkOiBzdHJpbmd9KShcbiAgICAgICAgbmV3RmllbGRzIGFzIHtpZDogc3RyaW5nfVtdXG4gICAgICApIGFzIEZpZWxkW107XG4gICAgfVxuICB9KTtcblxuICBjb25zdCBuZXdEYXRhc2V0ID0gY29weVRhYmxlQW5kVXBkYXRlKGRhdGFzZXQsIHtmaWVsZHM6IG5ld0ZpZWxkcyBhcyBGaWVsZFtdfSk7XG4gIHJldHVybiBwaWNrXygnZGF0YXNldHMnKShtZXJnZV8oe1tkYXRhSWRdOiBuZXdEYXRhc2V0fSkpKHN0YXRlKTtcbn1cblxuLyoqXG4gKiBVcGRhdGUgZWRpdG9yXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiB0b2dnbGVFZGl0b3JWaXNpYmlsaXR5VXBkYXRlcihcbiAgc3RhdGU6IFZpc1N0YXRlLFxuICBhY3Rpb246IFZpc1N0YXRlQWN0aW9ucy5Ub2dnbGVFZGl0b3JWaXNpYmlsaXR5VXBkYXRlckFjdGlvblxuKTogVmlzU3RhdGUge1xuICByZXR1cm4ge1xuICAgIC4uLnN0YXRlLFxuICAgIGVkaXRvcjoge1xuICAgICAgLi4uc3RhdGUuZWRpdG9yLFxuICAgICAgdmlzaWJsZTogIXN0YXRlLmVkaXRvci52aXNpYmxlXG4gICAgfVxuICB9O1xufVxuXG5leHBvcnQgZnVuY3Rpb24gc2V0RmlsdGVyQW5pbWF0aW9uVGltZUNvbmZpZ1VwZGF0ZXIoXG4gIHN0YXRlOiBWaXNTdGF0ZSxcbiAge2lkeCwgY29uZmlnfTogVmlzU3RhdGVBY3Rpb25zLlNldEZpbHRlckFuaW1hdGlvblRpbWVDb25maWdBY3Rpb25cbik6IFZpc1N0YXRlIHtcbiAgY29uc3Qgb2xkRmlsdGVyID0gc3RhdGUuZmlsdGVyc1tpZHhdO1xuICBpZiAoIW9sZEZpbHRlcikge1xuICAgIENvbnNvbGUuZXJyb3IoYGZpbHRlcnMuJHtpZHh9IGlzIHVuZGVmaW5lZGApO1xuICAgIHJldHVybiBzdGF0ZTtcbiAgfVxuICBpZiAob2xkRmlsdGVyLnR5cGUgIT09IEZJTFRFUl9UWVBFUy50aW1lUmFuZ2UpIHtcbiAgICBDb25zb2xlLmVycm9yKFxuICAgICAgYHNldEZpbHRlckFuaW1hdGlvblRpbWVDb25maWcgY2FuIG9ubHkgYmUgY2FsbGVkIHRvIHVwZGF0ZSBhIHRpbWUgZmlsdGVyLiBjaGVjayBmaWx0ZXIudHlwZSA9PT0gJ3RpbWVSYW5nZSdgXG4gICAgKTtcbiAgICByZXR1cm4gc3RhdGU7XG4gIH1cblxuICBjb25zdCB1cGRhdGVzID0gY2hlY2tUaW1lQ29uZmlnQXJncyhjb25maWcpO1xuXG4gIHJldHVybiBwaWNrXygnZmlsdGVycycpKHN3YXBfKG1lcmdlXyh1cGRhdGVzKShvbGRGaWx0ZXIpKSkoc3RhdGUpO1xufVxuXG5mdW5jdGlvbiBjaGVja1RpbWVDb25maWdBcmdzKGNvbmZpZykge1xuICBjb25zdCBhbGxvd2VkID0gWyd0aW1lRm9ybWF0JywgJ3RpbWV6b25lJ107XG4gIHJldHVybiBPYmplY3Qua2V5cyhjb25maWcpLnJlZHVjZSgoYWNjdSwgcHJvcCkgPT4ge1xuICAgIGlmICghYWxsb3dlZC5pbmNsdWRlcyhwcm9wKSkge1xuICAgICAgQ29uc29sZS5lcnJvcihcbiAgICAgICAgYHNldExheWVyQW5pbWF0aW9uVGltZUNvbmZpZyB0YWtlcyB0aW1lRm9ybWF0IGFuZC9vciB0aW1lem9uZSBhcyBvcHRpb25zLCBmb3VuZCAke3Byb3B9YFxuICAgICAgKTtcbiAgICAgIHJldHVybiBhY2N1O1xuICAgIH1cblxuICAgIC8vIGhlcmUgd2UgYXJlIE5PVCBjaGVja2luZyBpZiB0aW1lem9uZSBvciB0aW1lRm9ybWF0IGlucHV0IGlzIHZhbGlkXG4gICAgYWNjdVtwcm9wXSA9IGNvbmZpZ1twcm9wXTtcbiAgICByZXR1cm4gYWNjdTtcbiAgfSwge30pO1xufVxuLyoqXG4gKiBVcGRhdGUgZWRpdG9yXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBzZXRMYXllckFuaW1hdGlvblRpbWVDb25maWdVcGRhdGVyKFxuICBzdGF0ZTogVmlzU3RhdGUsXG4gIHtjb25maWd9OiBWaXNTdGF0ZUFjdGlvbnMuU2V0TGF5ZXJBbmltYXRpb25UaW1lQ29uZmlnQWN0aW9uXG4pOiBWaXNTdGF0ZSB7XG4gIGlmICghY29uZmlnKSB7XG4gICAgcmV0dXJuIHN0YXRlO1xuICB9XG4gIGNvbnN0IHVwZGF0ZXMgPSBjaGVja1RpbWVDb25maWdBcmdzKGNvbmZpZyk7XG4gIHJldHVybiBwaWNrXygnYW5pbWF0aW9uQ29uZmlnJykobWVyZ2VfKHVwZGF0ZXMpKShzdGF0ZSk7XG59XG5cbi8vIEZpbmQgZGF0YUlkIGZyb20gYSBzYXZlZCB2aXNTdGF0ZSBwcm9wZXJ0eTpcbi8vIGxheWVycywgZmlsdGVycywgaW50ZXJhY3Rpb25zLCBsYXllckJsZW5kaW5nLCBvdmVybGF5QmxlbmRpbmcsIHNwbGl0TWFwcywgYW5pbWF0aW9uQ29uZmlnLCBlZGl0b3Jcbi8vIHJlcGxhY2UgaXQgd2l0aCBhbm90aGVyIGRhdGFJZFxuZnVuY3Rpb24gZGVmYXVsdFJlcGxhY2VQYXJlbnREYXRhc2V0SWRzKHZhbHVlOiBhbnksIGRhdGFJZDogc3RyaW5nLCBkYXRhSWRUb1JlcGxhY2U6IHN0cmluZykge1xuICBpZiAoQXJyYXkuaXNBcnJheSh2YWx1ZSkpIHtcbiAgICAvLyBmb3IgbGF5ZXJzLCBmaWx0ZXJzLCBjYWxsIGRlZmF1bHRSZXBsYWNlUGFyZW50RGF0YXNldElkcyBvbiBlYWNoIGl0ZW0gaW4gYXJyYXlcbiAgICBjb25zdCByZXBsYWNlZCA9IHZhbHVlXG4gICAgICAubWFwKHYgPT4gZGVmYXVsdFJlcGxhY2VQYXJlbnREYXRhc2V0SWRzKHYsIGRhdGFJZCwgZGF0YUlkVG9SZXBsYWNlKSlcbiAgICAgIC5maWx0ZXIoZCA9PiBkKTtcbiAgICByZXR1cm4gcmVwbGFjZWQubGVuZ3RoID8gcmVwbGFjZWQgOiBudWxsO1xuICB9XG4gIGlmICh0eXBlb2YgdmFsdWUuZGF0YUlkID09PSAnc3RyaW5nJyAmJiB2YWx1ZS5kYXRhSWQgPT09IGRhdGFJZCkge1xuICAgIC8vIG90aGVyc1xuICAgIHJldHVybiB7XG4gICAgICAuLi52YWx1ZSxcbiAgICAgIGRhdGFJZDogZGF0YUlkVG9SZXBsYWNlXG4gICAgfTtcbiAgfSBlbHNlIGlmIChBcnJheS5pc0FycmF5KHZhbHVlLmRhdGFJZCkgJiYgdmFsdWUuZGF0YUlkLmluY2x1ZGVzKGRhdGFJZCkpIHtcbiAgICAvLyBmaWx0ZXJcbiAgICByZXR1cm4ge1xuICAgICAgLi4udmFsdWUsXG4gICAgICBkYXRhSWQ6IHZhbHVlLmRhdGFJZC5tYXAoZCA9PiAoZCA9PT0gZGF0YUlkID8gZGF0YUlkVG9SZXBsYWNlIDogZCkpXG4gICAgfTtcbiAgfSBlbHNlIGlmICh2YWx1ZS5jb25maWc/LmRhdGFJZCAmJiB2YWx1ZS5jb25maWc/LmRhdGFJZCA9PT0gZGF0YUlkKSB7XG4gICAgLy8gbGF5ZXJcbiAgICByZXR1cm4ge1xuICAgICAgLi4udmFsdWUsXG4gICAgICBjb25maWc6IHtcbiAgICAgICAgLi4udmFsdWUuY29uZmlnLFxuICAgICAgICBkYXRhSWQ6IGRhdGFJZFRvUmVwbGFjZVxuICAgICAgfVxuICAgIH07XG4gIH0gZWxzZSBpZiAoaXNPYmplY3QodmFsdWUpICYmIHZhbHVlLmhhc093blByb3BlcnR5KGRhdGFJZCkpIHtcbiAgICAvLyBmb3IgdmFsdWUgc2F2ZWQgYXMge1tkYXRhSWRdOiB7Li4ufX1cbiAgICByZXR1cm4ge1tkYXRhSWRUb1JlcGxhY2VdOiB2YWx1ZVtkYXRhSWRdfTtcbiAgfVxuXG4gIHJldHVybiBudWxsO1xufVxuXG4vLyBGaW5kIGRhdGFzZXRJZHMgZGVyaXZlZCBhIHNhdmVkIHZpc1N0YXRlIFByb3BlcnR5O1xuZnVuY3Rpb24gZmluZENoaWxkRGF0YXNldElkcyh2YWx1ZSkge1xuICBpZiAoQXJyYXkuaXNBcnJheSh2YWx1ZSkpIHtcbiAgICAvLyBmb3IgbGF5ZXJzLCBmaWx0ZXJzLCBjYWxsIGRlZmF1bHRSZXBsYWNlUGFyZW50RGF0YXNldElkcyBvbiBlYWNoIGl0ZW0gaW4gYXJyYXlcbiAgICBjb25zdCBjaGlsZERhdGFJZHMgPSB2YWx1ZS5tYXAoZmluZENoaWxkRGF0YXNldElkcykuZmlsdGVyKGQgPT4gZCk7XG4gICAgcmV0dXJuIGNoaWxkRGF0YUlkcy5sZW5ndGggPyBjaGlsZERhdGFJZHMgOiBudWxsO1xuICB9XG5cbiAgLy8gY2hpbGQgZGF0YSBpZCB1c3VhbGx5IHN0b3JlcyBpbiB0aGUgZGVyaXZlZCBkYXRhc2V0IGluZm9cbiAgcmV0dXJuIHZhbHVlPy5uZXdEYXRhc2V0Py5pbmZvLmlkIHx8IG51bGw7XG59XG5cbi8vIG1vdmVkIHVubWVyZ2VkIGxheWVycywgZmlsdGVycywgaW50ZXJhY3Rpb25zXG5mdW5jdGlvbiBtb3ZlVmFsdWVUb0JlTWVyZ2VkKHN0YXRlLCBwcm9wVmFsdWVzLCB7cHJvcCwgdG9NZXJnZVByb3AsIHNhdmVVbm1lcmdlZH0pIHtcbiAgLy8gcmVtb3ZlIHByb3AgdmFsdWUgZnJvbSBzdGF0ZVxuICAvLyBUT0RPOiBzaG91bGQgd2UgYWRkIHJlbW92ZSB1cGRhdGVyIHRvIG1lcmdlciBhcyB3ZWxsP1xuICBpZiAoIXByb3BWYWx1ZXMpIHtcbiAgICByZXR1cm4gc3RhdGU7XG4gIH1cbiAgY29uc3Qgc3RhdGVSZW1vdmVkID1cbiAgICBwcm9wID09PSAnbGF5ZXJzJ1xuICAgICAgPyBwcm9wVmFsdWVzLnJlZHVjZSgoYWNjdSwgcHJvcFZhbHVlKSA9PiByZW1vdmVMYXllclVwZGF0ZXIoYWNjdSwge2lkOiBwcm9wVmFsdWUuaWR9KSwgc3RhdGUpXG4gICAgICA6IEFycmF5LmlzQXJyYXkoc3RhdGVbcHJvcF0pXG4gICAgICA/IHtcbiAgICAgICAgICAuLi5zdGF0ZSxcbiAgICAgICAgICBbcHJvcF06IHN0YXRlW3Byb3BdLmZpbHRlcihwID0+ICFwcm9wVmFsdWVzLmZpbmQocHJvcFZhbHVlID0+IHAuaWQgPT09IHByb3BWYWx1ZS5pZCkpXG4gICAgICAgIH1cbiAgICAgIDogLy8gaWYgbm90IGFycmF5LCB3ZSB3b24ndCByZW1vdmUgaXQsIHJlbW92ZSBkYXRhc2V0IHNob3VsZCBoYW5kbGUgaXRcbiAgICAgICAgc3RhdGU7XG5cbiAgLy8gbW92ZSB0byBzdGF0ZVRvQmVNZXJnZWRcbiAgY29uc3QgdG9CZU1lcmdlZCA9IHtcbiAgICBbdG9NZXJnZVByb3BdOiBzYXZlVW5tZXJnZWRcbiAgICAgID8gLy8gY2FsbCBtZXJnZSBzYXZlVW5tZXJnZWQgbWV0aG9kXG4gICAgICAgIHNhdmVVbm1lcmdlZChzdGF0ZVJlbW92ZWQsIHByb3BWYWx1ZXMpXG4gICAgICA6IC8vIGlmIHRvTWVyZ2VQcm9wIGlzIGFyYWF5LCBhcHBlbmQgdG8gaXRcbiAgICAgIEFycmF5LmlzQXJyYXkoc3RhdGVSZW1vdmVkW3RvTWVyZ2VQcm9wXSlcbiAgICAgID8gWy4uLnN0YXRlUmVtb3ZlZFt0b01lcmdlUHJvcF0sIC4uLnByb3BWYWx1ZXNdXG4gICAgICA6IC8vIHNhdmUgcHJvcFZhbHVlcyB0byB0b01lcmdlXG4gICAgICBpc09iamVjdChzdGF0ZVJlbW92ZWRbdG9NZXJnZVByb3BdKVxuICAgICAgPyB7XG4gICAgICAgICAgLi4uc3RhdGVSZW1vdmVkW3RvTWVyZ2VQcm9wXSxcbiAgICAgICAgICAuLi5wcm9wVmFsdWVzXG4gICAgICAgIH1cbiAgICAgIDogc3RhdGVSZW1vdmVkW3RvTWVyZ2VQcm9wXVxuICB9O1xuXG4gIHJldHVybiB7XG4gICAgLi4uc3RhdGVSZW1vdmVkLFxuICAgIC4uLnRvQmVNZXJnZWRcbiAgfTtcbn1cblxuZnVuY3Rpb24gcmVwbGFjZURhdGFzZXRBbmREZXBzPFQgZXh0ZW5kcyBWaXNTdGF0ZT4oXG4gIHN0YXRlOiBULFxuICBkYXRhSWQ6IHN0cmluZyxcbiAgZGF0YUlkVG9Vc2U6IHN0cmluZ1xuKTogVCB7XG4gIHJldHVybiBjb21wb3NlXzxUPihbXG4gICAgYXBwbHlfKHJlcGxhY2VEYXRhc2V0RGVwc0luU3RhdGUsIHtkYXRhSWQsIGRhdGFJZFRvVXNlfSksXG4gICAgYXBwbHlfKHJlbW92ZURhdGFzZXRVcGRhdGVyLCB7ZGF0YUlkfSlcbiAgXSkoc3RhdGUpO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gcHJlcGFyZVN0YXRlRm9yRGF0YXNldFJlcGxhY2U8VCBleHRlbmRzIFZpc1N0YXRlPihcbiAgc3RhdGU6IFQsXG4gIGRhdGFJZDogc3RyaW5nLFxuICBkYXRhSWRUb1VzZTogc3RyaW5nXG4pOiBUIHtcbiAgY29uc3Qgc2VyaWFsaXplZFN0YXRlID0gc2VyaWFsaXplVmlzU3RhdGUoc3RhdGUsIHN0YXRlLnNjaGVtYSk7XG4gIGNvbnN0IG5leHRTdGF0ZSA9IHJlcGxhY2VEYXRhc2V0QW5kRGVwcyhzdGF0ZSwgZGF0YUlkLCBkYXRhSWRUb1VzZSk7XG4gIC8vIG1ha2UgYSBjb3B5IG9mIGxheWVyT3JkZXIsIGJlY2F1c2UgbGF5ZXIgaWQgd2lsbCBiZSByZW1vdmVkIGZyb20gaXQgYnkgY2FsbGluZyByZW1vdmVMYXllclVwZGF0ZXJcbiAgY29uc3QgcHJlc2VydmVMYXllck9yZGVyID0gWy4uLnN0YXRlLmxheWVyT3JkZXJdO1xuXG4gIC8vIHByZXNlcnZlIGRhdGFzZXQgb3JkZXJcbiAgbmV4dFN0YXRlLnByZXNlcnZlRGF0YXNldE9yZGVyID0gT2JqZWN0LmtleXMoc3RhdGUuZGF0YXNldHMpLm1hcChkID0+XG4gICAgZCA9PT0gZGF0YUlkID8gZGF0YUlkVG9Vc2UgOiBkXG4gICk7XG5cbiAgLy8gcHJlc2VydmVMYXllck9yZGVyXG4gIGlmIChuZXh0U3RhdGUubGF5ZXJUb0JlTWVyZ2VkPy5sZW5ndGgpIHtcbiAgICAvLyBjb3B5IHNwbGl0IG1hcHMgdG8gYmUgbWVyZ2VkLCBiZWNhdXNlIGl0IHdpbGwgYmUgcmVzZXQgaW4gcmVtb3ZlIGxheWVyXG4gICAgbmV4dFN0YXRlLnNwbGl0TWFwc1RvQmVNZXJnZWQgPSBzZXJpYWxpemVkU3RhdGU/LnNwbGl0TWFwcyA/PyBbXTtcbiAgICBuZXh0U3RhdGUubGF5ZXJPcmRlciA9IFsuLi5wcmVzZXJ2ZUxheWVyT3JkZXJdO1xuICB9XG5cbiAgcmV0dXJuIG5leHRTdGF0ZTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHJlcGxhY2VEYXRhc2V0RGVwc0luU3RhdGU8VCBleHRlbmRzIFZpc1N0YXRlPihcbiAgc3RhdGU6IFQsXG4gIHtkYXRhSWQsIGRhdGFJZFRvVXNlfToge2RhdGFJZDogc3RyaW5nOyBkYXRhSWRUb1VzZTogc3RyaW5nfVxuKTogVCB7XG4gIGNvbnN0IHNlcmlhbGl6ZWRTdGF0ZSA9IHNlcmlhbGl6ZVZpc1N0YXRlKHN0YXRlLCBzdGF0ZS5zY2hlbWEpO1xuXG4gIGNvbnN0IG5leHRTdGF0ZSA9IHN0YXRlLm1lcmdlcnMucmVkdWNlKFxuICAgIChcbiAgICAgIGFjY3VTdGF0ZSxcbiAgICAgIHtwcm9wLCB0b01lcmdlUHJvcCwgcmVwbGFjZVBhcmVudERhdGFzZXRJZHMsIGdldENoaWxkRGF0YXNldElkcywgc2F2ZVVubWVyZ2VkLCBwcmVzZXJ2ZU9yZGVyfVxuICAgICkgPT4ge1xuICAgICAgLy8gZ2V0IGRhdGFzZXQgaWRzIHRoYXQgYXJlIGRlcGVuZHMgb24gdGhpcyBkYXRhc2V0XG4gICAgICBjb25zdCBwcm9wcyA9IHRvQXJyYXkocHJvcCk7XG4gICAgICBjb25zdCB0b01lcmdlUHJvcHMgPSB0b0FycmF5KHRvTWVyZ2VQcm9wKTtcbiAgICAgIGNvbnN0IHNhdmVkUHJvcHMgPSBzZXJpYWxpemVkU3RhdGUgPyBwcm9wcy5tYXAocCA9PiBzZXJpYWxpemVkU3RhdGVbcF0pIDogW107XG5cbiAgICAgIGxldCByZXBsYWNlZFN0YXRlID0gYWNjdVN0YXRlO1xuICAgICAgc2F2ZWRQcm9wcy5mb3JFYWNoKChwcm9wVmFsdWUsIGkpID0+IHtcbiAgICAgICAgY29uc3QgbWVyZ2VyT3B0aW9ucyA9IHtcbiAgICAgICAgICBwcm9wOiBwcm9wc1tpXSxcbiAgICAgICAgICB0b01lcmdlUHJvcDogdG9NZXJnZVByb3BzW2ldLFxuICAgICAgICAgIGdldENoaWxkRGF0YXNldElkcyxcbiAgICAgICAgICBzYXZlVW5tZXJnZWRcbiAgICAgICAgfTtcblxuICAgICAgICBjb25zdCByZXBsYWNlZEl0ZW0gPVxuICAgICAgICAgIHJlcGxhY2VQYXJlbnREYXRhc2V0SWRzPy4ocHJvcFZhbHVlLCBkYXRhSWQsIGRhdGFJZFRvVXNlKSB8fFxuICAgICAgICAgIGRlZmF1bHRSZXBsYWNlUGFyZW50RGF0YXNldElkcyhwcm9wVmFsdWUsIGRhdGFJZCwgZGF0YUlkVG9Vc2UpO1xuICAgICAgICByZXBsYWNlZFN0YXRlID0gcmVwbGFjZWRJdGVtXG4gICAgICAgICAgPyByZXBsYWNlUHJvcFZhbHVlSW5TdGF0ZShyZXBsYWNlZFN0YXRlLCByZXBsYWNlZEl0ZW0sIG1lcmdlck9wdGlvbnMpXG4gICAgICAgICAgOiByZXBsYWNlZFN0YXRlO1xuXG4gICAgICAgIGlmIChcbiAgICAgICAgICBtZXJnZXJPcHRpb25zLnRvTWVyZ2VQcm9wICE9PSB1bmRlZmluZWQgJiZcbiAgICAgICAgICByZXBsYWNlZFN0YXRlW21lcmdlck9wdGlvbnMudG9NZXJnZVByb3BdPy5sZW5ndGggJiZcbiAgICAgICAgICBwcmVzZXJ2ZU9yZGVyXG4gICAgICAgICkge1xuICAgICAgICAgIHJlcGxhY2VkU3RhdGVbcHJlc2VydmVPcmRlcl0gPSBwcm9wVmFsdWUubWFwKGl0ZW0gPT4gaXRlbS5pZCk7XG4gICAgICAgIH1cbiAgICAgIH0pO1xuXG4gICAgICByZXR1cm4gcmVwbGFjZWRTdGF0ZTtcbiAgICB9LFxuICAgIHN0YXRlXG4gICk7XG5cbiAgcmV0dXJuIG5leHRTdGF0ZTtcbn1cblxuZnVuY3Rpb24gcmVwbGFjZVByb3BWYWx1ZUluU3RhdGUoXG4gIHN0YXRlLFxuICByZXBsYWNlZEl0ZW0sXG4gIHtwcm9wLCB0b01lcmdlUHJvcCwgZ2V0Q2hpbGREYXRhc2V0SWRzLCBzYXZlVW5tZXJnZWR9XG4pIHtcbiAgLy8gcHJvcCBpcyBkZXBlbmRzIG9uIHRoZSBkYXRhc2V0IHRvIGJlIHJlcGxhY2VkXG4gIC8vIHJlbW92ZSBwcm9wIGZyb20gc3RhdGUsIGFuZCBtb3ZlIGl0IHRvIHRvQmVNZXJnZWRcbiAgbGV0IG5leHRTdGF0ZSA9IG1vdmVWYWx1ZVRvQmVNZXJnZWQoc3RhdGUsIHJlcGxhY2VkSXRlbSwge3Byb3AsIHRvTWVyZ2VQcm9wLCBzYXZlVW5tZXJnZWR9KTtcbiAgY29uc3QgY2hpbGREYXRhSWRzID0gZ2V0Q2hpbGREYXRhc2V0SWRzPy4ocmVwbGFjZWRJdGVtKSB8fCBmaW5kQ2hpbGREYXRhc2V0SWRzKHJlcGxhY2VkSXRlbSk7XG5cbiAgaWYgKGNoaWxkRGF0YUlkcykge1xuICAgIG5leHRTdGF0ZSA9IHRvQXJyYXkoY2hpbGREYXRhSWRzKS5yZWR1Y2UoKGFjY3UsIGNoaWxkRGF0YUlkKSA9PiB7XG4gICAgICAvLyBzaG91bGRuJ3QgbmVlZCB0byBjaGFuZ2UgY2hpbGQgZGF0YXNldCBpZCxcbiAgICAgIC8vIGJ1dCBzdGlsbCBuZWVkIHRvIG1vdmUgb3V0IG9mIHN0YXRlIGFuZCBtZXJnZSBiYWNrIGluXG4gICAgICByZXR1cm4gcmVwbGFjZURhdGFzZXRBbmREZXBzKGFjY3UsIGNoaWxkRGF0YUlkLCBjaGlsZERhdGFJZCk7XG4gICAgfSwgbmV4dFN0YXRlKTtcbiAgfVxuICByZXR1cm4gbmV4dFN0YXRlO1xufVxuIl19
|