@carto/kepler.gl 0.0.71 → 0.0.72-alpha.2
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/components/common/item-selector/accessor.js +2 -2
- package/dist/components/common/item-selector/dropdown-list.js +12 -9
- package/dist/components/common/item-selector/item-selector.js +2 -2
- package/dist/components/side-panel/layer-panel/color-range-selector.js +28 -7
- package/dist/components/side-panel/layer-panel/color-selector.js +4 -1
- package/dist/components/side-panel/layer-panel/hex-column-config.js +97 -0
- package/dist/components/side-panel/layer-panel/layer-configurator.js +45 -11
- package/dist/constants/color-ranges.js +12 -2
- package/dist/constants/default-settings.js +7 -4
- package/dist/layers/base-layer.js +197 -49
- package/dist/layers/point-layer/point-layer.js +2 -3
- package/dist/localization/en.js +5 -2
- package/dist/reducers/vis-state-merger.js +16 -2
- package/dist/schemas/vis-state-schema.js +69 -34
- package/dist/utils/color-utils.js +17 -21
- package/dist/utils/custom-scales.js +28 -0
- package/dist/utils/data-utils.js +31 -1
- package/dist/utils/index.js +7 -1
- package/dist/utils/layer-utils.js +2 -1
- package/dist/utils/table-utils/kepler-table.js +20 -1
- package/package.json +2 -1
- package/src/components/common/item-selector/accessor.js +1 -1
- package/src/components/common/item-selector/dropdown-list.js +23 -15
- package/src/components/common/item-selector/item-selector.js +1 -1
- package/src/components/side-panel/layer-panel/color-range-selector.js +30 -7
- package/src/components/side-panel/layer-panel/color-selector.js +3 -0
- package/src/components/side-panel/layer-panel/hex-column-config.js +45 -0
- package/src/components/side-panel/layer-panel/layer-configurator.js +52 -7
- package/src/constants/color-ranges.js +9 -0
- package/src/constants/default-settings.js +5 -2
- package/src/layers/base-layer.js +138 -30
- package/src/layers/index.d.ts +3 -1
- package/src/layers/layer-factory.d.ts +1 -0
- package/src/layers/point-layer/point-layer.js +1 -1
- package/src/localization/en.js +4 -1
- package/src/reducers/vis-state-merger.js +13 -1
- package/src/schemas/vis-state-schema.js +24 -1
- package/src/utils/color-utils.js +9 -0
- package/src/utils/custom-scales.js +20 -0
- package/src/utils/data-utils.d.ts +1 -0
- package/src/utils/data-utils.js +19 -0
- package/src/utils/index.js +1 -1
- package/src/utils/layer-utils.js +1 -0
- package/src/utils/table-utils/kepler-table.js +22 -0
|
@@ -481,15 +481,29 @@ function validateSavedVisualChannels(fields, newLayer, savedLayer) {
|
|
|
481
481
|
scale = _ref7.scale,
|
|
482
482
|
key = _ref7.key;
|
|
483
483
|
var foundField;
|
|
484
|
+
var colorFieldProps = {};
|
|
484
485
|
|
|
485
486
|
if (savedLayer.config) {
|
|
487
|
+
var _savedLayer$config$fi;
|
|
488
|
+
|
|
486
489
|
if (savedLayer.config[field]) {
|
|
487
490
|
foundField = fields.find(function (fd) {
|
|
488
491
|
return savedLayer.config && fd.name === savedLayer.config[field].name;
|
|
489
492
|
});
|
|
490
493
|
}
|
|
491
494
|
|
|
492
|
-
|
|
495
|
+
if ((_savedLayer$config$fi = savedLayer.config[field]) !== null && _savedLayer$config$fi !== void 0 && _savedLayer$config$fi.colorColumn) {
|
|
496
|
+
var colorColumnField = fields.find(function (fd) {
|
|
497
|
+
return savedLayer.config && fd.name === savedLayer.config[field].colorColumn;
|
|
498
|
+
});
|
|
499
|
+
|
|
500
|
+
if (colorColumnField) {
|
|
501
|
+
colorFieldProps.colorColumn = colorColumnField.name;
|
|
502
|
+
colorFieldProps.colorColumnIdx = colorColumnField.fieldIdx;
|
|
503
|
+
}
|
|
504
|
+
}
|
|
505
|
+
|
|
506
|
+
var foundChannel = _objectSpread(_objectSpread({}, foundField ? (0, _defineProperty2["default"])({}, field, _objectSpread(_objectSpread({}, foundField), colorFieldProps)) : {}), savedLayer.config[scale] ? (0, _defineProperty2["default"])({}, scale, savedLayer.config[scale]) : {});
|
|
493
507
|
|
|
494
508
|
if (Object.keys(foundChannel).length) {
|
|
495
509
|
newLayer.updateLayerConfig(foundChannel);
|
|
@@ -612,4 +626,4 @@ var VIS_STATE_MERGERS = [{
|
|
|
612
626
|
prop: 'animationConfig'
|
|
613
627
|
}];
|
|
614
628
|
exports.VIS_STATE_MERGERS = VIS_STATE_MERGERS;
|
|
615
|
-
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9yZWR1Y2Vycy92aXMtc3RhdGUtbWVyZ2VyLmpzIl0sIm5hbWVzIjpbIm1lcmdlRmlsdGVycyIsInN0YXRlIiwiZmlsdGVyc1RvTWVyZ2UiLCJBcnJheSIsImlzQXJyYXkiLCJsZW5ndGgiLCJ2YWxpZGF0ZWQiLCJmYWlsZWQiLCJ1cGRhdGVkRGF0YXNldHMiLCJ1cGRhdGVkRmlsdGVycyIsImZpbHRlcnMiLCJkYXRhc2V0c1RvRmlsdGVyIiwibWFwIiwiZiIsImRhdGFJZCIsImZpbHRlcmVkIiwibGF5ZXJzIiwiZGF0YXNldHMiLCJmaWx0ZXJUb0JlTWVyZ2VkIiwiY3JlYXRlTGF5ZXJGcm9tQ29uZmlnIiwibGF5ZXJDb25maWciLCJ2YWxpZGF0ZUxheWVyc0J5RGF0YXNldHMiLCJsYXllckNsYXNzZXMiLCJuZXdMYXllciIsInVwZGF0ZUxheWVyRG9tYWluIiwic2VyaWFsaXplTGF5ZXIiLCJzYXZlZFZpc1N0YXRlIiwidmlzU3RhdGVTY2hlbWEiLCJDVVJSRU5UX1ZFUlNJT04iLCJzYXZlIiwibGF5ZXJPcmRlciIsInZpc1N0YXRlIiwibG9hZGVkTGF5ZXIiLCJsb2FkIiwibWVyZ2VMYXllcnMiLCJsYXllcnNUb01lcmdlIiwiZnJvbUNvbmZpZyIsInByZXNlcnZlTGF5ZXJPcmRlciIsImwiLCJpZCIsIm1lcmdlZExheWVyIiwidW5tZXJnZWQiLCJpbnNlcnRMYXllckF0UmlnaHRPcmRlciIsIm5ld0xheWVyT3JkZXIiLCJuZXdMYXllcnMiLCJsYXllclRvQmVNZXJnZWQiLCJjdXJyZW50TGF5ZXJzIiwibGF5ZXJzVG9JbnNlcnQiLCJjdXJyZW50T3JkZXIiLCJwcmVzZXJ2ZWRPcmRlciIsImxheWVyT3JkZXJRdWV1ZSIsImkiLCJleHBlY3RlZElkeCIsImluZGV4T2YiLCJpbnNlcnRBdCIsInByZWNlZWRJZHgiLCJwcmVjZWVkTGF5ZXIiLCJjb25jYXQiLCJmaW5kSW5kZXgiLCJtZXJnZUludGVyYWN0aW9ucyIsImludGVyYWN0aW9uVG9CZU1lcmdlZCIsIm1lcmdlZCIsIk9iamVjdCIsImtleXMiLCJmb3JFYWNoIiwia2V5IiwiaW50ZXJhY3Rpb25Db25maWciLCJjdXJyZW50Q29uZmlnIiwiY29uZmlnIiwiZW5hYmxlZCIsImNvbmZpZ1NhdmVkIiwiY29uZmlnVG9NZXJnZSIsIm1lcmdlSW50ZXJhY3Rpb25Ub29sdGlwQ29uZmlnIiwibWVyZ2VkVG9vbHRpcCIsInVubWVyZ2VkVG9vbHRpcCIsImZpZWxkc1RvU2hvdyIsInRvb2x0aXAiLCJtZXJnZVNwbGl0TWFwcyIsInNwbGl0TWFwcyIsInNtIiwiZW50cmllcyIsInZhbHVlIiwicHVzaFRvIiwiZmluZCIsInNwbGl0TWFwc1RvQmVNZXJnZWQiLCJ0b29sdGlwQ29uZmlnIiwiYWxsRmllbGRzIiwiZmllbGRzIiwiZCIsIm5hbWUiLCJmb3VuZEZpZWxkc1RvU2hvdyIsIm1ldGFkYXRhIiwiaXNEeW5hbWljU3BhdGlhbEluZGV4IiwiZmlsdGVyIiwiZmllbGQiLCJpbmNsdWRlcyIsIm1lcmdlTGF5ZXJCbGVuZGluZyIsImxheWVyQmxlbmRpbmciLCJMQVlFUl9CTEVORElOR1MiLCJtZXJnZUFuaW1hdGlvbkNvbmZpZyIsImFuaW1hdGlvbiIsImN1cnJlbnRUaW1lIiwiYW5pbWF0aW9uQ29uZmlnIiwiZG9tYWluIiwidmFsaWRhdGVTYXZlZExheWVyQ29sdW1ucyIsInNhdmVkQ29scyIsImVtcHR5Q29scyIsImNvbHVtbnMiLCJzYXZlZCIsImZpZWxkSWR4IiwiYWxsQ29sRm91bmQiLCJldmVyeSIsInZhbGlkYXRlQ29sdW1uIiwiY29sdW1uIiwib3B0aW9uYWwiLCJ2YWxpZGF0b3IiLCJ2YWxpZGF0ZVNhdmVkVGV4dExhYmVsIiwic2F2ZWRUZXh0TGFiZWwiLCJsYXllclRleHRMYWJlbCIsInNhdmVkVGV4dExhYmVscyIsInRleHRMYWJlbCIsImZkIiwicmVkdWNlIiwiYWNjdSIsInZhbGlkYXRlU2F2ZWRWaXN1YWxDaGFubmVscyIsInNhdmVkTGF5ZXIiLCJ2YWx1ZXMiLCJ2aXN1YWxDaGFubmVscyIsInNjYWxlIiwiZm91bmRGaWVsZCIsImZvdW5kQ2hhbm5lbCIsInVwZGF0ZUxheWVyQ29uZmlnIiwidmFsaWRhdGVWaXN1YWxDaGFubmVsIiwibGF5ZXIiLCJ2YWxpZGF0ZUxheWVyIiwidmFsaWRhdGVMYXllcldpdGhEYXRhIiwicHVzaCIsIm9wdGlvbnMiLCJ0eXBlIiwiaGFzT3duUHJvcGVydHkiLCJsYWJlbCIsImNvbG9yIiwiaXNWaXNpYmxlIiwiaGlkZGVuIiwiaGlnaGxpZ2h0Q29sb3IiLCJ2aXNpYmlsaXR5Qnlab29tIiwiY29sdW1uQ29uZmlnIiwiZ2V0TGF5ZXJDb2x1bW5zIiwiYWxsb3dFbXB0eUNvbHVtbiIsInZpc0NvbmZpZyIsImNvcHlMYXllckNvbmZpZyIsInNoYWxsb3dDb3B5IiwiaXNWYWxpZE1lcmdlciIsIm1lcmdlciIsIm1lcmdlIiwicHJvcCIsIlZJU19TVEFURV9NRVJHRVJTIiwidG9NZXJnZVByb3AiXSwibWFwcGluZ3MiOiI7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7QUFvQkE7O0FBQ0E7O0FBQ0E7O0FBQ0E7O0FBQ0E7O0FBRUE7O0FBQ0E7O0FBQ0E7O0FBQ0E7Ozs7Ozs7Ozs7OztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNPLFNBQVNBLFlBQVQsQ0FBc0JDLEtBQXRCLEVBQTZCQyxjQUE3QixFQUE2QztBQUNsRCxNQUFJLENBQUNDLEtBQUssQ0FBQ0MsT0FBTixDQUFjRixjQUFkLENBQUQsSUFBa0MsQ0FBQ0EsY0FBYyxDQUFDRyxNQUF0RCxFQUE4RDtBQUM1RCxXQUFPSixLQUFQO0FBQ0Q7O0FBSGlELDhCQUtMLGdEQUE4QkEsS0FBOUIsRUFBcUNDLGNBQXJDLENBTEs7QUFBQSxNQUszQ0ksU0FMMkMseUJBSzNDQSxTQUwyQztBQUFBLE1BS2hDQyxNQUxnQyx5QkFLaENBLE1BTGdDO0FBQUEsTUFLeEJDLGVBTHdCLHlCQUt4QkEsZUFMd0IsRUFPbEQ7OztBQUNBLE1BQUlDLGNBQWMsaURBQVFSLEtBQUssQ0FB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U0FEeUI7QUFFekI3QixJQUFBQSxTQUFTLEVBQVRBO0FBRnlCLEdBQTNCO0FBS0EsU0FBT2pHLFFBQVA7QUFDRDs7QUFFTSxTQUFTaUksYUFBVCxDQUF1QkMsTUFBdkIsRUFBK0I7QUFDcEMsU0FBTyxxQkFBU0EsTUFBVCxLQUFvQixPQUFPQSxNQUFNLENBQUNDLEtBQWQsS0FBd0IsVUFBNUMsSUFBMEQsT0FBT0QsTUFBTSxDQUFDRSxJQUFkLEtBQXVCLFFBQXhGO0FBQ0Q7O0FBRU0sSUFBTUMsaUJBQWlCLEdBQUcsQ0FDL0I7QUFBQ0YsRUFBQUEsS0FBSyxFQUFFeEgsV0FBUjtBQUFxQnlILEVBQUFBLElBQUksRUFBRSxRQUEzQjtBQUFxQ0UsRUFBQUEsV0FBVyxFQUFFO0FBQWxELENBRCtCLEVBRS9CO0FBQUNILEVBQUFBLEtBQUssRUFBRTFKLFlBQVI7QUFBc0IySixFQUFBQSxJQUFJLEVBQUUsU0FBNUI7QUFBdUNFLEVBQUFBLFdBQVcsRUFBRTtBQUFwRCxDQUYrQixFQUcvQjtBQUFDSCxFQUFBQSxLQUFLLEVBQUUvRixpQkFBUjtBQUEyQmdHLEVBQUFBLElBQUksRUFBRSxtQkFBakM7QUFBc0RFLEVBQUFBLFdBQVcsRUFBRTtBQUFuRSxDQUgrQixFQUkvQjtBQUFDSCxFQUFBQSxLQUFLLEVBQUUxRCxrQkFBUjtBQUE0QjJELEVBQUFBLElBQUksRUFBRTtBQUFsQyxDQUorQixFQUsvQjtBQUFDRCxFQUFBQSxLQUFLLEVBQUU3RSxjQUFSO0FBQXdCOEUsRUFBQUEsSUFBSSxFQUFFLFdBQTlCO0FBQTJDRSxFQUFBQSxXQUFXLEVBQUU7QUFBeEQsQ0FMK0IsRUFNL0I7QUFBQ0gsRUFBQUEsS0FBSyxFQUFFdkQsb0JBQVI7QUFBOEJ3RCxFQUFBQSxJQUFJLEVBQUU7QUFBcEMsQ0FOK0IsQ0FBMUIiLCJzb3VyY2VzQ29udGVudCI6WyIvLyBDb3B5cmlnaHQgKGMpIDIwMjIgVWJlciBUZWNobm9sb2dpZXMsIEluYy5cbi8vXG4vLyBQZXJtaXNzaW9uIGlzIGhlcmVieSBncmFudGVkLCBmcmVlIG9mIGNoYXJnZSwgdG8gYW55IHBlcnNvbiBvYnRhaW5pbmcgYSBjb3B5XG4vLyBvZiB0aGlzIHNvZnR3YXJlIGFuZCBhc3NvY2lhdGVkIGRvY3VtZW50YXRpb24gZmlsZXMgKHRoZSBcIlNvZnR3YXJlXCIpLCB0byBkZWFsXG4vLyBpbiB0aGUgU29mdHdhcmUgd2l0aG91dCByZXN0cmljdGlvbiwgaW5jbHVkaW5nIHdpdGhvdXQgbGltaXRhdGlvbiB0aGUgcmlnaHRzXG4vLyB0byB1c2UsIGNvcHksIG1vZGlmeSwgbWVyZ2UsIHB1Ymxpc2gsIGRpc3RyaWJ1dGUsIHN1YmxpY2Vuc2UsIGFuZC9vciBzZWxsXG4vLyBjb3BpZXMgb2YgdGhlIFNvZnR3YXJlLCBhbmQgdG8gcGVybWl0IHBlcnNvbnMgdG8gd2hvbSB0aGUgU29mdHdhcmUgaXNcbi8vIGZ1cm5pc2hlZCB0byBkbyBzbywgc3ViamVjdCB0byB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnM6XG4vL1xuLy8gVGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UgYW5kIHRoaXMgcGVybWlzc2lvbiBub3RpY2Ugc2hhbGwgYmUgaW5jbHVkZWQgaW5cbi8vIGFsbCBjb3BpZXMgb3Igc3Vic3RhbnRpYWwgcG9ydGlvbnMgb2YgdGhlIFNvZnR3YXJlLlxuLy9cbi8vIFRIRSBTT0ZUV0FSRSBJUyBQUk9WSURFRCBcIkFTIElTXCIsIFdJVEhPVVQgV0FSUkFOVFkgT0YgQU5ZIEtJTkQsIEVYUFJFU1MgT1Jcbi8vIElNUExJRUQsIElOQ0xVRElORyBCVVQgTk9UIExJTUlURUQgVE8gVEhFIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZLFxuLy8gRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQU5EIE5PTklORlJJTkdFTUVOVC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFXG4vLyBBVVRIT1JTIE9SIENPUFlSSUdIVCBIT0xERVJTIEJFIExJQUJMRSBGT1IgQU5ZIENMQUlNLCBEQU1BR0VTIE9SIE9USEVSXG4vLyBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQU4gQUNUSU9OIE9GIENPTlRSQUNULCBUT1JUIE9SIE9USEVSV0lTRSwgQVJJU0lORyBGUk9NLFxuLy8gT1VUIE9GIE9SIElOIENPTk5FQ1RJT04gV0lUSCBUSEUgU09GVFdBUkUgT1IgVEhFIFVTRSBPUiBPVEhFUiBERUFMSU5HUyBJTlxuLy8gVEhFIFNPRlRXQVJFLlxuXG5pbXBvcnQgdW5pcSBmcm9tICdsb2Rhc2gudW5pcSc7XG5pbXBvcnQgcGljayBmcm9tICdsb2Rhc2gucGljayc7XG5pbXBvcnQgZmxhdHRlbkRlZXAgZnJvbSAnbG9kYXNoLmZsYXR0ZW5kZWVwJztcbmltcG9ydCB7aXNPYmplY3QsIGFycmF5SW5zZXJ0fSBmcm9tICd1dGlscy91dGlscyc7XG5pbXBvcnQge2FwcGx5RmlsdGVyc1RvRGF0YXNldHMsIHZhbGlkYXRlRmlsdGVyc1VwZGF0ZURhdGFzZXRzfSBmcm9tICd1dGlscy9maWx0ZXItdXRpbHMnO1xuXG5pbXBvcnQge2dldEluaXRpYWxNYXBMYXllcnNGb3JTcGxpdE1hcH0gZnJvbSAndXRpbHMvc3BsaXQtbWFwLXV0aWxzJztcbmltcG9ydCB7cmVzZXRGaWx0ZXJHcHVNb2RlLCBhc3NpZ25HcHVDaGFubmVsc30gZnJvbSAndXRpbHMvZ3B1LWZpbHRlci11dGlscyc7XG5pbXBvcnQge0xBWUVSX0JMRU5ESU5HU30gZnJvbSAnY29uc3RhbnRzL2RlZmF1bHQtc2V0dGluZ3MnO1xuaW1wb3J0IHtDVVJSRU5UX1ZFUlNJT04sIHZpc1N0YXRlU2NoZW1hfSBmcm9tICdzY2hlbWFzJztcblxuLyoqXG4gKiBNZXJnZSBsb2FkZWQgZmlsdGVycyB3aXRoIGN1cnJlbnQgc3RhdGUsIGlmIG5vIGZpZWxkcyBvciBkYXRhIGFyZSBsb2FkZWRcbiAqIHNhdmUgaXQgZm9yIGxhdGVyXG4gKlxuICogQHR5cGUge3R5cGVvZiBpbXBvcnQoJy4vdmlzLXN0YXRlLW1lcmdlcicpLm1lcmdlRmlsdGVyc31cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIG1lcmdlRmlsdGVycyhzdGF0ZSwgZmlsdGVyc1RvTWVyZ2UpIHtcbiAgaWYgKCFBcnJheS5pc0FycmF5KGZpbHRlcnNUb01lcmdlKSB8fCAhZmlsdGVyc1RvTWVyZ2UubGVuZ3RoKSB7XG4gICAgcmV0dXJuIHN0YXRlO1xuICB9XG5cbiAgY29uc3Qge3ZhbGlkYXRlZCwgZmFpbGVkLCB1cGRhdGVkRGF0YXNldHN9ID0gdmFsaWRhdGVGaWx0ZXJzVXBkYXRlRGF0YXNldHMoc3RhdGUsIGZpbHRlcnNUb01lcmdlKTtcblxuICAvLyBtZXJnZSBmaWx0ZXIgd2l0aCBleGlzdGluZ1xuICBsZXQgdXBkYXRlZEZpbHRlcnMgPSBbLi4uKHN0YXRlLmZpbHRlcnMgfHwgW10pLCAuLi52YWxpZGF0ZWRdO1xuICB1cGRhdGVkRmlsdGVycyA9IHJlc2V0RmlsdGVyR3B1TW9kZSh1cGRhdGVkRmlsdGVycyk7XG4gIHVwZGF0ZWRGaWx0ZXJzID0gYXNzaWduR3B1Q2hhbm5lbHModXBkYXRlZEZpbHRlcnMpO1xuICAvLyBmaWx0ZXIgZGF0YVxuICBjb25zdCBkYXRhc2V0c1RvRmlsdGVyID0gdW5pcShmbGF0dGVuRGVlcCh2YWxpZGF0ZWQubWFwKGYgPT4gZi5kYXRhSWQpKSk7XG5cbiAgY29uc3QgZmlsdGVyZWQgPSBhcHBseUZpbHRlcnNUb0RhdGFzZXRzKFxuICAgIGRhdGFzZXRzVG9GaWx0ZXIsXG4gICAgdXBkYXRlZERhdGFzZXRzLFxuICAgIHVwZGF0ZWRGaWx0ZXJzLFxuICAgIHN0YXRlLmxheWVyc1xuICApO1xuXG4gIHJldHVybiB7XG4gICAgLi4uc3RhdGUsXG4gICAgZmlsdGVyczogdXBkYXRlZEZpbHRlcnMsXG4gICAgZGF0YXNldHM6IGZpbHRlcmVkLFxuICAgIGZpbHRlclRvQmVNZXJnZWQ6IFsuLi5zdGF0ZS5maWx0ZXJUb0JlTWVyZ2VkLCAuLi5mYWlsZWRdXG4gIH07XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBjcmVhdGVMYXllckZyb21Db25maWcoc3RhdGUsIGxheWVyQ29uZmlnKSB7XG4gIC8vIGZpcnN0IHZhbGlkYXRlIGNvbmZpZyBhZ2FpbnN0IGRhdGFzZXRcbiAgY29uc3Qge3ZhbGlkYXRlZCwgZmFpbGVkfSA9IHZhbGlkYXRlTGF5ZXJzQnlEYXRhc2V0cyhzdGF0ZS5kYXRhc2V0cywgc3RhdGUubGF5ZXJDbGFzc2VzLCBbXG4gICAgbGF5ZXJDb25maWdcbiAgXSk7XG5cbiAgaWYgKGZhaWxlZC5sZW5ndGggfHwgIXZhbGlkYXRlZC5sZW5ndGgpIHtcbiAgICAvLyBmYWlsZWRcbiAgICByZXR1cm4gbnVsbDtcbiAgfVxuXG4gIGNvbnN0IG5ld0xheWVyID0gdmFsaWRhdGVkWzBdO1xuICBuZXdMYXllci51cGRhdGVMYXllckRvbWFpbihzdGF0ZS5kYXRhc2V0cyk7XG4gIHJldHVybiBuZXdMYXllcjtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHNlcmlhbGl6ZUxheWVyKG5ld0xheWVyKSB7XG4gIGNvbnN0IHNhdmVkVmlzU3RhdGUgPSB2aXNTdGF0ZVNjaGVtYVtDVVJSRU5UX1ZFUlNJT05dLnNhdmUoe1xuICAgIGxheWVyczogW25ld0xheWVyXSxcbiAgICBsYXllck9yZGVyOiBbMF1cbiAgfSkudmlzU3RhdGU7XG4gIGNvbnN0IGxvYWRlZExheWVyID0gdmlzU3RhdGVTY2hlbWFbQ1VSUkVOVF9WRVJTSU9OXS5sb2FkKHNhdmVkVmlzU3RhdGUpLnZpc1N0YXRlLmxheWVyc1swXTtcbiAgcmV0dXJuIGxvYWRlZExheWVyO1xufVxuXG4vKipcbiAqIE1lcmdlIGxheWVycyBmcm9tIGRlLXNlcmlhbGl6ZWQgc3RhdGUsIGlmIG5vIGZpZWxkcyBvciBkYXRhIGFyZSBsb2FkZWRcbiAqIHNhdmUgaXQgZm9yIGxhdGVyXG4gKlxuICogQHR5cGUge3R5cGVvZiBpbXBvcnQoJy4vdmlzLXN0YXRlLW1lcmdlcicpLm1lcmdlTGF5ZXJzfVxuICovXG5leHBvcnQgZnVuY3Rpb24gbWVyZ2VMYXllcnMoc3RhdGUsIGxheWVyc1RvTWVyZ2UsIGZyb21Db25maWcpIHtcbiAgY29uc3QgcHJlc2VydmVMYXllck9yZGVyID0gZnJvbUNvbmZpZyA/IGxheWVyc1RvTWVyZ2UubWFwKGwgPT4gbC5pZCkgOiBzdGF0ZS5wcmVzZXJ2ZUxheWVyT3JkZXI7XG5cbiAgaWYgKCFBcnJheS5pc0FycmF5KGxheWVyc1RvTWVyZ2UpIHx8ICFsYXllcnNUb01lcmdlLmxlbmd0aCkge1xuICAgIHJldHVybiBzdGF0ZTtcbiAgfVxuXG4gIGNvbnN0IHt2YWxpZGF0ZWQ6IG1lcmdlZExheWVyLCBmYWlsZWQ6IHVubWVyZ2VkfSA9IHZhbGlkYXRlTGF5ZXJzQnlEYXRhc2V0cyhcbiAgICBzdGF0ZS5kYXRhc2V0cyxcbiAgICBzdGF0ZS5sYXllckNsYXNzZXMsXG4gICAgbGF5ZXJzVG9NZXJnZVxuICApO1xuXG4gIC8vIHB1dCBuZXcgbGF5ZXJzIGluIGZyb250IG9mIGN1cnJlbnQgbGF5ZXJzXG4gIGNvbnN0IHtuZXdMYXllck9yZGVyLCBuZXdMYXllcnN9ID0gaW5zZXJ0TGF5ZXJBdFJpZ2h0T3JkZXIoXG4gICAgc3RhdGUubGF5ZXJzLFxuICAgIG1lcmdlZExheWVyLFxuICAgIHN0YXRlLmxheWVyT3JkZXIsXG4gICAgcHJlc2VydmVMYXllck9yZGVyXG4gICk7XG5cbiAgcmV0dXJuIHtcbiAgICAuLi5zdGF0ZSxcbiAgICBsYXllcnM6IG5ld0xheWVycyxcbiAgICBsYXllck9yZGVyOiBuZXdMYXllck9yZGVyLFxuICAgIHByZXNlcnZlTGF5ZXJPcmRlcixcbiAgICBsYXllclRvQmVNZXJnZWQ6IFsuLi5zdGF0ZS5sYXllclRvQmVNZXJnZWQsIC4uLnVubWVyZ2VkXVxuICB9O1xufVxuXG5leHBvcnQgZnVuY3Rpb24gaW5zZXJ0TGF5ZXJBdFJpZ2h0T3JkZXIoXG4gIGN1cnJlbnRMYXllcnMsXG4gIGxheWVyc1RvSW5zZXJ0LFxuICBjdXJyZW50T3JkZXIsXG4gIHByZXNlcnZlZE9yZGVyID0gW11cbikge1xuICAvLyBwZXJzZXJ2ZWRPcmRlciBbJ2EnLCAnYicsICdjJ107XG4gIC8vIGxheWVyT3JkZXIgWzEsIDAsIDNdXG4gIC8vIGxheWVyT3JkZXJNYXAgWydhJywgJ2MnXVxuICBsZXQgbGF5ZXJPcmRlclF1ZXVlID0gY3VycmVudE9yZGVyLm1hcChpID0+IGN1cnJlbnRMYXllcnNbaV0uaWQpO1xuICBsZXQgbmV3TGF5ZXJzID0gY3VycmVudExheWVycztcblxuICBmb3IgKGNvbnN0IG5ld0xheWVyIG9mIGxheWVyc1RvSW5zZXJ0KSB7XG4gICAgLy8gZmluZCB3aGVyZSB0byBpbnNlcnQgaXRcbiAgICBjb25zdCBleHBlY3RlZElkeCA9IHByZXNlcnZlZE9yZGVyLmluZGV4T2YobmV3TGF5ZXIuaWQpO1xuICAgIC8vIGlmIGNhbnQgZmluZCBwbGFjZSB0byBpbnNlcnQsIGluc2VydCBhdCB0aGUgZm9udFxuICAgIGxldCBpbnNlcnRBdCA9IDA7XG5cbiAgICBpZiAoZXhwZWN0ZWRJZHggPiAwKSB7XG4gICAgICAvLyBsb29rIGZvciBsYXllciB0byBpbnNlcnQgYWZ0ZXJcbiAgICAgIGxldCBpID0gZXhwZWN0ZWRJZHggKyAxO1xuICAgICAgbGV0IHByZWNlZWRJZHggPSAtMTtcbiAgICAgIHdoaWxlIChpLS0gPiAwICYmIHByZWNlZWRJZHggPT09IC0xKSB7XG4gICAgICAgIGNvbnN0IHByZWNlZWRMYXllciA9IHByZXNlcnZlZE9yZGVyW2ldO1xuICAgICAgICBwcmVjZWVkSWR4ID0gbGF5ZXJPcmRlclF1ZXVlLmluZGV4T2YocHJlY2VlZExheWVyKTtcbiAgICAgIH1cblxuICAgICAgaWYgKHByZWNlZWRJZHggPiAtMSkge1xuICAgICAgICBpbnNlcnRBdCA9IHByZWNlZWRJZHggKyAxO1xuICAgICAgfVxuICAgIH1cblxuICAgIGxheWVyT3JkZXJRdWV1ZSA9IGFycmF5SW5zZXJ0KGxheWVyT3JkZXJRdWV1ZSwgaW5zZXJ0QXQsIG5ld0xheWVyLmlkKTtcbiAgICBuZXdMYXllcnMgPSBuZXdMYXllcnMuY29uY2F0KG5ld0xheWVyKTtcbiAgfVxuXG4gIC8vIHJlY29uc3RydWN0IGxheWVyT3JkZXIgYWZ0ZXIgaW5zZXJ0XG4gIGNvbnN0IG5ld0xheWVyT3JkZXIgPSBsYXllck9yZGVyUXVldWUubWFwKGlkID0+IG5ld0xheWVycy5maW5kSW5kZXgobCA9PiBsLmlkID09PSBpZCkpO1xuXG4gIHJldHVybiB7XG4gICAgbmV3TGF5ZXJPcmRlcixcbiAgICBuZXdMYXllcnNcbiAgfTtcbn1cblxuLyoqXG4gKiBNZXJnZSBpbnRlcmFjdGlvbnMgd2l0aCBzYXZlZCBjb25maWdcbiAqXG4gKiBAdHlwZSB7dHlwZW9mIGltcG9ydCgnLi92aXMtc3RhdGUtbWVyZ2VyJykubWVyZ2VJbnRlcmFjdGlvbnN9XG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBtZXJnZUludGVyYWN0aW9ucyhzdGF0ZSwgaW50ZXJhY3Rpb25Ub0JlTWVyZ2VkKSB7XG4gIGNvbnN0IG1lcmdlZCA9IHt9O1xuICBjb25zdCB1bm1lcmdlZCA9IHt9O1xuXG4gIGlmIChpbnRlcmFjdGlvblRvQmVNZXJnZWQpIHtcbiAgICBPYmplY3Qua2V5cyhpbnRlcmFjdGlvblRvQmVNZXJnZWQpLmZvckVhY2goa2V5ID0+IHtcbiAgICAgIGlmICghc3RhdGUuaW50ZXJhY3Rpb25Db25maWdba2V5XSkge1xuICAgICAgICByZXR1cm47XG4gICAgICB9XG5cbiAgICAgIGNvbnN0IGN1cnJlbnRDb25maWcgPSBzdGF0ZS5pbnRlcmFjdGlvbkNvbmZpZ1trZXldLmNvbmZpZztcblxuICAgICAgY29uc3Qge2VuYWJsZWQsIC4uLmNvbmZpZ1NhdmVkfSA9IGludGVyYWN0aW9uVG9CZU1lcmdlZFtrZXldIHx8IHt9O1xuICAgICAgbGV0IGNvbmZpZ1RvTWVyZ2UgPSBjb25maWdTYXZlZDtcblxuICAgICAgaWYgKGtleSA9PT0gJ3Rvb2x0aXAnKSB7XG4gICAgICAgIGNvbnN0IHttZXJnZWRUb29sdGlwLCB1bm1lcmdlZFRvb2x0aXB9ID0gbWVyZ2VJbnRlcmFjdGlvblRvb2x0aXBDb25maWcoc3RhdGUsIGNvbmZpZ1NhdmVkKTtcblxuICAgICAgICAvLyBtZXJnZSBuZXcgZGF0YXNldCB0b29sdGlwcyB3aXRoIG9yaWdpbmFsIGRhdGFzZXQgdG9vbHRpcHNcbiAgICAgICAgY29uZmlnVG9NZXJnZSA9IHtcbiAgICAgICAgICBmaWVsZHNUb1Nob3c6IHtcbiAgICAgICAgICAgIC4uLmN1cnJlbnRDb25maWcuZmllbGRzVG9TaG93LFxuICAgICAgICAgICAgLi4ubWVyZ2VkVG9vbHRpcFxuICAgICAgICAgIH1cbiAgICAgICAgfTtcblxuICAgICAgICBpZiAoT2JqZWN0LmtleXModW5tZXJnZWRUb29sdGlwKS5sZW5ndGgpIHtcbiAgICAgICAgICB1bm1lcmdlZC50b29sdGlwID0ge2ZpZWxkc1RvU2hvdzogdW5tZXJnZWRUb29sdGlwLCBlbmFibGVkfTtcbiAgICAgICAgfVxuICAgICAgfVxuXG4gICAgICBtZXJnZWRba2V5XSA9IHtcbiAgICAgICAgLi4uc3RhdGUuaW50ZXJhY3Rpb25Db25maWdba2V5XSxcbiAgICAgICAgZW5hYmxlZCxcbiAgICAgICAgLi4uKGN1cnJlbnRDb25maWdcbiAgICAgICAgICA/IHtcbiAgICAgICAgICAgICAgY29uZmlnOiBwaWNrKFxuICAgICAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICAgIC4uLmN1cnJlbnRDb25maWcsXG4gICAgICAgICAgICAgICAgICAuLi5jb25maWdUb01lcmdlXG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICBPYmplY3Qua2V5cyhjdXJyZW50Q29uZmlnKVxuICAgICAgICAgICAgICApXG4gICAgICAgICAgICB9XG4gICAgICAgICAgOiB7fSlcbiAgICAgIH07XG4gICAgfSk7XG4gIH1cblxuICByZXR1cm4ge1xuICAgIC4uLnN0YXRlLFxuICAgIGludGVyYWN0aW9uQ29uZmlnOiB7XG4gICAgICAuLi5zdGF0ZS5pbnRlcmFjdGlvbkNvbmZpZyxcbiAgICAgIC4uLm1lcmdlZFxuICAgIH0sXG4gICAgaW50ZXJhY3Rpb25Ub0JlTWVyZ2VkOiB1bm1lcmdlZFxuICB9O1xufVxuXG4vKipcbiAqIE1lcmdlIHNwbGl0TWFwcyBjb25maWcgd2l0aCBjdXJyZW50IHZpc1N0ZXRlLlxuICogMS4gaWYgY3VycmVudCBtYXAgaXMgc3BsaXQsIGJ1dCBzcGxpdE1hcCBET0VTTk9UIGNvbnRhaW4gbWFwc1xuICogICAgOiBkb24ndCBtZXJnZSBhbnl0aGluZ1xuICogMi4gaWYgY3VycmVudCBtYXAgaXMgTk9UIHNwbGl0LCBidXQgc3BsaXRNYXBzIGNvbnRhaW4gbWFwc1xuICogICAgOiBhZGQgdG8gc3BsaXRNYXBzLCBhbmQgYWRkIGN1cnJlbnQgbGF5ZXJzIHRvIHNwbGl0TWFwc1xuICogQHR5cGUge3R5cGVvZiBpbXBvcnQoJy4vdmlzLXN0YXRlLW1lcmdlcicpLm1lcmdlSW50ZXJhY3Rpb25zfVxuICovXG5leHBvcnQgZnVuY3Rpb24gbWVyZ2VTcGxpdE1hcHMoc3RhdGUsIHNwbGl0TWFwcyA9IFtdKSB7XG4gIGNvbnN0IG1lcmdlZCA9IFsuLi5zdGF0ZS5zcGxpdE1hcHNdO1xuICBjb25zdCB1bm1lcmdlZCA9IFtdO1xuICBzcGxpdE1hcHMuZm9yRWFjaCgoc20sIGkpID0+IHtcbiAgICBPYmplY3QuZW50cmllcyhzbS5sYXllcnMpLmZvckVhY2goKFtpZCwgdmFsdWVdKSA9PiB7XG4gICAgICAvLyBjaGVjayBpZiBsYXllciBleGlzdHNcbiAgICAgIGNvbnN0IHB1c2hUbyA9IHN0YXRlLmxheWVycy5maW5kKGwgPT4gbC5pZCA9PT0gaWQpID8gbWVyZ2VkIDogdW5tZXJnZWQ7XG5cbiAgICAgIC8vIGNyZWF0ZSBtYXAgcGFuZWwgaWYgY3VycmVudCBtYXAgaXMgbm90IHNwbGl0XG4gICAgICBwdXNoVG9baV0gPSBwdXNoVG9baV0gfHwge1xuICAgICAgICBsYXllcnM6IHB1c2hUbyA9PT0gbWVyZ2VkID8gZ2V0SW5pdGlhbE1hcExheWVyc0ZvclNwbGl0TWFwKHN0YXRlLmxheWVycykgOiBbXVxuICAgICAgfTtcbiAgICAgIHB1c2hUb1tpXS5sYXllcnMgPSB7XG4gICAgICAgIC4uLnB1c2hUb1tpXS5sYXllcnMsXG4gICAgICAgIFtpZF06IHZhbHVlXG4gICAgICB9O1xuICAgIH0pO1xuICB9KTtcblxuICByZXR1cm4ge1xuICAgIC4uLnN0YXRlLFxuICAgIHNwbGl0TWFwczogbWVyZ2VkLFxuICAgIHNwbGl0TWFwc1RvQmVNZXJnZWQ6IFsuLi5zdGF0ZS5zcGxpdE1hcHNUb0JlTWVyZ2VkLCAuLi51bm1lcmdlZF1cbiAgfTtcbn1cblxuLyoqXG4gKiBNZXJnZSBpbnRlcmFjdGlvbkNvbmZpZy50b29sdGlwIHdpdGggc2F2ZWQgY29uZmlnLFxuICogdmFsaWRhdGUgZmllbGRzVG9TaG93XG4gKlxuICogQHBhcmFtIHtvYmplY3R9IHN0YXRlXG4gKiBAcGFyYW0ge29iamVjdH0gdG9vbHRpcENvbmZpZ1xuICogQHJldHVybiB7b2JqZWN0fSAtIHttZXJnZWRUb29sdGlwOiB7fSwgdW5tZXJnZWRUb29sdGlwOiB7fX1cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIG1lcmdlSW50ZXJhY3Rpb25Ub29sdGlwQ29uZmlnKHN0YXRlLCB0b29sdGlwQ29uZmlnID0ge30pIHtcbiAgY29uc3QgdW5tZXJnZWRUb29sdGlwID0ge307XG4gIGNvbnN0IG1lcmdlZFRvb2x0aXAgPSB7fTtcblxuICBpZiAoIXRvb2x0aXBDb25maWcuZmllbGRzVG9TaG93IHx8ICFPYmplY3Qua2V5cyh0b29sdGlwQ29uZmlnLmZpZWxkc1RvU2hvdykubGVuZ3RoKSB7XG4gICAgcmV0dXJuIHttZXJnZWRUb29sdGlwLCB1bm1lcmdlZFRvb2x0aXB9O1xuICB9XG5cbiAgZm9yIChjb25zdCBkYXRhSWQgaW4gdG9vbHRpcENvbmZpZy5maWVsZHNUb1Nob3cpIHtcbiAgICBpZiAoIXN0YXRlLmRhdGFzZXRzW2RhdGFJZF0pIHtcbiAgICAgIC8vIGlzIG5vdCB5ZXQgbG9hZGVkXG4gICAgICB1bm1lcmdlZFRvb2x0aXBbZGF0YUlkXSA9IHRvb2x0aXBDb25maWcuZmllbGRzVG9TaG93W2RhdGFJZF07XG4gICAgfSBlbHNlIHtcbiAgICAgIC8vIGlmIGRhdGFzZXQgaXMgbG9hZGVkXG4gICAgICBjb25zdCBhbGxGaWVsZHMgPSBzdGF0ZS5kYXRhc2V0c1tkYXRhSWRdLmZpZWxkcy5tYXAoZCA9PiBkLm5hbWUpO1xuICAgICAgY29uc3QgZm91bmRGaWVsZHNUb1Nob3cgPSBzdGF0ZS5kYXRhc2V0c1tkYXRhSWRdLm1ldGFkYXRhLmlzRHluYW1pY1NwYXRpYWxJbmRleFxuICAgICAgICA/IHRvb2x0aXBDb25maWcuZmllbGRzVG9TaG93W2RhdGFJZF1cbiAgICAgICAgOiB0b29sdGlwQ29uZmlnLmZpZWxkc1RvU2hvd1tkYXRhSWRdLmZpbHRlcihmaWVsZCA9PiBhbGxGaWVsZHMuaW5jbHVkZXMoZmllbGQubmFtZSkpO1xuXG4gICAgICBtZXJnZWRUb29sdGlwW2RhdGFJZF0gPSBmb3VuZEZpZWxkc1RvU2hvdztcbiAgICB9XG4gIH1cblxuICByZXR1cm4ge21lcmdlZFRvb2x0aXAsIHVubWVyZ2VkVG9vbHRpcH07XG59XG4vKipcbiAqIE1lcmdlIGxheWVyQmxlbmRpbmcgd2l0aCBzYXZlZFxuICpcbiAqIEB0eXBlIHt0eXBlb2YgaW1wb3J0KCcuL3Zpcy1zdGF0ZS1tZXJnZXInKS5tZXJnZUxheWVyQmxlbmRpbmd9XG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBtZXJnZUxheWVyQmxlbmRpbmcoc3RhdGUsIGxheWVyQmxlbmRpbmcpIHtcbiAgaWYgKGxheWVyQmxlbmRpbmcgJiYgTEFZRVJfQkxFTkRJTkdTW2xheWVyQmxlbmRpbmddKSB7XG4gICAgcmV0dXJuIHtcbiAgICAgIC4uLnN0YXRlLFxuICAgICAgbGF5ZXJCbGVuZGluZ1xuICAgIH07XG4gIH1cblxuICByZXR1cm4gc3RhdGU7XG59XG5cbi8qKlxuICogTWVyZ2UgYW5pbWF0aW9uIGNvbmZpZ1xuICogQHR5cGUge3R5cGVvZiBpbXBvcnQoJy4vdmlzLXN0YXRlLW1lcmdlcicpLm1lcmdlQW5pbWF0aW9uQ29uZmlnfVxuICovXG5leHBvcnQgZnVuY3Rpb24gbWVyZ2VBbmltYXRpb25Db25maWcoc3RhdGUsIGFuaW1hdGlvbikge1xuICBpZiAoYW5pbWF0aW9uICYmIGFuaW1hdGlvbi5jdXJyZW50VGltZSkge1xuICAgIHJldHVybiB7XG4gICAgICAuLi5zdGF0ZSxcbiAgICAgIGFuaW1hdGlvbkNvbmZpZzoge1xuICAgICAgICAuLi5zdGF0ZS5hbmltYXRpb25Db25maWcsXG4gICAgICAgIC4uLmFuaW1hdGlvbixcbiAgICAgICAgZG9tYWluOiBudWxsXG4gICAgICB9XG4gICAgfTtcbiAgfVxuXG4gIHJldHVybiBzdGF0ZTtcbn1cblxuLyoqXG4gKiBWYWxpZGF0ZSBzYXZlZCBsYXllciBjb2x1bW5zIHdpdGggbmV3IGRhdGEsXG4gKiB1cGRhdGUgZmllbGRJZHggYmFzZWQgb24gbmV3IGZpZWxkc1xuICpcbiAqIEBwYXJhbSB7QXJyYXk8T2JqZWN0Pn0gZmllbGRzXG4gKiBAcGFyYW0ge09iamVjdH0gc2F2ZWRDb2xzXG4gKiBAcGFyYW0ge09iamVjdH0gZW1wdHlDb2xzXG4gKiBAcmV0dXJuIHtudWxsIHwgT2JqZWN0fSAtIHZhbGlkYXRlZCBjb2x1bW5zIG9yIG51bGxcbiAqL1xuXG5leHBvcnQgZnVuY3Rpb24gdmFsaWRhdGVTYXZlZExheWVyQ29sdW1ucyhmaWVsZHMsIHNhdmVkQ29scyA9IHt9LCBlbXB0eUNvbHMpIHtcbiAgLy8gUHJlcGFyZSBjb2x1bW5zIGZvciB0aGUgdmFsaWRhdG9yXG4gIGNvbnN0IGNvbHVtbnMgPSB7fTtcbiAgZm9yIChjb25zdCBrZXkgb2YgT2JqZWN0LmtleXMoZW1wdHlDb2xzKSkge1xuICAgIGNvbHVtbnNba2V5XSA9IHsuLi5lbXB0eUNvbHNba2V5XX07XG5cbiAgICBjb25zdCBzYXZlZCA9IHNhdmVkQ29sc1trZXldO1xuICAgIGlmIChzYXZlZCkge1xuICAgICAgY29uc3QgZmllbGRJZHggPSBmaWVsZHMuZmluZEluZGV4KCh7bmFtZX0pID0+IG5hbWUgPT09IHNhdmVkKTtcblxuICAgICAgaWYgKGZpZWxkSWR4ID4gLTEpIHtcbiAgICAgICAgLy8gdXBkYXRlIGZvdW5kIGNvbHVtbnNcbiAgICAgICAgY29sdW1uc1trZXldLmZpZWxkSWR4ID0gZmllbGRJZHg7XG4gICAgICAgIGNvbHVtbnNba2V5XS52YWx1ZSA9IHNhdmVkO1xuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIC8vIGZpbmQgYWN0dWFsIGNvbHVtbiBmaWVsZElkeCwgaW4gY2FzZSBpdCBoYXMgY2hhbmdlZFxuICBjb25zdCBhbGxDb2xGb3VuZCA9IE9iamVjdC5rZXlzKGNvbHVtbnMpLmV2ZXJ5KGtleSA9PlxuICAgIHZhbGlkYXRlQ29sdW1uKGNvbHVtbnNba2V5XSwgY29sdW1ucywgZmllbGRzKVxuICApO1xuXG4gIGlmIChhbGxDb2xGb3VuZCkge1xuICAgIHJldHVybiBjb2x1bW5zO1xuICB9XG5cbiAgcmV0dXJuIG51bGw7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiB2YWxpZGF0ZUNvbHVtbihjb2x1bW4sIGNvbHVtbnMsIGFsbEZpZWxkcykge1xuICBpZiAoY29sdW1uLm9wdGlvbmFsIHx8IGNvbHVtbi52YWx1ZSkge1xuICAgIHJldHVybiB0cnVlO1xuICB9XG4gIGlmIChjb2x1bW4udmFsaWRhdG9yKSB7XG4gICAgcmV0dXJuIGNvbHVtbi52YWxpZGF0b3IoY29sdW1uLCBjb2x1bW5zLCBhbGxGaWVsZHMpO1xuICB9XG4gIHJldHVybiBmYWxzZTtcbn1cblxuLyoqXG4gKiBWYWxpZGF0ZSBzYXZlZCB0ZXh0IGxhYmVsIGNvbmZpZyB3aXRoIG5ldyBkYXRhXG4gKiByZWZlciB0byB2aXMtc3RhdGUtc2NoZW1hLmpzIFRleHRMYWJlbFNjaGVtYVYxXG4gKlxuICogQHBhcmFtIHtBcnJheTxPYmplY3Q+fSBmaWVsZHNcbiAqIEBwYXJhbSB7T2JqZWN0fSBzYXZlZFRleHRMYWJlbFxuICogQHJldHVybiB7T2JqZWN0fSAtIHZhbGlkYXRlZCB0ZXh0bGFiZWxcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHZhbGlkYXRlU2F2ZWRUZXh0TGFiZWwoZmllbGRzLCBbbGF5ZXJUZXh0TGFiZWxdLCBzYXZlZFRleHRMYWJlbCkge1xuICBjb25zdCBzYXZlZFRleHRMYWJlbHMgPSBBcnJheS5pc0FycmF5KHNhdmVkVGV4dExhYmVsKSA/IHNhdmVkVGV4dExhYmVsIDogW3NhdmVkVGV4dExhYmVsXTtcblxuICAvLyB2YWxpZGF0ZSBmaWVsZFxuICByZXR1cm4gc2F2ZWRUZXh0TGFiZWxzLm1hcCh0ZXh0TGFiZWwgPT4ge1xuICAgIGNvbnN0IGZpZWxkID0gdGV4dExhYmVsLmZpZWxkXG4gICAgICA/IGZpZWxkcy5maW5kKGZkID0+XG4gICAgICAgICAgT2JqZWN0LmtleXModGV4dExhYmVsLmZpZWxkKS5ldmVyeShrZXkgPT4gdGV4dExhYmVsLmZpZWxkW2tleV0gPT09IGZkW2tleV0pXG4gICAgICAgIClcbiAgICAgIDogbnVsbDtcblxuICAgIHJldHVybiBPYmplY3Qua2V5cyhsYXllclRleHRMYWJlbCkucmVkdWNlKFxuICAgICAgKGFjY3UsIGtleSkgPT4gKHtcbiAgICAgICAgLi4uYWNjdSxcbiAgICAgICAgW2tleV06IGtleSA9PT0gJ2ZpZWxkJyA/IGZpZWxkIDogdGV4dExhYmVsW2tleV0gfHwgbGF5ZXJUZXh0TGFiZWxba2V5XVxuICAgICAgfSksXG4gICAgICB7fVxuICAgICk7XG4gIH0pO1xufVxuXG4vKipcbiAqIFZhbGlkYXRlIHNhdmVkIHZpc3VhbCBjaGFubmVscyBjb25maWcgd2l0aCBuZXcgZGF0YSxcbiAqIHJlZmVyIHRvIHZpcy1zdGF0ZS1zY2hlbWEuanMgVmlzdWFsQ2hhbm5lbFNjaGVtYVYxXG4gKiBAdHlwZSB7dHlwZW9mIGltcG9ydCgnLi92aXMtc3RhdGUtbWVyZ2VyJykudmFsaWRhdGVTYXZlZFZpc3VhbENoYW5uZWxzfVxuICovXG5leHBvcnQgZnVuY3Rpb24gdmFsaWRhdGVTYXZlZFZpc3VhbENoYW5uZWxzKGZpZWxkcywgbmV3TGF5ZXIsIHNhdmVkTGF5ZXIpIHtcbiAgT2JqZWN0LnZhbHVlcyhuZXdMYXllci52aXN1YWxDaGFubmVscykuZm9yRWFjaCgoe2ZpZWxkLCBzY2FsZSwga2V5fSkgPT4ge1xuICAgIGxldCBmb3VuZEZpZWxkO1xuICAgIGlmIChzYXZlZExheWVyLmNvbmZpZykge1xuICAgICAgaWYgKHNhdmVkTGF5ZXIuY29uZmlnW2ZpZWxkXSkge1xuICAgICAgICBmb3VuZEZpZWxkID0gZmllbGRzLmZpbmQoXG4gICAgICAgICAgZmQgPT4gc2F2ZWRMYXllci5jb25maWcgJiYgZmQubmFtZSA9PT0gc2F2ZWRMYXllci5jb25maWdbZmllbGRdLm5hbWVcbiAgICAgICAgKTtcbiAgICAgIH1cblxuICAgICAgY29uc3QgZm91bmRDaGFubmVsID0ge1xuICAgICAgICAuLi4oZm91bmRGaWVsZCA/IHtbZmllbGRdOiBmb3VuZEZpZWxkfSA6IHt9KSxcbiAgICAgICAgLi4uKHNhdmVkTGF5ZXIuY29uZmlnW3NjYWxlXSA/IHtbc2NhbGVdOiBzYXZlZExheWVyLmNvbmZpZ1tzY2FsZV19IDoge30pXG4gICAgICB9O1xuICAgICAgaWYgKE9iamVjdC5rZXlzKGZvdW5kQ2hhbm5lbCkubGVuZ3RoKSB7XG4gICAgICAgIG5ld0xheWVyLnVwZGF0ZUxheWVyQ29uZmlnKGZvdW5kQ2hhbm5lbCk7XG4gICAgICB9XG5cbiAgICAgIG5ld0xheWVyLnZhbGlkYXRlVmlzdWFsQ2hhbm5lbChrZXkpO1xuICAgIH1cbiAgfSk7XG4gIHJldHVybiBuZXdMYXllcjtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHZhbGlkYXRlTGF5ZXJzQnlEYXRhc2V0cyhkYXRhc2V0cywgbGF5ZXJDbGFzc2VzLCBsYXllcnMpIHtcbiAgY29uc3QgdmFsaWRhdGVkID0gW107XG4gIGNvbnN0IGZhaWxlZCA9IFtdO1xuXG4gIGxheWVycy5mb3JFYWNoKGxheWVyID0+IHtcbiAgICBsZXQgdmFsaWRhdGVMYXllcjtcbiAgICBpZiAoIWxheWVyIHx8ICFsYXllci5jb25maWcpIHtcbiAgICAgIHZhbGlkYXRlTGF5ZXIgPSBudWxsO1xuICAgIH0gZWxzZSBpZiAoZGF0YXNldHNbbGF5ZXIuY29uZmlnLmRhdGFJZF0pIHtcbiAgICAgIC8vIGRhdGFzZXRzIGFyZSBhbHJlYWR5IGxvYWRlZFxuICAgICAgdmFsaWRhdGVMYXllciA9IHZhbGlkYXRlTGF5ZXJXaXRoRGF0YShkYXRhc2V0c1tsYXllci5jb25maWcuZGF0YUlkXSwgbGF5ZXIsIGxheWVyQ2xhc3Nlcyk7XG4gICAgfVxuXG4gICAgaWYgKHZhbGlkYXRlTGF5ZXIpIHtcbiAgICAgIHZhbGlkYXRlZC5wdXNoKHZhbGlkYXRlTGF5ZXIpO1xuICAgIH0gZWxzZSB7XG4gICAgICAvLyBkYXRhc2V0cyBub3QgeWV0IGxvYWRlZFxuICAgICAgZmFpbGVkLnB1c2gobGF5ZXIpO1xuICAgIH1cbiAgfSk7XG5cbiAgcmV0dXJuIHt2YWxpZGF0ZWQsIGZhaWxlZH07XG59XG4vKipcbiAqIFZhbGlkYXRlIHNhdmVkIGxheWVyIGNvbmZpZyB3aXRoIG5ldyBkYXRhLFxuICogdXBkYXRlIGZpZWxkSWR4IGJhc2VkIG9uIG5ldyBmaWVsZHNcbiAqIEB0eXBlIHt0eXBlb2YgaW1wb3J0KCcuL3Zpcy1zdGF0ZS1tZXJnZXInKS52YWxpZGF0ZUxheWVyV2l0aERhdGF9XG4gKi9cbmV4cG9ydCBmdW5jdGlvbiB2YWxpZGF0ZUxheWVyV2l0aERhdGEoXG4gIHtmaWVsZHMsIGlkOiBkYXRhSWR9LFxuICBzYXZlZExheWVyLFxuICBsYXllckNsYXNzZXMsXG4gIG9wdGlvbnMgPSB7fVxuKSB7XG4gIGNvbnN0IHt0eXBlfSA9IHNhdmVkTGF5ZXI7XG4gIC8vIGxheWVyIGRvZXNudCBoYXZlIGEgdmFsaWQgdHlwZVxuICBpZiAoIXR5cGUgfHwgIWxheWVyQ2xhc3Nlcy5oYXNPd25Qcm9wZXJ0eSh0eXBlKSB8fCAhc2F2ZWRMYXllci5jb25maWcpIHtcbiAgICByZXR1cm4gbnVsbDtcbiAgfVxuXG4gIGxldCBuZXdMYXllciA9IG5ldyBsYXllckNsYXNzZXNbdHlwZV0oe1xuICAgIGlkOiBzYXZlZExheWVyLmlkLFxuICAgIGRhdGFJZCxcbiAgICBsYWJlbDogc2F2ZWRMYXllci5jb25maWcubGFiZWwsXG4gICAgY29sb3I6IHNhdmVkTGF5ZXIuY29uZmlnLmNvbG9yLFxuICAgIGlzVmlzaWJsZTogc2F2ZWRMYXllci5jb25maWcuaXNWaXNpYmxlLFxuICAgIGhpZGRlbjogc2F2ZWRMYXllci5jb25maWcuaGlkZGVuLFxuICAgIGhpZ2hsaWdodENvbG9yOiBzYXZlZExheWVyLmNvbmZpZy5oaWdobGlnaHRDb2xvcixcbiAgICB2aXNpYmlsaXR5Qnlab29tOiBzYXZlZExheWVyLmNvbmZpZy52aXNpYmlsaXR5Qnlab29tXG4gIH0pO1xuXG4gIC8vIGZpbmQgY29sdW1uIGZpZWxkSWR4XG4gIGNvbnN0IGNvbHVtbkNvbmZpZyA9IG5ld0xheWVyLmdldExheWVyQ29sdW1ucygpO1xuICBpZiAoT2JqZWN0LmtleXMoY29sdW1uQ29uZmlnKS5sZW5ndGgpIHtcbiAgICBjb25zdCBjb2x1bW5zID0gdmFsaWRhdGVTYXZlZExheWVyQ29sdW1ucyhmaWVsZHMsIHNhdmVkTGF5ZXIuY29uZmlnLmNvbHVtbnMsIGNvbHVtbkNvbmZpZyk7XG4gICAgaWYgKGNvbHVtbnMpIHtcbiAgICAgIG5ld0xheWVyLnVwZGF0ZUxheWVyQ29uZmlnKHtjb2x1bW5zfSk7XG4gICAgfSBlbHNlIGlmICghb3B0aW9ucy5hbGxvd0VtcHR5Q29sdW1uKSB7XG4gICAgICByZXR1cm4gbnVsbDtcbiAgICB9XG4gIH1cblxuICAvLyB2aXN1YWwgY2hhbm5lbCBmaWVsZCBpcyBzYXZlZCB0byBiZSB7bmFtZSwgdHlwZX1cbiAgLy8gZmluZCB2aXN1YWwgY2hhbm5lbCBmaWVsZCBieSBtYXRjaGluZyBib3RoIG5hbWUgYW5kIHR5cGVcbiAgLy8gcmVmZXIgdG8gdmlzLXN0YXRlLXNjaGVtYS5qcyBWaXN1YWxDaGFubmVsU2NoZW1hVjFcbiAgbmV3TGF5ZXIgPSB2YWxpZGF0ZVNhdmVkVmlzdWFsQ2hhbm5lbHMoZmllbGRzLCBuZXdMYXllciwgc2F2ZWRMYXllcik7XG5cbiAgY29uc3QgdGV4dExhYmVsID1cbiAgICBzYXZlZExheWVyLmNvbmZpZy50ZXh0TGFiZWwgJiYgbmV3TGF5ZXIuY29uZmlnLnRleHRMYWJlbFxuICAgICAgPyB2YWxpZGF0ZVNhdmVkVGV4dExhYmVsKGZpZWxkcywgbmV3TGF5ZXIuY29uZmlnLnRleHRMYWJlbCwgc2F2ZWRMYXllci5jb25maWcudGV4dExhYmVsKVxuICAgICAgOiBuZXdMYXllci5jb25maWcudGV4dExhYmVsO1xuXG4gIC8vIGNvcHkgdmlzQ29uZmlnIG92ZXIgdG8gZW1wdHlMYXllciB0byBtYWtlIHN1cmUgaXQgaGFzIGFsbCB0aGUgcHJvcHNcbiAgY29uc3QgdmlzQ29uZmlnID0gbmV3TGF5ZXIuY29weUxheWVyQ29uZmlnKFxuICAgIG5ld0xheWVyLmNvbmZpZy52aXNDb25maWcsXG4gICAgc2F2ZWRMYXllci5jb25maWcudmlzQ29uZmlnIHx8IHt9LFxuICAgIHtzaGFsbG93Q29weTogWydjb2xvclJhbmdlJywgJ3N0cm9rZUNvbG9yUmFuZ2UnXX1cbiAgKTtcblxuICBuZXdMYXllci51cGRhdGVMYXllckNvbmZpZyh7XG4gICAgdmlzQ29uZmlnLFxuICAgIHRleHRMYWJlbFxuICB9KTtcblxuICByZXR1cm4gbmV3TGF5ZXI7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBpc1ZhbGlkTWVyZ2VyKG1lcmdlcikge1xuICByZXR1cm4gaXNPYmplY3QobWVyZ2VyKSAmJiB0eXBlb2YgbWVyZ2VyLm1lcmdlID09PSAnZnVuY3Rpb24nICYmIHR5cGVvZiBtZXJnZXIucHJvcCA9PT0gJ3N0cmluZyc7XG59XG5cbmV4cG9ydCBjb25zdCBWSVNfU1RBVEVfTUVSR0VSUyA9IFtcbiAge21lcmdlOiBtZXJnZUxheWVycywgcHJvcDogJ2xheWVycycsIHRvTWVyZ2VQcm9wOiAnbGF5ZXJUb0JlTWVyZ2VkJ30sXG4gIHttZXJnZTogbWVyZ2VGaWx0ZXJzLCBwcm9wOiAnZmlsdGVycycsIHRvTWVyZ2VQcm9wOiAnZmlsdGVyVG9CZU1lcmdlZCd9LFxuICB7bWVyZ2U6IG1lcmdlSW50ZXJhY3Rpb25zLCBwcm9wOiAnaW50ZXJhY3Rpb25Db25maWcnLCB0b01lcmdlUHJvcDogJ2ludGVyYWN0aW9uVG9CZU1lcmdlZCd9LFxuICB7bWVyZ2U6IG1lcmdlTGF5ZXJCbGVuZGluZywgcHJvcDogJ2xheWVyQmxlbmRpbmcnfSxcbiAge21lcmdlOiBtZXJnZVNwbGl0TWFwcywgcHJvcDogJ3NwbGl0TWFwcycsIHRvTWVyZ2VQcm9wOiAnc3BsaXRNYXBzVG9CZU1lcmdlZCd9LFxuICB7bWVyZ2U6IG1lcmdlQW5pbWF0aW9uQ29uZmlnLCBwcm9wOiAnYW5pbWF0aW9uQ29uZmlnJ31cbl07XG4iXX0=
|
|
629
|
+
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9yZWR1Y2Vycy92aXMtc3RhdGUtbWVyZ2VyLmpzIl0sIm5hbWVzIjpbIm1lcmdlRmlsdGVycyIsInN0YXRlIiwiZmlsdGVyc1RvTWVyZ2UiLCJBcnJheSIsImlzQXJyYXkiLCJsZW5ndGgiLCJ2YWxpZGF0ZWQiLCJmYWlsZWQiLCJ1cGRhdGVkRGF0YXNldHMiLCJ1cGRhdGVkRmlsdGVycyIsImZpbHRlcnMiLCJkYXRhc2V0c1RvRmlsdGVyIiwibWFwIiwiZiIsImRhdGFJZCIsImZpbHRlcmVkIiwibGF5ZXJzIiwiZGF0YXNldHMiLCJmaWx0ZXJUb0JlTWVyZ2VkIiwiY3JlYXRlTGF5ZXJGcm9tQ29uZmlnIiwibGF5ZXJDb25maWciLCJ2YWxpZGF0ZUxheWVyc0J5RGF0YXNldHMiLCJsYXllckNsYXNzZXMiLCJuZXdMYXllciIsInVwZGF0ZUxheWVyRG9tYWluIiwic2VyaWFsaXplTGF5ZXIiLCJzYXZlZFZpc1N0YXRlIiwidmlzU3RhdGVTY2hlbWEiLCJDVVJSRU5UX1ZFUlNJT04iLCJzYXZlIiwibGF5ZXJPcmRlciIsInZpc1N0YXRlIiwibG9hZGVkTGF5ZXIiLCJsb2FkIiwibWVyZ2VMYXllcnMiLCJsYXllcnNUb01lcmdlIiwiZnJvbUNvbmZpZyIsInByZXNlcnZlTGF5ZXJPcmRlciIsImwiLCJpZCIsIm1lcmdlZExheWVyIiwidW5tZXJnZWQiLCJpbnNlcnRMYXllckF0UmlnaHRPcmRlciIsIm5ld0xheWVyT3JkZXIiLCJuZXdMYXllcnMiLCJsYXllclRvQmVNZXJnZWQiLCJjdXJyZW50TGF5ZXJzIiwibGF5ZXJzVG9JbnNlcnQiLCJjdXJyZW50T3JkZXIiLCJwcmVzZXJ2ZWRPcmRlciIsImxheWVyT3JkZXJRdWV1ZSIsImkiLCJleHBlY3RlZElkeCIsImluZGV4T2YiLCJpbnNlcnRBdCIsInByZWNlZWRJZHgiLCJwcmVjZWVkTGF5ZXIiLCJjb25jYXQiLCJmaW5kSW5kZXgiLCJtZXJnZUludGVyYWN0aW9ucyIsImludGVyYWN0aW9uVG9CZU1lcmdlZCIsIm1lcmdlZCIsIk9iamVjdCIsImtleXMiLCJmb3JFYWNoIiwia2V5IiwiaW50ZXJhY3Rpb25Db25maWciLCJjdXJyZW50Q29uZmlnIiwiY29uZmlnIiwiZW5hYmxlZCIsImNvbmZpZ1NhdmVkIiwiY29uZmlnVG9NZXJnZSIsIm1lcmdlSW50ZXJhY3Rpb25Ub29sdGlwQ29uZmlnIiwibWVyZ2VkVG9vbHRpcCIsInVubWVyZ2VkVG9vbHRpcCIsImZpZWxkc1RvU2hvdyIsInRvb2x0aXAiLCJtZXJnZVNwbGl0TWFwcyIsInNwbGl0TWFwcyIsInNtIiwiZW50cmllcyIsInZhbHVlIiwicHVzaFRvIiwiZmluZCIsInNwbGl0TWFwc1RvQmVNZXJnZWQiLCJ0b29sdGlwQ29uZmlnIiwiYWxsRmllbGRzIiwiZmllbGRzIiwiZCIsIm5hbWUiLCJmb3VuZEZpZWxkc1RvU2hvdyIsIm1ldGFkYXRhIiwiaXNEeW5hbWljU3BhdGlhbEluZGV4IiwiZmlsdGVyIiwiZmllbGQiLCJpbmNsdWRlcyIsIm1lcmdlTGF5ZXJCbGVuZGluZyIsImxheWVyQmxlbmRpbmciLCJMQVlFUl9CTEVORElOR1MiLCJtZXJnZUFuaW1hdGlvbkNvbmZpZyIsImFuaW1hdGlvbiIsImN1cnJlbnRUaW1lIiwiYW5pbWF0aW9uQ29uZmlnIiwiZG9tYWluIiwidmFsaWRhdGVTYXZlZExheWVyQ29sdW1ucyIsInNhdmVkQ29scyIsImVtcHR5Q29scyIsImNvbHVtbnMiLCJzYXZlZCIsImZpZWxkSWR4IiwiYWxsQ29sRm91bmQiLCJldmVyeSIsInZhbGlkYXRlQ29sdW1uIiwiY29sdW1uIiwib3B0aW9uYWwiLCJ2YWxpZGF0b3IiLCJ2YWxpZGF0ZVNhdmVkVGV4dExhYmVsIiwic2F2ZWRUZXh0TGFiZWwiLCJsYXllclRleHRMYWJlbCIsInNhdmVkVGV4dExhYmVscyIsInRleHRMYWJlbCIsImZkIiwicmVkdWNlIiwiYWNjdSIsInZhbGlkYXRlU2F2ZWRWaXN1YWxDaGFubmVscyIsInNhdmVkTGF5ZXIiLCJ2YWx1ZXMiLCJ2aXN1YWxDaGFubmVscyIsInNjYWxlIiwiZm91bmRGaWVsZCIsImNvbG9yRmllbGRQcm9wcyIsImNvbG9yQ29sdW1uIiwiY29sb3JDb2x1bW5GaWVsZCIsImNvbG9yQ29sdW1uSWR4IiwiZm91bmRDaGFubmVsIiwidXBkYXRlTGF5ZXJDb25maWciLCJ2YWxpZGF0ZVZpc3VhbENoYW5uZWwiLCJsYXllciIsInZhbGlkYXRlTGF5ZXIiLCJ2YWxpZGF0ZUxheWVyV2l0aERhdGEiLCJwdXNoIiwib3B0aW9ucyIsInR5cGUiLCJoYXNPd25Qcm9wZXJ0eSIsImxhYmVsIiwiY29sb3IiLCJpc1Zpc2libGUiLCJoaWRkZW4iLCJoaWdobGlnaHRDb2xvciIsInZpc2liaWxpdHlCeVpvb20iLCJjb2x1bW5Db25maWciLCJnZXRMYXllckNvbHVtbnMiLCJhbGxvd0VtcHR5Q29sdW1uIiwidmlzQ29uZmlnIiwiY29weUxheWVyQ29uZmlnIiwic2hhbGxvd0NvcHkiLCJpc1ZhbGlkTWVyZ2VyIiwibWVyZ2VyIiwibWVyZ2UiLCJwcm9wIiwiVklTX1NUQVRFX01FUkdFUlMiLCJ0b01lcmdlUHJvcCJdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztBQW9CQTs7QUFDQTs7QUFDQTs7QUFDQTs7QUFDQTs7QUFFQTs7QUFDQTs7QUFDQTs7QUFDQTs7Ozs7Ozs7Ozs7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ08sU0FBU0EsWUFBVCxDQUFzQkMsS0FBdEIsRUFBNkJDLGNBQTdCLEVBQTZDO0FBQ2xELE1BQUksQ0FBQ0MsS0FBSyxDQUFDQyxPQUFOLENBQWNGLGNBQWQsQ0FBRCxJQUFrQyxDQUFDQSxjQUFjLENBQUNHLE1BQXRELEVBQThEO0FBQzVELFdBQU9KLEtBQVA7QUFDRDs7QUFIaUQsOEJBS0wsZ0RBQThCQSxLQUE5QixFQUFxQ0MsY0FBckMsQ0FMSztBQUFBLE1BSzNDSSxTQUwyQyx5QkFLM0NBLFNBTDJDO0FBQUEsTUFLaENDLE1BTGdDLHlCQUtoQ0EsTUFMZ0M7QUFB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QXNCK0osRUFBQUEsSUFBSSxFQUFFLFNBQTVCO0FBQXVDRSxFQUFBQSxXQUFXLEVBQUU7QUFBcEQsQ0FGK0IsRUFHL0I7QUFBQ0gsRUFBQUEsS0FBSyxFQUFFbkcsaUJBQVI7QUFBMkJvRyxFQUFBQSxJQUFJLEVBQUUsbUJBQWpDO0FBQXNERSxFQUFBQSxXQUFXLEVBQUU7QUFBbkUsQ0FIK0IsRUFJL0I7QUFBQ0gsRUFBQUEsS0FBSyxFQUFFOUQsa0JBQVI7QUFBNEIrRCxFQUFBQSxJQUFJLEVBQUU7QUFBbEMsQ0FKK0IsRUFLL0I7QUFBQ0QsRUFBQUEsS0FBSyxFQUFFakYsY0FBUjtBQUF3QmtGLEVBQUFBLElBQUksRUFBRSxXQUE5QjtBQUEyQ0UsRUFBQUEsV0FBVyxFQUFFO0FBQXhELENBTCtCLEVBTS9CO0FBQUNILEVBQUFBLEtBQUssRUFBRTNELG9CQUFSO0FBQThCNEQsRUFBQUEsSUFBSSxFQUFFO0FBQXBDLENBTitCLENBQTFCIiwic291cmNlc0NvbnRlbnQiOlsiLy8gQ29weXJpZ2h0IChjKSAyMDIyIFViZXIgVGVjaG5vbG9naWVzLCBJbmMuXG4vL1xuLy8gUGVybWlzc2lvbiBpcyBoZXJlYnkgZ3JhbnRlZCwgZnJlZSBvZiBjaGFyZ2UsIHRvIGFueSBwZXJzb24gb2J0YWluaW5nIGEgY29weVxuLy8gb2YgdGhpcyBzb2Z0d2FyZSBhbmQgYXNzb2NpYXRlZCBkb2N1bWVudGF0aW9uIGZpbGVzICh0aGUgXCJTb2Z0d2FyZVwiKSwgdG8gZGVhbFxuLy8gaW4gdGhlIFNvZnR3YXJlIHdpdGhvdXQgcmVzdHJpY3Rpb24sIGluY2x1ZGluZyB3aXRob3V0IGxpbWl0YXRpb24gdGhlIHJpZ2h0c1xuLy8gdG8gdXNlLCBjb3B5LCBtb2RpZnksIG1lcmdlLCBwdWJsaXNoLCBkaXN0cmlidXRlLCBzdWJsaWNlbnNlLCBhbmQvb3Igc2VsbFxuLy8gY29waWVzIG9mIHRoZSBTb2Z0d2FyZSwgYW5kIHRvIHBlcm1pdCBwZXJzb25zIHRvIHdob20gdGhlIFNvZnR3YXJlIGlzXG4vLyBmdXJuaXNoZWQgdG8gZG8gc28sIHN1YmplY3QgdG8gdGhlIGZvbGxvd2luZyBjb25kaXRpb25zOlxuLy9cbi8vIFRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlIGFuZCB0aGlzIHBlcm1pc3Npb24gbm90aWNlIHNoYWxsIGJlIGluY2x1ZGVkIGluXG4vLyBhbGwgY29waWVzIG9yIHN1YnN0YW50aWFsIHBvcnRpb25zIG9mIHRoZSBTb2Z0d2FyZS5cbi8vXG4vLyBUSEUgU09GVFdBUkUgSVMgUFJPVklERUQgXCJBUyBJU1wiLCBXSVRIT1VUIFdBUlJBTlRZIE9GIEFOWSBLSU5ELCBFWFBSRVNTIE9SXG4vLyBJTVBMSUVELCBJTkNMVURJTkcgQlVUIE5PVCBMSU1JVEVEIFRPIFRIRSBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSxcbi8vIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFORCBOT05JTkZSSU5HRU1FTlQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRVxuLy8gQVVUSE9SUyBPUiBDT1BZUklHSFQgSE9MREVSUyBCRSBMSUFCTEUgRk9SIEFOWSBDTEFJTSwgREFNQUdFUyBPUiBPVEhFUlxuLy8gTElBQklMSVRZLCBXSEVUSEVSIElOIEFOIEFDVElPTiBPRiBDT05UUkFDVCwgVE9SVCBPUiBPVEhFUldJU0UsIEFSSVNJTkcgRlJPTSxcbi8vIE9VVCBPRiBPUiBJTiBDT05ORUNUSU9OIFdJVEggVEhFIFNPRlRXQVJFIE9SIFRIRSBVU0UgT1IgT1RIRVIgREVBTElOR1MgSU5cbi8vIFRIRSBTT0ZUV0FSRS5cblxuaW1wb3J0IHVuaXEgZnJvbSAnbG9kYXNoLnVuaXEnO1xuaW1wb3J0IHBpY2sgZnJvbSAnbG9kYXNoLnBpY2snO1xuaW1wb3J0IGZsYXR0ZW5EZWVwIGZyb20gJ2xvZGFzaC5mbGF0dGVuZGVlcCc7XG5pbXBvcnQge2lzT2JqZWN0LCBhcnJheUluc2VydH0gZnJvbSAndXRpbHMvdXRpbHMnO1xuaW1wb3J0IHthcHBseUZpbHRlcnNUb0RhdGFzZXRzLCB2YWxpZGF0ZUZpbHRlcnNVcGRhdGVEYXRhc2V0c30gZnJvbSAndXRpbHMvZmlsdGVyLXV0aWxzJztcblxuaW1wb3J0IHtnZXRJbml0aWFsTWFwTGF5ZXJzRm9yU3BsaXRNYXB9IGZyb20gJ3V0aWxzL3NwbGl0LW1hcC11dGlscyc7XG5pbXBvcnQge3Jlc2V0RmlsdGVyR3B1TW9kZSwgYXNzaWduR3B1Q2hhbm5lbHN9IGZyb20gJ3V0aWxzL2dwdS1maWx0ZXItdXRpbHMnO1xuaW1wb3J0IHtMQVlFUl9CTEVORElOR1N9IGZyb20gJ2NvbnN0YW50cy9kZWZhdWx0LXNldHRpbmdzJztcbmltcG9ydCB7Q1VSUkVOVF9WRVJTSU9OLCB2aXNTdGF0ZVNjaGVtYX0gZnJvbSAnc2NoZW1hcyc7XG5cbi8qKlxuICogTWVyZ2UgbG9hZGVkIGZpbHRlcnMgd2l0aCBjdXJyZW50IHN0YXRlLCBpZiBubyBmaWVsZHMgb3IgZGF0YSBhcmUgbG9hZGVkXG4gKiBzYXZlIGl0IGZvciBsYXRlclxuICpcbiAqIEB0eXBlIHt0eXBlb2YgaW1wb3J0KCcuL3Zpcy1zdGF0ZS1tZXJnZXInKS5tZXJnZUZpbHRlcnN9XG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBtZXJnZUZpbHRlcnMoc3RhdGUsIGZpbHRlcnNUb01lcmdlKSB7XG4gIGlmICghQXJyYXkuaXNBcnJheShmaWx0ZXJzVG9NZXJnZSkgfHwgIWZpbHRlcnNUb01lcmdlLmxlbmd0aCkge1xuICAgIHJldHVybiBzdGF0ZTtcbiAgfVxuXG4gIGNvbnN0IHt2YWxpZGF0ZWQsIGZhaWxlZCwgdXBkYXRlZERhdGFzZXRzfSA9IHZhbGlkYXRlRmlsdGVyc1VwZGF0ZURhdGFzZXRzKHN0YXRlLCBmaWx0ZXJzVG9NZXJnZSk7XG5cbiAgLy8gbWVyZ2UgZmlsdGVyIHdpdGggZXhpc3RpbmdcbiAgbGV0IHVwZGF0ZWRGaWx0ZXJzID0gWy4uLihzdGF0ZS5maWx0ZXJzIHx8IFtdKSwgLi4udmFsaWRhdGVkXTtcbiAgdXBkYXRlZEZpbHRlcnMgPSByZXNldEZpbHRlckdwdU1vZGUodXBkYXRlZEZpbHRlcnMpO1xuICB1cGRhdGVkRmlsdGVycyA9IGFzc2lnbkdwdUNoYW5uZWxzKHVwZGF0ZWRGaWx0ZXJzKTtcbiAgLy8gZmlsdGVyIGRhdGFcbiAgY29uc3QgZGF0YXNldHNUb0ZpbHRlciA9IHVuaXEoZmxhdHRlbkRlZXAodmFsaWRhdGVkLm1hcChmID0+IGYuZGF0YUlkKSkpO1xuXG4gIGNvbnN0IGZpbHRlcmVkID0gYXBwbHlGaWx0ZXJzVG9EYXRhc2V0cyhcbiAgICBkYXRhc2V0c1RvRmlsdGVyLFxuICAgIHVwZGF0ZWREYXRhc2V0cyxcbiAgICB1cGRhdGVkRmlsdGVycyxcbiAgICBzdGF0ZS5sYXllcnNcbiAgKTtcblxuICByZXR1cm4ge1xuICAgIC4uLnN0YXRlLFxuICAgIGZpbHRlcnM6IHVwZGF0ZWRGaWx0ZXJzLFxuICAgIGRhdGFzZXRzOiBmaWx0ZXJlZCxcbiAgICBmaWx0ZXJUb0JlTWVyZ2VkOiBbLi4uc3RhdGUuZmlsdGVyVG9CZU1lcmdlZCwgLi4uZmFpbGVkXVxuICB9O1xufVxuXG5leHBvcnQgZnVuY3Rpb24gY3JlYXRlTGF5ZXJGcm9tQ29uZmlnKHN0YXRlLCBsYXllckNvbmZpZykge1xuICAvLyBmaXJzdCB2YWxpZGF0ZSBjb25maWcgYWdhaW5zdCBkYXRhc2V0XG4gIGNvbnN0IHt2YWxpZGF0ZWQsIGZhaWxlZH0gPSB2YWxpZGF0ZUxheWVyc0J5RGF0YXNldHMoc3RhdGUuZGF0YXNldHMsIHN0YXRlLmxheWVyQ2xhc3NlcywgW1xuICAgIGxheWVyQ29uZmlnXG4gIF0pO1xuXG4gIGlmIChmYWlsZWQubGVuZ3RoIHx8ICF2YWxpZGF0ZWQubGVuZ3RoKSB7XG4gICAgLy8gZmFpbGVkXG4gICAgcmV0dXJuIG51bGw7XG4gIH1cblxuICBjb25zdCBuZXdMYXllciA9IHZhbGlkYXRlZFswXTtcbiAgbmV3TGF5ZXIudXBkYXRlTGF5ZXJEb21haW4oc3RhdGUuZGF0YXNldHMpO1xuICByZXR1cm4gbmV3TGF5ZXI7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBzZXJpYWxpemVMYXllcihuZXdMYXllcikge1xuICBjb25zdCBzYXZlZFZpc1N0YXRlID0gdmlzU3RhdGVTY2hlbWFbQ1VSUkVOVF9WRVJTSU9OXS5zYXZlKHtcbiAgICBsYXllcnM6IFtuZXdMYXllcl0sXG4gICAgbGF5ZXJPcmRlcjogWzBdXG4gIH0pLnZpc1N0YXRlO1xuICBjb25zdCBsb2FkZWRMYXllciA9IHZpc1N0YXRlU2NoZW1hW0NVUlJFTlRfVkVSU0lPTl0ubG9hZChzYXZlZFZpc1N0YXRlKS52aXNTdGF0ZS5sYXllcnNbMF07XG4gIHJldHVybiBsb2FkZWRMYXllcjtcbn1cblxuLyoqXG4gKiBNZXJnZSBsYXllcnMgZnJvbSBkZS1zZXJpYWxpemVkIHN0YXRlLCBpZiBubyBmaWVsZHMgb3IgZGF0YSBhcmUgbG9hZGVkXG4gKiBzYXZlIGl0IGZvciBsYXRlclxuICpcbiAqIEB0eXBlIHt0eXBlb2YgaW1wb3J0KCcuL3Zpcy1zdGF0ZS1tZXJnZXInKS5tZXJnZUxheWVyc31cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIG1lcmdlTGF5ZXJzKHN0YXRlLCBsYXllcnNUb01lcmdlLCBmcm9tQ29uZmlnKSB7XG4gIGNvbnN0IHByZXNlcnZlTGF5ZXJPcmRlciA9IGZyb21Db25maWcgPyBsYXllcnNUb01lcmdlLm1hcChsID0+IGwuaWQpIDogc3RhdGUucHJlc2VydmVMYXllck9yZGVyO1xuXG4gIGlmICghQXJyYXkuaXNBcnJheShsYXllcnNUb01lcmdlKSB8fCAhbGF5ZXJzVG9NZXJnZS5sZW5ndGgpIHtcbiAgICByZXR1cm4gc3RhdGU7XG4gIH1cblxuICBjb25zdCB7dmFsaWRhdGVkOiBtZXJnZWRMYXllciwgZmFpbGVkOiB1bm1lcmdlZH0gPSB2YWxpZGF0ZUxheWVyc0J5RGF0YXNldHMoXG4gICAgc3RhdGUuZGF0YXNldHMsXG4gICAgc3RhdGUubGF5ZXJDbGFzc2VzLFxuICAgIGxheWVyc1RvTWVyZ2VcbiAgKTtcblxuICAvLyBwdXQgbmV3IGxheWVycyBpbiBmcm9udCBvZiBjdXJyZW50IGxheWVyc1xuICBjb25zdCB7bmV3TGF5ZXJPcmRlciwgbmV3TGF5ZXJzfSA9IGluc2VydExheWVyQXRSaWdodE9yZGVyKFxuICAgIHN0YXRlLmxheWVycyxcbiAgICBtZXJnZWRMYXllcixcbiAgICBzdGF0ZS5sYXllck9yZGVyLFxuICAgIHByZXNlcnZlTGF5ZXJPcmRlclxuICApO1xuXG4gIHJldHVybiB7XG4gICAgLi4uc3RhdGUsXG4gICAgbGF5ZXJzOiBuZXdMYXllcnMsXG4gICAgbGF5ZXJPcmRlcjogbmV3TGF5ZXJPcmRlcixcbiAgICBwcmVzZXJ2ZUxheWVyT3JkZXIsXG4gICAgbGF5ZXJUb0JlTWVyZ2VkOiBbLi4uc3RhdGUubGF5ZXJUb0JlTWVyZ2VkLCAuLi51bm1lcmdlZF1cbiAgfTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGluc2VydExheWVyQXRSaWdodE9yZGVyKFxuICBjdXJyZW50TGF5ZXJzLFxuICBsYXllcnNUb0luc2VydCxcbiAgY3VycmVudE9yZGVyLFxuICBwcmVzZXJ2ZWRPcmRlciA9IFtdXG4pIHtcbiAgLy8gcGVyc2VydmVkT3JkZXIgWydhJywgJ2InLCAnYyddO1xuICAvLyBsYXllck9yZGVyIFsxLCAwLCAzXVxuICAvLyBsYXllck9yZGVyTWFwIFsnYScsICdjJ11cbiAgbGV0IGxheWVyT3JkZXJRdWV1ZSA9IGN1cnJlbnRPcmRlci5tYXAoaSA9PiBjdXJyZW50TGF5ZXJzW2ldLmlkKTtcbiAgbGV0IG5ld0xheWVycyA9IGN1cnJlbnRMYXllcnM7XG5cbiAgZm9yIChjb25zdCBuZXdMYXllciBvZiBsYXllcnNUb0luc2VydCkge1xuICAgIC8vIGZpbmQgd2hlcmUgdG8gaW5zZXJ0IGl0XG4gICAgY29uc3QgZXhwZWN0ZWRJZHggPSBwcmVzZXJ2ZWRPcmRlci5pbmRleE9mKG5ld0xheWVyLmlkKTtcbiAgICAvLyBpZiBjYW50IGZpbmQgcGxhY2UgdG8gaW5zZXJ0LCBpbnNlcnQgYXQgdGhlIGZvbnRcbiAgICBsZXQgaW5zZXJ0QXQgPSAwO1xuXG4gICAgaWYgKGV4cGVjdGVkSWR4ID4gMCkge1xuICAgICAgLy8gbG9vayBmb3IgbGF5ZXIgdG8gaW5zZXJ0IGFmdGVyXG4gICAgICBsZXQgaSA9IGV4cGVjdGVkSWR4ICsgMTtcbiAgICAgIGxldCBwcmVjZWVkSWR4ID0gLTE7XG4gICAgICB3aGlsZSAoaS0tID4gMCAmJiBwcmVjZWVkSWR4ID09PSAtMSkge1xuICAgICAgICBjb25zdCBwcmVjZWVkTGF5ZXIgPSBwcmVzZXJ2ZWRPcmRlcltpXTtcbiAgICAgICAgcHJlY2VlZElkeCA9IGxheWVyT3JkZXJRdWV1ZS5pbmRleE9mKHByZWNlZWRMYXllcik7XG4gICAgICB9XG5cbiAgICAgIGlmIChwcmVjZWVkSWR4ID4gLTEpIHtcbiAgICAgICAgaW5zZXJ0QXQgPSBwcmVjZWVkSWR4ICsgMTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICBsYXllck9yZGVyUXVldWUgPSBhcnJheUluc2VydChsYXllck9yZGVyUXVldWUsIGluc2VydEF0LCBuZXdMYXllci5pZCk7XG4gICAgbmV3TGF5ZXJzID0gbmV3TGF5ZXJzLmNvbmNhdChuZXdMYXllcik7XG4gIH1cblxuICAvLyByZWNvbnN0cnVjdCBsYXllck9yZGVyIGFmdGVyIGluc2VydFxuICBjb25zdCBuZXdMYXllck9yZGVyID0gbGF5ZXJPcmRlclF1ZXVlLm1hcChpZCA9PiBuZXdMYXllcnMuZmluZEluZGV4KGwgPT4gbC5pZCA9PT0gaWQpKTtcblxuICByZXR1cm4ge1xuICAgIG5ld0xheWVyT3JkZXIsXG4gICAgbmV3TGF5ZXJzXG4gIH07XG59XG5cbi8qKlxuICogTWVyZ2UgaW50ZXJhY3Rpb25zIHdpdGggc2F2ZWQgY29uZmlnXG4gKlxuICogQHR5cGUge3R5cGVvZiBpbXBvcnQoJy4vdmlzLXN0YXRlLW1lcmdlcicpLm1lcmdlSW50ZXJhY3Rpb25zfVxuICovXG5leHBvcnQgZnVuY3Rpb24gbWVyZ2VJbnRlcmFjdGlvbnMoc3RhdGUsIGludGVyYWN0aW9uVG9CZU1lcmdlZCkge1xuICBjb25zdCBtZXJnZWQgPSB7fTtcbiAgY29uc3QgdW5tZXJnZWQgPSB7fTtcblxuICBpZiAoaW50ZXJhY3Rpb25Ub0JlTWVyZ2VkKSB7XG4gICAgT2JqZWN0LmtleXMoaW50ZXJhY3Rpb25Ub0JlTWVyZ2VkKS5mb3JFYWNoKGtleSA9PiB7XG4gICAgICBpZiAoIXN0YXRlLmludGVyYWN0aW9uQ29uZmlnW2tleV0pIHtcbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuXG4gICAgICBjb25zdCBjdXJyZW50Q29uZmlnID0gc3RhdGUuaW50ZXJhY3Rpb25Db25maWdba2V5XS5jb25maWc7XG5cbiAgICAgIGNvbnN0IHtlbmFibGVkLCAuLi5jb25maWdTYXZlZH0gPSBpbnRlcmFjdGlvblRvQmVNZXJnZWRba2V5XSB8fCB7fTtcbiAgICAgIGxldCBjb25maWdUb01lcmdlID0gY29uZmlnU2F2ZWQ7XG5cbiAgICAgIGlmIChrZXkgPT09ICd0b29sdGlwJykge1xuICAgICAgICBjb25zdCB7bWVyZ2VkVG9vbHRpcCwgdW5tZXJnZWRUb29sdGlwfSA9IG1lcmdlSW50ZXJhY3Rpb25Ub29sdGlwQ29uZmlnKHN0YXRlLCBjb25maWdTYXZlZCk7XG5cbiAgICAgICAgLy8gbWVyZ2UgbmV3IGRhdGFzZXQgdG9vbHRpcHMgd2l0aCBvcmlnaW5hbCBkYXRhc2V0IHRvb2x0aXBzXG4gICAgICAgIGNvbmZpZ1RvTWVyZ2UgPSB7XG4gICAgICAgICAgZmllbGRzVG9TaG93OiB7XG4gICAgICAgICAgICAuLi5jdXJyZW50Q29uZmlnLmZpZWxkc1RvU2hvdyxcbiAgICAgICAgICAgIC4uLm1lcmdlZFRvb2x0aXBcbiAgICAgICAgICB9XG4gICAgICAgIH07XG5cbiAgICAgICAgaWYgKE9iamVjdC5rZXlzKHVubWVyZ2VkVG9vbHRpcCkubGVuZ3RoKSB7XG4gICAgICAgICAgdW5tZXJnZWQudG9vbHRpcCA9IHtmaWVsZHNUb1Nob3c6IHVubWVyZ2VkVG9vbHRpcCwgZW5hYmxlZH07XG4gICAgICAgIH1cbiAgICAgIH1cblxuICAgICAgbWVyZ2VkW2tleV0gPSB7XG4gICAgICAgIC4uLnN0YXRlLmludGVyYWN0aW9uQ29uZmlnW2tleV0sXG4gICAgICAgIGVuYWJsZWQsXG4gICAgICAgIC4uLihjdXJyZW50Q29uZmlnXG4gICAgICAgICAgPyB7XG4gICAgICAgICAgICAgIGNvbmZpZzogcGljayhcbiAgICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgICAuLi5jdXJyZW50Q29uZmlnLFxuICAgICAgICAgICAgICAgICAgLi4uY29uZmlnVG9NZXJnZVxuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgT2JqZWN0LmtleXMoY3VycmVudENvbmZpZylcbiAgICAgICAgICAgICAgKVxuICAgICAgICAgICAgfVxuICAgICAgICAgIDoge30pXG4gICAgICB9O1xuICAgIH0pO1xuICB9XG5cbiAgcmV0dXJuIHtcbiAgICAuLi5zdGF0ZSxcbiAgICBpbnRlcmFjdGlvbkNvbmZpZzoge1xuICAgICAgLi4uc3RhdGUuaW50ZXJhY3Rpb25Db25maWcsXG4gICAgICAuLi5tZXJnZWRcbiAgICB9LFxuICAgIGludGVyYWN0aW9uVG9CZU1lcmdlZDogdW5tZXJnZWRcbiAgfTtcbn1cblxuLyoqXG4gKiBNZXJnZSBzcGxpdE1hcHMgY29uZmlnIHdpdGggY3VycmVudCB2aXNTdGV0ZS5cbiAqIDEuIGlmIGN1cnJlbnQgbWFwIGlzIHNwbGl0LCBidXQgc3BsaXRNYXAgRE9FU05PVCBjb250YWluIG1hcHNcbiAqICAgIDogZG9uJ3QgbWVyZ2UgYW55dGhpbmdcbiAqIDIuIGlmIGN1cnJlbnQgbWFwIGlzIE5PVCBzcGxpdCwgYnV0IHNwbGl0TWFwcyBjb250YWluIG1hcHNcbiAqICAgIDogYWRkIHRvIHNwbGl0TWFwcywgYW5kIGFkZCBjdXJyZW50IGxheWVycyB0byBzcGxpdE1hcHNcbiAqIEB0eXBlIHt0eXBlb2YgaW1wb3J0KCcuL3Zpcy1zdGF0ZS1tZXJnZXInKS5tZXJnZUludGVyYWN0aW9uc31cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIG1lcmdlU3BsaXRNYXBzKHN0YXRlLCBzcGxpdE1hcHMgPSBbXSkge1xuICBjb25zdCBtZXJnZWQgPSBbLi4uc3RhdGUuc3BsaXRNYXBzXTtcbiAgY29uc3QgdW5tZXJnZWQgPSBbXTtcbiAgc3BsaXRNYXBzLmZvckVhY2goKHNtLCBpKSA9PiB7XG4gICAgT2JqZWN0LmVudHJpZXMoc20ubGF5ZXJzKS5mb3JFYWNoKChbaWQsIHZhbHVlXSkgPT4ge1xuICAgICAgLy8gY2hlY2sgaWYgbGF5ZXIgZXhpc3RzXG4gICAgICBjb25zdCBwdXNoVG8gPSBzdGF0ZS5sYXllcnMuZmluZChsID0+IGwuaWQgPT09IGlkKSA/IG1lcmdlZCA6IHVubWVyZ2VkO1xuXG4gICAgICAvLyBjcmVhdGUgbWFwIHBhbmVsIGlmIGN1cnJlbnQgbWFwIGlzIG5vdCBzcGxpdFxuICAgICAgcHVzaFRvW2ldID0gcHVzaFRvW2ldIHx8IHtcbiAgICAgICAgbGF5ZXJzOiBwdXNoVG8gPT09IG1lcmdlZCA/IGdldEluaXRpYWxNYXBMYXllcnNGb3JTcGxpdE1hcChzdGF0ZS5sYXllcnMpIDogW11cbiAgICAgIH07XG4gICAgICBwdXNoVG9baV0ubGF5ZXJzID0ge1xuICAgICAgICAuLi5wdXNoVG9baV0ubGF5ZXJzLFxuICAgICAgICBbaWRdOiB2YWx1ZVxuICAgICAgfTtcbiAgICB9KTtcbiAgfSk7XG5cbiAgcmV0dXJuIHtcbiAgICAuLi5zdGF0ZSxcbiAgICBzcGxpdE1hcHM6IG1lcmdlZCxcbiAgICBzcGxpdE1hcHNUb0JlTWVyZ2VkOiBbLi4uc3RhdGUuc3BsaXRNYXBzVG9CZU1lcmdlZCwgLi4udW5tZXJnZWRdXG4gIH07XG59XG5cbi8qKlxuICogTWVyZ2UgaW50ZXJhY3Rpb25Db25maWcudG9vbHRpcCB3aXRoIHNhdmVkIGNvbmZpZyxcbiAqIHZhbGlkYXRlIGZpZWxkc1RvU2hvd1xuICpcbiAqIEBwYXJhbSB7b2JqZWN0fSBzdGF0ZVxuICogQHBhcmFtIHtvYmplY3R9IHRvb2x0aXBDb25maWdcbiAqIEByZXR1cm4ge29iamVjdH0gLSB7bWVyZ2VkVG9vbHRpcDoge30sIHVubWVyZ2VkVG9vbHRpcDoge319XG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBtZXJnZUludGVyYWN0aW9uVG9vbHRpcENvbmZpZyhzdGF0ZSwgdG9vbHRpcENvbmZpZyA9IHt9KSB7XG4gIGNvbnN0IHVubWVyZ2VkVG9vbHRpcCA9IHt9O1xuICBjb25zdCBtZXJnZWRUb29sdGlwID0ge307XG5cbiAgaWYgKCF0b29sdGlwQ29uZmlnLmZpZWxkc1RvU2hvdyB8fCAhT2JqZWN0LmtleXModG9vbHRpcENvbmZpZy5maWVsZHNUb1Nob3cpLmxlbmd0aCkge1xuICAgIHJldHVybiB7bWVyZ2VkVG9vbHRpcCwgdW5tZXJnZWRUb29sdGlwfTtcbiAgfVxuXG4gIGZvciAoY29uc3QgZGF0YUlkIGluIHRvb2x0aXBDb25maWcuZmllbGRzVG9TaG93KSB7XG4gICAgaWYgKCFzdGF0ZS5kYXRhc2V0c1tkYXRhSWRdKSB7XG4gICAgICAvLyBpcyBub3QgeWV0IGxvYWRlZFxuICAgICAgdW5tZXJnZWRUb29sdGlwW2RhdGFJZF0gPSB0b29sdGlwQ29uZmlnLmZpZWxkc1RvU2hvd1tkYXRhSWRdO1xuICAgIH0gZWxzZSB7XG4gICAgICAvLyBpZiBkYXRhc2V0IGlzIGxvYWRlZFxuICAgICAgY29uc3QgYWxsRmllbGRzID0gc3RhdGUuZGF0YXNldHNbZGF0YUlkXS5maWVsZHMubWFwKGQgPT4gZC5uYW1lKTtcbiAgICAgIGNvbnN0IGZvdW5kRmllbGRzVG9TaG93ID0gc3RhdGUuZGF0YXNldHNbZGF0YUlkXS5tZXRhZGF0YS5pc0R5bmFtaWNTcGF0aWFsSW5kZXhcbiAgICAgICAgPyB0b29sdGlwQ29uZmlnLmZpZWxkc1RvU2hvd1tkYXRhSWRdXG4gICAgICAgIDogdG9vbHRpcENvbmZpZy5maWVsZHNUb1Nob3dbZGF0YUlkXS5maWx0ZXIoZmllbGQgPT4gYWxsRmllbGRzLmluY2x1ZGVzKGZpZWxkLm5hbWUpKTtcblxuICAgICAgbWVyZ2VkVG9vbHRpcFtkYXRhSWRdID0gZm91bmRGaWVsZHNUb1Nob3c7XG4gICAgfVxuICB9XG5cbiAgcmV0dXJuIHttZXJnZWRUb29sdGlwLCB1bm1lcmdlZFRvb2x0aXB9O1xufVxuLyoqXG4gKiBNZXJnZSBsYXllckJsZW5kaW5nIHdpdGggc2F2ZWRcbiAqXG4gKiBAdHlwZSB7dHlwZW9mIGltcG9ydCgnLi92aXMtc3RhdGUtbWVyZ2VyJykubWVyZ2VMYXllckJsZW5kaW5nfVxuICovXG5leHBvcnQgZnVuY3Rpb24gbWVyZ2VMYXllckJsZW5kaW5nKHN0YXRlLCBsYXllckJsZW5kaW5nKSB7XG4gIGlmIChsYXllckJsZW5kaW5nICYmIExBWUVSX0JMRU5ESU5HU1tsYXllckJsZW5kaW5nXSkge1xuICAgIHJldHVybiB7XG4gICAgICAuLi5zdGF0ZSxcbiAgICAgIGxheWVyQmxlbmRpbmdcbiAgICB9O1xuICB9XG5cbiAgcmV0dXJuIHN0YXRlO1xufVxuXG4vKipcbiAqIE1lcmdlIGFuaW1hdGlvbiBjb25maWdcbiAqIEB0eXBlIHt0eXBlb2YgaW1wb3J0KCcuL3Zpcy1zdGF0ZS1tZXJnZXInKS5tZXJnZUFuaW1hdGlvbkNvbmZpZ31cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIG1lcmdlQW5pbWF0aW9uQ29uZmlnKHN0YXRlLCBhbmltYXRpb24pIHtcbiAgaWYgKGFuaW1hdGlvbiAmJiBhbmltYXRpb24uY3VycmVudFRpbWUpIHtcbiAgICByZXR1cm4ge1xuICAgICAgLi4uc3RhdGUsXG4gICAgICBhbmltYXRpb25Db25maWc6IHtcbiAgICAgICAgLi4uc3RhdGUuYW5pbWF0aW9uQ29uZmlnLFxuICAgICAgICAuLi5hbmltYXRpb24sXG4gICAgICAgIGRvbWFpbjogbnVsbFxuICAgICAgfVxuICAgIH07XG4gIH1cblxuICByZXR1cm4gc3RhdGU7XG59XG5cbi8qKlxuICogVmFsaWRhdGUgc2F2ZWQgbGF5ZXIgY29sdW1ucyB3aXRoIG5ldyBkYXRhLFxuICogdXBkYXRlIGZpZWxkSWR4IGJhc2VkIG9uIG5ldyBmaWVsZHNcbiAqXG4gKiBAcGFyYW0ge0FycmF5PE9iamVjdD59IGZpZWxkc1xuICogQHBhcmFtIHtPYmplY3R9IHNhdmVkQ29sc1xuICogQHBhcmFtIHtPYmplY3R9IGVtcHR5Q29sc1xuICogQHJldHVybiB7bnVsbCB8IE9iamVjdH0gLSB2YWxpZGF0ZWQgY29sdW1ucyBvciBudWxsXG4gKi9cblxuZXhwb3J0IGZ1bmN0aW9uIHZhbGlkYXRlU2F2ZWRMYXllckNvbHVtbnMoZmllbGRzLCBzYXZlZENvbHMgPSB7fSwgZW1wdHlDb2xzKSB7XG4gIC8vIFByZXBhcmUgY29sdW1ucyBmb3IgdGhlIHZhbGlkYXRvclxuICBjb25zdCBjb2x1bW5zID0ge307XG4gIGZvciAoY29uc3Qga2V5IG9mIE9iamVjdC5rZXlzKGVtcHR5Q29scykpIHtcbiAgICBjb2x1bW5zW2tleV0gPSB7Li4uZW1wdHlDb2xzW2tleV19O1xuXG4gICAgY29uc3Qgc2F2ZWQgPSBzYXZlZENvbHNba2V5XTtcbiAgICBpZiAoc2F2ZWQpIHtcbiAgICAgIGNvbnN0IGZpZWxkSWR4ID0gZmllbGRzLmZpbmRJbmRleCgoe25hbWV9KSA9PiBuYW1lID09PSBzYXZlZCk7XG5cbiAgICAgIGlmIChmaWVsZElkeCA+IC0xKSB7XG4gICAgICAgIC8vIHVwZGF0ZSBmb3VuZCBjb2x1bW5zXG4gICAgICAgIGNvbHVtbnNba2V5XS5maWVsZElkeCA9IGZpZWxkSWR4O1xuICAgICAgICBjb2x1bW5zW2tleV0udmFsdWUgPSBzYXZlZDtcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICAvLyBmaW5kIGFjdHVhbCBjb2x1bW4gZmllbGRJZHgsIGluIGNhc2UgaXQgaGFzIGNoYW5nZWRcbiAgY29uc3QgYWxsQ29sRm91bmQgPSBPYmplY3Qua2V5cyhjb2x1bW5zKS5ldmVyeShrZXkgPT5cbiAgICB2YWxpZGF0ZUNvbHVtbihjb2x1bW5zW2tleV0sIGNvbHVtbnMsIGZpZWxkcylcbiAgKTtcblxuICBpZiAoYWxsQ29sRm91bmQpIHtcbiAgICByZXR1cm4gY29sdW1ucztcbiAgfVxuXG4gIHJldHVybiBudWxsO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gdmFsaWRhdGVDb2x1bW4oY29sdW1uLCBjb2x1bW5zLCBhbGxGaWVsZHMpIHtcbiAgaWYgKGNvbHVtbi5vcHRpb25hbCB8fCBjb2x1bW4udmFsdWUpIHtcbiAgICByZXR1cm4gdHJ1ZTtcbiAgfVxuICBpZiAoY29sdW1uLnZhbGlkYXRvcikge1xuICAgIHJldHVybiBjb2x1bW4udmFsaWRhdG9yKGNvbHVtbiwgY29sdW1ucywgYWxsRmllbGRzKTtcbiAgfVxuICByZXR1cm4gZmFsc2U7XG59XG5cbi8qKlxuICogVmFsaWRhdGUgc2F2ZWQgdGV4dCBsYWJlbCBjb25maWcgd2l0aCBuZXcgZGF0YVxuICogcmVmZXIgdG8gdmlzLXN0YXRlLXNjaGVtYS5qcyBUZXh0TGFiZWxTY2hlbWFWMVxuICpcbiAqIEBwYXJhbSB7QXJyYXk8T2JqZWN0Pn0gZmllbGRzXG4gKiBAcGFyYW0ge09iamVjdH0gc2F2ZWRUZXh0TGFiZWxcbiAqIEByZXR1cm4ge09iamVjdH0gLSB2YWxpZGF0ZWQgdGV4dGxhYmVsXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiB2YWxpZGF0ZVNhdmVkVGV4dExhYmVsKGZpZWxkcywgW2xheWVyVGV4dExhYmVsXSwgc2F2ZWRUZXh0TGFiZWwpIHtcbiAgY29uc3Qgc2F2ZWRUZXh0TGFiZWxzID0gQXJyYXkuaXNBcnJheShzYXZlZFRleHRMYWJlbCkgPyBzYXZlZFRleHRMYWJlbCA6IFtzYXZlZFRleHRMYWJlbF07XG5cbiAgLy8gdmFsaWRhdGUgZmllbGRcbiAgcmV0dXJuIHNhdmVkVGV4dExhYmVscy5tYXAodGV4dExhYmVsID0+IHtcbiAgICBjb25zdCBmaWVsZCA9IHRleHRMYWJlbC5maWVsZFxuICAgICAgPyBmaWVsZHMuZmluZChmZCA9PlxuICAgICAgICAgIE9iamVjdC5rZXlzKHRleHRMYWJlbC5maWVsZCkuZXZlcnkoa2V5ID0+IHRleHRMYWJlbC5maWVsZFtrZXldID09PSBmZFtrZXldKVxuICAgICAgICApXG4gICAgICA6IG51bGw7XG5cbiAgICByZXR1cm4gT2JqZWN0LmtleXMobGF5ZXJUZXh0TGFiZWwpLnJlZHVjZShcbiAgICAgIChhY2N1LCBrZXkpID0+ICh7XG4gICAgICAgIC4uLmFjY3UsXG4gICAgICAgIFtrZXldOiBrZXkgPT09ICdmaWVsZCcgPyBmaWVsZCA6IHRleHRMYWJlbFtrZXldIHx8IGxheWVyVGV4dExhYmVsW2tleV1cbiAgICAgIH0pLFxuICAgICAge31cbiAgICApO1xuICB9KTtcbn1cblxuLyoqXG4gKiBWYWxpZGF0ZSBzYXZlZCB2aXN1YWwgY2hhbm5lbHMgY29uZmlnIHdpdGggbmV3IGRhdGEsXG4gKiByZWZlciB0byB2aXMtc3RhdGUtc2NoZW1hLmpzIFZpc3VhbENoYW5uZWxTY2hlbWFWMVxuICogQHR5cGUge3R5cGVvZiBpbXBvcnQoJy4vdmlzLXN0YXRlLW1lcmdlcicpLnZhbGlkYXRlU2F2ZWRWaXN1YWxDaGFubmVsc31cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHZhbGlkYXRlU2F2ZWRWaXN1YWxDaGFubmVscyhmaWVsZHMsIG5ld0xheWVyLCBzYXZlZExheWVyKSB7XG4gIE9iamVjdC52YWx1ZXMobmV3TGF5ZXIudmlzdWFsQ2hhbm5lbHMpLmZvckVhY2goKHtmaWVsZCwgc2NhbGUsIGtleX0pID0+IHtcbiAgICBsZXQgZm91bmRGaWVsZDtcbiAgICBjb25zdCBjb2xvckZpZWxkUHJvcHMgPSB7fTtcbiAgICBpZiAoc2F2ZWRMYXllci5jb25maWcpIHtcbiAgICAgIGlmIChzYXZlZExheWVyLmNvbmZpZ1tmaWVsZF0pIHtcbiAgICAgICAgZm91bmRGaWVsZCA9IGZpZWxkcy5maW5kKFxuICAgICAgICAgIGZkID0+IHNhdmVkTGF5ZXIuY29uZmlnICYmIGZkLm5hbWUgPT09IHNhdmVkTGF5ZXIuY29uZmlnW2ZpZWxkXS5uYW1lXG4gICAgICAgICk7XG4gICAgICB9XG5cbiAgICAgIGlmIChzYXZlZExheWVyLmNvbmZpZ1tmaWVsZF0/LmNvbG9yQ29sdW1uKSB7XG4gICAgICAgIGNvbnN0IGNvbG9yQ29sdW1uRmllbGQgPSBmaWVsZHMuZmluZChcbiAgICAgICAgICBmZCA9PiBzYXZlZExheWVyLmNvbmZpZyAmJiBmZC5uYW1lID09PSBzYXZlZExheWVyLmNvbmZpZ1tmaWVsZF0uY29sb3JDb2x1bW5cbiAgICAgICAgKTtcblxuICAgICAgICBpZiAoY29sb3JDb2x1bW5GaWVsZCkge1xuICAgICAgICAgIGNvbG9yRmllbGRQcm9wcy5jb2xvckNvbHVtbiA9IGNvbG9yQ29sdW1uRmllbGQubmFtZTtcbiAgICAgICAgICBjb2xvckZpZWxkUHJvcHMuY29sb3JDb2x1bW5JZHggPSBjb2xvckNvbHVtbkZpZWxkLmZpZWxkSWR4O1xuICAgICAgICB9XG4gICAgICB9XG5cbiAgICAgIGNvbnN0IGZvdW5kQ2hhbm5lbCA9IHtcbiAgICAgICAgLi4uKGZvdW5kRmllbGQgPyB7W2ZpZWxkXTogey4uLmZvdW5kRmllbGQsIC4uLmNvbG9yRmllbGRQcm9wc319IDoge30pLFxuICAgICAgICAuLi4oc2F2ZWRMYXllci5jb25maWdbc2NhbGVdID8ge1tzY2FsZV06IHNhdmVkTGF5ZXIuY29uZmlnW3NjYWxlXX0gOiB7fSlcbiAgICAgIH07XG4gICAgICBpZiAoT2JqZWN0LmtleXMoZm91bmRDaGFubmVsKS5sZW5ndGgpIHtcbiAgICAgICAgbmV3TGF5ZXIudXBkYXRlTGF5ZXJDb25maWcoZm91bmRDaGFubmVsKTtcbiAgICAgIH1cblxuICAgICAgbmV3TGF5ZXIudmFsaWRhdGVWaXN1YWxDaGFubmVsKGtleSk7XG4gICAgfVxuICB9KTtcbiAgcmV0dXJuIG5ld0xheWVyO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gdmFsaWRhdGVMYXllcnNCeURhdGFzZXRzKGRhdGFzZXRzLCBsYXllckNsYXNzZXMsIGxheWVycykge1xuICBjb25zdCB2YWxpZGF0ZWQgPSBbXTtcbiAgY29uc3QgZmFpbGVkID0gW107XG5cbiAgbGF5ZXJzLmZvckVhY2gobGF5ZXIgPT4ge1xuICAgIGxldCB2YWxpZGF0ZUxheWVyO1xuICAgIGlmICghbGF5ZXIgfHwgIWxheWVyLmNvbmZpZykge1xuICAgICAgdmFsaWRhdGVMYXllciA9IG51bGw7XG4gICAgfSBlbHNlIGlmIChkYXRhc2V0c1tsYXllci5jb25maWcuZGF0YUlkXSkge1xuICAgICAgLy8gZGF0YXNldHMgYXJlIGFscmVhZHkgbG9hZGVkXG4gICAgICB2YWxpZGF0ZUxheWVyID0gdmFsaWRhdGVMYXllcldpdGhEYXRhKGRhdGFzZXRzW2xheWVyLmNvbmZpZy5kYXRhSWRdLCBsYXllciwgbGF5ZXJDbGFzc2VzKTtcbiAgICB9XG5cbiAgICBpZiAodmFsaWRhdGVMYXllcikge1xuICAgICAgdmFsaWRhdGVkLnB1c2godmFsaWRhdGVMYXllcik7XG4gICAgfSBlbHNlIHtcbiAgICAgIC8vIGRhdGFzZXRzIG5vdCB5ZXQgbG9hZGVkXG4gICAgICBmYWlsZWQucHVzaChsYXllcik7XG4gICAgfVxuICB9KTtcblxuICByZXR1cm4ge3ZhbGlkYXRlZCwgZmFpbGVkfTtcbn1cbi8qKlxuICogVmFsaWRhdGUgc2F2ZWQgbGF5ZXIgY29uZmlnIHdpdGggbmV3IGRhdGEsXG4gKiB1cGRhdGUgZmllbGRJZHggYmFzZWQgb24gbmV3IGZpZWxkc1xuICogQHR5cGUge3R5cGVvZiBpbXBvcnQoJy4vdmlzLXN0YXRlLW1lcmdlcicpLnZhbGlkYXRlTGF5ZXJXaXRoRGF0YX1cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHZhbGlkYXRlTGF5ZXJXaXRoRGF0YShcbiAge2ZpZWxkcywgaWQ6IGRhdGFJZH0sXG4gIHNhdmVkTGF5ZXIsXG4gIGxheWVyQ2xhc3NlcyxcbiAgb3B0aW9ucyA9IHt9XG4pIHtcbiAgY29uc3Qge3R5cGV9ID0gc2F2ZWRMYXllcjtcbiAgLy8gbGF5ZXIgZG9lc250IGhhdmUgYSB2YWxpZCB0eXBlXG4gIGlmICghdHlwZSB8fCAhbGF5ZXJDbGFzc2VzLmhhc093blByb3BlcnR5KHR5cGUpIHx8ICFzYXZlZExheWVyLmNvbmZpZykge1xuICAgIHJldHVybiBudWxsO1xuICB9XG5cbiAgbGV0IG5ld0xheWVyID0gbmV3IGxheWVyQ2xhc3Nlc1t0eXBlXSh7XG4gICAgaWQ6IHNhdmVkTGF5ZXIuaWQsXG4gICAgZGF0YUlkLFxuICAgIGxhYmVsOiBzYXZlZExheWVyLmNvbmZpZy5sYWJlbCxcbiAgICBjb2xvcjogc2F2ZWRMYXllci5jb25maWcuY29sb3IsXG4gICAgaXNWaXNpYmxlOiBzYXZlZExheWVyLmNvbmZpZy5pc1Zpc2libGUsXG4gICAgaGlkZGVuOiBzYXZlZExheWVyLmNvbmZpZy5oaWRkZW4sXG4gICAgaGlnaGxpZ2h0Q29sb3I6IHNhdmVkTGF5ZXIuY29uZmlnLmhpZ2hsaWdodENvbG9yLFxuICAgIHZpc2liaWxpdHlCeVpvb206IHNhdmVkTGF5ZXIuY29uZmlnLnZpc2liaWxpdHlCeVpvb21cbiAgfSk7XG5cbiAgLy8gZmluZCBjb2x1bW4gZmllbGRJZHhcbiAgY29uc3QgY29sdW1uQ29uZmlnID0gbmV3TGF5ZXIuZ2V0TGF5ZXJDb2x1bW5zKCk7XG4gIGlmIChPYmplY3Qua2V5cyhjb2x1bW5Db25maWcpLmxlbmd0aCkge1xuICAgIGNvbnN0IGNvbHVtbnMgPSB2YWxpZGF0ZVNhdmVkTGF5ZXJDb2x1bW5zKGZpZWxkcywgc2F2ZWRMYXllci5jb25maWcuY29sdW1ucywgY29sdW1uQ29uZmlnKTtcbiAgICBpZiAoY29sdW1ucykge1xuICAgICAgbmV3TGF5ZXIudXBkYXRlTGF5ZXJDb25maWcoe2NvbHVtbnN9KTtcbiAgICB9IGVsc2UgaWYgKCFvcHRpb25zLmFsbG93RW1wdHlDb2x1bW4pIHtcbiAgICAgIHJldHVybiBudWxsO1xuICAgIH1cbiAgfVxuXG4gIC8vIHZpc3VhbCBjaGFubmVsIGZpZWxkIGlzIHNhdmVkIHRvIGJlIHtuYW1lLCB0eXBlfVxuICAvLyBmaW5kIHZpc3VhbCBjaGFubmVsIGZpZWxkIGJ5IG1hdGNoaW5nIGJvdGggbmFtZSBhbmQgdHlwZVxuICAvLyByZWZlciB0byB2aXMtc3RhdGUtc2NoZW1hLmpzIFZpc3VhbENoYW5uZWxTY2hlbWFWMVxuICBuZXdMYXllciA9IHZhbGlkYXRlU2F2ZWRWaXN1YWxDaGFubmVscyhmaWVsZHMsIG5ld0xheWVyLCBzYXZlZExheWVyKTtcblxuICBjb25zdCB0ZXh0TGFiZWwgPVxuICAgIHNhdmVkTGF5ZXIuY29uZmlnLnRleHRMYWJlbCAmJiBuZXdMYXllci5jb25maWcudGV4dExhYmVsXG4gICAgICA/IHZhbGlkYXRlU2F2ZWRUZXh0TGFiZWwoZmllbGRzLCBuZXdMYXllci5jb25maWcudGV4dExhYmVsLCBzYXZlZExheWVyLmNvbmZpZy50ZXh0TGFiZWwpXG4gICAgICA6IG5ld0xheWVyLmNvbmZpZy50ZXh0TGFiZWw7XG5cbiAgLy8gY29weSB2aXNDb25maWcgb3ZlciB0byBlbXB0eUxheWVyIHRvIG1ha2Ugc3VyZSBpdCBoYXMgYWxsIHRoZSBwcm9wc1xuICBjb25zdCB2aXNDb25maWcgPSBuZXdMYXllci5jb3B5TGF5ZXJDb25maWcoXG4gICAgbmV3TGF5ZXIuY29uZmlnLnZpc0NvbmZpZyxcbiAgICBzYXZlZExheWVyLmNvbmZpZy52aXNDb25maWcgfHwge30sXG4gICAge3NoYWxsb3dDb3B5OiBbJ2NvbG9yUmFuZ2UnLCAnc3Ryb2tlQ29sb3JSYW5nZSddfVxuICApO1xuXG4gIG5ld0xheWVyLnVwZGF0ZUxheWVyQ29uZmlnKHtcbiAgICB2aXNDb25maWcsXG4gICAgdGV4dExhYmVsXG4gIH0pO1xuXG4gIHJldHVybiBuZXdMYXllcjtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGlzVmFsaWRNZXJnZXIobWVyZ2VyKSB7XG4gIHJldHVybiBpc09iamVjdChtZXJnZXIpICYmIHR5cGVvZiBtZXJnZXIubWVyZ2UgPT09ICdmdW5jdGlvbicgJiYgdHlwZW9mIG1lcmdlci5wcm9wID09PSAnc3RyaW5nJztcbn1cblxuZXhwb3J0IGNvbnN0IFZJU19TVEFURV9NRVJHRVJTID0gW1xuICB7bWVyZ2U6IG1lcmdlTGF5ZXJzLCBwcm9wOiAnbGF5ZXJzJywgdG9NZXJnZVByb3A6ICdsYXllclRvQmVNZXJnZWQnfSxcbiAge21lcmdlOiBtZXJnZUZpbHRlcnMsIHByb3A6ICdmaWx0ZXJzJywgdG9NZXJnZVByb3A6ICdmaWx0ZXJUb0JlTWVyZ2VkJ30sXG4gIHttZXJnZTogbWVyZ2VJbnRlcmFjdGlvbnMsIHByb3A6ICdpbnRlcmFjdGlvbkNvbmZpZycsIHRvTWVyZ2VQcm9wOiAnaW50ZXJhY3Rpb25Ub0JlTWVyZ2VkJ30sXG4gIHttZXJnZTogbWVyZ2VMYXllckJsZW5kaW5nLCBwcm9wOiAnbGF5ZXJCbGVuZGluZyd9LFxuICB7bWVyZ2U6IG1lcmdlU3BsaXRNYXBzLCBwcm9wOiAnc3BsaXRNYXBzJywgdG9NZXJnZVByb3A6ICdzcGxpdE1hcHNUb0JlTWVyZ2VkJ30sXG4gIHttZXJnZTogbWVyZ2VBbmltYXRpb25Db25maWcsIHByb3A6ICdhbmltYXRpb25Db25maWcnfVxuXTtcbiJdfQ==
|