@kepler.gl/reducers 3.1.8 → 3.1.10

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.
@@ -79,6 +79,7 @@ exports.updateOverlayBlendingUpdater = exports.updateLayerBlendingUpdater = expo
79
79
  exports.updateStateOnLayerVisibilityChange = updateStateOnLayerVisibilityChange;
80
80
  exports.updateStateWithLayerAndData = updateStateWithLayerAndData;
81
81
  exports.updateVisDataUpdater = exports.updateTableColorUpdater = void 0;
82
+ exports.wmsFeatureInfoUpdater = wmsFeatureInfoUpdater;
82
83
  var _toArray2 = _interopRequireDefault(require("@babel/runtime/helpers/toArray"));
83
84
  var _slicedToArray2 = _interopRequireDefault(require("@babel/runtime/helpers/slicedToArray"));
84
85
  var _toConsumableArray2 = _interopRequireDefault(require("@babel/runtime/helpers/toConsumableArray"));
@@ -137,7 +138,7 @@ function _objectSpread(e) { for (var r = 1; r < arguments.length; r++) { var t =
137
138
  * @public
138
139
  * @example
139
140
  *
140
- * import keplerGlReducer, {visStateUpdaters} from 'kepler.gl/reducers';
141
+ * import keplerGlReducer, {visStateUpdaters} from '@kepler.gl/reducers';
141
142
  * // Root Reducer
142
143
  * const reducers = combineReducers({
143
144
  * keplerGl: keplerGlReducer,
@@ -3185,6 +3186,39 @@ function layerFilteredItemsChangeUpdater(state, action) {
3185
3186
  });
3186
3187
  }
3187
3188
 
3189
+ /**
3190
+ * Update WMS feature info and pin tooltip
3191
+ */
3192
+ function wmsFeatureInfoUpdater(state, action) {
3193
+ var layer = action.layer,
3194
+ featureInfo = action.featureInfo,
3195
+ coordinate = action.coordinate;
3196
+ if (!layer) {
3197
+ console.warn("WMS feature info layer doesn't exist");
3198
+ return state;
3199
+ }
3200
+
3201
+ // Create a clicked object similar to layerClickUpdater to pin the tooltip
3202
+ var clicked = featureInfo ? {
3203
+ picked: true,
3204
+ object: {
3205
+ wmsFeatureInfo: featureInfo
3206
+ },
3207
+ coordinate: coordinate || [0, 0],
3208
+ layer: {
3209
+ props: {
3210
+ idx: state.layers.findIndex(function (l) {
3211
+ return l.id === layer.id;
3212
+ }),
3213
+ id: layer.id
3214
+ }
3215
+ }
3216
+ } : null;
3217
+ return _objectSpread(_objectSpread({}, state), {}, {
3218
+ clicked: clicked
3219
+ });
3220
+ }
3221
+
3188
3222
  // eslint-disable-next-line max-statements
3189
3223
  function syncTimeFilterWithLayerTimelineUpdater(state, action) {
3190
3224
  var _newState$animationCo, _newState$animationCo2;
@@ -3561,4 +3595,4 @@ function replacePropValueInState(state, replacedItem, _ref39) {
3561
3595
  }
3562
3596
  return nextState;
3563
3597
  }
3564
- //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJfYmJveCIsIl9pbnRlcm9wUmVxdWlyZURlZmF1bHQiLCJyZXF1aXJlIiwiX2NvcHlUb0NsaXBib2FyZCIsIl9kZWVwbWVyZ2UiLCJfd2luZG93IiwiX2Nsb25lRGVlcCIsIl9nZXQiLCJfaXNFcXVhbCIsIl9waWNrIiwiX3VuaXEiLCJfeG9yIiwiX3Rhc2tzIiwiX2ludGVyb3BSZXF1aXJlV2lsZGNhcmQiLCJfdGFza3MyIiwiX2FjdGlvbnMiLCJfdXRpbHMiLCJfY29tbW9uVXRpbHMiLCJfY29uc3RhbnRzIiwiX2xheWVycyIsIl9jb21wb3NlckhlbHBlcnMiLCJfbWVyZ2VySGFuZGxlciIsIl92aXNTdGF0ZU1lcmdlciIsIl9zY2hlbWFzIiwiX3RhYmxlIiwiX2ludGVyYWN0aW9uVXRpbHMiLCJfbGF5ZXJVdGlscyIsIl9lZmZlY3RzIiwiX2RhdGFVdGlscyIsIl9leGNsdWRlZCIsIl9leGNsdWRlZDIiLCJfZ2V0UmVxdWlyZVdpbGRjYXJkQ2FjaGUiLCJlIiwiV2Vha01hcCIsInIiLCJ0IiwiX19lc01vZHVsZSIsIl90eXBlb2YiLCJoYXMiLCJnZXQiLCJuIiwiX19wcm90b19fIiwiYSIsIk9iamVjdCIsImRlZmluZVByb3BlcnR5IiwiZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yIiwidSIsImhhc093blByb3BlcnR5IiwiY2FsbCIsImkiLCJzZXQiLCJfdG9Qcm9wZXJ0eUtleSIsIl90b1ByaW1pdGl2ZSIsIlN5bWJvbCIsInRvUHJpbWl0aXZlIiwiVHlwZUVycm9yIiwiU3RyaW5nIiwiTnVtYmVyIiwiX2NyZWF0ZUZvck9mSXRlcmF0b3JIZWxwZXIiLCJpdGVyYXRvciIsIkFycmF5IiwiaXNBcnJheSIsIl91bnN1cHBvcnRlZEl0ZXJhYmxlVG9BcnJheSIsImxlbmd0aCIsIl9uIiwiRiIsInMiLCJkb25lIiwidmFsdWUiLCJmIiwibyIsIm5leHQiLCJfYXJyYXlMaWtlVG9BcnJheSIsInRvU3RyaW5nIiwic2xpY2UiLCJjb25zdHJ1Y3RvciIsIm5hbWUiLCJmcm9tIiwidGVzdCIsIm93bktleXMiLCJrZXlzIiwiZ2V0T3duUHJvcGVydHlTeW1ib2xzIiwiZmlsdGVyIiwiZW51bWVyYWJsZSIsInB1c2giLCJhcHBseSIsIl9vYmplY3RTcHJlYWQiLCJhcmd1bWVudHMiLCJmb3JFYWNoIiwiX2RlZmluZVByb3BlcnR5MiIsImdldE93blByb3BlcnR5RGVzY3JpcHRvcnMiLCJkZWZpbmVQcm9wZXJ0aWVzIiwiZGlzYWJsZVN0YWNrQ2FwdHVyaW5nIiwidmlzU3RhdGVVcGRhdGVycyIsImRlZmF1bHRJbnRlcmFjdGlvbkNvbmZpZyIsImV4cG9ydHMiLCJ0b29sdGlwIiwiaWQiLCJsYWJlbCIsImVuYWJsZWQiLCJjb25maWciLCJmaWVsZHNUb1Nob3ciLCJjb21wYXJlTW9kZSIsImNvbXBhcmVUeXBlIiwiQ09NUEFSRV9UWVBFUyIsIkFCU09MVVRFIiwiZ2VvY29kZXIiLCJwb3NpdGlvbiIsImJydXNoIiwic2l6ZSIsImNvb3JkaW5hdGUiLCJERUZBVUxUX0FOSU1BVElPTl9DT05GSUciLCJkb21haW4iLCJjdXJyZW50VGltZSIsInNwZWVkIiwiaXNBbmltYXRpbmciLCJ0aW1lU3RlcHMiLCJ0aW1lRm9ybWF0IiwidGltZXpvbmUiLCJkZWZhdWx0VGltZUZvcm1hdCIsImhpZGVDb250cm9sIiwiZHVyYXRpb24iLCJERUZBVUxUX0VESVRPUiIsIm1vZGUiLCJFRElUT1JfTU9ERVMiLCJEUkFXX1BPTFlHT04iLCJmZWF0dXJlcyIsInNlbGVjdGVkRmVhdHVyZSIsInZpc2libGUiLCJJTklUSUFMX1ZJU19TVEFURSIsIm1hcEluZm8iLCJ0aXRsZSIsImRlc2NyaXB0aW9uIiwibGF5ZXJzIiwibGF5ZXJEYXRhIiwibGF5ZXJUb0JlTWVyZ2VkIiwibGF5ZXJPcmRlciIsImZpbHRlcnMiLCJmaWx0ZXJUb0JlTWVyZ2VkIiwiZGF0YXNldHMiLCJlZGl0aW5nRGF0YXNldCIsInVuZGVmaW5lZCIsImVmZmVjdHMiLCJlZmZlY3RPcmRlciIsImludGVyYWN0aW9uQ29uZmlnIiwiaW50ZXJhY3Rpb25Ub0JlTWVyZ2VkIiwibGF5ZXJCbGVuZGluZyIsIm92ZXJsYXlCbGVuZGluZyIsImhvdmVySW5mbyIsImNsaWNrZWQiLCJtb3VzZVBvcyIsIm1heERlZmF1bHRUb29sdGlwcyIsIk1BWF9ERUZBVUxUX1RPT0xUSVBTIiwic3BsaXRNYXBzIiwic3BsaXRNYXBzVG9CZU1lcmdlZCIsImlzTWVyZ2luZ0RhdGFzZXRzIiwibGF5ZXJDbGFzc2VzIiwiTGF5ZXJDbGFzc2VzIiwiYW5pbWF0aW9uQ29uZmlnIiwiZWRpdG9yIiwiZmlsZUxvYWRpbmciLCJmaWxlTG9hZGluZ1Byb2dyZXNzIiwibG9hZGluZ0luZGljYXRvclZhbHVlIiwibG9hZGVycyIsImxvYWRPcHRpb25zIiwibWVyZ2VycyIsIlZJU19TVEFURV9NRVJHRVJTIiwic2NoZW1hIiwiS2VwbGVyR0xTY2hlbWEiLCJBQ1RJT05fVEFTS19GSVRfQk9VTkRTIiwiVGFzayIsImZyb21DYWxsYmFjayIsIl8iLCJjYiIsIkFDVElPTl9UQVNLX0FERF9OT1RJRklDQVRJT04iLCJ1cGRhdGVTdGF0ZVdpdGhMYXllckFuZERhdGEiLCJzdGF0ZSIsIl9yZWYiLCJsYXllciIsImlkeCIsIm1hcCIsImx5ciIsImQiLCJ1cGRhdGVTdGF0ZU9uTGF5ZXJWaXNpYmlsaXR5Q2hhbmdlIiwibmV3U3RhdGUiLCJpc1Zpc2libGUiLCJhZGROZXdMYXllcnNUb1NwbGl0TWFwIiwicmVtb3ZlTGF5ZXJGcm9tU3BsaXRNYXBzIiwiYW5pbWF0aW9uIiwidXBkYXRlQW5pbWF0aW9uRG9tYWluIiwicGlja0NoYW5nZWRQcm9wcyIsInByZXYiLCJjaGFuZ2VkUHJvcHMiLCJwaWNrUHJvcHNPZiIsIm9iaiIsImtleSIsInByb3RvdHlwZSIsImlzRXF1YWwiLCJWSVNVQUxfQ0hBTk5FTF9QUk9QX1RZUEVTIiwiYXBwbHlMYXllckNvbmZpZ1VwZGF0ZXIiLCJhY3Rpb24iLCJfc2VyaWFsaXplTGF5ZXIiLCJvbGRMYXllcklkIiwibmV3TGF5ZXJDb25maWciLCJsYXllckluZGV4IiwibmV3UGFyc2VkTGF5ZXIiLCJwYXJzZUxheWVyQ29uZmlnIiwib2xkTGF5ZXIiLCJmaW5kIiwibCIsImRhdGFzZXQiLCJkYXRhSWQiLCJuZXdMYXllciIsInZhbGlkYXRlTGF5ZXJXaXRoRGF0YSIsIm5leHRTdGF0ZSIsInR5cGUiLCJvbGRMYXllckluZGV4IiwiZmluZEluZGV4IiwibGF5ZXJUeXBlQ2hhbmdlVXBkYXRlciIsImxheWVyVHlwZUNoYW5nZSIsIm5ld0xheWVySWQiLCJhcHBseUxheWVyQ29uZmlnIiwic2VyaWFsaXplZE9sZExheWVyIiwic2VyaWFsaXplTGF5ZXIiLCJzZXJpYWxpemVkTmV3TGF5ZXIiLCJjaGFuZ2VkIiwidmlzQ29uZmlnIiwibGF5ZXJWaXNDb25maWdDaGFuZ2VVcGRhdGVyIiwibGF5ZXJWaXNDb25maWdDaGFuZ2UiLCJ2aXN1YWxDaGFubmVscyIsImNoYW5uZWxOYW1lIiwiY2hhbm5lbCIsImNoYW5uZWxQcm9wTmFtZXMiLCJwcm9wIiwic29tZSIsImxheWVyVmlzdWFsQ2hhbm5lbENoYW5nZVVwZGF0ZXIiLCJsYXllclZpc3VhbENoYW5uZWxDb25maWdDaGFuZ2UiLCJwaWNrIiwiX2l0ZXJhdG9yIiwiX3N0ZXAiLCJlcnIiLCJsYXllckNvbmZpZ0NoYW5nZVVwZGF0ZXIiLCJsYXllckNvbmZpZ0NoYW5nZSIsInVwZGF0ZWxheWVyVmlzaWJpbHR5IiwiZmlsdGVySW5kZXgiLCJmaWx0ZXJTeW5jZWRXaXRoVGltZWxpbmUiLCJpc0xheWVyQW5pbWF0YWJsZSIsInN5bmNUaW1lRmlsdGVyV2l0aExheWVyVGltZWxpbmVVcGRhdGVyIiwiZW5hYmxlIiwiZ2V0QW5pbWF0YWJsZVZpc2libGVMYXllcnMiLCJwcm9wcyIsIm5ld0NvbmZpZyIsIl9hY3Rpb24kbmV3Q29uZmlnIiwicmVzdENvbmZpZyIsIl9vYmplY3RXaXRob3V0UHJvcGVydGllczIiLCJzdGF0ZVdpdGhEYXRhSWQiLCJsYXllckRhdGFJZENoYW5nZVVwZGF0ZXIiLCJuZXh0TGF5ZXIiLCJ1cGRhdGVMYXllckNvbmZpZyIsInNob3VsZENhbGN1bGF0ZUxheWVyRGF0YSIsIm9sZExheWVyRGF0YSIsInVwZGF0ZUxheWVyRGF0YVJlc3VsdCIsImNhbGN1bGF0ZUxheWVyRGF0YSIsImxheWVyQW5pbWF0aW9uQ2hhbmdlVXBkYXRlciIsIl9jYWxjdWxhdGVMYXllckRhdGEiLCJsYXllclRvZ2dsZVZpc2liaWxpdHlVcGRhdGVyIiwibGF5ZXJJZCIsInNwbGl0TWFwSWQiLCJtYXBJbmRleCIsInNtIiwidG9nZ2xlTGF5ZXJGb3JNYXBVcGRhdGVyIiwidG9nZ2xlTGF5ZXJGb3JNYXAiLCJzeW5jZWRXaXRoTGF5ZXJUaW1lbGluZSIsImxheWVyU2V0SXNWYWxpZFVwZGF0ZXIiLCJpc1ZhbGlkIiwibGF5ZXJUb1VwZGF0ZSIsIm5ld0RhdGEiLCJfY2FsY3VsYXRlTGF5ZXJEYXRhMiIsImFkZE9yUmVtb3ZlVGV4dExhYmVscyIsIm5ld0ZpZWxkcyIsInRleHRMYWJlbCIsImRlZmF1bHRUZXh0TGFiZWwiLCJERUZBVUxUX1RFWFRfTEFCRUwiLCJuZXdUZXh0TGFiZWwiLCJjdXJyZW50RmllbGRzIiwidGwiLCJmaWVsZCIsImFkZEZpZWxkcyIsImluY2x1ZGVzIiwiZGVsZXRlRmllbGRzIiwiZmQiLCJjb25jYXQiLCJfdG9Db25zdW1hYmxlQXJyYXkyIiwiYWYiLCJ1cGRhdGVUZXh0TGFiZWxQcm9wQW5kVmFsdWUiLCJzcGxpY2UiLCJsYXllclRleHRMYWJlbENoYW5nZVVwZGF0ZXIiLCJfb2xkTGF5ZXIkZ2V0RGVmYXVsdEwiLCJfb2xkTGF5ZXIkZ2V0RGVmYXVsdEwyIiwiZ2V0RGVmYXVsdExheWVyQ29uZmlnIiwidmFsaWRhdGVFeGlzdGluZ0xheWVyV2l0aERhdGEiLCJsb2FkZWRMYXllciIsImFsbG93RW1wdHlDb2x1bW4iLCJpc1ZhbGlkVG9TYXZlIiwidmFsaWRhdGVkIiwib2xkTGF5ZXJUeXBlIiwiaXNDb25maWdBY3RpdmUiLCJ1cGRhdGVMYXllckRvbWFpbiIsIl9jYWxjdWxhdGVMYXllckRhdGEzIiwic2V0SW5pdGlhbExheWVyQ29uZmlnIiwicmVzdWx0IiwiZmluZERlZmF1bHRMYXllclByb3BzIiwibmV3VHlwZSIsIm9sZElkIiwiQ29uc29sZSIsImVycm9yIiwiZGVmYXVsdExheWVyUHJvcHMiLCJhc3NpZ25Db25maWdUb0xheWVyIiwidmlzQ29uZmlnU2V0dGluZ3MiLCJpc0xheWVySG92ZXJlZCIsIl9jYWxjdWxhdGVMYXllckRhdGE0Iiwic2V0dGluZ3MiLCJfc2V0dGluZ3MkbGF5ZXJzIiwib2xkTGF5ZXJNYXAiLCJvdGhlckxheWVycyIsIm5ld1Zpc0NvbmZpZyIsInVwZGF0ZUxheWVyVmlzQ29uZmlnIiwidXBkYXRlTGF5ZXJWaXN1YWxDaGFubmVsIiwidXBkYXRlZFN0YXRlIiwidmlzdWFsQ2hhbm5lbCIsImNoYW5uZWxTY2FsZVR5cGUiLCJDSEFOTkVMX1NDQUxFUyIsImNvbG9yIiwidXBkYXRlTGF5ZXJDb2xvclVJIiwicmFuZ2UiLCJjb2xvclJhbmdlQ29uZmlnIiwiY29sb3JVSSIsImN1c3RvbUJyZWFrcyIsIl9jYWxjdWxhdGVMYXllckRhdGE1Iiwic2NhbGUiLCJTQ0FMRV9UWVBFUyIsImN1c3RvbU9yZGluYWwiLCJjdXN0b21QYWxldHRlIiwiaW5pdEN1c3RvbVBhbGV0dGVCeUN1c3RvbVNjYWxlIiwib3JkaW5hbERvbWFpbiIsImNvbG9yQnJlYWtzIiwic2hvd0NvbG9yQ2hhcnQiLCJfY2FsY3VsYXRlTGF5ZXJEYXRhNiIsInNldExheWVyQW5pbWF0aW9uVGltZVVwZGF0ZXIiLCJfcmVmMiIsInJlZHVjZSIsImFjY3UiLCJzZXRGaWx0ZXJBbmltYXRpb25UaW1lVXBkYXRlciIsInNldEZpbHRlclVwZGF0ZXIiLCJzZXRGaWx0ZXJBbmltYXRpb25XaW5kb3dVcGRhdGVyIiwiX3JlZjMiLCJhbmltYXRpb25XaW5kb3ciLCJuZXdGaWx0ZXIiLCJzd2FwXyIsIm5ld1N5bmNUaW1lbGluZU1vZGUiLCJnZXRTeW5jQW5pbWF0aW9uTW9kZSIsInNldFRpbWVGaWx0ZXJUaW1lbGluZU1vZGVVcGRhdGVyIiwiYXBwbHlGaWx0ZXJDb25maWdVcGRhdGVyIiwiX3NlcmlhbGl6ZUZpbHRlciIsImZpbHRlcklkIiwib2xkRmlsdGVyIiwic2VyaWFsaXplZE9sZEZpbHRlciIsInNlcmlhbGl6ZUZpbHRlciIsInNlcmlhbGl6ZWROZXdGaWx0ZXIiLCJzZXRGaWx0ZXIiLCJ2YWx1ZXMiLCJfYWN0aW9uJHZhbHVlSW5kZXgiLCJ2YWx1ZUluZGV4IiwidG9BcnJheSIsImRhdGFzZXRJZHNUb0ZpbHRlciIsIl9sb29wIiwicmVzIiwidiIsIl91cGRhdGVGaWx0ZXJQcm9wIiwiZW5sYXJnZWRGaWx0ZXIiLCJ2aWV3IiwiRklMVEVSX1ZJRVdfVFlQRVMiLCJlbmxhcmdlZCIsInNpZGUiLCJmaWx0ZXJlZERhdGFzZXRzIiwiYXBwbHlGaWx0ZXJzVG9EYXRhc2V0cyIsInVuaXEiLCJmaWx0ZXJXaXRoUExvdCIsInVwZGF0ZUZpbHRlclBsb3QiLCJ1cGRhdGVBbGxMYXllckRvbWFpbkRhdGEiLCJGSUxURVJfVFlQRVMiLCJ0aW1lUmFuZ2UiLCJhZGp1c3RBbmltYXRpb25Db25maWdXaXRoRmlsdGVyIiwiX3VwZGF0ZUZpbHRlckRhdGFJZEF0VmFsdWVJbmRleCIsIl9yZW1vdmVGaWx0ZXJEYXRhSWRBdFZhbHVlSW5kZXgiLCJuZXh0VmFsdWUiLCJnZXREZWZhdWx0RmlsdGVyIiwicmVtb3ZlRmlsdGVyUGxvdCIsIl9pIiwiX2FyciIsIm5leHRWYWwiLCJkb21haW5TdGVwcyIsIm1lcmdlRmlsdGVyRG9tYWluIiwibmV4dEZpbHRlciIsInN0ZXAiLCJhZGp1c3RWYWx1ZVRvRmlsdGVyRG9tYWluIiwiZGF0YXNldElkcyIsIkZJTFRFUl9VUERBVEVSX1BST1BTIiwib2xkRGF0YUlkIiwiZGF0YXNldElkIiwiX2FwcGx5RmlsdGVyRmllbGROYW1lIiwiYXBwbHlGaWx0ZXJGaWVsZE5hbWUiLCJtZXJnZURvbWFpbiIsInVwZGF0ZWRGaWx0ZXIiLCJuZXdEYXRhc2V0IiwiZ3B1Iiwic2V0RmlsdGVyR3B1TW9kZSIsImFzc2lnbkdwdUNoYW5uZWwiLCJsYXllcklkRGlmZmVyZW5jZSIsInhvciIsImxheWVyRGF0YUlkcyIsImxpZCIsIm5ld0RhdGFJZHMiLCJzZXRGaWx0ZXJQbG90VXBkYXRlciIsIl9yZWY0IiwibmV3UHJvcCIsInBpY2tfIiwibWVyZ2VfIiwicGxvdFR5cGUiLCJjaGFydFR5cGUiLCJ5QXhpcyIsIlBMT1RfVFlQRVMiLCJsaW5lQ2hhcnQiLCJoaXN0b2dyYW0iLCJhZGRGaWx0ZXJVcGRhdGVyIiwiY3JlYXRlT3JVcGRhdGVGaWx0ZXJVcGRhdGVyIiwib3JpZ2luYWxJbmRleCIsImluZGV4IiwibGF5ZXJDb2xvclVJQ2hhbmdlVXBkYXRlciIsIl9yZWY1Iiwib2xkVml4Q29uZmlnIiwidG9nZ2xlRmlsdGVyQW5pbWF0aW9uVXBkYXRlciIsImlzRmlsdGVyQW5pbWF0aW9uQ29uZmlnIiwic2V0QW5pbWF0aW9uQ29uZmlnVXBkYXRlciIsImlzU2lkZUZpbHRlciIsImFwcGx5RmlsdGVyQ29uZmlnIiwidG9nZ2xlTGF5ZXJBbmltYXRpb25VcGRhdGVyIiwidG9nZ2xlTGF5ZXJBbmltYXRpb25Db250cm9sVXBkYXRlciIsInVwZGF0ZUZpbHRlckFuaW1hdGlvblNwZWVkVXBkYXRlciIsInVwZGF0ZUxheWVyQW5pbWF0aW9uU3BlZWRVcGRhdGVyIiwiX3JlZjYiLCJzZXRGaWx0ZXJWaWV3VXBkYXRlciIsInNob3VsZFJlc2V0T3RoZXJGaWx0ZXJzVmlldyIsInRvZ2dsZUZpbHRlckZlYXR1cmVVcGRhdGVyIiwiZmVhdHVyZVRvRmlsdGVyVmFsdWUiLCJyZW1vdmVGaWx0ZXJVcGRhdGVyIiwiX3N0YXRlJGZpbHRlcnMkaWR4IiwibmV3RmlsdGVycyIsIm5ld0VkaXRvciIsImdldEZpbHRlcklkSW5GZWF0dXJlIiwiYWRkTGF5ZXJVcGRhdGVyIiwibmV3TGF5ZXJEYXRhIiwiY3JlYXRlTGF5ZXJGcm9tQ29uZmlnIiwid2FybiIsIl9hY3Rpb24kZGF0YXNldElkIiwiZGVmYXVsdERhdGFzZXQiLCJMYXllciIsInJlbW92ZUxheWVyVXBkYXRlciIsIl9yZWY3IiwiaXNGaW5pdGUiLCJsYXllclRvUmVtb3ZlIiwiZmlsdGVyT3V0QnlJZCIsInJlbW92ZUVsZW1lbnRBdEluZGV4IiwicmVvcmRlckxheWVyVXBkYXRlciIsIl9yZWY4Iiwib3JkZXIiLCJkdXBsaWNhdGVMYXllclVwZGF0ZXIiLCJfcmVmOSIsIm9yaWdpbmFsIiwib3JpZ2luYWxMYXllck9yZGVySWR4IiwibmV3TGFiZWwiLCJwb3N0Zml4IiwiZ2VuZXJhdGVIYXNoSWQiLCJMQVlFUl9JRF9MRU5HVEgiLCJuZXdMYXllck9yZGVyIiwiYXJyYXlJbnNlcnQiLCJhZGRFZmZlY3RVcGRhdGVyIiwiX2FjdGlvbiRjb25maWciLCJMSUdIVF9BTkRfU0hBRE9XX0VGRkVDVCIsImVmZmVjdCIsIm5ld0VmZmVjdCIsImNyZWF0ZUVmZmVjdCIsInNldFByb3BzIiwiZml4RWZmZWN0T3JkZXIiLCJyZW1vdmVFZmZlY3RVcGRhdGVyIiwiX3JlZjEwIiwiZWZmZWN0VG9SZW1vdmUiLCJlZmZlY3RJZCIsInJlb3JkZXJFZmZlY3RVcGRhdGVyIiwiX3JlZjExIiwidXBkYXRlRWZmZWN0VXBkYXRlciIsIl9yZWYxMiIsImlkeDIiLCJlZmZlY3RPcmRlcklkIiwibmV3RWZmZWN0cyIsInJlbW92ZURhdGFzZXRVcGRhdGVyIiwiZGF0YXNldEtleSIsIl9zdGF0ZSRkYXRhc2V0cyIsIm5ld0RhdGFzZXRzIiwibGF5ZXJzVG9SZW1vdmUiLCJfaXRlcmF0b3IyIiwiX3N0ZXAyIiwiaW5kZXhPZiIsInJlbW92ZURhdGFzZXRGcm9tSW50ZXJhY3Rpb25Db25maWciLCJfcmVmMTMiLCJfaW50ZXJhY3Rpb25Db25maWciLCJfY29uZmlnJGZpZWxkc1RvU2hvdyIsImZpZWxkcyIsInVwZGF0ZUxheWVyQmxlbmRpbmdVcGRhdGVyIiwidXBkYXRlT3ZlcmxheUJsZW5kaW5nVXBkYXRlciIsInNob3dEYXRhc2V0VGFibGVVcGRhdGVyIiwidXBkYXRlVGFibGVDb2xvclVwZGF0ZXIiLCJ1cGRhdGVEYXRhc2V0UHJvcHNVcGRhdGVyIiwibmV3Q29sb3IiLCJyZXNldE1hcENvbmZpZ1VwZGF0ZXIiLCJpbml0aWFsU3RhdGUiLCJyZWNlaXZlTWFwQ29uZmlnVXBkYXRlciIsIl9yZWYxNCIsIl9yZWYxNCRwYXlsb2FkIiwicGF5bG9hZCIsIl9yZWYxNCRwYXlsb2FkJGNvbmZpZyIsIl9yZWYxNCRwYXlsb2FkJG9wdGlvbiIsIm9wdGlvbnMiLCJ2aXNTdGF0ZSIsImtlZXBFeGlzdGluZ0NvbmZpZyIsIm1lcmdlZFN0YXRlIiwiX2l0ZXJhdG9yMyIsIl9zdGVwMyIsIm1lcmdlciIsImlzVmFsaWRNZXJnZXIiLCJoYXNQcm9wc1RvTWVyZ2UiLCJtZXJnZSIsImdldFByb3BWYWx1ZVRvTWVyZ2VyIiwidG9NZXJnZVByb3AiLCJsYXllckhvdmVyVXBkYXRlciIsImluZm8iLCJpbnRlcmFjdGlvbkNvbmZpZ0NoYW5nZVVwZGF0ZXIiLCJjb250cmFkaWN0IiwiayIsImxheWVyQ2xpY2tVcGRhdGVyIiwicGlubmVkIiwiY2xvbmVEZWVwIiwicGlja2VkIiwibWFwQ2xpY2tVcGRhdGVyIiwibW91c2VNb3ZlVXBkYXRlciIsIl9yZWYxNSIsImV2dCIsInBvaW50IiwibW91c2VQb3NpdGlvbiIsImxuZ0xhdCIsInRvZ2dsZVNwbGl0TWFwVXBkYXRlciIsImNvbXB1dGVTcGxpdE1hcExheWVycyIsImR1cGxpY2F0ZSIsImNsb3NlU3BlY2lmaWNNYXBBdEluZGV4IiwiX3JlZjE2IiwidXBkYXRlVmlzRGF0YVVwZGF0ZXIiLCJjcmVhdGVEYXRhc2V0VGFza3MiLCJub3RpZmljYXRpb25UYXNrcyIsIl9yZWYxNyIsImRhdGFzZXRJbmRleCIsIl9yZWYxNyRpbmZvIiwicmVzdCIsInRhc2siLCJjcmVhdGVOZXdEYXRhRW50cnkiLCJhZGROb3RpZmljYXRpb24iLCJlcnJvck5vdGlmaWNhdGlvbiIsIm1lc3NhZ2UiLCJkYXRhc2V0c0FsbFNldHRsZWRUYXNrIiwiYWxsU2V0dGxlZCIsInJlc3VsdHMiLCJjcmVhdGVOZXdEYXRhc2V0U3VjY2VzcyIsImFkZFRvTWFwT3B0aW9ucyIsInNldExvYWRpbmdJbmRpY2F0b3JVcGRhdGVyIiwicGF5bG9hZF8iLCJjaGFuZ2UiLCJ3aXRoVGFzayIsImNyZWF0ZU5ld0RhdGFzZXRTdWNjZXNzVXBkYXRlciIsIl9hY3Rpb24kcGF5bG9hZCIsIm5ld0RhdGFFbnRyaWVzIiwic3RhdHVzIiwiQUNUSU9OX1RBU0siLCJyZWFzb24iLCJtZXJnZURhdGFzZXRzQnlPcmRlciIsImxheWVyTWVyZ2VycyIsIm0iLCJ3YWl0Rm9yTGF5ZXJEYXRhIiwiZGF0YXNldE1lcmdlcnMiLCJwb3N0TWVyZ2VyUGF5bG9hZCIsImFwcGx5TWVyZ2Vyc1VwZGF0ZXIiLCJtZXJnZVN0YXRlUmVzdWx0IiwibWVyZ2VTdGF0ZUZyb21NZXJnZXJzIiwiYWxsTWVyZ2VkIiwicG9zdE1lcmdlVXBkYXRlciIsImZEYXRhSWQiLCJkYXRhc2V0RmlsdGVyZWQiLCJkYXRhRW1wdHkiLCJuZXdMYXllcnMiLCJhdXRvQ3JlYXRlTGF5ZXJzIiwiYWRkRGVmYXVsdExheWVycyIsInRvb2x0aXBGaWVsZHMiLCJhdXRvQ3JlYXRlVG9vbHRpcHMiLCJhZGREZWZhdWx0VG9vbHRpcHMiLCJ1cGRhdGVkRGF0YXNldHMiLCJjZW50ZXJNYXAiLCJib3VuZHMiLCJmaW5kTWFwQm91bmRzIiwiZml0Qm91bmRzVGFzayIsImZpdE1hcEJvdW5kcyIsInJlbmFtZURhdGFzZXRVcGRhdGVyIiwiQUxMT1dFRF9VUERBVEVfREFUQVNFVF9QUk9QUyIsInZhbGlkYXRlRGF0YXNldFVwZGF0ZVByb3BzIiwidmFsaWRhdGVkUHJvcHMiLCJlbnRyaWVzIiwiYWNjIiwiZW50cnkiLCJfZW50cnkiLCJfc2xpY2VkVG9BcnJheTIiLCJpc1JnYkNvbG9yIiwiaXNQbGFpbk9iamVjdCIsImRlZXBtZXJnZSIsImV4aXN0aW5nIiwiY29weVRhYmxlQW5kVXBkYXRlIiwiX3N0YXRlJHNwbGl0TWFwcyRpbmRlIiwiaW5kZXhUb1JldHJpZXZlIiwibWFwTGF5ZXJzIiwibG9hZEZpbGVzVXBkYXRlciIsImZpbGVzIiwiX2FjdGlvbiRvbkZpbmlzaCIsIm9uRmluaXNoIiwibG9hZEZpbGVzU3VjY2VzcyIsImluaXRpYWxGaWxlTG9hZGluZ1Byb2dyZXNzIiwiZmlsZUNhY2hlIiwiZmlsZXNUb0xvYWQiLCJsb2FkTmV4dEZpbGVVcGRhdGVyIiwibG9hZEZpbGVTdGVwU3VjY2Vzc1VwZGF0ZXIiLCJmaWxlTmFtZSIsIl9zdGF0ZSRmaWxlTG9hZGluZyIsInN0YXRlV2l0aFByb2dyZXNzIiwidXBkYXRlRmlsZUxvYWRpbmdQcm9ncmVzc1VwZGF0ZXIiLCJwcm9ncmVzcyIsInBlcmNlbnQiLCJzdGF0ZVdpdGhDYWNoZSIsIkRFTEFZX1RBU0siLCJsb2FkTmV4dEZpbGUiLCJfZmlsZXNUb0xvYWQiLCJfdG9BcnJheTIiLCJmaWxlIiwicmVtYWluaW5nRmlsZXNUb0xvYWQiLCJtYWtlTG9hZEZpbGVUYXNrIiwiTE9BRF9GSUxFX1RBU0siLCJiaW1hcCIsImdlbiIsIm5leHRGaWxlQmF0Y2giLCJwcm9jZXNzRmlsZUNvbnRlbnQiLCJjb250ZW50IiwibG9hZEZpbGVzRXJyIiwicHJvY2Vzc0ZpbGVDb250ZW50VXBkYXRlciIsIl9hY3Rpb24kcGF5bG9hZDIiLCJQUk9DRVNTX0ZJTEVfREFUQSIsImxvYWRGaWxlU3RlcFN1Y2Nlc3MiLCJwYXJzZVByb2dyZXNzIiwicHJldlByb2dyZXNzIiwibmV4dEZpbGVCYXRjaFVwZGF0ZXIiLCJfcmVmMTgiLCJfYWNjdW11bGF0ZWQkZGF0YSIsIl9yZWYxOCRwYXlsb2FkIiwiYWNjdW11bGF0ZWQiLCJnZXRBcHBsaWNhdGlvbkNvbmZpZyIsInVzZUFycm93UHJvZ3Jlc3NpdmVMb2FkaW5nIiwiZW5kc1dpdGgiLCJkYXRhIiwiVU5XUkFQX1RBU0siLCJfcmVmMTkiLCJsb2FkRmlsZXNFcnJVcGRhdGVyIiwiX3JlZjIwIiwiX3N0YXRlJGZpbGVMb2FkaW5nMiIsImFwcGx5Q1BVRmlsdGVyVXBkYXRlciIsIl9yZWYyMSIsImRhdGFJZHMiLCJmaWx0ZXJEYXRhc2V0Q1BVIiwic2V0TWFwSW5mb1VwZGF0ZXIiLCJlbXB0eSIsImRlZmF1bHRMYXllcnMiLCJmb3VuZExheWVycyIsImZpbmREZWZhdWx0TGF5ZXIiLCJnZXRMYXllck9yZGVyRnJvbUxheWVycyIsImZpbmRGaWVsZHNUb1Nob3ciLCJtZXJnZWQiLCJfcmVmMjMiLCJmaXhlZERvbWFpbiIsIl9jYWxjdWxhdGVMYXllckRhdGE3IiwiX3N0YXRlJGZpbHRlcnMiLCJhbmltYXRhYmxlTGF5ZXJzIiwibGF5ZXJEb21haW5zIiwibWVyZ2VkRG9tYWluIiwibWVyZ2VUaW1lRG9tYWlucyIsImdldFRpbWVXaWRnZXRUaXRsZUZvcm1hdHRlciIsIm1lcmdlZFRpbWVTdGVwcyIsInNvcnQiLCJCQVNFX1NQRUVEIiwiRlBTIiwic3luY2VkRmlsdGVyIiwibmV3QW5pbWF0aW9uRG9tYWluIiwiaXNJblJhbmdlIiwic2V0RWRpdG9yTW9kZVVwZGF0ZXIiLCJfcmVmMjQiLCJzZXRGZWF0dXJlc1VwZGF0ZXIiLCJfcmVmMjUiLCJfbGFzdEZlYXR1cmUkcHJvcGVydGkiLCJfcmVmMjUkZmVhdHVyZXMiLCJsYXN0RmVhdHVyZSIsInByb3BlcnRpZXMiLCJpc0Nsb3NlZCIsIkVESVQiLCJmZWF0dXJlIiwiYmJveCIsImZlYXR1cmVWYWx1ZSIsImZpbHRlcklkeCIsImZpbCIsInNldFNlbGVjdGVkRmVhdHVyZVVwZGF0ZXIiLCJfcmVmMjYiLCJzZWxlY3Rpb25Db250ZXh0IiwiZGVsZXRlRmVhdHVyZVVwZGF0ZXIiLCJfcmVmMjciLCJzZXRQb2x5Z29uRmlsdGVyTGF5ZXJVcGRhdGVyIiwibm9uZUZpbHRlckZlYXR1cmUiLCJfZmlsdGVyJGxheWVySWQiLCJpc0xheWVySW5jbHVkZWQiLCJnZW5lcmF0ZVBvbHlnb25GaWx0ZXIiLCJzb3J0VGFibGVDb2x1bW5VcGRhdGVyIiwiX3JlZjI4IiwiY29sdW1uIiwic29ydE1vZGUiLCJjdXJyZW50TW9kZSIsIlNPUlRfT1JERVIiLCJBU0NFTkRJTkciLCJzb3J0ZWQiLCJzb3J0RGF0YXNldEJ5Q29sdW1uIiwicGluVGFibGVDb2x1bW5VcGRhdGVyIiwiX3JlZjI5IiwicGluVGFibGVDb2x1bW5zIiwiY29weVRhYmxlQ29sdW1uVXBkYXRlciIsIl9yZWYzMCIsImZpZWxkSWR4IiwidGV4dCIsImRhdGFDb250YWluZXIiLCJyb3ciLCJwYXJzZUZpZWxkVmFsdWUiLCJ2YWx1ZUF0Iiwiam9pbiIsImNvcHkiLCJzZXRDb2x1bW5EaXNwbGF5Rm9ybWF0VXBkYXRlciIsIl9yZWYzMSIsImZvcm1hdHMiLCJkaXNwbGF5Rm9ybWF0IiwiX2xheWVyJGNvbmZpZyIsImNvbG9yRmllbGQiLCJ0b2dnbGVFZGl0b3JWaXNpYmlsaXR5VXBkYXRlciIsInNldEZpbHRlckFuaW1hdGlvblRpbWVDb25maWdVcGRhdGVyIiwiX3JlZjMyIiwidXBkYXRlcyIsImNoZWNrVGltZUNvbmZpZ0FyZ3MiLCJhbGxvd2VkIiwic2V0TGF5ZXJBbmltYXRpb25UaW1lQ29uZmlnVXBkYXRlciIsIl9yZWYzMyIsImxheWVyRmlsdGVyZWRJdGVtc0NoYW5nZVVwZGF0ZXIiLCJfbGF5ZXIkZmlsdGVyZWRJdGVtQ28iLCJldmVudCIsImRlY2tnbExheWVySWQiLCJjb3VudCIsImZpbHRlcmVkSXRlbUNvdW50IiwiX25ld1N0YXRlJGFuaW1hdGlvbkNvIiwiX25ld1N0YXRlJGFuaW1hdGlvbkNvMiIsIl9hY3Rpb24kZW5hYmxlIiwiaW50ZXJ2YWxCYXNlZEFuaW1hdGlvbkxheWVycyIsImdldEludGVydmFsQmFzZWRBbmltYXRpb25MYXllcnMiLCJoYXNJbnRlcnZhbEJhc2VkQW5pbWF0aW9uTGF5ZXIiLCJCb29sZWFuIiwibmV3RmlsdGVyRG9tYWluIiwiQU5JTUFUSU9OX1dJTkRPVyIsImludGVydmFsIiwiYWRqdXN0VGltZUZpbHRlckludGVydmFsIiwibmV3RmlsdGVyVmFsdWUiLCJzeW5jVGltZWxpbmVNb2RlIiwiU1lOQ19USU1FTElORV9NT0RFUyIsImVuZCIsInZhbGlkYXRlU3luY0FuaW1hdGlvbk1vZGUiLCJfcmVmMzQiLCJNYXRoIiwibWF4IiwidGltZWxpbmVWYWx1ZSIsImdldFRpbWVsaW5lVmFsdWVGcm9tRmlsdGVyIiwic25hcFRvTWFya3MiLCJmcmVlIiwiX2ZpbHRlciRzeW5jVGltZWxpbmVNIiwibmV3TW9kZSIsInN0YXJ0IiwiaW50ZXJ2YWxJbmRleCIsImN1cnJlbnRJbmRleCIsIm1ldGEiLCJ0YXJnZXRUaW1lSW50ZXJ2YWwiLCJuZXdJbmRleCIsIlRJTUVfSU5URVJWQUxTX09SREVSRUQiLCJoZXhUaWxlSW50ZXJ2YWwiLCJMYXllclRvRmlsdGVyVGltZUludGVydmFsIiwiZ2V0RGVmYXVsdFRpbWVGb3JtYXQiLCJ1cGRhdGVkUGxvdFR5cGUiLCJ1cGRhdGVUaW1lRmlsdGVyUGxvdFR5cGUiLCJhZGp1c3RWYWx1ZVRvQW5pbWF0aW9uV2luZG93IiwiZGVmYXVsdFJlcGxhY2VQYXJlbnREYXRhc2V0SWRzIiwiZGF0YUlkVG9SZXBsYWNlIiwiX3ZhbHVlJGNvbmZpZyIsIl92YWx1ZSRjb25maWcyIiwicmVwbGFjZWQiLCJpc09iamVjdCIsImZpbmRDaGlsZERhdGFzZXRJZHMiLCJfdmFsdWUkbmV3RGF0YXNldCIsImNoaWxkRGF0YUlkcyIsIm1vdmVWYWx1ZVRvQmVNZXJnZWQiLCJwcm9wVmFsdWVzIiwiX3JlZjM2Iiwic2F2ZVVubWVyZ2VkIiwic3RhdGVSZW1vdmVkIiwicHJvcFZhbHVlIiwicCIsInRvQmVNZXJnZWQiLCJyZXBsYWNlRGF0YXNldEFuZERlcHMiLCJkYXRhSWRUb1VzZSIsImNvbXBvc2VfIiwiYXBwbHlfIiwicmVwbGFjZURhdGFzZXREZXBzSW5TdGF0ZSIsInByZXBhcmVTdGF0ZUZvckRhdGFzZXRSZXBsYWNlIiwiX25leHRTdGF0ZSRsYXllclRvQmVNIiwic2VyaWFsaXplZFN0YXRlIiwic2VyaWFsaXplVmlzU3RhdGUiLCJwcmVzZXJ2ZUxheWVyT3JkZXIiLCJwcmVzZXJ2ZURhdGFzZXRPcmRlciIsIl9zZXJpYWxpemVkU3RhdGUkc3BsaSIsIl9yZWYzNyIsImFjY3VTdGF0ZSIsIl9yZWYzOCIsInJlcGxhY2VQYXJlbnREYXRhc2V0SWRzIiwiZ2V0Q2hpbGREYXRhc2V0SWRzIiwicHJlc2VydmVPcmRlciIsInRvTWVyZ2VQcm9wcyIsInNhdmVkUHJvcHMiLCJyZXBsYWNlZFN0YXRlIiwiX3JlcGxhY2VkU3RhdGUkbWVyZ2VyIiwibWVyZ2VyT3B0aW9ucyIsInJlcGxhY2VkSXRlbSIsInJlcGxhY2VQcm9wVmFsdWVJblN0YXRlIiwiaXRlbSIsIl9yZWYzOSIsImNoaWxkRGF0YUlkIl0sInNvdXJjZXMiOlsiLi4vc3JjL3Zpcy1zdGF0ZS11cGRhdGVycy50cyJdLCJzb3VyY2VzQ29udGVudCI6WyIvLyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogTUlUXG4vLyBDb3B5cmlnaHQgY29udHJpYnV0b3JzIHRvIHRoZSBrZXBsZXIuZ2wgcHJvamVjdFxuXG5pbXBvcnQgYmJveCBmcm9tICdAdHVyZi9iYm94JztcbmltcG9ydCBjb3B5IGZyb20gJ2NvcHktdG8tY2xpcGJvYXJkJztcbmltcG9ydCBkZWVwbWVyZ2UgZnJvbSAnZGVlcG1lcmdlJztcbmltcG9ydCB7Y29uc29sZSBhcyBDb25zb2xlfSBmcm9tICdnbG9iYWwvd2luZG93JztcbmltcG9ydCBjbG9uZURlZXAgZnJvbSAnbG9kYXNoL2Nsb25lRGVlcCc7XG5pbXBvcnQgZ2V0IGZyb20gJ2xvZGFzaC9nZXQnO1xuaW1wb3J0IGlzRXF1YWwgZnJvbSAnbG9kYXNoL2lzRXF1YWwnO1xuaW1wb3J0IHBpY2sgZnJvbSAnbG9kYXNoL3BpY2snO1xuaW1wb3J0IHVuaXEgZnJvbSAnbG9kYXNoL3VuaXEnO1xuaW1wb3J0IHhvciBmcm9tICdsb2Rhc2gveG9yJztcbmltcG9ydCBUYXNrLCB7ZGlzYWJsZVN0YWNrQ2FwdHVyaW5nLCB3aXRoVGFza30gZnJvbSAncmVhY3QtcGFsbS90YXNrcyc7XG4vLyBUYXNrc1xuaW1wb3J0IHtcbiAgREVMQVlfVEFTSyxcbiAgQUNUSU9OX1RBU0ssXG4gIExPQURfRklMRV9UQVNLLFxuICBQUk9DRVNTX0ZJTEVfREFUQSxcbiAgVU5XUkFQX1RBU0tcbn0gZnJvbSAnQGtlcGxlci5nbC90YXNrcyc7XG4vLyBBY3Rpb25zXG5pbXBvcnQge1xuICBhZGROb3RpZmljYXRpb24sXG4gIEFjdGlvblR5cGVzLFxuICBDcmVhdGVOZXdEYXRhc2V0U3VjY2Vzc1BheWxvYWQsXG4gIE1hcFN0YXRlQWN0aW9ucyxcbiAgUmVjZWl2ZU1hcENvbmZpZ1BheWxvYWQsXG4gIFZpc1N0YXRlQWN0aW9ucyxcbiAgYXBwbHlMYXllckNvbmZpZyxcbiAgY3JlYXRlTmV3RGF0YXNldFN1Y2Nlc3MsXG4gIGxheWVyQ29uZmlnQ2hhbmdlLFxuICBsYXllclR5cGVDaGFuZ2UsXG4gIGxheWVyVmlzQ29uZmlnQ2hhbmdlLFxuICBsYXllclZpc3VhbENoYW5uZWxDb25maWdDaGFuZ2UsXG4gIGxvYWRGaWxlU3RlcFN1Y2Nlc3MsXG4gIGxvYWRGaWxlc0VycixcbiAgbG9hZEZpbGVzU3VjY2VzcyxcbiAgbG9hZE5leHRGaWxlLFxuICBuZXh0RmlsZUJhdGNoLFxuICBzZXRGaWx0ZXIsXG4gIHByb2Nlc3NGaWxlQ29udGVudCxcbiAgZml0Qm91bmRzIGFzIGZpdE1hcEJvdW5kcyxcbiAgdG9nZ2xlTGF5ZXJGb3JNYXAsXG4gIGFwcGx5RmlsdGVyQ29uZmlnLFxuICBTZXRMb2FkaW5nSW5kaWNhdG9yUGF5bG9hZFxufSBmcm9tICdAa2VwbGVyLmdsL2FjdGlvbnMnO1xuXG4vLyBVdGlsc1xuaW1wb3J0IHtcbiAgRklMVEVSX1VQREFURVJfUFJPUFMsXG4gIGFkZE5ld0xheWVyc1RvU3BsaXRNYXAsXG4gIHNuYXBUb01hcmtzLFxuICBhcHBseUZpbHRlckZpZWxkTmFtZSxcbiAgYXBwbHlGaWx0ZXJzVG9EYXRhc2V0cyxcbiAgYXJyYXlJbnNlcnQsXG4gIGNvbXB1dGVTcGxpdE1hcExheWVycyxcbiAgYWRqdXN0VmFsdWVUb0ZpbHRlckRvbWFpbixcbiAgZXJyb3JOb3RpZmljYXRpb24sXG4gIGZlYXR1cmVUb0ZpbHRlclZhbHVlLFxuICBmaWx0ZXJEYXRhc2V0Q1BVLFxuICBnZW5lcmF0ZVBvbHlnb25GaWx0ZXIsXG4gIGdldERlZmF1bHRGaWx0ZXIsXG4gIGdldEZpbHRlcklkSW5GZWF0dXJlLFxuICBnZXRUaW1lV2lkZ2V0VGl0bGVGb3JtYXR0ZXIsXG4gIGlzSW5SYW5nZSxcbiAgaXNPYmplY3QsXG4gIGlzUGxhaW5PYmplY3QsXG4gIGlzUmdiQ29sb3IsXG4gIHBhcnNlRmllbGRWYWx1ZSxcbiAgcmVtb3ZlTGF5ZXJGcm9tU3BsaXRNYXBzLFxuICBzZXQsXG4gIHVwZGF0ZUZpbHRlclBsb3QsXG4gIHJlbW92ZUZpbHRlclBsb3QsXG4gIGlzTGF5ZXJBbmltYXRhYmxlLFxuICBpc1NpZGVGaWx0ZXIsXG4gIGdldEFwcGxpY2F0aW9uQ29uZmlnXG59IGZyb20gJ0BrZXBsZXIuZ2wvdXRpbHMnO1xuaW1wb3J0IHtnZW5lcmF0ZUhhc2hJZCwgdG9BcnJheX0gZnJvbSAnQGtlcGxlci5nbC9jb21tb24tdXRpbHMnO1xuLy8gTWVyZ2Vyc1xuaW1wb3J0IHtcbiAgQU5JTUFUSU9OX1dJTkRPVyxcbiAgQkFTRV9TUEVFRCxcbiAgQ09NUEFSRV9UWVBFUyxcbiAgREVGQVVMVF9URVhUX0xBQkVMLFxuICBFRElUT1JfTU9ERVMsXG4gIEZJTFRFUl9UWVBFUyxcbiAgRklMVEVSX1ZJRVdfVFlQRVMsXG4gIEZQUyxcbiAgTElHSFRfQU5EX1NIQURPV19FRkZFQ1QsXG4gIE1BWF9ERUZBVUxUX1RPT0xUSVBTLFxuICBQTE9UX1RZUEVTLFxuICBTT1JUX09SREVSLFxuICBTWU5DX1RJTUVMSU5FX01PREVTLFxuICBDSEFOTkVMX1NDQUxFUyxcbiAgU0NBTEVfVFlQRVNcbn0gZnJvbSAnQGtlcGxlci5nbC9jb25zdGFudHMnO1xuaW1wb3J0IHtMQVlFUl9JRF9MRU5HVEgsIExheWVyLCBMYXllckNsYXNzZXN9IGZyb20gJ0BrZXBsZXIuZ2wvbGF5ZXJzJztcbmltcG9ydCB7XG4gIGFwcGx5XyxcbiAgY29tcG9zZV8sXG4gIGZpbHRlck91dEJ5SWQsXG4gIG1lcmdlXyxcbiAgcGF5bG9hZF8sXG4gIHBpY2tfLFxuICByZW1vdmVFbGVtZW50QXRJbmRleCxcbiAgc3dhcF9cbn0gZnJvbSAnLi9jb21wb3Nlci1oZWxwZXJzJztcbmltcG9ydCB7aXNWYWxpZE1lcmdlciwgbWVyZ2VTdGF0ZUZyb21NZXJnZXJzfSBmcm9tICcuL21lcmdlci1oYW5kbGVyJztcbmltcG9ydCB7XG4gIFZJU19TVEFURV9NRVJHRVJTLFxuICBjcmVhdGVMYXllckZyb21Db25maWcsXG4gIHBhcnNlTGF5ZXJDb25maWcsXG4gIHNlcmlhbGl6ZUZpbHRlcixcbiAgc2VyaWFsaXplTGF5ZXIsXG4gIHNlcmlhbGl6ZVZpc1N0YXRlLFxuICB2YWxpZGF0ZUxheWVyV2l0aERhdGFcbn0gZnJvbSAnLi92aXMtc3RhdGUtbWVyZ2VyJztcblxuaW1wb3J0IEtlcGxlckdMU2NoZW1hLCB7TWVyZ2VyLCBQb3N0TWVyZ2VyUGF5bG9hZCwgVmlzU3RhdGV9IGZyb20gJ0BrZXBsZXIuZ2wvc2NoZW1hcyc7XG5cbmltcG9ydCB7XG4gIEZpbHRlcixcbiAgSW50ZXJhY3Rpb25Db25maWcsXG4gIEFuaW1hdGlvbkNvbmZpZyxcbiAgRmlsdGVyQW5pbWF0aW9uQ29uZmlnLFxuICBFZGl0b3IsXG4gIEZpZWxkLFxuICBUaW1lUmFuZ2VGaWx0ZXJcbn0gZnJvbSAnQGtlcGxlci5nbC90eXBlcyc7XG5pbXBvcnQge0xvYWRlcn0gZnJvbSAnQGxvYWRlcnMuZ2wvbG9hZGVyLXV0aWxzJztcblxuaW1wb3J0IHtcbiAgRGF0YXNldHMsXG4gIGFzc2lnbkdwdUNoYW5uZWwsXG4gIGNvcHlUYWJsZUFuZFVwZGF0ZSxcbiAgY3JlYXRlTmV3RGF0YUVudHJ5LFxuICBwaW5UYWJsZUNvbHVtbnMsXG4gIHNldEZpbHRlckdwdU1vZGUsXG4gIHNvcnREYXRhc2V0QnlDb2x1bW5cbn0gZnJvbSAnQGtlcGxlci5nbC90YWJsZSc7XG5pbXBvcnQge2ZpbmRGaWVsZHNUb1Nob3d9IGZyb20gJy4vaW50ZXJhY3Rpb24tdXRpbHMnO1xuaW1wb3J0IHtjYWxjdWxhdGVMYXllckRhdGEsIGZpbmREZWZhdWx0TGF5ZXIsIGdldExheWVyT3JkZXJGcm9tTGF5ZXJzfSBmcm9tICcuL2xheWVyLXV0aWxzJztcbmltcG9ydCB7Z2V0UHJvcFZhbHVlVG9NZXJnZXIsIGhhc1Byb3BzVG9NZXJnZX0gZnJvbSAnLi9tZXJnZXItaGFuZGxlcic7XG5pbXBvcnQge21lcmdlRGF0YXNldHNCeU9yZGVyfSBmcm9tICcuL3Zpcy1zdGF0ZS1tZXJnZXInO1xuaW1wb3J0IHtcbiAgZml4RWZmZWN0T3JkZXIsXG4gIGdldEFuaW1hdGFibGVWaXNpYmxlTGF5ZXJzLFxuICBnZXRJbnRlcnZhbEJhc2VkQW5pbWF0aW9uTGF5ZXJzLFxuICBtZXJnZVRpbWVEb21haW5zLFxuICBhZGp1c3RWYWx1ZVRvQW5pbWF0aW9uV2luZG93LFxuICB1cGRhdGVUaW1lRmlsdGVyUGxvdFR5cGUsXG4gIGdldERlZmF1bHRUaW1lRm9ybWF0LFxuICBMYXllclRvRmlsdGVyVGltZUludGVydmFsLFxuICBUSU1FX0lOVEVSVkFMU19PUkRFUkVELFxuICBtZXJnZUZpbHRlckRvbWFpbixcbiAgaW5pdEN1c3RvbVBhbGV0dGVCeUN1c3RvbVNjYWxlXG59IGZyb20gJ0BrZXBsZXIuZ2wvdXRpbHMnO1xuaW1wb3J0IHtjcmVhdGVFZmZlY3R9IGZyb20gJ0BrZXBsZXIuZ2wvZWZmZWN0cyc7XG5pbXBvcnQge1BheWxvYWRBY3Rpb259IGZyb20gJ0ByZWR1eGpzL3Rvb2xraXQnO1xuXG5pbXBvcnQge2ZpbmRNYXBCb3VuZHN9IGZyb20gJy4vZGF0YS11dGlscyc7XG5cbi8vIHJlYWN0LXBhbG1cbi8vIGRpc2FibGUgY2FwdHVyZSBleGNlcHRpb24gZm9yIHJlYWN0LXBhbG0gY2FsbCB0byB3aXRoVGFza1xuZGlzYWJsZVN0YWNrQ2FwdHVyaW5nKCk7XG5cbi8qKlxuICogVXBkYXRlcnMgZm9yIGB2aXNTdGF0ZWAgcmVkdWNlci4gQ2FuIGJlIHVzZWQgaW4geW91ciByb290IHJlZHVjZXIgdG8gZGlyZWN0bHkgbW9kaWZ5IGtlcGxlci5nbCdzIHN0YXRlLlxuICogUmVhZCBtb3JlIGFib3V0IFtVc2luZyB1cGRhdGVyc10oLi4vYWR2YW5jZWQtdXNhZ2UvdXNpbmctdXBkYXRlcnMubWQpXG4gKlxuICogQHB1YmxpY1xuICogQGV4YW1wbGVcbiAqXG4gKiBpbXBvcnQga2VwbGVyR2xSZWR1Y2VyLCB7dmlzU3RhdGVVcGRhdGVyc30gZnJvbSAna2VwbGVyLmdsL3JlZHVjZXJzJztcbiAqIC8vIFJvb3QgUmVkdWNlclxuICogY29uc3QgcmVkdWNlcnMgPSBjb21iaW5lUmVkdWNlcnMoe1xuICogIGtlcGxlckdsOiBrZXBsZXJHbFJlZHVjZXIsXG4gKiAgYXBwOiBhcHBSZWR1Y2VyXG4gKiB9KTtcbiAqXG4gKiBjb25zdCBjb21wb3NlZFJlZHVjZXIgPSAoc3RhdGUsIGFjdGlvbikgPT4ge1xuICogIHN3aXRjaCAoYWN0aW9uLnR5cGUpIHtcbiAqICAgIGNhc2UgJ0NMSUNLX0JVVFRPTic6XG4gKiAgICAgIHJldHVybiB7XG4gKiAgICAgICAgLi4uc3RhdGUsXG4gKiAgICAgICAga2VwbGVyR2w6IHtcbiAqICAgICAgICAgIC4uLnN0YXRlLmtlcGxlckdsLFxuICogICAgICAgICAgZm9vOiB7XG4gKiAgICAgICAgICAgICAuLi5zdGF0ZS5rZXBsZXJHbC5mb28sXG4gKiAgICAgICAgICAgICB2aXNTdGF0ZTogdmlzU3RhdGVVcGRhdGVycy5lbmxhcmdlRmlsdGVyVXBkYXRlcihcbiAqICAgICAgICAgICAgICAgc3RhdGUua2VwbGVyR2wuZm9vLnZpc1N0YXRlLFxuICogICAgICAgICAgICAgICB7aWR4OiAwfVxuICogICAgICAgICAgICAgKVxuICogICAgICAgICAgfVxuICogICAgICAgIH1cbiAqICAgICAgfTtcbiAqICB9XG4gKiAgcmV0dXJuIHJlZHVjZXJzKHN0YXRlLCBhY3Rpb24pO1xuICogfTtcbiAqXG4gKiBleHBvcnQgZGVmYXVsdCBjb21wb3NlZFJlZHVjZXI7XG4gKi9cbi8qIGVzbGludC1kaXNhYmxlIEB0eXBlc2NyaXB0LWVzbGludC9uby11bnVzZWQtdmFycyAqL1xuLy8gQHRzLWlnbm9yZVxuY29uc3QgdmlzU3RhdGVVcGRhdGVycyA9IG51bGw7XG4vKiBlc2xpbnQtZW5hYmxlIEB0eXBlc2NyaXB0LWVzbGludC9uby11bnVzZWQtdmFycyAqL1xuXG5leHBvcnQgY29uc3QgZGVmYXVsdEludGVyYWN0aW9uQ29uZmlnOiBJbnRlcmFjdGlvbkNvbmZpZyA9IHtcbiAgdG9vbHRpcDoge1xuICAgIGlkOiAndG9vbHRpcCcsXG4gICAgbGFiZWw6ICdpbnRlcmFjdGlvbnMudG9vbHRpcCcsXG4gICAgZW5hYmxlZDogdHJ1ZSxcbiAgICBjb25maWc6IHtcbiAgICAgIGZpZWxkc1RvU2hvdzoge30sXG4gICAgICBjb21wYXJlTW9kZTogZmFsc2UsXG4gICAgICBjb21wYXJlVHlwZTogQ09NUEFSRV9UWVBFUy5BQlNPTFVURVxuICAgIH1cbiAgfSxcbiAgZ2VvY29kZXI6IHtcbiAgICBpZDogJ2dlb2NvZGVyJyxcbiAgICBsYWJlbDogJ2ludGVyYWN0aW9ucy5nZW9jb2RlcicsXG4gICAgZW5hYmxlZDogZmFsc2UsXG4gICAgcG9zaXRpb246IG51bGxcbiAgfSxcbiAgYnJ1c2g6IHtcbiAgICBpZDogJ2JydXNoJyxcbiAgICBsYWJlbDogJ2ludGVyYWN0aW9ucy5icnVzaCcsXG4gICAgZW5hYmxlZDogZmFsc2UsXG4gICAgY29uZmlnOiB7XG4gICAgICAvLyBzaXplIGlzIGluIGttXG4gICAgICBzaXplOiAwLjVcbiAgICB9XG4gIH0sXG4gIGNvb3JkaW5hdGU6IHtcbiAgICBpZDogJ2Nvb3JkaW5hdGUnLFxuICAgIGxhYmVsOiAnaW50ZXJhY3Rpb25zLmNvb3JkaW5hdGUnLFxuICAgIGVuYWJsZWQ6IGZhbHNlLFxuICAgIHBvc2l0aW9uOiBudWxsXG4gIH1cbn07XG5cbmV4cG9ydCBjb25zdCBERUZBVUxUX0FOSU1BVElPTl9DT05GSUc6IEFuaW1hdGlvbkNvbmZpZyA9IHtcbiAgZG9tYWluOiBudWxsLFxuICBjdXJyZW50VGltZTogbnVsbCxcbiAgc3BlZWQ6IDEsXG4gIGlzQW5pbWF0aW5nOiBmYWxzZSxcbiAgdGltZVN0ZXBzOiBudWxsLFxuICB0aW1lRm9ybWF0OiBudWxsLFxuICB0aW1lem9uZTogbnVsbCxcbiAgZGVmYXVsdFRpbWVGb3JtYXQ6IG51bGwsXG4gIGhpZGVDb250cm9sOiBmYWxzZSxcbiAgZHVyYXRpb246IG51bGxcbn07XG5cbmV4cG9ydCBjb25zdCBERUZBVUxUX0VESVRPUjogRWRpdG9yID0ge1xuICBtb2RlOiBFRElUT1JfTU9ERVMuRFJBV19QT0xZR09OLFxuICBmZWF0dXJlczogW10sXG4gIHNlbGVjdGVkRmVhdHVyZTogbnVsbCxcbiAgdmlzaWJsZTogdHJ1ZVxufTtcblxuLyoqXG4gKiBEZWZhdWx0IGluaXRpYWwgYHZpc1N0YXRlYFxuICogQG1lbWJlcm9mIHZpc1N0YXRlVXBkYXRlcnNcbiAqIEBjb25zdGFudFxuICogQHB1YmxpY1xuICovXG5leHBvcnQgY29uc3QgSU5JVElBTF9WSVNfU1RBVEU6IFZpc1N0YXRlID0ge1xuICAvLyBtYXAgaW5mb1xuICBtYXBJbmZvOiB7XG4gICAgdGl0bGU6ICcnLFxuICAgIGRlc2NyaXB0aW9uOiAnJ1xuICB9LFxuICAvLyBsYXllcnNcbiAgbGF5ZXJzOiBbXSxcbiAgbGF5ZXJEYXRhOiBbXSxcbiAgbGF5ZXJUb0JlTWVyZ2VkOiBbXSxcbiAgbGF5ZXJPcmRlcjogW10sXG5cbiAgLy8gZmlsdGVyc1xuICBmaWx0ZXJzOiBbXSxcbiAgZmlsdGVyVG9CZU1lcmdlZDogW10sXG5cbiAgLy8gYSBjb2xsZWN0aW9uIG9mIG11bHRpcGxlIGRhdGFzZXRcbiAgZGF0YXNldHM6IHt9LFxuICBlZGl0aW5nRGF0YXNldDogdW5kZWZpbmVkLFxuXG4gIC8vIGVmZmVjdHNcbiAgZWZmZWN0czogW10sXG4gIGVmZmVjdE9yZGVyOiBbXSxcblxuICBpbnRlcmFjdGlvbkNvbmZpZzogZGVmYXVsdEludGVyYWN0aW9uQ29uZmlnLFxuICBpbnRlcmFjdGlvblRvQmVNZXJnZWQ6IHt9LFxuXG4gIGxheWVyQmxlbmRpbmc6ICdub3JtYWwnLFxuICBvdmVybGF5QmxlbmRpbmc6ICdub3JtYWwnLFxuICBob3ZlckluZm86IHVuZGVmaW5lZCxcbiAgY2xpY2tlZDogdW5kZWZpbmVkLFxuICBtb3VzZVBvczoge30sXG4gIG1heERlZmF1bHRUb29sdGlwczogTUFYX0RFRkFVTFRfVE9PTFRJUFMsXG5cbiAgLy8gdGhpcyBpcyB1c2VkIHdoZW4gdXNlciBzcGxpdCBtYXBzXG4gIHNwbGl0TWFwczogW1xuICAgIC8vIHRoaXMgd2lsbCBjb250YWluIGEgbGlzdCBvZiBvYmplY3RzIHRvXG4gICAgLy8gZGVzY3JpYmUgdGhlIHN0YXRlIG9mIGxheWVyIGF2YWlsYWJpbGl0eSBhbmQgdmlzaWJpbGl0eSBmb3IgZWFjaCBtYXBcbiAgICAvLyBbXG4gICAgLy8gICB7XG4gICAgLy8gICAgICBsYXllcnM6IHtsYXllcl9pZDogdHJ1ZSB8IGZhbHNlfVxuICAgIC8vICAgfVxuICAgIC8vIF1cbiAgXSxcbiAgc3BsaXRNYXBzVG9CZU1lcmdlZDogW10sXG4gIGlzTWVyZ2luZ0RhdGFzZXRzOiB7fSxcbiAgLy8gZGVmYXVsdHMgbGF5ZXIgY2xhc3Nlc1xuICBsYXllckNsYXNzZXM6IExheWVyQ2xhc3NlcyxcblxuICAvLyBkZWZhdWx0IGFuaW1hdGlvblxuICAvLyB0aW1lIGluIHVuaXggdGltZXN0YW1wIChtaWxsaXNlY29uZHMpICh0aGUgbnVtYmVyIG9mIHNlY29uZHMgc2luY2UgdGhlIFVuaXggRXBvY2gpXG4gIGFuaW1hdGlvbkNvbmZpZzogREVGQVVMVF9BTklNQVRJT05fQ09ORklHLFxuXG4gIGVkaXRvcjogREVGQVVMVF9FRElUT1IsXG5cbiAgZmlsZUxvYWRpbmc6IGZhbHNlLFxuICBmaWxlTG9hZGluZ1Byb2dyZXNzOiB7fSxcbiAgLy8gZm9yIGxvYWRpbmcgZGF0YXNldHNcbiAgbG9hZGluZ0luZGljYXRvclZhbHVlOiAwLFxuXG4gIGxvYWRlcnM6IFtdLFxuICBsb2FkT3B0aW9uczoge30sXG5cbiAgLy8gdmlzU3RhdGVNZXJnZXJzXG4gIG1lcmdlcnM6IFZJU19TVEFURV9NRVJHRVJTLFxuXG4gIC8vIGtlcGxlciBzY2hlbWFzXG4gIHNjaGVtYTogS2VwbGVyR0xTY2hlbWFcbn07XG5cbmV4cG9ydCBjb25zdCBBQ1RJT05fVEFTS19GSVRfQk9VTkRTID0gVGFzay5mcm9tQ2FsbGJhY2soXG4gIChfLCBjYikgPT4gY2IoKSxcblxuICAnQUNUSU9OX1RBU0tfRklUX0JPVU5EUydcbik7XG5cbmV4cG9ydCBjb25zdCBBQ1RJT05fVEFTS19BRERfTk9USUZJQ0FUSU9OID0gVGFzay5mcm9tQ2FsbGJhY2soXG4gIChfLCBjYikgPT4gY2IoKSxcblxuICAnQUNUSU9OX1RBU0tfQUREX05PVElGSUNBVElPTidcbik7XG5cbnR5cGUgVXBkYXRlU3RhdGVXaXRoTGF5ZXJBbmREYXRhVHlwZSA9IHtcbiAgbGF5ZXJzOiBMYXllcltdO1xuICBsYXllckRhdGE6IGFueVtdO1xufTtcblxuLyoqXG4gKiBVcGRhdGUgc3RhdGUgd2l0aCB1cGRhdGVkIGxheWVyIGFuZCBsYXllckRhdGFcbiAqXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiB1cGRhdGVTdGF0ZVdpdGhMYXllckFuZERhdGE8UyBleHRlbmRzIFVwZGF0ZVN0YXRlV2l0aExheWVyQW5kRGF0YVR5cGU+KFxuICBzdGF0ZTogUyxcbiAge2xheWVyRGF0YSwgbGF5ZXIsIGlkeH06IHtsYXllckRhdGE/OiBhbnk7IGxheWVyOiBMYXllcjsgaWR4OiBudW1iZXJ9XG4pOiBTIHtcbiAgcmV0dXJuIHtcbiAgICAuLi5zdGF0ZSxcbiAgICBsYXllcnM6IHN0YXRlLmxheWVycy5tYXAoKGx5ciwgaSkgPT4gKGkgPT09IGlkeCA/IGxheWVyIDogbHlyKSksXG4gICAgbGF5ZXJEYXRhOiBsYXllckRhdGFcbiAgICAgID8gc3RhdGUubGF5ZXJEYXRhLm1hcCgoZCwgaSkgPT4gKGkgPT09IGlkeCA/IGxheWVyRGF0YSA6IGQpKVxuICAgICAgOiBzdGF0ZS5sYXllckRhdGFcbiAgfTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHVwZGF0ZVN0YXRlT25MYXllclZpc2liaWxpdHlDaGFuZ2U8UyBleHRlbmRzIFZpc1N0YXRlPihzdGF0ZTogUywgbGF5ZXI6IExheWVyKTogUyB7XG4gIGxldCBuZXdTdGF0ZSA9IHN0YXRlO1xuICBpZiAoc3RhdGUuc3BsaXRNYXBzLmxlbmd0aCkge1xuICAgIG5ld1N0YXRlID0ge1xuICAgICAgLi4uc3RhdGUsXG4gICAgICBzcGxpdE1hcHM6IGxheWVyLmNvbmZpZy5pc1Zpc2libGVcbiAgICAgICAgPyBhZGROZXdMYXllcnNUb1NwbGl0TWFwKHN0YXRlLnNwbGl0TWFwcywgbGF5ZXIpXG4gICAgICAgIDogcmVtb3ZlTGF5ZXJGcm9tU3BsaXRNYXBzKHN0YXRlLnNwbGl0TWFwcywgbGF5ZXIpXG4gICAgfTtcbiAgfVxuXG4gIGlmIChsYXllci5jb25maWcuYW5pbWF0aW9uLmVuYWJsZWQpIHtcbiAgICBuZXdTdGF0ZSA9IHVwZGF0ZUFuaW1hdGlvbkRvbWFpbihuZXdTdGF0ZSk7XG4gIH1cblxuICByZXR1cm4gbmV3U3RhdGU7XG59XG5cbi8qKlxuICogQ29tcGFyZXMgdHdvIG9iamVjdHMgKG9yIGFycmF5cykgYW5kIHJldHVybnMgYSBuZXcgb2JqZWN0IHdpdGggb25seSB0aGVcbiAqIHByb3BlcnRpZXMgdGhhdCBoYXZlIGNoYW5nZWQgYmV0d2VlbiB0aGUgdHdvIG9iamVjdHMuXG4gKi9cbmZ1bmN0aW9uIHBpY2tDaGFuZ2VkUHJvcHM8VD4ocHJldjogVCwgbmV4dDogVCk6IFBhcnRpYWw8VD4ge1xuICBjb25zdCBjaGFuZ2VkUHJvcHM6IFBhcnRpYWw8VD4gPSB7fTtcbiAgY29uc3QgcGlja1Byb3BzT2YgPSBvYmogPT4ge1xuICAgIE9iamVjdC5rZXlzKG9iaikuZm9yRWFjaChrZXkgPT4ge1xuICAgICAgaWYgKFxuICAgICAgICAhT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKGNoYW5nZWRQcm9wcywga2V5KSAmJlxuICAgICAgICAhaXNFcXVhbChwcmV2W2tleV0sIG5leHRba2V5XSlcbiAgICAgICkge1xuICAgICAgICBjaGFuZ2VkUHJvcHNba2V5XSA9IG5leHRba2V5XTtcbiAgICAgIH1cbiAgICB9KTtcbiAgfTtcbiAgcGlja1Byb3BzT2YocHJldik7XG4gIHBpY2tQcm9wc09mKG5leHQpO1xuICByZXR1cm4gY2hhbmdlZFByb3BzO1xufVxuXG5jb25zdCBWSVNVQUxfQ0hBTk5FTF9QUk9QX1RZUEVTID0gWydmaWVsZCcsICdzY2FsZScsICdkb21haW4nLCAnYWdncmVnYXRpb24nXTtcblxuLyoqXG4gKiBBcHBseSBsYXllciBjb25maWdcbiAqIEBtZW1iZXJvZiB2aXNTdGF0ZVVwZGF0ZXJzXG4gKiBAcmV0dXJucyBuZXh0U3RhdGVcbiAqL1xuLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIGNvbXBsZXhpdHksIG1heC1zdGF0ZW1lbnRzXG5leHBvcnQgZnVuY3Rpb24gYXBwbHlMYXllckNvbmZpZ1VwZGF0ZXIoXG4gIHN0YXRlOiBWaXNTdGF0ZSxcbiAgYWN0aW9uOiBWaXNTdGF0ZUFjdGlvbnMuQXBwbHlMYXllckNvbmZpZ1VwZGF0ZXJBY3Rpb25cbik6IFZpc1N0YXRlIHtcbiAgY29uc3Qge29sZExheWVySWQsIG5ld0xheWVyQ29uZmlnLCBsYXllckluZGV4fSA9IGFjdGlvbjtcbiAgY29uc3QgbmV3UGFyc2VkTGF5ZXIgPVxuICAgIC8vIHdpbGwgbW92ZSB2aXN1YWxDaGFubmVscyB0byB0aGUgY29uZmlnIHByb3BcbiAgICBwYXJzZUxheWVyQ29uZmlnKHN0YXRlLnNjaGVtYSwgbmV3TGF5ZXJDb25maWcpO1xuICBjb25zdCBvbGRMYXllciA9IHN0YXRlLmxheWVycy5maW5kKGwgPT4gbC5pZCA9PT0gb2xkTGF5ZXJJZCk7XG4gIGlmICghb2xkTGF5ZXIgfHwgIW5ld1BhcnNlZExheWVyKSB7XG4gICAgcmV0dXJuIHN0YXRlO1xuICB9XG4gIGlmIChsYXllckluZGV4ICE9PSBudWxsICYmIGxheWVySW5kZXggIT09IHVuZGVmaW5lZCAmJiBzdGF0ZS5sYXllcnNbbGF5ZXJJbmRleF0gIT09IG9sZExheWVyKSB7XG4gICAgLy8gbGF5ZXJJbmRleCBpcyBwcm92aWRlZCwgYnV0IGl0IGRvZXNuJ3QgbWF0Y2ggdGhlIG9sZExheWVyXG4gICAgcmV0dXJuIHN0YXRlO1xuICB9XG4gIGNvbnN0IGRhdGFzZXQgPSBzdGF0ZS5kYXRhc2V0c1tuZXdQYXJzZWRMYXllci5jb25maWcuZGF0YUlkXTtcbiAgaWYgKCFkYXRhc2V0KSB7XG4gICAgcmV0dXJuIHN0YXRlO1xuICB9XG4gIC8vIE1ha2Ugc3VyZSB0aGUgbGF5ZXIgaXMgdmFsaWQgYW5kIGNvbnZlcnQgaXQgdG8gTGF5ZXJcbiAgY29uc3QgbmV3TGF5ZXIgPSB2YWxpZGF0ZUxheWVyV2l0aERhdGEoZGF0YXNldCwgbmV3UGFyc2VkTGF5ZXIsIHN0YXRlLmxheWVyQ2xhc3Nlcyk7XG4gIGlmICghbmV3TGF5ZXIpIHtcbiAgICByZXR1cm4gc3RhdGU7XG4gIH1cblxuICBsZXQgbmV4dFN0YXRlID0gc3RhdGU7XG5cbiAgaWYgKG5ld0xheWVyLnR5cGUgJiYgbmV3TGF5ZXIudHlwZSAhPT0gb2xkTGF5ZXIudHlwZSkge1xuICAgIGNvbnN0IG9sZExheWVySW5kZXggPSBzdGF0ZS5sYXllcnMuZmluZEluZGV4KGwgPT4gbC5pZCA9PT0gb2xkTGF5ZXJJZCk7XG4gICAgaWYgKG9sZExheWVySW5kZXggPj0gMCkge1xuICAgICAgbmV4dFN0YXRlID0gbGF5ZXJUeXBlQ2hhbmdlVXBkYXRlcihuZXh0U3RhdGUsIGxheWVyVHlwZUNoYW5nZShvbGRMYXllciwgbmV3TGF5ZXIudHlwZSkpO1xuICAgICAgLy8gbGF5ZXJUeXBlQ2hhbmdlVXBkYXRlciBjaGFuZ2VzIHRoZSBpZCBvZiB0aGUgbGF5ZXIsIHNvIHdlIG5lZWQgdG8gb2J0YWluIHRoZSBuZXcgaWRcbiAgICAgIC8vIGJ1dCBmaXJzdCBtYWtlIHN1cmUgdGhhdCB0aGUgbGF5ZXIgd2FzIG5vdCByZW1vdmVkXG4gICAgICBpZiAobmV4dFN0YXRlLmxheWVycy5sZW5ndGggPT09IHN0YXRlLmxheWVycy5sZW5ndGgpIHtcbiAgICAgICAgY29uc3QgbmV3TGF5ZXJJZCA9IG5leHRTdGF0ZS5sYXllcnNbb2xkTGF5ZXJJbmRleF0uaWQ7XG4gICAgICAgIG5leHRTdGF0ZSA9IGFwcGx5TGF5ZXJDb25maWdVcGRhdGVyKFxuICAgICAgICAgIG5leHRTdGF0ZSxcbiAgICAgICAgICBhcHBseUxheWVyQ29uZmlnKG5ld0xheWVySWQsIHsuLi5uZXdMYXllckNvbmZpZywgaWQ6IG5ld0xheWVySWR9KVxuICAgICAgICApO1xuICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4gbmV4dFN0YXRlO1xuICB9XG5cbiAgLy8gc2VyaWFsaXplTGF5ZXIoKSBtaWdodCByZXR1cm4gbnVsbCBpZiB0aGUgb2xkIGxheWVyIGlzIG5vdCB2YWxpZCxcbiAgLy8gd2Ugc2hvdWxkIHN0aWxsIGFwcGx5IHRoZSBjaGFuZ2VzIGluIHRoYXQgY2FzZVxuICBjb25zdCBzZXJpYWxpemVkT2xkTGF5ZXIgPSBzZXJpYWxpemVMYXllcihvbGRMYXllciwgc3RhdGUuc2NoZW1hKSA/PyB7Y29uZmlnOiB7fX07XG4gIGNvbnN0IHNlcmlhbGl6ZWROZXdMYXllciA9IHNlcmlhbGl6ZUxheWVyKG5ld0xheWVyLCBzdGF0ZS5zY2hlbWEpO1xuICBpZiAoIXNlcmlhbGl6ZWROZXdMYXllcikge1xuICAgIHJldHVybiBzdGF0ZTtcbiAgfVxuICBpZiAoIWlzRXF1YWwoc2VyaWFsaXplZE9sZExheWVyLCBzZXJpYWxpemVkTmV3TGF5ZXIpKSB7XG4gICAgY29uc3QgY2hhbmdlZCA9IHBpY2tDaGFuZ2VkUHJvcHMoc2VyaWFsaXplZE9sZExheWVyLmNvbmZpZywgc2VyaWFsaXplZE5ld0xheWVyLmNvbmZpZyk7XG5cbiAgICBpZiAoJ3Zpc0NvbmZpZycgaW4gY2hhbmdlZCkge1xuICAgICAgaWYgKGNoYW5nZWQudmlzQ29uZmlnKSB7XG4gICAgICAgIG5leHRTdGF0ZSA9IGxheWVyVmlzQ29uZmlnQ2hhbmdlVXBkYXRlcihcbiAgICAgICAgICBuZXh0U3RhdGUsXG4gICAgICAgICAgbGF5ZXJWaXNDb25maWdDaGFuZ2Uob2xkTGF5ZXIsIGNoYW5nZWQudmlzQ29uZmlnKVxuICAgICAgICApO1xuICAgICAgfVxuICAgICAgZGVsZXRlIGNoYW5nZWQudmlzQ29uZmlnO1xuICAgIH1cblxuICAgIE9iamVjdC5rZXlzKG9sZExheWVyLnZpc3VhbENoYW5uZWxzKS5mb3JFYWNoKGNoYW5uZWxOYW1lID0+IHtcbiAgICAgIGNvbnN0IGNoYW5uZWwgPSBvbGRMYXllci52aXN1YWxDaGFubmVsc1tjaGFubmVsTmFtZV07XG4gICAgICBjb25zdCBjaGFubmVsUHJvcE5hbWVzID0gVklTVUFMX0NIQU5ORUxfUFJPUF9UWVBFUy5tYXAocHJvcCA9PiBjaGFubmVsW3Byb3BdKTtcbiAgICAgIGlmIChjaGFubmVsUHJvcE5hbWVzLnNvbWUocHJvcCA9PiBwcm9wIGluIGNoYW5nZWQpKSB7XG4gICAgICAgIG5leHRTdGF0ZSA9IGxheWVyVmlzdWFsQ2hhbm5lbENoYW5nZVVwZGF0ZXIoXG4gICAgICAgICAgbmV4dFN0YXRlLFxuICAgICAgICAgIGxheWVyVmlzdWFsQ2hhbm5lbENvbmZpZ0NoYW5nZShcbiAgICAgICAgICAgIG9sZExheWVyLFxuICAgICAgICAgICAgcGljayhuZXdMYXllci5jb25maWcsIGNoYW5uZWxQcm9wTmFtZXMpLFxuICAgICAgICAgICAgY2hhbm5lbE5hbWVcbiAgICAgICAgICApXG4gICAgICAgICk7XG4gICAgICAgIGZvciAoY29uc3QgcHJvcCBvZiBjaGFubmVsUHJvcE5hbWVzKSB7XG4gICAgICAgICAgZGVsZXRlIGNoYW5nZWRbcHJvcF07XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9KTtcblxuICAgIGlmIChPYmplY3Qua2V5cyhjaGFuZ2VkKS5sZW5ndGggPiAwKSB7XG4gICAgICBuZXh0U3RhdGUgPSBsYXllckNvbmZpZ0NoYW5nZVVwZGF0ZXIoXG4gICAgICAgIG5leHRTdGF0ZSxcbiAgICAgICAgbGF5ZXJDb25maWdDaGFuZ2Uob2xkTGF5ZXIsIHBpY2sobmV3TGF5ZXIuY29uZmlnLCBPYmplY3Qua2V5cyhjaGFuZ2VkKSkpXG4gICAgICApO1xuICAgIH1cbiAgfVxuXG4gIHJldHVybiBuZXh0U3RhdGU7XG59XG5cbmZ1bmN0aW9uIHVwZGF0ZWxheWVyVmlzaWJpbHR5KHN0YXRlOiBWaXNTdGF0ZSwgbmV3TGF5ZXI6IExheWVyLCBpc1Zpc2libGU/OiBib29sZWFuKTogVmlzU3RhdGUge1xuICBsZXQgbmV3U3RhdGUgPSB1cGRhdGVTdGF0ZU9uTGF5ZXJWaXNpYmlsaXR5Q2hhbmdlKHN0YXRlLCBuZXdMYXllcik7XG4gIGNvbnN0IGZpbHRlckluZGV4ID0gZmlsdGVyU3luY2VkV2l0aFRpbWVsaW5lKHN0YXRlKTtcbiAgaWYgKGlzTGF5ZXJBbmltYXRhYmxlKG5ld0xheWVyKSAmJiBmaWx0ZXJJbmRleCAhPT0gLTEpIHtcbiAgICAvLyBpZiBsYXllciBpcyBnb2luZyB0byBiZSB2aXNpYmxlIHdlIHN5bmMgd2l0aCBmaWx0ZXIgb3RoZXJ3aXNlIHdlIG5lZWQgdG8gY2hlY2sgd2hldGhlciBvdGhlciBhbmltYXRhYmxlIGxheWVycyBleGlzdHMgYW5kIGFyZSB2aXNpYmxlXG4gICAgbmV3U3RhdGUgPSBzeW5jVGltZUZpbHRlcldpdGhMYXllclRpbWVsaW5lVXBkYXRlcihuZXdTdGF0ZSwge1xuICAgICAgaWR4OiBmaWx0ZXJJbmRleCxcbiAgICAgIGVuYWJsZTogaXNWaXNpYmxlID8gaXNWaXNpYmxlIDogZ2V0QW5pbWF0YWJsZVZpc2libGVMYXllcnMoc3RhdGUubGF5ZXJzKS5sZW5ndGggPiAwXG4gICAgfSk7XG4gIH1cbiAgcmV0dXJuIG5ld1N0YXRlO1xufVxuXG4vKipcbiAqIFVwZGF0ZSBsYXllciBiYXNlIGNvbmZpZzogZGF0YUlkLCBsYWJlbCwgY29sdW1uLCBpc1Zpc2libGVcbiAqIEBtZW1iZXJvZiB2aXNTdGF0ZVVwZGF0ZXJzXG4gKiBAcmV0dXJucyBuZXh0U3RhdGVcbiAqL1xuLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIGNvbXBsZXhpdHlcbmV4cG9ydCBmdW5jdGlvbiBsYXllckNvbmZpZ0NoYW5nZVVwZGF0ZXIoXG4gIHN0YXRlOiBWaXNTdGF0ZSxcbiAgYWN0aW9uOiBWaXNTdGF0ZUFjdGlvbnMuTGF5ZXJDb25maWdDaGFuZ2VVcGRhdGVyQWN0aW9uXG4pOiBWaXNTdGF0ZSB7XG4gIGNvbnN0IHtvbGRMYXllcn0gPSBhY3Rpb247XG4gIGNvbnN0IGlkeCA9IHN0YXRlLmxheWVycy5maW5kSW5kZXgobCA9PiBsLmlkID09PSBvbGRMYXllci5pZCk7XG4gIGNvbnN0IHByb3BzID0gT2JqZWN0LmtleXMoYWN0aW9uLm5ld0NvbmZpZyk7XG4gIGlmIChcbiAgICB0eXBlb2YgYWN0aW9uLm5ld0NvbmZpZy5kYXRhSWQgPT09ICdzdHJpbmcnICYmXG4gICAgYWN0aW9uLm5ld0NvbmZpZy5kYXRhSWQgIT09IG9sZExheWVyLmNvbmZpZy5kYXRhSWRcbiAgKSB7XG4gICAgY29uc3Qge2RhdGFJZCwgLi4ucmVzdENvbmZpZ30gPSBhY3Rpb24ubmV3Q29uZmlnO1xuICAgIGNvbnN0IHN0YXRlV2l0aERhdGFJZCA9IGxheWVyRGF0YUlkQ2hhbmdlVXBkYXRlcihzdGF0ZSwge1xuICAgICAgb2xkTGF5ZXIsXG4gICAgICBuZXdDb25maWc6IHtkYXRhSWR9XG4gICAgfSk7XG4gICAgY29uc3QgbmV4dExheWVyID0gc3RhdGVXaXRoRGF0YUlkLmxheWVycy5maW5kKGwgPT4gbC5pZCA9PT0gb2xkTGF5ZXIuaWQpO1xuICAgIHJldHVybiBuZXh0TGF5ZXIgJiYgT2JqZWN0LmtleXMocmVzdENvbmZpZykubGVuZ3RoXG4gICAgICA/IGxheWVyQ29uZmlnQ2hhbmdlVXBkYXRlcihzdGF0ZVdpdGhEYXRhSWQsIHtvbGRMYXllcjogbmV4dExheWVyLCBuZXdDb25maWc6IHJlc3RDb25maWd9KVxuICAgICAgOiBzdGF0ZVdpdGhEYXRhSWQ7XG4gIH1cblxuICBsZXQgbmV3TGF5ZXIgPSBvbGRMYXllci51cGRhdGVMYXllckNvbmZpZyhhY3Rpb24ubmV3Q29uZmlnKTtcblxuICBsZXQgbGF5ZXJEYXRhO1xuXG4gIGlmIChuZXdMYXllci5zaG91bGRDYWxjdWxhdGVMYXllckRhdGEocHJvcHMpKSB7XG4gICAgY29uc3Qgb2xkTGF5ZXJEYXRhID0gc3RhdGUubGF5ZXJEYXRhW2lkeF07XG5cbiAgICBjb25zdCB1cGRhdGVMYXllckRhdGFSZXN1bHQgPSBjYWxjdWxhdGVMYXllckRhdGEobmV3TGF5ZXIsIHN0YXRlLCBvbGRMYXllckRhdGEpO1xuICAgIG5ld0xheWVyID0gdXBkYXRlTGF5ZXJEYXRhUmVzdWx0LmxheWVyO1xuICAgIGxheWVyRGF0YSA9IHVwZGF0ZUxheWVyRGF0YVJlc3VsdC5sYXllckRhdGE7XG4gIH1cblxuICBsZXQgbmV3U3RhdGUgPSBzdGF0ZTtcbiAgaWYgKCdpc1Zpc2libGUnIGluIGFjdGlvbi5uZXdDb25maWcpIHtcbiAgICBuZXdTdGF0ZSA9IHVwZGF0ZWxheWVyVmlzaWJpbHR5KG5ld1N0YXRlLCBuZXdMYXllciwgYWN0aW9uLm5ld0NvbmZpZy5pc1Zpc2libGUpO1xuICB9XG5cbiAgaWYgKCdjb2x1bW5zJyBpbiBhY3Rpb24ubmV3Q29uZmlnICYmIG5ld0xheWVyLmNvbmZpZy5hbmltYXRpb24uZW5hYmxlZCkge1xuICAgIC8vIFRPRE86IFNoYW4sIG1ha2UgdGhlIGFuaW1hdGlvbiBjb25maWcgZnVuY3Rpb24gbW9yZSByb2J1c3RcbiAgICBuZXdTdGF0ZSA9IHVwZGF0ZUFuaW1hdGlvbkRvbWFpbihuZXdTdGF0ZSk7XG4gIH1cblxuICByZXR1cm4gdXBkYXRlU3RhdGVXaXRoTGF5ZXJBbmREYXRhKG5ld1N0YXRlLCB7XG4gICAgbGF5ZXI6IG5ld0xheWVyLFxuICAgIGxheWVyRGF0YSxcbiAgICBpZHhcbiAgfSk7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBsYXllckFuaW1hdGlvbkNoYW5nZVVwZGF0ZXI8UyBleHRlbmRzIFZpc1N0YXRlPihzdGF0ZTogUywgYWN0aW9uKTogUyB7XG4gIGNvbnN0IHtvbGRMYXllciwgcHJvcCwgdmFsdWV9ID0gYWN0aW9uO1xuICBjb25zdCBpZHggPSBzdGF0ZS5sYXllcnMuZmluZEluZGV4KGwgPT4gbC5pZCA9PT0gb2xkTGF5ZXIuaWQpO1xuXG4gIGNvbnN0IG5ld0xheWVyID0gb2xkTGF5ZXIudXBkYXRlTGF5ZXJDb25maWcoe1xuICAgIGFuaW1hdGlvbjoge1xuICAgICAgLi4ub2xkTGF5ZXIuY29uZmlnLmFuaW1hdGlvbixcbiAgICAgIFtwcm9wXTogdmFsdWVcbiAgICB9XG4gIH0pO1xuXG4gIGNvbnN0IHtsYXllckRhdGEsIGxheWVyfSA9IGNhbGN1bGF0ZUxheWVyRGF0YShuZXdMYXllciwgc3RhdGUsIHN0YXRlLmxheWVyRGF0YVtpZHhdKTtcblxuICByZXR1cm4gdXBkYXRlU3RhdGVXaXRoTGF5ZXJBbmREYXRhKHN0YXRlLCB7bGF5ZXJEYXRhLCBsYXllciwgaWR4fSk7XG59XG5cbi8qKlxuICogVXBkYXRlIGxheWVySWQsIGlzVmlzaWJsZSwgc3BsaXRNYXBJZFxuICogaGFuZGxlcyB0d28gY2FzZXM6XG4gKiAxKSB0b2dnbGUgdGhlIHZpc2liaWxpdHkgb2YgbG9jYWwgU3BsaXRNYXAgbGF5ZXIgKHZpc1N0YXRlLnNwbGl0TWFwLmxheWVycylcbiAqIDIpIHRvZ2dsZSB0aGUgdmlzaWJpbGl0eSBvZiBnbG9iYWwgbGF5ZXIgKHZpc1N0YXRlLmxheWVycylcblxuICogQG1lbWJlcm9mIHZpc1N0YXRlVXBkYXRlcnNcbiAqIEByZXR1cm5zIG5leHRTdGF0ZVxuICovXG5leHBvcnQgZnVuY3Rpb24gbGF5ZXJUb2dnbGVWaXNpYmlsaXR5VXBkYXRlcihcbiAgc3RhdGU6IFZpc1N0YXRlLFxuICBhY3Rpb246IFZpc1N0YXRlQWN0aW9ucy5MYXllclRvZ2dsZVZpc2liaWxpdHlVcGRhdGVyQWN0aW9uXG4pOiBWaXNTdGF0ZSB7XG4gIGNvbnN0IHtsYXllcklkLCBpc1Zpc2libGUsIHNwbGl0TWFwSWR9ID0gYWN0aW9uO1xuICBjb25zdCBsYXllciA9IHN0YXRlLmxheWVycy5maW5kKGQgPT4gZC5pZCA9PT0gbGF5ZXJJZCk7XG5cbiAgaWYgKCFsYXllcikge1xuICAgIHJldHVybiBzdGF0ZTtcbiAgfVxuXG4gIGxldCBuZXdTdGF0ZSA9IHN0YXRlO1xuXG4gIGlmIChzcGxpdE1hcElkKSB7XG4gICAgLy8gW2Nhc2UgMV06IHRvZ2dsZSBsb2NhbCBsYXllciB2aXNpYmlsaXR5IGZvciBlYWNoIFNwbGl0TWFwXG4gICAgY29uc3QgbWFwSW5kZXggPSBuZXdTdGF0ZS5zcGxpdE1hcHMuZmluZEluZGV4KHNtID0+IHNtLmlkID09PSBzcGxpdE1hcElkKTtcbiAgICBpZiAoaXNWaXNpYmxlKSB7XG4gICAgICAvLyAxKSBpZiB0aGUgbGF5ZXIgaXMgaW52aXNpYmxlIGdsb2JhbGx5XG4gICAgICAvLyAtPiBzZXQgZ2xvYmFsIHZpc2liaWxpdHkgdG8gdHJ1ZVxuICAgICAgbmV3U3RhdGUgPSBsYXllckNvbmZpZ0NoYW5nZVVwZGF0ZXIobmV3U3RhdGUsIGxheWVyQ29uZmlnQ2hhbmdlKGxheWVyLCB7aXNWaXNpYmxlOiB0cnVlfSkpO1xuXG4gICAgICAvLyAtPiBzZXQgbG9jYWwgdmlzaWJpbGl0eSB0byB0cnVlIGFuZCB0aGUgbG9jYWwgdmlzaWJpbGl0aWVzIG9mIGFsbCBvdGhlciBTcGxpdE1hcHMgdG8gZmFsc2VcbiAgICAgIHJldHVybiB7XG4gICAgICAgIC4uLm5ld1N0YXRlLFxuICAgICAgICBzcGxpdE1hcHM6IG5ld1N0YXRlLnNwbGl0TWFwcy5tYXAoc20gPT5cbiAgICAgICAgICBzbS5pZCAhPT0gc3BsaXRNYXBJZFxuICAgICAgICAgICAgPyB7XG4gICAgICAgICAgICAgICAgLi4uc20sXG4gICAgICAgICAgICAgICAgbGF5ZXJzOiB7XG4gICAgICAgICAgICAgICAgICAuLi5zbS5sYXllcnMsXG4gICAgICAgICAgICAgICAgICBbbGF5ZXJJZF06IGZhbHNlXG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICA6IHtcbiAgICAgICAgICAgICAgICAuLi5zbSxcbiAgICAgICAgICAgICAgICBsYXllcnM6IHtcbiAgICAgICAgICAgICAgICAgIC4uLnNtLmxheWVycyxcbiAgICAgICAgICAgICAgICAgIFtsYXllcklkXTogdHJ1ZVxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgfVxuICAgICAgICApXG4gICAgICB9O1xuICAgIH1cbiAgICAvLyAyKSBlbHNlIHdoZW4gdGhlIGxheWVyIGlzIHZpc2libGUgZ2xvYmFsbHlcbiAgICByZXR1cm4gdG9nZ2xlTGF5ZXJGb3JNYXBVcGRhdGVyKG5ld1N0YXRlLCB0b2dnbGVMYXllckZvck1hcChtYXBJbmRleCwgbGF5ZXJJZCkpO1xuICB9IGVsc2Uge1xuICAgIC8vIFtjYXNlIDJdOiB0b2dnbGUgZ2xvYmFsIGxheWVyIHZpc2liaWxpdHlcbiAgICBjb25zdCBuZXdMYXllciA9IGxheWVyLnVwZGF0ZUxheWVyQ29uZmlnKHtpc1Zpc2libGV9KTtcbiAgICBjb25zdCBpZHggPSBuZXdTdGF0ZS5sYXllcnMuZmluZEluZGV4KGwgPT4gbC5pZCA9PT0gbGF5ZXJJZCk7XG5cbiAgICBuZXdTdGF0ZSA9IHVwZGF0ZWxheWVyVmlzaWJpbHR5KG5ld1N0YXRlLCBuZXdMYXllciwgaXNWaXNpYmxlKTtcbiAgICByZXR1cm4gdXBkYXRlU3RhdGVXaXRoTGF5ZXJBbmREYXRhKG5ld1N0YXRlLCB7XG4gICAgICBsYXllcjogbmV3TGF5ZXIsXG4gICAgICBpZHhcbiAgICB9KTtcbiAgfVxufVxuXG4vKipcbiAqXG4gKiBAcGFyYW0gc3RhdGVcbiAqIEByZXR1cm5zIGluZGV4IG9mIHRoZSBmaWx0ZXIgc3luY2VkIHRvIHRpbWVsaW5lIG9yIC0xXG4gKi9cbmZ1bmN0aW9uIGZpbHRlclN5bmNlZFdpdGhUaW1lbGluZShzdGF0ZTogVmlzU3RhdGUpOiBudW1iZXIge1xuICByZXR1cm4gc3RhdGUuZmlsdGVycy5maW5kSW5kZXgoZiA9PiAoZiBhcyBUaW1lUmFuZ2VGaWx0ZXIpLnN5bmNlZFdpdGhMYXllclRpbWVsaW5lKTtcbn1cblxuLyoqXG4gKiBVcGRhdGVzIGlzVmFsaWQgZmxhZyBvZiBhIGxheWVyLlxuICogVXBkYXRlcyBpc1Zpc2libGUgYmFzZWQgb24gdGhlIHZhbHVlIG9mIGlzVmFsaWQuXG4gKiBUcmlnZ2VycyB1cGRhdGUgb2YgZGF0YSBmb3IgdGhlIGxheWVyIGluIG9yZGVyIHRvIGdldCBlcnJvcnMgYWdhaW4gZHVyaW5nIG5leHQgdXBkYXRlIGl0ZXJhdGlvbi5cbiAqIEBtZW1iZXJvZiB2aXNTdGF0ZVVwZGF0ZXJzXG4gKiBAcmV0dXJucyBuZXh0U3RhdGVcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGxheWVyU2V0SXNWYWxpZFVwZGF0ZXIoXG4gIHN0YXRlOiBWaXNTdGF0ZSxcbiAgYWN0aW9uOiBWaXNTdGF0ZUFjdGlvbnMuTGF5ZXJTZXRJc1ZhbGlkVXBkYXRlckFjdGlvblxuKTogVmlzU3RhdGUge1xuICBjb25zdCB7b2xkTGF5ZXIsIGlzVmFsaWR9ID0gYWN0aW9uO1xuXG4gIGNvbnN0IGlkeCA9IHN0YXRlLmxheWVycy5maW5kSW5kZXgobCA9PiBsLmlkID09PSBvbGRMYXllci5pZCk7XG4gIGNvbnN0IGxheWVyVG9VcGRhdGUgPSBzdGF0ZS5sYXllcnNbaWR4XTtcbiAgaWYgKGxheWVyVG9VcGRhdGUpIHtcbiAgICBsZXQgbmV3TGF5ZXI7XG4gICAgbGV0IG5ld0RhdGEgPSBudWxsO1xuXG4gICAgaWYgKGlzVmFsaWQpIHtcbiAgICAgIC8vIFRyaWdnZXIgZGF0YSB1cGRhdGUgaW4gb3JkZXIgdG8gc2hvdyBlcnJvcnMgYWdhaW4gaWYgcHJlc2VudC5cbiAgICAgIGNvbnN0IHtsYXllciwgbGF5ZXJEYXRhfSA9IGNhbGN1bGF0ZUxheWVyRGF0YShsYXllclRvVXBkYXRlLCBzdGF0ZSwgdW5kZWZpbmVkKTtcbiAgICAgIG5ld0xheWVyID0gbGF5ZXI7XG4gICAgICBuZXdEYXRhID0gbGF5ZXJEYXRhO1xuICAgIH0gZWxzZSB7XG4gICAgICBuZXdMYXllciA9IGxheWVyVG9VcGRhdGUudXBkYXRlTGF5ZXJDb25maWcoe1xuICAgICAgICBpc1Zpc2libGU6IGZhbHNlXG4gICAgICB9KTtcbiAgICAgIG5ld0xheWVyLmlzVmFsaWQgPSBmYWxzZTtcbiAgICB9XG5cbiAgICByZXR1cm4gdXBkYXRlU3RhdGVXaXRoTGF5ZXJBbmREYXRhKHN0YXRlLCB7aWR4LCBsYXllcjogbmV3TGF5ZXIsIGxheWVyRGF0YTogbmV3RGF0YX0pO1xuICB9XG5cbiAgcmV0dXJuIHN0YXRlO1xufVxuXG5mdW5jdGlvbiBhZGRPclJlbW92ZVRleHRMYWJlbHMobmV3RmllbGRzLCB0ZXh0TGFiZWwsIGRlZmF1bHRUZXh0TGFiZWwgPSBERUZBVUxUX1RFWFRfTEFCRUwpIHtcbiAgbGV0IG5ld1RleHRMYWJlbCA9IHRleHRMYWJlbC5zbGljZSgpO1xuXG4gIGNvbnN0IGN1cnJlbnRGaWVsZHMgPSB0ZXh0TGFiZWwubWFwKHRsID0+IHRsLmZpZWxkICYmIHRsLmZpZWxkLm5hbWUpLmZpbHRlcihkID0+IGQpO1xuXG4gIGNvbnN0IGFkZEZpZWxkcyA9IG5ld0ZpZWxkcy5maWx0ZXIoZiA9PiAhY3VycmVudEZpZWxkcy5pbmNsdWRlcyhmLm5hbWUpKTtcbiAgY29uc3QgZGVsZXRlRmllbGRzID0gY3VycmVudEZpZWxkcy5maWx0ZXIoZiA9PiAhbmV3RmllbGRzLmZpbmQoZmQgPT4gZmQubmFtZSA9PT0gZikpO1xuXG4gIC8vIGRlbGV0ZVxuICBuZXdUZXh0TGFiZWwgPSBuZXdUZXh0TGFiZWwuZmlsdGVyKHRsID0+IHRsLmZpZWxkICYmICFkZWxldGVGaWVsZHMuaW5jbHVkZXModGwuZmllbGQubmFtZSkpO1xuICBuZXdUZXh0TGFiZWwgPSAhbmV3VGV4dExhYmVsLmxlbmd0aCA/IFtkZWZhdWx0VGV4dExhYmVsXSA6IG5ld1RleHRMYWJlbDtcblxuICAvLyBhZGRcbiAgbmV3VGV4dExhYmVsID0gW1xuICAgIC4uLm5ld1RleHRMYWJlbC5maWx0ZXIodGwgPT4gdGwuZmllbGQpLFxuICAgIC4uLmFkZEZpZWxkcy5tYXAoYWYgPT4gKHtcbiAgICAgIC4uLmRlZmF1bHRUZXh0TGFiZWwsXG4gICAgICBmaWVsZDogYWZcbiAgICB9KSlcbiAgXTtcblxuICByZXR1cm4gbmV3VGV4dExhYmVsO1xufVxuXG5mdW5jdGlvbiB1cGRhdGVUZXh0TGFiZWxQcm9wQW5kVmFsdWUoaWR4LCBwcm9wLCB2YWx1ZSwgdGV4dExhYmVsKSB7XG4gIGlmICghT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHRleHRMYWJlbFtpZHhdLCBwcm9wKSkge1xuICAgIHJldHVybiB0ZXh0TGFiZWw7XG4gIH1cblxuICBsZXQgbmV3VGV4dExhYmVsID0gdGV4dExhYmVsLnNsaWNlKCk7XG5cbiAgaWYgKHByb3AgPT09ICdmaWVsZCcgJiYgdmFsdWUgPT09IG51bGwgJiYgdGV4dExhYmVsLmxlbmd0aCA+IDEpIHtcbiAgICAvLyByZW1vdmUgbGFiZWwgd2hlbiBmaWVsZCB2YWx1ZSBpcyBzZXQgdG8gbnVsbFxuICAgIG5ld1RleHRMYWJlbC5zcGxpY2UoaWR4LCAxKTtcbiAgfSBlbHNlIGlmIChwcm9wKSB7XG4gICAgbmV3VGV4dExhYmVsID0gdGV4dExhYmVsLm1hcCgodGwsIGkpID0+IChpID09PSBpZHggPyB7Li4udGwsIFtwcm9wXTogdmFsdWV9IDogdGwpKTtcbiAgfVxuXG4gIHJldHVybiBuZXdUZXh0TGFiZWw7XG59XG5cbi8qKlxuICogVXBkYXRlIGxheWVyIGJhc2UgY29uZmlnOiBkYXRhSWQsIGxhYmVsLCBjb2x1bW4sIGlzVmlzaWJsZVxuICogQG1lbWJlcm9mIHZpc1N0YXRlVXBkYXRlcnNcbiAqIEByZXR1cm5zIG5leHRTdGF0ZVxuICovXG5leHBvcnQgZnVuY3Rpb24gbGF5ZXJUZXh0TGFiZWxDaGFuZ2VVcGRhdGVyKFxuICBzdGF0ZTogVmlzU3RhdGUsXG4gIGFjdGlvbjogVmlzU3RhdGVBY3Rpb25zLkxheWVyVGV4dExhYmVsQ2hhbmdlVXBkYXRlckFjdGlvblxuKTogVmlzU3RhdGUge1xuICBjb25zdCB7b2xkTGF5ZXIsIGlkeCwgcHJvcCwgdmFsdWV9ID0gYWN0aW9uO1xuICBjb25zdCB7dGV4dExhYmVsfSA9IG9sZExheWVyLmNvbmZpZztcblxuICAvLyB3aGVuIGFkZGluZyBhIG5ldyBlbXB0eSB0ZXh0IGxhYmVsLFxuICAvLyByZWx5IG9uIHRoZSBsYXllcidzIGRlZmF1bHQgY29uZmlnLCBvciB1c2UgdGhlIGNvbnN0YW50IERFRkFVTFRfVEVYVF9MQUJFTFxuICBjb25zdCBkZWZhdWx0VGV4dExhYmVsID1cbiAgICBvbGRMYXllci5nZXREZWZhdWx0TGF5ZXJDb25maWcoe2RhdGFJZDogJyd9KT8udGV4dExhYmVsPy5bMF0gPz8gREVGQVVMVF9URVhUX0xBQkVMO1xuXG4gIGxldCBuZXdUZXh0TGFiZWwgPSB0ZXh0TGFiZWwuc2xpY2UoKTtcbiAgaWYgKCF0ZXh0TGFiZWxbaWR4XSAmJiBpZHggPT09IHRleHRMYWJlbC5sZW5ndGgpIHtcbiAgICAvLyBpZiBpZHggaXMgc2V0IHRvIGxlbmd0aCwgYWRkIGVtcHR5IHRleHQgbGFiZWxcbiAgICBuZXdUZXh0TGFiZWwgPSBbLi4udGV4dExhYmVsLCBkZWZhdWx0VGV4dExhYmVsXTtcbiAgfVxuXG4gIGlmIChpZHggPT09ICdhbGwnICYmIHByb3AgPT09ICdmaWVsZHMnKSB7XG4gICAgbmV3VGV4dExhYmVsID0gYWRkT3JSZW1vdmVUZXh0TGFiZWxzKHZhbHVlLCB0ZXh0TGFiZWwsIGRlZmF1bHRUZXh0TGFiZWwpO1xuICB9IGVsc2Uge1xuICAgIG5ld1RleHRMYWJlbCA9IHVwZGF0ZVRleHRMYWJlbFByb3BBbmRWYWx1ZShpZHgsIHByb3AsIHZhbHVlLCBuZXdUZXh0TGFiZWwpO1xuICB9XG4gIC8vIHVwZGF0ZSB0ZXh0IGxhYmVsIHByb3AgYW5kIHZhbHVlXG4gIHJldHVybiBsYXllckNvbmZpZ0NoYW5nZVVwZGF0ZXIoc3RhdGUsIHtcbiAgICBvbGRMYXllcixcbiAgICBuZXdDb25maWc6IHt0ZXh0TGFiZWw6IG5ld1RleHRMYWJlbH1cbiAgfSk7XG59XG5cbmZ1bmN0aW9uIHZhbGlkYXRlRXhpc3RpbmdMYXllcldpdGhEYXRhKGRhdGFzZXQsIGxheWVyQ2xhc3NlcywgbGF5ZXIsIHNjaGVtYSkge1xuICBjb25zdCBsb2FkZWRMYXllciA9IHNlcmlhbGl6ZUxheWVyKGxheWVyLCBzY2hlbWEpO1xuICByZXR1cm4gbG9hZGVkTGF5ZXJcbiAgICA/IHZhbGlkYXRlTGF5ZXJXaXRoRGF0YShkYXRhc2V0LCBsb2FkZWRMYXllciwgbGF5ZXJDbGFzc2VzLCB7XG4gICAgICAgIGFsbG93RW1wdHlDb2x1bW46IHRydWVcbiAgICAgIH0pXG4gICAgOiBudWxsO1xufVxuXG4vKipcbiAqIFVwZGF0ZSBsYXllciBjb25maWcgZGF0YUlkXG4gKiBAbWVtYmVyb2YgdmlzU3RhdGVVcGRhdGVyc1xuICogQHJldHVybnMgbmV4dFN0YXRlXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBsYXllckRhdGFJZENoYW5nZVVwZGF0ZXIoXG4gIHN0YXRlOiBWaXNTdGF0ZSxcbiAgYWN0aW9uOiB7XG4gICAgb2xkTGF5ZXI6IExheWVyO1xuICAgIG5ld0NvbmZpZzoge1xuICAgICAgZGF0YUlkOiBzdHJpbmc7XG4gICAgfTtcbiAgfVxuKTogVmlzU3RhdGUge1xuICBjb25zdCB7b2xkTGF5ZXIsIG5ld0NvbmZpZ30gPSBhY3Rpb247XG4gIGNvbnN0IHtkYXRhSWR9ID0gbmV3Q29uZmlnO1xuXG4gIGlmICghb2xkTGF5ZXIgfHwgIXN0YXRlLmRhdGFzZXRzW2RhdGFJZF0pIHtcbiAgICByZXR1cm4gc3RhdGU7XG4gIH1cbiAgY29uc3QgaWR4ID0gc3RhdGUubGF5ZXJzLmZpbmRJbmRleChsID0+IGwuaWQgPT09IG9sZExheWVyLmlkKTtcblxuICBsZXQgbmV3TGF5ZXIgPSBvbGRMYXllci51cGRhdGVMYXllckNvbmZpZyh7ZGF0YUlkfSk7XG5cbiAgLy8gdGhpcyBtYXkgaGFwcGVuIHdoZW4gYSBsYXllciBpcyBuZXcgKHR5cGU6IG51bGwgYW5kIG5vIGNvbHVtbnMpIGJ1dCBpdCdzIG5vdCByZWFkeSB0byBiZSBzYXZlZFxuICBpZiAobmV3TGF5ZXIuaXNWYWxpZFRvU2F2ZSgpKSB7XG4gICAgY29uc3QgdmFsaWRhdGVkID0gdmFsaWRhdGVFeGlzdGluZ0xheWVyV2l0aERhdGEoXG4gICAgICBzdGF0ZS5kYXRhc2V0c1tkYXRhSWRdLFxuICAgICAgc3RhdGUubGF5ZXJDbGFzc2VzLFxuICAgICAgbmV3TGF5ZXIsXG4gICAgICBzdGF0ZS5zY2hlbWFcbiAgICApO1xuICAgIC8vIGlmIGNhbnQgdmFsaWRhdGUgaXQgd2l0aCBkYXRhIGNyZWF0ZSBhIG5ldyBvbmVcbiAgICBpZiAoIXZhbGlkYXRlZCkge1xuICAgICAgY29uc3Qgb2xkTGF5ZXJUeXBlID0gb2xkTGF5ZXIudHlwZTtcbiAgICAgIGlmIChvbGRMYXllclR5cGUpIHtcbiAgICAgICAgbmV3TGF5ZXIgPSBuZXcgc3RhdGUubGF5ZXJDbGFzc2VzW29sZExheWVyVHlwZV0oe2RhdGFJZCwgaWQ6IG9sZExheWVyLmlkfSk7XG4gICAgICB9XG4gICAgfSBlbHNlIHtcbiAgICAgIG5ld0xheWVyID0gdmFsaWRhdGVkO1xuICAgIH1cbiAgfVxuXG4gIG5ld0xheWVyID0gbmV3TGF5ZXIudXBkYXRlTGF5ZXJDb25maWcoe1xuICAgIGlzVmlzaWJsZTogb2xkTGF5ZXIuY29uZmlnLmlzVmlzaWJsZSxcbiAgICBpc0NvbmZpZ0FjdGl2ZTogdHJ1ZVxuICB9KTtcblxuICBuZXdMYXllci51cGRhdGVMYXllckRvbWFpbihzdGF0ZS5kYXRhc2V0cyk7XG4gIGNvbnN0IHtsYXllckRhdGEsIGxheWVyfSA9IGNhbGN1bGF0ZUxheWVyRGF0YShuZXdMYXllciwgc3RhdGUsIHVuZGVmaW5lZCk7XG5cbiAgcmV0dXJuIHVwZGF0ZVN0YXRlV2l0aExheWVyQW5kRGF0YShzdGF0ZSwge2xheWVyRGF0YSwgbGF5ZXIsIGlkeH0pO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gc2V0SW5pdGlhbExheWVyQ29uZmlnKGxheWVyLCBkYXRhc2V0cywgbGF5ZXJDbGFzc2VzKTogTGF5ZXIge1xuICBsZXQgbmV3TGF5ZXIgPSBsYXllcjtcbiAgaWYgKCFPYmplY3Qua2V5cyhkYXRhc2V0cykubGVuZ3RoKSB7XG4gICAgLy8gbm8gZGF0YSBpcyBsb2FkZWRcbiAgICByZXR1cm4gbGF5ZXI7XG4gIH1cbiAgaWYgKCFsYXllci5jb25maWcuZGF0YUlkKSB7XG4gICAgLy8gc2V0IGxheWVyIGRhdGFJZFxuICAgIG5ld0xheWVyID0gbGF5ZXIudXBkYXRlTGF5ZXJDb25maWcoe2RhdGFJZDogT2JqZWN0LmtleXMoZGF0YXNldHMpWzBdfSk7XG4gIH1cbiAgY29uc3QgZGF0YXNldCA9IGRhdGFzZXRzW25ld0xheWVyLmNvbmZpZy5kYXRhSWRdO1xuICBpZiAoIWRhdGFzZXQpIHtcbiAgICByZXR1cm4gbGF5ZXI7XG4gIH1cblxuICAvLyBmaW5kIGRlZmF1dCBsYXllciBwcm9wc1xuICBjb25zdCByZXN1bHQgPVxuICAgIHR5cGVvZiBsYXllckNsYXNzZXNbbmV3TGF5ZXIudHlwZV0uZmluZERlZmF1bHRMYXllclByb3BzID09PSAnZnVuY3Rpb24nXG4gICAgICA/IGxheWVyQ2xhc3Nlc1tuZXdMYXllci50eXBlXS5maW5kRGVmYXVsdExheWVyUHJvcHMoZGF0YXNldCwgW10pXG4gICAgICA6IHtwcm9wczogW119O1xuXG4gIC8vIGFuIGFycmF5IG9mIHBvc3NpYmxlIHByb3BzLCB1c2UgMXN0IG9uZVxuICBjb25zdCBwcm9wcyA9IEFycmF5LmlzQXJyYXkocmVzdWx0KSA/IHJlc3VsdCA6IHJlc3VsdC5wcm9wcyB8fCBbXTtcblxuICBpZiAocHJvcHMubGVuZ3RoKSB7XG4gICAgbmV3TGF5ZXIgPSBuZXcgbGF5ZXJDbGFzc2VzW2xheWVyLnR5cGVdKHtcbiAgICAgIC4uLnByb3BzWzBdLFxuICAgICAgbGFiZWw6IG5ld0xheWVyLmNvbmZpZy5sYWJlbCxcbiAgICAgIGRhdGFJZDogbmV3TGF5ZXIuY29uZmlnLmRhdGFJZCxcbiAgICAgIGlzQ29uZmlnQWN0aXZlOiBuZXdMYXllci5jb25maWcuaXNDb25maWdBY3RpdmVcbiAgICB9KTtcbiAgfVxuICByZXR1cm4gdHlwZW9mIG5ld0xheWVyLnNldEluaXRpYWxMYXllckNvbmZpZyA9PT0gJ2Z1bmN0aW9uJ1xuICAgID8gbmV3TGF5ZXIuc2V0SW5pdGlhbExheWVyQ29uZmlnKGRhdGFzZXQpXG4gICAgOiBuZXdMYXllcjtcbn1cbi8qKlxuICogVXBkYXRlIGxheWVyIHR5cGUuIFByZXZpZXdzIGxheWVyIGNvbmZpZyB3aWxsIGJlIGNvcGllZCBpZiBhcHBsaWNhYmxlLlxuICogQG1lbWJlcm9mIHZpc1N0YXRlVXBkYXRlcnNcbiAqIEBwdWJsaWNcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGxheWVyVHlwZUNoYW5nZVVwZGF0ZXIoXG4gIHN0YXRlOiBWaXNTdGF0ZSxcbiAgYWN0aW9uOiBWaXNTdGF0ZUFjdGlvbnMuTGF5ZXJUeXBlQ2hhbmdlVXBkYXRlckFjdGlvblxuKTogVmlzU3RhdGUge1xuICBjb25zdCB7b2xkTGF5ZXIsIG5ld1R5cGV9ID0gYWN0aW9uO1xuICBpZiAoIW9sZExheWVyKSB7XG4gICAgcmV0dXJuIHN0YXRlO1xuICB9XG4gIGNvbnN0IG9sZElkID0gb2xkTGF5ZXIuaWQ7XG4gIGNvbnN0IGlkeCA9IHN0YXRlLmxheWVycy5maW5kSW5kZXgobCA9PiBsLmlkID09PSBvbGRJZCk7XG5cbiAgaWYgKCFzdGF0ZS5sYXllckNsYXNzZXNbbmV3VHlwZV0pIHtcbiAgICBDb25zb2xlLmVycm9yKGAke25ld1R5cGV9IGlzIG5vdCBhIHZhbGlkIGxheWVyIHR5cGVgKTtcbiAgICByZXR1cm4gc3RhdGU7XG4gIH1cbiAgbGV0IG5ld0xheWVyID0gbmV3IHN0YXRlLmxheWVyQ2xhc3Nlc1tuZXdUeXBlXSh7XG4gICAgLy8ga2VlcCBvbGQgbGF5ZXIgbGFibGUgYW5kIGlzQ29uZmlnQWN0aXZlXG4gICAgbGFiZWw6IG9sZExheWVyLmNvbmZpZy5sYWJlbCxcbiAgICBpc0NvbmZpZ0FjdGl2ZTogb2xkTGF5ZXIuY29uZmlnLmlzQ29uZmlnQWN0aXZlLFxuICAgIGRhdGFJZDogb2xkTGF5ZXIuY29uZmlnLmRhdGFJZFxuICB9KTtcblxuICBpZiAoIW9sZExheWVyLnR5cGUpIHtcbiAgICAvLyBpZiBzZXR0aW5nIGxheWVyIHR5cGUgb24gYW4gZW1wdHkgbGF5ZXJcbiAgICBuZXdMYXllciA9IHNldEluaXRpYWxMYXllckNvbmZpZyhuZXdMYXllciwgc3RhdGUuZGF0YXNldHMsIHN0YXRlLmxheWVyQ2xhc3Nlcyk7XG4gIH0gZWxzZSB7XG4gICAgLy8gZ2V0IGEgbWludCBsYXllciwgd2l0aCBuZXcgaWQgYW5kIHR5cGVcbiAgICAvLyBiZWNhdXNlIGRlY2suZ2wgdXNlcyBpZCB0byBtYXRjaCBiZXR3ZWVuIG5ldyBhbmQgb2xkIGxheWVyLlxuICAgIC8vIElmIHR5cGUgaGFzIGNoYW5nZWQgYnV0IGlkIGlzIHRoZSBzYW1lLCBpdCB3aWxsIGJyZWFrXG5cbiAgICBjb25zdCBkZWZhdWx0TGF5ZXJQcm9wcyA9XG4gICAgICB0eXBlb2Ygc3RhdGUubGF5ZXJDbGFzc2VzW25ld1R5cGVdLmZpbmREZWZhdWx0TGF5ZXJQcm9wcyA9PT0gJ2Z1bmN0aW9uJ1xuICAgICAgICA/IHN0YXRlLmxheWVyQ2xhc3Nlc1tuZXdUeXBlXS5maW5kRGVmYXVsdExheWVyUHJvcHMoc3RhdGUuZGF0YXNldHNbbmV3TGF5ZXIuY29uZmlnLmRhdGFJZF0pXG4gICAgICAgIDogbnVsbDtcblxuICAgIG5ld0xheWVyLmFzc2lnbkNvbmZpZ1RvTGF5ZXIoXG4gICAgICBvbGRMYXllci5jb25maWcsXG4gICAgICBvbGRMYXllci52aXNDb25maWdTZXR0aW5ncyxcbiAgICAgIHN0YXRlLmRhdGFzZXRzLFxuICAgICAgZGVmYXVsdExheWVyUHJvcHNcbiAgICApO1xuICAgIG5ld0xheWVyLnVwZGF0ZUxheWVyRG9tYWluKHN0YXRlLmRhdGFzZXRzKTtcbiAgfVxuXG4gIGNvbnN0IHtjbGlja2VkLCBob3ZlckluZm99ID0gc3RhdGU7XG5cbiAgbGV0IG5ld1N0YXRlID0ge1xuICAgIC4uLnN0YXRlLFxuICAgIGNsaWNrZWQ6IG9sZExheWVyLmlzTGF5ZXJIb3ZlcmVkKGNsaWNrZWQpID8gdW5kZWZpbmVkIDogY2xpY2tlZCxcbiAgICBob3ZlckluZm86IG9sZExheWVyLmlzTGF5ZXJIb3ZlcmVkKGhvdmVySW5mbykgPyB1bmRlZmluZWQgOiBob3ZlckluZm9cbiAgfTtcblxuICBjb25zdCB7bGF5ZXJEYXRhLCBsYXllcn0gPSBjYWxjdWxhdGVMYXllckRhdGEobmV3TGF5ZXIsIG5ld1N0YXRlKTtcbiAgbmV3U3RhdGUgPSB1cGRhdGVTdGF0ZVdpdGhMYXllckFuZERhdGEobmV3U3RhdGUsIHtsYXllckRhdGEsIGxheWVyLCBpZHh9KTtcblxuICBpZiAobGF5ZXIuY29uZmlnLmFuaW1hdGlvbi5lbmFibGVkIHx8IG9sZExheWVyLmNvbmZpZy5hbmltYXRpb24uZW5hYmxlZCkge1xuICAgIG5ld1N0YXRlID0gdXBkYXRlQW5pbWF0aW9uRG9tYWluKG5ld1N0YXRlKTtcbiAgfVxuXG4gIC8vIHVwZGF0ZSBzcGxpdE1hcCBsYXllciBpZFxuICBpZiAoc3RhdGUuc3BsaXRNYXBzLmxlbmd0aCkge1xuICAgIG5ld1N0YXRlID0ge1xuICAgICAgLi4ubmV3U3RhdGUsXG4gICAgICBzcGxpdE1hcHM6IG5ld1N0YXRlLnNwbGl0TWFwcy5tYXAoc2V0dGluZ3MgPT4ge1xuICAgICAgICBjb25zdCB7W29sZElkXTogb2xkTGF5ZXJNYXAsIC4uLm90aGVyTGF5ZXJzfSA9IHNldHRpbmdzLmxheWVycztcbiAgICAgICAgcmV0dXJuIG9sZElkIGluIHNldHRpbmdzLmxheWVyc1xuICAgICAgICAgID8ge1xuICAgICAgICAgICAgICAuLi5zZXR0aW5ncyxcbiAgICAgICAgICAgICAgbGF5ZXJzOiB7XG4gICAgICAgICAgICAgICAgLi4ub3RoZXJMYXllcnMsXG4gICAgICAgICAgICAgICAgW2xheWVyLmlkXTogb2xkTGF5ZXJNYXBcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICAgIDogc2V0dGluZ3M7XG4gICAgICB9KVxuICAgIH07XG4gIH1cblxuICAvLyB1cGRhdGUgbGF5ZXJPcmRlciB3aXRoIG5ldyBpZFxuICBuZXdTdGF0ZSA9IHtcbiAgICAuLi5uZXdTdGF0ZSxcbiAgICBsYXllck9yZGVyOiBuZXdTdGF0ZS5sYXllck9yZGVyLm1hcChsYXllcklkID0+XG4gICAgICBsYXllcklkID09PSBvbGRMYXllci5pZCA/IG5ld0xheWVyLmlkIDogbGF5ZXJJZFxuICAgIClcbiAgfTtcblxuICByZXR1cm4gbmV3U3RhdGU7XG59XG5cbi8qKlxuICogVXBkYXRlIGxheWVyIHZpc3VhbCBjaGFubmVsXG4gKiBAbWVtYmVyb2YgdmlzU3RhdGVVcGRhdGVyc1xuICogQHJldHVybnMge09iamVjdH0gbmV4dFN0YXRlXG4gKiBAcHVibGljXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBsYXllclZpc3VhbENoYW5uZWxDaGFuZ2VVcGRhdGVyKFxuICBzdGF0ZTogVmlzU3RhdGUsXG4gIGFjdGlvbjogVmlzU3RhdGVBY3Rpb25zLkxheWVyVmlzdWFsQ2hhbm5lbENvbmZpZ0NoYW5nZVVwZGF0ZXJBY3Rpb25cbik6IFZpc1N0YXRlIHtcbiAgY29uc3Qge29sZExheWVyLCBuZXdDb25maWcsIG5ld1Zpc0NvbmZpZywgY2hhbm5lbH0gPSBhY3Rpb247XG4gIGlmICghb2xkTGF5ZXIuY29uZmlnLmRhdGFJZCkge1xuICAgIHJldHVybiBzdGF0ZTtcbiAgfVxuXG4gIGNvbnN0IGRhdGFzZXQgPSBzdGF0ZS5kYXRhc2V0c1tvbGRMYXllci5jb25maWcuZGF0YUlkXTtcblxuICBjb25zdCBpZHggPSBzdGF0ZS5sYXllcnMuZmluZEluZGV4KGwgPT4gbC5pZCA9PT0gb2xkTGF5ZXIuaWQpO1xuICBsZXQgbmV3TGF5ZXIgPSBvbGRMYXllci51cGRhdGVMYXllckNvbmZpZyhuZXdDb25maWcpO1xuICBpZiAobmV3VmlzQ29uZmlnKSBuZXdMYXllciA9IG5ld0xheWVyLnVwZGF0ZUxheWVyVmlzQ29uZmlnKG5ld1Zpc0NvbmZpZyk7XG5cbiAgbmV3TGF5ZXIudXBkYXRlTGF5ZXJWaXN1YWxDaGFubmVsKGRhdGFzZXQsIGNoYW5uZWwpO1xuXG4gIC8vIGNhbGxpbmcgdXBkYXRlIGFuaW1hdGlvbiBkb21haW4gZmlyc3QgdG8gbWVyZ2UgYWxsIGxheWVyIGFuaW1hdGlvbiBkb21haW5cbiAgbGV0IHVwZGF0ZWRTdGF0ZSA9IHVwZGF0ZUFuaW1hdGlvbkRvbWFpbihzdGF0ZSk7XG5cbiAgY29uc3QgdmlzdWFsQ2hhbm5lbCA9IG9sZExheWVyLnZpc3VhbENoYW5uZWxzW2NoYW5uZWxdO1xuICBpZiAodmlzdWFsQ2hhbm5lbD8uY2hhbm5lbFNjYWxlVHlwZSA9PT0gQ0hBTk5FTF9TQ0FMRVMuY29sb3IgJiYgbmV3Q29uZmlnW3Zpc3VhbENoYW5uZWwuZmllbGRdKSB7XG4gICAgLy8gaWYgY29sb3IgZmllbGQgY2hhbmdlZCwgc2V0IGN1c3RvbUJyZWFrcyB0byBmYWxzZVxuICAgIG5ld0xheWVyLnVwZGF0ZUxheWVyQ29sb3JVSSh2aXN1YWxDaGFubmVsLnJhbmdlLCB7XG4gICAgICBjb2xvclJhbmdlQ29uZmlnOiB7XG4gICAgICAgIC4uLm5ld0xheWVyLmNvbmZpZy5jb2xvclVJW3Zpc3VhbENoYW5uZWwucmFuZ2VdLmNvbG9yUmFuZ2VDb25maWcsXG4gICAgICAgIGN1c3RvbUJyZWFrczogZmFsc2VcbiAgICAgIH1cbiAgICB9KTtcblxuICAgIHVwZGF0ZWRTdGF0ZSA9IHtcbiAgICAgIC4uLnVwZGF0ZWRTdGF0ZSxcbiAgICAgIGxheWVyczogdXBkYXRlZFN0YXRlLmxheWVycy5tYXAobCA9PiAobC5pZCA9PT0gb2xkTGF5ZXIuaWQgPyBuZXdMYXllciA6IGwpKVxuICAgIH07XG4gIH1cblxuICBjb25zdCBvbGRMYXllckRhdGEgPSB1cGRhdGVkU3RhdGUubGF5ZXJEYXRhW2lkeF07XG4gIGNvbnN0IHtsYXllckRhdGEsIGxheWVyfSA9IGNhbGN1bGF0ZUxheWVyRGF0YShuZXdMYXllciwgdXBkYXRlZFN0YXRlLCBvbGRMYXllckRhdGEpO1xuXG4gIGlmIChcbiAgICB2aXN1YWxDaGFubmVsPy5jaGFubmVsU2NhbGVUeXBlID09PSBDSEFOTkVMX1NDQUxFUy5jb2xvciAmJlxuICAgIG5ld0NvbmZpZ1t2aXN1YWxDaGFubmVsPy5zY2FsZV0gPT09IFNDQUxFX1RZUEVTLmN1c3RvbU9yZGluYWwgJiZcbiAgICAhbmV3VmlzQ29uZmlnXG4gICkge1xuICAgIC8vIHdoZW4gc3dpdGNoaW5nIHRvIGN1c3RvbU9yZGluYWwgc2NhbGUsIGNyZWF0ZSBhIGN1c3RvbVBhbGV0dGUgaW4gY29sb3JVSSB3aXRoIHVwZGF0ZWQgY29sb3JEb21haW5cbiAgICBjb25zdCBjdXN0b21QYWxldHRlID0gaW5pdEN1c3RvbVBhbGV0dGVCeUN1c3RvbVNjYWxlKHtcbiAgICAgIHNjYWxlOiBTQ0FMRV9UWVBFUy5jdXN0b21PcmRpbmFsLFxuICAgICAgZmllbGQ6IGxheWVyLmNvbmZpZ1t2aXN1YWxDaGFubmVsLmZpZWxkXSxcbiAgICAgIG9yZGluYWxEb21haW46IGxheWVyLmNvbmZpZ1tsYXllci52aXN1YWxDaGFubmVsc1tjaGFubmVsXS5kb21haW5dLFxuICAgICAgcmFuZ2U6IGxheWVyLmNvbmZpZy52aXNDb25maWdbdmlzdWFsQ2hhbm5lbC5yYW5nZV0sXG4gICAgICBjb2xvckJyZWFrczogbnVsbFxuICAgIH0pO1xuICAgIC8vIHVwZGF0ZSBjb2xvclJhbmdlIHdpdGggbmV3IGN1c3RvbVBhbGV0dGVcbiAgICBsYXllci51cGRhdGVMYXllckNvbG9yVUkodmlzdWFsQ2hhbm5lbC5yYW5nZSwge1xuICAgICAgc2hvd0NvbG9yQ2hhcnQ6IHRydWUsXG4gICAgICBjb2xvclJhbmdlQ29uZmlnOiB7XG4gICAgICAgIC4uLmxheWVyLmNvbmZpZy5jb2xvclVJW3Zpc3VhbENoYW5uZWwucmFuZ2VdLmNvbG9yUmFuZ2VDb25maWcsXG4gICAgICAgIGN1c3RvbUJyZWFrczogdHJ1ZVxuICAgICAgfSxcbiAgICAgIGN1c3RvbVBhbGV0dGVcbiAgICB9KTtcbiAgfVxuICByZXR1cm4gdXBkYXRlU3RhdGVXaXRoTGF5ZXJBbmREYXRhKHVwZGF0ZWRTdGF0ZSwge2xheWVyRGF0YSwgbGF5ZXIsIGlkeH0pO1xufVxuXG4vKipcbiAqIFVwZGF0ZSBsYXllciBgdmlzQ29uZmlnYFxuICogQG1lbWJlcm9mIHZpc1N0YXRlVXBkYXRlcnNcbiAqIEBwdWJsaWNcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGxheWVyVmlzQ29uZmlnQ2hhbmdlVXBkYXRlcihcbiAgc3RhdGU6IFZpc1N0YXRlLFxuICBhY3Rpb246IFZpc1N0YXRlQWN0aW9ucy5MYXllclZpc0NvbmZpZ0NoYW5nZVVwZGF0ZXJBY3Rpb25cbik6IFZpc1N0YXRlIHtcbiAgY29uc3Qge29sZExheWVyfSA9IGFjdGlvbjtcbiAgY29uc3QgaWR4ID0gc3RhdGUubGF5ZXJzLmZpbmRJbmRleChsID0+IGwuaWQgPT09IG9sZExheWVyLmlkKTtcbiAgY29uc3QgcHJvcHMgPSBPYmplY3Qua2V5cyhhY3Rpb24ubmV3VmlzQ29uZmlnKTtcblxuICBjb25zdCBuZXdWaXNDb25maWcgPSB7XG4gICAgLi4ub2xkTGF5ZXIuY29uZmlnLnZpc0NvbmZpZyxcbiAgICAuLi5hY3Rpb24ubmV3VmlzQ29uZmlnXG4gIH07XG5cbiAgY29uc3QgbmV3TGF5ZXIgPSBvbGRMYXllci51cGRhdGVMYXllckNvbmZpZyh7dmlzQ29uZmlnOiBuZXdWaXNDb25maWd9KTtcblxuICBpZiAobmV3TGF5ZXIuc2hvdWxkQ2FsY3VsYXRlTGF5ZXJEYXRhKHByb3BzKSkge1xuICAgIGNvbnN0IG9sZExheWVyRGF0YSA9IHN0YXRlLmxheWVyRGF0YVtpZHhdO1xuICAgIGNvbnN0IHtsYXllckRhdGEsIGxheWVyfSA9IGNhbGN1bGF0ZUxheWVyRGF0YShuZXdMYXllciwgc3RhdGUsIG9sZExheWVyRGF0YSk7XG4gICAgcmV0dXJuIHVwZGF0ZVN0YXRlV2l0aExheWVyQW5kRGF0YShzdGF0ZSwge2xheWVyRGF0YSwgbGF5ZXIsIGlkeH0pO1xuICB9XG5cbiAgcmV0dXJuIHVwZGF0ZVN0YXRlV2l0aExheWVyQW5kRGF0YShzdGF0ZSwge2xheWVyOiBuZXdMYXllciwgaWR4fSk7XG59XG5cbi8qKlxuICogUmVzZXQgYW5pbWF0aW9uIGNvbmZpZyBjdXJyZW50IHRpbWUgdG8gYSBzcGVjaWZpZWQgdmFsdWVcbiAqIEBtZW1iZXJvZiB2aXNTdGF0ZVVwZGF0ZXJzXG4gKiBAcHVibGljXG4gKlxuICovXG5leHBvcnQgY29uc3Qgc2V0TGF5ZXJBbmltYXRpb25UaW1lVXBkYXRlciA9IDxTIGV4dGVuZHMgVmlzU3RhdGU+KFxuICBzdGF0ZTogUyxcbiAge3ZhbHVlfTogVmlzU3RhdGVBY3Rpb25zLlNldExheWVyQW5pbWF0aW9uVGltZVVwZGF0ZXJBY3Rpb25cbik6IFMgPT4ge1xuICBjb25zdCBjdXJyZW50VGltZSA9IEFycmF5LmlzQXJyYXkodmFsdWUpID8gdmFsdWVbMF0gOiB2YWx1ZTtcbiAgY29uc3QgbmV4dFN0YXRlID0ge1xuICAgIC4uLnN0YXRlLFxuICAgIGFuaW1hdGlvbkNvbmZpZzoge1xuICAgICAgLi4uc3RhdGUuYW5pbWF0aW9uQ29uZmlnLFxuICAgICAgY3VycmVudFRpbWVcbiAgICB9XG4gIH07XG4gIC8vIHVwZGF0ZSBhbmltYXRpb24gY29uZmlnIGZvciBlYWNoIGxheWVyXG4gIHJldHVybiBzdGF0ZS5sYXllcnMucmVkdWNlKChhY2N1LCBsKSA9PiB7XG4gICAgaWYgKGwuY29uZmlnLmFuaW1hdGlvbi5lbmFibGVkICYmIGwudHlwZSAhPT0gJ3RyaXAnKSB7XG4gICAgICByZXR1cm4gbGF5ZXJBbmltYXRpb25DaGFuZ2VVcGRhdGVyKGFjY3UsIHtvbGRMYXllcjogbCwgcHJvcDogJ2N1cnJlbnRUaW1lJywgY3VycmVudFRpbWV9KTtcbiAgICB9XG4gICAgcmV0dXJuIGFjY3U7XG4gIH0sIG5leHRTdGF0ZSk7XG59O1xuXG4vKipcbiAqIFVwZGF0ZSBmaWx0ZXIgcHJvcGVydHlcbiAqIEBtZW1iZXJvZiB2aXNTdGF0ZVVwZGF0ZXJzXG4gKiBAcHVibGljXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBzZXRGaWx0ZXJBbmltYXRpb25UaW1lVXBkYXRlcihcbiAgc3RhdGU6IFZpc1N0YXRlLFxuICBhY3Rpb246IFZpc1N0YXRlQWN0aW9ucy5TZXRGaWx0ZXJBbmltYXRpb25UaW1lVXBkYXRlckFjdGlvblxuKTogVmlzU3RhdGUge1xuICByZXR1cm4gc2V0RmlsdGVyVXBkYXRlcihzdGF0ZSwgYWN0aW9uKTtcbn1cblxuLyoqXG4gKiBVcGRhdGUgZmlsdGVyIGFuaW1hdGlvbiB3aW5kb3dcbiAqIEBtZW1iZXJvZiB2aXNTdGF0ZVVwZGF0ZXJzXG4gKiBAcHVibGljXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBzZXRGaWx0ZXJBbmltYXRpb25XaW5kb3dVcGRhdGVyPFMgZXh0ZW5kcyBWaXNTdGF0ZT4oXG4gIHN0YXRlOiBTLFxuICB7aWQsIGFuaW1hdGlvbldpbmRvd306IFZpc1N0YXRlQWN0aW9ucy5TZXRGaWx0ZXJBbmltYXRpb25XaW5kb3dVcGRhdGVyQWN0aW9uXG4pOiBTIHtcbiAgY29uc3QgZmlsdGVyID0gc3RhdGUuZmlsdGVycy5maW5kKGYgPT4gZi5pZCA9PT0gaWQpO1xuXG4gIGlmICghZmlsdGVyKSB7XG4gICAgcmV0dXJuIHN0YXRlO1xuICB9XG5cbiAgY29uc3QgbmV3RmlsdGVyID0ge1xuICAgIC4uLmZpbHRlcixcbiAgICBhbmltYXRpb25XaW5kb3dcbiAgfTtcblxuICBjb25zdCBuZXdTdGF0ZSA9IHtcbiAgICAuLi5zdGF0ZSxcbiAgICBmaWx0ZXJzOiBzd2FwXzxGaWx0ZXI+KG5ld0ZpbHRlcikoc3RhdGUuZmlsdGVycylcbiAgfTtcblxuICBjb25zdCBuZXdTeW5jVGltZWxpbmVNb2RlID0gZ2V0U3luY0FuaW1hdGlvbk1vZGUobmV3RmlsdGVyIGFzIFRpbWVSYW5nZUZpbHRlcik7XG5cbiAgcmV0dXJuIHNldFRpbWVGaWx0ZXJUaW1lbGluZU1vZGVVcGRhdGVyKG5ld1N0YXRlLCB7aWQsIG1vZGU6IG5ld1N5bmNUaW1lbGluZU1vZGV9KTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGFwcGx5RmlsdGVyQ29uZmlnVXBkYXRlcihcbiAgc3RhdGU6IFZpc1N0YXRlLFxuICBhY3Rpb246IFZpc1N0YXRlQWN0aW9ucy5BcHBseUZpbHRlckNvbmZpZ1VwZGF0ZXJBY3Rpb25cbik6IFZpc1N0YXRlIHtcbiAgY29uc3Qge2ZpbHRlcklkLCBuZXdGaWx0ZXJ9ID0gYWN0aW9uO1xuICBjb25zdCBvbGRGaWx0ZXIgPSBzdGF0ZS5maWx0ZXJzLmZpbmQoZiA9PiBmLmlkID09PSBmaWx0ZXJJZCk7XG4gIGlmICghb2xkRmlsdGVyKSB7XG4gICAgcmV0dXJuIHN0YXRlO1xuICB9XG5cbiAgLy8gU2VyaWFsaXplIHRoZSBmaWx0ZXJzIHRvIG9ubHkgY29tcGFyZSB0aGUgc2F2ZWQgcHJvcGVydGllc1xuICBjb25zdCBzZXJpYWxpemVkT2xkRmlsdGVyID0gc2VyaWFsaXplRmlsdGVyKG9sZEZpbHRlciwgc3RhdGUuc2NoZW1hKSA/PyB7Y29uZmlnOiB7fX07XG4gIGNvbnN0IHNlcmlhbGl6ZWROZXdGaWx0ZXIgPSBzZXJpYWxpemVGaWx0ZXIobmV3RmlsdGVyLCBzdGF0ZS5zY2hlbWEpO1xuICBpZiAoIXNlcmlhbGl6ZWROZXdGaWx0ZXIgfHwgaXNFcXVhbChzZXJpYWxpemVkT2xkRmlsdGVyLCBzZXJpYWxpemVkTmV3RmlsdGVyKSkge1xuICAgIHJldHVybiBzdGF0ZTtcbiAgfVxuXG4gIC8vIElmIHRoZXJlIGFyZSBhbnkgY2hhbmdlcyB0byB0aGUgZmlsdGVyLCBhcHBseSB0aGVtXG4gIGNvbnN0IGNoYW5nZWQgPSBwaWNrQ2hhbmdlZFByb3BzKHNlcmlhbGl6ZWRPbGRGaWx0ZXIsIHNlcmlhbGl6ZWROZXdGaWx0ZXIpO1xuICBkZWxldGUgY2hhbmdlZFsnaWQnXTsgLy8gaWQgc2hvdWxkIG5vdCBiZSBjaGFuZ2VkXG5cbiAgY29uc3QgZmlsdGVySW5kZXggPSBzdGF0ZS5maWx0ZXJzLmZpbmRJbmRleChmID0+IGYuaWQgPT09IGZpbHRlcklkKTtcbiAgaWYgKGZpbHRlckluZGV4IDwgMCkge1xuICAgIHJldHVybiBzdGF0ZTtcbiAgfVxuICByZXR1cm4gc2V0RmlsdGVyVXBkYXRlcihcbiAgICBzdGF0ZSxcbiAgICBzZXRGaWx0ZXIoZmlsdGVySW5kZXgsIE9iamVjdC5rZXlzKGNoYW5nZWQpLCBPYmplY3QudmFsdWVzKGNoYW5nZWQpKVxuICApO1xufVxuXG4vKipcbiAqIFVwZGF0ZSBmaWx0ZXIgcHJvcGVydHlcbiAqIEBtZW1iZXJvZiB2aXNTdGF0ZVVwZGF0ZXJzXG4gKiBAcHVibGljXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBzZXRGaWx0ZXJVcGRhdGVyPFMgZXh0ZW5kcyBWaXNTdGF0ZT4oXG4gIHN0YXRlOiBTLFxuICBhY3Rpb246IFZpc1N0YXRlQWN0aW9ucy5TZXRGaWx0ZXJVcGRhdGVyQWN0aW9uXG4pOiBTIHtcbiAgY29uc3Qge2lkeCwgdmFsdWVJbmRleCA9IDB9ID0gYWN0aW9uO1xuICBjb25zdCBvbGRGaWx0ZXIgPSBzdGF0ZS5maWx0ZXJzW2lkeF07XG4gIGlmICghb2xkRmlsdGVyKSB7XG4gICAgQ29uc29sZS5lcnJvcihgZmlsdGVycy4ke2lkeH0gaXMgdW5kZWZpbmVkYCk7XG4gICAgcmV0dXJuIHN0YXRlO1xuICB9XG4gIGlmIChcbiAgICBBcnJheS5pc0FycmF5KGFjdGlvbi5wcm9wKSAmJlxuICAgICghQXJyYXkuaXNBcnJheShhY3Rpb24udmFsdWUpIHx8IGFjdGlvbi5wcm9wLmxlbmd0aCAhPT0gYWN0aW9uLnZhbHVlLmxlbmd0aClcbiAgKSB7XG4gICAgQ29uc29sZS5lcnJvcignRXhwZWN0aW5nIHZhbHVlIHRvIGJlIGFuIGFycmF5IG9mIHRoZSBzYW1lIGxlbmd0aCwgc2luY2UgcHJvcCBpcyBhbiBhcnJheScpO1xuICAgIHJldHVybiBzdGF0ZTtcbiAgfVxuICAvLyBjb252ZXJ0IHByb3AgYW5kIHZhbHVlIHRvIGFycmF5XG4gIGNvbnN0IHByb3BzID0gdG9BcnJheShhY3Rpb24ucHJvcCk7XG4gIGNvbnN0IHZhbHVlcyA9IEFycmF5LmlzQXJyYXkoYWN0aW9uLnByb3ApID8gdG9BcnJheShhY3Rpb24udmFsdWUpIDogW2FjdGlvbi52YWx1ZV07XG5cbiAgbGV0IG5ld0ZpbHRlciA9IG9sZEZpbHRlcjtcbiAgbGV0IG5ld1N0YXRlID0gc3RhdGU7XG5cbiAgbGV0IGRhdGFzZXRJZHNUb0ZpbHRlcjogc3RyaW5nW10gPSBbXTtcbiAgZm9yIChsZXQgaSA9IDA7IGkgPCBwcm9wcy5sZW5ndGg7IGkrKykge1xuICAgIGNvbnN0IHByb3AgPSBwcm9wc1tpXTtcbiAgICBjb25zdCB2YWx1ZSA9IHZhbHVlc1tpXTtcbiAgICAvLyBXZSBjdXJyZW50bHkgZG8gbm90IHN1cHBvcnQgcGFzc2luZyBpbiBuYW1lIGFzIGFuIGFycmF5IGludG8gX3VwZGF0ZUZpbHRlclByb3AsIHNvIHdlIGNhbGwgaXQgbXVsdGlwbGUgdGltZXMgd2l0aCBlYWNoIG5hbWVcbiAgICAvLyBTZWUgdGhlIGNvbW1lbnQgaW4gdGhlcmUgYXMgdG8gd2hhdCBzaG91bGQgYmUgYWRkcmVzc2VkXG4gICAgbGV0IHJlcztcbiAgICBpZiAocHJvcCA9PT0gJ25hbWUnICYmIEFycmF5LmlzQXJyYXkodmFsdWUpKSB7XG4gICAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgbm8tbG9vcC1mdW5jXG4gICAgICByZXMgPSB2YWx1ZS5yZWR1Y2UoKGFjY3UsIHYpID0+IHtcbiAgICAgICAgcmV0dXJuIF91cGRhdGVGaWx0ZXJQcm9wKGFjY3UsIG5ld0ZpbHRlciwgcHJvcCwgdiwgdmFsdWVJbmRleCk7XG4gICAgICB9LCBuZXdTdGF0ZSk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHJlcyA9IF91cGRhdGVGaWx0ZXJQcm9wKG5ld1N0YXRlLCBuZXdGaWx0ZXIsIHByb3AsIHZhbHVlLCB2YWx1ZUluZGV4KTtcbiAgICB9XG4gICAgbmV3RmlsdGVyID0gcmVzLmZpbHRlcjtcbiAgICBuZXdTdGF0ZSA9IHJlcy5zdGF0ZTtcbiAgICBkYXRhc2V0SWRzVG9GaWx0ZXIgPSBkYXRhc2V0SWRzVG9GaWx0ZXIuY29uY2F0KHJlcy5kYXRhc2V0SWRzVG9GaWx0ZXIpO1xuICB9XG5cbiAgY29uc3QgZW5sYXJnZWRGaWx0ZXIgPSBzdGF0ZS5maWx0ZXJzLmZpbmQoZiA9PiBmLnZpZXcgPT09IEZJTFRFUl9WSUVXX1RZUEVTLmVubGFyZ2VkKTtcblxuICBpZiAoZW5sYXJnZWRGaWx0ZXIgJiYgZW5sYXJnZWRGaWx0ZXIuaWQgIT09IG5ld0ZpbHRlci5pZCkge1xuICAgIC8vIHRoZXJlIHNob3VsZCBiZSBvbmx5IG9uZSBlbmxhcmdlZCBmaWx0ZXJcbiAgICBuZXdGaWx0ZXIudmlldyA9IEZJTFRFUl9WSUVXX1RZUEVTLnNpZGU7XG4gIH1cblxuICAvLyBzYXZlIG5ldyBmaWx0ZXJzIHRvIG5ld1N0YXRlXG4gIG5ld1N0YXRlID0gc2V0KFsnZmlsdGVycycsIGlkeF0sIG5ld0ZpbHRlciwgbmV3U3RhdGUpO1xuXG4gIC8vIGZpbHRlciBkYXRhXG4gIGNvbnN0IGZpbHRlcmVkRGF0YXNldHMgPSBhcHBseUZpbHRlcnNUb0RhdGFzZXRzKFxuICAgIHVuaXEoZGF0YXNldElkc1RvRmlsdGVyKSxcbiAgICBuZXdTdGF0ZS5kYXRhc2V0cyxcbiAgICBuZXdTdGF0ZS5maWx0ZXJzLFxuICAgIG5ld1N0YXRlLmxheWVyc1xuICApO1xuXG4gIG5ld1N0YXRlID0gc2V0KFsnZGF0YXNldHMnXSwgZmlsdGVyZWREYXRhc2V0cywgbmV3U3RhdGUpO1xuXG4gIC8vIG5lZWQgdG8gdXBkYXRlIGZpbHRlclBsb3QgYWZ0ZXIgZmlsdGVyIERhdGFzZXQgZm9yIHBsb3QgdG8gdXBkYXRlIG9uIGZpbHRlcmVkIHJlc3VsdFxuICBjb25zdCBmaWx0ZXJXaXRoUExvdCA9IHVwZGF0ZUZpbHRlclBsb3QobmV3U3RhdGUuZGF0YXNldHMsIG5ld1N0YXRlLmZpbHRlcnNbaWR4XSk7XG5cbiAgbmV3U3RhdGUgPSBzZXQoWydmaWx0ZXJzJywgaWR4XSwgZmlsdGVyV2l0aFBMb3QsIG5ld1N0YXRlKTtcblxuICAvLyBkYXRhSWQgaXMgYW4gYXJyYXlcbiAgLy8gcGFzcyBvbmx5IHRoZSBkYXRhc2V0IHdlIG5lZWQgdG8gdXBkYXRlXG4gIG5ld1N0YXRlID0gdXBkYXRlQWxsTGF5ZXJEb21haW5EYXRhKG5ld1N0YXRlLCBkYXRhc2V0SWRzVG9GaWx0ZXIsIG5ld0ZpbHRlcik7XG5cbiAgLy8gSWYgdGltZSByYW5nZSBmaWx0ZXIgdmFsdWUgd2FzIHVwZGF0ZWQsIGFkanVzdCBhbmltYXRpb24gY29uZmlnXG4gIGlmIChuZXdGaWx0ZXIudHlwZSA9PT0gRklMVEVSX1RZUEVTLnRpbWVSYW5nZSAmJiBwcm9wcy5pbmNsdWRlcygndmFsdWUnKSkge1xuICAgIG5ld1N0YXRlID0gYWRqdXN0QW5pbWF0aW9uQ29uZmlnV2l0aEZpbHRlcihuZXdTdGF0ZSwgYWN0aW9uLmlkeCk7XG4gIH1cblxuICByZXR1cm4gbmV3U3RhdGU7XG59XG5cbmZ1bmN0aW9uIF91cGRhdGVGaWx0ZXJEYXRhSWRBdFZhbHVlSW5kZXgoZmlsdGVyLCB2YWx1ZUluZGV4LCB2YWx1ZSwgZGF0YXNldHMpIHtcbiAgbGV0IG5ld0ZpbHRlciA9IGZpbHRlcjtcbiAgaWYgKGZpbHRlci5kYXRhSWRbdmFsdWVJbmRleF0pIHtcbiAgICAvLyBpZiBkYXRhSWQgYWxyZWFkeSBleGlzdFxuICAgIG5ld0ZpbHRlciA9IF9yZW1vdmVGaWx0ZXJEYXRhSWRBdFZhbHVlSW5kZXgoZmlsdGVyLCB2YWx1ZUluZGV4LCBkYXRhc2V0cyk7XG4gIH1cbiAgaWYgKHZhbHVlKSB7XG4gICAgY29uc3QgbmV4dFZhbHVlID0gbmV3RmlsdGVyLmRhdGFJZC5zbGljZSgpO1xuICAgIG5leHRWYWx1ZVt2YWx1ZUluZGV4XSA9IHZhbHVlO1xuICAgIG5ld0ZpbHRlciA9IHNldChbJ2RhdGFJZCddLCBuZXh0VmFsdWUsIG5ld0ZpbHRlcik7XG4gIH1cbiAgcmV0dXJuIG5ld0ZpbHRlcjtcbn1cblxuZnVuY3Rpb24gX3JlbW92ZUZpbHRlckRhdGFJZEF0VmFsdWVJbmRleChmaWx0ZXIsIHZhbHVlSW5kZXgsIGRhdGFzZXRzKSB7XG4gIGNvbnN0IGRhdGFJZCA9IGZpbHRlci5kYXRhSWRbdmFsdWVJbmRleF07XG5cbiAgaWYgKGZpbHRlci5kYXRhSWQubGVuZ3RoID09PSAxICYmIHZhbHVlSW5kZXggPT09IDApIHtcbiAgICAvLyBpZiByZW1vdmUgdGhlIG9ubHkgZGF0YUlkLCBjcmVhdGUgYW4gZW1wdHkgZmlsdGVyIGluc3RlYWQ7XG4gICAgcmV0dXJuIGdldERlZmF1bHRGaWx0ZXIoe2lkOiBmaWx0ZXIuaWR9KTtcbiAgfVxuXG4gIGlmIChkYXRhSWQpIHtcbiAgICBmaWx0ZXIgPSByZW1vdmVGaWx0ZXJQbG90KGZpbHRlciwgZGF0YUlkKTtcbiAgfVxuXG4gIGZvciAoY29uc3QgcHJvcCBvZiBbJ2RhdGFJZCcsICduYW1lJywgJ2ZpZWxkSWR4JywgJ2dwdUNoYW5uZWwnXSkge1xuICAgIGlmIChBcnJheS5pc0FycmF5KGZpbHRlcltwcm9wXSkpIHtcbiAgICAgIGNvbnN0IG5leHRWYWwgPSBmaWx0ZXJbcHJvcF0uc2xpY2UoKTtcbiAgICAgIG5leHRWYWwuc3BsaWNlKHZhbHVlSW5kZXgsIDEpO1xuICAgICAgZmlsdGVyID0gc2V0KFtwcm9wXSwgbmV4dFZhbCwgZmlsdGVyKTtcbiAgICB9XG4gIH1cblxuICAvLyBtZXJnZUZpZWxkRG9tYWluIGZvciB0aGUgcmVtYWluaW5nIGZpZWxkc1xuICBjb25zdCBkb21haW5TdGVwcyA9IG1lcmdlRmlsdGVyRG9tYWluKGZpbHRlciwgZGF0YXNldHMpO1xuXG4gIGNvbnN0IG5leHRGaWx0ZXIgPSB7XG4gICAgLi4uZmlsdGVyLFxuICAgIC8vIHZhbHVlOiBuZXh0VmFsdWUsXG4gICAgLi4uKGRvbWFpblN0ZXBzID8ge2RvbWFpbjogZG9tYWluU3RlcHM/LmRvbWFpbiwgc3RlcDogZG9tYWluU3RlcHM/LnN0ZXB9IDoge30pXG4gIH07XG5cbiAgY29uc3QgbmV4dFZhbHVlID0gYWRqdXN0VmFsdWVUb0ZpbHRlckRvbWFpbihuZXh0RmlsdGVyLnZhbHVlLCBuZXh0RmlsdGVyKTtcbiAgcmV0dXJuIHtcbiAgICAuLi5uZXh0RmlsdGVyLFxuICAgIHZhbHVlOiBuZXh0VmFsdWVcbiAgfTtcbn1cblxuLyoqICpcbiAqIFVwZGF0ZXMgYSBzaW5nbGUgcHJvcGVydHkgb2YgYSBmaWx0ZXJcbiAqL1xuZnVuY3Rpb24gX3VwZGF0ZUZpbHRlclByb3Aoc3RhdGUsIGZpbHRlciwgcHJvcCwgdmFsdWUsIHZhbHVlSW5kZXgsIGRhdGFzZXRJZHM/KSB7XG4gIGxldCBkYXRhc2V0SWRzVG9GaWx0ZXI6IHN0cmluZ1tdID0gW107XG4gIHN3aXRjaCAocHJvcCkge1xuICAgIC8vIFRPRE86IE5leHQgUFIgZm9yIFVJIGlmIHdlIHVwZGF0ZSBmaWx0ZXJEYXRhSWQsIHdlIG5lZWQgdG8gY29uc2lkZXIgdHdvIGNhc2VzOlxuICAgIC8vIDEuIGRhdGFJZCBpcyBlbXB0eTogY3JlYXRlIGEgZGVmYXVsdCBmaWx0ZXJcbiAgICAvLyAyLiBBZGQgYSBuZXcgZGF0YXNldCBpZFxuICAgIGNhc2UgRklMVEVSX1VQREFURVJfUFJPUFMuZGF0YUlkOiB7XG4gICAgICBjb25zdCBvbGREYXRhSWQgPSBbLi4uZmlsdGVyLmRhdGFJZF07XG4gICAgICBmaWx0ZXIgPSBfdXBkYXRlRmlsdGVyRGF0YUlkQXRWYWx1ZUluZGV4KGZpbHRlciwgdmFsdWVJbmRleCwgdmFsdWUsIHN0YXRlLmRhdGFzZXRzKTtcbiAgICAgIGRhdGFzZXRJZHNUb0ZpbHRlciA9IHVuaXEoWy4uLm9sZERhdGFJZCwgLi4uZmlsdGVyLmRhdGFJZF0pO1xuICAgICAgYnJlYWs7XG4gICAgfVxuICAgIGNhc2UgRklMVEVSX1VQREFURVJfUFJPUFMubmFtZToge1xuICAgICAgLy8gd2UgYXJlIHN1cHBvcnRpbmcgdGhlIGN1cnJlbnQgZnVuY3Rpb25hbGl0eVxuICAgICAgLy8gVE9ETzogTmV4dCBQUiBmb3IgVUkgZmlsdGVyIG5hbWUgd2lsbCBvbmx5IHVwZGF0ZSBmaWx0ZXIgbmFtZSBidXQgaXQgd29uJ3QgaGF2ZSBzaWRlIGVmZmVjdHNcbiAgICAgIC8vIHdlIGFyZSBnb25uYSB1c2UgcGFpciBvZiBkYXRhc2V0cyBhbmQgZmllbGRJZHggdG8gdXBkYXRlIHRoZSBmaWx0ZXJcbiAgICAgIGNvbnN0IGRhdGFzZXRJZCA9IGZpbHRlci5kYXRhSWRbdmFsdWVJbmRleF07XG4gICAgICBjb25zdCB7ZmlsdGVyOiB1cGRhdGVkRmlsdGVyLCBkYXRhc2V0OiBuZXdEYXRhc2V0fSA9IGFwcGx5RmlsdGVyRmllbGROYW1lKFxuICAgICAgICBmaWx0ZXIsXG4gICAgICAgIHN0YXRlLmRhdGFzZXRzLFxuICAgICAgICBkYXRhc2V0SWQsXG4gICAgICAgIHZhbHVlLFxuICAgICAgICB2YWx1ZUluZGV4LFxuICAgICAgICB7bWVyZ2VEb21haW46IHZhbHVlSW5kZXggPiAwfVxuICAgICAgKTtcbiAgICAgIGlmICh1cGRhdGVkRmlsdGVyKSB7XG4gICAgICAgIGZpbHRlciA9IHVwZGF0ZWRGaWx0ZXI7XG4gICAgICAgIGlmIChmaWx0ZXIuZ3B1KSB7XG4gICAgICAgICAgZmlsdGVyID0gc2V0RmlsdGVyR3B1TW9kZShmaWx0ZXIsIHN0YXRlLmZpbHRlcnMpO1xuICAgICAgICAgIGZpbHRlciA9IGFzc2lnbkdwdUNoYW5uZWwoZmlsdGVyLCBzdGF0ZS5maWx0ZXJzKTtcbiAgICAgICAgfVxuICAgICAgICBzdGF0ZSA9IHNldChbJ2RhdGFzZXRzJywgZGF0YXNldElkXSwgbmV3RGF0YXNldCwgc3RhdGUpO1xuICAgICAgICAvLyByZW1vdmUgZmlsdGVyIFBsb3QgYXQgZGF0YXNldElkLCBzbyBpdCB3aWxsIGJlIHJlY2FsY3VsYXRlZFxuICAgICAgICBmaWx0ZXIgPSByZW1vdmVGaWx0ZXJQbG90KGZpbHRlciwgZGF0YXNldElkKTtcblxuICAgICAgICBkYXRhc2V0SWRzVG9GaWx0ZXIgPSB1cGRhdGVkRmlsdGVyLmRhdGFJZDtcbiAgICAgIH1cbiAgICAgIC8vIG9ubHkgZmlsdGVyIHRoZSBjdXJyZW50IGRhdGFzZXRcbiAgICAgIGJyZWFrO1xuICAgIH1cblxuICAgIGNhc2UgRklMVEVSX1VQREFURVJfUFJPUFMubGF5ZXJJZDoge1xuICAgICAgLy8gV2UgbmVlZCB0byB1cGRhdGUgb25seSBkYXRhc2V0SWQvcyBpZiB3ZSBoYXZlIGFkZGVkL3JlbW92ZWQgbGF5ZXJzXG4gICAgICAvLyAtIGNoZWNrIGZvciBsYXllcklkIGNoYW5nZXMgKFhPUiB3b3JrcyBiZWNhdXNlIG9mIHN0cmluZyB2YWx1ZXMpXG4gICAgICAvLyBpZiBubyBkaWZmZXJlbmNlcyBiZXR3ZWVuIGxheWVySWRzLCBkb24ndCBkbyBhbnkgZmlsdGVyaW5nXG4gICAgICAvLyBAdHMtaWdub3JlXG4gICAgICBjb25zdCBsYXllcklkRGlmZmVyZW5jZSA9IHhvcih2YWx1ZSwgZmlsdGVyLmxheWVySWQpO1xuXG4gICAgICBjb25zdCBsYXllckRhdGFJZHMgPSB1bmlxPHN0cmluZz4oXG4gICAgICAgIGxheWVySWREaWZmZXJlbmNlXG4gICAgICAgICAgLm1hcChsaWQgPT5cbiAgICAgICAgICAgIGdldChcbiAgICAgICAgICAgICAgc3RhdGUubGF5ZXJzLmZpbmQobCA9PiBsLmlkID09PSBsaWQpLFxuICAgICAgICAgICAgICBbJ2NvbmZpZycsICdkYXRhSWQnXVxuICAgICAgICAgICAgKVxuICAgICAgICAgIClcbiAgICAgICAgICAuZmlsdGVyKGQgPT4gZCkgYXMgc3RyaW5nW11cbiAgICAgICk7XG5cbiAgICAgIC8vIG9ubHkgZmlsdGVyIGRhdGFzZXRzSWRzXG4gICAgICBkYXRhc2V0SWRzVG9GaWx0ZXIgPSBsYXllckRhdGFJZHM7XG5cbiAgICAgIC8vIFVwZGF0ZSBuZXdGaWx0ZXIgZGF0YUlkc1xuICAgICAgY29uc3QgbmV3RGF0YUlkcyA9IHVuaXE8c3RyaW5nPihcbiAgICAgICAgdmFsdWVcbiAgICAgICAgICA/Lm1hcChsaWQgPT5cbiAgICAgICAgICAgIGdldChcbiAgICAgICAgICAgICAgc3RhdGUubGF5ZXJzLmZpbmQobCA9PiBsLmlkID09PSBsaWQpLFxuICAgICAgICAgICAgICBbJ2NvbmZpZycsICdkYXRhSWQnXVxuICAgICAgICAgICAgKVxuICAgICAgICAgIClcbiAgICAgICAgICAuZmlsdGVyKGQgPT4gZCkgYXMgc3RyaW5nW11cbiAgICAgICk7XG5cbiAgICAgIGZpbHRlciA9IHtcbiAgICAgICAgLi4uZmlsdGVyLFxuICAgICAgICBsYXllcklkOiB2YWx1ZSxcbiAgICAgICAgZGF0YUlkOiBuZXdEYXRhSWRzXG4gICAgICB9O1xuICAgICAgYnJlYWs7XG4gICAgfVxuXG4gICAgZGVmYXVsdDpcbiAgICAgIGZpbHRlciA9IHNldChbcHJvcF0sIHZhbHVlLCBmaWx0ZXIpO1xuICAgICAgZGF0YXNldElkc1RvRmlsdGVyID0gWy4uLmZpbHRlci5kYXRhSWRdO1xuICAgICAgYnJlYWs7XG4gIH1cblxuICByZXR1cm4ge2ZpbHRlciwgZGF0YXNldElkcywgZGF0YXNldElkc1RvRmlsdGVyLCBzdGF0ZX07XG59XG4vKiBlc2xpbnQtZW5hYmxlIG1heC1zdGF0ZW1lbnRzICovXG5cbi8qKlxuICogU2V0IHRoZSBwcm9wZXJ0eSBvZiBhIGZpbHRlciBwbG90XG4gKiBAbWVtYmVyb2YgdmlzU3RhdGVVcGRhdGVyc1xuICogQHB1YmxpY1xuICovXG5leHBvcnQgY29uc3Qgc2V0RmlsdGVyUGxvdFVwZGF0ZXIgPSAoXG4gIHN0YXRlOiBWaXNTdGF0ZSxcbiAge2lkeCwgbmV3UHJvcH06IFZpc1N0YXRlQWN0aW9ucy5TZXRGaWx0ZXJQbG90VXBkYXRlckFjdGlvblxuKTogVmlzU3RhdGUgPT4ge1xuICBpZiAoIXN0YXRlLmZpbHRlcnNbaWR4XSkge1xuICAgIENvbnNvbGUuZXJyb3IoYGZpbHRlcnNbJHtpZHh9XSBpcyB1bmRlZmluZWRgKTtcbiAgICByZXR1cm4gc3RhdGU7XG4gIH1cbiAgbGV0IG5ld0ZpbHRlciA9IHN0YXRlLmZpbHRlcnNbaWR4XTtcblxuICBmb3IgKGNvbnN0IHByb3AgaW4gbmV3UHJvcCkge1xuICAgIGlmIChwcm9wID09PSAncGxvdFR5cGUnKSB7XG4gICAgICBuZXdGaWx0ZXIgPSBwaWNrXygncGxvdFR5cGUnKShtZXJnZV8obmV3UHJvcC5wbG90VHlwZSkpKG5ld0ZpbHRlcik7XG4gICAgfSBlbHNlIGlmIChwcm9wID09PSAneUF4aXMnKSB7XG4gICAgICBjb25zdCBjaGFydFR5cGUgPSBuZXdQcm9wLnlBeGlzID8gUExPVF9UWVBFUy5saW5lQ2hhcnQgOiBQTE9UX1RZUEVTLmhpc3RvZ3JhbTtcblxuICAgICAgbmV3RmlsdGVyID0gcGlja18oJ3Bsb3RUeXBlJykobWVyZ2VfKHt0eXBlOiBjaGFydFR5cGV9KSkobWVyZ2VfKG5ld1Byb3ApKG5ld0ZpbHRlcikpO1xuICAgIH1cbiAgfVxuXG4gIG5ld0ZpbHRlciA9IHVwZGF0ZUZpbHRlclBsb3Qoc3RhdGUuZGF0YXNldHMsIG5ld0ZpbHRlcik7XG5cbiAgcmV0dXJuIHtcbiAgICAuLi5zdGF0ZSxcbiAgICBmaWx0ZXJzOiBzdGF0ZS5maWx0ZXJzLm1hcCgoZiwgaSkgPT4gKGkgPT09IGlkeCA/IG5ld0ZpbHRlciA6IGYpKVxuICB9O1xufTtcblxuLyoqXG4gKiBBZGQgYSBuZXcgZmlsdGVyXG4gKiBAbWVtYmVyb2YgdmlzU3RhdGVVcGRhdGVyc1xuICogQHB1YmxpY1xuICovXG5leHBvcnQgY29uc3QgYWRkRmlsdGVyVXBkYXRlciA9IChcbiAgc3RhdGU6IFZpc1N0YXRlLFxuICBhY3Rpb246IFZpc1N0YXRlQWN0aW9ucy5BZGRGaWx0ZXJVcGRhdGVyQWN0aW9uXG4pOiBWaXNTdGF0ZSA9PlxuICAhYWN0aW9uLmRhdGFJZFxuICAgID8gc3RhdGVcbiAgICA6IHtcbiAgICAgICAgLi4uc3RhdGUsXG4gICAgICAgIGZpbHRlcnM6IFsuLi5zdGF0ZS5maWx0ZXJzLCBnZXREZWZhdWx0RmlsdGVyKHtkYXRhSWQ6IGFjdGlvbi5kYXRhSWQsIGlkOiBhY3Rpb24uaWR9KV1cbiAgICAgIH07XG5cbi8qKlxuICogQ3JlYXRlIG9yIHVwZGF0ZSBhIGZpbHRlclxuICogQG1lbWJlcm9mIHZpc1N0YXRlVXBkYXRlcnNcbiAqIEBwdWJsaWNcbiAqL1xuZXhwb3J0IGNvbnN0IGNyZWF0ZU9yVXBkYXRlRmlsdGVyVXBkYXRlciA9IChcbiAgc3RhdGU6IFZpc1N0YXRlLFxuICBhY3Rpb246IFZpc1N0YXRlQWN0aW9ucy5DcmVhdGVPclVwZGF0ZUZpbHRlclVwZGF0ZXJBY3Rpb25cbik6IFZpc1N0YXRlID0+IHtcbiAgY29uc3Qge2lkLCBkYXRhSWQsIGZpZWxkLCB2YWx1ZX0gPSBhY3Rpb247XG5cbiAgbGV0IG5ld1N0YXRlID0gc3RhdGU7XG4gIGNvbnN0IG9yaWdpbmFsSW5kZXggPSBuZXdTdGF0ZS5maWx0ZXJzLmZpbmRJbmRleChmID0+IGYuaWQgPT09IGlkKTtcbiAgbGV0IGZpbHRlckluZGV4ID0gb3JpZ2luYWxJbmRleDtcbiAgaWYgKCFpZCAmJiAhZGF0YUlkKSB7XG4gICAgcmV0dXJuIG5ld1N0YXRlO1xuICB9XG4gIGlmIChvcmlnaW5hbEluZGV4IDwgMCAmJiBkYXRhSWQpIHtcbiAgICBuZXdTdGF0ZSA9IGFkZEZpbHRlclVwZGF0ZXIobmV3U3RhdGUsIHtkYXRhSWR9KTtcbiAgICBpZiAobmV3U3RhdGUuZmlsdGVycy5sZW5ndGggIT09IHN0YXRlLmZpbHRlcnMubGVuZ3RoICsgMSkge1xuICAgICAgLy8gTm8gbmV3IGZpbHRlciB3YXMgYWRkZWRcbiAgICAgIHJldHVybiBzdGF0ZTtcbiAgICB9XG4gICAgLy8gSGVyZSB3ZSBhcmUgYXNzdW1pbmcgdGhhdCB0aGUgZmlsdGVyIHdhcyBhZGRlZCBhdCB0aGUgZW5kXG4gICAgZmlsdGVySW5kZXggPSBuZXdTdGF0ZS5maWx0ZXJzLmxlbmd0aCAtIDE7XG4gICAgbmV3U3RhdGUuZmlsdGVyc1tmaWx0ZXJJbmRleF0gPSB7XG4gICAgICAuLi5uZXdTdGF0ZS5maWx0ZXJzW2ZpbHRlckluZGV4XSxcbiAgICAgIC4uLihpZCA/IHtpZH0gOiBudWxsKVxuICAgIH07XG4gIH1cblxuICAvLyBObyBuZWVkIHRvIHVwZGF0ZSB0aGlzIGlmIGl0J3MgYSBuZXdseSBjcmVhdGVkIGZpbHRlclxuICAvLyBGaXJzdCB3ZSBtYWtlIHN1cmUgYWxsIHRoZSBkYXRhSWRzIHRoYXQgZmllbGRzIHJlZmVyIHRvIGFyZSB1cGRhdGVkXG4gIGlmIChvcmlnaW5hbEluZGV4ID49IDAgJiYgZGF0YUlkKSB7XG4gICAgLy8gSWYgdGhlIGRhdGFJZCBpcyBhbiBhcnJheSwgd2UgbmVlZCB0byB1cGRhdGUgZWFjaCBvbmUgaW5kaXZpZHVhbGx5IGFzIHRoZXkgbmVlZCBhIGNvcnJlY3QgdmFsdWVJbmRleCBwYXNzZWRcbiAgICBuZXdTdGF0ZSA9IChBcnJheS5pc0FycmF5KGRhdGFJZCkgPyBkYXRhSWQgOiBbZGF0YUlkXSkucmVkdWNlKChhY2N1LCBkLCBpbmRleCkgPT4ge1xuICAgICAgcmV0dXJuIHNldEZpbHRlclVwZGF0ZXIoYWNjdSwge1xuICAgICAgICBpZHg6IGZpbHRlckluZGV4LFxuICAgICAgICBwcm9wOiAnZGF0YUlkJyxcbiAgICAgICAgdmFsdWU6IGQsXG4gICAgICAgIHZhbHVlSW5kZXg6IGluZGV4XG4gICAgICB9KTtcbiAgICB9LCBuZXdTdGF0ZSk7XG4gIH1cbiAgLy8gVGhlbiB3ZSB1cGRhdGUgdGhlIGZpZWxkc1xuICBpZiAoZmllbGQpIHtcbiAgICAvLyBJZiB0aGUgZmllbGQgaXMgYW4gYXJyYXksIHdlIG5lZWQgdG8gdXBkYXRlIGVhY2ggZmllbGQgaW5kaXZpZHVhbGx5IGFzIHRoZXkgbmVlZCBhIGNvcnJlY3QgdmFsdWVJbmRleCBwYXNzZWRcbiAgICBuZXdTdGF0ZSA9IChBcnJheS5pc0FycmF5KGZpZWxkKSA/IGZpZWxkIDogW2ZpZWxkXSkucmVkdWNlKChhY2N1LCBmLCBpbmRleCkgPT4ge1xuICAgICAgcmV0dXJuIHNldEZpbHRlclVwZGF0ZXIoYWNjdSwge1xuICAgICAgICBpZHg6IGZpbHRlckluZGV4LFxuICAgICAgICBwcm9wOiAnbmFtZScsXG4gICAgICAgIHZhbHVlOiBmLFxuICAgICAgICB2YWx1ZUluZGV4OiBpbmRleFxuICAgICAgfSk7XG4gICAgfSwgbmV3U3RhdGUpO1xuICB9XG4gIC8vIFRoZW4gd2UgdXBkYXRlIHRoZSB2YWx1ZSBzZXBhcmF0ZWx5XG4gIGlmICh2YWx1ZSAhPT0gbnVsbCAmJiB0eXBlb2YgdmFsdWUgIT09ICd1bmRlZmluZWQnKSB7XG4gICAgbmV3U3RhdGUgPSBzZXRGaWx0ZXJVcGRhdGVyKG5ld1N0YXRlLCB7aWR4OiBmaWx0ZXJJbmRleCwgcHJvcDogJ3ZhbHVlJywgdmFsdWV9KTtcbiAgfVxuXG4gIHJldHVybiBuZXdTdGF0ZTtcbn07XG5cbi8qKlxuICogU2V0IGxheWVyIGNvbG9yIHBhbGV0dGUgdWkgc3RhdGVcbiAqIEBtZW1iZXJvZiB2aXNTdGF0ZVVwZGF0ZXJzXG4gKi9cbmV4cG9ydCBjb25zdCBsYXllckNvbG9yVUlDaGFuZ2VVcGRhdGVyID0gKFxuICBzdGF0ZTogVmlzU3RhdGUsXG4gIHtvbGRMYXllciwgcHJvcCwgbmV3Q29uZmlnfTogVmlzU3RhdGVBY3Rpb25zLkxheWVyQ29sb3JVSUNoYW5nZVVwZGF0ZXJBY3Rpb25cbik6IFZpc1N0YXRlID0+IHtcbiAgY29uc3Qgb2xkVml4Q29uZmlnID0gb2xkTGF5ZXIuY29uZmlnLnZpc0NvbmZpZ1twcm9wXTtcbiAgY29uc3QgbmV3TGF5ZXIgPSBvbGRMYXllci51cGRhdGVMYXllckNvbG9yVUkocHJvcCwgbmV3Q29uZmlnKTtcbiAgY29uc3QgbmV3VmlzQ29uZmlnID0gbmV3TGF5ZXIuY29uZmlnLnZpc0NvbmZpZ1twcm9wXTtcbiAgaWYgKG9sZFZpeENvbmZpZyAhPT0gbmV3VmlzQ29uZmlnKSB7XG4gICAgcmV0dXJuIGxheWVyVmlzQ29uZmlnQ2hhbmdlVXBkYXRlcihzdGF0ZSwge1xuICAgICAgb2xkTGF5ZXIsXG4gICAgICBuZXdWaXNDb25maWc6IHtcbiAgICAgICAgW3Byb3BdOiBuZXdWaXNDb25maWdcbiAgICAgIH1cbiAgICB9KTtcbiAgfVxuICByZXR1cm4ge1xuICAgIC4uLnN0YXRlLFxuICAgIGxheWVyczogc3RhdGUubGF5ZXJzLm1hcChsID0+IChsLmlkID09PSBvbGRMYXllci5pZCA/IG5ld0xheWVyIDogbCkpXG4gIH07XG59O1xuXG4vKipcbiAqIFN0YXJ0IGFuZCBlbmQgZmlsdGVyIGFuaW1hdGlvblxuICogQG1lbWJlcm9mIHZpc1N0YXRlVXBkYXRlcnNcbiAqIEBwdWJsaWNcbiAqL1xuZXhwb3J0IGNvbnN0IHRvZ2dsZUZpbHRlckFuaW1hdGlvblVwZGF0ZXIgPSAoXG4gIHN0YXRlOiBWaXNTdGF0ZSxcbiAgYWN0aW9uOiBWaXNTdGF0ZUFjdGlvbnMuVG9nZ2xlRmlsdGVyQW5pbWF0aW9uVXBkYXRlckFjdGlvblxuKTogVmlzU3RhdGUgPT4gKHtcbiAgLi4uc3RhdGUsXG4gIGZpbHRlcnM6IHN0YXRlLmZpbHRlcnMubWFwKChmLCBpKSA9PiAoaSA9PT0gYWN0aW9uLmlkeCA/IHsuLi5mLCBpc0FuaW1hdGluZzogIWYuaXNBbmltYXRpbmd9IDogZikpXG59KTtcblxuZXhwb3J0IGZ1bmN0aW9uIGlzRmlsdGVyQW5pbWF0aW9uQ29uZmlnKGNvbmZpZzogQW5pbWF0aW9uQ29uZmlnIHwgRmlsdGVyQW5pbWF0aW9uQ29uZmlnKTogYm9vbGVhbiB7XG4gIHJldHVybiAnZGF0YUlkJyBpbiBjb25maWcgJiYgJ2FuaW1hdGlvbldpbmRvdycgaW4gY29uZmlnO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gc2V0QW5pbWF0aW9uQ29uZmlnVXBkYXRlcihcbiAgc3RhdGU6IFZpc1N0YXRlLFxuICBhY3Rpb246IFZpc1N0YXRlQWN0aW9ucy5TZXRBbmltYXRpb25Db25maWdVcGRhdGVyQWN0aW9uXG4pOiBWaXNTdGF0ZSB7XG4gIGNvbnN0IHtjb25maWd9ID0gYWN0aW9uO1xuICBpZiAoaXNGaWx0ZXJBbmltYXRpb25Db25maWcoY29uZmlnKSkge1xuICAgIC8vIEZpbmQgZmlsdGVyIHVzZWQgZm9yIGFuaW1hdGlvblxuICAgIC8vIEFzc3VtaW5nIHRoZXJlJ3Mgb25seSBvbmUgZmlsdGVyIHVzZWQgZm9yIGFuaW1hdGlvbiwgc2VlIHNldEZpbHRlclZpZXdVcGRhdGVyXG4gICAgY29uc3QgZmlsdGVyID0gc3RhdGUuZmlsdGVycy5maW5kKGYgPT4gIWlzU2lkZUZpbHRlcihmKSk7XG4gICAgaWYgKCFmaWx0ZXIpIHtcbiAgICAgIHJldHVybiBzdGF0ZTtcbiAgICB9XG4gICAgY29uc3QgbmV3RmlsdGVyID0gey4uLmZpbHRlciwgLi4uY29uZmlnfTtcbiAgICByZXR1cm4gYXBwbHlGaWx0ZXJDb25maWdVcGRhdGVyKHN0YXRlLCBhcHBseUZpbHRlckNvbmZpZyhmaWx0ZXIuaWQsIG5ld0ZpbHRlcikpO1xuICB9IGVsc2Uge1xuICAgIHJldHVybiB7XG4gICAgICAuLi5zdGF0ZSxcbiAgICAgIGFuaW1hdGlvbkNvbmZpZzoge1xuICAgICAgICAuLi5zdGF0ZS5hbmltYXRpb25Db25maWcsXG4gICAgICAgIC4uLmNvbmZpZ1xuICAgICAgfVxuICAgIH07XG4gIH1cbn1cblxuLyoqXG4gKiBAbWVtYmVyb2YgdmlzU3RhdGVVcGRhdGVyc1xuICogQHB1YmxpY1xuICovXG5leHBvcnQgY29uc3QgdG9nZ2xlTGF5ZXJBbmltYXRpb25VcGRhdGVyID0gKFxuICBzdGF0ZTogVmlzU3RhdGUsXG4gIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBAdHlwZXNjcmlwdC1lc2xpbnQvbm8tdW51c2VkLXZhcnNcbiAgYWN0aW9uOiBWaXNTdGF0ZUFjdGlvbnMuVG9nZ2xlTGF5ZXJBbmltYXRpb25VcGRhdGVyQWN0aW9uXG4pOiBWaXNTdGF0ZSA9PiAoe1xuICAuLi5zdGF0ZSxcbiAgYW5pbWF0aW9uQ29uZmlnOiB7XG4gICAgLi4uc3RhdGUuYW5pbWF0aW9uQ29uZmlnLFxuICAgIGlzQW5pbWF0aW5nOiAhc3RhdGUuYW5pbWF0aW9uQ29uZmlnLmlzQW5pbWF0aW5nXG4gIH1cbn0pO1xuXG4vKipcbiAqIEhpZGUgYW5kIHNob3cgbGF5ZXIgYW5pbWF0aW9uIGNvbnRyb2xcbiAqIEBtZW1iZXJvZiB2aXNTdGF0ZVVwZGF0ZXJzXG4gKiBAcHVibGljXG4gKi9cbmV4cG9ydCBjb25zdCB0b2dnbGVMYXllckFuaW1hdGlvbkNvbnRyb2xVcGRhdGVyID0gKHN0YXRlOiBWaXNTdGF0ZSk6IFZpc1N0YXRlID0+ICh7XG4gIC4uLnN0YXRlLFxuICBhbmltYXRpb25Db25maWc6IHtcbiAgICAuLi5zdGF0ZS5hbmltYXRpb25Db25maWcsXG4gICAgaGlkZUNvbnRyb2w6ICFzdGF0ZS5hbmltYXRpb25Db25maWcuaGlkZUNvbnRyb2xcbiAgfVxufSk7XG5cbi8qKlxuICogQ2hhbmdlIGZpbHRlciBhbmltYXRpb24gc3BlZWRcbiAqIEBtZW1iZXJvZiB2aXNTdGF0ZVVwZGF0ZXJzXG4gKiBAcHVibGljXG4gKi9cbmV4cG9ydCBjb25zdCB1cGRhdGVGaWx0ZXJBbmltYXRpb25TcGVlZFVwZGF0ZXIgPSAoXG4gIHN0YXRlOiBWaXNTdGF0ZSxcbiAgYWN0aW9uOiBWaXNTdGF0ZUFjdGlvbnMuVXBkYXRlRmlsdGVyQW5pbWF0aW9uU3BlZWRVcGRhdGVyQWN0aW9uXG4pOiBWaXNTdGF0ZSA9PiAoe1xuICAuLi5zdGF0ZSxcbiAgZmlsdGVyczogc3RhdGUuZmlsdGVycy5tYXAoKGYsIGkpID0+IChpID09PSBhY3Rpb24uaWR4ID8gey4uLmYsIHNwZWVkOiBhY3Rpb24uc3BlZWR9IDogZikpXG59KTtcblxuLyoqXG4gKiBVcGRhdGUgYW5pbWF0aW9uIHNwZWVkIHdpdGggdGhlIHZlcnRpY2FsIHNwZWVkIHNsaWRlclxuICogQG1lbWJlcm9mIHZpc1N0YXRlVXBkYXRlcnNcbiAqIEBwdWJsaWNcbiAqXG4gKi9cbmV4cG9ydCBjb25zdCB1cGRhdGVMYXllckFuaW1hdGlvblNwZWVkVXBkYXRlciA9IChcbiAgc3RhdGU6IFZpc1N0YXRlLFxuICB7c3BlZWR9OiBWaXNTdGF0ZUFjdGlvbnMuVXBkYXRlTGF5ZXJBbmltYXRpb25TcGVlZFVwZGF0ZXJBY3Rpb25cbik6IFZpc1N0YXRlID0+IHtcbiAgcmV0dXJuIHtcbiAgICAuLi5zdGF0ZSxcbiAgICBhbmltYXRpb25Db25maWc6IHtcbiAgICAgIC4uLnN0YXRlLmFuaW1hdGlvbkNvbmZpZyxcbiAgICAgIHNwZWVkXG4gICAgfVxuICB9O1xufTtcblxuLyoqXG4gKiBTaG93IGxhcmdlciB0aW1lIGZpbHRlciBhdCBib3R0b20gZm9yIHRpbWUgcGxheWJhY2sgKGFwcGx5IHRvIHRpbWUgZmlsdGVyIG9ubHkpXG4gKiBAbWVtYmVyb2YgdmlzU3RhdGVVcGRhdGVyc1xuICogQHB1YmxpY1xuICovXG5leHBvcnQgY29uc3Qgc2V0RmlsdGVyVmlld1VwZGF0ZXIgPSAoXG4gIHN0YXRlOiBWaXNTdGF0ZSxcbiAgYWN0aW9uOiBWaXNTdGF0ZUFjdGlvbnMuU2V0RmlsdGVyVmlld1VwZGF0ZXJBY3Rpb25cbikgPT4ge1xuICBjb25zdCB7dmlldywgaWR4fSA9IGFjdGlvbjtcbiAgY29uc3Qgc2hvdWxkUmVzZXRPdGhlckZpbHRlcnNWaWV3ID0gdmlldyA9PT0gRklMVEVSX1ZJRVdfVFlQRVMuZW5sYXJnZWQ7XG4gIHJldHVybiB7XG4gICAgLi4uc3RhdGUsXG4gICAgZmlsdGVyczogc3RhdGUuZmlsdGVycy5tYXAoKGYsIGkpID0+XG4gICAgICBpID09PSBpZHhcbiAgICAgICAgPyB7XG4gICAgICAgICAgICAuLi5mLFxuICAgICAgICAgICAgdmlld1xuICAgICAgICAgIH1cbiAgICAgICAgOiBzaG91bGRSZXNldE90aGVyRmlsdGVyc1ZpZXdcbiAgICAgICAgPyB7XG4gICAgICAgICAgICAuLi5mLFxuICAgICAgICAgICAgdmlldzogRklMVEVSX1ZJRVdfVFlQRVMuc2lkZVxuICAgICAgICAgIH1cbiAgICAgICAgOiBmXG4gICAgKVxuICB9O1xufTtcblxuLyoqXG4gKiBUb2dnbGVzIGZpbHRlciBmZWF0dXJlIHZpc2liaWxpdHlcbiAqIEBtZW1iZXJvZiB2aXNTdGF0ZVVwZGF0ZXJzXG4gKi9cbmV4cG9ydCBjb25zdCB0b2dnbGVGaWx0ZXJGZWF0dXJlVXBkYXRlciA9IChcbiAgc3RhdGU6IFZpc1N0YXRlLFxuICBhY3Rpb246IFZpc1N0YXRlQWN0aW9ucy5Ub2dnbGVGaWx0ZXJGZWF0dXJlVXBkYXRlckFjdGlvblxuKTogVmlzU3RhdGUgPT4ge1xuICBjb25zdCBmaWx0ZXIgPSBzdGF0ZS5maWx0ZXJzW2FjdGlvbi5pZHhdO1xuICBjb25zdCBpc1Zpc2libGUgPSBnZXQoZmlsdGVyLCBbJ3ZhbHVlJywgJ3Byb3BlcnRpZXMnLCAnaXNWaXNpYmxlJ10pO1xuXG4gIGxldCBuZXdTdGF0ZSA9IHNldEZpbHRlclVwZGF0ZXIoc3RhdGUsIHtcbiAgICBpZHg6IGFjdGlvbi5pZHgsXG4gICAgcHJvcDogJ2VuYWJsZWQnLFxuICAgIHZhbHVlOiAhaXNWaXNpYmxlXG4gIH0pO1xuXG4gIG5ld1N0YXRlID0gc2V0RmlsdGVyVXBkYXRlcihuZXdTdGF0ZSwge1xuICAgIGlkeDogYWN0aW9uLmlkeCxcbiAgICBwcm9wOiAndmFsdWUnLFxuICAgIHZhbHVlOiBmZWF0dXJlVG9GaWx0ZXJWYWx1ZShmaWx0ZXIudmFsdWUsIGZpbHRlci5pZCwge1xuICAgICAgaXNWaXNpYmxlOiAhaXNWaXNpYmxlXG4gICAgfSlcbiAgfSk7XG5cbiAgcmV0dXJuIG5ld1N0YXRlO1xufTtcblxuLyoqXG4gKiBSZW1vdmUgYSBmaWx0ZXJcbiAqIEBtZW1iZXJvZiB2aXNTdGF0ZVVwZGF0ZXJzXG4gKiBAcHVibGljXG4gKi9cbmV4cG9ydCBjb25zdCByZW1vdmVGaWx0ZXJVcGRhdGVyID0gKFxuICBzdGF0ZTogVmlzU3RhdGUsXG4gIGFjdGlvbjogVmlzU3RhdGVBY3Rpb25zLlJlbW92ZUZpbHRlclVwZGF0ZXJBY3Rpb25cbik6IFZpc1N0YXRlID0+IHtcbiAgY29uc3Qge2lkeH0gPSBhY3Rpb247XG4gIGNvbnN0IHtkYXRhSWQsIGlkfSA9IHN0YXRlLmZpbHRlcnNbaWR4XTtcblxuICBjb25zdCBuZXdGaWx0ZXJzID0gW1xuICAgIC4uLnN0YXRlLmZpbHRlcnMuc2xpY2UoMCwgaWR4KSxcbiAgICAuLi5zdGF0ZS5maWx0ZXJzLnNsaWNlKGlkeCArIDEsIHN0YXRlLmZpbHRlcnMubGVuZ3RoKVxuICBdO1xuXG4gIGNvbnN0IGZpbHRlcmVkRGF0YXNldHMgPSBhcHBseUZpbHRlcnNUb0RhdGFzZXRzKGRhdGFJZCwgc3RhdGUuZGF0YXNldHMsIG5ld0ZpbHRlcnMsIHN0YXRlLmxheWVycyk7XG4gIGNvbnN0IG5ld0VkaXRvciA9XG4gICAgZ2V0RmlsdGVySWRJbkZlYXR1cmUoc3RhdGUuZWRpdG9yLnNlbGVjdGVkRmVhdHVyZSkgPT09IGlkXG4gICAgICA/IHtcbiAgICAgICAgICAuLi5zdGF0ZS5lZGl0b3IsXG4gICAgICAgICAgc2VsZWN0ZWRGZWF0dXJlOiBudWxsXG4gICAgICAgIH1cbiAgICAgIDogc3RhdGUuZWRpdG9yO1xuXG4gIGxldCBuZXdTdGF0ZSA9IHNldChbJ2ZpbHRlcnMnXSwgbmV3RmlsdGVycywgc3RhdGUpO1xuICBuZXdTdGF0ZSA9IHNldChbJ2RhdGFzZXRzJ10sIGZpbHRlcmVkRGF0YXNldHMsIG5ld1N0YXRlKTtcbiAgbmV3U3RhdGUgPSBzZXQoWydlZGl0b3InXSwgbmV3RWRpdG9yLCBuZXdTdGF0ZSk7XG5cbiAgcmV0dXJuIHVwZGF0ZUFsbExheWVyRG9tYWluRGF0YShuZXdTdGF0ZSwgZGF0YUlkLCB1bmRlZmluZWQpO1xufTtcblxuLyoqXG4gKiBBZGQgYSBuZXcgbGF5ZXJcbiAqIEBtZW1iZXJvZiB2aXNTdGF0ZVVwZGF0ZXJzXG4gKiBAcHVibGljXG4gKi9cbmV4cG9ydCBjb25zdCBhZGRMYXllclVwZGF0ZXIgPSAoXG4gIHN0YXRlOiBWaXNTdGF0ZSxcbiAgYWN0aW9uOiBWaXNTdGF0ZUFjdGlvbnMuQWRkTGF5ZXJVcGRhdGVyQWN0aW9uXG4pOiBWaXNTdGF0ZSA9PiB7XG4gIGxldCBuZXdMYXllcjtcbiAgbGV0IG5ld0xheWVyRGF0YTtcbiAgaWYgKGFjdGlvbi5jb25maWcpIHtcbiAgICBuZXdMYXllciA9IGNyZWF0ZUxheWVyRnJvbUNvbmZpZyhzdGF0ZSwgYWN0aW9uLmNvbmZpZyk7XG4gICAgaWYgKCFuZXdMYXllcikge1xuICAgICAgQ29uc29sZS53YXJuKFxuICAgICAgICAnRmFpbGVkIHRvIGNyZWF0ZSBsYXllciBmcm9tIGNvbmZpZywgaXQgdXN1YWxseSBtZWFucyB0aGUgY29uZmlnIGlzIG5vdCBiZSBpbiBjb3JyZWN0IGZvcm1hdCcsXG4gICAgICAgIGFjdGlvbi5jb25maWdcbiAgICAgICk7XG4gICAgICByZXR1cm4gc3RhdGU7XG4gICAgfVxuXG4gICAgY29uc3QgcmVzdWx0ID0gY2FsY3VsYXRlTGF5ZXJEYXRhKG5ld0xheWVyLCBzdGF0ZSk7XG4gICAgbmV3TGF5ZXIgPSByZXN1bHQubGF5ZXI7XG4gICAgbmV3TGF5ZXJEYXRhID0gcmVzdWx0LmxheWVyRGF0YTtcbiAgfSBlbHNlIHtcbiAgICAvLyBjcmVhdGUgYW4gZW1wdHkgbGF5ZXIgd2l0aCBhIHNwZWNpZmljIGRhdGFzZXQgb3IgYSBkZWZhdWx0IG9uZVxuICAgIGNvbnN0IGRlZmF1bHREYXRhc2V0ID0gYWN0aW9uLmRhdGFzZXRJZCA/PyBPYmplY3Qua2V5cyhzdGF0ZS5kYXRhc2V0cylbMF07XG4gICAgbmV3TGF5ZXIgPSBuZXcgTGF5ZXIoe1xuICAgICAgaXNWaXNpYmxlOiB0cnVlLFxuICAgICAgaXNDb25maWdBY3RpdmU6IHRydWUsXG4gICAgICBkYXRhSWQ6IGRlZmF1bHREYXRhc2V0XG4gICAgfSk7XG4gICAgbmV3TGF5ZXJEYXRhID0ge307XG4gIH1cblxuICBsZXQgbmV3U3RhdGUgPSB7XG4gICAgLi4uc3RhdGUsXG4gICAgbGF5ZXJzOiBbLi4uc3RhdGUubGF5ZXJzLCBuZXdMYXllcl0sXG4gICAgbGF5ZXJEYXRhOiBbLi4uc3RhdGUubGF5ZXJEYXRhLCBuZXdMYXllckRhdGFdLFxuICAgIC8vIGFkZCBuZXcgbGF5ZXIgYXQgdGhlIHRvcFxuICAgIGxheWVyT3JkZXI6IFtuZXdMYXllci5pZCwgLi4uc3RhdGUubGF5ZXJPcmRlcl0sXG4gICAgc3BsaXRNYXBzOiBhZGROZXdMYXllcnNUb1NwbGl0TWFwKHN0YXRlLnNwbGl0TWFwcywgbmV3TGF5ZXIpXG4gIH07XG5cbiAgaWYgKG5ld0xheWVyLmNvbmZpZy5hbmltYXRpb24uZW5hYmxlZCkge1xuICAgIG5ld1N0YXRlID0gdXBkYXRlQW5pbWF0aW9uRG9tYWluKG5ld1N0YXRlKTtcbiAgfVxuXG4gIHJldHVybiBuZXdTdGF0ZTtcbn07XG5cbi8qKlxuICogcmVtb3ZlIGxheWVyXG4gKiBAbWVtYmVyb2YgdmlzU3RhdGVVcGRhdGVyc1xuICogQHB1YmxpY1xuICovXG5leHBvcnQgZnVuY3Rpb24gcmVtb3ZlTGF5ZXJVcGRhdGVyPFQgZXh0ZW5kcyBWaXNTdGF0ZT4oXG4gIHN0YXRlOiBULFxuICB7aWR9OiBWaXNTdGF0ZUFjdGlvbnMuUmVtb3ZlTGF5ZXJVcGRhdGVyQWN0aW9uXG4pOiBUIHtcbiAgY29uc3QgaWR4ID0gTnVtYmVyLmlzRmluaXRlKGlkKVxuICAgID8gLy8gc3VwcG9ydCBvbGRlciBBUEksIHJlbW92ZSBsYXllciBieSBpZHhcbiAgICAgIE51bWJlcihpZClcbiAgICA6IHN0YXRlLmxheWVycy5maW5kSW5kZXgobCA9PiBsLmlkID09PSBpZCk7XG4gIGlmIChpZHggPCAwIHx8IGlkeCA+PSBzdGF0ZS5sYXllcnMubGVuZ3RoKSB7XG4gICAgLy8gaW52YWxpZCBpbmRleFxuICAgIENvbnNvbGUud2FybihgY2FuIG5vdCByZW1vdmUgbGF5ZXIgd2l0aCBpbnZhbGlkIGlkfGlkeCAke2lkfWApO1xuICAgIHJldHVybiBzdGF0ZTtcbiAgfVxuXG4gIGNvbnN0IHtsYXllcnMsIGxheWVyRGF0YSwgbGF5ZXJPcmRlciwgY2xpY2tlZCwgaG92ZXJJbmZvfSA9IHN0YXRlO1xuICBjb25zdCBsYXllclRvUmVtb3ZlID0gbGF5ZXJzW2lkeF07XG4gIGNvbnN0IG5ld1N0YXRlID0ge1xuICAgIC4uLnN0YXRlLFxuICAgIGxheWVyczogZmlsdGVyT3V0QnlJZChsYXllclRvUmVtb3ZlLmlkKShsYXllcnMpLFxuICAgIGxheWVyRGF0YTogcmVtb3ZlRWxlbWVudEF0SW5kZXgoaWR4KShsYXllckRhdGEpLFxuICAgIGxheWVyT3JkZXI6IGxheWVyT3JkZXIuZmlsdGVyKGxheWVySWQgPT4gbGF5ZXJJZCAhPT0gbGF5ZXJUb1JlbW92ZS5pZCksXG4gICAgY2xpY2tlZDogbGF5ZXJUb1JlbW92ZS5pc0xheWVySG92ZXJlZChjbGlja2VkKSA/IHVuZGVmaW5lZCA6IGNsaWNrZWQsXG4gICAgaG92ZXJJbmZvOiBsYXllclRvUmVtb3ZlLmlzTGF5ZXJIb3ZlcmVkKGhvdmVySW5mbykgPyB1bmRlZmluZWQgOiBob3ZlckluZm8sXG4gICAgc3BsaXRNYXBzOiByZW1vdmVMYXllckZyb21TcGxpdE1hcHMoc3RhdGUuc3BsaXRNYXBzLCBsYXllclRvUmVtb3ZlKVxuICAgIC8vIFRPRE86IHVwZGF0ZSBmaWx0ZXJzLCBjcmVhdGUgaGVscGVyIHRvIHJlbW92ZSBsYXllciBmb3JtIGZpbHRlciAocmVtb3ZlIGxheWVyaWQgYW5kIGRhdGFpZCkgaWYgbWFwcGVkXG4gIH07XG5cbiAgcmV0dXJuIHVwZGF0ZUFuaW1hdGlvbkRvbWFpbihuZXdTdGF0ZSk7XG59XG5cbi8qKlxuICogUmVvcmRlciBsYXllclxuICogQG1lbWJlcm9mIHZpc1N0YXRlVXBkYXRlcnNcbiAqIEBwdWJsaWNcbiAqL1xuZXhwb3J0IGNvbnN0IHJlb3JkZXJMYXllclVwZGF0ZXIgPSAoXG4gIHN0YXRlOiBWaXNTdGF0ZSxcbiAge29yZGVyfTogVmlzU3RhdGVBY3Rpb25zLlJlb3JkZXJMYXllclVwZGF0ZXJBY3Rpb25cbik6IFZpc1N0YXRlID0+ICh7XG4gIC4uLnN0YXRlLFxuICBsYXllck9yZGVyOiBvcmRlclxufSk7XG5cbi8qKlxuICogZHVwbGljYXRlIGxheWVyXG4gKiBAbWVtYmVyb2YgdmlzU3RhdGVVcGRhdGVyc1xuICogQHB1YmxpY1xuICovXG5leHBvcnQgY29uc3QgZHVwbGljYXRlTGF5ZXJVcGRhdGVyID0gKFxuICBzdGF0ZTogVmlzU3RhdGUsXG4gIHtpZH06IFZpc1N0YXRlQWN0aW9ucy5EdXBsaWNhdGVMYXllclVwZGF0ZXJBY3Rpb25cbik6IFZpc1N0YXRlID0+IHtcbiAgY29uc3QgaWR4ID0gTnVtYmVyLmlzRmluaXRlKGlkKVxuICAgID8gLy8gc3VwcG9ydCBvbGRlciBBUEksIHJlbW92ZSBsYXllciBieSBpZHhcbiAgICAgIE51bWJlcihpZClcbiAgICA6IHN0YXRlLmxheWVycy5maW5kSW5kZXgobCA9PiBsLmlkID09PSBpZCk7XG4gIGlmIChpZHggPCAwIHx8ICFzdGF0ZS5sYXllcnNbaWR4XSkge1xuICAgIENvbnNvbGUud2FybihgbGF5ZXIgJHtpZHh9IG5vdCBmb3VuZCBpbiBsYXllck9yZGVyYCk7XG4gICAgcmV0dXJuIHN0YXRlO1xuICB9XG5cbiAgY29uc3Qge2xheWVyc30gPSBzdGF0ZTtcbiAgY29uc3Qgb3JpZ2luYWwgPSBsYXllcnNbaWR4XTtcblxuICBjb25zdCBvcmlnaW5hbExheWVyT3JkZXJJZHggPSBzdGF0ZS5sYXllck9yZGVyLmZpbmRJbmRleChsaWQgPT4gbGlkID09PSBvcmlnaW5hbC5pZCk7XG4gIGxldCBuZXdMYWJlbCA9IGBDb3B5IG9mICR7b3JpZ2luYWwuY29uZmlnLmxhYmVsfWA7XG4gIGxldCBwb3N0Zml4ID0gMDtcbiAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIG5vLWxvb3AtZnVuY1xuICB3aGlsZSAobGF5ZXJzLmZpbmQobCA9PiBsLmNvbmZpZy5sYWJlbCA9PT0gbmV3TGFiZWwpKSB7XG4gICAgbmV3TGFiZWwgPSBgQ29weSBvZiAke29yaWdpbmFsLmNvbmZpZy5sYWJlbH0gJHsrK3Bvc3RmaXh9YDtcbiAgfVxuXG4gIC8vIGNvbGxlY3QgbGF5ZXIgY29uZmlnIGZyb20gb3JpZ2luYWxcbiAgY29uc3QgbG9hZGVkTGF5ZXIgPSBzZXJpYWxpemVMYXllcihvcmlnaW5hbCwgc3RhdGUuc2NoZW1hKTtcblxuICAvLyBhc3NpZ24gbmV3IGlkIGFuZCBsYWJlbCB0byBjb3BpZWQgbGF5ZXJcbiAgaWYgKCFsb2FkZWRMYXllcj8uY29uZmlnKSB7XG4gICAgcmV0dXJuIHN0YXRlO1xuICB9XG4gIGxvYWRlZExheWVyLmNvbmZpZy5sYWJlbCA9IG5ld0xhYmVsO1xuICBsb2FkZWRMYXllci5pZCA9IGdlbmVyYXRlSGFzaElkKExBWUVSX0lEX0xFTkdUSCk7XG5cbiAgLy8gYWRkIGxheWVyIHRvIHN0YXRlXG4gIGxldCBuZXh0U3RhdGUgPSBhZGRMYXllclVwZGF0ZXIoc3RhdGUsIHtjb25maWc6IGxvYWRlZExheWVyfSk7XG4gIC8vIHJldHJpZXZlIG5ld2x5IGNyZWF0ZWQgbGF5ZXJcbiAgY29uc3QgbmV3TGF5ZXIgPSBuZXh0U3RhdGUubGF5ZXJzW25leHRTdGF0ZS5sYXllcnMubGVuZ3RoIC0gMV07XG4gIC8vIHVwZGF0ZSBsYXllciBvcmRlciB3aXRoIG5ld0x5YWVyLmlkXG4gIGNvbnN0IG5ld0xheWVyT3JkZXIgPSBhcnJheUluc2VydChcbiAgICBuZXh0U3RhdGUubGF5ZXJPcmRlci5zbGljZSgxLCBuZXh0U3RhdGUubGF5ZXJPcmRlci5sZW5ndGgpLFxuICAgIG9yaWdpbmFsTGF5ZXJPcmRlcklkeCxcbiAgICBuZXdMYXllci5pZFxuICApO1xuXG4gIG5leHRTdGF0ZSA9IHJlb3JkZXJMYXllclVwZGF0ZXIobmV4dFN0YXRlLCB7b3JkZXI6IG5ld0xheWVyT3JkZXJ9KTtcblxuICByZXR1cm4gdXBkYXRlQW5pbWF0aW9uRG9tYWluKG5leHRTdGF0ZSk7XG59O1xuXG4vKipcbiAqIEFkZCBhIG5ldyBlZmZlY3RcbiAqIEBtZW1iZXJvZiB2aXNTdGF0ZVVwZGF0ZXJzXG4gKiBAcHVibGljXG4gKi9cbmV4cG9ydCBjb25zdCBhZGRFZmZlY3RVcGRhdGVyID0gKFxuICBzdGF0ZTogVmlzU3RhdGUsXG4gIGFjdGlvbjogVmlzU3RhdGVBY3Rpb25zLkFkZEVmZmVjdFVwZGF0ZXJBY3Rpb25cbik6IFZpc1N0YXRlID0+IHtcbiAgaWYgKFxuICAgIGFjdGlvbi5jb25maWc/LnR5cGUgPT09IExJR0hUX0FORF9TSEFET1dfRUZGRUNULnR5cGUgJiZcbiAgICBzdGF0ZS5lZmZlY3RzLnNvbWUoZWZmZWN0ID0+IGVmZmVjdC50eXBlID09PSBMSUdIVF9BTkRfU0hBRE9XX0VGRkVDVC50eXBlKVxuICApIHtcbiAgICBDb25zb2xlLndhcm4oYENhbid0IGFkZCBtb3JlIHRoYW4gb25lICR7TElHSFRfQU5EX1NIQURPV19FRkZFQ1QubmFtZX0gZWZmZWN0YCk7XG4gICAgcmV0dXJuIHN0YXRlO1xuICB9XG5cbiAgY29uc3QgbmV3RWZmZWN0ID0gY3JlYXRlRWZmZWN0KGFjdGlvbi5jb25maWcpO1xuXG4gIC8vIGNvbGxhcHNlIGNvbmZpZ3VyYXRvcnMgZm9yIG90aGVyIGVmZmVjdHNcbiAgc3RhdGUuZWZmZWN0cy5mb3JFYWNoKGVmZmVjdCA9PiBlZmZlY3Quc2V0UHJvcHMoe2lzQ29uZmlnQWN0aXZlOiBmYWxzZX0pKTtcblxuICBjb25zdCBlZmZlY3RzID0gWy4uLnN0YXRlLmVmZmVjdHMsIG5ld0VmZmVjdF07XG4gIGNvbnN0IGVmZmVjdE9yZGVyID0gZml4RWZmZWN0T3JkZXIoZWZmZWN0cywgW25ld0VmZmVjdC5pZCwgLi4uc3RhdGUuZWZmZWN0T3JkZXJdKTtcblxuICByZXR1cm4ge1xuICAgIC4uLnN0YXRlLFxuICAgIGVmZmVjdHMsXG4gICAgZWZmZWN0T3JkZXJcbiAgfTtcbn07XG5cbi8qKlxuICogcmVtb3ZlIGVmZmVjdFxuICogQG1lbWJlcm9mIHZpc1N0YXRlVXBkYXRlcnNcbiAqIEBwdWJsaWNcbiAqL1xuZXhwb3J0IGNvbnN0IHJlbW92ZUVmZmVjdFVwZGF0ZXIgPSAoXG4gIHN0YXRlOiBWaXNTdGF0ZSxcbiAge2lkfTogVmlzU3RhdGVBY3Rpb25zLlJlbW92ZUVmZmVjdFVwZGF0ZXJBY3Rpb25cbik6IFZpc1N0YXRlID0+IHtcbiAgY29uc3QgaWR4ID0gc3RhdGUuZWZmZWN0cy5maW5kSW5kZXgobCA9PiBsLmlkID09PSBpZCk7XG4gIGlmIChpZHggPCAwIHx8IGlkeCA+PSBzdGF0ZS5lZmZlY3RzLmxlbmd0aCkge1xuICAgIENvbnNvbGUud2FybihgY2FuIG5vdCByZW1vdmUgZWZmZWN0IHdpdGggaW52YWxpZCBpZCAke2lkfWApO1xuICAgIHJldHVybiBzdGF0ZTtcbiAgfVxuXG4gIGNvbnN0IHtlZmZlY3RzLCBlZmZlY3RPcmRlcn0gPSBzdGF0ZTtcbiAgY29uc3QgZWZmZWN0VG9SZW1vdmUgPSBlZmZlY3RzW2lkeF07XG4gIHJldHVybiB7XG4gICAgLi4uc3RhdGUsXG4gICAgLy8gQHRzLWV4cGVjdC1lcnJvciBmaXhlZCBpbiB0c1xuICAgIGVmZmVjdHM6IGZpbHRlck91dEJ5SWQoZWZmZWN0VG9SZW1vdmUuaWQpKGVmZmVjdHMpLFxuICAgIGVmZmVjdE9yZGVyOiBlZmZlY3RPcmRlci5maWx0ZXIoZWZmZWN0SWQgPT4gZWZmZWN0SWQgIT09IGVmZmVjdFRvUmVtb3ZlLmlkKVxuICB9O1xufTtcblxuLyoqXG4gKiBSZW9yZGVyIGVmZmVjdFxuICogQG1lbWJlcm9mIHZpc1N0YXRlVXBkYXRlcnNcbiAqIEBwdWJsaWNcbiAqL1xuZXhwb3J0IGNvbnN0IHJlb3JkZXJFZmZlY3RVcGRhdGVyID0gKFxuICBzdGF0ZTogVmlzU3RhdGUsXG4gIHtvcmRlcn06IFZpc1N0YXRlQWN0aW9ucy5SZW9yZGVyRWZmZWN0VXBkYXRlckFjdGlvblxuKTogVmlzU3RhdGUgPT4gKHtcbiAgLi4uc3RhdGUsXG4gIGVmZmVjdE9yZGVyOiBmaXhFZmZlY3RPcmRlcihzdGF0ZS5lZmZlY3RzLCBbLi4ub3JkZXJdKVxufSk7XG5cbi8qKlxuICogVXBkYXRlIGVmZmVjdFxuICogQG1lbWJlcm9mIHZpc1N0YXRlVXBkYXRlcnNcbiAqIEBwdWJsaWNcbiAqL1xuZXhwb3J0IGNvbnN0IHVwZGF0ZUVmZmVjdFVwZGF0ZXIgPSAoXG4gIHN0YXRlOiBWaXNTdGF0ZSxcbiAge2lkLCBwcm9wc306IFZpc1N0YXRlQWN0aW9ucy5VcGRhdGVFZmZlY3RVcGRhdGVyQWN0aW9uXG4pOiBWaXNTdGF0ZSA9PiB7XG4gIGNvbnN0IGlkeCA9IHN0YXRlLmVmZmVjdHMuZmluZEluZGV4KGwgPT4gbC5pZCA9PT0gaWQpO1xuICBpZiAoaWR4IDwgMCB8fCBpZHggPj0gc3RhdGUuZWZmZWN0cy5sZW5ndGgpIHtcbiAgICBDb25zb2xlLndhcm4oYGNhbiBub3QgdXBkYXRlIGVmZmVjdCB3aXRoIGludmFsaWQgaWQgJHtpZH1gKTtcbiAgICByZXR1cm4gc3RhdGU7XG4gIH1cblxuICBsZXQgZWZmZWN0T3JkZXIgPSBzdGF0ZS5lZmZlY3RPcmRlcjtcbiAgaWYgKHByb3BzLmlkICE9PSB1bmRlZmluZWQgJiYgcHJvcHMuaWQgIT09IGlkKSB7XG4gICAgY29uc3QgaWR4MiA9IHN0YXRlLmVmZmVjdHMuZmluZEluZGV4KGwgPT4gbC5pZCA9PT0gcHJvcHMuaWQpO1xuICAgIGlmIChpZHgyID49IDApIHtcbiAgICAgIENvbnNvbGUud2FybihgY2FuIG5vdCB1cGRhdGUgZWZmZWN0IHdpdGggZXhpc3RpbmcgZWZmZWN0IGlkICR7aWR9YCk7XG4gICAgICByZXR1cm4gc3RhdGU7XG4gICAgfVxuXG4gICAgZWZmZWN0T3JkZXIgPSBlZmZlY3RPcmRlci5tYXAoZWZmZWN0T3JkZXJJZCA9PlxuICAgICAgZWZmZWN0T3JkZXJJZCA9PT0gaWQgPyAocHJvcHMuaWQgYXMgc3RyaW5nKSA6IGVmZmVjdE9yZGVySWRcbiAgICApO1xuICB9XG5cbiAgY29uc3QgbmV3RWZmZWN0cyA9IFsuLi5zdGF0ZS5lZmZlY3RzXTtcbiAgbmV3RWZmZWN0c1tpZHhdLnNldFByb3BzKHByb3BzKTtcblxuICByZXR1cm4ge1xuICAgIC4uLnN0YXRlLFxuICAgIGVmZmVjdHM6IG5ld0VmZmVjdHMsXG4gICAgZWZmZWN0T3JkZXJcbiAgfTtcbn07XG5cbi8qKlxuICogUmVtb3ZlIGEgZGF0YXNldCBhbmQgYWxsIGxheWVycywgZmlsdGVycywgdG9vbHRpcCBjb25maWdzIHRoYXQgYmFzZWQgb24gaXRcbiAqIEBtZW1iZXJvZiB2aXNTdGF0ZVVwZGF0ZXJzXG4gKiBAcHVibGljXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiByZW1vdmVEYXRhc2V0VXBkYXRlcjxUIGV4dGVuZHMgVmlzU3RhdGU+KFxuICBzdGF0ZTogVCxcbiAgYWN0aW9uOiBWaXNTdGF0ZUFjdGlvbnMuUmVtb3ZlRGF0YXNldFVwZGF0ZXJBY3Rpb25cbik6IFQge1xuICAvLyBleHRyYWN0IGRhdGFzZXQga2V5XG4gIGNvbnN0IHtkYXRhSWQ6IGRhdGFzZXRLZXl9ID0gYWN0aW9uO1xuICBjb25zdCB7ZGF0YXNldHN9ID0gc3RhdGU7XG5cbiAgLy8gY2hlY2sgaWYgZGF0YXNldCBpcyBwcmVzZW50XG4gIGlmICghZGF0YXNldHNbZGF0YXNldEtleV0pIHtcbiAgICByZXR1cm4gc3RhdGU7XG4gIH1cblxuICBjb25zdCB7XG4gICAgbGF5ZXJzLFxuICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBAdHlwZXNjcmlwdC1lc2xpbnQvbm8tdW51c2VkLXZhcnNcbiAgICBkYXRhc2V0czoge1tkYXRhc2V0S2V5XTogZGF0YXNldCwgLi4ubmV3RGF0YXNldHN9XG4gIH0gPSBzdGF0ZTtcblxuICBjb25zdCBsYXllcnNUb1JlbW92ZSA9IGxheWVycy5maWx0ZXIobCA9PiBsLmNvbmZpZy5kYXRhSWQgPT09IGRhdGFzZXRLZXkpLm1hcChsID0+IGwuaWQpO1xuXG4gIC8vIHJlbW92ZSBsYXllcnMgYW5kIGRhdGFzZXRzXG4gIGxldCBuZXdTdGF0ZSA9IGxheWVyc1RvUmVtb3ZlLnJlZHVjZSgoYWNjdSwgaWQpID0+IHJlbW92ZUxheWVyVXBkYXRlcihhY2N1LCB7aWR9KSwge1xuICAgIC4uLnN0YXRlLFxuICAgIGRhdGFzZXRzOiBuZXdEYXRhc2V0c1xuICB9KTtcblxuICAvLyB1cGRhdGUgZmlsdGVyc1xuICBjb25zdCBmaWx0ZXJzOiBGaWx0ZXJbXSA9IFtdO1xuICBmb3IgKGNvbnN0IGZpbHRlciBvZiBuZXdTdGF0ZS5maWx0ZXJzKSB7XG4gICAgY29uc3QgdmFsdWVJbmRleCA9IGZpbHRlci5kYXRhSWQuaW5kZXhPZihkYXRhc2V0S2V5KTtcbiAgICBpZiAodmFsdWVJbmRleCA+PSAwICYmIGZpbHRlci5kYXRhSWQubGVuZ3RoID4gMSkge1xuICAgICAgLy8gb25seSByZW1vdmUgb25lIHN5bmNlZCBkYXRhc2V0IGZyb20gdGhlIGZpbHRlclxuICAgICAgZmlsdGVycy5wdXNoKF9yZW1vdmVGaWx0ZXJEYXRhSWRBdFZhbHVlSW5kZXgoZmlsdGVyLCB2YWx1ZUluZGV4LCBkYXRhc2V0cykpO1xuICAgIH0gZWxzZSBpZiAodmFsdWVJbmRleCA8IDApIHtcbiAgICAgIC8vIGxlYXZlIHRoZSBmaWx0ZXIgYXMgaXNcbiAgICAgIGZpbHRlcnMucHVzaChmaWx0ZXIpO1xuICAgIH1cbiAgfVxuXG4gIG5ld1N0YXRlID0gey4uLm5ld1N0YXRlLCBmaWx0ZXJzfTtcblxuICByZXR1cm4gcmVtb3ZlRGF0YXNldEZyb21JbnRlcmFjdGlvbkNvbmZpZyhuZXdTdGF0ZSwge2RhdGFJZDogZGF0YXNldEtleX0pO1xufVxuXG5mdW5jdGlvbiByZW1vdmVEYXRhc2V0RnJvbUludGVyYWN0aW9uQ29uZmlnKHN0YXRlLCB7ZGF0YUlkfSkge1xuICBsZXQge2ludGVyYWN0aW9uQ29uZmlnfSA9IHN0YXRlO1xuICBjb25zdCB7dG9vbHRpcH0gPSBpbnRlcmFjdGlvbkNvbmZpZztcbiAgaWYgKHRvb2x0aXApIHtcbiAgICBjb25zdCB7Y29uZmlnfSA9IHRvb2x0aXA7XG4gICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIEB0eXBlc2NyaXB0LWVzbGludC9uby11bnVzZWQtdmFyc1xuICAgIGNvbnN0IHtbZGF0YUlkXTogZmllbGRzLCAuLi5maWVsZHNUb1Nob3d9ID0gY29uZmlnLmZpZWxkc1RvU2hvdztcbiAgICBpbnRlcmFjdGlvbkNvbmZpZyA9IHtcbiAgICAgIC4uLmludGVyYWN0aW9uQ29uZmlnLFxuICAgICAgdG9vbHRpcDogey4uLnRvb2x0aXAsIGNvbmZpZzogey4uLmNvbmZpZywgZmllbGRzVG9TaG93fX1cbiAgICB9O1xuICB9XG5cbiAgcmV0dXJuIHsuLi5zdGF0ZSwgaW50ZXJhY3Rpb25Db25maWd9O1xufVxuLyoqXG4gKiB1cGRhdGUgbGF5ZXIgYmxlbmRpbmcgbW9kZVxuICogQG1lbWJlcm9mIHZpc1N0YXRlVXBkYXRlcnNcbiAqIEBwdWJsaWNcbiAqL1xuZXhwb3J0IGNvbnN0IHVwZGF0ZUxheWVyQmxlbmRpbmdVcGRhdGVyID0gKFxuICBzdGF0ZTogVmlzU3RhdGUsXG4gIGFjdGlvbjogVmlzU3RhdGVBY3Rpb25zLlVwZGF0ZUxheWVyQmxlbmRpbmdVcGRhdGVyQWN0aW9uXG4pOiBWaXNTdGF0ZSA9PiAoe1xuICAuLi5zdGF0ZSxcbiAgbGF5ZXJCbGVuZGluZzogYWN0aW9uLm1vZGVcbn0pO1xuXG4vKipcbiAqIHVwZGF0ZSBvdmVybGF5IGJsZW5kaW5nIG1vZGVcbiAqIEBtZW1iZXJvZiB2aXNTdGF0ZVVwZGF0ZXJzXG4gKiBAcHVibGljXG4gKi9cbmV4cG9ydCBjb25zdCB1cGRhdGVPdmVybGF5QmxlbmRpbmdVcGRhdGVyID0gKFxuICBzdGF0ZTogVmlzU3RhdGUsXG4gIGFjdGlvbjogVmlzU3RhdGVBY3Rpb25zLlVwZGF0ZU92ZXJsYXlCbGVuZGluZ1VwZGF0ZXJBY3Rpb25cbik6IFZpc1N0YXRlID0+ICh7XG4gIC4uLnN0YXRlLFxuICBvdmVybGF5QmxlbmRpbmc6IGFjdGlvbi5tb2RlXG59KTtcblxuLyoqXG4gKiBEaXNwbGF5IGRhdGFzZXQgdGFibGUgaW4gYSBtb2RhbFxuICogQG1lbWJlcm9mIHZpc1N0YXRlVXBkYXRlcnNcbiAqIEBwdWJsaWNcbiAqL1xuZXhwb3J0IGNvbnN0IHNob3dEYXRhc2V0VGFibGVVcGRhdGVyID0gKFxuICBzdGF0ZTogVmlzU3RhdGUsXG4gIGFjdGlvbjogVmlzU3RhdGVBY3Rpb25zLlNob3dEYXRhc2V0VGFibGVVcGRhdGVyQWN0aW9uXG4pOiBWaXNTdGF0ZSA9PiB7XG4gIHJldHVybiB7XG4gICAgLi4uc3RhdGUsXG4gICAgZWRpdGluZ0RhdGFzZXQ6IGFjdGlvbi5kYXRhSWRcbiAgfTtcbn07XG5cbi8qKlxuICogQWRkIGN1c3RvbSBjb2xvciBmb3IgZGF0YXNldHMgYW5kIGxheWVyc1xuICogQG1lbWJlcm9mIHZpc1N0YXRlVXBkYXRlcnNcbiAqIEBwdWJsaWNcbiAqL1xuZXhwb3J0IGNvbnN0IHVwZGF0ZVRhYmxlQ29sb3JVcGRhdGVyID0gKFxuICBzdGF0ZTogVmlzU3RhdGUsXG4gIGFjdGlvbjogVmlzU3RhdGVBY3Rpb25zLlVwZGF0ZURhdGFzZXRDb2xvclVwZGF0ZXJcbik6IFZpc1N0YXRlID0+IHtcbiAgcmV0dXJuIHVwZGF0ZURhdGFzZXRQcm9wc1VwZGF0ZXIoc3RhdGUsIHtkYXRhSWQ6IGFjdGlvbi5kYXRhSWQsIHByb3BzOiB7Y29sb3I6IGFjdGlvbi5uZXdDb2xvcn19KTtcbn07XG5cbi8qKlxuICogcmVzZXQgdmlzU3RhdGUgdG8gaW5pdGlhbCBTdGF0ZVxuICogQG1lbWJlcm9mIHZpc1N0YXRlVXBkYXRlcnNcbiAqIEBwdWJsaWNcbiAqL1xuZXhwb3J0IGNvbnN0IHJlc2V0TWFwQ29uZmlnVXBkYXRlciA9IChzdGF0ZTogVmlzU3RhdGUpOiBWaXNTdGF0ZSA9PiAoe1xuICAuLi5JTklUSUFMX1ZJU19TVEFURSxcbiAgLi4uc3RhdGUuaW5pdGlhbFN0YXRlLFxuICBpbml0aWFsU3RhdGU6IHN0YXRlLmluaXRpYWxTdGF0ZVxufSk7XG5cbi8qKlxuICogUHJvcGFnYXRlIGB2aXNTdGF0ZWAgcmVkdWNlciB3aXRoIGEgbmV3IGNvbmZpZ3VyYXRpb24uIEN1cnJlbnQgY29uZmlnIHdpbGwgYmUgb3ZlcnJpZGUuXG4gKiBAbWVtYmVyb2YgdmlzU3RhdGVVcGRhdGVyc1xuICogQHB1YmxpY1xuICovXG5leHBvcnQgY29uc3QgcmVjZWl2ZU1hcENvbmZpZ1VwZGF0ZXIgPSAoXG4gIHN0YXRlOiBWaXNTdGF0ZSxcbiAge1xuICAgIHBheWxvYWQ6IHtjb25maWcgPSB7fSwgb3B0aW9ucyA9IHt9fVxuICB9OiB7XG4gICAgdHlwZT86IHR5cGVvZiBBY3Rpb25UeXBlcy5SRUNFSVZFX01BUF9DT05GSUc7XG4gICAgcGF5bG9hZDogUmVjZWl2ZU1hcENvbmZpZ1BheWxvYWQ7XG4gIH1cbik6IFZpc1N0YXRlID0+IHtcbiAgaWYgKCFjb25maWcudmlzU3RhdGUpIHtcbiAgICByZXR1cm4gc3RhdGU7XG4gIH1cblxuICBjb25zdCB7a2VlcEV4aXN0aW5nQ29uZmlnfSA9IG9wdGlvbnM7XG5cbiAgLy8gcmVzZXQgY29uZmlnIGlmIGtlZXBFeGlzdGluZ0NvbmZpZyBpcyBmYWxzeVxuICBsZXQgbWVyZ2VkU3RhdGUgPSAha2VlcEV4aXN0aW5nQ29uZmlnID8gcmVzZXRNYXBDb25maWdVcGRhdGVyKHN0YXRlKSA6IHN0YXRlO1xuICBmb3IgKGNvbnN0IG1lcmdlciBvZiBzdGF0ZS5tZXJnZXJzKSB7XG4gICAgaWYgKGlzVmFsaWRNZXJnZXIobWVyZ2VyKSAmJiBoYXNQcm9wc1RvTWVyZ2UoY29uZmlnLnZpc1N0YXRlLCBtZXJnZXIucHJvcCkpIHtcbiAgICAgIG1lcmdlZFN0YXRlID0gbWVyZ2VyLm1lcmdlKFxuICAgICAgICBtZXJnZWRTdGF0ZSxcbiAgICAgICAgZ2V0UHJvcFZhbHVlVG9NZXJnZXIoY29uZmlnLnZpc1N0YXRlLCBtZXJnZXIucHJvcCwgbWVyZ2VyLnRvTWVyZ2VQcm9wKSxcbiAgICAgICAgLy8gZnJvbUNvbmZpZ1xuICAgICAgICB0cnVlXG4gICAgICApO1xuICAgIH1cbiAgfVxuXG4gIHJldHVybiBtZXJnZWRTdGF0ZTtcbn07XG5cbi8qKlxuICogVHJpZ2dlciBsYXllciBob3ZlciBldmVudCB3aXRoIGhvdmVyZWQgb2JqZWN0XG4gKiBAbWVtYmVyb2YgdmlzU3RhdGVVcGRhdGVyc1xuICogQHB1YmxpY1xuICovXG5leHBvcnQgY29uc3QgbGF5ZXJIb3ZlclVwZGF0ZXIgPSAoXG4gIHN0YXRlOiBWaXNTdGF0ZSxcbiAgYWN0aW9uOiBWaXNTdGF0ZUFjdGlvbnMuT25MYXllckhvdmVyVXBkYXRlckFjdGlvblxuKTogVmlzU3RhdGUgPT4gKHtcbiAgLi4uc3RhdGUsXG4gIGhvdmVySW5mbzoge1xuICAgIC8vIGRlY2suZ2wgaW5mbyBpcyBtdXRhYmxlXG4gICAgLi4uYWN0aW9uLmluZm8sXG4gICAgLi4uKE51bWJlci5pc0Zpbml0ZShhY3Rpb24ubWFwSW5kZXgpID8ge21hcEluZGV4OiBhY3Rpb24ubWFwSW5kZXh9IDoge30pXG4gIH1cbn0pO1xuXG4vKiBlc2xpbnQtZW5hYmxlIG1heC1zdGF0ZW1lbnRzICovXG5cbi8qKlxuICogVXBkYXRlIGBpbnRlcmFjdGlvbkNvbmZpZ2BcbiAqIEBtZW1iZXJvZiB2aXNTdGF0ZVVwZGF0ZXJzXG4gKiBAcHVibGljXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBpbnRlcmFjdGlvbkNvbmZpZ0NoYW5nZVVwZGF0ZXIoXG4gIHN0YXRlOiBWaXNTdGF0ZSxcbiAgYWN0aW9uOiBWaXNTdGF0ZUFjdGlvbnMuSW50ZXJhY3Rpb25Db25maWdDaGFuZ2VVcGRhdGVyQWN0aW9uXG4pOiBWaXNTdGF0ZSB7XG4gIGNvbnN0IHtjb25maWd9ID0gYWN0aW9uO1xuXG4gIGNvbnN0IGludGVyYWN0aW9uQ29uZmlnID0ge1xuICAgIC4uLnN0YXRlLmludGVyYWN0aW9uQ29uZmlnLFxuICAgIC4uLntbY29uZmlnLmlkXTogY29uZmlnfVxuICB9O1xuXG4gIC8vIERvbid0IGVuYWJsZSB0b29sdGlwIGFuZCBicnVzaCBhdCB0aGUgc2FtZSB0aW1lXG4gIC8vIGJ1dCBjb29yZGluYXRlcyBjYW4gYmUgc2hvd24gYXQgYWxsIHRpbWVcbiAgY29uc3QgY29udHJhZGljdCA9IFsnYnJ1c2gnLCAndG9vbHRpcCddO1xuXG4gIGlmIChcbiAgICBjb250cmFkaWN0LmluY2x1ZGVzKGNvbmZpZy5pZCkgJiZcbiAgICBjb25maWcuZW5hYmxlZCAmJlxuICAgICFzdGF0ZS5pbnRlcmFjdGlvbkNvbmZpZ1tjb25maWcuaWRdLmVuYWJsZWRcbiAgKSB7XG4gICAgLy8gb25seSBlbmFibGUgb25lIGludGVyYWN0aW9uIGF0IGEgdGltZVxuICAgIGNvbnRyYWRpY3QuZm9yRWFjaChrID0+IHtcbiAgICAgIGlmIChrICE9PSBjb25maWcuaWQpIHtcbiAgICAgICAgaW50ZXJhY3Rpb25Db25maWdba10gPSB7Li4uaW50ZXJhY3Rpb25Db25maWdba10sIGVuYWJsZWQ6IGZhbHNlfTtcbiAgICAgIH1cbiAgICB9KTtcbiAgfVxuXG4gIGNvbnN0IG5ld1N0YXRlID0ge1xuICAgIC4uLnN0YXRlLFxuICAgIGludGVyYWN0aW9uQ29uZmlnXG4gIH07XG5cbiAgaWYgKGNvbmZpZy5pZCA9PT0gJ2dlb2NvZGVyJyAmJiAhY29uZmlnLmVuYWJsZWQpIHtcbiAgICByZXR1cm4gcmVtb3ZlRGF0YXNldFVwZGF0ZXIobmV3U3RhdGUsIHtkYXRhSWQ6ICdnZW9jb2Rlcl9kYXRhc2V0J30pO1xuICB9XG5cbiAgcmV0dXJuIG5ld1N0YXRlO1xufVxuXG4vKipcbiAqIFRyaWdnZXIgbGF5ZXIgY2xpY2sgZXZlbnQgd2l0aCBjbGlja2VkIG9iamVjdFxuICogQG1lbWJlcm9mIHZpc1N0YXRlVXBkYXRlcnNcbiAqIEBwdWJsaWNcbiAqL1xuZXhwb3J0IGNvbnN0IGxheWVyQ2xpY2tVcGRhdGVyID0gKFxuICBzdGF0ZTogVmlzU3RhdGUsXG4gIGFjdGlvbjogVmlzU3RhdGVBY3Rpb25zLk9uTGF5ZXJDbGlja1VwZGF0ZXJBY3Rpb25cbik6IFZpc1N0YXRlID0+ICh7XG4gIC4uLnN0YXRlLFxuICBtb3VzZVBvczogc3RhdGUuaW50ZXJhY3Rpb25Db25maWcuY29vcmRpbmF0ZS5lbmFibGVkXG4gICAgPyB7XG4gICAgICAgIC4uLnN0YXRlLm1vdXNlUG9zLFxuICAgICAgICBwaW5uZWQ6IHN0YXRlLm1vdXNlUG9zLnBpbm5lZCA/IG51bGwgOiBjbG9uZURlZXAoc3RhdGUubW91c2VQb3MpXG4gICAgICB9XG4gICAgOiBzdGF0ZS5tb3VzZVBvcyxcbiAgY2xpY2tlZDogYWN0aW9uLmluZm8gJiYgYWN0aW9uLmluZm8ucGlja2VkID8gYWN0aW9uLmluZm8gOiBudWxsXG59KTtcblxuLyoqXG4gKiBUcmlnZ2VyIG1hcCBjbGljayBldmVudCwgdW5zZWxlY3QgY2xpY2tlZCBvYmplY3RcbiAqIEBtZW1iZXJvZiB2aXNTdGF0ZVVwZGF0ZXJzXG4gKiBAcHVibGljXG4gKi9cbmV4cG9ydCBjb25zdCBtYXBDbGlja1VwZGF0ZXIgPSAoXG4gIHN0YXRlOiBWaXNTdGF0ZSxcbiAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIEB0eXBlc2NyaXB0LWVzbGludC9uby11bnVzZWQtdmFyc1xuICBhY3Rpb246IFZpc1N0YXRlQWN0aW9ucy5Pbk1hcENsaWNrVXBkYXRlckFjdGlvblxuKTogVmlzU3RhdGUgPT4ge1xuICByZXR1cm4ge1xuICAgIC4uLnN0YXRlLFxuICAgIGNsaWNrZWQ6IG51bGxcbiAgfTtcbn07XG5cbi8qKlxuICogVHJpZ2dlciBtYXAgbW92ZSBldmVudFxuICogQG1lbWJlcm9mIHZpc1N0YXRlVXBkYXRlcnNcbiAqIEBwdWJsaWNcbiAqL1xuZXhwb3J0IGNvbnN0IG1vdXNlTW92ZVVwZGF0ZXIgPSAoXG4gIHN0YXRlOiBWaXNTdGF0ZSxcbiAge2V2dH06IFZpc1N0YXRlQWN0aW9ucy5Pbk1vdXNlTW92ZVVwZGF0ZXJBY3Rpb25cbik6IFZpc1N0YXRlID0+IHtcbiAgaWYgKE9iamVjdC52YWx1ZXMoc3RhdGUuaW50ZXJhY3Rpb25Db25maWcpLnNvbWUoY29uZmlnID0+IGNvbmZpZy5lbmFibGVkKSkge1xuICAgIHJldHVybiB7XG4gICAgICAuLi5zdGF0ZSxcbiAgICAgIG1vdXNlUG9zOiB7XG4gICAgICAgIC4uLnN0YXRlLm1vdXNlUG9zLFxuICAgICAgICAuLi4oQXJyYXkuaXNBcnJheShldnQucG9pbnQpID8ge21vdXNlUG9zaXRpb246IFsuLi5ldnQucG9pbnRdfSA6IHt9KSxcbiAgICAgICAgLi4uKEFycmF5LmlzQXJyYXkoZXZ0LmxuZ0xhdCkgPyB7Y29vcmRpbmF0ZTogWy4uLmV2dC5sbmdMYXRdfSA6IHt9KVxuICAgICAgfVxuICAgIH07XG4gIH1cblxuICByZXR1cm4gc3RhdGU7XG59O1xuLyoqXG4gKiBUb2dnbGUgdmlzaWJpbGl0eSBvZiBhIGxheWVyIGZvciBhIHNwbGl0IG1hcFxuICogQG1lbWJlcm9mIHZpc1N0YXRlVXBkYXRlcnNcbiAqIEBwdWJsaWNcbiAqL1xuZXhwb3J0IGNvbnN0IHRvZ2dsZVNwbGl0TWFwVXBkYXRlciA9IChcbiAgc3RhdGU6IFZpc1N0YXRlLFxuICBhY3Rpb246IE1hcFN0YXRlQWN0aW9ucy5Ub2dnbGVTcGxpdE1hcFVwZGF0ZXJBY3Rpb25cbik6IFZpc1N0YXRlID0+XG4gIHN0YXRlLnNwbGl0TWFwcyAmJiBzdGF0ZS5zcGxpdE1hcHMubGVuZ3RoID09PSAwXG4gICAgPyB7XG4gICAgICAgIC4uLnN0YXRlLFxuICAgICAgICAvLyBtYXliZSB3ZSBzaG91bGQgdXNlIGFuIGFycmF5IHRvIHN0b3JlIHN0YXRlIGZvciBhIHNpbmdsZSBtYXAgYXMgd2VsbFxuICAgICAgICAvLyBpZiBjdXJyZW50IG1hcHMgbGVuZ3RoIGlzIGVxdWFsIHRvIDAgaXQgbWVhbnMgdGhhdCB3ZSBhcmUgYWJvdXQgdG8gc3BsaXQgdGhlIHZpZXdcbiAgICAgICAgc3BsaXRNYXBzOiBjb21wdXRlU3BsaXRNYXBMYXllcnMoc3RhdGUubGF5ZXJzLCB7ZHVwbGljYXRlOiBmYWxzZX0pXG4gICAgICB9XG4gICAgOiBjbG9zZVNwZWNpZmljTWFwQXRJbmRleChzdGF0ZSwgYWN0aW9uKTtcblxuLyoqXG4gKiBUb2dnbGUgdmlzaWJpbGl0eSBvZiBhIGxheWVyIGluIGEgc3BsaXQgbWFwXG4gKiBAbWVtYmVyb2YgdmlzU3RhdGVVcGRhdGVyc1xuICogQHB1YmxpY1xuICovXG5leHBvcnQgY29uc3QgdG9nZ2xlTGF5ZXJGb3JNYXBVcGRhdGVyID0gKFxuICBzdGF0ZTogVmlzU3RhdGUsXG4gIHttYXBJbmRleCwgbGF5ZXJJZH06IFZpc1N0YXRlQWN0aW9ucy5Ub2dnbGVMYXllckZvck1hcFVwZGF0ZXJBY3Rpb25cbik6IFZpc1N0YXRlID0+IHtcbiAgY29uc3Qge3NwbGl0TWFwc30gPSBzdGF0ZTtcblxuICByZXR1cm4ge1xuICAgIC4uLnN0YXRlLFxuICAgIHNwbGl0TWFwczogc3BsaXRNYXBzLm1hcCgoc20sIGkpID0+XG4gICAgICBpID09PSBtYXBJbmRleFxuICAgICAgICA/IHtcbiAgICAgICAgICAgIC4uLnNwbGl0TWFwc1tpXSxcbiAgICAgICAgICAgIGxheWVyczoge1xuICAgICAgICAgICAgICAuLi5zcGxpdE1hcHNbaV0ubGF5ZXJzLFxuICAgICAgICAgICAgICAvLyBpZiBsYXllcklkIG5vdCBpbiBsYXllcnMsIHNldCBpdCB0byB2aXNpYmxlXG4gICAgICAgICAgICAgIFtsYXllcklkXTogIXNwbGl0TWFwc1tpXS5sYXllcnNbbGF5ZXJJZF1cbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG4gICAgICAgIDogc21cbiAgICApXG4gIH07XG59O1xuXG4vKipcbiAqIEFkZCBuZXcgZGF0YXNldCB0byBgdmlzU3RhdGVgLCB3aXRoIG9wdGlvbiB0byBsb2FkIGEgbWFwIGNvbmZpZyBhbG9uZyB3aXRoIHRoZSBkYXRhc2V0c1xuICogQG1lbWJlcm9mIHZpc1N0YXRlVXBkYXRlcnNcbiAqIEBwdWJsaWNcbiAqL1xuLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIGNvbXBsZXhpdHlcbmV4cG9ydCBjb25zdCB1cGRhdGVWaXNEYXRhVXBkYXRlciA9IChcbiAgc3RhdGU6IFZpc1N0YXRlLFxuICBhY3Rpb246IFZpc1N0YXRlQWN0aW9ucy5VcGRhdGVWaXNEYXRhVXBkYXRlckFjdGlvblxuKTogVmlzU3RhdGUgPT4ge1xuICAvLyBkYXRhc2V0cyBjYW4gYmUgYSBzaW5nbGUgZGF0YSBlbnRyaWVzIG9yIGFuIGFycmF5IG9mIG11bHRpcGxlIGRhdGEgZW50cmllc1xuICBjb25zdCB7Y29uZmlnLCBvcHRpb25zfSA9IGFjdGlvbjtcblxuICAvLyBhcHBseSBjb25maWcgaWYgcGFzc2VkIGZyb20gYWN0aW9uXG4gIC8vIFRPRE86IHdlIGRvbid0IGhhbmRsZSBhc3luYyBtZXJnZXJzIGhlcmUgeWV0XG4gIGxldCB1cGRhdGVkU3RhdGUgPSBjb25maWdcbiAgICA/IHJlY2VpdmVNYXBDb25maWdVcGRhdGVyKHN0YXRlLCB7XG4gICAgICAgIHBheWxvYWQ6IHtjb25maWcsIG9wdGlvbnN9XG4gICAgICB9KVxuICAgIDogc3RhdGU7XG5cbiAgY29uc3QgZGF0YXNldHMgPSB0b0FycmF5KGFjdGlvbi5kYXRhc2V0cyk7XG4gIGlmICghZGF0YXNldHMubGVuZ3RoKSB7XG4gICAgcmV0dXJuIHVwZGF0ZWRTdGF0ZTtcbiAgfVxuXG4gIGNvbnN0IGNyZWF0ZURhdGFzZXRUYXNrczogVGFza1tdID0gW107XG4gIGNvbnN0IG5vdGlmaWNhdGlvblRhc2tzOiBUYXNrW10gPSBbXTtcblxuICBkYXRhc2V0cy5mb3JFYWNoKCh7aW5mbyA9IHt9LCAuLi5yZXN0fSwgZGF0YXNldEluZGV4KSA9PiB7XG4gICAgY29uc3QgdGFzayA9IGNyZWF0ZU5ld0RhdGFFbnRyeSh7aW5mbywgLi4ucmVzdH0sIHN0YXRlLmRhdGFzZXRzKTtcbiAgICBpZiAodGFzaykge1xuICAgICAgY3JlYXRlRGF0YXNldFRhc2tzLnB1c2godGFzayk7XG4gICAgfSBlbHNlIHtcbiAgICAgIG5vdGlmaWNhdGlvblRhc2tzLnB1c2goXG4gICAgICAgIEFDVElPTl9UQVNLX0FERF9OT1RJRklDQVRJT04oKS5tYXAoKCkgPT5cbiAgICAgICAgICBhZGROb3RpZmljYXRpb24oXG4gICAgICAgICAgICBlcnJvck5vdGlmaWNhdGlvbih7XG4gICAgICAgICAgICAgIG1lc3NhZ2U6IGBGYWlsZWQgdG8gY3JlYXRlIGEgbmV3IGRhdGFzZXQgZHVlIHRvIGRhdGEgdmVyaWZpY2F0aW9uIGVycm9yc2AsXG4gICAgICAgICAgICAgIGlkOiBgZGF0YXNldC1mYWlsZWQtJHtkYXRhc2V0SW5kZXh9YFxuICAgICAgICAgICAgfSlcbiAgICAgICAgICApXG4gICAgICAgIClcbiAgICAgICk7XG4gICAgfVxuICB9KTtcblxuICBjb25zdCBkYXRhc2V0c0FsbFNldHRsZWRUYXNrID0gY3JlYXRlRGF0YXNldFRhc2tzLmxlbmd0aFxuICAgID8gVGFzay5hbGxTZXR0bGVkKGNyZWF0ZURhdGFzZXRUYXNrcykubWFwKHJlc3VsdHMgPT5cbiAgICAgICAgY3JlYXRlTmV3RGF0YXNldFN1Y2Nlc3Moe3Jlc3VsdHMsIGFkZFRvTWFwT3B0aW9uczogb3B0aW9uc30pXG4gICAgICApXG4gICAgOiBudWxsO1xuXG4gIGlmIChkYXRhc2V0c0FsbFNldHRsZWRUYXNrKSB7XG4gICAgdXBkYXRlZFN0YXRlID0gc2V0TG9hZGluZ0luZGljYXRvclVwZGF0ZXIodXBkYXRlZFN0YXRlLCBwYXlsb2FkXyh7Y2hhbmdlOiAxLCB0eXBlOiAnJ30pKTtcbiAgfVxuXG4gIHJldHVybiB3aXRoVGFzayh1cGRhdGVkU3RhdGUsIFtcbiAgICAuLi4oZGF0YXNldHNBbGxTZXR0bGVkVGFzayA/IFtkYXRhc2V0c0FsbFNldHRsZWRUYXNrXSA6IFtdKSxcbiAgICAuLi5ub3RpZmljYXRpb25UYXNrc1xuICBdKTtcbn07XG5cbmV4cG9ydCBjb25zdCBjcmVhdGVOZXdEYXRhc2V0U3VjY2Vzc1VwZGF0ZXIgPSAoXG4gIHN0YXRlOiBWaXNTdGF0ZSxcbiAgYWN0aW9uOiBQYXlsb2FkQWN0aW9uPENyZWF0ZU5ld0RhdGFzZXRTdWNjZXNzUGF5bG9hZD5cbik6IFZpc1N0YXRlID0+IHtcbiAgY29uc3Qge3Jlc3VsdHMsIGFkZFRvTWFwT3B0aW9uc30gPSBhY3Rpb24ucGF5bG9hZDtcbiAgY29uc3Qgbm90aWZpY2F0aW9uVGFza3M6IFRhc2tbXSA9IFtdO1xuXG4gIGNvbnN0IG5ld0RhdGFFbnRyaWVzID0gcmVzdWx0cy5yZWR1Y2UoKGFjY3UsIHJlc3VsdCwgaWR4KSA9PiB7XG4gICAgaWYgKHJlc3VsdC5zdGF0dXMgPT09ICdmdWxmaWxsZWQnKSB7XG4gICAgICBjb25zdCBkYXRhc2V0ID0gcmVzdWx0LnZhbHVlO1xuICAgICAgcmV0dXJuIHsuLi5hY2N1LCBbZGF0YXNldC5pZF06IGRhdGFzZXR9O1xuICAgIH0gZWxzZSB7XG4gICAgICAvLyBzaG93IGVycm9yIG5vdGlmaWNhdGlvbiBvbiBVSVxuICAgICAgbm90aWZpY2F0aW9uVGFza3MucHVzaChcbiAgICAgICAgQUNUSU9OX1RBU0soKS5tYXAoKCkgPT5cbiAgICAgICAgICBhZGROb3RpZmljYXRpb24oXG4gICAgICAgICAgICBlcnJvck5vdGlmaWNhdGlvbih7XG4gICAgICAgICAgICAgIG1lc3NhZ2U6IGBEYXRhc2V0IGVycm9yOiBGYWlsZWQgdG8gY3JlYXRlIGEgbmV3IGRhdGFzZXQ6XG4gICAgICAgICAgICAgICR7cmVzdWx0LnJlYXNvbiB8fCAocmVzdWx0IGFzIGFueSkudmFsdWV9YCxcbiAgICAgICAgICAgICAgaWQ6IGBkYXRhc2V0LWNyZWF0ZS1mYWlsZWQtJHtpZHh9YFxuICAgICAgICAgICAgfSlcbiAgICAgICAgICApXG4gICAgICAgIClcbiAgICAgICk7XG4gICAgICByZXR1cm4gYWNjdTtcbiAgICB9XG4gIH0sIHt9IGFzIERhdGFzZXRzKTtcbiAgLy8gc2F2ZSBuZXcgZGF0YXNldCBlbnRyeSB0byBzdGF0ZVxuICBjb25zdCBtZXJnZWRTdGF0ZSA9IHtcbiAgICAuLi5zdGF0ZSxcbiAgICBkYXRhc2V0czogbWVyZ2VEYXRhc2V0c0J5T3JkZXIoc3RhdGUsIG5ld0RhdGFFbnRyaWVzKVxuICB9O1xuXG4gIC8vIG1lcmdlIHN0YXRlIHdpdGggY29uZmlnIHRvIGJlIG1lcmdlZFxuICBjb25zdCBsYXllck1lcmdlcnMgPSBzdGF0ZS5tZXJnZXJzLmZpbHRlcihtID0+IG0ud2FpdEZvckxheWVyRGF0YSk7XG4gIGNvbnN0IGRhdGFzZXRNZXJnZXJzID0gc3RhdGUubWVyZ2Vycy5maWx0ZXIobSA9PiAhbGF5ZXJNZXJnZXJzLmluY2x1ZGVzKG0pKTtcblxuICBjb25zdCBuZXdEYXRhSWRzID0gT2JqZWN0LmtleXMobmV3RGF0YUVudHJpZXMpO1xuICBjb25zdCBwb3N0TWVyZ2VyUGF5bG9hZCA9IHtcbiAgICBuZXdEYXRhSWRzLFxuICAgIG9wdGlvbnM6IGFkZFRvTWFwT3B0aW9ucyxcbiAgICBsYXllck1lcmdlcnNcbiAgfTtcblxuICBjb25zdCB1cGRhdGVkU3RhdGUgPSBhcHBseU1lcmdlcnNVcGRhdGVyKG1lcmdlZFN0YXRlLCB7XG4gICAgbWVyZ2VyczogZGF0YXNldE1lcmdlcnMsXG4gICAgcG9zdE1lcmdlclBheWxvYWRcbiAgfSk7XG5cbiAgcmV0dXJuIHdpdGhUYXNrKFxuICAgIHNldExvYWRpbmdJbmRpY2F0b3JVcGRhdGVyKHVwZGF0ZWRTdGF0ZSwgcGF5bG9hZF8oe2NoYW5nZTogLTF9KSksXG4gICAgbm90aWZpY2F0aW9uVGFza3NcbiAgKTtcbn07XG5cbi8qKlxuICogQWRkIG5ldyBkYXRhc2V0IHRvIGB2aXNTdGF0ZWAsIHdpdGggb3B0aW9uIHRvIGxvYWQgYSBtYXAgY29uZmlnIGFsb25nIHdpdGggdGhlIGRhdGFzZXRzXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBhcHBseU1lcmdlcnNVcGRhdGVyKFxuICBzdGF0ZTogVmlzU3RhdGUsXG4gIGFjdGlvbjoge1xuICAgIG1lcmdlcnM6IE1lcmdlcjxhbnk+W107XG4gICAgcG9zdE1lcmdlclBheWxvYWQ6IFBvc3RNZXJnZXJQYXlsb2FkO1xuICB9XG4pOiBWaXNTdGF0ZSB7XG4gIGNvbnN0IHttZXJnZXJzLCBwb3N0TWVyZ2VyUGF5bG9hZH0gPSBhY3Rpb247XG5cbiAgLy8gbWVyZ2Ugc3RhdGUgd2l0aCBjb25maWcgdG8gYmUgbWVyZ2VkXG4gIGNvbnN0IG1lcmdlU3RhdGVSZXN1bHQgPSBtZXJnZVN0YXRlRnJvbU1lcmdlcnMoXG4gICAgc3RhdGUsXG4gICAge1xuICAgICAgLi4uSU5JVElBTF9WSVNfU1RBVEUsXG4gICAgICAuLi5zdGF0ZS5pbml0aWFsU3RhdGVcbiAgICB9LFxuICAgIG1lcmdlcnMsXG4gICAgLy8gbmV3RGF0YUlkcyxcbiAgICBwb3N0TWVyZ2VyUGF5bG9hZFxuICApO1xuXG4gIC8vIGlmIGFsbCBtZXJnZWQsIGtpY2t1cCBwb3N0IG1lcmdlIHByb2Nlc3NcbiAgLy8gaWYgbm90IHdhaXRcbiAgcmV0dXJuIG1lcmdlU3RhdGVSZXN1bHQuYWxsTWVyZ2VkXG4gICAgPyBwb3N0TWVyZ2VVcGRhdGVyKG1lcmdlU3RhdGVSZXN1bHQubWVyZ2VkU3RhdGUsIHBvc3RNZXJnZXJQYXlsb2FkKVxuICAgIDogbWVyZ2VTdGF0ZVJlc3VsdC5tZXJnZWRTdGF0ZTtcbn1cblxuLyoqXG4gKiBBZGQgbmV3IGRhdGFzZXQgdG8gYHZpc1N0YXRlYCwgd2l0aCBvcHRpb24gdG8gbG9hZCBhIG1hcCBjb25maWcgYWxvbmcgd2l0aCB0aGUgZGF0YXNldHNcbiAqL1xuZnVuY3Rpb24gcG9zdE1lcmdlVXBkYXRlcihtZXJnZWRTdGF0ZTogVmlzU3RhdGUsIHBvc3RNZXJnZXJQYXlsb2FkOiBQb3N0TWVyZ2VyUGF5bG9hZCk6IFZpc1N0YXRlIHtcbiAgY29uc3Qge25ld0RhdGFJZHMsIG9wdGlvbnMsIGxheWVyTWVyZ2Vyc30gPSBwb3N0TWVyZ2VyUGF5bG9hZDtcbiAgY29uc3QgbmV3RmlsdGVycyA9IG1lcmdlZFN0YXRlLmZpbHRlcnMuZmlsdGVyKGYgPT5cbiAgICBmLmRhdGFJZC5maW5kKGZEYXRhSWQgPT4gbmV3RGF0YUlkcy5pbmNsdWRlcyhmRGF0YUlkKSlcbiAgKTtcbiAgY29uc3QgZGF0YXNldEZpbHRlcmVkOiBzdHJpbmdbXSA9IHVuaXEoXG4gICAgbmV3RmlsdGVycy5yZWR1Y2UoKGFjY3UsIGYpID0+IFsuLi5hY2N1LCAuLi5mLmRhdGFJZF0sIFtdIGFzIHN0cmluZ1tdKVxuICApO1xuICBjb25zdCBkYXRhRW1wdHkgPSBuZXdEYXRhSWRzLmxlbmd0aCA8IDE7XG5cbiAgbGV0IG5ld0xheWVycyA9ICFkYXRhRW1wdHlcbiAgICA/IG1lcmdlZFN0YXRlLmxheWVycy5maWx0ZXIobCA9PiBsLmNvbmZpZy5kYXRhSWQgJiYgbmV3RGF0YUlkcy5pbmNsdWRlcyhsLmNvbmZpZy5kYXRhSWQpKVxuICAgIDogW107XG5cbiAgY29uc3QgbmV3RGF0YUVudHJpZXMgPSBuZXdEYXRhSWRzLnJlZHVjZShcbiAgICAoYWNjdSwgaWQpID0+ICh7XG4gICAgICAuLi5hY2N1LFxuICAgICAgW2lkXTogbWVyZ2VkU3RhdGUuZGF0YXNldHNbaWRdXG4gICAgfSksXG4gICAge31cbiAgKTtcblxuICBpZiAoIW5ld0xheWVycy5sZW5ndGggJiYgKG9wdGlvbnMgfHwge30pLmF1dG9DcmVhdGVMYXllcnMgIT09IGZhbHNlKSB7XG4gICAgLy8gbm8gbGF5ZXIgbWVyZ2VkLCBmaW5kIGRlZmF1bHRzXG4gICAgY29uc3QgcmVzdWx0ID0gYWRkRGVmYXVsdExheWVycyhtZXJnZWRTdGF0ZSwgbmV3RGF0YUVudHJpZXMpO1xuICAgIG1lcmdlZFN0YXRlID0gcmVzdWx0LnN0YXRlO1xuICAgIG5ld0xheWVycyA9IHJlc3VsdC5uZXdMYXllcnM7XG4gIH1cblxuICBpZiAobWVyZ2VkU3RhdGUuc3BsaXRNYXBzLmxlbmd0aCkge1xuICAgIC8vIGlmIG1hcCBpcyBzcGxpdCwgYWRkIG5ldyBsYXllcnMgdG8gc3BsaXRNYXBzXG4gICAgbmV3TGF5ZXJzID0gbWVyZ2VkU3RhdGUubGF5ZXJzLmZpbHRlcihcbiAgICAgIGwgPT4gbC5jb25maWcuZGF0YUlkICYmIG5ld0RhdGFJZHMuaW5jbHVkZXMobC5jb25maWcuZGF0YUlkKVxuICAgICk7XG4gICAgbWVyZ2VkU3RhdGUgPSB7XG4gICAgICAuLi5tZXJnZWRTdGF0ZSxcbiAgICAgIHNwbGl0TWFwczogYWRkTmV3TGF5ZXJzVG9TcGxpdE1hcChtZXJnZWRTdGF0ZS5zcGxpdE1hcHMsIG5ld0xheWVycylcbiAgICB9O1xuICB9XG5cbiAgLy8gaWYgbm8gdG9vbHRpcHMgbWVyZ2VkIGFkZCBkZWZhdWx0IHRvb2x0aXBzXG4gIG5ld0RhdGFJZHMuZm9yRWFjaChkYXRhSWQgPT4ge1xuICAgIGNvbnN0IHRvb2x0aXBGaWVsZHMgPSBtZXJnZWRTdGF0ZS5pbnRlcmFjdGlvbkNvbmZpZy50b29sdGlwLmNvbmZpZy5maWVsZHNUb1Nob3dbZGF0YUlkXTtcbiAgICAvLyBsb2FkaW5nIGRhdGFzZXQ6IGF1dG9DcmVhdGVUb29sdGlwcyBpcyBmYWxzZSBhbmQgd2UgZG9uJ3Qgd2FudCB0byBydW4gYWRkRGVmYXVsdFRvb2x0aXBzIHdoZW4gdG9vbHRpcEZpZWxkcyBpcyBlbXB0eVxuICAgIGlmIChcbiAgICAgIG9wdGlvbnM/LmF1dG9DcmVhdGVUb29sdGlwcyAhPT0gZmFsc2UgJiZcbiAgICAgICghQXJyYXkuaXNBcnJheSh0b29sdGlwRmllbGRzKSB8fCAhdG9vbHRpcEZpZWxkcy5sZW5ndGgpXG4gICAgKSB7XG4gICAgICAvLyBhZGRpbmcgZGF0YXNldDogYXV0b0NyZWF0ZVRvb2x0aXBzIGlzIHRydWVcbiAgICAgIG1lcmdlZFN0YXRlID0gYWRkRGVmYXVsdFRvb2x0aXBzKG1lcmdlZFN0YXRlLCBuZXdEYXRhRW50cmllc1tkYXRhSWRdKTtcbiAgICB9XG4gIH0pO1xuXG4gIGNvbnN0IHVwZGF0ZWREYXRhc2V0cyA9IGRhdGFFbXB0eVxuICAgID8gT2JqZWN0LmtleXMobWVyZ2VkU3RhdGUuZGF0YXNldHMpXG4gICAgOiB1bmlxKE9iamVjdC5rZXlzKG5ld0RhdGFFbnRyaWVzKS5jb25jYXQoZGF0YXNldEZpbHRlcmVkKSk7XG5cbiAgbGV0IHVwZGF0ZWRTdGF0ZSA9IHVwZGF0ZUFsbExheWVyRG9tYWluRGF0YShtZXJnZWRTdGF0ZSwgdXBkYXRlZERhdGFzZXRzLCB1bmRlZmluZWQpO1xuXG4gIC8vIHJlZ2lzdGVyIGxheWVyIGFuaW1hdGlvbiBkb21haW4sXG4gIC8vIG5lZWQgdG8gYmUgY2FsbGVkIGFmdGVyIGxheWVyIGRhdGEgaXMgY2FsY3VsYXRlZFxuICB1cGRhdGVkU3RhdGUgPSB1cGRhdGVBbmltYXRpb25Eb21haW4odXBkYXRlZFN0YXRlKTtcblxuICAvLyB0cnkgdG8gcHJvY2VzcyBsYXllck1lcmdlcnMgYWZ0ZXIgZGF0YXNldCtkYXRhc2V0TWVyZ2Vyc1xuICB1cGRhdGVkU3RhdGUgPVxuICAgIGxheWVyTWVyZ2VycyAmJiBsYXllck1lcmdlcnMubGVuZ3RoID4gMFxuICAgICAgPyBhcHBseU1lcmdlcnNVcGRhdGVyKHVwZGF0ZWRTdGF0ZSwge1xuICAgICAgICAgIG1lcmdlcnM6IGxheWVyTWVyZ2VycyxcbiAgICAgICAgICBwb3N0TWVyZ2VyUGF5bG9hZDogey4uLnBvc3RNZXJnZXJQYXlsb2FkLCBsYXllck1lcmdlcnM6IFtdfVxuICAgICAgICB9KVxuICAgICAgOiB1cGRhdGVkU3RhdGU7XG5cbiAgLy8gY2VudGVyIHRoZSBtYXAgb25jZSB0aGUgZGF0YXNldCBpcyBjcmVhdGVkXG4gIGlmIChuZXdMYXllcnMubGVuZ3RoICYmIChvcHRpb25zIHx8IHt9KS5jZW50ZXJNYXApIHtcbiAgICBjb25zdCBib3VuZHMgPSBmaW5kTWFwQm91bmRzKG5ld0xheWVycyk7XG4gICAgaWYgKGJvdW5kcykge1xuICAgICAgY29uc3QgZml0Qm91bmRzVGFzayA9IEFDVElPTl9UQVNLX0ZJVF9CT1VORFMoKS5tYXAoKCkgPT4ge1xuICAgICAgICByZXR1cm4gZml0TWFwQm91bmRzKGJvdW5kcyk7XG4gICAgICB9KTtcbiAgICAgIHVwZGF0ZWRTdGF0ZSA9IHdpdGhUYXNrKHVwZGF0ZWRTdGF0ZSwgZml0Qm91bmRzVGFzayk7XG4gICAgfVxuICB9XG5cbiAgLy8gbmVlZCB0byBjZW50ZXIgbWFwIGhlcmUgaWYgd2UgaGF2ZSBuZXcgbGF5ZXJzXG4gIHJldHVybiB1cGRhdGVkU3RhdGU7XG59XG5cbi8qKlxuICogUmVuYW1lIGFuIGV4aXN0aW5nIGRhdGFzZXQgaW4gYHZpc1N0YXRlYFxuICogQG1lbWJlcm9mIHZpc1N0YXRlVXBkYXRlcnNcbiAqIEBwdWJsaWNcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHJlbmFtZURhdGFzZXRVcGRhdGVyKFxuICBzdGF0ZTogVmlzU3RhdGUsXG4gIGFjdGlvbjogVmlzU3RhdGVBY3Rpb25zLlJlbmFtZURhdGFzZXRVcGRhdGVyQWN0aW9uXG4pOiBWaXNTdGF0ZSB7XG4gIHJldHVybiB1cGRhdGVEYXRhc2V0UHJvcHNVcGRhdGVyKHN0YXRlLCB7ZGF0YUlkOiBhY3Rpb24uZGF0YUlkLCBwcm9wczoge2xhYmVsOiBhY3Rpb24ubGFiZWx9fSk7XG59XG5cbmNvbnN0IEFMTE9XRURfVVBEQVRFX0RBVEFTRVRfUFJPUFMgPSBbJ2xhYmVsJywgJ2NvbG9yJywgJ21ldGFkYXRhJ107XG5cbi8qKlxuICogVmFsaWRhdGVzIHByb3BlcnRpZXMgYmVmb3JlIHVwZGF0aW5nIHRoZSBkYXRhc2V0LlxuICogTWFrZXMgc3VyZSBlYWNoIHByb3BlcnR5IGlzIGluIHRoZSBhbGxvd2VkIGxpc3RcbiAqIE1ha2VzIHN1cmUgY29sb3IgdmFsdWUgaXMgUkdCXG4gKiBQZXJmb3JtcyBkZWVwIG1lcmdlIHdoZW4gdXBkYXRpbmcgbWV0YWRhdGFcbiAqL1xuY29uc3QgdmFsaWRhdGVEYXRhc2V0VXBkYXRlUHJvcHMgPSAocHJvcHMsIGRhdGFzZXQpID0+IHtcbiAgY29uc3QgdmFsaWRhdGVkUHJvcHMgPSBPYmplY3QuZW50cmllcyhwcm9wcykucmVkdWNlKChhY2MsIGVudHJ5KSA9PiB7XG4gICAgY29uc3QgW2tleSwgdmFsdWVdID0gZW50cnk7XG4gICAgLy8gaXMgaXQgYWxsb3dlZCA/XG4gICAgaWYgKCFBTExPV0VEX1VQREFURV9EQVRBU0VUX1BST1BTLmluY2x1ZGVzKGtleSkpIHtcbiAgICAgIHJldHVybiBhY2M7XG4gICAgfVxuXG4gICAgLy8gaWYgd2UgYXJlIGFkZGluZyBhIGNvbG9yIGJ1dCBpdCBpcyBub3QgUkdCIHdlIGRvbid0IGFjY2VwdCB0aGUgdmFsdWVcbiAgICAvLyBpbiB0aGUgZnV0dXJlIGFzIHdlIGFkZCBtb3JlIHByb3BzIHdlIHNob3VsZCBjaGFuZ2UgdGhpcyBpZiBpbnRvIGEgc3dpdGNoXG4gICAgaWYgKGtleSA9PT0gJ2NvbG9yJyAmJiAhaXNSZ2JDb2xvcih2YWx1ZSkpIHtcbiAgICAgIHJldHVybiBhY2M7XG4gICAgfVxuXG4gICAgLy8gZG8gd2UgbmVlZCBkZWVwIG1lcmdlID9cbiAgICByZXR1cm4gey4uLmFjYywgW2tleV06IGlzUGxhaW5PYmplY3QodmFsdWUpID8gZGVlcG1lcmdlKGRhdGFzZXRba2V5XSB8fCB7fSwgdmFsdWUpIDogdmFsdWV9O1xuICB9LCB7fSk7XG5cbiAgcmV0dXJuIHZhbGlkYXRlZFByb3BzO1xufTtcblxuLyoqXG4gKiBVcGRhdGUgRGF0YXNldCBwcm9wcyAobGFiZWwsIGNvbG9yLCBtZXRhKS4gRG8gbm90IHVzZSB0byB1cGRhdGUgZGF0YSBvciBhbnkgcmVsYXRlZCBwcm9wZXJ0aWVzXG4gKiBAbWVtYmVyb2YgdmlzU3RhdGVVcGRhdGVyc1xuICogQHB1YmxpY1xuICovXG5leHBvcnQgZnVuY3Rpb24gdXBkYXRlRGF0YXNldFByb3BzVXBkYXRlcihcbiAgc3RhdGU6IFZpc1N0YXRlLFxuICBhY3Rpb246IFZpc1N0YXRlQWN0aW9ucy5VcGRhdGVEYXRhc2V0UHJvcHNVcGRhdGVyQWN0aW9uXG4pOiBWaXNTdGF0ZSB7XG4gIGNvbnN0IHtkYXRhSWQsIHByb3BzfSA9IGFjdGlvbjtcbiAgY29uc3Qge2RhdGFzZXRzfSA9IHN0YXRlO1xuICBjb25zdCBleGlzdGluZyA9IGRhdGFzZXRzW2RhdGFJZF07XG5cbiAgaWYgKGV4aXN0aW5nKSB7XG4gICAgY29uc3QgdmFsaWRhdGVkUHJvcHMgPSB2YWxpZGF0ZURhdGFzZXRVcGRhdGVQcm9wcyhwcm9wcywgZXhpc3RpbmcpO1xuICAgIC8vICB2YWxpZGF0ZSBwcm9wczoganVzdCBjb2xvciBmb3Igbm93XG4gICAgLy8gIHdlIG9ubHkgYWxsb3cgbGFiZWwsIGNvbG9yIGFuZCBtZXRhIHRvIGJlIHVwZGF0ZWRcbiAgICAvLyBjb25zdCBuZXdUYWJsZSA9IGNvcHlUYWJsZUFuZFVwZGF0ZShleGlzdGluZywgdmFsaWRhdGVkUHJvcHMpO1xuICAgIHJldHVybiB7XG4gICAgICAuLi5zdGF0ZSxcbiAgICAgIGRhdGFzZXRzOiB7XG4gICAgICAgIC4uLmRhdGFzZXRzLFxuICAgICAgICBbZGF0YUlkXTogY29weVRhYmxlQW5kVXBkYXRlKGV4aXN0aW5nLCB2YWxpZGF0ZWRQcm9wcylcbiAgICAgIH1cbiAgICB9O1xuICB9XG5cbiAgcmV0dXJuIHN0YXRlO1xufVxuXG4vKipcbiAqIFdoZW4gYSB1c2VyIGNsaWNrcyBvbiB0aGUgc3BlY2lmaWMgbWFwIGNsb3NpbmcgaWNvblxuICogdGhlIGFwcGxpY2F0aW9uIHdpbGwgY2xvc2UgdGhlIHNlbGVjdGVkIG1hcFxuICogYW5kIHdpbGwgbWVyZ2UgdGhlIHJlbWFpbmluZyBvbmUgd2l0aCB0aGUgZ2xvYmFsIHN0YXRlXG4gKiBUT0RPOiBpIHRoaW5rIGluIHRoZSBmdXR1cmUgdGhpcyBhY3Rpb24gc2hvdWxkIGJlIGNhbGxlZCBtZXJnZSBtYXAgbGF5ZXJzIHdpdGggZ2xvYmFsIHNldHRpbmdzXG4gKiBAcGFyYW0ge09iamVjdH0gc3RhdGUgYHZpc1N0YXRlYFxuICogQHBhcmFtIHtPYmplY3R9IGFjdGlvbiBhY3Rpb25cbiAqIEByZXR1cm5zIHtPYmplY3R9IG5leHRTdGF0ZVxuICovXG5leHBvcnQgZnVuY3Rpb24gY2xvc2VTcGVjaWZpY01hcEF0SW5kZXg8UyBleHRlbmRzIFZpc1N0YXRlPihcbiAgc3RhdGU6IFMsXG4gIGFjdGlvbjogTWFwU3RhdGVBY3Rpb25zLlRvZ2dsZVNwbGl0TWFwVXBkYXRlckFjdGlvblxuKTogUyB7XG4gIC8vIHJldHJpZXZlIGxheWVycyBtZXRhIGRhdGEgZnJvbSB0aGUgcmVtYWluaW5nIG1hcCB0aGF0IHdlIG5lZWQgdG8ga2VlcFxuICBjb25zdCBpbmRleFRvUmV0cmlldmUgPSAxIC0gYWN0aW9uLnBheWxvYWQ7XG4gIGNvbnN0IG1hcExheWVycyA9IHN0YXRlLnNwbGl0TWFwc1tpbmRleFRvUmV0cmlldmVdPy5sYXllcnM7XG4gIGNvbnN0IHtsYXllcnN9ID0gc3RhdGU7XG5cbiAgLy8gdXBkYXRlIGxheWVyIHZpc2liaWxpdHlcbiAgY29uc3QgbmV3TGF5ZXJzID0gbGF5ZXJzLm1hcChsYXllciA9PlxuICAgIG1hcExheWVycyAmJiAhbWFwTGF5ZXJzW2xheWVyLmlkXSAmJiBsYXllci5jb25maWcuaXNWaXNpYmxlXG4gICAgICA/IGxheWVyLnVwZGF0ZUxheWVyQ29uZmlnKHtcbiAgICAgICAgICAvLyBpZiBsYXllci5pZCBpcyBub3QgaW4gbWFwTGF5ZXJzLCBpdCBzaG91bGQgYmUgaW5WaXNpYmxlXG4gICAgICAgICAgaXNWaXNpYmxlOiBmYWxzZVxuICAgICAgICB9KVxuICAgICAgOiBsYXllclxuICApO1xuXG4gIC8vIGRlbGV0ZSBtYXBcbiAgcmV0dXJuIHtcbiAgICAuLi5zdGF0ZSxcbiAgICBsYXllcnM6IG5ld0xheWVycyxcbiAgICBzcGxpdE1hcHM6IFtdXG4gIH07XG59XG5cbi8qKlxuICogVHJpZ2dlciBmaWxlIGxvYWRpbmcgZGlzcGF0Y2ggYGFkZERhdGFUb01hcGAgaWYgc3VjY2VlZCwgb3IgYGxvYWRGaWxlc0VycmAgaWYgZmFpbGVkXG4gKiBAbWVtYmVyb2YgdmlzU3RhdGVVcGRhdGVyc1xuICogQHB1YmxpY1xuICovXG5leHBvcnQgY29uc3QgbG9hZEZpbGVzVXBkYXRlciA9IChcbiAgc3RhdGU6IFZpc1N0YXRlLFxuICBhY3Rpb246IFZpc1N0YXRlQWN0aW9ucy5Mb2FkRmlsZXNVcGRhdGVyQWN0aW9uXG4pOiBWaXNTdGF0ZSA9PiB7XG4gIGNvbnN0IHtmaWxlcywgb25GaW5pc2ggPSBsb2FkRmlsZXNTdWNjZXNzfSA9IGFjdGlvbjtcbiAgaWYgKCFmaWxlcy5sZW5ndGgpIHtcbiAgICByZXR1cm4gc3RhdGU7XG4gIH1cblxuICBjb25zdCBmaWxlTG9hZGluZ1Byb2dyZXNzID0gQXJyYXkuZnJvbShmaWxlcykucmVkdWNlKFxuICAgIChhY2N1LCBmLCBpKSA9PiBtZXJnZV8oaW5pdGlhbEZpbGVMb2FkaW5nUHJvZ3Jlc3MoZiwgaSkpKGFjY3UpLFxuICAgIHt9XG4gICk7XG5cbiAgY29uc3QgZmlsZUxvYWRpbmcgPSB7XG4gICAgZmlsZUNhY2hlOiBbXSxcbiAgICBmaWxlc1RvTG9hZDogZmlsZXMsXG4gICAgb25GaW5pc2hcbiAgfTtcblxuICBjb25zdCBuZXh0U3RhdGUgPSBtZXJnZV8oe2ZpbGVMb2FkaW5nUHJvZ3Jlc3MsIGZpbGVMb2FkaW5nfSkoc3RhdGUpO1xuXG4gIHJldHVybiBsb2FkTmV4dEZpbGVVcGRhdGVyKG5leHRTdGF0ZSk7XG59O1xuXG4vKipcbiAqIFN1Y2Vzc2Z1bGx5IGxvYWRlZCBvbmUgZmlsZSwgbW92ZSBvbiB0byB0aGUgbmV4dCBvbmVcbiAqIEBtZW1iZXJvZiB2aXNTdGF0ZVVwZGF0ZXJzXG4gKiBAcHVibGljXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBsb2FkRmlsZVN0ZXBTdWNjZXNzVXBkYXRlcihcbiAgc3RhdGU6IFZpc1N0YXRlLFxuICBhY3Rpb246IFZpc1N0YXRlQWN0aW9ucy5Mb2FkRmlsZVN0ZXBTdWNjZXNzQWN0aW9uXG4pOiBWaXNTdGF0ZSB7XG4gIGlmICghc3RhdGUuZmlsZUxvYWRpbmcpIHtcbiAgICByZXR1cm4gc3RhdGU7XG4gIH1cbiAgY29uc3Qge2ZpbGVOYW1lLCBmaWxlQ2FjaGV9ID0gYWN0aW9uO1xuICBjb25zdCB7ZmlsZXNUb0xvYWQsIG9uRmluaXNofSA9IHN0YXRlLmZpbGVMb2FkaW5nO1xuICBjb25zdCBzdGF0ZVdpdGhQcm9ncmVzcyA9IHVwZGF0ZUZpbGVMb2FkaW5nUHJvZ3Jlc3NVcGRhdGVyKHN0YXRlLCB7XG4gICAgZmlsZU5hbWUsXG4gICAgcHJvZ3Jlc3M6IHtwZXJjZW50OiAxLCBtZXNzYWdlOiAnRG9uZSd9XG4gIH0pO1xuXG4gIC8vIHNhdmUgcHJvY2Vzc2VkIGZpbGUgdG8gZmlsZUNhY2hlXG4gIGNvbnN0IHN0YXRlV2l0aENhY2hlID0gcGlja18oJ2ZpbGVMb2FkaW5nJykobWVyZ2VfKHtmaWxlQ2FjaGV9KSkoc3RhdGVXaXRoUHJvZ3Jlc3MpO1xuXG4gIHJldHVybiB3aXRoVGFzayhcbiAgICBzdGF0ZVdpdGhDYWNoZSxcbiAgICBERUxBWV9UQVNLKDIwMCkubWFwKGZpbGVzVG9Mb2FkLmxlbmd0aCA/IGxvYWROZXh0RmlsZSA6ICgpID0+IG9uRmluaXNoKGZpbGVDYWNoZSkpXG4gICk7XG59XG5cbi8vIHdpdGhUYXNrPFQ+KHN0YXRlOiBULCB0YXNrOiBhbnkpOiBUXG5cbi8qKlxuICpcbiAqIEBtZW1iZXJvZiB2aXNTdGF0ZVVwZGF0ZXJzXG4gKiBAcHVibGljXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBsb2FkTmV4dEZpbGVVcGRhdGVyKHN0YXRlOiBWaXNTdGF0ZSk6IFZpc1N0YXRlIHtcbiAgaWYgKCFzdGF0ZS5maWxlTG9hZGluZykge1xuICAgIHJldHVybiBzdGF0ZTtcbiAgfVxuICBjb25zdCB7ZmlsZXNUb0xvYWR9ID0gc3RhdGUuZmlsZUxvYWRpbmc7XG4gIGNvbnN0IFtmaWxlLCAuLi5yZW1haW5pbmdGaWxlc1RvTG9hZF0gPSBmaWxlc1RvTG9hZDtcblxuICAvLyBzYXZlIGZpbGVzVG9Mb2FkIHRvIHN0YXRlXG4gIGNvbnN0IG5leHRTdGF0ZSA9IHBpY2tfKCdmaWxlTG9hZGluZycpKG1lcmdlXyh7ZmlsZXNUb0xvYWQ6IHJlbWFpbmluZ0ZpbGVzVG9Mb2FkfSkpKHN0YXRlKTtcblxuICBjb25zdCBzdGF0ZVdpdGhQcm9ncmVzcyA9IHVwZGF0ZUZpbGVMb2FkaW5nUHJvZ3Jlc3NVcGRhdGVyKG5leHRTdGF0ZSwge1xuICAgIGZpbGVOYW1lOiBmaWxlLm5hbWUsXG4gICAgcHJvZ3Jlc3M6IHtwZXJjZW50OiAwLCBtZXNzYWdlOiAnbG9hZGluZy4uLid9XG4gIH0pO1xuXG4gIGNvbnN0IHtsb2FkZXJzLCBsb2FkT3B0aW9uc30gPSBzdGF0ZTtcbiAgcmV0dXJuIHdpdGhUYXNrKFxuICAgIHN0YXRlV2l0aFByb2dyZXNzLFxuICAgIG1ha2VMb2FkRmlsZVRhc2soXG4gICAgICBmaWxlLFxuICAgICAgbmV4dFN0YXRlLmZpbGVMb2FkaW5nICYmIG5leHRTdGF0ZS5maWxlTG9hZGluZy5maWxlQ2FjaGUsXG4gICAgICBsb2FkZXJzLFxuICAgICAgbG9hZE9wdGlvbnNcbiAgICApXG4gICk7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBtYWtlTG9hZEZpbGVUYXNrKGZpbGUsIGZpbGVDYWNoZSwgbG9hZGVyczogTG9hZGVyW10gPSBbXSwgbG9hZE9wdGlvbnMgPSB7fSkge1xuICByZXR1cm4gTE9BRF9GSUxFX1RBU0soe2ZpbGUsIGZpbGVDYWNoZSwgbG9hZGVycywgbG9hZE9wdGlvbnN9KS5iaW1hcChcbiAgICAvLyBwcmV0dGllciBpZ25vcmVcbiAgICAvLyBzdWNjZXNzXG4gICAgZ2VuID0+XG4gICAgICBuZXh0RmlsZUJhdGNoKHtcbiAgICAgICAgZ2VuLFxuICAgICAgICBmaWxlTmFtZTogZmlsZS5uYW1lLFxuICAgICAgICBvbkZpbmlzaDogcmVzdWx0ID0+XG4gICAgICAgICAgcHJvY2Vzc0ZpbGVDb250ZW50KHtcbiAgICAgICAgICAgIGNvbnRlbnQ6IHJlc3VsdCxcbiAgICAgICAgICAgIGZpbGVDYWNoZVxuICAgICAgICAgIH0pXG4gICAgICB9KSxcblxuICAgIC8vIGVycm9yXG4gICAgZXJyID0+IGxvYWRGaWxlc0VycihmaWxlLm5hbWUsIGVycilcbiAgKTtcbn1cblxuLyoqXG4gKlxuICogQG1lbWJlcm9mIHZpc1N0YXRlVXBkYXRlcnNcbiAqIEBwdWJsaWNcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHByb2Nlc3NGaWxlQ29udGVudFVwZGF0ZXIoXG4gIHN0YXRlOiBWaXNTdGF0ZSxcbiAgYWN0aW9uOiBWaXNTdGF0ZUFjdGlvbnMuUHJvY2Vzc0ZpbGVDb250ZW50VXBkYXRlckFjdGlvblxuKTogVmlzU3RhdGUge1xuICBjb25zdCB7Y29udGVudCwgZmlsZUNhY2hlfSA9IGFjdGlvbi5wYXlsb2FkO1xuXG4gIGNvbnN0IHN0YXRlV2l0aFByb2dyZXNzID0gdXBkYXRlRmlsZUxvYWRpbmdQcm9ncmVzc1VwZGF0ZXIoc3RhdGUsIHtcbiAgICBmaWxlTmFtZTogY29udGVudC5maWxlTmFtZSxcbiAgICBwcm9ncmVzczoge3BlcmNlbnQ6IDEsIG1lc3NhZ2U6ICdwcm9jZXNzaW5nLi4uJ31cbiAgfSk7XG5cbiAgcmV0dXJuIHdpdGhUYXNrKFxuICAgIHN0YXRlV2l0aFByb2dyZXNzLFxuICAgIFBST0NFU1NfRklMRV9EQVRBKHtjb250ZW50LCBmaWxlQ2FjaGV9KS5iaW1hcChcbiAgICAgIHJlc3VsdCA9PiBsb2FkRmlsZVN0ZXBTdWNjZXNzKHtmaWxlTmFtZTogY29udGVudC5maWxlTmFtZSwgZmlsZUNhY2hlOiByZXN1bHR9KSxcbiAgICAgIGVyciA9PiBsb2FkRmlsZXNFcnIoY29udGVudC5maWxlTmFtZSwgZXJyKVxuICAgIClcbiAgKTtcbn1cblxuLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIEB0eXBlc2NyaXB0LWVzbGludC9uby11bnVzZWQtdmFyc1xuZXhwb3J0IGZ1bmN0aW9uIHBhcnNlUHJvZ3Jlc3MocHJldlByb2dyZXNzID0ge30sIHByb2dyZXNzKSB7XG4gIC8vIFRoaXMgaGFwcGVucyB3aGVuIHJlY2VpdmluZyBxdWVyeSBtZXRhZGF0YSBvciBvdGhlciBjYXNlcyB3ZSBkb24ndFxuICAvLyBoYXZlIGFuIHVwZGF0ZSBmb3IgdGhlIHVzZXIuXG4gIGlmICghcHJvZ3Jlc3MgfHwgIXByb2dyZXNzLnBlcmNlbnQpIHtcbiAgICByZXR1cm4ge307XG4gIH1cblxuICByZXR1cm4ge1xuICAgIHBlcmNlbnQ6IHByb2dyZXNzLnBlcmNlbnRcbiAgfTtcbn1cblxuLyoqXG4gKiBnZXRzIGNhbGxlZCB3aXRoIHBheWxvYWQgPSBBc3luY0dlbmVyYXRvcjw/Pz8+XG4gKiBAbWVtYmVyb2YgdmlzU3RhdGVVcGRhdGVyc1xuICogQHB1YmxpY1xuICovXG5leHBvcnQgY29uc3QgbmV4dEZpbGVCYXRjaFVwZGF0ZXIgPSAoXG4gIHN0YXRlOiBWaXNTdGF0ZSxcbiAge1xuICAgIHBheWxvYWQ6IHtnZW4sIGZpbGVOYW1lLCBwcm9ncmVzcywgYWNjdW11bGF0ZWQsIG9uRmluaXNofVxuICB9OiBWaXNTdGF0ZUFjdGlvbnMuTmV4dEZpbGVCYXRjaFVwZGF0ZXJBY3Rpb25cbik6IFZpc1N0YXRlID0+IHtcbiAgY29uc3Qgc3RhdGVXaXRoUHJvZ3Jlc3MgPSB1cGRhdGVGaWxlTG9hZGluZ1Byb2dyZXNzVXBkYXRlcihzdGF0ZSwge1xuICAgIGZpbGVOYW1lLFxuICAgIHByb2dyZXNzOiBwYXJzZVByb2dyZXNzKHN0YXRlLmZpbGVMb2FkaW5nUHJvZ3Jlc3NbZmlsZU5hbWVdLCBwcm9ncmVzcylcbiAgfSk7XG5cbiAgcmV0dXJuIHdpdGhUYXNrKHN0YXRlV2l0aFByb2dyZXNzLCBbXG4gICAgLi4uKGdldEFwcGxpY2F0aW9uQ29uZmlnKCkudXNlQXJyb3dQcm9ncmVzc2l2ZUxvYWRpbmcgJiZcbiAgICBmaWxlTmFtZS5lbmRzV2l0aCgnYXJyb3cnKSAmJlxuICAgIGFjY3VtdWxhdGVkPy5kYXRhPy5sZW5ndGggPiAwXG4gICAgICA/IFtcbiAgICAgICAgICBQUk9DRVNTX0ZJTEVfREFUQSh7Y29udGVudDogYWNjdW11bGF0ZWQsIGZpbGVDYWNoZTogW119KS5iaW1hcChcbiAgICAgICAgICAgIHJlc3VsdCA9PiBsb2FkRmlsZXNTdWNjZXNzKHJlc3VsdCksXG4gICAgICAgICAgICBlcnIgPT4gbG9hZEZpbGVzRXJyKGZpbGVOYW1lLCBlcnIpXG4gICAgICAgICAgKVxuICAgICAgICBdXG4gICAgICA6IFtdKSxcbiAgICBVTldSQVBfVEFTSyhnZW4ubmV4dCgpKS5iaW1hcChcbiAgICAgICh7dmFsdWUsIGRvbmV9KSA9PiB7XG4gICAgICAgIHJldHVybiBkb25lXG4gICAgICAgICAgPyBvbkZpbmlzaChhY2N1bXVsYXRlZClcbiAgICAgICAgICA6IG5leHRGaWxlQmF0Y2goe1xuICAgICAgICAgICAgICBnZW4sXG4gICAgICAgICAgICAgIGZpbGVOYW1lLFxuICAgICAgICAgICAgICBwcm9ncmVzczogdmFsdWUucHJvZ3Jlc3MsXG4gICAgICAgICAgICAgIGFjY3VtdWxhdGVkOiB2YWx1ZSxcbiAgICAgICAgICAgICAgb25GaW5pc2hcbiAgICAgICAgICAgIH0pO1xuICAgICAgfSxcbiAgICAgIGVyciA9PiBsb2FkRmlsZXNFcnIoZmlsZU5hbWUsIGVycilcbiAgICApXG4gIF0pO1xufTtcblxuLyoqXG4gKiBUcmlnZ2VyIGxvYWRpbmcgZmlsZSBlcnJvclxuICogQG1lbWJlcm9mIHZpc1N0YXRlVXBkYXRlcnNcbiAqIEBwdWJsaWNcbiAqL1xuZXhwb3J0IGNvbnN0IGxvYWRGaWxlc0VyclVwZGF0ZXIgPSAoXG4gIHN0YXRlOiBWaXNTdGF0ZSxcbiAge2Vycm9yLCBmaWxlTmFtZX06IFZpc1N0YXRlQWN0aW9ucy5Mb2FkRmlsZXNFcnJVcGRhdGVyQWN0aW9uXG4pOiBWaXNTdGF0ZSA9PiB7XG4gIC8vIHVwZGF0ZSB1aSB3aXRoIGVycm9yIG1lc3NhZ2VcbiAgQ29uc29sZS53YXJuKGVycm9yKTtcbiAgaWYgKCFzdGF0ZS5maWxlTG9hZGluZykge1xuICAgIHJldHVybiBzdGF0ZTtcbiAgfVxuICBjb25zdCB7ZmlsZXNUb0xvYWQsIG9uRmluaXNoLCBmaWxlQ2FjaGV9ID0gc3RhdGUuZmlsZUxvYWRpbmc7XG5cbiAgY29uc3QgbmV4dFN0YXRlID0gdXBkYXRlRmlsZUxvYWRpbmdQcm9ncmVzc1VwZGF0ZXIoc3RhdGUsIHtcbiAgICBmaWxlTmFtZSxcbiAgICBwcm9ncmVzczoge2Vycm9yfVxuICB9KTtcblxuICAvLyBraWNrIG9mZiBuZXh0IGZpbGUgb3IgZmluaXNoXG4gIHJldHVybiB3aXRoVGFzayhcbiAgICBuZXh0U3RhdGUsXG4gICAgREVMQVlfVEFTSygyMDApLm1hcChmaWxlc1RvTG9hZC5sZW5ndGggPyBsb2FkTmV4dEZpbGUgOiAoKSA9PiBvbkZpbmlzaChmaWxlQ2FjaGUpKVxuICApO1xufTtcblxuLyoqXG4gKiBXaGVuIHNlbGVjdCBkYXRhc2V0IGZvciBleHBvcnQsIGFwcGx5IGNwdSBmaWx0ZXIgdG8gc2VsZWN0ZWQgZGF0YXNldFxuICogQG1lbWJlcm9mIHZpc1N0YXRlVXBkYXRlcnNcbiAqIEBwdWJsaWNcbiAqL1xuZXhwb3J0IGNvbnN0IGFwcGx5Q1BVRmlsdGVyVXBkYXRlciA9IChcbiAgc3RhdGU6IFZpc1N0YXRlLFxuICB7ZGF0YUlkfTogVmlzU3RhdGVBY3Rpb25zLkFwcGx5Q1BVRmlsdGVyVXBkYXRlckFjdGlvblxuKTogVmlzU3RhdGUgPT4ge1xuICAvLyBhcHBseSBjcHVGaWx0ZXJcbiAgY29uc3QgZGF0YUlkcyA9IHRvQXJyYXkoZGF0YUlkKTtcblxuICByZXR1cm4gZGF0YUlkcy5yZWR1Y2UoKGFjY3UsIGlkKSA9PiBmaWx0ZXJEYXRhc2V0Q1BVKGFjY3UsIGlkKSwgc3RhdGUpO1xufTtcblxuLyoqXG4gKiBVc2VyIGlucHV0IHRvIHVwZGF0ZSB0aGUgaW5mbyBvZiB0aGUgbWFwXG4gKiBAbWVtYmVyb2YgdmlzU3RhdGVVcGRhdGVyc1xuICogQHB1YmxpY1xuICovXG5leHBvcnQgY29uc3Qgc2V0TWFwSW5mb1VwZGF0ZXIgPSAoXG4gIHN0YXRlOiBWaXNTdGF0ZSxcbiAgYWN0aW9uOiBWaXNTdGF0ZUFjdGlvbnMuU2V0TWFwSW5mb1VwZGF0ZXJBY3Rpb25cbik6IFZpc1N0YXRlID0+ICh7XG4gIC4uLnN0YXRlLFxuICBtYXBJbmZvOiB7XG4gICAgLi4uc3RhdGUubWFwSW5mbyxcbiAgICAuLi5hY3Rpb24uaW5mb1xuICB9XG59KTtcbi8qKlxuICogSGVscGVyIGZ1bmN0aW9uIHRvIHVwZGF0ZSBBbGwgbGF5ZXIgZG9tYWluIGFuZCBsYXllciBkYXRhIG9mIHN0YXRlXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBhZGREZWZhdWx0TGF5ZXJzKFxuICBzdGF0ZTogVmlzU3RhdGUsXG4gIGRhdGFzZXRzOiBEYXRhc2V0c1xuKToge3N0YXRlOiBWaXNTdGF0ZTsgbmV3TGF5ZXJzOiBMYXllcltdfSB7XG4gIGNvbnN0IGVtcHR5OiBMYXllcltdID0gW107XG4gIGNvbnN0IGRlZmF1bHRMYXllcnMgPSBPYmplY3QudmFsdWVzKGRhdGFzZXRzKS5yZWR1Y2UoKGFjY3U6IExheWVyW10sIGRhdGFzZXQpID0+IHtcbiAgICBjb25zdCBmb3VuZExheWVycyA9IGZpbmREZWZhdWx0TGF5ZXIoZGF0YXNldCwgc3RhdGUubGF5ZXJDbGFzc2VzKTtcbiAgICByZXR1cm4gZm91bmRMYXllcnMgJiYgZm91bmRMYXllcnMubGVuZ3RoID8gYWNjdS5jb25jYXQoZm91bmRMYXllcnMpIDogYWNjdTtcbiAgfSwgZW1wdHkpO1xuXG4gIHJldHVybiB7XG4gICAgc3RhdGU6IHtcbiAgICAgIC4uLnN0YXRlLFxuICAgICAgbGF5ZXJzOiBbLi4uc3RhdGUubGF5ZXJzLCAuLi5kZWZhdWx0TGF5ZXJzXSxcbiAgICAgIGxheWVyT3JkZXI6IFtcbiAgICAgICAgLy8gcHV0IG5ldyBsYXllcnMgb24gdG9wIG9mIG9sZCBvbmVzIGluIHJldmVyc2VcbiAgICAgICAgLi4uZ2V0TGF5ZXJPcmRlckZyb21MYXllcnMoZGVmYXVsdExheWVycyksXG4gICAgICAgIC4uLnN0YXRlLmxheWVyT3JkZXJcbiAgICAgIF1cbiAgICB9LFxuICAgIG5ld0xheWVyczogZGVmYXVsdExheWVyc1xuICB9O1xufVxuXG4vKipcbiAqIGhlbHBlciBmdW5jdGlvbiB0byBmaW5kIGRlZmF1bHQgdG9vbHRpcHNcbiAqIEBwYXJhbSB7T2JqZWN0fSBzdGF0ZVxuICogQHBhcmFtIHtPYmplY3R9IGRhdGFzZXRcbiAqIEByZXR1cm5zIHtPYmplY3R9IG5leHRTdGF0ZVxuICovXG5leHBvcnQgZnVuY3Rpb24gYWRkRGVmYXVsdFRvb2x0aXBzKHN0YXRlLCBkYXRhc2V0KSB7XG4gIGNvbnN0IHRvb2x0aXBGaWVsZHMgPSBmaW5kRmllbGRzVG9TaG93KHtcbiAgICAuLi5kYXRhc2V0LFxuICAgIG1heERlZmF1bHRUb29sdGlwczogc3RhdGUubWF4RGVmYXVsdFRvb2x0aXBzXG4gIH0pO1xuICBjb25zdCBtZXJnZWQgPSB7XG4gICAgLi4uc3RhdGUuaW50ZXJhY3Rpb25Db25maWcudG9vbHRpcC5jb25maWcuZmllbGRzVG9TaG93LFxuICAgIC4uLnRvb2x0aXBGaWVsZHNcbiAgfTtcblxuICByZXR1cm4gc2V0KFsnaW50ZXJhY3Rpb25Db25maWcnLCAndG9vbHRpcCcsICdjb25maWcnLCAnZmllbGRzVG9TaG93J10sIG1lcmdlZCwgc3RhdGUpO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gaW5pdGlhbEZpbGVMb2FkaW5nUHJvZ3Jlc3MoZmlsZSwgaW5kZXgpIHtcbiAgY29uc3QgZmlsZU5hbWUgPSBmaWxlLm5hbWUgfHwgYFVudGl0bGVkIEZpbGUgJHtpbmRleH1gO1xuICByZXR1cm4ge1xuICAgIFtmaWxlTmFtZV06IHtcbiAgICAgIC8vIHBlcmNlbnQgb2YgY3VycmVudCBmaWxlXG4gICAgICBwZXJjZW50OiAwLFxuICAgICAgbWVzc2FnZTogJycsXG4gICAgICBmaWxlTmFtZSxcbiAgICAgIGVycm9yOiBudWxsXG4gICAgfVxuICB9O1xufVxuXG5leHBvcnQgZnVuY3Rpb24gdXBkYXRlRmlsZUxvYWRpbmdQcm9ncmVzc1VwZGF0ZXIoc3RhdGUsIHtmaWxlTmFtZSwgcHJvZ3Jlc3N9KSB7XG4gIC8vIEB0cy1leHBlY3QtZXJyb3JcbiAgcmV0dXJuIHBpY2tfKCdmaWxlTG9hZGluZ1Byb2dyZXNzJykocGlja18oZmlsZU5hbWUpKG1lcmdlXyhwcm9ncmVzcykpKShzdGF0ZSk7XG59XG4vKipcbiAqIEhlbHBlciBmdW5jdGlvbiB0byB1cGRhdGUgbGF5ZXIgZG9tYWlucyBmb3IgYW4gYXJyYXkgb2YgZGF0YXNldHNcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHVwZGF0ZUFsbExheWVyRG9tYWluRGF0YTxTIGV4dGVuZHMgVmlzU3RhdGU+KFxuICBzdGF0ZTogUyxcbiAgZGF0YUlkOiBzdHJpbmcgfCBzdHJpbmdbXSxcbiAgdXBkYXRlZEZpbHRlcj86IEZpbHRlclxuKTogUyB7XG4gIGNvbnN0IGRhdGFJZHMgPSB0eXBlb2YgZGF0YUlkID09PSAnc3RyaW5nJyA/IFtkYXRhSWRdIDogZGF0YUlkO1xuICBjb25zdCBuZXdMYXllcnM6IExheWVyW10gPSBbXTtcbiAgY29uc3QgbmV3TGF5ZXJEYXRhOiBhbnlbXSA9IFtdO1xuXG4gIHN0YXRlLmxheWVycy5mb3JFYWNoKChvbGRMYXllciwgaSkgPT4ge1xuICAgIGlmIChvbGRMYXllci5jb25maWcuZGF0YUlkICYmIGRhdGFJZHMuaW5jbHVkZXMob2xkTGF5ZXIuY29uZmlnLmRhdGFJZCkpIHtcbiAgICAgIC8vIE5vIG5lZWQgdG8gcmVjYWxjdWxhdGUgbGF5ZXIgZG9tYWluIGlmIGZpbHRlciBoYXMgZml4ZWQgZG9tYWluXG4gICAgICBjb25zdCBuZXdMYXllciA9XG4gICAgICAgIHVwZGF0ZWRGaWx0ZXIgJiYgdXBkYXRlZEZpbHRlci5maXhlZERvbWFpblxuICAgICAgICAgID8gb2xkTGF5ZXJcbiAgICAgICAgICA6IG9sZExheWVyLnVwZGF0ZUxheWVyRG9tYWluKHN0YXRlLmRhdGFzZXRzLCB1cGRhdGVkRmlsdGVyKTtcblxuICAgICAgY29uc3Qge2xheWVyRGF0YSwgbGF5ZXJ9ID0gY2FsY3VsYXRlTGF5ZXJEYXRhKG5ld0xheWVyLCBzdGF0ZSwgc3RhdGUubGF5ZXJEYXRhW2ldKTtcblxuICAgICAgbmV3TGF5ZXJzLnB1c2gobGF5ZXIpO1xuICAgICAgbmV3TGF5ZXJEYXRhLnB1c2gobGF5ZXJEYXRhKTtcbiAgICB9IGVsc2Uge1xuICAgICAgbmV3TGF5ZXJzLnB1c2gob2xkTGF5ZXIpO1xuICAgICAgbmV3TGF5ZXJEYXRhLnB1c2goc3RhdGUubGF5ZXJEYXRhW2ldKTtcbiAgICB9XG4gIH0pO1xuXG4gIGNvbnN0IG5ld1N0YXRlID0ge1xuICAgIC4uLnN0YXRlLFxuICAgIGxheWVyczogbmV3TGF5ZXJzLFxuICAgIGxheWVyRGF0YTogbmV3TGF5ZXJEYXRhXG4gIH07XG5cbiAgcmV0dXJuIG5ld1N0YXRlO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gdXBkYXRlQW5pbWF0aW9uRG9tYWluPFMgZXh0ZW5kcyBWaXNTdGF0ZT4oc3RhdGU6IFMpOiBTIHtcbiAgLy8gbWVyZ2UgYWxsIGFuaW1hdGFibGUgbGF5ZXIgZG9tYWluIGFuZCB1cGRhdGUgZ2xvYmFsIGNvbmZpZ1xuICBjb25zdCBhbmltYXRhYmxlTGF5ZXJzID0gZ2V0QW5pbWF0YWJsZVZpc2libGVMYXllcnMoc3RhdGUubGF5ZXJzKTtcblxuICBpZiAoIWFuaW1hdGFibGVMYXllcnMubGVuZ3RoKSB7XG4gICAgcmV0dXJuIHtcbiAgICAgIC4uLnN0YXRlLFxuICAgICAgYW5pbWF0aW9uQ29uZmlnOiB7XG4gICAgICAgIC4uLnN0YXRlLmFuaW1hdGlvbkNvbmZpZyxcbiAgICAgICAgZG9tYWluOiBudWxsLFxuICAgICAgICBpc0FuaW1hdGluZzogZmFsc2UsXG4gICAgICAgIHRpbWVTdGVwczogbnVsbCxcbiAgICAgICAgZGVmYXVsdFRpbWVGb3JtYXQ6IG51bGxcbiAgICAgIH1cbiAgICB9O1xuICB9XG5cbiAgY29uc3QgbGF5ZXJEb21haW5zID0gYW5pbWF0YWJsZUxheWVycy5tYXAobCA9PiBsLmNvbmZpZy5hbmltYXRpb24uZG9tYWluIHx8IFtdKTtcbiAgLy8gQHRzLWlnbm9yZVxuICBjb25zdCBtZXJnZWREb21haW4gPSBtZXJnZVRpbWVEb21haW5zKGxheWVyRG9tYWlucyk7XG4gIGNvbnN0IGRlZmF1bHRUaW1lRm9ybWF0ID0gZ2V0VGltZVdpZGdldFRpdGxlRm9ybWF0dGVyKG1lcmdlZERvbWFpbik7XG5cbiAgLy8gbWVyZ2UgdGltZVN0ZXBzXG4gIGxldCBtZXJnZWRUaW1lU3RlcHM6IG51bWJlcltdIHwgbnVsbCA9IHVuaXE8bnVtYmVyPihcbiAgICBhbmltYXRhYmxlTGF5ZXJzLnJlZHVjZSgoYWNjdSwgbGF5ZXIpID0+IHtcbiAgICAgIGFjY3UucHVzaCguLi4obGF5ZXIuY29uZmlnLmFuaW1hdGlvbi50aW1lU3RlcHMgfHwgW10pKTtcbiAgICAgIHJldHVybiBhY2N1O1xuICAgIH0sIFtdKVxuICApLnNvcnQoKTtcblxuICBtZXJnZWRUaW1lU3RlcHMgPSBtZXJnZWRUaW1lU3RlcHMubGVuZ3RoID8gbWVyZ2VkVGltZVN0ZXBzIDogbnVsbDtcblxuICAvLyBUT0RPOiBiZXR0ZXIgaGFuZGxpbmcgb2YgZHVyYXRpb24gY2FsY3VsYXRpb25cbiAgY29uc3QgZHVyYXRpb24gPSBtZXJnZWRUaW1lU3RlcHNcbiAgICA/IChCQVNFX1NQRUVEICogKDEwMDAgLyBGUFMpKSAvIG1lcmdlZFRpbWVTdGVwcy5sZW5ndGggLyAoc3RhdGUuYW5pbWF0aW9uQ29uZmlnLnNwZWVkIHx8IDEpXG4gICAgOiBudWxsO1xuXG4gIGNvbnN0IG5leHRTdGF0ZSA9IHtcbiAgICAuLi5zdGF0ZSxcbiAgICBhbmltYXRpb25Db25maWc6IHtcbiAgICAgIC4uLnN0YXRlLmFuaW1hdGlvbkNvbmZpZyxcbiAgICAgIGRvbWFpbjogbWVyZ2VkRG9tYWluLFxuICAgICAgZGVmYXVsdFRpbWVGb3JtYXQsXG4gICAgICBkdXJhdGlvbixcbiAgICAgIHRpbWVTdGVwczogbWVyZ2VkVGltZVN0ZXBzXG4gICAgfVxuICB9O1xuXG4gIC8vIHJlc2V0IGN1cnJlbnRUaW1lIGJhc2VkIG9uIG5ldyBkb21haW5cbiAgY29uc3Qgc3luY2VkRmlsdGVyID0gc3RhdGUuZmlsdGVycz8uZmluZChmID0+IChmIGFzIFRpbWVSYW5nZUZpbHRlcikuc3luY2VkV2l0aExheWVyVGltZWxpbmUpIGFzXG4gICAgfCBUaW1lUmFuZ2VGaWx0ZXJcbiAgICB8IHVuZGVmaW5lZDtcblxuICAvLyBpZiBzeW5jZWQgZmlsdGVyIGV4aXN0IHdlZSBuZWVkIHRvIG1lcmdlIGFuaW1hdGlvbkNvbmZpZyBhbmQgZmlsdGVyIGRvbWFpbnNcbiAgLy8gYW5kIHZhbGlkYXRlIHRoZSBjdXJyZW50IHRpbWUgYWdhaW5zdCB0aGUgbmV3IG1lcmdlZCBkb21haW5cbiAgY29uc3QgbmV3QW5pbWF0aW9uRG9tYWluID0gc3luY2VkRmlsdGVyXG4gICAgPyBtZXJnZVRpbWVEb21haW5zKFttZXJnZWREb21haW4sIHN5bmNlZEZpbHRlci5kb21haW5dKVxuICAgIDogbWVyZ2VkRG9tYWluO1xuICBjb25zdCBjdXJyZW50VGltZSA9IGlzSW5SYW5nZShzdGF0ZS5hbmltYXRpb25Db25maWcuY3VycmVudFRpbWUsIG5ld0FuaW1hdGlvbkRvbWFpbilcbiAgICA/IHN0YXRlLmFuaW1hdGlvbkNvbmZpZy5jdXJyZW50VGltZVxuICAgIDogbmV3QW5pbWF0aW9uRG9tYWluWzBdO1xuXG4gIGlmIChjdXJyZW50VGltZSAhPT0gc3RhdGUuYW5pbWF0aW9uQ29uZmlnLmN1cnJlbnRUaW1lKSB7XG4gICAgLy8gaWYgY3VycmVudFRpbWUgY2hhbmdlZCwgbmVlZCB0byBjYWxsIGFuaW1hdGlvblRpbWVVcGRhdGVyIHRvIHJlIGNhbGwgZm9ybWF0TGF5ZXJEYXRhXG4gICAgcmV0dXJuIHNldExheWVyQW5pbWF0aW9uVGltZVVwZGF0ZXIobmV4dFN0YXRlLCB7dmFsdWU6IGN1cnJlbnRUaW1lfSk7XG4gIH1cblxuICByZXR1cm4gbmV4dFN0YXRlO1xufVxuXG4vKipcbiAqIFVwZGF0ZSB0aGUgc3RhdHVzIG9mIHRoZSBlZGl0b3JcbiAqIEBtZW1iZXJvZiB2aXNTdGF0ZVVwZGF0ZXJzXG4gKi9cbmV4cG9ydCBjb25zdCBzZXRFZGl0b3JNb2RlVXBkYXRlciA9IChcbiAgc3RhdGU6IFZpc1N0YXRlLFxuICB7bW9kZX06IFZpc1N0YXRlQWN0aW9ucy5TZXRFZGl0b3JNb2RlVXBkYXRlckFjdGlvblxuKTogVmlzU3RhdGUgPT4gKHtcbiAgLi4uc3RhdGUsXG4gIGVkaXRvcjoge1xuICAgIC4uLnN0YXRlLmVkaXRvcixcbiAgICBtb2RlLFxuICAgIHNlbGVjdGVkRmVhdHVyZTogbnVsbFxuICB9XG59KTtcblxuLy8gY29uc3QgZmVhdHVyZVRvRmlsdGVyVmFsdWUgPSAoZmVhdHVyZSkgPT4gKHsuLi5mZWF0dXJlLCBpZDogZmVhdHVyZS5pZH0pO1xuLyoqXG4gKiBVcGRhdGUgZWRpdG9yIGZlYXR1cmVzXG4gKiBAbWVtYmVyb2YgdmlzU3RhdGVVcGRhdGVyc1xuICovXG5leHBvcnQgZnVuY3Rpb24gc2V0RmVhdHVyZXNVcGRhdGVyKFxuICBzdGF0ZTogVmlzU3RhdGUsXG4gIHtmZWF0dXJlcyA9IFtdfTogVmlzU3RhdGVBY3Rpb25zLlNldEZlYXR1cmVzVXBkYXRlckFjdGlvblxuKTogVmlzU3RhdGUge1xuICBjb25zdCBsYXN0RmVhdHVyZSA9IGZlYXR1cmVzLmxlbmd0aCAmJiBmZWF0dXJlc1tmZWF0dXJlcy5sZW5ndGggLSAxXTtcblxuICBjb25zdCBuZXdTdGF0ZSA9IHtcbiAgICAuLi5zdGF0ZSxcbiAgICBlZGl0b3I6IHtcbiAgICAgIC4uLnN0YXRlLmVkaXRvcixcbiAgICAgIC8vIG9ubHkgc2F2ZSBub25lIGZpbHRlciBmZWF0dXJlcyB0byBlZGl0b3JcbiAgICAgIGZlYXR1cmVzOiBmZWF0dXJlcy5maWx0ZXIoZiA9PiAhZ2V0RmlsdGVySWRJbkZlYXR1cmUoZikpLFxuICAgICAgbW9kZTogbGFzdEZlYXR1cmUgJiYgbGFzdEZlYXR1cmUucHJvcGVydGllcz8uaXNDbG9zZWQgPyBFRElUT1JfTU9ERVMuRURJVCA6IHN0YXRlLmVkaXRvci5tb2RlXG4gICAgfVxuICB9O1xuXG4gIC8vIFJldHJpZXZlIGV4aXN0aW5nIGZlYXR1cmVcbiAgY29uc3Qge3NlbGVjdGVkRmVhdHVyZX0gPSBzdGF0ZS5lZGl0b3I7XG5cbiAgLy8gSWYgbm8gZmVhdHVyZSBpcyBzZWxlY3RlZCB3ZSBjYW4gc2ltcGx5IHJldHVybiBzaW5jZSBubyBvcGVyYXRpb25zXG4gIGlmICghc2VsZWN0ZWRGZWF0dXJlKSB7XG4gICAgcmV0dXJuIG5ld1N0YXRlO1xuICB9XG5cbiAgLy8gVE9ETzogY2hlY2sgaWYgdGhlIGZlYXR1cmUgaGFzIGNoYW5nZWRcbiAgY29uc3QgZmVhdHVyZSA9IGZlYXR1cmVzLmZpbmQoZiA9PiBmLmlkID09PSBzZWxlY3RlZEZlYXR1cmUuaWQpO1xuXG4gIC8vIGlmIGZlYXR1cmUgaXMgcGFydCBvZiBhIGZpbHRlclxuICBjb25zdCBmaWx0ZXJJZCA9IGZlYXR1cmUgJiYgZ2V0RmlsdGVySWRJbkZlYXR1cmUoZmVhdHVyZSk7XG4gIGlmIChmaWx0ZXJJZCAmJiBmZWF0dXJlKSB7XG4gICAgLy8gYWRkIGJib3ggZm9yIHBvbHlnb24gZmlsdGVyIHRvIHNwZWVkIHVwIGZpbHRlcmluZ1xuICAgIGlmIChmZWF0dXJlLnByb3BlcnRpZXMpIGZlYXR1cmUucHJvcGVydGllcy5iYm94ID0gYmJveChmZWF0dXJlKTtcbiAgICBjb25zdCBmZWF0dXJlVmFsdWUgPSBmZWF0dXJlVG9GaWx0ZXJWYWx1ZShmZWF0dXJlLCBmaWx0ZXJJZCk7XG4gICAgY29uc3QgZmlsdGVySWR4ID0gc3RhdGUuZmlsdGVycy5maW5kSW5kZXgoZmlsID0+IGZpbC5pZCA9PT0gZmlsdGVySWQpO1xuICAgIC8vIEB0cy1pZ25vcmVcbiAgICByZXR1cm4gc2V0RmlsdGVyVXBkYXRlcihuZXdTdGF0ZSwge1xuICAgICAgaWR4OiBmaWx0ZXJJZHgsXG4gICAgICBwcm9wOiAndmFsdWUnLFxuICAgICAgdmFsdWU6IGZlYXR1cmVWYWx1ZVxuICAgIH0pO1xuICB9XG5cbiAgcmV0dXJuIG5ld1N0YXRlO1xufVxuXG4vKipcbiAqIFNldCB0aGUgY3VycmVudCBzZWxlY3RlZCBmZWF0dXJlXG4gKiBAbWVtYmVyb2YgdWlTdGF0ZVVwZGF0ZXJzXG4gKi9cbmV4cG9ydCBjb25zdCBzZXRTZWxlY3RlZEZlYXR1cmVVcGRhdGVyID0gKFxuICBzdGF0ZTogVmlzU3RhdGUsXG4gIHtmZWF0dXJlLCBzZWxlY3Rpb25Db250ZXh0fTogVmlzU3RhdGVBY3Rpb25zLlNldFNlbGVjdGVkRmVhdHVyZVVwZGF0ZXJBY3Rpb25cbik6IFZpc1N0YXRlID0+IHtcbiAgLy8gYWRkIGJib3ggZm9yIHBvbHlnb24gZmlsdGVyIHRvIHNwZWVkIHVwIGZpbHRlcmluZ1xuICBsZXQgc2VsZWN0ZWRGZWF0dXJlID0gZmVhdHVyZTtcbiAgaWYgKGZlYXR1cmU/LnByb3BlcnRpZXMpIHtcbiAgICBzZWxlY3RlZEZlYXR1cmUgPSB7XG4gICAgICAuLi5mZWF0dXJlLFxuICAgICAgcHJvcGVydGllczoge1xuICAgICAgICAuLi5mZWF0dXJlLnByb3BlcnRpZXMsXG4gICAgICAgIGJib3g6IGJib3goZmVhdHVyZSlcbiAgICAgIH1cbiAgICB9O1xuICB9XG4gIHJldHVybiB7XG4gICAgLi4uc3RhdGUsXG4gICAgZWRpdG9yOiB7XG4gICAgICAuLi5zdGF0ZS5lZGl0b3IsXG4gICAgICBzZWxlY3RlZEZlYXR1cmUsXG4gICAgICBzZWxlY3Rpb25Db250ZXh0XG4gICAgfVxuICB9O1xufTtcblxuLyoqXG4gKiBEZWxldGUgZXhpc3RpbmcgZmVhdHVyZSBmcm9tIGZpbHRlcnNcbiAqIEBtZW1iZXJvZiB2aXNTdGF0ZVVwZGF0ZXJzXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBkZWxldGVGZWF0dXJlVXBkYXRlcihcbiAgc3RhdGU6IFZpc1N0YXRlLFxuICB7ZmVhdHVyZX06IFZpc1N0YXRlQWN0aW9ucy5EZWxldGVGZWF0dXJlVXBkYXRlckFjdGlvblxuKTogVmlzU3RhdGUge1xuICBpZiAoIWZlYXR1cmUpIHtcbiAgICByZXR1cm4gc3RhdGU7XG4gIH1cblxuICBjb25zdCBuZXdTdGF0ZSA9IHtcbiAgICAuLi5zdGF0ZSxcbiAgICBlZGl0b3I6IHtcbiAgICAgIC4uLnN0YXRlLmVkaXRvcixcbiAgICAgIHNlbGVjdGVkRmVhdHVyZTogbnVsbFxuICAgIH1cbiAgfTtcblxuICBpZiAoZ2V0RmlsdGVySWRJbkZlYXR1cmUoZmVhdHVyZSkpIHtcbiAgICBjb25zdCBmaWx0ZXJJZHggPSBuZXdTdGF0ZS5maWx0ZXJzLmZpbmRJbmRleChmID0+IGYuaWQgPT09IGdldEZpbHRlcklkSW5GZWF0dXJlKGZlYXR1cmUpKTtcblxuICAgIHJldHVybiBmaWx0ZXJJZHggPiAtMSA/IHJlbW92ZUZpbHRlclVwZGF0ZXIobmV3U3RhdGUsIHtpZHg6IGZpbHRlcklkeH0pIDogbmV3U3RhdGU7XG4gIH1cblxuICAvLyBtb2RpZnkgZWRpdG9yIG9iamVjdFxuICBjb25zdCBuZXdFZGl0b3IgPSB7XG4gICAgLi4uc3RhdGUuZWRpdG9yLFxuICAgIGZlYXR1cmVzOiBzdGF0ZS5lZGl0b3IuZmVhdHVyZXMuZmlsdGVyKGYgPT4gZi5pZCAhPT0gZmVhdHVyZS5pZCksXG4gICAgc2VsZWN0ZWRGZWF0dXJlOiBudWxsXG4gIH07XG5cbiAgcmV0dXJuIHtcbiAgICAuLi5zdGF0ZSxcbiAgICBlZGl0b3I6IG5ld0VkaXRvclxuICB9O1xufVxuXG4vKipcbiAqIFRvZ2dsZSBmZWF0dXJlIGFzIGxheWVyIGZpbHRlclxuICogQG1lbWJlcm9mIHZpc1N0YXRlVXBkYXRlcnNcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHNldFBvbHlnb25GaWx0ZXJMYXllclVwZGF0ZXIoXG4gIHN0YXRlOiBWaXNTdGF0ZSxcbiAgcGF5bG9hZDogVmlzU3RhdGVBY3Rpb25zLlNldFBvbHlnb25GaWx0ZXJMYXllclVwZGF0ZXJBY3Rpb25cbik6IFZpc1N0YXRlIHtcbiAgY29uc3Qge2xheWVyLCBmZWF0dXJlfSA9IHBheWxvYWQ7XG4gIGNvbnN0IGZpbHRlcklkID0gZ2V0RmlsdGVySWRJbkZlYXR1cmUoZmVhdHVyZSk7XG5cbiAgLy8gbGV0IG5ld0ZpbHRlciA9IG51bGw7XG4gIGxldCBmaWx0ZXJJZHg7XG4gIGxldCBuZXdMYXllcklkID0gW2xheWVyLmlkXTtcbiAgbGV0IG5ld1N0YXRlID0gc3RhdGU7XG4gIC8vIElmIHBvbHlnb24gZmlsdGVyIGFscmVhZHkgZXhpc3RzLCB3ZSBuZWVkIHRvIGZpbmQgb3V0IGlmIHRoZSBjdXJyZW50IGxheWVyIGlzIGFscmVhZHkgaW5jbHVkZWRcbiAgaWYgKGZpbHRlcklkKSB7XG4gICAgZmlsdGVySWR4ID0gc3RhdGUuZmlsdGVycy5maW5kSW5kZXgoZiA9PiBmLmlkID09PSBmaWx0ZXJJZCk7XG5cbiAgICBpZiAoIXN0YXRlLmZpbHRlcnNbZmlsdGVySWR4XSkge1xuICAgICAgLy8gd2hhdCBpZiBmaWx0ZXIgZG9lc24ndCBleGlzdD8uLi4gbm90IHBvc3NpYmxlLlxuICAgICAgLy8gYmVjYXVzZSBmZWF0dXJlcyBpbiB0aGUgZWRpdG9yIGlzIHBhc3NlZCBpbiBmcm9tIGZpbHRlcnMgYW5kIGVkaXRvcnMuXG4gICAgICAvLyBidXQgd2Ugd2lsbCBtb3ZlIHRoaXMgZmVhdHVyZSBiYWNrIHRvIGVkaXRvciBqdXN0IGluIGNhc2VcbiAgICAgIGNvbnN0IG5vbmVGaWx0ZXJGZWF0dXJlID0ge1xuICAgICAgICAuLi5mZWF0dXJlLFxuICAgICAgICBwcm9wZXJ0aWVzOiB7XG4gICAgICAgICAgLi4uZmVhdHVyZS5wcm9wZXJ0aWVzLFxuICAgICAgICAgIGZpbHRlcklkOiBudWxsXG4gICAgICAgIH1cbiAgICAgIH07XG5cbiAgICAgIHJldHVybiB7XG4gICAgICAgIC4uLnN0YXRlLFxuICAgICAgICBlZGl0b3I6IHtcbiAgICAgICAgICAuLi5zdGF0ZS5lZGl0b3IsXG4gICAgICAgICAgZmVhdHVyZXM6IFsuLi5zdGF0ZS5lZGl0b3IuZmVhdHVyZXMsIG5vbmVGaWx0ZXJGZWF0dXJlXSxcbiAgICAgICAgICBzZWxlY3RlZEZlYXR1cmU6IG5vbmVGaWx0ZXJGZWF0dXJlXG4gICAgICAgIH1cbiAgICAgIH07XG4gICAgfVxuICAgIGNvbnN0IGZpbHRlciA9IHN0YXRlLmZpbHRlcnNbZmlsdGVySWR4XTtcbiAgICBjb25zdCB7bGF5ZXJJZCA9IFtdfSA9IGZpbHRlcjtcbiAgICBjb25zdCBpc0xheWVySW5jbHVkZWQgPSBsYXllcklkLmluY2x1ZGVzKGxheWVyLmlkKTtcblxuICAgIG5ld0xheWVySWQgPSBpc0xheWVySW5jbHVkZWRcbiAgICAgID8gLy8gaWYgbGF5ZXIgaXMgaW5jbHVkZWQsIHJlbW92ZSBpdFxuICAgICAgICBsYXllcklkLmZpbHRlcihsID0+IGwgIT09IGxheWVyLmlkKVxuICAgICAgOiBbLi4ubGF5ZXJJZCwgbGF5ZXIuaWRdO1xuICB9IGVsc2Uge1xuICAgIC8vIGlmIHdlIGhhdmVuJ3QgY3JlYXRlIHRoZSBwb2x5Z29uIGZpbHRlciwgY3JlYXRlIGl0XG4gICAgY29uc3QgbmV3RmlsdGVyID0gZ2VuZXJhdGVQb2x5Z29uRmlsdGVyKFtdLCBmZWF0dXJlKTtcbiAgICBmaWx0ZXJJZHggPSBzdGF0ZS5maWx0ZXJzLmxlbmd0aDtcblxuICAgIC8vIGFkZCBmZWF0dXJlLCByZW1vdmUgZmVhdHVyZSBmcm9tIGVpZHRvclxuICAgIG5ld1N0YXRlID0ge1xuICAgICAgLi4uc3RhdGUsXG4gICAgICBmaWx0ZXJzOiBbLi4uc3RhdGUuZmlsdGVycywgbmV3RmlsdGVyXSxcbiAgICAgIGVkaXRvcjoge1xuICAgICAgICAuLi5zdGF0ZS5lZGl0b3IsXG4gICAgICAgIGZlYXR1cmVzOiBzdGF0ZS5lZGl0b3IuZmVhdHVyZXMuZmlsdGVyKGYgPT4gZi5pZCAhPT0gZmVhdHVyZS5pZCksXG4gICAgICAgIHNlbGVjdGVkRmVhdHVyZTogbmV3RmlsdGVyLnZhbHVlXG4gICAgICB9XG4gICAgfTtcbiAgfVxuXG4gIHJldHVybiBzZXRGaWx0ZXJVcGRhdGVyKG5ld1N0YXRlLCB7XG4gICAgaWR4OiBmaWx0ZXJJZHgsXG4gICAgcHJvcDogJ2xheWVySWQnLFxuICAgIHZhbHVlOiBuZXdMYXllcklkXG4gIH0pO1xufVxuXG4vKipcbiAqIEBtZW1iZXJvZiB2aXNTdGF0ZVVwZGF0ZXJzXG4gKiBAcHVibGljXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBzb3J0VGFibGVDb2x1bW5VcGRhdGVyKFxuICBzdGF0ZTogVmlzU3RhdGUsXG4gIHtkYXRhSWQsIGNvbHVtbiwgbW9kZX06IFZpc1N0YXRlQWN0aW9ucy5Tb3J0VGFibGVDb2x1bW5VcGRhdGVyQWN0aW9uXG4pOiBWaXNTdGF0ZSB7XG4gIGNvbnN0IGRhdGFzZXQgPSBzdGF0ZS5kYXRhc2V0c1tkYXRhSWRdO1xuICBpZiAoIWRhdGFzZXQpIHtcbiAgICByZXR1cm4gc3RhdGU7XG4gIH1cbiAgbGV0IHNvcnRNb2RlID0gbW9kZTtcbiAgaWYgKCFzb3J0TW9kZSkge1xuICAgIGNvbnN0IGN1cnJlbnRNb2RlID0gZ2V0KGRhdGFzZXQsIFsnc29ydENvbHVtbicsIGNvbHVtbl0pO1xuICAgIC8vIEB0cy1pZ25vcmUgLSBzaG91bGQgYmUgZml4YWJsZSBpbiBhIFRTIGZpbGVcbiAgICBzb3J0TW9kZSA9IGN1cnJlbnRNb2RlXG4gICAgICA/IE9iamVjdC5rZXlzKFNPUlRfT1JERVIpLmZpbmQobSA9PiBtICE9PSBjdXJyZW50TW9kZSlcbiAgICAgIDogU09SVF9PUkRFUi5BU0NFTkRJTkc7XG4gIH1cblxuICBjb25zdCBzb3J0ZWQgPSBzb3J0RGF0YXNldEJ5Q29sdW1uKGRhdGFzZXQsIGNvbHVtbiwgc29ydE1vZGUpO1xuICByZXR1cm4gc2V0KFsnZGF0YXNldHMnLCBkYXRhSWRdLCBzb3J0ZWQsIHN0YXRlKTtcbn1cblxuLyoqXG4gKiBAbWVtYmVyb2YgdmlzU3RhdGVVcGRhdGVyc1xuICogQHB1YmxpY1xuICovXG5leHBvcnQgZnVuY3Rpb24gcGluVGFibGVDb2x1bW5VcGRhdGVyKFxuICBzdGF0ZTogVmlzU3RhdGUsXG4gIHtkYXRhSWQsIGNvbHVtbn06IFZpc1N0YXRlQWN0aW9ucy5QaW5UYWJsZUNvbHVtblVwZGF0ZXJBY3Rpb25cbik6IFZpc1N0YXRlIHtcbiAgY29uc3QgZGF0YXNldCA9IHN0YXRlLmRhdGFzZXRzW2RhdGFJZF07XG4gIGlmICghZGF0YXNldCkge1xuICAgIHJldHVybiBzdGF0ZTtcbiAgfVxuICBjb25zdCBuZXdEYXRhc2V0ID0gcGluVGFibGVDb2x1bW5zKGRhdGFzZXQsIGNvbHVtbik7XG5cbiAgcmV0dXJuIHNldChbJ2RhdGFzZXRzJywgZGF0YUlkXSwgbmV3RGF0YXNldCwgc3RhdGUpO1xufVxuXG4vKipcbiAqIENvcHkgY29sdW1uIGNvbnRlbnQgYXMgc3RyaW5nc1xuICogQG1lbWJlcm9mIHZpc1N0YXRlVXBkYXRlcnNcbiAqIEBwdWJsaWNcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGNvcHlUYWJsZUNvbHVtblVwZGF0ZXIoXG4gIHN0YXRlOiBWaXNTdGF0ZSxcbiAge2RhdGFJZCwgY29sdW1ufTogVmlzU3RhdGVBY3Rpb25zLkNvcHlUYWJsZUNvbHVtblVwZGF0ZXJBY3Rpb25cbik6IFZpc1N0YXRlIHtcbiAgY29uc3QgZGF0YXNldCA9IHN0YXRlLmRhdGFzZXRzW2RhdGFJZF07XG4gIGlmICghZGF0YXNldCkge1xuICAgIHJldHVybiBzdGF0ZTtcbiAgfVxuICBjb25zdCBmaWVsZElkeCA9IGRhdGFzZXQuZmllbGRzLmZpbmRJbmRleChmID0+IGYubmFtZSA9PT0gY29sdW1uKTtcbiAgaWYgKGZpZWxkSWR4IDwgMCkge1xuICAgIHJldHVybiBzdGF0ZTtcbiAgfVxuICBjb25zdCB7dHlwZX0gPSBkYXRhc2V0LmZpZWxkc1tmaWVsZElkeF07XG4gIGNvbnN0IHRleHQgPSBkYXRhc2V0LmRhdGFDb250YWluZXJcbiAgICAubWFwKHJvdyA9PiBwYXJzZUZpZWxkVmFsdWUocm93LnZhbHVlQXQoZmllbGRJZHgpLCB0eXBlKSwgdHJ1ZSlcbiAgICAuam9pbignXFxuJyk7XG5cbiAgY29weSh0ZXh0KTtcblxuICByZXR1cm4gc3RhdGU7XG59XG5cbi8qKlxuICogU2V0IGRpc3BsYXkgZm9ybWF0IGZyb20gY29sdW1ucyBmcm9tIHVzZXIgc2VsZWN0aW9uXG4gKiBAbWVtYmVyb2YgdmlzU3RhdGVVcGRhdGVyc1xuICogQHB1YmxpY1xuICovXG5leHBvcnQgZnVuY3Rpb24gc2V0Q29sdW1uRGlzcGxheUZvcm1hdFVwZGF0ZXIoXG4gIHN0YXRlOiBWaXNTdGF0ZSxcbiAge2RhdGFJZCwgZm9ybWF0c306IFZpc1N0YXRlQWN0aW9ucy5TZXRDb2x1bW5EaXNwbGF5Rm9ybWF0VXBkYXRlckFjdGlvblxuKTogVmlzU3RhdGUge1xuICBjb25zdCBkYXRhc2V0ID0gc3RhdGUuZGF0YXNldHNbZGF0YUlkXTtcbiAgaWYgKCFkYXRhc2V0KSB7XG4gICAgcmV0dXJuIHN0YXRlO1xuICB9XG4gIGxldCBuZXdGaWVsZHMgPSBkYXRhc2V0LmZpZWxkcztcbiAgT2JqZWN0LmtleXMoZm9ybWF0cykuZm9yRWFjaChjb2x1bW4gPT4ge1xuICAgIGNvbnN0IGZpZWxkSWR4ID0gZGF0YXNldC5maWVsZHMuZmluZEluZGV4KGYgPT4gZi5uYW1lID09PSBjb2x1bW4pO1xuICAgIGlmIChmaWVsZElkeCA+PSAwKSB7XG4gICAgICBjb25zdCBkaXNwbGF5Rm9ybWF0ID0gZm9ybWF0c1tjb2x1bW5dO1xuICAgICAgY29uc3QgZmllbGQgPSBuZXdGaWVsZHNbZmllbGRJZHhdO1xuICAgICAgbmV3RmllbGRzID0gc3dhcF8obWVyZ2VfKHtkaXNwbGF5Rm9ybWF0fSkoZmllbGQpIGFzIHtpZDogc3RyaW5nfSkoXG4gICAgICAgIG5ld0ZpZWxkcyBhcyB7aWQ6IHN0cmluZ31bXVxuICAgICAgKSBhcyBGaWVsZFtdO1xuICAgIH1cbiAgfSk7XG5cbiAgY29uc3QgbmV3RGF0YXNldCA9IGNvcHlUYWJsZUFuZFVwZGF0ZShkYXRhc2V0LCB7ZmllbGRzOiBuZXdGaWVsZHMgYXMgRmllbGRbXX0pO1xuICBsZXQgbmV3U3RhdGUgPSBwaWNrXygnZGF0YXNldHMnKShtZXJnZV8oe1tkYXRhSWRdOiBuZXdEYXRhc2V0fSkpKHN0YXRlKTtcblxuICAvLyB1cGRhdGUgY29sb3JGaWVsZCBkaXNwbGF5Rm9ybWF0XG4gIG5ld1N0YXRlID0ge1xuICAgIC4uLm5ld1N0YXRlLFxuICAgIGxheWVyczogbmV3U3RhdGUubGF5ZXJzLm1hcChsYXllciA9PlxuICAgICAgbGF5ZXIuY29uZmlnPy5jb2xvckZpZWxkPy5uYW1lICYmIGxheWVyLmNvbmZpZy5jb2xvckZpZWxkLm5hbWUgaW4gZm9ybWF0c1xuICAgICAgICA/IGxheWVyLnVwZGF0ZUxheWVyQ29uZmlnKHtcbiAgICAgICAgICAgIGNvbG9yRmllbGQ6IHtcbiAgICAgICAgICAgICAgLi4ubGF5ZXIuY29uZmlnLmNvbG9yRmllbGQsXG4gICAgICAgICAgICAgIGRpc3BsYXlGb3JtYXQ6IGZvcm1hdHNbbGF5ZXIuY29uZmlnLmNvbG9yRmllbGQubmFtZV1cbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9KVxuICAgICAgICA6IGxheWVyXG4gICAgKVxuICB9O1xuXG4gIHJldHVybiBuZXdTdGF0ZTtcbn1cblxuLyoqXG4gKiBVcGRhdGUgZWRpdG9yXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiB0b2dnbGVFZGl0b3JWaXNpYmlsaXR5VXBkYXRlcihcbiAgc3RhdGU6IFZpc1N0YXRlLFxuICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgQHR5cGVzY3JpcHQtZXNsaW50L25vLXVudXNlZC12YXJzXG4gIGFjdGlvbjogVmlzU3RhdGVBY3Rpb25zLlRvZ2dsZUVkaXRvclZpc2liaWxpdHlVcGRhdGVyQWN0aW9uXG4pOiBWaXNTdGF0ZSB7XG4gIHJldHVybiB7XG4gICAgLi4uc3RhdGUsXG4gICAgZWRpdG9yOiB7XG4gICAgICAuLi5zdGF0ZS5lZGl0b3IsXG4gICAgICB2aXNpYmxlOiAhc3RhdGUuZWRpdG9yLnZpc2libGVcbiAgICB9XG4gIH07XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBzZXRGaWx0ZXJBbmltYXRpb25UaW1lQ29uZmlnVXBkYXRlcihcbiAgc3RhdGU6IFZpc1N0YXRlLFxuICB7aWR4LCBjb25maWd9OiBWaXNTdGF0ZUFjdGlvbnMuU2V0RmlsdGVyQW5pbWF0aW9uVGltZUNvbmZpZ0FjdGlvblxuKTogVmlzU3RhdGUge1xuICBjb25zdCBvbGRGaWx0ZXIgPSBzdGF0ZS5maWx0ZXJzW2lkeF07XG4gIGlmICghb2xkRmlsdGVyKSB7XG4gICAgQ29uc29sZS5lcnJvcihgZmlsdGVycy4ke2lkeH0gaXMgdW5kZWZpbmVkYCk7XG4gICAgcmV0dXJuIHN0YXRlO1xuICB9XG4gIGlmIChvbGRGaWx0ZXIudHlwZSAhPT0gRklMVEVSX1RZUEVTLnRpbWVSYW5nZSkge1xuICAgIENvbnNvbGUuZXJyb3IoXG4gICAgICBgc2V0RmlsdGVyQW5pbWF0aW9uVGltZUNvbmZpZyBjYW4gb25seSBiZSBjYWxsZWQgdG8gdXBkYXRlIGEgdGltZSBmaWx0ZXIuIGNoZWNrIGZpbHRlci50eXBlID09PSAndGltZVJhbmdlJ2BcbiAgICApO1xuICAgIHJldHVybiBzdGF0ZTtcbiAgfVxuXG4gIGNvbnN0IHVwZGF0ZXMgPSBjaGVja1RpbWVDb25maWdBcmdzKGNvbmZpZyk7XG5cbiAgcmV0dXJuIHBpY2tfKCdmaWx0ZXJzJykoc3dhcF8obWVyZ2VfKHVwZGF0ZXMpKG9sZEZpbHRlcikpKShzdGF0ZSk7XG59XG5cbmZ1bmN0aW9uIGNoZWNrVGltZUNvbmZpZ0FyZ3MoY29uZmlnKSB7XG4gIGNvbnN0IGFsbG93ZWQgPSBbJ3RpbWVGb3JtYXQnLCAndGltZXpvbmUnXTtcbiAgcmV0dXJuIE9iamVjdC5rZXlzKGNvbmZpZykucmVkdWNlKChhY2N1LCBwcm9wKSA9PiB7XG4gICAgaWYgKCFhbGxvd2VkLmluY2x1ZGVzKHByb3ApKSB7XG4gICAgICBDb25zb2xlLmVycm9yKFxuICAgICAgICBgc2V0TGF5ZXJBbmltYXRpb25UaW1lQ29uZmlnIHRha2VzIHRpbWVGb3JtYXQgYW5kL29yIHRpbWV6b25lIGFzIG9wdGlvbnMsIGZvdW5kICR7cHJvcH1gXG4gICAgICApO1xuICAgICAgcmV0dXJuIGFjY3U7XG4gICAgfVxuXG4gICAgLy8gaGVyZSB3ZSBhcmUgTk9UIGNoZWNraW5nIGlmIHRpbWV6b25lIG9yIHRpbWVGb3JtYXQgaW5wdXQgaXMgdmFsaWRcbiAgICBhY2N1W3Byb3BdID0gY29uZmlnW3Byb3BdO1xuICAgIHJldHVybiBhY2N1O1xuICB9LCB7fSk7XG59XG5cbi8qKlxuICogVXBkYXRlIGVkaXRvclxuICovXG5leHBvcnQgZnVuY3Rpb24gc2V0TGF5ZXJBbmltYXRpb25UaW1lQ29uZmlnVXBkYXRlcihcbiAgc3RhdGU6IFZpc1N0YXRlLFxuICB7Y29uZmlnfTogVmlzU3RhdGVBY3Rpb25zLlNldExheWVyQW5pbWF0aW9uVGltZUNvbmZpZ0FjdGlvblxuKTogVmlzU3RhdGUge1xuICBpZiAoIWNvbmZpZykge1xuICAgIHJldHVybiBzdGF0ZTtcbiAgfVxuICBjb25zdCB1cGRhdGVzID0gY2hlY2tUaW1lQ29uZmlnQXJncyhjb25maWcpO1xuICByZXR1cm4gcGlja18oJ2FuaW1hdGlvbkNvbmZpZycpKG1lcmdlXyh1cGRhdGVzKSkoc3RhdGUpO1xufVxuXG4vKipcbiAqIFVwZGF0ZSBlZGl0b3JcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGxheWVyRmlsdGVyZWRJdGVtc0NoYW5nZVVwZGF0ZXI8UyBleHRlbmRzIFZpc1N0YXRlPihcbiAgc3RhdGU6IFMsXG4gIGFjdGlvbjogVmlzU3RhdGVBY3Rpb25zLkxheWVyRmlsdGVyZWRJdGVtc0NoYW5nZUFjdGlvblxuKTogUyB7XG4gIGNvbnN0IHtldmVudCwgbGF5ZXJ9ID0gYWN0aW9uO1xuICBjb25zdCB7aWQ6IGRlY2tnbExheWVySWQsIGNvdW50fSA9IGV2ZW50O1xuICBpZiAoIWxheWVyKSB7XG4gICAgQ29uc29sZS53YXJuKGBsYXllckZpbHRlcmVkSXRlbXMgbGF5ZXIgZG9lc250IGV4aXN0c2ApO1xuICAgIHJldHVybiBzdGF0ZTtcbiAgfVxuICBpZiAobGF5ZXIuZmlsdGVyZWRJdGVtQ291bnQ/LltkZWNrZ2xMYXllcklkXSA9PT0gY291bnQpIHtcbiAgICByZXR1cm4gc3RhdGU7XG4gIH1cblxuICBsYXllci5maWx0ZXJlZEl0ZW1Db3VudCA9IHtcbiAgICAuLi5sYXllci5maWx0ZXJlZEl0ZW1Db3VudCxcbiAgICBbZGVja2dsTGF5ZXJJZF06IGNvdW50XG4gIH07XG5cbiAgcmV0dXJuIHtcbiAgICAuLi5zdGF0ZSxcbiAgICBsYXllcnM6IHN3YXBfKGxheWVyKShzdGF0ZS5sYXllcnMpXG4gIH07XG59XG5cbi8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBtYXgtc3RhdGVtZW50c1xuZXhwb3J0IGZ1bmN0aW9uIHN5bmNUaW1lRmlsdGVyV2l0aExheWVyVGltZWxpbmVVcGRhdGVyPFMgZXh0ZW5kcyBWaXNTdGF0ZT4oXG4gIHN0YXRlOiBTLFxuICBhY3Rpb246IFZpc1N0YXRlQWN0aW9ucy5TeW5jVGltZUZpbHRlcldpdGhMYXllclRpbWVsaW5lQWN0aW9uXG4pOiBTIHtcbiAgY29uc3Qge2lkeDogZmlsdGVySWR4LCBlbmFibGUgPSBmYWxzZX0gPSBhY3Rpb247XG5cbiAgY29uc3QgZmlsdGVyID0gc3RhdGUuZmlsdGVyc1tmaWx0ZXJJZHhdIGFzIFRpbWVSYW5nZUZpbHRlcjtcblxuICBsZXQgbmV3U3RhdGUgPSBzdGF0ZTtcbiAgbGV0IG5ld0ZpbHRlciA9IGZpbHRlcjtcblxuICAvLyBpZiB3ZSBlbmFibGUgc3luYyB3ZSBhcmUgZ29pbmcgdG8gbWVyZ2UgZmlsdGVyIGFuZCBhbmltYXRpb25Db25maWcgZG9tYWlucyBhbmQgc3RvcmUgaW50byBmaWx0ZXIuZG9tYWluXG4gIGlmIChlbmFibGUpIHtcbiAgICBjb25zdCBhbmltYXRhYmxlTGF5ZXJzID0gZ2V0QW5pbWF0YWJsZVZpc2libGVMYXllcnMobmV3U3RhdGUubGF5ZXJzKTtcbiAgICAvLyBpZiBubyBhbmltYXRhYmxlTGF5ZXJzIGFyZSBwcmVzZW50IHdlIHNpbXBseSByZXR1cm5cbiAgICBpZiAoIWFuaW1hdGFibGVMYXllcnMubGVuZ3RoKSB7XG4gICAgICByZXR1cm4gbmV3U3RhdGU7XG4gICAgfVxuXG4gICAgY29uc3QgaW50ZXJ2YWxCYXNlZEFuaW1hdGlvbkxheWVycyA9IGdldEludGVydmFsQmFzZWRBbmltYXRpb25MYXllcnMoYW5pbWF0YWJsZUxheWVycyk7XG4gICAgY29uc3QgaGFzSW50ZXJ2YWxCYXNlZEFuaW1hdGlvbkxheWVyID0gQm9vbGVhbihpbnRlcnZhbEJhc2VkQW5pbWF0aW9uTGF5ZXJzLmxlbmd0aCk7XG5cbiAgICBjb25zdCBuZXdGaWx0ZXJEb21haW4gPSBtZXJnZVRpbWVEb21haW5zKFtmaWx0ZXIuZG9tYWluLCBuZXdTdGF0ZS5hbmltYXRpb25Db25maWcuZG9tYWluXSk7XG5cbiAgICAvLyB3ZSBvbmx5IHVwZGF0ZSBhbmltYXRpb25XaW5kb3cgaWYgd2UgaGF2ZSBpbnRlcnZhbCBiYXNlZCBhbmltYXRpb24gbGF5ZXJzIHdpdGggZGVmaW5lZCBpbnRlcnZhbHMgYW5kIHRoZSBjdXJyZW50IGZpbHRlciBhbmltYXRpb24gd2luZG93IGlzIG5vdCBpbnRlcnZhbFxuICAgIGlmIChoYXNJbnRlcnZhbEJhc2VkQW5pbWF0aW9uTGF5ZXIpIHtcbiAgICAgIGlmIChmaWx0ZXIuYW5pbWF0aW9uV2luZG93ICE9PSBBTklNQVRJT05fV0lORE9XLmludGVydmFsKSB7XG4gICAgICAgIG5ld1N0YXRlID0gc2V0RmlsdGVyQW5pbWF0aW9uV2luZG93VXBkYXRlcihuZXdTdGF0ZSwge1xuICAgICAgICAgIGlkOiBmaWx0ZXIuaWQsXG4gICAgICAgICAgYW5pbWF0aW9uV2luZG93OiBBTklNQVRJT05fV0lORE9XLmludGVydmFsXG4gICAgICAgIH0pO1xuICAgICAgfVxuXG4gICAgICBuZXdGaWx0ZXIgPSBuZXdTdGF0ZS5maWx0ZXJzW2ZpbHRlcklkeF0gYXMgVGltZVJhbmdlRmlsdGVyO1xuXG4gICAgICAvLyBhZGp1c3QgdGltZSBmaWx0ZXIgaW50ZXJ2YWxcbiAgICAgIG5ld0ZpbHRlciA9IGFkanVzdFRpbWVGaWx0ZXJJbnRlcnZhbChuZXdTdGF0ZSwgbmV3RmlsdGVyKTtcblxuICAgICAgLy8gcmVwbGFjZSBmaWx0ZXIgaW4gc3RhdGUgd2l0aCBuZXdGaWx0ZXJcbiAgICAgIG5ld1N0YXRlID0ge1xuICAgICAgICAuLi5uZXdTdGF0ZSxcbiAgICAgICAgZmlsdGVyczogc3dhcF88RmlsdGVyPihuZXdGaWx0ZXIpKG5ld1N0YXRlLmZpbHRlcnMpXG4gICAgICB9O1xuICAgIH1cblxuICAgIG5ld0ZpbHRlciA9IG5ld1N0YXRlLmZpbHRlcnNbZmlsdGVySWR4XSBhcyBUaW1lUmFuZ2VGaWx0ZXI7XG5cbiAgICAvLyBhZGp1c3QgdmFsdWUgYmFzZWQgb24gbmV3IGRvbWFpblxuICAgIGNvbnN0IG5ld0ZpbHRlclZhbHVlID0gYWRqdXN0VmFsdWVUb0ZpbHRlckRvbWFpbihcbiAgICAgIG5ld0ZpbHRlci5hbmltYXRpb25XaW5kb3cgPT09IEFOSU1BVElPTl9XSU5ET1cuaW50ZXJ2YWxcbiAgICAgICAgPyBbbmV3RmlsdGVyRG9tYWluWzBdLCBuZXdGaWx0ZXJEb21haW5bMF1dXG4gICAgICAgIDogbmV3RmlsdGVyRG9tYWluLFxuICAgICAgey4uLm5ld0ZpbHRlciwgZG9tYWluOiBuZXdGaWx0ZXJEb21haW59XG4gICAgKTtcblxuICAgIG5ld1N0YXRlID0gc2V0RmlsdGVyVXBkYXRlcihuZXdTdGF0ZSwge1xuICAgICAgaWR4OiBmaWx0ZXJJZHgsXG4gICAgICBwcm9wOiAndmFsdWUnLFxuICAgICAgdmFsdWU6IG5ld0ZpbHRlclZhbHVlXG4gICAgfSk7XG5cbiAgICBuZXdGaWx0ZXIgPSB7XG4gICAgICAuLi4obmV3U3RhdGUuZmlsdGVyc1tmaWx0ZXJJZHhdIGFzIFRpbWVSYW5nZUZpbHRlciksXG4gICAgICBzeW5jZWRXaXRoTGF5ZXJUaW1lbGluZTogdHJ1ZVxuICAgIH07XG5cbiAgICAvLyByZXBsYWNlIGZpbHRlciBpbiBzdGF0ZSB3aXRoIG5ld0ZpbHRlclxuICAgIG5ld1N0YXRlID0ge1xuICAgICAgLi4ubmV3U3RhdGUsXG4gICAgICBmaWx0ZXJzOiBzd2FwXzxGaWx0ZXI+KG5ld0ZpbHRlcikobmV3U3RhdGUuZmlsdGVycylcbiAgICB9O1xuXG4gICAgbmV3U3RhdGUgPSBzZXRUaW1lRmlsdGVyVGltZWxpbmVNb2RlVXBkYXRlcihuZXdTdGF0ZSwge1xuICAgICAgaWQ6IG5ld0ZpbHRlci5pZCxcbiAgICAgIG1vZGU6IGdldFN5bmNBbmltYXRpb25Nb2RlKG5ld0ZpbHRlcilcbiAgICB9KTtcblxuICAgIG5ld0ZpbHRlciA9IG5ld1N0YXRlLmZpbHRlcnNbZmlsdGVySWR4XSBhcyBUaW1lUmFuZ2VGaWx0ZXI7XG5cbiAgICAvLyBzZXQgdGhlIGFuaW1hdGlvbiBjb25maWcgdmFsdWUgdG8gbWF0Y2ggZmlsdGVyIHZhbHVlXG4gICAgcmV0dXJuIHNldExheWVyQW5pbWF0aW9uVGltZVVwZGF0ZXIobmV3U3RhdGUsIHtcbiAgICAgIHZhbHVlOiBuZXdGaWx0ZXIudmFsdWVbbmV3RmlsdGVyLnN5bmNUaW1lbGluZU1vZGVdXG4gICAgfSk7XG4gIH1cblxuICAvLyBzZXQgZG9tYWluIGFuZCBzdGVwXG4gIG5ld0ZpbHRlciA9IHtcbiAgICAuLi5maWx0ZXIsXG4gICAgc3luY2VkV2l0aExheWVyVGltZWxpbmU6IGZhbHNlXG4gIH07XG5cbiAgLy8gcmVwbGFjZSBmaWx0ZXIgaW4gc3RhdGUgd2l0aCBuZXdGaWx0ZXJcbiAgbmV3U3RhdGUgPSB7XG4gICAgLi4ubmV3U3RhdGUsXG4gICAgZmlsdGVyczogc3dhcF88RmlsdGVyPihuZXdGaWx0ZXIpKG5ld1N0YXRlLmZpbHRlcnMpXG4gIH07XG5cbiAgLy8gcmVzZXQgc3luYyB0aW1lbGluZSBtb2RlXG4gIG5ld1N0YXRlID0gc2V0VGltZUZpbHRlclRpbWVsaW5lTW9kZVVwZGF0ZXIobmV3U3RhdGUsIHtcbiAgICBpZDogbmV3RmlsdGVyLmlkLFxuICAgIG1vZGU6IFNZTkNfVElNRUxJTkVfTU9ERVMuZW5kXG4gIH0pO1xuXG4gIG5ld0ZpbHRlciA9IG5ld1N0YXRlLmZpbHRlcnNbZmlsdGVySWR4XSBhcyBUaW1lUmFuZ2VGaWx0ZXI7XG5cbiAgLy8gcmVzZXQgZmlsdGVyIHZhbHVlXG4gIGNvbnN0IG5ld0ZpbHRlclZhbHVlID0gYWRqdXN0VmFsdWVUb0ZpbHRlckRvbWFpbihuZXdGaWx0ZXIuZG9tYWluLCBuZXdGaWx0ZXIpO1xuXG4gIG5ld1N0YXRlID0gc2V0RmlsdGVyVXBkYXRlcihuZXdTdGF0ZSwge1xuICAgIGlkeDogZmlsdGVySWR4LFxuICAgIHByb3A6ICd2YWx1ZScsXG4gICAgdmFsdWU6IG5ld0ZpbHRlclZhbHVlXG4gIH0pO1xuXG4gIG5ld1N0YXRlID0gc2V0VGltZUZpbHRlclRpbWVsaW5lTW9kZVVwZGF0ZXIobmV3U3RhdGUsIHtcbiAgICBpZDogbmV3RmlsdGVyLmlkLFxuICAgIG1vZGU6IGdldFN5bmNBbmltYXRpb25Nb2RlKG5ld0ZpbHRlcilcbiAgfSk7XG5cbiAgLy8gcmVzZXQgYW5pbWF0aW9uIGNvbmZpZyBjdXJyZW50IHRpbWUgdG9cbiAgcmV0dXJuIHNldExheWVyQW5pbWF0aW9uVGltZVVwZGF0ZXIobmV3U3RhdGUsIHtcbiAgICB2YWx1ZTogbmV3U3RhdGUuYW5pbWF0aW9uQ29uZmlnLmRvbWFpbj8uWzBdID8/IG51bGxcbiAgfSk7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBzZXRUaW1lRmlsdGVyVGltZWxpbmVNb2RlVXBkYXRlcjxTIGV4dGVuZHMgVmlzU3RhdGU+KFxuICBzdGF0ZTogUyxcbiAgYWN0aW9uOiBWaXNTdGF0ZUFjdGlvbnMuc2V0VGltZUZpbHRlclN5bmNUaW1lbGluZU1vZGVBY3Rpb25cbikge1xuICBjb25zdCB7aWQ6IGZpbHRlcklkLCBtb2RlOiBzeW5jVGltZWxpbmVNb2RlfSA9IGFjdGlvbjtcblxuICBjb25zdCBmaWx0ZXJJZHggPSBzdGF0ZS5maWx0ZXJzLmZpbmRJbmRleChmID0+IGYuaWQgPT09IGZpbHRlcklkKTtcbiAgaWYgKGZpbHRlcklkeCA9PT0gLTEpIHtcbiAgICByZXR1cm4gc3RhdGU7XG4gIH1cblxuICBjb25zdCBmaWx0ZXIgPSBzdGF0ZS5maWx0ZXJzW2ZpbHRlcklkeF0gYXMgVGltZVJhbmdlRmlsdGVyO1xuXG4gIGlmICghdmFsaWRhdGVTeW5jQW5pbWF0aW9uTW9kZShmaWx0ZXIsIHN5bmNUaW1lbGluZU1vZGUpKSB7XG4gICAgcmV0dXJuIHN0YXRlO1xuICB9XG5cbiAgY29uc3QgbmV3RmlsdGVyID0ge1xuICAgIC4uLmZpbHRlcixcbiAgICBzeW5jVGltZWxpbmVNb2RlXG4gIH07XG5cbiAgY29uc3QgbmV3U3RhdGUgPSB7XG4gICAgLi4uc3RhdGUsXG4gICAgZmlsdGVyczogc3dhcF88RmlsdGVyPihuZXdGaWx0ZXIpKHN0YXRlLmZpbHRlcnMpXG4gIH07XG5cbiAgcmV0dXJuIGFkanVzdEFuaW1hdGlvbkNvbmZpZ1dpdGhGaWx0ZXIobmV3U3RhdGUsIGZpbHRlcklkeCk7XG59XG5cbi8qKlxuICogVXBkYXRlIHN0YXRlIG9mIHRoZSBsb2FkaW5nIGluZGljYXRvci5cbiAqIEBtZW1iZXJvZiB2aXNTdGF0ZVVwZGF0ZXJzXG4gKiBAcGFyYW0gc3RhdGUgdmlzU3RhdGVcbiAqIEBwYXJhbSBhY3Rpb25cbiAqIEBwYXJhbSBhY3Rpb24ucGF5bG9hZCBQYXlsb2FkIHdpdGggY2hhbmdlIG9mIG51bWJlciBvZiBhY3RpdmUgbG9hZGluZyBhY3Rpb25zLlxuICogQHJldHVybnMgbmV4dFN0YXRlXG4gKiBAcHVibGljXG4gKi9cbmV4cG9ydCBjb25zdCBzZXRMb2FkaW5nSW5kaWNhdG9yVXBkYXRlciA9IChcbiAgc3RhdGU6IFZpc1N0YXRlLFxuICB7cGF5bG9hZDoge2NoYW5nZX19OiB7cGF5bG9hZDogU2V0TG9hZGluZ0luZGljYXRvclBheWxvYWR9XG4pOiBWaXNTdGF0ZSA9PiB7XG4gIGxldCB7bG9hZGluZ0luZGljYXRvclZhbHVlfSA9IHN0YXRlO1xuICBpZiAoIWxvYWRpbmdJbmRpY2F0b3JWYWx1ZSkge1xuICAgIGxvYWRpbmdJbmRpY2F0b3JWYWx1ZSA9IDA7XG4gIH1cblxuICByZXR1cm4ge1xuICAgIC4uLnN0YXRlLFxuICAgIGxvYWRpbmdJbmRpY2F0b3JWYWx1ZTogTWF0aC5tYXgobG9hZGluZ0luZGljYXRvclZhbHVlICsgY2hhbmdlLCAwKVxuICB9O1xufTtcblxuZnVuY3Rpb24gYWRqdXN0QW5pbWF0aW9uQ29uZmlnV2l0aEZpbHRlcjxTIGV4dGVuZHMgVmlzU3RhdGU+KHN0YXRlOiBTLCBmaWx0ZXJJZHg6IG51bWJlcik6IFMge1xuICBjb25zdCBmaWx0ZXIgPSBzdGF0ZS5maWx0ZXJzW2ZpbHRlcklkeF07XG4gIGlmICgoZmlsdGVyIGFzIFRpbWVSYW5nZUZpbHRlcikuc3luY2VkV2l0aExheWVyVGltZWxpbmUpIHtcbiAgICBjb25zdCB0aW1lbGluZVZhbHVlID0gZ2V0VGltZWxpbmVWYWx1ZUZyb21GaWx0ZXIoZmlsdGVyKTtcbiAgICBjb25zdCB2YWx1ZSA9IHN0YXRlLmFuaW1hdGlvbkNvbmZpZy50aW1lU3RlcHNcbiAgICAgID8gc25hcFRvTWFya3ModGltZWxpbmVWYWx1ZSwgc3RhdGUuYW5pbWF0aW9uQ29uZmlnLnRpbWVTdGVwcylcbiAgICAgIDogdGltZWxpbmVWYWx1ZTtcbiAgICByZXR1cm4gc2V0TGF5ZXJBbmltYXRpb25UaW1lVXBkYXRlcihzdGF0ZSwge3ZhbHVlfSk7XG4gIH1cbiAgcmV0dXJuIHN0YXRlO1xufVxuXG5mdW5jdGlvbiBnZXRUaW1lbGluZVZhbHVlRnJvbUZpbHRlcihmaWx0ZXIpIHtcbiAgcmV0dXJuIGZpbHRlci52YWx1ZVtmaWx0ZXIuc3luY1RpbWVsaW5lTW9kZV07XG59XG5cbmZ1bmN0aW9uIGdldFN5bmNBbmltYXRpb25Nb2RlKGZpbHRlcjogVGltZVJhbmdlRmlsdGVyKSB7XG4gIGlmIChmaWx0ZXIuYW5pbWF0aW9uV2luZG93ID09PSBBTklNQVRJT05fV0lORE9XLmZyZWUpIHtcbiAgICByZXR1cm4gZmlsdGVyLnN5bmNUaW1lbGluZU1vZGUgPz8gU1lOQ19USU1FTElORV9NT0RFUy5lbmQ7XG4gIH1cblxuICByZXR1cm4gU1lOQ19USU1FTElORV9NT0RFUy5lbmQ7XG59XG5cbmZ1bmN0aW9uIHZhbGlkYXRlU3luY0FuaW1hdGlvbk1vZGUoZmlsdGVyOiBUaW1lUmFuZ2VGaWx0ZXIsIG5ld01vZGU6IG51bWJlcikge1xuICByZXR1cm4gIShcbiAgICBmaWx0ZXIuYW5pbWF0aW9uV2luZG93ICE9PSBBTklNQVRJT05fV0lORE9XLmZyZWUgJiYgbmV3TW9kZSA9PT0gU1lOQ19USU1FTElORV9NT0RFUy5zdGFydFxuICApO1xufVxuXG5mdW5jdGlvbiBhZGp1c3RUaW1lRmlsdGVySW50ZXJ2YWwoc3RhdGUsIGZpbHRlcikge1xuICBjb25zdCBpbnRlcnZhbEJhc2VkQW5pbWF0aW9uTGF5ZXJzID0gZ2V0SW50ZXJ2YWxCYXNlZEFuaW1hdGlvbkxheWVycyhzdGF0ZS5sYXllcnMpO1xuXG4gIGxldCBpbnRlcnZhbDogc3RyaW5nIHwgbnVsbCA9IG51bGw7XG4gIGlmIChpbnRlcnZhbEJhc2VkQW5pbWF0aW9uTGF5ZXJzLmxlbmd0aCA+IDApIHtcbiAgICAvLyBAdHMtaWdub3JlXG4gICAgY29uc3QgaW50ZXJ2YWxJbmRleCA9IGludGVydmFsQmFzZWRBbmltYXRpb25MYXllcnMucmVkdWNlKChjdXJyZW50SW5kZXgsIGwpID0+IHtcbiAgICAgIGlmIChsLm1ldGEudGFyZ2V0VGltZUludGVydmFsKSB7XG4gICAgICAgIGNvbnN0IG5ld0luZGV4ID0gVElNRV9JTlRFUlZBTFNfT1JERVJFRC5maW5kSW5kZXgoaSA9PiBpID09PSBsLm1ldGEudGFyZ2V0VGltZUludGVydmFsKTtcbiAgICAgICAgcmV0dXJuIG5ld0luZGV4ID4gLTEgJiYgbmV3SW5kZXggPCBjdXJyZW50SW5kZXggPyBuZXdJbmRleCA6IGN1cnJlbnRJbmRleDtcbiAgICAgIH1cbiAgICB9LCBUSU1FX0lOVEVSVkFMU19PUkRFUkVELmxlbmd0aCAtIDEpO1xuICAgIC8vIEB0cy1pZ25vcmVcbiAgICBjb25zdCBoZXhUaWxlSW50ZXJ2YWwgPSBUSU1FX0lOVEVSVkFMU19PUkRFUkVEW2ludGVydmFsSW5kZXhdO1xuICAgIGludGVydmFsID0gTGF5ZXJUb0ZpbHRlclRpbWVJbnRlcnZhbFtoZXhUaWxlSW50ZXJ2YWxdO1xuICB9XG5cbiAgaWYgKCFpbnRlcnZhbCkge1xuICAgIHJldHVybiBmaWx0ZXI7XG4gIH1cblxuICAvLyBhZGp1c3QgZmlsdGVyXG4gIGNvbnN0IHRpbWVGb3JtYXQgPSBnZXREZWZhdWx0VGltZUZvcm1hdChpbnRlcnZhbCk7XG4gIGNvbnN0IHVwZGF0ZWRQbG90VHlwZSA9IHsuLi5maWx0ZXIucGxvdFR5cGUsIGludGVydmFsLCB0aW1lRm9ybWF0fTtcbiAgY29uc3QgbmV3RmlsdGVyID0gdXBkYXRlVGltZUZpbHRlclBsb3RUeXBlKGZpbHRlciwgdXBkYXRlZFBsb3RUeXBlLCBzdGF0ZS5kYXRhc2V0cyk7XG4gIHJldHVybiBhZGp1c3RWYWx1ZVRvQW5pbWF0aW9uV2luZG93KHN0YXRlLCBuZXdGaWx0ZXIpO1xufVxuXG4vLyBGaW5kIGRhdGFJZCBmcm9tIGEgc2F2ZWQgdmlzU3RhdGUgcHJvcGVydHk6XG4vLyBsYXllcnMsIGZpbHRlcnMsIGludGVyYWN0aW9ucywgbGF5ZXJCbGVuZGluZywgb3ZlcmxheUJsZW5kaW5nLCBzcGxpdE1hcHMsIGFuaW1hdGlvbkNvbmZpZywgZWRpdG9yXG4vLyByZXBsYWNlIGl0IHdpdGggYW5vdGhlciBkYXRhSWRcbmZ1bmN0aW9uIGRlZmF1bHRSZXBsYWNlUGFyZW50RGF0YXNldElkcyh2YWx1ZTogYW55LCBkYXRhSWQ6IHN0cmluZywgZGF0YUlkVG9SZXBsYWNlOiBzdHJpbmcpIHtcbiAgaWYgKEFycmF5LmlzQXJyYXkodmFsdWUpKSB7XG4gICAgLy8gZm9yIGxheWVycywgZmlsdGVycywgY2FsbCBkZWZhdWx0UmVwbGFjZVBhcmVudERhdGFzZXRJZHMgb24gZWFjaCBpdGVtIGluIGFycmF5XG4gICAgY29uc3QgcmVwbGFjZWQgPSB2YWx1ZVxuICAgICAgLm1hcCh2ID0+IGRlZmF1bHRSZXBsYWNlUGFyZW50RGF0YXNldElkcyh2LCBkYXRhSWQsIGRhdGFJZFRvUmVwbGFjZSkpXG4gICAgICAuZmlsdGVyKGQgPT4gZCk7XG4gICAgcmV0dXJuIHJlcGxhY2VkLmxlbmd0aCA/IHJlcGxhY2VkIDogbnVsbDtcbiAgfVxuICBpZiAodHlwZW9mIHZhbHVlLmRhdGFJZCA9PT0gJ3N0cmluZycgJiYgdmFsdWUuZGF0YUlkID09PSBkYXRhSWQpIHtcbiAgICAvLyBvdGhlcnNcbiAgICByZXR1cm4ge1xuICAgICAgLi4udmFsdWUsXG4gICAgICBkYXRhSWQ6IGRhdGFJZFRvUmVwbGFjZVxuICAgIH07XG4gIH0gZWxzZSBpZiAoQXJyYXkuaXNBcnJheSh2YWx1ZS5kYXRhSWQpICYmIHZhbHVlLmRhdGFJZC5pbmNsdWRlcyhkYXRhSWQpKSB7XG4gICAgLy8gZmlsdGVyXG4gICAgcmV0dXJuIHtcbiAgICAgIC4uLnZhbHVlLFxuICAgICAgZGF0YUlkOiB2YWx1ZS5kYXRhSWQubWFwKGQgPT4gKGQgPT09IGRhdGFJZCA/IGRhdGFJZFRvUmVwbGFjZSA6IGQpKVxuICAgIH07XG4gIH0gZWxzZSBpZiAodmFsdWUuY29uZmlnPy5kYXRhSWQgJiYgdmFsdWUuY29uZmlnPy5kYXRhSWQgPT09IGRhdGFJZCkge1xuICAgIC8vIGxheWVyXG4gICAgcmV0dXJuIHtcbiAgICAgIC4uLnZhbHVlLFxuICAgICAgY29uZmlnOiB7XG4gICAgICAgIC4uLnZhbHVlLmNvbmZpZyxcbiAgICAgICAgZGF0YUlkOiBkYXRhSWRUb1JlcGxhY2VcbiAgICAgIH1cbiAgICB9O1xuICB9IGVsc2UgaWYgKGlzT2JqZWN0KHZhbHVlKSAmJiBPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwodmFsdWUsIGRhdGFJZCkpIHtcbiAgICAvLyBmb3IgdmFsdWUgc2F2ZWQgYXMge1tkYXRhSWRdOiB7Li4ufX1cbiAgICByZXR1cm4ge1tkYXRhSWRUb1JlcGxhY2VdOiB2YWx1ZVtkYXRhSWRdfTtcbiAgfVxuXG4gIHJldHVybiBudWxsO1xufVxuXG4vLyBGaW5kIGRhdGFzZXRJZHMgZGVyaXZlZCBhIHNhdmVkIHZpc1N0YXRlIFByb3BlcnR5O1xuZnVuY3Rpb24gZmluZENoaWxkRGF0YXNldElkcyh2YWx1ZSkge1xuICBpZiAoQXJyYXkuaXNBcnJheSh2YWx1ZSkpIHtcbiAgICAvLyBmb3IgbGF5ZXJzLCBmaWx0ZXJzLCBjYWxsIGRlZmF1bHRSZXBsYWNlUGFyZW50RGF0YXNldElkcyBvbiBlYWNoIGl0ZW0gaW4gYXJyYXlcbiAgICBjb25zdCBjaGlsZERhdGFJZHMgPSB2YWx1ZS5tYXAoZmluZENoaWxkRGF0YXNldElkcykuZmlsdGVyKGQgPT4gZCk7XG4gICAgcmV0dXJuIGNoaWxkRGF0YUlkcy5sZW5ndGggPyBjaGlsZERhdGFJZHMgOiBudWxsO1xuICB9XG5cbiAgLy8gY2hpbGQgZGF0YSBpZCB1c3VhbGx5IHN0b3JlcyBpbiB0aGUgZGVyaXZlZCBkYXRhc2V0IGluZm9cbiAgcmV0dXJuIHZhbHVlPy5uZXdEYXRhc2V0Py5pbmZvLmlkIHx8IG51bGw7XG59XG5cbi8vIG1vdmVkIHVubWVyZ2VkIGxheWVycywgZmlsdGVycywgaW50ZXJhY3Rpb25zXG5mdW5jdGlvbiBtb3ZlVmFsdWVUb0JlTWVyZ2VkKHN0YXRlLCBwcm9wVmFsdWVzLCB7cHJvcCwgdG9NZXJnZVByb3AsIHNhdmVVbm1lcmdlZH0pIHtcbiAgLy8gcmVtb3ZlIHByb3AgdmFsdWUgZnJvbSBzdGF0ZVxuICAvLyBUT0RPOiBzaG91bGQgd2UgYWRkIHJlbW92ZSB1cGRhdGVyIHRvIG1lcmdlciBhcyB3ZWxsP1xuICBpZiAoIXByb3BWYWx1ZXMpIHtcbiAgICByZXR1cm4gc3RhdGU7XG4gIH1cbiAgY29uc3Qgc3RhdGVSZW1vdmVkID1cbiAgICBwcm9wID09PSAnbGF5ZXJzJ1xuICAgICAgPyBwcm9wVmFsdWVzLnJlZHVjZSgoYWNjdSwgcHJvcFZhbHVlKSA9PiByZW1vdmVMYXllclVwZGF0ZXIoYWNjdSwge2lkOiBwcm9wVmFsdWUuaWR9KSwgc3RhdGUpXG4gICAgICA6IEFycmF5LmlzQXJyYXkoc3RhdGVbcHJvcF0pXG4gICAgICA/IHtcbiAgICAgICAgICAuLi5zdGF0ZSxcbiAgICAgICAgICBbcHJvcF06IHN0YXRlW3Byb3BdLmZpbHRlcihwID0+ICFwcm9wVmFsdWVzLmZpbmQocHJvcFZhbHVlID0+IHAuaWQgPT09IHByb3BWYWx1ZS5pZCkpXG4gICAgICAgIH1cbiAgICAgIDogLy8gaWYgbm90IGFycmF5LCB3ZSB3b24ndCByZW1vdmUgaXQsIHJlbW92ZSBkYXRhc2V0IHNob3VsZCBoYW5kbGUgaXRcbiAgICAgICAgc3RhdGU7XG5cbiAgLy8gbW92ZSB0byBzdGF0ZVRvQmVNZXJnZWRcbiAgY29uc3QgdG9CZU1lcmdlZCA9IHtcbiAgICBbdG9NZXJnZVByb3BdOiBzYXZlVW5tZXJnZWRcbiAgICAgID8gLy8gY2FsbCBtZXJnZSBzYXZlVW5tZXJnZWQgbWV0aG9kXG4gICAgICAgIHNhdmVVbm1lcmdlZChzdGF0ZVJlbW92ZWQsIHByb3BWYWx1ZXMpXG4gICAgICA6IC8vIGlmIHRvTWVyZ2VQcm9wIGlzIGFyYWF5LCBhcHBlbmQgdG8gaXRcbiAgICAgIEFycmF5LmlzQXJyYXkoc3RhdGVSZW1vdmVkW3RvTWVyZ2VQcm9wXSlcbiAgICAgID8gWy4uLnN0YXRlUmVtb3ZlZFt0b01lcmdlUHJvcF0sIC4uLnByb3BWYWx1ZXNdXG4gICAgICA6IC8vIHNhdmUgcHJvcFZhbHVlcyB0byB0b01lcmdlXG4gICAgICBpc09iamVjdChzdGF0ZVJlbW92ZWRbdG9NZXJnZVByb3BdKVxuICAgICAgPyB7XG4gICAgICAgICAgLi4uc3RhdGVSZW1vdmVkW3RvTWVyZ2VQcm9wXSxcbiAgICAgICAgICAuLi5wcm9wVmFsdWVzXG4gICAgICAgIH1cbiAgICAgIDogc3RhdGVSZW1vdmVkW3RvTWVyZ2VQcm9wXVxuICB9O1xuXG4gIHJldHVybiB7XG4gICAgLi4uc3RhdGVSZW1vdmVkLFxuICAgIC4uLnRvQmVNZXJnZWRcbiAgfTtcbn1cblxuZnVuY3Rpb24gcmVwbGFjZURhdGFzZXRBbmREZXBzPFQgZXh0ZW5kcyBWaXNTdGF0ZT4oXG4gIHN0YXRlOiBULFxuICBkYXRhSWQ6IHN0cmluZyxcbiAgZGF0YUlkVG9Vc2U6IHN0cmluZ1xuKTogVCB7XG4gIHJldHVybiBjb21wb3NlXzxUPihbXG4gICAgYXBwbHlfKHJlcGxhY2VEYXRhc2V0RGVwc0luU3RhdGUsIHtkYXRhSWQsIGRhdGFJZFRvVXNlfSksXG4gICAgYXBwbHlfKHJlbW92ZURhdGFzZXRVcGRhdGVyLCB7ZGF0YUlkfSlcbiAgXSkoc3RhdGUpO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gcHJlcGFyZVN0YXRlRm9yRGF0YXNldFJlcGxhY2U8VCBleHRlbmRzIFZpc1N0YXRlPihcbiAgc3RhdGU6IFQsXG4gIGRhdGFJZDogc3RyaW5nLFxuICBkYXRhSWRUb1VzZTogc3RyaW5nXG4pOiBUIHtcbiAgY29uc3Qgc2VyaWFsaXplZFN0YXRlID0gc2VyaWFsaXplVmlzU3RhdGUoc3RhdGUsIHN0YXRlLnNjaGVtYSk7XG4gIGNvbnN0IG5leHRTdGF0ZSA9IHJlcGxhY2VEYXRhc2V0QW5kRGVwcyhzdGF0ZSwgZGF0YUlkLCBkYXRhSWRUb1VzZSk7XG4gIC8vIG1ha2UgYSBjb3B5IG9mIGxheWVyT3JkZXIsIGJlY2F1c2UgbGF5ZXIgaWQgd2lsbCBiZSByZW1vdmVkIGZyb20gaXQgYnkgY2FsbGluZyByZW1vdmVMYXllclVwZGF0ZXJcbiAgY29uc3QgcHJlc2VydmVMYXllck9yZGVyID0gWy4uLnN0YXRlLmxheWVyT3JkZXJdO1xuXG4gIC8vIHByZXNlcnZlIGRhdGFzZXQgb3JkZXJcbiAgbmV4dFN0YXRlLnByZXNlcnZlRGF0YXNldE9yZGVyID0gT2JqZWN0LmtleXMoc3RhdGUuZGF0YXNldHMpLm1hcChkID0+XG4gICAgZCA9PT0gZGF0YUlkID8gZGF0YUlkVG9Vc2UgOiBkXG4gICk7XG5cbiAgLy8gcHJlc2VydmVMYXllck9yZGVyXG4gIGlmIChuZXh0U3RhdGUubGF5ZXJUb0JlTWVyZ2VkPy5sZW5ndGgpIHtcbiAgICAvLyBjb3B5IHNwbGl0IG1hcHMgdG8gYmUgbWVyZ2VkLCBiZWNhdXNlIGl0IHdpbGwgYmUgcmVzZXQgaW4gcmVtb3ZlIGxheWVyXG4gICAgbmV4dFN0YXRlLnNwbGl0TWFwc1RvQmVNZXJnZWQgPSBzZXJpYWxpemVkU3RhdGU/LnNwbGl0TWFwcyA/PyBbXTtcbiAgICBuZXh0U3RhdGUubGF5ZXJPcmRlciA9IFsuLi5wcmVzZXJ2ZUxheWVyT3JkZXJdO1xuICB9XG5cbiAgcmV0dXJuIG5leHRTdGF0ZTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHJlcGxhY2VEYXRhc2V0RGVwc0luU3RhdGU8VCBleHRlbmRzIFZpc1N0YXRlPihcbiAgc3RhdGU6IFQsXG4gIHtkYXRhSWQsIGRhdGFJZFRvVXNlfToge2RhdGFJZDogc3RyaW5nOyBkYXRhSWRUb1VzZTogc3RyaW5nfVxuKTogVCB7XG4gIGNvbnN0IHNlcmlhbGl6ZWRTdGF0ZSA9IHNlcmlhbGl6ZVZpc1N0YXRlKHN0YXRlLCBzdGF0ZS5zY2hlbWEpO1xuXG4gIGNvbnN0IG5leHRTdGF0ZSA9IHN0YXRlLm1lcmdlcnMucmVkdWNlKFxuICAgIChcbiAgICAgIGFjY3VTdGF0ZSxcbiAgICAgIHtwcm9wLCB0b01lcmdlUHJvcCwgcmVwbGFjZVBhcmVudERhdGFzZXRJZHMsIGdldENoaWxkRGF0YXNldElkcywgc2F2ZVVubWVyZ2VkLCBwcmVzZXJ2ZU9yZGVyfVxuICAgICkgPT4ge1xuICAgICAgLy8gZ2V0IGRhdGFzZXQgaWRzIHRoYXQgYXJlIGRlcGVuZHMgb24gdGhpcyBkYXRhc2V0XG4gICAgICBjb25zdCBwcm9wcyA9IHRvQXJyYXkocHJvcCk7XG4gICAgICBjb25zdCB0b01lcmdlUHJvcHMgPSB0b0FycmF5KHRvTWVyZ2VQcm9wKTtcbiAgICAgIGNvbnN0IHNhdmVkUHJvcHMgPSBzZXJpYWxpemVkU3RhdGUgPyBwcm9wcy5tYXAocCA9PiBzZXJpYWxpemVkU3RhdGVbcF0pIDogW107XG5cbiAgICAgIGxldCByZXBsYWNlZFN0YXRlID0gYWNjdVN0YXRlO1xuICAgICAgc2F2ZWRQcm9wcy5mb3JFYWNoKChwcm9wVmFsdWUsIGkpID0+IHtcbiAgICAgICAgY29uc3QgbWVyZ2VyT3B0aW9ucyA9IHtcbiAgICAgICAgICBwcm9wOiBwcm9wc1tpXSxcbiAgICAgICAgICB0b01lcmdlUHJvcDogdG9NZXJnZVByb3BzW2ldLFxuICAgICAgICAgIGdldENoaWxkRGF0YXNldElkcyxcbiAgICAgICAgICBzYXZlVW5tZXJnZWRcbiAgICAgICAgfTtcblxuICAgICAgICBjb25zdCByZXBsYWNlZEl0ZW0gPVxuICAgICAgICAgIHJlcGxhY2VQYXJlbnREYXRhc2V0SWRzPy4ocHJvcFZhbHVlLCBkYXRhSWQsIGRhdGFJZFRvVXNlKSB8fFxuICAgICAgICAgIGRlZmF1bHRSZXBsYWNlUGFyZW50RGF0YXNldElkcyhwcm9wVmFsdWUsIGRhdGFJZCwgZGF0YUlkVG9Vc2UpO1xuICAgICAgICByZXBsYWNlZFN0YXRlID0gcmVwbGFjZWRJdGVtXG4gICAgICAgICAgPyByZXBsYWNlUHJvcFZhbHVlSW5TdGF0ZShyZXBsYWNlZFN0YXRlLCByZXBsYWNlZEl0ZW0sIG1lcmdlck9wdGlvbnMpXG4gICAgICAgICAgOiByZXBsYWNlZFN0YXRlO1xuXG4gICAgICAgIGlmIChcbiAgICAgICAgICBtZXJnZXJPcHRpb25zLnRvTWVyZ2VQcm9wICE9PSB1bmRlZmluZWQgJiZcbiAgICAgICAgICByZXBsYWNlZFN0YXRlW21lcmdlck9wdGlvbnMudG9NZXJnZVByb3BdPy5sZW5ndGggJiZcbiAgICAgICAgICBwcmVzZXJ2ZU9yZGVyXG4gICAgICAgICkge1xuICAgICAgICAgIHJlcGxhY2VkU3RhdGVbcHJlc2VydmVPcmRlcl0gPSBwcm9wVmFsdWUubWFwKGl0ZW0gPT4gaXRlbS5pZCk7XG4gICAgICAgIH1cbiAgICAgIH0pO1xuXG4gICAgICByZXR1cm4gcmVwbGFjZWRTdGF0ZTtcbiAgICB9LFxuICAgIHN0YXRlXG4gICk7XG5cbiAgcmV0dXJuIG5leHRTdGF0ZTtcbn1cblxuZnVuY3Rpb24gcmVwbGFjZVByb3BWYWx1ZUluU3RhdGUoXG4gIHN0YXRlLFxuICByZXBsYWNlZEl0ZW0sXG4gIHtwcm9wLCB0b01lcmdlUHJvcCwgZ2V0Q2hpbGREYXRhc2V0SWRzLCBzYXZlVW5tZXJnZWR9XG4pIHtcbiAgLy8gcHJvcCBpcyBkZXBlbmRzIG9uIHRoZSBkYXRhc2V0IHRvIGJlIHJlcGxhY2VkXG4gIC8vIHJlbW92ZSBwcm9wIGZyb20gc3RhdGUsIGFuZCBtb3ZlIGl0IHRvIHRvQmVNZXJnZWRcbiAgbGV0IG5leHRTdGF0ZSA9IG1vdmVWYWx1ZVRvQmVNZXJnZWQoc3RhdGUsIHJlcGxhY2VkSXRlbSwge3Byb3AsIHRvTWVyZ2VQcm9wLCBzYXZlVW5tZXJnZWR9KTtcbiAgY29uc3QgY2hpbGREYXRhSWRzID0gZ2V0Q2hpbGREYXRhc2V0SWRzPy4ocmVwbGFjZWRJdGVtKSB8fCBmaW5kQ2hpbGREYXRhc2V0SWRzKHJlcGxhY2VkSXRlbSk7XG5cbiAgaWYgKGNoaWxkRGF0YUlkcykge1xuICAgIG5leHRTdGF0ZSA9IHRvQXJyYXkoY2hpbGREYXRhSWRzKS5yZWR1Y2UoKGFjY3UsIGNoaWxkRGF0YUlkKSA9PiB7XG4gICAgICAvLyBzaG91bGRuJ3QgbmVlZCB0byBjaGFuZ2UgY2hpbGQgZGF0YXNldCBpZCxcbiAgICAgIC8vIGJ1dCBzdGlsbCBuZWVkIHRvIG1vdmUgb3V0IG9mIHN0YXRlIGFuZCBtZXJnZSBiYWNrIGluXG4gICAgICByZXR1cm4gcmVwbGFjZURhdGFzZXRBbmREZXBzKGFjY3UsIGNoaWxkRGF0YUlkLCBjaGlsZERhdGFJZCk7XG4gICAgfSwgbmV4dFN0YXRlKTtcbiAgfVxuICByZXR1cm4gbmV4dFN0YXRlO1xufVxuIl0sIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztBQUdBLElBQUFBLEtBQUEsR0FBQUMsc0JBQUEsQ0FBQUMsT0FBQTtBQUNBLElBQUFDLGdCQUFBLEdBQUFGLHNCQUFBLENBQUFDLE9BQUE7QUFDQSxJQUFBRSxVQUFBLEdBQUFILHNCQUFBLENBQUFDLE9BQUE7QUFDQSxJQUFBRyxPQUFBLEdBQUFILE9BQUE7QUFDQSxJQUFBSSxVQUFBLEdBQUFMLHNCQUFBLENBQUFDLE9BQUE7QUFDQSxJQUFBSyxJQUFBLEdBQUFOLHNCQUFBLENBQUFDLE9BQUE7QUFDQSxJQUFBTSxRQUFBLEdBQUFQLHNCQUFBLENBQUFDLE9BQUE7QUFDQSxJQUFBTyxLQUFBLEdBQUFSLHNCQUFBLENBQUFDLE9BQUE7QUFDQSxJQUFBUSxLQUFBLEdBQUFULHNCQUFBLENBQUFDLE9BQUE7QUFDQSxJQUFBUyxJQUFBLEdBQUFWLHNCQUFBLENBQUFDLE9BQUE7QUFDQSxJQUFBVSxNQUFBLEdBQUFDLHVCQUFBLENBQUFYLE9BQUE7QUFFQSxJQUFBWSxPQUFBLEdBQUFaLE9BQUE7QUFRQSxJQUFBYSxRQUFBLEdBQUFiLE9BQUE7QUEyQkEsSUFBQWMsTUFBQSxHQUFBZCxPQUFBO0FBNkJBLElBQUFl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
3598
+ //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJfYmJveCIsIl9pbnRlcm9wUmVxdWlyZURlZmF1bHQiLCJyZXF1aXJlIiwiX2NvcHlUb0NsaXBib2FyZCIsIl9kZWVwbWVyZ2UiLCJfd2luZG93IiwiX2Nsb25lRGVlcCIsIl9nZXQiLCJfaXNFcXVhbCIsIl9waWNrIiwiX3VuaXEiLCJfeG9yIiwiX3Rhc2tzIiwiX2ludGVyb3BSZXF1aXJlV2lsZGNhcmQiLCJfdGFza3MyIiwiX2FjdGlvbnMiLCJfdXRpbHMiLCJfY29tbW9uVXRpbHMiLCJfY29uc3RhbnRzIiwiX2xheWVycyIsIl9jb21wb3NlckhlbHBlcnMiLCJfbWVyZ2VySGFuZGxlciIsIl92aXNTdGF0ZU1lcmdlciIsIl9zY2hlbWFzIiwiX3RhYmxlIiwiX2ludGVyYWN0aW9uVXRpbHMiLCJfbGF5ZXJVdGlscyIsIl9lZmZlY3RzIiwiX2RhdGFVdGlscyIsIl9leGNsdWRlZCIsIl9leGNsdWRlZDIiLCJfZ2V0UmVxdWlyZVdpbGRjYXJkQ2FjaGUiLCJlIiwiV2Vha01hcCIsInIiLCJ0IiwiX19lc01vZHVsZSIsIl90eXBlb2YiLCJoYXMiLCJnZXQiLCJuIiwiX19wcm90b19fIiwiYSIsIk9iamVjdCIsImRlZmluZVByb3BlcnR5IiwiZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yIiwidSIsImhhc093blByb3BlcnR5IiwiY2FsbCIsImkiLCJzZXQiLCJfdG9Qcm9wZXJ0eUtleSIsIl90b1ByaW1pdGl2ZSIsIlN5bWJvbCIsInRvUHJpbWl0aXZlIiwiVHlwZUVycm9yIiwiU3RyaW5nIiwiTnVtYmVyIiwiX2NyZWF0ZUZvck9mSXRlcmF0b3JIZWxwZXIiLCJpdGVyYXRvciIsIkFycmF5IiwiaXNBcnJheSIsIl91bnN1cHBvcnRlZEl0ZXJhYmxlVG9BcnJheSIsImxlbmd0aCIsIl9uIiwiRiIsInMiLCJkb25lIiwidmFsdWUiLCJmIiwibyIsIm5leHQiLCJfYXJyYXlMaWtlVG9BcnJheSIsInRvU3RyaW5nIiwic2xpY2UiLCJjb25zdHJ1Y3RvciIsIm5hbWUiLCJmcm9tIiwidGVzdCIsIm93bktleXMiLCJrZXlzIiwiZ2V0T3duUHJvcGVydHlTeW1ib2xzIiwiZmlsdGVyIiwiZW51bWVyYWJsZSIsInB1c2giLCJhcHBseSIsIl9vYmplY3RTcHJlYWQiLCJhcmd1bWVudHMiLCJmb3JFYWNoIiwiX2RlZmluZVByb3BlcnR5MiIsImdldE93blByb3BlcnR5RGVzY3JpcHRvcnMiLCJkZWZpbmVQcm9wZXJ0aWVzIiwiZGlzYWJsZVN0YWNrQ2FwdHVyaW5nIiwidmlzU3RhdGVVcGRhdGVycyIsImRlZmF1bHRJbnRlcmFjdGlvbkNvbmZpZyIsImV4cG9ydHMiLCJ0b29sdGlwIiwiaWQiLCJsYWJlbCIsImVuYWJsZWQiLCJjb25maWciLCJmaWVsZHNUb1Nob3ciLCJjb21wYXJlTW9kZSIsImNvbXBhcmVUeXBlIiwiQ09NUEFSRV9UWVBFUyIsIkFCU09MVVRFIiwiZ2VvY29kZXIiLCJwb3NpdGlvbiIsImJydXNoIiwic2l6ZSIsImNvb3JkaW5hdGUiLCJERUZBVUxUX0FOSU1BVElPTl9DT05GSUciLCJkb21haW4iLCJjdXJyZW50VGltZSIsInNwZWVkIiwiaXNBbmltYXRpbmciLCJ0aW1lU3RlcHMiLCJ0aW1lRm9ybWF0IiwidGltZXpvbmUiLCJkZWZhdWx0VGltZUZvcm1hdCIsImhpZGVDb250cm9sIiwiZHVyYXRpb24iLCJERUZBVUxUX0VESVRPUiIsIm1vZGUiLCJFRElUT1JfTU9ERVMiLCJEUkFXX1BPTFlHT04iLCJmZWF0dXJlcyIsInNlbGVjdGVkRmVhdHVyZSIsInZpc2libGUiLCJJTklUSUFMX1ZJU19TVEFURSIsIm1hcEluZm8iLCJ0aXRsZSIsImRlc2NyaXB0aW9uIiwibGF5ZXJzIiwibGF5ZXJEYXRhIiwibGF5ZXJUb0JlTWVyZ2VkIiwibGF5ZXJPcmRlciIsImZpbHRlcnMiLCJmaWx0ZXJUb0JlTWVyZ2VkIiwiZGF0YXNldHMiLCJlZGl0aW5nRGF0YXNldCIsInVuZGVmaW5lZCIsImVmZmVjdHMiLCJlZmZlY3RPcmRlciIsImludGVyYWN0aW9uQ29uZmlnIiwiaW50ZXJhY3Rpb25Ub0JlTWVyZ2VkIiwibGF5ZXJCbGVuZGluZyIsIm92ZXJsYXlCbGVuZGluZyIsImhvdmVySW5mbyIsImNsaWNrZWQiLCJtb3VzZVBvcyIsIm1heERlZmF1bHRUb29sdGlwcyIsIk1BWF9ERUZBVUxUX1RPT0xUSVBTIiwic3BsaXRNYXBzIiwic3BsaXRNYXBzVG9CZU1lcmdlZCIsImlzTWVyZ2luZ0RhdGFzZXRzIiwibGF5ZXJDbGFzc2VzIiwiTGF5ZXJDbGFzc2VzIiwiYW5pbWF0aW9uQ29uZmlnIiwiZWRpdG9yIiwiZmlsZUxvYWRpbmciLCJmaWxlTG9hZGluZ1Byb2dyZXNzIiwibG9hZGluZ0luZGljYXRvclZhbHVlIiwibG9hZGVycyIsImxvYWRPcHRpb25zIiwibWVyZ2VycyIsIlZJU19TVEFURV9NRVJHRVJTIiwic2NoZW1hIiwiS2VwbGVyR0xTY2hlbWEiLCJBQ1RJT05fVEFTS19GSVRfQk9VTkRTIiwiVGFzayIsImZyb21DYWxsYmFjayIsIl8iLCJjYiIsIkFDVElPTl9UQVNLX0FERF9OT1RJRklDQVRJT04iLCJ1cGRhdGVTdGF0ZVdpdGhMYXllckFuZERhdGEiLCJzdGF0ZSIsIl9yZWYiLCJsYXllciIsImlkeCIsIm1hcCIsImx5ciIsImQiLCJ1cGRhdGVTdGF0ZU9uTGF5ZXJWaXNpYmlsaXR5Q2hhbmdlIiwibmV3U3RhdGUiLCJpc1Zpc2libGUiLCJhZGROZXdMYXllcnNUb1NwbGl0TWFwIiwicmVtb3ZlTGF5ZXJGcm9tU3BsaXRNYXBzIiwiYW5pbWF0aW9uIiwidXBkYXRlQW5pbWF0aW9uRG9tYWluIiwicGlja0NoYW5nZWRQcm9wcyIsInByZXYiLCJjaGFuZ2VkUHJvcHMiLCJwaWNrUHJvcHNPZiIsIm9iaiIsImtleSIsInByb3RvdHlwZSIsImlzRXF1YWwiLCJWSVNVQUxfQ0hBTk5FTF9QUk9QX1RZUEVTIiwiYXBwbHlMYXllckNvbmZpZ1VwZGF0ZXIiLCJhY3Rpb24iLCJfc2VyaWFsaXplTGF5ZXIiLCJvbGRMYXllcklkIiwibmV3TGF5ZXJDb25maWciLCJsYXllckluZGV4IiwibmV3UGFyc2VkTGF5ZXIiLCJwYXJzZUxheWVyQ29uZmlnIiwib2xkTGF5ZXIiLCJmaW5kIiwibCIsImRhdGFzZXQiLCJkYXRhSWQiLCJuZXdMYXllciIsInZhbGlkYXRlTGF5ZXJXaXRoRGF0YSIsIm5leHRTdGF0ZSIsInR5cGUiLCJvbGRMYXllckluZGV4IiwiZmluZEluZGV4IiwibGF5ZXJUeXBlQ2hhbmdlVXBkYXRlciIsImxheWVyVHlwZUNoYW5nZSIsIm5ld0xheWVySWQiLCJhcHBseUxheWVyQ29uZmlnIiwic2VyaWFsaXplZE9sZExheWVyIiwic2VyaWFsaXplTGF5ZXIiLCJzZXJpYWxpemVkTmV3TGF5ZXIiLCJjaGFuZ2VkIiwidmlzQ29uZmlnIiwibGF5ZXJWaXNDb25maWdDaGFuZ2VVcGRhdGVyIiwibGF5ZXJWaXNDb25maWdDaGFuZ2UiLCJ2aXN1YWxDaGFubmVscyIsImNoYW5uZWxOYW1lIiwiY2hhbm5lbCIsImNoYW5uZWxQcm9wTmFtZXMiLCJwcm9wIiwic29tZSIsImxheWVyVmlzdWFsQ2hhbm5lbENoYW5nZVVwZGF0ZXIiLCJsYXllclZpc3VhbENoYW5uZWxDb25maWdDaGFuZ2UiLCJwaWNrIiwiX2l0ZXJhdG9yIiwiX3N0ZXAiLCJlcnIiLCJsYXllckNvbmZpZ0NoYW5nZVVwZGF0ZXIiLCJsYXllckNvbmZpZ0NoYW5nZSIsInVwZGF0ZWxheWVyVmlzaWJpbHR5IiwiZmlsdGVySW5kZXgiLCJmaWx0ZXJTeW5jZWRXaXRoVGltZWxpbmUiLCJpc0xheWVyQW5pbWF0YWJsZSIsInN5bmNUaW1lRmlsdGVyV2l0aExheWVyVGltZWxpbmVVcGRhdGVyIiwiZW5hYmxlIiwiZ2V0QW5pbWF0YWJsZVZpc2libGVMYXllcnMiLCJwcm9wcyIsIm5ld0NvbmZpZyIsIl9hY3Rpb24kbmV3Q29uZmlnIiwicmVzdENvbmZpZyIsIl9vYmplY3RXaXRob3V0UHJvcGVydGllczIiLCJzdGF0ZVdpdGhEYXRhSWQiLCJsYXllckRhdGFJZENoYW5nZVVwZGF0ZXIiLCJuZXh0TGF5ZXIiLCJ1cGRhdGVMYXllckNvbmZpZyIsInNob3VsZENhbGN1bGF0ZUxheWVyRGF0YSIsIm9sZExheWVyRGF0YSIsInVwZGF0ZUxheWVyRGF0YVJlc3VsdCIsImNhbGN1bGF0ZUxheWVyRGF0YSIsImxheWVyQW5pbWF0aW9uQ2hhbmdlVXBkYXRlciIsIl9jYWxjdWxhdGVMYXllckRhdGEiLCJsYXllclRvZ2dsZVZpc2liaWxpdHlVcGRhdGVyIiwibGF5ZXJJZCIsInNwbGl0TWFwSWQiLCJtYXBJbmRleCIsInNtIiwidG9nZ2xlTGF5ZXJGb3JNYXBVcGRhdGVyIiwidG9nZ2xlTGF5ZXJGb3JNYXAiLCJzeW5jZWRXaXRoTGF5ZXJUaW1lbGluZSIsImxheWVyU2V0SXNWYWxpZFVwZGF0ZXIiLCJpc1ZhbGlkIiwibGF5ZXJUb1VwZGF0ZSIsIm5ld0RhdGEiLCJfY2FsY3VsYXRlTGF5ZXJEYXRhMiIsImFkZE9yUmVtb3ZlVGV4dExhYmVscyIsIm5ld0ZpZWxkcyIsInRleHRMYWJlbCIsImRlZmF1bHRUZXh0TGFiZWwiLCJERUZBVUxUX1RFWFRfTEFCRUwiLCJuZXdUZXh0TGFiZWwiLCJjdXJyZW50RmllbGRzIiwidGwiLCJmaWVsZCIsImFkZEZpZWxkcyIsImluY2x1ZGVzIiwiZGVsZXRlRmllbGRzIiwiZmQiLCJjb25jYXQiLCJfdG9Db25zdW1hYmxlQXJyYXkyIiwiYWYiLCJ1cGRhdGVUZXh0TGFiZWxQcm9wQW5kVmFsdWUiLCJzcGxpY2UiLCJsYXllclRleHRMYWJlbENoYW5nZVVwZGF0ZXIiLCJfb2xkTGF5ZXIkZ2V0RGVmYXVsdEwiLCJfb2xkTGF5ZXIkZ2V0RGVmYXVsdEwyIiwiZ2V0RGVmYXVsdExheWVyQ29uZmlnIiwidmFsaWRhdGVFeGlzdGluZ0xheWVyV2l0aERhdGEiLCJsb2FkZWRMYXllciIsImFsbG93RW1wdHlDb2x1bW4iLCJpc1ZhbGlkVG9TYXZlIiwidmFsaWRhdGVkIiwib2xkTGF5ZXJUeXBlIiwiaXNDb25maWdBY3RpdmUiLCJ1cGRhdGVMYXllckRvbWFpbiIsIl9jYWxjdWxhdGVMYXllckRhdGEzIiwic2V0SW5pdGlhbExheWVyQ29uZmlnIiwicmVzdWx0IiwiZmluZERlZmF1bHRMYXllclByb3BzIiwibmV3VHlwZSIsIm9sZElkIiwiQ29uc29sZSIsImVycm9yIiwiZGVmYXVsdExheWVyUHJvcHMiLCJhc3NpZ25Db25maWdUb0xheWVyIiwidmlzQ29uZmlnU2V0dGluZ3MiLCJpc0xheWVySG92ZXJlZCIsIl9jYWxjdWxhdGVMYXllckRhdGE0Iiwic2V0dGluZ3MiLCJfc2V0dGluZ3MkbGF5ZXJzIiwib2xkTGF5ZXJNYXAiLCJvdGhlckxheWVycyIsIm5ld1Zpc0NvbmZpZyIsInVwZGF0ZUxheWVyVmlzQ29uZmlnIiwidXBkYXRlTGF5ZXJWaXN1YWxDaGFubmVsIiwidXBkYXRlZFN0YXRlIiwidmlzdWFsQ2hhbm5lbCIsImNoYW5uZWxTY2FsZVR5cGUiLCJDSEFOTkVMX1NDQUxFUyIsImNvbG9yIiwidXBkYXRlTGF5ZXJDb2xvclVJIiwicmFuZ2UiLCJjb2xvclJhbmdlQ29uZmlnIiwiY29sb3JVSSIsImN1c3RvbUJyZWFrcyIsIl9jYWxjdWxhdGVMYXllckRhdGE1Iiwic2NhbGUiLCJTQ0FMRV9UWVBFUyIsImN1c3RvbU9yZGluYWwiLCJjdXN0b21QYWxldHRlIiwiaW5pdEN1c3RvbVBhbGV0dGVCeUN1c3RvbVNjYWxlIiwib3JkaW5hbERvbWFpbiIsImNvbG9yQnJlYWtzIiwic2hvd0NvbG9yQ2hhcnQiLCJfY2FsY3VsYXRlTGF5ZXJEYXRhNiIsInNldExheWVyQW5pbWF0aW9uVGltZVVwZGF0ZXIiLCJfcmVmMiIsInJlZHVjZSIsImFjY3UiLCJzZXRGaWx0ZXJBbmltYXRpb25UaW1lVXBkYXRlciIsInNldEZpbHRlclVwZGF0ZXIiLCJzZXRGaWx0ZXJBbmltYXRpb25XaW5kb3dVcGRhdGVyIiwiX3JlZjMiLCJhbmltYXRpb25XaW5kb3ciLCJuZXdGaWx0ZXIiLCJzd2FwXyIsIm5ld1N5bmNUaW1lbGluZU1vZGUiLCJnZXRTeW5jQW5pbWF0aW9uTW9kZSIsInNldFRpbWVGaWx0ZXJUaW1lbGluZU1vZGVVcGRhdGVyIiwiYXBwbHlGaWx0ZXJDb25maWdVcGRhdGVyIiwiX3NlcmlhbGl6ZUZpbHRlciIsImZpbHRlcklkIiwib2xkRmlsdGVyIiwic2VyaWFsaXplZE9sZEZpbHRlciIsInNlcmlhbGl6ZUZpbHRlciIsInNlcmlhbGl6ZWROZXdGaWx0ZXIiLCJzZXRGaWx0ZXIiLCJ2YWx1ZXMiLCJfYWN0aW9uJHZhbHVlSW5kZXgiLCJ2YWx1ZUluZGV4IiwidG9BcnJheSIsImRhdGFzZXRJZHNUb0ZpbHRlciIsIl9sb29wIiwicmVzIiwidiIsIl91cGRhdGVGaWx0ZXJQcm9wIiwiZW5sYXJnZWRGaWx0ZXIiLCJ2aWV3IiwiRklMVEVSX1ZJRVdfVFlQRVMiLCJlbmxhcmdlZCIsInNpZGUiLCJmaWx0ZXJlZERhdGFzZXRzIiwiYXBwbHlGaWx0ZXJzVG9EYXRhc2V0cyIsInVuaXEiLCJmaWx0ZXJXaXRoUExvdCIsInVwZGF0ZUZpbHRlclBsb3QiLCJ1cGRhdGVBbGxMYXllckRvbWFpbkRhdGEiLCJGSUxURVJfVFlQRVMiLCJ0aW1lUmFuZ2UiLCJhZGp1c3RBbmltYXRpb25Db25maWdXaXRoRmlsdGVyIiwiX3VwZGF0ZUZpbHRlckRhdGFJZEF0VmFsdWVJbmRleCIsIl9yZW1vdmVGaWx0ZXJEYXRhSWRBdFZhbHVlSW5kZXgiLCJuZXh0VmFsdWUiLCJnZXREZWZhdWx0RmlsdGVyIiwicmVtb3ZlRmlsdGVyUGxvdCIsIl9pIiwiX2FyciIsIm5leHRWYWwiLCJkb21haW5TdGVwcyIsIm1lcmdlRmlsdGVyRG9tYWluIiwibmV4dEZpbHRlciIsInN0ZXAiLCJhZGp1c3RWYWx1ZVRvRmlsdGVyRG9tYWluIiwiZGF0YXNldElkcyIsIkZJTFRFUl9VUERBVEVSX1BST1BTIiwib2xkRGF0YUlkIiwiZGF0YXNldElkIiwiX2FwcGx5RmlsdGVyRmllbGROYW1lIiwiYXBwbHlGaWx0ZXJGaWVsZE5hbWUiLCJtZXJnZURvbWFpbiIsInVwZGF0ZWRGaWx0ZXIiLCJuZXdEYXRhc2V0IiwiZ3B1Iiwic2V0RmlsdGVyR3B1TW9kZSIsImFzc2lnbkdwdUNoYW5uZWwiLCJsYXllcklkRGlmZmVyZW5jZSIsInhvciIsImxheWVyRGF0YUlkcyIsImxpZCIsIm5ld0RhdGFJZHMiLCJzZXRGaWx0ZXJQbG90VXBkYXRlciIsIl9yZWY0IiwibmV3UHJvcCIsInBpY2tfIiwibWVyZ2VfIiwicGxvdFR5cGUiLCJjaGFydFR5cGUiLCJ5QXhpcyIsIlBMT1RfVFlQRVMiLCJsaW5lQ2hhcnQiLCJoaXN0b2dyYW0iLCJhZGRGaWx0ZXJVcGRhdGVyIiwiY3JlYXRlT3JVcGRhdGVGaWx0ZXJVcGRhdGVyIiwib3JpZ2luYWxJbmRleCIsImluZGV4IiwibGF5ZXJDb2xvclVJQ2hhbmdlVXBkYXRlciIsIl9yZWY1Iiwib2xkVml4Q29uZmlnIiwidG9nZ2xlRmlsdGVyQW5pbWF0aW9uVXBkYXRlciIsImlzRmlsdGVyQW5pbWF0aW9uQ29uZmlnIiwic2V0QW5pbWF0aW9uQ29uZmlnVXBkYXRlciIsImlzU2lkZUZpbHRlciIsImFwcGx5RmlsdGVyQ29uZmlnIiwidG9nZ2xlTGF5ZXJBbmltYXRpb25VcGRhdGVyIiwidG9nZ2xlTGF5ZXJBbmltYXRpb25Db250cm9sVXBkYXRlciIsInVwZGF0ZUZpbHRlckFuaW1hdGlvblNwZWVkVXBkYXRlciIsInVwZGF0ZUxheWVyQW5pbWF0aW9uU3BlZWRVcGRhdGVyIiwiX3JlZjYiLCJzZXRGaWx0ZXJWaWV3VXBkYXRlciIsInNob3VsZFJlc2V0T3RoZXJGaWx0ZXJzVmlldyIsInRvZ2dsZUZpbHRlckZlYXR1cmVVcGRhdGVyIiwiZmVhdHVyZVRvRmlsdGVyVmFsdWUiLCJyZW1vdmVGaWx0ZXJVcGRhdGVyIiwiX3N0YXRlJGZpbHRlcnMkaWR4IiwibmV3RmlsdGVycyIsIm5ld0VkaXRvciIsImdldEZpbHRlcklkSW5GZWF0dXJlIiwiYWRkTGF5ZXJVcGRhdGVyIiwibmV3TGF5ZXJEYXRhIiwiY3JlYXRlTGF5ZXJGcm9tQ29uZmlnIiwid2FybiIsIl9hY3Rpb24kZGF0YXNldElkIiwiZGVmYXVsdERhdGFzZXQiLCJMYXllciIsInJlbW92ZUxheWVyVXBkYXRlciIsIl9yZWY3IiwiaXNGaW5pdGUiLCJsYXllclRvUmVtb3ZlIiwiZmlsdGVyT3V0QnlJZCIsInJlbW92ZUVsZW1lbnRBdEluZGV4IiwicmVvcmRlckxheWVyVXBkYXRlciIsIl9yZWY4Iiwib3JkZXIiLCJkdXBsaWNhdGVMYXllclVwZGF0ZXIiLCJfcmVmOSIsIm9yaWdpbmFsIiwib3JpZ2luYWxMYXllck9yZGVySWR4IiwibmV3TGFiZWwiLCJwb3N0Zml4IiwiZ2VuZXJhdGVIYXNoSWQiLCJMQVlFUl9JRF9MRU5HVEgiLCJuZXdMYXllck9yZGVyIiwiYXJyYXlJbnNlcnQiLCJhZGRFZmZlY3RVcGRhdGVyIiwiX2FjdGlvbiRjb25maWciLCJMSUdIVF9BTkRfU0hBRE9XX0VGRkVDVCIsImVmZmVjdCIsIm5ld0VmZmVjdCIsImNyZWF0ZUVmZmVjdCIsInNldFByb3BzIiwiZml4RWZmZWN0T3JkZXIiLCJyZW1vdmVFZmZlY3RVcGRhdGVyIiwiX3JlZjEwIiwiZWZmZWN0VG9SZW1vdmUiLCJlZmZlY3RJZCIsInJlb3JkZXJFZmZlY3RVcGRhdGVyIiwiX3JlZjExIiwidXBkYXRlRWZmZWN0VXBkYXRlciIsIl9yZWYxMiIsImlkeDIiLCJlZmZlY3RPcmRlcklkIiwibmV3RWZmZWN0cyIsInJlbW92ZURhdGFzZXRVcGRhdGVyIiwiZGF0YXNldEtleSIsIl9zdGF0ZSRkYXRhc2V0cyIsIm5ld0RhdGFzZXRzIiwibGF5ZXJzVG9SZW1vdmUiLCJfaXRlcmF0b3IyIiwiX3N0ZXAyIiwiaW5kZXhPZiIsInJlbW92ZURhdGFzZXRGcm9tSW50ZXJhY3Rpb25Db25maWciLCJfcmVmMTMiLCJfaW50ZXJhY3Rpb25Db25maWciLCJfY29uZmlnJGZpZWxkc1RvU2hvdyIsImZpZWxkcyIsInVwZGF0ZUxheWVyQmxlbmRpbmdVcGRhdGVyIiwidXBkYXRlT3ZlcmxheUJsZW5kaW5nVXBkYXRlciIsInNob3dEYXRhc2V0VGFibGVVcGRhdGVyIiwidXBkYXRlVGFibGVDb2xvclVwZGF0ZXIiLCJ1cGRhdGVEYXRhc2V0UHJvcHNVcGRhdGVyIiwibmV3Q29sb3IiLCJyZXNldE1hcENvbmZpZ1VwZGF0ZXIiLCJpbml0aWFsU3RhdGUiLCJyZWNlaXZlTWFwQ29uZmlnVXBkYXRlciIsIl9yZWYxNCIsIl9yZWYxNCRwYXlsb2FkIiwicGF5bG9hZCIsIl9yZWYxNCRwYXlsb2FkJGNvbmZpZyIsIl9yZWYxNCRwYXlsb2FkJG9wdGlvbiIsIm9wdGlvbnMiLCJ2aXNTdGF0ZSIsImtlZXBFeGlzdGluZ0NvbmZpZyIsIm1lcmdlZFN0YXRlIiwiX2l0ZXJhdG9yMyIsIl9zdGVwMyIsIm1lcmdlciIsImlzVmFsaWRNZXJnZXIiLCJoYXNQcm9wc1RvTWVyZ2UiLCJtZXJnZSIsImdldFByb3BWYWx1ZVRvTWVyZ2VyIiwidG9NZXJnZVByb3AiLCJsYXllckhvdmVyVXBkYXRlciIsImluZm8iLCJpbnRlcmFjdGlvbkNvbmZpZ0NoYW5nZVVwZGF0ZXIiLCJjb250cmFkaWN0IiwiayIsImxheWVyQ2xpY2tVcGRhdGVyIiwicGlubmVkIiwiY2xvbmVEZWVwIiwicGlja2VkIiwibWFwQ2xpY2tVcGRhdGVyIiwibW91c2VNb3ZlVXBkYXRlciIsIl9yZWYxNSIsImV2dCIsInBvaW50IiwibW91c2VQb3NpdGlvbiIsImxuZ0xhdCIsInRvZ2dsZVNwbGl0TWFwVXBkYXRlciIsImNvbXB1dGVTcGxpdE1hcExheWVycyIsImR1cGxpY2F0ZSIsImNsb3NlU3BlY2lmaWNNYXBBdEluZGV4IiwiX3JlZjE2IiwidXBkYXRlVmlzRGF0YVVwZGF0ZXIiLCJjcmVhdGVEYXRhc2V0VGFza3MiLCJub3RpZmljYXRpb25UYXNrcyIsIl9yZWYxNyIsImRhdGFzZXRJbmRleCIsIl9yZWYxNyRpbmZvIiwicmVzdCIsInRhc2siLCJjcmVhdGVOZXdEYXRhRW50cnkiLCJhZGROb3RpZmljYXRpb24iLCJlcnJvck5vdGlmaWNhdGlvbiIsIm1lc3NhZ2UiLCJkYXRhc2V0c0FsbFNldHRsZWRUYXNrIiwiYWxsU2V0dGxlZCIsInJlc3VsdHMiLCJjcmVhdGVOZXdEYXRhc2V0U3VjY2VzcyIsImFkZFRvTWFwT3B0aW9ucyIsInNldExvYWRpbmdJbmRpY2F0b3JVcGRhdGVyIiwicGF5bG9hZF8iLCJjaGFuZ2UiLCJ3aXRoVGFzayIsImNyZWF0ZU5ld0RhdGFzZXRTdWNjZXNzVXBkYXRlciIsIl9hY3Rpb24kcGF5bG9hZCIsIm5ld0RhdGFFbnRyaWVzIiwic3RhdHVzIiwiQUNUSU9OX1RBU0siLCJyZWFzb24iLCJtZXJnZURhdGFzZXRzQnlPcmRlciIsImxheWVyTWVyZ2VycyIsIm0iLCJ3YWl0Rm9yTGF5ZXJEYXRhIiwiZGF0YXNldE1lcmdlcnMiLCJwb3N0TWVyZ2VyUGF5bG9hZCIsImFwcGx5TWVyZ2Vyc1VwZGF0ZXIiLCJtZXJnZVN0YXRlUmVzdWx0IiwibWVyZ2VTdGF0ZUZyb21NZXJnZXJzIiwiYWxsTWVyZ2VkIiwicG9zdE1lcmdlVXBkYXRlciIsImZEYXRhSWQiLCJkYXRhc2V0RmlsdGVyZWQiLCJkYXRhRW1wdHkiLCJuZXdMYXllcnMiLCJhdXRvQ3JlYXRlTGF5ZXJzIiwiYWRkRGVmYXVsdExheWVycyIsInRvb2x0aXBGaWVsZHMiLCJhdXRvQ3JlYXRlVG9vbHRpcHMiLCJhZGREZWZhdWx0VG9vbHRpcHMiLCJ1cGRhdGVkRGF0YXNldHMiLCJjZW50ZXJNYXAiLCJib3VuZHMiLCJmaW5kTWFwQm91bmRzIiwiZml0Qm91bmRzVGFzayIsImZpdE1hcEJvdW5kcyIsInJlbmFtZURhdGFzZXRVcGRhdGVyIiwiQUxMT1dFRF9VUERBVEVfREFUQVNFVF9QUk9QUyIsInZhbGlkYXRlRGF0YXNldFVwZGF0ZVByb3BzIiwidmFsaWRhdGVkUHJvcHMiLCJlbnRyaWVzIiwiYWNjIiwiZW50cnkiLCJfZW50cnkiLCJfc2xpY2VkVG9BcnJheTIiLCJpc1JnYkNvbG9yIiwiaXNQbGFpbk9iamVjdCIsImRlZXBtZXJnZSIsImV4aXN0aW5nIiwiY29weVRhYmxlQW5kVXBkYXRlIiwiX3N0YXRlJHNwbGl0TWFwcyRpbmRlIiwiaW5kZXhUb1JldHJpZXZlIiwibWFwTGF5ZXJzIiwibG9hZEZpbGVzVXBkYXRlciIsImZpbGVzIiwiX2FjdGlvbiRvbkZpbmlzaCIsIm9uRmluaXNoIiwibG9hZEZpbGVzU3VjY2VzcyIsImluaXRpYWxGaWxlTG9hZGluZ1Byb2dyZXNzIiwiZmlsZUNhY2hlIiwiZmlsZXNUb0xvYWQiLCJsb2FkTmV4dEZpbGVVcGRhdGVyIiwibG9hZEZpbGVTdGVwU3VjY2Vzc1VwZGF0ZXIiLCJmaWxlTmFtZSIsIl9zdGF0ZSRmaWxlTG9hZGluZyIsInN0YXRlV2l0aFByb2dyZXNzIiwidXBkYXRlRmlsZUxvYWRpbmdQcm9ncmVzc1VwZGF0ZXIiLCJwcm9ncmVzcyIsInBlcmNlbnQiLCJzdGF0ZVdpdGhDYWNoZSIsIkRFTEFZX1RBU0siLCJsb2FkTmV4dEZpbGUiLCJfZmlsZXNUb0xvYWQiLCJfdG9BcnJheTIiLCJmaWxlIiwicmVtYWluaW5nRmlsZXNUb0xvYWQiLCJtYWtlTG9hZEZpbGVUYXNrIiwiTE9BRF9GSUxFX1RBU0siLCJiaW1hcCIsImdlbiIsIm5leHRGaWxlQmF0Y2giLCJwcm9jZXNzRmlsZUNvbnRlbnQiLCJjb250ZW50IiwibG9hZEZpbGVzRXJyIiwicHJvY2Vzc0ZpbGVDb250ZW50VXBkYXRlciIsIl9hY3Rpb24kcGF5bG9hZDIiLCJQUk9DRVNTX0ZJTEVfREFUQSIsImxvYWRGaWxlU3RlcFN1Y2Nlc3MiLCJwYXJzZVByb2dyZXNzIiwicHJldlByb2dyZXNzIiwibmV4dEZpbGVCYXRjaFVwZGF0ZXIiLCJfcmVmMTgiLCJfYWNjdW11bGF0ZWQkZGF0YSIsIl9yZWYxOCRwYXlsb2FkIiwiYWNjdW11bGF0ZWQiLCJnZXRBcHBsaWNhdGlvbkNvbmZpZyIsInVzZUFycm93UHJvZ3Jlc3NpdmVMb2FkaW5nIiwiZW5kc1dpdGgiLCJkYXRhIiwiVU5XUkFQX1RBU0siLCJfcmVmMTkiLCJsb2FkRmlsZXNFcnJVcGRhdGVyIiwiX3JlZjIwIiwiX3N0YXRlJGZpbGVMb2FkaW5nMiIsImFwcGx5Q1BVRmlsdGVyVXBkYXRlciIsIl9yZWYyMSIsImRhdGFJZHMiLCJmaWx0ZXJEYXRhc2V0Q1BVIiwic2V0TWFwSW5mb1VwZGF0ZXIiLCJlbXB0eSIsImRlZmF1bHRMYXllcnMiLCJmb3VuZExheWVycyIsImZpbmREZWZhdWx0TGF5ZXIiLCJnZXRMYXllck9yZGVyRnJvbUxheWVycyIsImZpbmRGaWVsZHNUb1Nob3ciLCJtZXJnZWQiLCJfcmVmMjMiLCJmaXhlZERvbWFpbiIsIl9jYWxjdWxhdGVMYXllckRhdGE3IiwiX3N0YXRlJGZpbHRlcnMiLCJhbmltYXRhYmxlTGF5ZXJzIiwibGF5ZXJEb21haW5zIiwibWVyZ2VkRG9tYWluIiwibWVyZ2VUaW1lRG9tYWlucyIsImdldFRpbWVXaWRnZXRUaXRsZUZvcm1hdHRlciIsIm1lcmdlZFRpbWVTdGVwcyIsInNvcnQiLCJCQVNFX1NQRUVEIiwiRlBTIiwic3luY2VkRmlsdGVyIiwibmV3QW5pbWF0aW9uRG9tYWluIiwiaXNJblJhbmdlIiwic2V0RWRpdG9yTW9kZVVwZGF0ZXIiLCJfcmVmMjQiLCJzZXRGZWF0dXJlc1VwZGF0ZXIiLCJfcmVmMjUiLCJfbGFzdEZlYXR1cmUkcHJvcGVydGkiLCJfcmVmMjUkZmVhdHVyZXMiLCJsYXN0RmVhdHVyZSIsInByb3BlcnRpZXMiLCJpc0Nsb3NlZCIsIkVESVQiLCJmZWF0dXJlIiwiYmJveCIsImZlYXR1cmVWYWx1ZSIsImZpbHRlcklkeCIsImZpbCIsInNldFNlbGVjdGVkRmVhdHVyZVVwZGF0ZXIiLCJfcmVmMjYiLCJzZWxlY3Rpb25Db250ZXh0IiwiZGVsZXRlRmVhdHVyZVVwZGF0ZXIiLCJfcmVmMjciLCJzZXRQb2x5Z29uRmlsdGVyTGF5ZXJVcGRhdGVyIiwibm9uZUZpbHRlckZlYXR1cmUiLCJfZmlsdGVyJGxheWVySWQiLCJpc0xheWVySW5jbHVkZWQiLCJnZW5lcmF0ZVBvbHlnb25GaWx0ZXIiLCJzb3J0VGFibGVDb2x1bW5VcGRhdGVyIiwiX3JlZjI4IiwiY29sdW1uIiwic29ydE1vZGUiLCJjdXJyZW50TW9kZSIsIlNPUlRfT1JERVIiLCJBU0NFTkRJTkciLCJzb3J0ZWQiLCJzb3J0RGF0YXNldEJ5Q29sdW1uIiwicGluVGFibGVDb2x1bW5VcGRhdGVyIiwiX3JlZjI5IiwicGluVGFibGVDb2x1bW5zIiwiY29weVRhYmxlQ29sdW1uVXBkYXRlciIsIl9yZWYzMCIsImZpZWxkSWR4IiwidGV4dCIsImRhdGFDb250YWluZXIiLCJyb3ciLCJwYXJzZUZpZWxkVmFsdWUiLCJ2YWx1ZUF0Iiwiam9pbiIsImNvcHkiLCJzZXRDb2x1bW5EaXNwbGF5Rm9ybWF0VXBkYXRlciIsIl9yZWYzMSIsImZvcm1hdHMiLCJkaXNwbGF5Rm9ybWF0IiwiX2xheWVyJGNvbmZpZyIsImNvbG9yRmllbGQiLCJ0b2dnbGVFZGl0b3JWaXNpYmlsaXR5VXBkYXRlciIsInNldEZpbHRlckFuaW1hdGlvblRpbWVDb25maWdVcGRhdGVyIiwiX3JlZjMyIiwidXBkYXRlcyIsImNoZWNrVGltZUNvbmZpZ0FyZ3MiLCJhbGxvd2VkIiwic2V0TGF5ZXJBbmltYXRpb25UaW1lQ29uZmlnVXBkYXRlciIsIl9yZWYzMyIsImxheWVyRmlsdGVyZWRJdGVtc0NoYW5nZVVwZGF0ZXIiLCJfbGF5ZXIkZmlsdGVyZWRJdGVtQ28iLCJldmVudCIsImRlY2tnbExheWVySWQiLCJjb3VudCIsImZpbHRlcmVkSXRlbUNvdW50Iiwid21zRmVhdHVyZUluZm9VcGRhdGVyIiwiZmVhdHVyZUluZm8iLCJjb25zb2xlIiwib2JqZWN0Iiwid21zRmVhdHVyZUluZm8iLCJfbmV3U3RhdGUkYW5pbWF0aW9uQ28iLCJfbmV3U3RhdGUkYW5pbWF0aW9uQ28yIiwiX2FjdGlvbiRlbmFibGUiLCJpbnRlcnZhbEJhc2VkQW5pbWF0aW9uTGF5ZXJzIiwiZ2V0SW50ZXJ2YWxCYXNlZEFuaW1hdGlvbkxheWVycyIsImhhc0ludGVydmFsQmFzZWRBbmltYXRpb25MYXllciIsIkJvb2xlYW4iLCJuZXdGaWx0ZXJEb21haW4iLCJBTklNQVRJT05fV0lORE9XIiwiaW50ZXJ2YWwiLCJhZGp1c3RUaW1lRmlsdGVySW50ZXJ2YWwiLCJuZXdGaWx0ZXJWYWx1ZSIsInN5bmNUaW1lbGluZU1vZGUiLCJTWU5DX1RJTUVMSU5FX01PREVTIiwiZW5kIiwidmFsaWRhdGVTeW5jQW5pbWF0aW9uTW9kZSIsIl9yZWYzNCIsIk1hdGgiLCJtYXgiLCJ0aW1lbGluZVZhbHVlIiwiZ2V0VGltZWxpbmVWYWx1ZUZyb21GaWx0ZXIiLCJzbmFwVG9NYXJrcyIsImZyZWUiLCJfZmlsdGVyJHN5bmNUaW1lbGluZU0iLCJuZXdNb2RlIiwic3RhcnQiLCJpbnRlcnZhbEluZGV4IiwiY3VycmVudEluZGV4IiwibWV0YSIsInRhcmdldFRpbWVJbnRlcnZhbCIsIm5ld0luZGV4IiwiVElNRV9JTlRFUlZBTFNfT1JERVJFRCIsImhleFRpbGVJbnRlcnZhbCIsIkxheWVyVG9GaWx0ZXJUaW1lSW50ZXJ2YWwiLCJnZXREZWZhdWx0VGltZUZvcm1hdCIsInVwZGF0ZWRQbG90VHlwZSIsInVwZGF0ZVRpbWVGaWx0ZXJQbG90VHlwZSIsImFkanVzdFZhbHVlVG9BbmltYXRpb25XaW5kb3ciLCJkZWZhdWx0UmVwbGFjZVBhcmVudERhdGFzZXRJZHMiLCJkYXRhSWRUb1JlcGxhY2UiLCJfdmFsdWUkY29uZmlnIiwiX3ZhbHVlJGNvbmZpZzIiLCJyZXBsYWNlZCIsImlzT2JqZWN0IiwiZmluZENoaWxkRGF0YXNldElkcyIsIl92YWx1ZSRuZXdEYXRhc2V0IiwiY2hpbGREYXRhSWRzIiwibW92ZVZhbHVlVG9CZU1lcmdlZCIsInByb3BWYWx1ZXMiLCJfcmVmMzYiLCJzYXZlVW5tZXJnZWQiLCJzdGF0ZVJlbW92ZWQiLCJwcm9wVmFsdWUiLCJwIiwidG9CZU1lcmdlZCIsInJlcGxhY2VEYXRhc2V0QW5kRGVwcyIsImRhdGFJZFRvVXNlIiwiY29tcG9zZV8iLCJhcHBseV8iLCJyZXBsYWNlRGF0YXNldERlcHNJblN0YXRlIiwicHJlcGFyZVN0YXRlRm9yRGF0YXNldFJlcGxhY2UiLCJfbmV4dFN0YXRlJGxheWVyVG9CZU0iLCJzZXJpYWxpemVkU3RhdGUiLCJzZXJpYWxpemVWaXNTdGF0ZSIsInByZXNlcnZlTGF5ZXJPcmRlciIsInByZXNlcnZlRGF0YXNldE9yZGVyIiwiX3NlcmlhbGl6ZWRTdGF0ZSRzcGxpIiwiX3JlZjM3IiwiYWNjdVN0YXRlIiwiX3JlZjM4IiwicmVwbGFjZVBhcmVudERhdGFzZXRJZHMiLCJnZXRDaGlsZERhdGFzZXRJZHMiLCJwcmVzZXJ2ZU9yZGVyIiwidG9NZXJnZVByb3BzIiwic2F2ZWRQcm9wcyIsInJlcGxhY2VkU3RhdGUiLCJfcmVwbGFjZWRTdGF0ZSRtZXJnZXIiLCJtZXJnZXJPcHRpb25zIiwicmVwbGFjZWRJdGVtIiwicmVwbGFjZVByb3BWYWx1ZUluU3RhdGUiLCJpdGVtIiwiX3JlZjM5IiwiY2hpbGREYXRhSWQiXSwic291cmNlcyI6WyIuLi9zcmMvdmlzLXN0YXRlLXVwZGF0ZXJzLnRzIl0sInNvdXJjZXNDb250ZW50IjpbIi8vIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBNSVRcbi8vIENvcHlyaWdodCBjb250cmlidXRvcnMgdG8gdGhlIGtlcGxlci5nbCBwcm9qZWN0XG5cbmltcG9ydCBiYm94IGZyb20gJ0B0dXJmL2Jib3gnO1xuaW1wb3J0IGNvcHkgZnJvbSAnY29weS10by1jbGlwYm9hcmQnO1xuaW1wb3J0IGRlZXBtZXJnZSBmcm9tICdkZWVwbWVyZ2UnO1xuaW1wb3J0IHtjb25zb2xlIGFzIENvbnNvbGV9IGZyb20gJ2dsb2JhbC93aW5kb3cnO1xuaW1wb3J0IGNsb25lRGVlcCBmcm9tICdsb2Rhc2gvY2xvbmVEZWVwJztcbmltcG9ydCBnZXQgZnJvbSAnbG9kYXNoL2dldCc7XG5pbXBvcnQgaXNFcXVhbCBmcm9tICdsb2Rhc2gvaXNFcXVhbCc7XG5pbXBvcnQgcGljayBmcm9tICdsb2Rhc2gvcGljayc7XG5pbXBvcnQgdW5pcSBmcm9tICdsb2Rhc2gvdW5pcSc7XG5pbXBvcnQgeG9yIGZyb20gJ2xvZGFzaC94b3InO1xuaW1wb3J0IFRhc2ssIHtkaXNhYmxlU3RhY2tDYXB0dXJpbmcsIHdpdGhUYXNrfSBmcm9tICdyZWFjdC1wYWxtL3Rhc2tzJztcbi8vIFRhc2tzXG5pbXBvcnQge1xuICBERUxBWV9UQVNLLFxuICBBQ1RJT05fVEFTSyxcbiAgTE9BRF9GSUxFX1RBU0ssXG4gIFBST0NFU1NfRklMRV9EQVRBLFxuICBVTldSQVBfVEFTS1xufSBmcm9tICdAa2VwbGVyLmdsL3Rhc2tzJztcbi8vIEFjdGlvbnNcbmltcG9ydCB7XG4gIGFkZE5vdGlmaWNhdGlvbixcbiAgQWN0aW9uVHlwZXMsXG4gIENyZWF0ZU5ld0RhdGFzZXRTdWNjZXNzUGF5bG9hZCxcbiAgTWFwU3RhdGVBY3Rpb25zLFxuICBSZWNlaXZlTWFwQ29uZmlnUGF5bG9hZCxcbiAgVmlzU3RhdGVBY3Rpb25zLFxuICBhcHBseUxheWVyQ29uZmlnLFxuICBjcmVhdGVOZXdEYXRhc2V0U3VjY2VzcyxcbiAgbGF5ZXJDb25maWdDaGFuZ2UsXG4gIGxheWVyVHlwZUNoYW5nZSxcbiAgbGF5ZXJWaXNDb25maWdDaGFuZ2UsXG4gIGxheWVyVmlzdWFsQ2hhbm5lbENvbmZpZ0NoYW5nZSxcbiAgbG9hZEZpbGVTdGVwU3VjY2VzcyxcbiAgbG9hZEZpbGVzRXJyLFxuICBsb2FkRmlsZXNTdWNjZXNzLFxuICBsb2FkTmV4dEZpbGUsXG4gIG5leHRGaWxlQmF0Y2gsXG4gIHNldEZpbHRlcixcbiAgcHJvY2Vzc0ZpbGVDb250ZW50LFxuICBmaXRCb3VuZHMgYXMgZml0TWFwQm91bmRzLFxuICB0b2dnbGVMYXllckZvck1hcCxcbiAgYXBwbHlGaWx0ZXJDb25maWcsXG4gIFNldExvYWRpbmdJbmRpY2F0b3JQYXlsb2FkXG59IGZyb20gJ0BrZXBsZXIuZ2wvYWN0aW9ucyc7XG5cbi8vIFV0aWxzXG5pbXBvcnQge1xuICBGSUxURVJfVVBEQVRFUl9QUk9QUyxcbiAgYWRkTmV3TGF5ZXJzVG9TcGxpdE1hcCxcbiAgc25hcFRvTWFya3MsXG4gIGFwcGx5RmlsdGVyRmllbGROYW1lLFxuICBhcHBseUZpbHRlcnNUb0RhdGFzZXRzLFxuICBhcnJheUluc2VydCxcbiAgY29tcHV0ZVNwbGl0TWFwTGF5ZXJzLFxuICBhZGp1c3RWYWx1ZVRvRmlsdGVyRG9tYWluLFxuICBlcnJvck5vdGlmaWNhdGlvbixcbiAgZmVhdHVyZVRvRmlsdGVyVmFsdWUsXG4gIGZpbHRlckRhdGFzZXRDUFUsXG4gIGdlbmVyYXRlUG9seWdvbkZpbHRlcixcbiAgZ2V0RGVmYXVsdEZpbHRlcixcbiAgZ2V0RmlsdGVySWRJbkZlYXR1cmUsXG4gIGdldFRpbWVXaWRnZXRUaXRsZUZvcm1hdHRlcixcbiAgaXNJblJhbmdlLFxuICBpc09iamVjdCxcbiAgaXNQbGFpbk9iamVjdCxcbiAgaXNSZ2JDb2xvcixcbiAgcGFyc2VGaWVsZFZhbHVlLFxuICByZW1vdmVMYXllckZyb21TcGxpdE1hcHMsXG4gIHNldCxcbiAgdXBkYXRlRmlsdGVyUGxvdCxcbiAgcmVtb3ZlRmlsdGVyUGxvdCxcbiAgaXNMYXllckFuaW1hdGFibGUsXG4gIGlzU2lkZUZpbHRlcixcbiAgZ2V0QXBwbGljYXRpb25Db25maWdcbn0gZnJvbSAnQGtlcGxlci5nbC91dGlscyc7XG5pbXBvcnQge2dlbmVyYXRlSGFzaElkLCB0b0FycmF5fSBmcm9tICdAa2VwbGVyLmdsL2NvbW1vbi11dGlscyc7XG4vLyBNZXJnZXJzXG5pbXBvcnQge1xuICBBTklNQVRJT05fV0lORE9XLFxuICBCQVNFX1NQRUVELFxuICBDT01QQVJFX1RZUEVTLFxuICBERUZBVUxUX1RFWFRfTEFCRUwsXG4gIEVESVRPUl9NT0RFUyxcbiAgRklMVEVSX1RZUEVTLFxuICBGSUxURVJfVklFV19UWVBFUyxcbiAgRlBTLFxuICBMSUdIVF9BTkRfU0hBRE9XX0VGRkVDVCxcbiAgTUFYX0RFRkFVTFRfVE9PTFRJUFMsXG4gIFBMT1RfVFlQRVMsXG4gIFNPUlRfT1JERVIsXG4gIFNZTkNfVElNRUxJTkVfTU9ERVMsXG4gIENIQU5ORUxfU0NBTEVTLFxuICBTQ0FMRV9UWVBFU1xufSBmcm9tICdAa2VwbGVyLmdsL2NvbnN0YW50cyc7XG5pbXBvcnQge0xBWUVSX0lEX0xFTkdUSCwgTGF5ZXIsIExheWVyQ2xhc3Nlc30gZnJvbSAnQGtlcGxlci5nbC9sYXllcnMnO1xuaW1wb3J0IHtcbiAgYXBwbHlfLFxuICBjb21wb3NlXyxcbiAgZmlsdGVyT3V0QnlJZCxcbiAgbWVyZ2VfLFxuICBwYXlsb2FkXyxcbiAgcGlja18sXG4gIHJlbW92ZUVsZW1lbnRBdEluZGV4LFxuICBzd2FwX1xufSBmcm9tICcuL2NvbXBvc2VyLWhlbHBlcnMnO1xuaW1wb3J0IHtpc1ZhbGlkTWVyZ2VyLCBtZXJnZVN0YXRlRnJvbU1lcmdlcnN9IGZyb20gJy4vbWVyZ2VyLWhhbmRsZXInO1xuaW1wb3J0IHtcbiAgVklTX1NUQVRFX01FUkdFUlMsXG4gIGNyZWF0ZUxheWVyRnJvbUNvbmZpZyxcbiAgcGFyc2VMYXllckNvbmZpZyxcbiAgc2VyaWFsaXplRmlsdGVyLFxuICBzZXJpYWxpemVMYXllcixcbiAgc2VyaWFsaXplVmlzU3RhdGUsXG4gIHZhbGlkYXRlTGF5ZXJXaXRoRGF0YVxufSBmcm9tICcuL3Zpcy1zdGF0ZS1tZXJnZXInO1xuXG5pbXBvcnQgS2VwbGVyR0xTY2hlbWEsIHtNZXJnZXIsIFBvc3RNZXJnZXJQYXlsb2FkLCBWaXNTdGF0ZX0gZnJvbSAnQGtlcGxlci5nbC9zY2hlbWFzJztcblxuaW1wb3J0IHtcbiAgRmlsdGVyLFxuICBJbnRlcmFjdGlvbkNvbmZpZyxcbiAgQW5pbWF0aW9uQ29uZmlnLFxuICBGaWx0ZXJBbmltYXRpb25Db25maWcsXG4gIEVkaXRvcixcbiAgRmllbGQsXG4gIFRpbWVSYW5nZUZpbHRlclxufSBmcm9tICdAa2VwbGVyLmdsL3R5cGVzJztcbmltcG9ydCB7TG9hZGVyfSBmcm9tICdAbG9hZGVycy5nbC9sb2FkZXItdXRpbHMnO1xuXG5pbXBvcnQge1xuICBEYXRhc2V0cyxcbiAgYXNzaWduR3B1Q2hhbm5lbCxcbiAgY29weVRhYmxlQW5kVXBkYXRlLFxuICBjcmVhdGVOZXdEYXRhRW50cnksXG4gIHBpblRhYmxlQ29sdW1ucyxcbiAgc2V0RmlsdGVyR3B1TW9kZSxcbiAgc29ydERhdGFzZXRCeUNvbHVtblxufSBmcm9tICdAa2VwbGVyLmdsL3RhYmxlJztcbmltcG9ydCB7ZmluZEZpZWxkc1RvU2hvd30gZnJvbSAnLi9pbnRlcmFjdGlvbi11dGlscyc7XG5pbXBvcnQge2NhbGN1bGF0ZUxheWVyRGF0YSwgZmluZERlZmF1bHRMYXllciwgZ2V0TGF5ZXJPcmRlckZyb21MYXllcnN9IGZyb20gJy4vbGF5ZXItdXRpbHMnO1xuaW1wb3J0IHtnZXRQcm9wVmFsdWVUb01lcmdlciwgaGFzUHJvcHNUb01lcmdlfSBmcm9tICcuL21lcmdlci1oYW5kbGVyJztcbmltcG9ydCB7bWVyZ2VEYXRhc2V0c0J5T3JkZXJ9IGZyb20gJy4vdmlzLXN0YXRlLW1lcmdlcic7XG5pbXBvcnQge1xuICBmaXhFZmZlY3RPcmRlcixcbiAgZ2V0QW5pbWF0YWJsZVZpc2libGVMYXllcnMsXG4gIGdldEludGVydmFsQmFzZWRBbmltYXRpb25MYXllcnMsXG4gIG1lcmdlVGltZURvbWFpbnMsXG4gIGFkanVzdFZhbHVlVG9BbmltYXRpb25XaW5kb3csXG4gIHVwZGF0ZVRpbWVGaWx0ZXJQbG90VHlwZSxcbiAgZ2V0RGVmYXVsdFRpbWVGb3JtYXQsXG4gIExheWVyVG9GaWx0ZXJUaW1lSW50ZXJ2YWwsXG4gIFRJTUVfSU5URVJWQUxTX09SREVSRUQsXG4gIG1lcmdlRmlsdGVyRG9tYWluLFxuICBpbml0Q3VzdG9tUGFsZXR0ZUJ5Q3VzdG9tU2NhbGVcbn0gZnJvbSAnQGtlcGxlci5nbC91dGlscyc7XG5pbXBvcnQge2NyZWF0ZUVmZmVjdH0gZnJvbSAnQGtlcGxlci5nbC9lZmZlY3RzJztcbmltcG9ydCB7UGF5bG9hZEFjdGlvbn0gZnJvbSAnQHJlZHV4anMvdG9vbGtpdCc7XG5cbmltcG9ydCB7ZmluZE1hcEJvdW5kc30gZnJvbSAnLi9kYXRhLXV0aWxzJztcblxuLy8gcmVhY3QtcGFsbVxuLy8gZGlzYWJsZSBjYXB0dXJlIGV4Y2VwdGlvbiBmb3IgcmVhY3QtcGFsbSBjYWxsIHRvIHdpdGhUYXNrXG5kaXNhYmxlU3RhY2tDYXB0dXJpbmcoKTtcblxuLyoqXG4gKiBVcGRhdGVycyBmb3IgYHZpc1N0YXRlYCByZWR1Y2VyLiBDYW4gYmUgdXNlZCBpbiB5b3VyIHJvb3QgcmVkdWNlciB0byBkaXJlY3RseSBtb2RpZnkga2VwbGVyLmdsJ3Mgc3RhdGUuXG4gKiBSZWFkIG1vcmUgYWJvdXQgW1VzaW5nIHVwZGF0ZXJzXSguLi9hZHZhbmNlZC11c2FnZS91c2luZy11cGRhdGVycy5tZClcbiAqXG4gKiBAcHVibGljXG4gKiBAZXhhbXBsZVxuICpcbiAqIGltcG9ydCBrZXBsZXJHbFJlZHVjZXIsIHt2aXNTdGF0ZVVwZGF0ZXJzfSBmcm9tICdAa2VwbGVyLmdsL3JlZHVjZXJzJztcbiAqIC8vIFJvb3QgUmVkdWNlclxuICogY29uc3QgcmVkdWNlcnMgPSBjb21iaW5lUmVkdWNlcnMoe1xuICogIGtlcGxlckdsOiBrZXBsZXJHbFJlZHVjZXIsXG4gKiAgYXBwOiBhcHBSZWR1Y2VyXG4gKiB9KTtcbiAqXG4gKiBjb25zdCBjb21wb3NlZFJlZHVjZXIgPSAoc3RhdGUsIGFjdGlvbikgPT4ge1xuICogIHN3aXRjaCAoYWN0aW9uLnR5cGUpIHtcbiAqICAgIGNhc2UgJ0NMSUNLX0JVVFRPTic6XG4gKiAgICAgIHJldHVybiB7XG4gKiAgICAgICAgLi4uc3RhdGUsXG4gKiAgICAgICAga2VwbGVyR2w6IHtcbiAqICAgICAgICAgIC4uLnN0YXRlLmtlcGxlckdsLFxuICogICAgICAgICAgZm9vOiB7XG4gKiAgICAgICAgICAgICAuLi5zdGF0ZS5rZXBsZXJHbC5mb28sXG4gKiAgICAgICAgICAgICB2aXNTdGF0ZTogdmlzU3RhdGVVcGRhdGVycy5lbmxhcmdlRmlsdGVyVXBkYXRlcihcbiAqICAgICAgICAgICAgICAgc3RhdGUua2VwbGVyR2wuZm9vLnZpc1N0YXRlLFxuICogICAgICAgICAgICAgICB7aWR4OiAwfVxuICogICAgICAgICAgICAgKVxuICogICAgICAgICAgfVxuICogICAgICAgIH1cbiAqICAgICAgfTtcbiAqICB9XG4gKiAgcmV0dXJuIHJlZHVjZXJzKHN0YXRlLCBhY3Rpb24pO1xuICogfTtcbiAqXG4gKiBleHBvcnQgZGVmYXVsdCBjb21wb3NlZFJlZHVjZXI7XG4gKi9cbi8qIGVzbGludC1kaXNhYmxlIEB0eXBlc2NyaXB0LWVzbGludC9uby11bnVzZWQtdmFycyAqL1xuLy8gQHRzLWlnbm9yZVxuY29uc3QgdmlzU3RhdGVVcGRhdGVycyA9IG51bGw7XG4vKiBlc2xpbnQtZW5hYmxlIEB0eXBlc2NyaXB0LWVzbGludC9uby11bnVzZWQtdmFycyAqL1xuXG5leHBvcnQgY29uc3QgZGVmYXVsdEludGVyYWN0aW9uQ29uZmlnOiBJbnRlcmFjdGlvbkNvbmZpZyA9IHtcbiAgdG9vbHRpcDoge1xuICAgIGlkOiAndG9vbHRpcCcsXG4gICAgbGFiZWw6ICdpbnRlcmFjdGlvbnMudG9vbHRpcCcsXG4gICAgZW5hYmxlZDogdHJ1ZSxcbiAgICBjb25maWc6IHtcbiAgICAgIGZpZWxkc1RvU2hvdzoge30sXG4gICAgICBjb21wYXJlTW9kZTogZmFsc2UsXG4gICAgICBjb21wYXJlVHlwZTogQ09NUEFSRV9UWVBFUy5BQlNPTFVURVxuICAgIH1cbiAgfSxcbiAgZ2VvY29kZXI6IHtcbiAgICBpZDogJ2dlb2NvZGVyJyxcbiAgICBsYWJlbDogJ2ludGVyYWN0aW9ucy5nZW9jb2RlcicsXG4gICAgZW5hYmxlZDogZmFsc2UsXG4gICAgcG9zaXRpb246IG51bGxcbiAgfSxcbiAgYnJ1c2g6IHtcbiAgICBpZDogJ2JydXNoJyxcbiAgICBsYWJlbDogJ2ludGVyYWN0aW9ucy5icnVzaCcsXG4gICAgZW5hYmxlZDogZmFsc2UsXG4gICAgY29uZmlnOiB7XG4gICAgICAvLyBzaXplIGlzIGluIGttXG4gICAgICBzaXplOiAwLjVcbiAgICB9XG4gIH0sXG4gIGNvb3JkaW5hdGU6IHtcbiAgICBpZDogJ2Nvb3JkaW5hdGUnLFxuICAgIGxhYmVsOiAnaW50ZXJhY3Rpb25zLmNvb3JkaW5hdGUnLFxuICAgIGVuYWJsZWQ6IGZhbHNlLFxuICAgIHBvc2l0aW9uOiBudWxsXG4gIH1cbn07XG5cbmV4cG9ydCBjb25zdCBERUZBVUxUX0FOSU1BVElPTl9DT05GSUc6IEFuaW1hdGlvbkNvbmZpZyA9IHtcbiAgZG9tYWluOiBudWxsLFxuICBjdXJyZW50VGltZTogbnVsbCxcbiAgc3BlZWQ6IDEsXG4gIGlzQW5pbWF0aW5nOiBmYWxzZSxcbiAgdGltZVN0ZXBzOiBudWxsLFxuICB0aW1lRm9ybWF0OiBudWxsLFxuICB0aW1lem9uZTogbnVsbCxcbiAgZGVmYXVsdFRpbWVGb3JtYXQ6IG51bGwsXG4gIGhpZGVDb250cm9sOiBmYWxzZSxcbiAgZHVyYXRpb246IG51bGxcbn07XG5cbmV4cG9ydCBjb25zdCBERUZBVUxUX0VESVRPUjogRWRpdG9yID0ge1xuICBtb2RlOiBFRElUT1JfTU9ERVMuRFJBV19QT0xZR09OLFxuICBmZWF0dXJlczogW10sXG4gIHNlbGVjdGVkRmVhdHVyZTogbnVsbCxcbiAgdmlzaWJsZTogdHJ1ZVxufTtcblxuLyoqXG4gKiBEZWZhdWx0IGluaXRpYWwgYHZpc1N0YXRlYFxuICogQG1lbWJlcm9mIHZpc1N0YXRlVXBkYXRlcnNcbiAqIEBjb25zdGFudFxuICogQHB1YmxpY1xuICovXG5leHBvcnQgY29uc3QgSU5JVElBTF9WSVNfU1RBVEU6IFZpc1N0YXRlID0ge1xuICAvLyBtYXAgaW5mb1xuICBtYXBJbmZvOiB7XG4gICAgdGl0bGU6ICcnLFxuICAgIGRlc2NyaXB0aW9uOiAnJ1xuICB9LFxuICAvLyBsYXllcnNcbiAgbGF5ZXJzOiBbXSxcbiAgbGF5ZXJEYXRhOiBbXSxcbiAgbGF5ZXJUb0JlTWVyZ2VkOiBbXSxcbiAgbGF5ZXJPcmRlcjogW10sXG5cbiAgLy8gZmlsdGVyc1xuICBmaWx0ZXJzOiBbXSxcbiAgZmlsdGVyVG9CZU1lcmdlZDogW10sXG5cbiAgLy8gYSBjb2xsZWN0aW9uIG9mIG11bHRpcGxlIGRhdGFzZXRcbiAgZGF0YXNldHM6IHt9LFxuICBlZGl0aW5nRGF0YXNldDogdW5kZWZpbmVkLFxuXG4gIC8vIGVmZmVjdHNcbiAgZWZmZWN0czogW10sXG4gIGVmZmVjdE9yZGVyOiBbXSxcblxuICBpbnRlcmFjdGlvbkNvbmZpZzogZGVmYXVsdEludGVyYWN0aW9uQ29uZmlnLFxuICBpbnRlcmFjdGlvblRvQmVNZXJnZWQ6IHt9LFxuXG4gIGxheWVyQmxlbmRpbmc6ICdub3JtYWwnLFxuICBvdmVybGF5QmxlbmRpbmc6ICdub3JtYWwnLFxuICBob3ZlckluZm86IHVuZGVmaW5lZCxcbiAgY2xpY2tlZDogdW5kZWZpbmVkLFxuICBtb3VzZVBvczoge30sXG4gIG1heERlZmF1bHRUb29sdGlwczogTUFYX0RFRkFVTFRfVE9PTFRJUFMsXG5cbiAgLy8gdGhpcyBpcyB1c2VkIHdoZW4gdXNlciBzcGxpdCBtYXBzXG4gIHNwbGl0TWFwczogW1xuICAgIC8vIHRoaXMgd2lsbCBjb250YWluIGEgbGlzdCBvZiBvYmplY3RzIHRvXG4gICAgLy8gZGVzY3JpYmUgdGhlIHN0YXRlIG9mIGxheWVyIGF2YWlsYWJpbGl0eSBhbmQgdmlzaWJpbGl0eSBmb3IgZWFjaCBtYXBcbiAgICAvLyBbXG4gICAgLy8gICB7XG4gICAgLy8gICAgICBsYXllcnM6IHtsYXllcl9pZDogdHJ1ZSB8IGZhbHNlfVxuICAgIC8vICAgfVxuICAgIC8vIF1cbiAgXSxcbiAgc3BsaXRNYXBzVG9CZU1lcmdlZDogW10sXG4gIGlzTWVyZ2luZ0RhdGFzZXRzOiB7fSxcbiAgLy8gZGVmYXVsdHMgbGF5ZXIgY2xhc3Nlc1xuICBsYXllckNsYXNzZXM6IExheWVyQ2xhc3NlcyxcblxuICAvLyBkZWZhdWx0IGFuaW1hdGlvblxuICAvLyB0aW1lIGluIHVuaXggdGltZXN0YW1wIChtaWxsaXNlY29uZHMpICh0aGUgbnVtYmVyIG9mIHNlY29uZHMgc2luY2UgdGhlIFVuaXggRXBvY2gpXG4gIGFuaW1hdGlvbkNvbmZpZzogREVGQVVMVF9BTklNQVRJT05fQ09ORklHLFxuXG4gIGVkaXRvcjogREVGQVVMVF9FRElUT1IsXG5cbiAgZmlsZUxvYWRpbmc6IGZhbHNlLFxuICBmaWxlTG9hZGluZ1Byb2dyZXNzOiB7fSxcbiAgLy8gZm9yIGxvYWRpbmcgZGF0YXNldHNcbiAgbG9hZGluZ0luZGljYXRvclZhbHVlOiAwLFxuXG4gIGxvYWRlcnM6IFtdLFxuICBsb2FkT3B0aW9uczoge30sXG5cbiAgLy8gdmlzU3RhdGVNZXJnZXJzXG4gIG1lcmdlcnM6IFZJU19TVEFURV9NRVJHRVJTLFxuXG4gIC8vIGtlcGxlciBzY2hlbWFzXG4gIHNjaGVtYTogS2VwbGVyR0xTY2hlbWFcbn07XG5cbmV4cG9ydCBjb25zdCBBQ1RJT05fVEFTS19GSVRfQk9VTkRTID0gVGFzay5mcm9tQ2FsbGJhY2soXG4gIChfLCBjYikgPT4gY2IoKSxcblxuICAnQUNUSU9OX1RBU0tfRklUX0JPVU5EUydcbik7XG5cbmV4cG9ydCBjb25zdCBBQ1RJT05fVEFTS19BRERfTk9USUZJQ0FUSU9OID0gVGFzay5mcm9tQ2FsbGJhY2soXG4gIChfLCBjYikgPT4gY2IoKSxcblxuICAnQUNUSU9OX1RBU0tfQUREX05PVElGSUNBVElPTidcbik7XG5cbnR5cGUgVXBkYXRlU3RhdGVXaXRoTGF5ZXJBbmREYXRhVHlwZSA9IHtcbiAgbGF5ZXJzOiBMYXllcltdO1xuICBsYXllckRhdGE6IGFueVtdO1xufTtcblxuLyoqXG4gKiBVcGRhdGUgc3RhdGUgd2l0aCB1cGRhdGVkIGxheWVyIGFuZCBsYXllckRhdGFcbiAqXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiB1cGRhdGVTdGF0ZVdpdGhMYXllckFuZERhdGE8UyBleHRlbmRzIFVwZGF0ZVN0YXRlV2l0aExheWVyQW5kRGF0YVR5cGU+KFxuICBzdGF0ZTogUyxcbiAge2xheWVyRGF0YSwgbGF5ZXIsIGlkeH06IHtsYXllckRhdGE/OiBhbnk7IGxheWVyOiBMYXllcjsgaWR4OiBudW1iZXJ9XG4pOiBTIHtcbiAgcmV0dXJuIHtcbiAgICAuLi5zdGF0ZSxcbiAgICBsYXllcnM6IHN0YXRlLmxheWVycy5tYXAoKGx5ciwgaSkgPT4gKGkgPT09IGlkeCA/IGxheWVyIDogbHlyKSksXG4gICAgbGF5ZXJEYXRhOiBsYXllckRhdGFcbiAgICAgID8gc3RhdGUubGF5ZXJEYXRhLm1hcCgoZCwgaSkgPT4gKGkgPT09IGlkeCA/IGxheWVyRGF0YSA6IGQpKVxuICAgICAgOiBzdGF0ZS5sYXllckRhdGFcbiAgfTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHVwZGF0ZVN0YXRlT25MYXllclZpc2liaWxpdHlDaGFuZ2U8UyBleHRlbmRzIFZpc1N0YXRlPihzdGF0ZTogUywgbGF5ZXI6IExheWVyKTogUyB7XG4gIGxldCBuZXdTdGF0ZSA9IHN0YXRlO1xuICBpZiAoc3RhdGUuc3BsaXRNYXBzLmxlbmd0aCkge1xuICAgIG5ld1N0YXRlID0ge1xuICAgICAgLi4uc3RhdGUsXG4gICAgICBzcGxpdE1hcHM6IGxheWVyLmNvbmZpZy5pc1Zpc2libGVcbiAgICAgICAgPyBhZGROZXdMYXllcnNUb1NwbGl0TWFwKHN0YXRlLnNwbGl0TWFwcywgbGF5ZXIpXG4gICAgICAgIDogcmVtb3ZlTGF5ZXJGcm9tU3BsaXRNYXBzKHN0YXRlLnNwbGl0TWFwcywgbGF5ZXIpXG4gICAgfTtcbiAgfVxuXG4gIGlmIChsYXllci5jb25maWcuYW5pbWF0aW9uLmVuYWJsZWQpIHtcbiAgICBuZXdTdGF0ZSA9IHVwZGF0ZUFuaW1hdGlvbkRvbWFpbihuZXdTdGF0ZSk7XG4gIH1cblxuICByZXR1cm4gbmV3U3RhdGU7XG59XG5cbi8qKlxuICogQ29tcGFyZXMgdHdvIG9iamVjdHMgKG9yIGFycmF5cykgYW5kIHJldHVybnMgYSBuZXcgb2JqZWN0IHdpdGggb25seSB0aGVcbiAqIHByb3BlcnRpZXMgdGhhdCBoYXZlIGNoYW5nZWQgYmV0d2VlbiB0aGUgdHdvIG9iamVjdHMuXG4gKi9cbmZ1bmN0aW9uIHBpY2tDaGFuZ2VkUHJvcHM8VD4ocHJldjogVCwgbmV4dDogVCk6IFBhcnRpYWw8VD4ge1xuICBjb25zdCBjaGFuZ2VkUHJvcHM6IFBhcnRpYWw8VD4gPSB7fTtcbiAgY29uc3QgcGlja1Byb3BzT2YgPSBvYmogPT4ge1xuICAgIE9iamVjdC5rZXlzKG9iaikuZm9yRWFjaChrZXkgPT4ge1xuICAgICAgaWYgKFxuICAgICAgICAhT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKGNoYW5nZWRQcm9wcywga2V5KSAmJlxuICAgICAgICAhaXNFcXVhbChwcmV2W2tleV0sIG5leHRba2V5XSlcbiAgICAgICkge1xuICAgICAgICBjaGFuZ2VkUHJvcHNba2V5XSA9IG5leHRba2V5XTtcbiAgICAgIH1cbiAgICB9KTtcbiAgfTtcbiAgcGlja1Byb3BzT2YocHJldik7XG4gIHBpY2tQcm9wc09mKG5leHQpO1xuICByZXR1cm4gY2hhbmdlZFByb3BzO1xufVxuXG5jb25zdCBWSVNVQUxfQ0hBTk5FTF9QUk9QX1RZUEVTID0gWydmaWVsZCcsICdzY2FsZScsICdkb21haW4nLCAnYWdncmVnYXRpb24nXTtcblxuLyoqXG4gKiBBcHBseSBsYXllciBjb25maWdcbiAqIEBtZW1iZXJvZiB2aXNTdGF0ZVVwZGF0ZXJzXG4gKiBAcmV0dXJucyBuZXh0U3RhdGVcbiAqL1xuLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIGNvbXBsZXhpdHksIG1heC1zdGF0ZW1lbnRzXG5leHBvcnQgZnVuY3Rpb24gYXBwbHlMYXllckNvbmZpZ1VwZGF0ZXIoXG4gIHN0YXRlOiBWaXNTdGF0ZSxcbiAgYWN0aW9uOiBWaXNTdGF0ZUFjdGlvbnMuQXBwbHlMYXllckNvbmZpZ1VwZGF0ZXJBY3Rpb25cbik6IFZpc1N0YXRlIHtcbiAgY29uc3Qge29sZExheWVySWQsIG5ld0xheWVyQ29uZmlnLCBsYXllckluZGV4fSA9IGFjdGlvbjtcbiAgY29uc3QgbmV3UGFyc2VkTGF5ZXIgPVxuICAgIC8vIHdpbGwgbW92ZSB2aXN1YWxDaGFubmVscyB0byB0aGUgY29uZmlnIHByb3BcbiAgICBwYXJzZUxheWVyQ29uZmlnKHN0YXRlLnNjaGVtYSwgbmV3TGF5ZXJDb25maWcpO1xuICBjb25zdCBvbGRMYXllciA9IHN0YXRlLmxheWVycy5maW5kKGwgPT4gbC5pZCA9PT0gb2xkTGF5ZXJJZCk7XG4gIGlmICghb2xkTGF5ZXIgfHwgIW5ld1BhcnNlZExheWVyKSB7XG4gICAgcmV0dXJuIHN0YXRlO1xuICB9XG4gIGlmIChsYXllckluZGV4ICE9PSBudWxsICYmIGxheWVySW5kZXggIT09IHVuZGVmaW5lZCAmJiBzdGF0ZS5sYXllcnNbbGF5ZXJJbmRleF0gIT09IG9sZExheWVyKSB7XG4gICAgLy8gbGF5ZXJJbmRleCBpcyBwcm92aWRlZCwgYnV0IGl0IGRvZXNuJ3QgbWF0Y2ggdGhlIG9sZExheWVyXG4gICAgcmV0dXJuIHN0YXRlO1xuICB9XG4gIGNvbnN0IGRhdGFzZXQgPSBzdGF0ZS5kYXRhc2V0c1tuZXdQYXJzZWRMYXllci5jb25maWcuZGF0YUlkXTtcbiAgaWYgKCFkYXRhc2V0KSB7XG4gICAgcmV0dXJuIHN0YXRlO1xuICB9XG4gIC8vIE1ha2Ugc3VyZSB0aGUgbGF5ZXIgaXMgdmFsaWQgYW5kIGNvbnZlcnQgaXQgdG8gTGF5ZXJcbiAgY29uc3QgbmV3TGF5ZXIgPSB2YWxpZGF0ZUxheWVyV2l0aERhdGEoZGF0YXNldCwgbmV3UGFyc2VkTGF5ZXIsIHN0YXRlLmxheWVyQ2xhc3Nlcyk7XG4gIGlmICghbmV3TGF5ZXIpIHtcbiAgICByZXR1cm4gc3RhdGU7XG4gIH1cblxuICBsZXQgbmV4dFN0YXRlID0gc3RhdGU7XG5cbiAgaWYgKG5ld0xheWVyLnR5cGUgJiYgbmV3TGF5ZXIudHlwZSAhPT0gb2xkTGF5ZXIudHlwZSkge1xuICAgIGNvbnN0IG9sZExheWVySW5kZXggPSBzdGF0ZS5sYXllcnMuZmluZEluZGV4KGwgPT4gbC5pZCA9PT0gb2xkTGF5ZXJJZCk7XG4gICAgaWYgKG9sZExheWVySW5kZXggPj0gMCkge1xuICAgICAgbmV4dFN0YXRlID0gbGF5ZXJUeXBlQ2hhbmdlVXBkYXRlcihuZXh0U3RhdGUsIGxheWVyVHlwZUNoYW5nZShvbGRMYXllciwgbmV3TGF5ZXIudHlwZSkpO1xuICAgICAgLy8gbGF5ZXJUeXBlQ2hhbmdlVXBkYXRlciBjaGFuZ2VzIHRoZSBpZCBvZiB0aGUgbGF5ZXIsIHNvIHdlIG5lZWQgdG8gb2J0YWluIHRoZSBuZXcgaWRcbiAgICAgIC8vIGJ1dCBmaXJzdCBtYWtlIHN1cmUgdGhhdCB0aGUgbGF5ZXIgd2FzIG5vdCByZW1vdmVkXG4gICAgICBpZiAobmV4dFN0YXRlLmxheWVycy5sZW5ndGggPT09IHN0YXRlLmxheWVycy5sZW5ndGgpIHtcbiAgICAgICAgY29uc3QgbmV3TGF5ZXJJZCA9IG5leHRTdGF0ZS5sYXllcnNbb2xkTGF5ZXJJbmRleF0uaWQ7XG4gICAgICAgIG5leHRTdGF0ZSA9IGFwcGx5TGF5ZXJDb25maWdVcGRhdGVyKFxuICAgICAgICAgIG5leHRTdGF0ZSxcbiAgICAgICAgICBhcHBseUxheWVyQ29uZmlnKG5ld0xheWVySWQsIHsuLi5uZXdMYXllckNvbmZpZywgaWQ6IG5ld0xheWVySWR9KVxuICAgICAgICApO1xuICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4gbmV4dFN0YXRlO1xuICB9XG5cbiAgLy8gc2VyaWFsaXplTGF5ZXIoKSBtaWdodCByZXR1cm4gbnVsbCBpZiB0aGUgb2xkIGxheWVyIGlzIG5vdCB2YWxpZCxcbiAgLy8gd2Ugc2hvdWxkIHN0aWxsIGFwcGx5IHRoZSBjaGFuZ2VzIGluIHRoYXQgY2FzZVxuICBjb25zdCBzZXJpYWxpemVkT2xkTGF5ZXIgPSBzZXJpYWxpemVMYXllcihvbGRMYXllciwgc3RhdGUuc2NoZW1hKSA/PyB7Y29uZmlnOiB7fX07XG4gIGNvbnN0IHNlcmlhbGl6ZWROZXdMYXllciA9IHNlcmlhbGl6ZUxheWVyKG5ld0xheWVyLCBzdGF0ZS5zY2hlbWEpO1xuICBpZiAoIXNlcmlhbGl6ZWROZXdMYXllcikge1xuICAgIHJldHVybiBzdGF0ZTtcbiAgfVxuICBpZiAoIWlzRXF1YWwoc2VyaWFsaXplZE9sZExheWVyLCBzZXJpYWxpemVkTmV3TGF5ZXIpKSB7XG4gICAgY29uc3QgY2hhbmdlZCA9IHBpY2tDaGFuZ2VkUHJvcHMoc2VyaWFsaXplZE9sZExheWVyLmNvbmZpZywgc2VyaWFsaXplZE5ld0xheWVyLmNvbmZpZyk7XG5cbiAgICBpZiAoJ3Zpc0NvbmZpZycgaW4gY2hhbmdlZCkge1xuICAgICAgaWYgKGNoYW5nZWQudmlzQ29uZmlnKSB7XG4gICAgICAgIG5leHRTdGF0ZSA9IGxheWVyVmlzQ29uZmlnQ2hhbmdlVXBkYXRlcihcbiAgICAgICAgICBuZXh0U3RhdGUsXG4gICAgICAgICAgbGF5ZXJWaXNDb25maWdDaGFuZ2Uob2xkTGF5ZXIsIGNoYW5nZWQudmlzQ29uZmlnKVxuICAgICAgICApO1xuICAgICAgfVxuICAgICAgZGVsZXRlIGNoYW5nZWQudmlzQ29uZmlnO1xuICAgIH1cblxuICAgIE9iamVjdC5rZXlzKG9sZExheWVyLnZpc3VhbENoYW5uZWxzKS5mb3JFYWNoKGNoYW5uZWxOYW1lID0+IHtcbiAgICAgIGNvbnN0IGNoYW5uZWwgPSBvbGRMYXllci52aXN1YWxDaGFubmVsc1tjaGFubmVsTmFtZV07XG4gICAgICBjb25zdCBjaGFubmVsUHJvcE5hbWVzID0gVklTVUFMX0NIQU5ORUxfUFJPUF9UWVBFUy5tYXAocHJvcCA9PiBjaGFubmVsW3Byb3BdKTtcbiAgICAgIGlmIChjaGFubmVsUHJvcE5hbWVzLnNvbWUocHJvcCA9PiBwcm9wIGluIGNoYW5nZWQpKSB7XG4gICAgICAgIG5leHRTdGF0ZSA9IGxheWVyVmlzdWFsQ2hhbm5lbENoYW5nZVVwZGF0ZXIoXG4gICAgICAgICAgbmV4dFN0YXRlLFxuICAgICAgICAgIGxheWVyVmlzdWFsQ2hhbm5lbENvbmZpZ0NoYW5nZShcbiAgICAgICAgICAgIG9sZExheWVyLFxuICAgICAgICAgICAgcGljayhuZXdMYXllci5jb25maWcsIGNoYW5uZWxQcm9wTmFtZXMpLFxuICAgICAgICAgICAgY2hhbm5lbE5hbWVcbiAgICAgICAgICApXG4gICAgICAgICk7XG4gICAgICAgIGZvciAoY29uc3QgcHJvcCBvZiBjaGFubmVsUHJvcE5hbWVzKSB7XG4gICAgICAgICAgZGVsZXRlIGNoYW5nZWRbcHJvcF07XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9KTtcblxuICAgIGlmIChPYmplY3Qua2V5cyhjaGFuZ2VkKS5sZW5ndGggPiAwKSB7XG4gICAgICBuZXh0U3RhdGUgPSBsYXllckNvbmZpZ0NoYW5nZVVwZGF0ZXIoXG4gICAgICAgIG5leHRTdGF0ZSxcbiAgICAgICAgbGF5ZXJDb25maWdDaGFuZ2Uob2xkTGF5ZXIsIHBpY2sobmV3TGF5ZXIuY29uZmlnLCBPYmplY3Qua2V5cyhjaGFuZ2VkKSkpXG4gICAgICApO1xuICAgIH1cbiAgfVxuXG4gIHJldHVybiBuZXh0U3RhdGU7XG59XG5cbmZ1bmN0aW9uIHVwZGF0ZWxheWVyVmlzaWJpbHR5KHN0YXRlOiBWaXNTdGF0ZSwgbmV3TGF5ZXI6IExheWVyLCBpc1Zpc2libGU/OiBib29sZWFuKTogVmlzU3RhdGUge1xuICBsZXQgbmV3U3RhdGUgPSB1cGRhdGVTdGF0ZU9uTGF5ZXJWaXNpYmlsaXR5Q2hhbmdlKHN0YXRlLCBuZXdMYXllcik7XG4gIGNvbnN0IGZpbHRlckluZGV4ID0gZmlsdGVyU3luY2VkV2l0aFRpbWVsaW5lKHN0YXRlKTtcbiAgaWYgKGlzTGF5ZXJBbmltYXRhYmxlKG5ld0xheWVyKSAmJiBmaWx0ZXJJbmRleCAhPT0gLTEpIHtcbiAgICAvLyBpZiBsYXllciBpcyBnb2luZyB0byBiZSB2aXNpYmxlIHdlIHN5bmMgd2l0aCBmaWx0ZXIgb3RoZXJ3aXNlIHdlIG5lZWQgdG8gY2hlY2sgd2hldGhlciBvdGhlciBhbmltYXRhYmxlIGxheWVycyBleGlzdHMgYW5kIGFyZSB2aXNpYmxlXG4gICAgbmV3U3RhdGUgPSBzeW5jVGltZUZpbHRlcldpdGhMYXllclRpbWVsaW5lVXBkYXRlcihuZXdTdGF0ZSwge1xuICAgICAgaWR4OiBmaWx0ZXJJbmRleCxcbiAgICAgIGVuYWJsZTogaXNWaXNpYmxlID8gaXNWaXNpYmxlIDogZ2V0QW5pbWF0YWJsZVZpc2libGVMYXllcnMoc3RhdGUubGF5ZXJzKS5sZW5ndGggPiAwXG4gICAgfSk7XG4gIH1cbiAgcmV0dXJuIG5ld1N0YXRlO1xufVxuXG4vKipcbiAqIFVwZGF0ZSBsYXllciBiYXNlIGNvbmZpZzogZGF0YUlkLCBsYWJlbCwgY29sdW1uLCBpc1Zpc2libGVcbiAqIEBtZW1iZXJvZiB2aXNTdGF0ZVVwZGF0ZXJzXG4gKiBAcmV0dXJucyBuZXh0U3RhdGVcbiAqL1xuLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIGNvbXBsZXhpdHlcbmV4cG9ydCBmdW5jdGlvbiBsYXllckNvbmZpZ0NoYW5nZVVwZGF0ZXIoXG4gIHN0YXRlOiBWaXNTdGF0ZSxcbiAgYWN0aW9uOiBWaXNTdGF0ZUFjdGlvbnMuTGF5ZXJDb25maWdDaGFuZ2VVcGRhdGVyQWN0aW9uXG4pOiBWaXNTdGF0ZSB7XG4gIGNvbnN0IHtvbGRMYXllcn0gPSBhY3Rpb247XG4gIGNvbnN0IGlkeCA9IHN0YXRlLmxheWVycy5maW5kSW5kZXgobCA9PiBsLmlkID09PSBvbGRMYXllci5pZCk7XG4gIGNvbnN0IHByb3BzID0gT2JqZWN0LmtleXMoYWN0aW9uLm5ld0NvbmZpZyk7XG4gIGlmIChcbiAgICB0eXBlb2YgYWN0aW9uLm5ld0NvbmZpZy5kYXRhSWQgPT09ICdzdHJpbmcnICYmXG4gICAgYWN0aW9uLm5ld0NvbmZpZy5kYXRhSWQgIT09IG9sZExheWVyLmNvbmZpZy5kYXRhSWRcbiAgKSB7XG4gICAgY29uc3Qge2RhdGFJZCwgLi4ucmVzdENvbmZpZ30gPSBhY3Rpb24ubmV3Q29uZmlnO1xuICAgIGNvbnN0IHN0YXRlV2l0aERhdGFJZCA9IGxheWVyRGF0YUlkQ2hhbmdlVXBkYXRlcihzdGF0ZSwge1xuICAgICAgb2xkTGF5ZXIsXG4gICAgICBuZXdDb25maWc6IHtkYXRhSWR9XG4gICAgfSk7XG4gICAgY29uc3QgbmV4dExheWVyID0gc3RhdGVXaXRoRGF0YUlkLmxheWVycy5maW5kKGwgPT4gbC5pZCA9PT0gb2xkTGF5ZXIuaWQpO1xuICAgIHJldHVybiBuZXh0TGF5ZXIgJiYgT2JqZWN0LmtleXMocmVzdENvbmZpZykubGVuZ3RoXG4gICAgICA/IGxheWVyQ29uZmlnQ2hhbmdlVXBkYXRlcihzdGF0ZVdpdGhEYXRhSWQsIHtvbGRMYXllcjogbmV4dExheWVyLCBuZXdDb25maWc6IHJlc3RDb25maWd9KVxuICAgICAgOiBzdGF0ZVdpdGhEYXRhSWQ7XG4gIH1cblxuICBsZXQgbmV3TGF5ZXIgPSBvbGRMYXllci51cGRhdGVMYXllckNvbmZpZyhhY3Rpb24ubmV3Q29uZmlnKTtcblxuICBsZXQgbGF5ZXJEYXRhO1xuXG4gIGlmIChuZXdMYXllci5zaG91bGRDYWxjdWxhdGVMYXllckRhdGEocHJvcHMpKSB7XG4gICAgY29uc3Qgb2xkTGF5ZXJEYXRhID0gc3RhdGUubGF5ZXJEYXRhW2lkeF07XG5cbiAgICBjb25zdCB1cGRhdGVMYXllckRhdGFSZXN1bHQgPSBjYWxjdWxhdGVMYXllckRhdGEobmV3TGF5ZXIsIHN0YXRlLCBvbGRMYXllckRhdGEpO1xuICAgIG5ld0xheWVyID0gdXBkYXRlTGF5ZXJEYXRhUmVzdWx0LmxheWVyO1xuICAgIGxheWVyRGF0YSA9IHVwZGF0ZUxheWVyRGF0YVJlc3VsdC5sYXllckRhdGE7XG4gIH1cblxuICBsZXQgbmV3U3RhdGUgPSBzdGF0ZTtcbiAgaWYgKCdpc1Zpc2libGUnIGluIGFjdGlvbi5uZXdDb25maWcpIHtcbiAgICBuZXdTdGF0ZSA9IHVwZGF0ZWxheWVyVmlzaWJpbHR5KG5ld1N0YXRlLCBuZXdMYXllciwgYWN0aW9uLm5ld0NvbmZpZy5pc1Zpc2libGUpO1xuICB9XG5cbiAgaWYgKCdjb2x1bW5zJyBpbiBhY3Rpb24ubmV3Q29uZmlnICYmIG5ld0xheWVyLmNvbmZpZy5hbmltYXRpb24uZW5hYmxlZCkge1xuICAgIC8vIFRPRE86IFNoYW4sIG1ha2UgdGhlIGFuaW1hdGlvbiBjb25maWcgZnVuY3Rpb24gbW9yZSByb2J1c3RcbiAgICBuZXdTdGF0ZSA9IHVwZGF0ZUFuaW1hdGlvbkRvbWFpbihuZXdTdGF0ZSk7XG4gIH1cblxuICByZXR1cm4gdXBkYXRlU3RhdGVXaXRoTGF5ZXJBbmREYXRhKG5ld1N0YXRlLCB7XG4gICAgbGF5ZXI6IG5ld0xheWVyLFxuICAgIGxheWVyRGF0YSxcbiAgICBpZHhcbiAgfSk7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBsYXllckFuaW1hdGlvbkNoYW5nZVVwZGF0ZXI8UyBleHRlbmRzIFZpc1N0YXRlPihzdGF0ZTogUywgYWN0aW9uKTogUyB7XG4gIGNvbnN0IHtvbGRMYXllciwgcHJvcCwgdmFsdWV9ID0gYWN0aW9uO1xuICBjb25zdCBpZHggPSBzdGF0ZS5sYXllcnMuZmluZEluZGV4KGwgPT4gbC5pZCA9PT0gb2xkTGF5ZXIuaWQpO1xuXG4gIGNvbnN0IG5ld0xheWVyID0gb2xkTGF5ZXIudXBkYXRlTGF5ZXJDb25maWcoe1xuICAgIGFuaW1hdGlvbjoge1xuICAgICAgLi4ub2xkTGF5ZXIuY29uZmlnLmFuaW1hdGlvbixcbiAgICAgIFtwcm9wXTogdmFsdWVcbiAgICB9XG4gIH0pO1xuXG4gIGNvbnN0IHtsYXllckRhdGEsIGxheWVyfSA9IGNhbGN1bGF0ZUxheWVyRGF0YShuZXdMYXllciwgc3RhdGUsIHN0YXRlLmxheWVyRGF0YVtpZHhdKTtcblxuICByZXR1cm4gdXBkYXRlU3RhdGVXaXRoTGF5ZXJBbmREYXRhKHN0YXRlLCB7bGF5ZXJEYXRhLCBsYXllciwgaWR4fSk7XG59XG5cbi8qKlxuICogVXBkYXRlIGxheWVySWQsIGlzVmlzaWJsZSwgc3BsaXRNYXBJZFxuICogaGFuZGxlcyB0d28gY2FzZXM6XG4gKiAxKSB0b2dnbGUgdGhlIHZpc2liaWxpdHkgb2YgbG9jYWwgU3BsaXRNYXAgbGF5ZXIgKHZpc1N0YXRlLnNwbGl0TWFwLmxheWVycylcbiAqIDIpIHRvZ2dsZSB0aGUgdmlzaWJpbGl0eSBvZiBnbG9iYWwgbGF5ZXIgKHZpc1N0YXRlLmxheWVycylcblxuICogQG1lbWJlcm9mIHZpc1N0YXRlVXBkYXRlcnNcbiAqIEByZXR1cm5zIG5leHRTdGF0ZVxuICovXG5leHBvcnQgZnVuY3Rpb24gbGF5ZXJUb2dnbGVWaXNpYmlsaXR5VXBkYXRlcihcbiAgc3RhdGU6IFZpc1N0YXRlLFxuICBhY3Rpb246IFZpc1N0YXRlQWN0aW9ucy5MYXllclRvZ2dsZVZpc2liaWxpdHlVcGRhdGVyQWN0aW9uXG4pOiBWaXNTdGF0ZSB7XG4gIGNvbnN0IHtsYXllcklkLCBpc1Zpc2libGUsIHNwbGl0TWFwSWR9ID0gYWN0aW9uO1xuICBjb25zdCBsYXllciA9IHN0YXRlLmxheWVycy5maW5kKGQgPT4gZC5pZCA9PT0gbGF5ZXJJZCk7XG5cbiAgaWYgKCFsYXllcikge1xuICAgIHJldHVybiBzdGF0ZTtcbiAgfVxuXG4gIGxldCBuZXdTdGF0ZSA9IHN0YXRlO1xuXG4gIGlmIChzcGxpdE1hcElkKSB7XG4gICAgLy8gW2Nhc2UgMV06IHRvZ2dsZSBsb2NhbCBsYXllciB2aXNpYmlsaXR5IGZvciBlYWNoIFNwbGl0TWFwXG4gICAgY29uc3QgbWFwSW5kZXggPSBuZXdTdGF0ZS5zcGxpdE1hcHMuZmluZEluZGV4KHNtID0+IHNtLmlkID09PSBzcGxpdE1hcElkKTtcbiAgICBpZiAoaXNWaXNpYmxlKSB7XG4gICAgICAvLyAxKSBpZiB0aGUgbGF5ZXIgaXMgaW52aXNpYmxlIGdsb2JhbGx5XG4gICAgICAvLyAtPiBzZXQgZ2xvYmFsIHZpc2liaWxpdHkgdG8gdHJ1ZVxuICAgICAgbmV3U3RhdGUgPSBsYXllckNvbmZpZ0NoYW5nZVVwZGF0ZXIobmV3U3RhdGUsIGxheWVyQ29uZmlnQ2hhbmdlKGxheWVyLCB7aXNWaXNpYmxlOiB0cnVlfSkpO1xuXG4gICAgICAvLyAtPiBzZXQgbG9jYWwgdmlzaWJpbGl0eSB0byB0cnVlIGFuZCB0aGUgbG9jYWwgdmlzaWJpbGl0aWVzIG9mIGFsbCBvdGhlciBTcGxpdE1hcHMgdG8gZmFsc2VcbiAgICAgIHJldHVybiB7XG4gICAgICAgIC4uLm5ld1N0YXRlLFxuICAgICAgICBzcGxpdE1hcHM6IG5ld1N0YXRlLnNwbGl0TWFwcy5tYXAoc20gPT5cbiAgICAgICAgICBzbS5pZCAhPT0gc3BsaXRNYXBJZFxuICAgICAgICAgICAgPyB7XG4gICAgICAgICAgICAgICAgLi4uc20sXG4gICAgICAgICAgICAgICAgbGF5ZXJzOiB7XG4gICAgICAgICAgICAgICAgICAuLi5zbS5sYXllcnMsXG4gICAgICAgICAgICAgICAgICBbbGF5ZXJJZF06IGZhbHNlXG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICA6IHtcbiAgICAgICAgICAgICAgICAuLi5zbSxcbiAgICAgICAgICAgICAgICBsYXllcnM6IHtcbiAgICAgICAgICAgICAgICAgIC4uLnNtLmxheWVycyxcbiAgICAgICAgICAgICAgICAgIFtsYXllcklkXTogdHJ1ZVxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgfVxuICAgICAgICApXG4gICAgICB9O1xuICAgIH1cbiAgICAvLyAyKSBlbHNlIHdoZW4gdGhlIGxheWVyIGlzIHZpc2libGUgZ2xvYmFsbHlcbiAgICByZXR1cm4gdG9nZ2xlTGF5ZXJGb3JNYXBVcGRhdGVyKG5ld1N0YXRlLCB0b2dnbGVMYXllckZvck1hcChtYXBJbmRleCwgbGF5ZXJJZCkpO1xuICB9IGVsc2Uge1xuICAgIC8vIFtjYXNlIDJdOiB0b2dnbGUgZ2xvYmFsIGxheWVyIHZpc2liaWxpdHlcbiAgICBjb25zdCBuZXdMYXllciA9IGxheWVyLnVwZGF0ZUxheWVyQ29uZmlnKHtpc1Zpc2libGV9KTtcbiAgICBjb25zdCBpZHggPSBuZXdTdGF0ZS5sYXllcnMuZmluZEluZGV4KGwgPT4gbC5pZCA9PT0gbGF5ZXJJZCk7XG5cbiAgICBuZXdTdGF0ZSA9IHVwZGF0ZWxheWVyVmlzaWJpbHR5KG5ld1N0YXRlLCBuZXdMYXllciwgaXNWaXNpYmxlKTtcbiAgICByZXR1cm4gdXBkYXRlU3RhdGVXaXRoTGF5ZXJBbmREYXRhKG5ld1N0YXRlLCB7XG4gICAgICBsYXllcjogbmV3TGF5ZXIsXG4gICAgICBpZHhcbiAgICB9KTtcbiAgfVxufVxuXG4vKipcbiAqXG4gKiBAcGFyYW0gc3RhdGVcbiAqIEByZXR1cm5zIGluZGV4IG9mIHRoZSBmaWx0ZXIgc3luY2VkIHRvIHRpbWVsaW5lIG9yIC0xXG4gKi9cbmZ1bmN0aW9uIGZpbHRlclN5bmNlZFdpdGhUaW1lbGluZShzdGF0ZTogVmlzU3RhdGUpOiBudW1iZXIge1xuICByZXR1cm4gc3RhdGUuZmlsdGVycy5maW5kSW5kZXgoZiA9PiAoZiBhcyBUaW1lUmFuZ2VGaWx0ZXIpLnN5bmNlZFdpdGhMYXllclRpbWVsaW5lKTtcbn1cblxuLyoqXG4gKiBVcGRhdGVzIGlzVmFsaWQgZmxhZyBvZiBhIGxheWVyLlxuICogVXBkYXRlcyBpc1Zpc2libGUgYmFzZWQgb24gdGhlIHZhbHVlIG9mIGlzVmFsaWQuXG4gKiBUcmlnZ2VycyB1cGRhdGUgb2YgZGF0YSBmb3IgdGhlIGxheWVyIGluIG9yZGVyIHRvIGdldCBlcnJvcnMgYWdhaW4gZHVyaW5nIG5leHQgdXBkYXRlIGl0ZXJhdGlvbi5cbiAqIEBtZW1iZXJvZiB2aXNTdGF0ZVVwZGF0ZXJzXG4gKiBAcmV0dXJucyBuZXh0U3RhdGVcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGxheWVyU2V0SXNWYWxpZFVwZGF0ZXIoXG4gIHN0YXRlOiBWaXNTdGF0ZSxcbiAgYWN0aW9uOiBWaXNTdGF0ZUFjdGlvbnMuTGF5ZXJTZXRJc1ZhbGlkVXBkYXRlckFjdGlvblxuKTogVmlzU3RhdGUge1xuICBjb25zdCB7b2xkTGF5ZXIsIGlzVmFsaWR9ID0gYWN0aW9uO1xuXG4gIGNvbnN0IGlkeCA9IHN0YXRlLmxheWVycy5maW5kSW5kZXgobCA9PiBsLmlkID09PSBvbGRMYXllci5pZCk7XG4gIGNvbnN0IGxheWVyVG9VcGRhdGUgPSBzdGF0ZS5sYXllcnNbaWR4XTtcbiAgaWYgKGxheWVyVG9VcGRhdGUpIHtcbiAgICBsZXQgbmV3TGF5ZXI7XG4gICAgbGV0IG5ld0RhdGEgPSBudWxsO1xuXG4gICAgaWYgKGlzVmFsaWQpIHtcbiAgICAgIC8vIFRyaWdnZXIgZGF0YSB1cGRhdGUgaW4gb3JkZXIgdG8gc2hvdyBlcnJvcnMgYWdhaW4gaWYgcHJlc2VudC5cbiAgICAgIGNvbnN0IHtsYXllciwgbGF5ZXJEYXRhfSA9IGNhbGN1bGF0ZUxheWVyRGF0YShsYXllclRvVXBkYXRlLCBzdGF0ZSwgdW5kZWZpbmVkKTtcbiAgICAgIG5ld0xheWVyID0gbGF5ZXI7XG4gICAgICBuZXdEYXRhID0gbGF5ZXJEYXRhO1xuICAgIH0gZWxzZSB7XG4gICAgICBuZXdMYXllciA9IGxheWVyVG9VcGRhdGUudXBkYXRlTGF5ZXJDb25maWcoe1xuICAgICAgICBpc1Zpc2libGU6IGZhbHNlXG4gICAgICB9KTtcbiAgICAgIG5ld0xheWVyLmlzVmFsaWQgPSBmYWxzZTtcbiAgICB9XG5cbiAgICByZXR1cm4gdXBkYXRlU3RhdGVXaXRoTGF5ZXJBbmREYXRhKHN0YXRlLCB7aWR4LCBsYXllcjogbmV3TGF5ZXIsIGxheWVyRGF0YTogbmV3RGF0YX0pO1xuICB9XG5cbiAgcmV0dXJuIHN0YXRlO1xufVxuXG5mdW5jdGlvbiBhZGRPclJlbW92ZVRleHRMYWJlbHMobmV3RmllbGRzLCB0ZXh0TGFiZWwsIGRlZmF1bHRUZXh0TGFiZWwgPSBERUZBVUxUX1RFWFRfTEFCRUwpIHtcbiAgbGV0IG5ld1RleHRMYWJlbCA9IHRleHRMYWJlbC5zbGljZSgpO1xuXG4gIGNvbnN0IGN1cnJlbnRGaWVsZHMgPSB0ZXh0TGFiZWwubWFwKHRsID0+IHRsLmZpZWxkICYmIHRsLmZpZWxkLm5hbWUpLmZpbHRlcihkID0+IGQpO1xuXG4gIGNvbnN0IGFkZEZpZWxkcyA9IG5ld0ZpZWxkcy5maWx0ZXIoZiA9PiAhY3VycmVudEZpZWxkcy5pbmNsdWRlcyhmLm5hbWUpKTtcbiAgY29uc3QgZGVsZXRlRmllbGRzID0gY3VycmVudEZpZWxkcy5maWx0ZXIoZiA9PiAhbmV3RmllbGRzLmZpbmQoZmQgPT4gZmQubmFtZSA9PT0gZikpO1xuXG4gIC8vIGRlbGV0ZVxuICBuZXdUZXh0TGFiZWwgPSBuZXdUZXh0TGFiZWwuZmlsdGVyKHRsID0+IHRsLmZpZWxkICYmICFkZWxldGVGaWVsZHMuaW5jbHVkZXModGwuZmllbGQubmFtZSkpO1xuICBuZXdUZXh0TGFiZWwgPSAhbmV3VGV4dExhYmVsLmxlbmd0aCA/IFtkZWZhdWx0VGV4dExhYmVsXSA6IG5ld1RleHRMYWJlbDtcblxuICAvLyBhZGRcbiAgbmV3VGV4dExhYmVsID0gW1xuICAgIC4uLm5ld1RleHRMYWJlbC5maWx0ZXIodGwgPT4gdGwuZmllbGQpLFxuICAgIC4uLmFkZEZpZWxkcy5tYXAoYWYgPT4gKHtcbiAgICAgIC4uLmRlZmF1bHRUZXh0TGFiZWwsXG4gICAgICBmaWVsZDogYWZcbiAgICB9KSlcbiAgXTtcblxuICByZXR1cm4gbmV3VGV4dExhYmVsO1xufVxuXG5mdW5jdGlvbiB1cGRhdGVUZXh0TGFiZWxQcm9wQW5kVmFsdWUoaWR4LCBwcm9wLCB2YWx1ZSwgdGV4dExhYmVsKSB7XG4gIGlmICghT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHRleHRMYWJlbFtpZHhdLCBwcm9wKSkge1xuICAgIHJldHVybiB0ZXh0TGFiZWw7XG4gIH1cblxuICBsZXQgbmV3VGV4dExhYmVsID0gdGV4dExhYmVsLnNsaWNlKCk7XG5cbiAgaWYgKHByb3AgPT09ICdmaWVsZCcgJiYgdmFsdWUgPT09IG51bGwgJiYgdGV4dExhYmVsLmxlbmd0aCA+IDEpIHtcbiAgICAvLyByZW1vdmUgbGFiZWwgd2hlbiBmaWVsZCB2YWx1ZSBpcyBzZXQgdG8gbnVsbFxuICAgIG5ld1RleHRMYWJlbC5zcGxpY2UoaWR4LCAxKTtcbiAgfSBlbHNlIGlmIChwcm9wKSB7XG4gICAgbmV3VGV4dExhYmVsID0gdGV4dExhYmVsLm1hcCgodGwsIGkpID0+IChpID09PSBpZHggPyB7Li4udGwsIFtwcm9wXTogdmFsdWV9IDogdGwpKTtcbiAgfVxuXG4gIHJldHVybiBuZXdUZXh0TGFiZWw7XG59XG5cbi8qKlxuICogVXBkYXRlIGxheWVyIGJhc2UgY29uZmlnOiBkYXRhSWQsIGxhYmVsLCBjb2x1bW4sIGlzVmlzaWJsZVxuICogQG1lbWJlcm9mIHZpc1N0YXRlVXBkYXRlcnNcbiAqIEByZXR1cm5zIG5leHRTdGF0ZVxuICovXG5leHBvcnQgZnVuY3Rpb24gbGF5ZXJUZXh0TGFiZWxDaGFuZ2VVcGRhdGVyKFxuICBzdGF0ZTogVmlzU3RhdGUsXG4gIGFjdGlvbjogVmlzU3RhdGVBY3Rpb25zLkxheWVyVGV4dExhYmVsQ2hhbmdlVXBkYXRlckFjdGlvblxuKTogVmlzU3RhdGUge1xuICBjb25zdCB7b2xkTGF5ZXIsIGlkeCwgcHJvcCwgdmFsdWV9ID0gYWN0aW9uO1xuICBjb25zdCB7dGV4dExhYmVsfSA9IG9sZExheWVyLmNvbmZpZztcblxuICAvLyB3aGVuIGFkZGluZyBhIG5ldyBlbXB0eSB0ZXh0IGxhYmVsLFxuICAvLyByZWx5IG9uIHRoZSBsYXllcidzIGRlZmF1bHQgY29uZmlnLCBvciB1c2UgdGhlIGNvbnN0YW50IERFRkFVTFRfVEVYVF9MQUJFTFxuICBjb25zdCBkZWZhdWx0VGV4dExhYmVsID1cbiAgICBvbGRMYXllci5nZXREZWZhdWx0TGF5ZXJDb25maWcoe2RhdGFJZDogJyd9KT8udGV4dExhYmVsPy5bMF0gPz8gREVGQVVMVF9URVhUX0xBQkVMO1xuXG4gIGxldCBuZXdUZXh0TGFiZWwgPSB0ZXh0TGFiZWwuc2xpY2UoKTtcbiAgaWYgKCF0ZXh0TGFiZWxbaWR4XSAmJiBpZHggPT09IHRleHRMYWJlbC5sZW5ndGgpIHtcbiAgICAvLyBpZiBpZHggaXMgc2V0IHRvIGxlbmd0aCwgYWRkIGVtcHR5IHRleHQgbGFiZWxcbiAgICBuZXdUZXh0TGFiZWwgPSBbLi4udGV4dExhYmVsLCBkZWZhdWx0VGV4dExhYmVsXTtcbiAgfVxuXG4gIGlmIChpZHggPT09ICdhbGwnICYmIHByb3AgPT09ICdmaWVsZHMnKSB7XG4gICAgbmV3VGV4dExhYmVsID0gYWRkT3JSZW1vdmVUZXh0TGFiZWxzKHZhbHVlLCB0ZXh0TGFiZWwsIGRlZmF1bHRUZXh0TGFiZWwpO1xuICB9IGVsc2Uge1xuICAgIG5ld1RleHRMYWJlbCA9IHVwZGF0ZVRleHRMYWJlbFByb3BBbmRWYWx1ZShpZHgsIHByb3AsIHZhbHVlLCBuZXdUZXh0TGFiZWwpO1xuICB9XG4gIC8vIHVwZGF0ZSB0ZXh0IGxhYmVsIHByb3AgYW5kIHZhbHVlXG4gIHJldHVybiBsYXllckNvbmZpZ0NoYW5nZVVwZGF0ZXIoc3RhdGUsIHtcbiAgICBvbGRMYXllcixcbiAgICBuZXdDb25maWc6IHt0ZXh0TGFiZWw6IG5ld1RleHRMYWJlbH1cbiAgfSk7XG59XG5cbmZ1bmN0aW9uIHZhbGlkYXRlRXhpc3RpbmdMYXllcldpdGhEYXRhKGRhdGFzZXQsIGxheWVyQ2xhc3NlcywgbGF5ZXIsIHNjaGVtYSkge1xuICBjb25zdCBsb2FkZWRMYXllciA9IHNlcmlhbGl6ZUxheWVyKGxheWVyLCBzY2hlbWEpO1xuICByZXR1cm4gbG9hZGVkTGF5ZXJcbiAgICA/IHZhbGlkYXRlTGF5ZXJXaXRoRGF0YShkYXRhc2V0LCBsb2FkZWRMYXllciwgbGF5ZXJDbGFzc2VzLCB7XG4gICAgICAgIGFsbG93RW1wdHlDb2x1bW46IHRydWVcbiAgICAgIH0pXG4gICAgOiBudWxsO1xufVxuXG4vKipcbiAqIFVwZGF0ZSBsYXllciBjb25maWcgZGF0YUlkXG4gKiBAbWVtYmVyb2YgdmlzU3RhdGVVcGRhdGVyc1xuICogQHJldHVybnMgbmV4dFN0YXRlXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBsYXllckRhdGFJZENoYW5nZVVwZGF0ZXIoXG4gIHN0YXRlOiBWaXNTdGF0ZSxcbiAgYWN0aW9uOiB7XG4gICAgb2xkTGF5ZXI6IExheWVyO1xuICAgIG5ld0NvbmZpZzoge1xuICAgICAgZGF0YUlkOiBzdHJpbmc7XG4gICAgfTtcbiAgfVxuKTogVmlzU3RhdGUge1xuICBjb25zdCB7b2xkTGF5ZXIsIG5ld0NvbmZpZ30gPSBhY3Rpb247XG4gIGNvbnN0IHtkYXRhSWR9ID0gbmV3Q29uZmlnO1xuXG4gIGlmICghb2xkTGF5ZXIgfHwgIXN0YXRlLmRhdGFzZXRzW2RhdGFJZF0pIHtcbiAgICByZXR1cm4gc3RhdGU7XG4gIH1cbiAgY29uc3QgaWR4ID0gc3RhdGUubGF5ZXJzLmZpbmRJbmRleChsID0+IGwuaWQgPT09IG9sZExheWVyLmlkKTtcblxuICBsZXQgbmV3TGF5ZXIgPSBvbGRMYXllci51cGRhdGVMYXllckNvbmZpZyh7ZGF0YUlkfSk7XG5cbiAgLy8gdGhpcyBtYXkgaGFwcGVuIHdoZW4gYSBsYXllciBpcyBuZXcgKHR5cGU6IG51bGwgYW5kIG5vIGNvbHVtbnMpIGJ1dCBpdCdzIG5vdCByZWFkeSB0byBiZSBzYXZlZFxuICBpZiAobmV3TGF5ZXIuaXNWYWxpZFRvU2F2ZSgpKSB7XG4gICAgY29uc3QgdmFsaWRhdGVkID0gdmFsaWRhdGVFeGlzdGluZ0xheWVyV2l0aERhdGEoXG4gICAgICBzdGF0ZS5kYXRhc2V0c1tkYXRhSWRdLFxuICAgICAgc3RhdGUubGF5ZXJDbGFzc2VzLFxuICAgICAgbmV3TGF5ZXIsXG4gICAgICBzdGF0ZS5zY2hlbWFcbiAgICApO1xuICAgIC8vIGlmIGNhbnQgdmFsaWRhdGUgaXQgd2l0aCBkYXRhIGNyZWF0ZSBhIG5ldyBvbmVcbiAgICBpZiAoIXZhbGlkYXRlZCkge1xuICAgICAgY29uc3Qgb2xkTGF5ZXJUeXBlID0gb2xkTGF5ZXIudHlwZTtcbiAgICAgIGlmIChvbGRMYXllclR5cGUpIHtcbiAgICAgICAgbmV3TGF5ZXIgPSBuZXcgc3RhdGUubGF5ZXJDbGFzc2VzW29sZExheWVyVHlwZV0oe2RhdGFJZCwgaWQ6IG9sZExheWVyLmlkfSk7XG4gICAgICB9XG4gICAgfSBlbHNlIHtcbiAgICAgIG5ld0xheWVyID0gdmFsaWRhdGVkO1xuICAgIH1cbiAgfVxuXG4gIG5ld0xheWVyID0gbmV3TGF5ZXIudXBkYXRlTGF5ZXJDb25maWcoe1xuICAgIGlzVmlzaWJsZTogb2xkTGF5ZXIuY29uZmlnLmlzVmlzaWJsZSxcbiAgICBpc0NvbmZpZ0FjdGl2ZTogdHJ1ZVxuICB9KTtcblxuICBuZXdMYXllci51cGRhdGVMYXllckRvbWFpbihzdGF0ZS5kYXRhc2V0cyk7XG4gIGNvbnN0IHtsYXllckRhdGEsIGxheWVyfSA9IGNhbGN1bGF0ZUxheWVyRGF0YShuZXdMYXllciwgc3RhdGUsIHVuZGVmaW5lZCk7XG5cbiAgcmV0dXJuIHVwZGF0ZVN0YXRlV2l0aExheWVyQW5kRGF0YShzdGF0ZSwge2xheWVyRGF0YSwgbGF5ZXIsIGlkeH0pO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gc2V0SW5pdGlhbExheWVyQ29uZmlnKGxheWVyLCBkYXRhc2V0cywgbGF5ZXJDbGFzc2VzKTogTGF5ZXIge1xuICBsZXQgbmV3TGF5ZXIgPSBsYXllcjtcbiAgaWYgKCFPYmplY3Qua2V5cyhkYXRhc2V0cykubGVuZ3RoKSB7XG4gICAgLy8gbm8gZGF0YSBpcyBsb2FkZWRcbiAgICByZXR1cm4gbGF5ZXI7XG4gIH1cbiAgaWYgKCFsYXllci5jb25maWcuZGF0YUlkKSB7XG4gICAgLy8gc2V0IGxheWVyIGRhdGFJZFxuICAgIG5ld0xheWVyID0gbGF5ZXIudXBkYXRlTGF5ZXJDb25maWcoe2RhdGFJZDogT2JqZWN0LmtleXMoZGF0YXNldHMpWzBdfSk7XG4gIH1cbiAgY29uc3QgZGF0YXNldCA9IGRhdGFzZXRzW25ld0xheWVyLmNvbmZpZy5kYXRhSWRdO1xuICBpZiAoIWRhdGFzZXQpIHtcbiAgICByZXR1cm4gbGF5ZXI7XG4gIH1cblxuICAvLyBmaW5kIGRlZmF1dCBsYXllciBwcm9wc1xuICBjb25zdCByZXN1bHQgPVxuICAgIHR5cGVvZiBsYXllckNsYXNzZXNbbmV3TGF5ZXIudHlwZV0uZmluZERlZmF1bHRMYXllclByb3BzID09PSAnZnVuY3Rpb24nXG4gICAgICA/IGxheWVyQ2xhc3Nlc1tuZXdMYXllci50eXBlXS5maW5kRGVmYXVsdExheWVyUHJvcHMoZGF0YXNldCwgW10pXG4gICAgICA6IHtwcm9wczogW119O1xuXG4gIC8vIGFuIGFycmF5IG9mIHBvc3NpYmxlIHByb3BzLCB1c2UgMXN0IG9uZVxuICBjb25zdCBwcm9wcyA9IEFycmF5LmlzQXJyYXkocmVzdWx0KSA/IHJlc3VsdCA6IHJlc3VsdC5wcm9wcyB8fCBbXTtcblxuICBpZiAocHJvcHMubGVuZ3RoKSB7XG4gICAgbmV3TGF5ZXIgPSBuZXcgbGF5ZXJDbGFzc2VzW2xheWVyLnR5cGVdKHtcbiAgICAgIC4uLnByb3BzWzBdLFxuICAgICAgbGFiZWw6IG5ld0xheWVyLmNvbmZpZy5sYWJlbCxcbiAgICAgIGRhdGFJZDogbmV3TGF5ZXIuY29uZmlnLmRhdGFJZCxcbiAgICAgIGlzQ29uZmlnQWN0aXZlOiBuZXdMYXllci5jb25maWcuaXNDb25maWdBY3RpdmVcbiAgICB9KTtcbiAgfVxuICByZXR1cm4gdHlwZW9mIG5ld0xheWVyLnNldEluaXRpYWxMYXllckNvbmZpZyA9PT0gJ2Z1bmN0aW9uJ1xuICAgID8gbmV3TGF5ZXIuc2V0SW5pdGlhbExheWVyQ29uZmlnKGRhdGFzZXQpXG4gICAgOiBuZXdMYXllcjtcbn1cbi8qKlxuICogVXBkYXRlIGxheWVyIHR5cGUuIFByZXZpZXdzIGxheWVyIGNvbmZpZyB3aWxsIGJlIGNvcGllZCBpZiBhcHBsaWNhYmxlLlxuICogQG1lbWJlcm9mIHZpc1N0YXRlVXBkYXRlcnNcbiAqIEBwdWJsaWNcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGxheWVyVHlwZUNoYW5nZVVwZGF0ZXIoXG4gIHN0YXRlOiBWaXNTdGF0ZSxcbiAgYWN0aW9uOiBWaXNTdGF0ZUFjdGlvbnMuTGF5ZXJUeXBlQ2hhbmdlVXBkYXRlckFjdGlvblxuKTogVmlzU3RhdGUge1xuICBjb25zdCB7b2xkTGF5ZXIsIG5ld1R5cGV9ID0gYWN0aW9uO1xuICBpZiAoIW9sZExheWVyKSB7XG4gICAgcmV0dXJuIHN0YXRlO1xuICB9XG4gIGNvbnN0IG9sZElkID0gb2xkTGF5ZXIuaWQ7XG4gIGNvbnN0IGlkeCA9IHN0YXRlLmxheWVycy5maW5kSW5kZXgobCA9PiBsLmlkID09PSBvbGRJZCk7XG5cbiAgaWYgKCFzdGF0ZS5sYXllckNsYXNzZXNbbmV3VHlwZV0pIHtcbiAgICBDb25zb2xlLmVycm9yKGAke25ld1R5cGV9IGlzIG5vdCBhIHZhbGlkIGxheWVyIHR5cGVgKTtcbiAgICByZXR1cm4gc3RhdGU7XG4gIH1cbiAgbGV0IG5ld0xheWVyID0gbmV3IHN0YXRlLmxheWVyQ2xhc3Nlc1tuZXdUeXBlXSh7XG4gICAgLy8ga2VlcCBvbGQgbGF5ZXIgbGFibGUgYW5kIGlzQ29uZmlnQWN0aXZlXG4gICAgbGFiZWw6IG9sZExheWVyLmNvbmZpZy5sYWJlbCxcbiAgICBpc0NvbmZpZ0FjdGl2ZTogb2xkTGF5ZXIuY29uZmlnLmlzQ29uZmlnQWN0aXZlLFxuICAgIGRhdGFJZDogb2xkTGF5ZXIuY29uZmlnLmRhdGFJZFxuICB9KTtcblxuICBpZiAoIW9sZExheWVyLnR5cGUpIHtcbiAgICAvLyBpZiBzZXR0aW5nIGxheWVyIHR5cGUgb24gYW4gZW1wdHkgbGF5ZXJcbiAgICBuZXdMYXllciA9IHNldEluaXRpYWxMYXllckNvbmZpZyhuZXdMYXllciwgc3RhdGUuZGF0YXNldHMsIHN0YXRlLmxheWVyQ2xhc3Nlcyk7XG4gIH0gZWxzZSB7XG4gICAgLy8gZ2V0IGEgbWludCBsYXllciwgd2l0aCBuZXcgaWQgYW5kIHR5cGVcbiAgICAvLyBiZWNhdXNlIGRlY2suZ2wgdXNlcyBpZCB0byBtYXRjaCBiZXR3ZWVuIG5ldyBhbmQgb2xkIGxheWVyLlxuICAgIC8vIElmIHR5cGUgaGFzIGNoYW5nZWQgYnV0IGlkIGlzIHRoZSBzYW1lLCBpdCB3aWxsIGJyZWFrXG5cbiAgICBjb25zdCBkZWZhdWx0TGF5ZXJQcm9wcyA9XG4gICAgICB0eXBlb2Ygc3RhdGUubGF5ZXJDbGFzc2VzW25ld1R5cGVdLmZpbmREZWZhdWx0TGF5ZXJQcm9wcyA9PT0gJ2Z1bmN0aW9uJ1xuICAgICAgICA/IHN0YXRlLmxheWVyQ2xhc3Nlc1tuZXdUeXBlXS5maW5kRGVmYXVsdExheWVyUHJvcHMoc3RhdGUuZGF0YXNldHNbbmV3TGF5ZXIuY29uZmlnLmRhdGFJZF0pXG4gICAgICAgIDogbnVsbDtcblxuICAgIG5ld0xheWVyLmFzc2lnbkNvbmZpZ1RvTGF5ZXIoXG4gICAgICBvbGRMYXllci5jb25maWcsXG4gICAgICBvbGRMYXllci52aXNDb25maWdTZXR0aW5ncyxcbiAgICAgIHN0YXRlLmRhdGFzZXRzLFxuICAgICAgZGVmYXVsdExheWVyUHJvcHNcbiAgICApO1xuICAgIG5ld0xheWVyLnVwZGF0ZUxheWVyRG9tYWluKHN0YXRlLmRhdGFzZXRzKTtcbiAgfVxuXG4gIGNvbnN0IHtjbGlja2VkLCBob3ZlckluZm99ID0gc3RhdGU7XG5cbiAgbGV0IG5ld1N0YXRlID0ge1xuICAgIC4uLnN0YXRlLFxuICAgIGNsaWNrZWQ6IG9sZExheWVyLmlzTGF5ZXJIb3ZlcmVkKGNsaWNrZWQpID8gdW5kZWZpbmVkIDogY2xpY2tlZCxcbiAgICBob3ZlckluZm86IG9sZExheWVyLmlzTGF5ZXJIb3ZlcmVkKGhvdmVySW5mbykgPyB1bmRlZmluZWQgOiBob3ZlckluZm9cbiAgfTtcblxuICBjb25zdCB7bGF5ZXJEYXRhLCBsYXllcn0gPSBjYWxjdWxhdGVMYXllckRhdGEobmV3TGF5ZXIsIG5ld1N0YXRlKTtcbiAgbmV3U3RhdGUgPSB1cGRhdGVTdGF0ZVdpdGhMYXllckFuZERhdGEobmV3U3RhdGUsIHtsYXllckRhdGEsIGxheWVyLCBpZHh9KTtcblxuICBpZiAobGF5ZXIuY29uZmlnLmFuaW1hdGlvbi5lbmFibGVkIHx8IG9sZExheWVyLmNvbmZpZy5hbmltYXRpb24uZW5hYmxlZCkge1xuICAgIG5ld1N0YXRlID0gdXBkYXRlQW5pbWF0aW9uRG9tYWluKG5ld1N0YXRlKTtcbiAgfVxuXG4gIC8vIHVwZGF0ZSBzcGxpdE1hcCBsYXllciBpZFxuICBpZiAoc3RhdGUuc3BsaXRNYXBzLmxlbmd0aCkge1xuICAgIG5ld1N0YXRlID0ge1xuICAgICAgLi4ubmV3U3RhdGUsXG4gICAgICBzcGxpdE1hcHM6IG5ld1N0YXRlLnNwbGl0TWFwcy5tYXAoc2V0dGluZ3MgPT4ge1xuICAgICAgICBjb25zdCB7W29sZElkXTogb2xkTGF5ZXJNYXAsIC4uLm90aGVyTGF5ZXJzfSA9IHNldHRpbmdzLmxheWVycztcbiAgICAgICAgcmV0dXJuIG9sZElkIGluIHNldHRpbmdzLmxheWVyc1xuICAgICAgICAgID8ge1xuICAgICAgICAgICAgICAuLi5zZXR0aW5ncyxcbiAgICAgICAgICAgICAgbGF5ZXJzOiB7XG4gICAgICAgICAgICAgICAgLi4ub3RoZXJMYXllcnMsXG4gICAgICAgICAgICAgICAgW2xheWVyLmlkXTogb2xkTGF5ZXJNYXBcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICAgIDogc2V0dGluZ3M7XG4gICAgICB9KVxuICAgIH07XG4gIH1cblxuICAvLyB1cGRhdGUgbGF5ZXJPcmRlciB3aXRoIG5ldyBpZFxuICBuZXdTdGF0ZSA9IHtcbiAgICAuLi5uZXdTdGF0ZSxcbiAgICBsYXllck9yZGVyOiBuZXdTdGF0ZS5sYXllck9yZGVyLm1hcChsYXllcklkID0+XG4gICAgICBsYXllcklkID09PSBvbGRMYXllci5pZCA/IG5ld0xheWVyLmlkIDogbGF5ZXJJZFxuICAgIClcbiAgfTtcblxuICByZXR1cm4gbmV3U3RhdGU7XG59XG5cbi8qKlxuICogVXBkYXRlIGxheWVyIHZpc3VhbCBjaGFubmVsXG4gKiBAbWVtYmVyb2YgdmlzU3RhdGVVcGRhdGVyc1xuICogQHJldHVybnMge09iamVjdH0gbmV4dFN0YXRlXG4gKiBAcHVibGljXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBsYXllclZpc3VhbENoYW5uZWxDaGFuZ2VVcGRhdGVyKFxuICBzdGF0ZTogVmlzU3RhdGUsXG4gIGFjdGlvbjogVmlzU3RhdGVBY3Rpb25zLkxheWVyVmlzdWFsQ2hhbm5lbENvbmZpZ0NoYW5nZVVwZGF0ZXJBY3Rpb25cbik6IFZpc1N0YXRlIHtcbiAgY29uc3Qge29sZExheWVyLCBuZXdDb25maWcsIG5ld1Zpc0NvbmZpZywgY2hhbm5lbH0gPSBhY3Rpb247XG4gIGlmICghb2xkTGF5ZXIuY29uZmlnLmRhdGFJZCkge1xuICAgIHJldHVybiBzdGF0ZTtcbiAgfVxuXG4gIGNvbnN0IGRhdGFzZXQgPSBzdGF0ZS5kYXRhc2V0c1tvbGRMYXllci5jb25maWcuZGF0YUlkXTtcblxuICBjb25zdCBpZHggPSBzdGF0ZS5sYXllcnMuZmluZEluZGV4KGwgPT4gbC5pZCA9PT0gb2xkTGF5ZXIuaWQpO1xuICBsZXQgbmV3TGF5ZXIgPSBvbGRMYXllci51cGRhdGVMYXllckNvbmZpZyhuZXdDb25maWcpO1xuICBpZiAobmV3VmlzQ29uZmlnKSBuZXdMYXllciA9IG5ld0xheWVyLnVwZGF0ZUxheWVyVmlzQ29uZmlnKG5ld1Zpc0NvbmZpZyk7XG5cbiAgbmV3TGF5ZXIudXBkYXRlTGF5ZXJWaXN1YWxDaGFubmVsKGRhdGFzZXQsIGNoYW5uZWwpO1xuXG4gIC8vIGNhbGxpbmcgdXBkYXRlIGFuaW1hdGlvbiBkb21haW4gZmlyc3QgdG8gbWVyZ2UgYWxsIGxheWVyIGFuaW1hdGlvbiBkb21haW5cbiAgbGV0IHVwZGF0ZWRTdGF0ZSA9IHVwZGF0ZUFuaW1hdGlvbkRvbWFpbihzdGF0ZSk7XG5cbiAgY29uc3QgdmlzdWFsQ2hhbm5lbCA9IG9sZExheWVyLnZpc3VhbENoYW5uZWxzW2NoYW5uZWxdO1xuICBpZiAodmlzdWFsQ2hhbm5lbD8uY2hhbm5lbFNjYWxlVHlwZSA9PT0gQ0hBTk5FTF9TQ0FMRVMuY29sb3IgJiYgbmV3Q29uZmlnW3Zpc3VhbENoYW5uZWwuZmllbGRdKSB7XG4gICAgLy8gaWYgY29sb3IgZmllbGQgY2hhbmdlZCwgc2V0IGN1c3RvbUJyZWFrcyB0byBmYWxzZVxuICAgIG5ld0xheWVyLnVwZGF0ZUxheWVyQ29sb3JVSSh2aXN1YWxDaGFubmVsLnJhbmdlLCB7XG4gICAgICBjb2xvclJhbmdlQ29uZmlnOiB7XG4gICAgICAgIC4uLm5ld0xheWVyLmNvbmZpZy5jb2xvclVJW3Zpc3VhbENoYW5uZWwucmFuZ2VdLmNvbG9yUmFuZ2VDb25maWcsXG4gICAgICAgIGN1c3RvbUJyZWFrczogZmFsc2VcbiAgICAgIH1cbiAgICB9KTtcblxuICAgIHVwZGF0ZWRTdGF0ZSA9IHtcbiAgICAgIC4uLnVwZGF0ZWRTdGF0ZSxcbiAgICAgIGxheWVyczogdXBkYXRlZFN0YXRlLmxheWVycy5tYXAobCA9PiAobC5pZCA9PT0gb2xkTGF5ZXIuaWQgPyBuZXdMYXllciA6IGwpKVxuICAgIH07XG4gIH1cblxuICBjb25zdCBvbGRMYXllckRhdGEgPSB1cGRhdGVkU3RhdGUubGF5ZXJEYXRhW2lkeF07XG4gIGNvbnN0IHtsYXllckRhdGEsIGxheWVyfSA9IGNhbGN1bGF0ZUxheWVyRGF0YShuZXdMYXllciwgdXBkYXRlZFN0YXRlLCBvbGRMYXllckRhdGEpO1xuXG4gIGlmIChcbiAgICB2aXN1YWxDaGFubmVsPy5jaGFubmVsU2NhbGVUeXBlID09PSBDSEFOTkVMX1NDQUxFUy5jb2xvciAmJlxuICAgIG5ld0NvbmZpZ1t2aXN1YWxDaGFubmVsPy5zY2FsZV0gPT09IFNDQUxFX1RZUEVTLmN1c3RvbU9yZGluYWwgJiZcbiAgICAhbmV3VmlzQ29uZmlnXG4gICkge1xuICAgIC8vIHdoZW4gc3dpdGNoaW5nIHRvIGN1c3RvbU9yZGluYWwgc2NhbGUsIGNyZWF0ZSBhIGN1c3RvbVBhbGV0dGUgaW4gY29sb3JVSSB3aXRoIHVwZGF0ZWQgY29sb3JEb21haW5cbiAgICBjb25zdCBjdXN0b21QYWxldHRlID0gaW5pdEN1c3RvbVBhbGV0dGVCeUN1c3RvbVNjYWxlKHtcbiAgICAgIHNjYWxlOiBTQ0FMRV9UWVBFUy5jdXN0b21PcmRpbmFsLFxuICAgICAgZmllbGQ6IGxheWVyLmNvbmZpZ1t2aXN1YWxDaGFubmVsLmZpZWxkXSxcbiAgICAgIG9yZGluYWxEb21haW46IGxheWVyLmNvbmZpZ1tsYXllci52aXN1YWxDaGFubmVsc1tjaGFubmVsXS5kb21haW5dLFxuICAgICAgcmFuZ2U6IGxheWVyLmNvbmZpZy52aXNDb25maWdbdmlzdWFsQ2hhbm5lbC5yYW5nZV0sXG4gICAgICBjb2xvckJyZWFrczogbnVsbFxuICAgIH0pO1xuICAgIC8vIHVwZGF0ZSBjb2xvclJhbmdlIHdpdGggbmV3IGN1c3RvbVBhbGV0dGVcbiAgICBsYXllci51cGRhdGVMYXllckNvbG9yVUkodmlzdWFsQ2hhbm5lbC5yYW5nZSwge1xuICAgICAgc2hvd0NvbG9yQ2hhcnQ6IHRydWUsXG4gICAgICBjb2xvclJhbmdlQ29uZmlnOiB7XG4gICAgICAgIC4uLmxheWVyLmNvbmZpZy5jb2xvclVJW3Zpc3VhbENoYW5uZWwucmFuZ2VdLmNvbG9yUmFuZ2VDb25maWcsXG4gICAgICAgIGN1c3RvbUJyZWFrczogdHJ1ZVxuICAgICAgfSxcbiAgICAgIGN1c3RvbVBhbGV0dGVcbiAgICB9KTtcbiAgfVxuICByZXR1cm4gdXBkYXRlU3RhdGVXaXRoTGF5ZXJBbmREYXRhKHVwZGF0ZWRTdGF0ZSwge2xheWVyRGF0YSwgbGF5ZXIsIGlkeH0pO1xufVxuXG4vKipcbiAqIFVwZGF0ZSBsYXllciBgdmlzQ29uZmlnYFxuICogQG1lbWJlcm9mIHZpc1N0YXRlVXBkYXRlcnNcbiAqIEBwdWJsaWNcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGxheWVyVmlzQ29uZmlnQ2hhbmdlVXBkYXRlcihcbiAgc3RhdGU6IFZpc1N0YXRlLFxuICBhY3Rpb246IFZpc1N0YXRlQWN0aW9ucy5MYXllclZpc0NvbmZpZ0NoYW5nZVVwZGF0ZXJBY3Rpb25cbik6IFZpc1N0YXRlIHtcbiAgY29uc3Qge29sZExheWVyfSA9IGFjdGlvbjtcbiAgY29uc3QgaWR4ID0gc3RhdGUubGF5ZXJzLmZpbmRJbmRleChsID0+IGwuaWQgPT09IG9sZExheWVyLmlkKTtcbiAgY29uc3QgcHJvcHMgPSBPYmplY3Qua2V5cyhhY3Rpb24ubmV3VmlzQ29uZmlnKTtcblxuICBjb25zdCBuZXdWaXNDb25maWcgPSB7XG4gICAgLi4ub2xkTGF5ZXIuY29uZmlnLnZpc0NvbmZpZyxcbiAgICAuLi5hY3Rpb24ubmV3VmlzQ29uZmlnXG4gIH07XG5cbiAgY29uc3QgbmV3TGF5ZXIgPSBvbGRMYXllci51cGRhdGVMYXllckNvbmZpZyh7dmlzQ29uZmlnOiBuZXdWaXNDb25maWd9KTtcblxuICBpZiAobmV3TGF5ZXIuc2hvdWxkQ2FsY3VsYXRlTGF5ZXJEYXRhKHByb3BzKSkge1xuICAgIGNvbnN0IG9sZExheWVyRGF0YSA9IHN0YXRlLmxheWVyRGF0YVtpZHhdO1xuICAgIGNvbnN0IHtsYXllckRhdGEsIGxheWVyfSA9IGNhbGN1bGF0ZUxheWVyRGF0YShuZXdMYXllciwgc3RhdGUsIG9sZExheWVyRGF0YSk7XG4gICAgcmV0dXJuIHVwZGF0ZVN0YXRlV2l0aExheWVyQW5kRGF0YShzdGF0ZSwge2xheWVyRGF0YSwgbGF5ZXIsIGlkeH0pO1xuICB9XG5cbiAgcmV0dXJuIHVwZGF0ZVN0YXRlV2l0aExheWVyQW5kRGF0YShzdGF0ZSwge2xheWVyOiBuZXdMYXllciwgaWR4fSk7XG59XG5cbi8qKlxuICogUmVzZXQgYW5pbWF0aW9uIGNvbmZpZyBjdXJyZW50IHRpbWUgdG8gYSBzcGVjaWZpZWQgdmFsdWVcbiAqIEBtZW1iZXJvZiB2aXNTdGF0ZVVwZGF0ZXJzXG4gKiBAcHVibGljXG4gKlxuICovXG5leHBvcnQgY29uc3Qgc2V0TGF5ZXJBbmltYXRpb25UaW1lVXBkYXRlciA9IDxTIGV4dGVuZHMgVmlzU3RhdGU+KFxuICBzdGF0ZTogUyxcbiAge3ZhbHVlfTogVmlzU3RhdGVBY3Rpb25zLlNldExheWVyQW5pbWF0aW9uVGltZVVwZGF0ZXJBY3Rpb25cbik6IFMgPT4ge1xuICBjb25zdCBjdXJyZW50VGltZSA9IEFycmF5LmlzQXJyYXkodmFsdWUpID8gdmFsdWVbMF0gOiB2YWx1ZTtcbiAgY29uc3QgbmV4dFN0YXRlID0ge1xuICAgIC4uLnN0YXRlLFxuICAgIGFuaW1hdGlvbkNvbmZpZzoge1xuICAgICAgLi4uc3RhdGUuYW5pbWF0aW9uQ29uZmlnLFxuICAgICAgY3VycmVudFRpbWVcbiAgICB9XG4gIH07XG4gIC8vIHVwZGF0ZSBhbmltYXRpb24gY29uZmlnIGZvciBlYWNoIGxheWVyXG4gIHJldHVybiBzdGF0ZS5sYXllcnMucmVkdWNlKChhY2N1LCBsKSA9PiB7XG4gICAgaWYgKGwuY29uZmlnLmFuaW1hdGlvbi5lbmFibGVkICYmIGwudHlwZSAhPT0gJ3RyaXAnKSB7XG4gICAgICByZXR1cm4gbGF5ZXJBbmltYXRpb25DaGFuZ2VVcGRhdGVyKGFjY3UsIHtvbGRMYXllcjogbCwgcHJvcDogJ2N1cnJlbnRUaW1lJywgY3VycmVudFRpbWV9KTtcbiAgICB9XG4gICAgcmV0dXJuIGFjY3U7XG4gIH0sIG5leHRTdGF0ZSk7XG59O1xuXG4vKipcbiAqIFVwZGF0ZSBmaWx0ZXIgcHJvcGVydHlcbiAqIEBtZW1iZXJvZiB2aXNTdGF0ZVVwZGF0ZXJzXG4gKiBAcHVibGljXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBzZXRGaWx0ZXJBbmltYXRpb25UaW1lVXBkYXRlcihcbiAgc3RhdGU6IFZpc1N0YXRlLFxuICBhY3Rpb246IFZpc1N0YXRlQWN0aW9ucy5TZXRGaWx0ZXJBbmltYXRpb25UaW1lVXBkYXRlckFjdGlvblxuKTogVmlzU3RhdGUge1xuICByZXR1cm4gc2V0RmlsdGVyVXBkYXRlcihzdGF0ZSwgYWN0aW9uKTtcbn1cblxuLyoqXG4gKiBVcGRhdGUgZmlsdGVyIGFuaW1hdGlvbiB3aW5kb3dcbiAqIEBtZW1iZXJvZiB2aXNTdGF0ZVVwZGF0ZXJzXG4gKiBAcHVibGljXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBzZXRGaWx0ZXJBbmltYXRpb25XaW5kb3dVcGRhdGVyPFMgZXh0ZW5kcyBWaXNTdGF0ZT4oXG4gIHN0YXRlOiBTLFxuICB7aWQsIGFuaW1hdGlvbldpbmRvd306IFZpc1N0YXRlQWN0aW9ucy5TZXRGaWx0ZXJBbmltYXRpb25XaW5kb3dVcGRhdGVyQWN0aW9uXG4pOiBTIHtcbiAgY29uc3QgZmlsdGVyID0gc3RhdGUuZmlsdGVycy5maW5kKGYgPT4gZi5pZCA9PT0gaWQpO1xuXG4gIGlmICghZmlsdGVyKSB7XG4gICAgcmV0dXJuIHN0YXRlO1xuICB9XG5cbiAgY29uc3QgbmV3RmlsdGVyID0ge1xuICAgIC4uLmZpbHRlcixcbiAgICBhbmltYXRpb25XaW5kb3dcbiAgfTtcblxuICBjb25zdCBuZXdTdGF0ZSA9IHtcbiAgICAuLi5zdGF0ZSxcbiAgICBmaWx0ZXJzOiBzd2FwXzxGaWx0ZXI+KG5ld0ZpbHRlcikoc3RhdGUuZmlsdGVycylcbiAgfTtcblxuICBjb25zdCBuZXdTeW5jVGltZWxpbmVNb2RlID0gZ2V0U3luY0FuaW1hdGlvbk1vZGUobmV3RmlsdGVyIGFzIFRpbWVSYW5nZUZpbHRlcik7XG5cbiAgcmV0dXJuIHNldFRpbWVGaWx0ZXJUaW1lbGluZU1vZGVVcGRhdGVyKG5ld1N0YXRlLCB7aWQsIG1vZGU6IG5ld1N5bmNUaW1lbGluZU1vZGV9KTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGFwcGx5RmlsdGVyQ29uZmlnVXBkYXRlcihcbiAgc3RhdGU6IFZpc1N0YXRlLFxuICBhY3Rpb246IFZpc1N0YXRlQWN0aW9ucy5BcHBseUZpbHRlckNvbmZpZ1VwZGF0ZXJBY3Rpb25cbik6IFZpc1N0YXRlIHtcbiAgY29uc3Qge2ZpbHRlcklkLCBuZXdGaWx0ZXJ9ID0gYWN0aW9uO1xuICBjb25zdCBvbGRGaWx0ZXIgPSBzdGF0ZS5maWx0ZXJzLmZpbmQoZiA9PiBmLmlkID09PSBmaWx0ZXJJZCk7XG4gIGlmICghb2xkRmlsdGVyKSB7XG4gICAgcmV0dXJuIHN0YXRlO1xuICB9XG5cbiAgLy8gU2VyaWFsaXplIHRoZSBmaWx0ZXJzIHRvIG9ubHkgY29tcGFyZSB0aGUgc2F2ZWQgcHJvcGVydGllc1xuICBjb25zdCBzZXJpYWxpemVkT2xkRmlsdGVyID0gc2VyaWFsaXplRmlsdGVyKG9sZEZpbHRlciwgc3RhdGUuc2NoZW1hKSA/PyB7Y29uZmlnOiB7fX07XG4gIGNvbnN0IHNlcmlhbGl6ZWROZXdGaWx0ZXIgPSBzZXJpYWxpemVGaWx0ZXIobmV3RmlsdGVyLCBzdGF0ZS5zY2hlbWEpO1xuICBpZiAoIXNlcmlhbGl6ZWROZXdGaWx0ZXIgfHwgaXNFcXVhbChzZXJpYWxpemVkT2xkRmlsdGVyLCBzZXJpYWxpemVkTmV3RmlsdGVyKSkge1xuICAgIHJldHVybiBzdGF0ZTtcbiAgfVxuXG4gIC8vIElmIHRoZXJlIGFyZSBhbnkgY2hhbmdlcyB0byB0aGUgZmlsdGVyLCBhcHBseSB0aGVtXG4gIGNvbnN0IGNoYW5nZWQgPSBwaWNrQ2hhbmdlZFByb3BzKHNlcmlhbGl6ZWRPbGRGaWx0ZXIsIHNlcmlhbGl6ZWROZXdGaWx0ZXIpO1xuICBkZWxldGUgY2hhbmdlZFsnaWQnXTsgLy8gaWQgc2hvdWxkIG5vdCBiZSBjaGFuZ2VkXG5cbiAgY29uc3QgZmlsdGVySW5kZXggPSBzdGF0ZS5maWx0ZXJzLmZpbmRJbmRleChmID0+IGYuaWQgPT09IGZpbHRlcklkKTtcbiAgaWYgKGZpbHRlckluZGV4IDwgMCkge1xuICAgIHJldHVybiBzdGF0ZTtcbiAgfVxuICByZXR1cm4gc2V0RmlsdGVyVXBkYXRlcihcbiAgICBzdGF0ZSxcbiAgICBzZXRGaWx0ZXIoZmlsdGVySW5kZXgsIE9iamVjdC5rZXlzKGNoYW5nZWQpLCBPYmplY3QudmFsdWVzKGNoYW5nZWQpKVxuICApO1xufVxuXG4vKipcbiAqIFVwZGF0ZSBmaWx0ZXIgcHJvcGVydHlcbiAqIEBtZW1iZXJvZiB2aXNTdGF0ZVVwZGF0ZXJzXG4gKiBAcHVibGljXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBzZXRGaWx0ZXJVcGRhdGVyPFMgZXh0ZW5kcyBWaXNTdGF0ZT4oXG4gIHN0YXRlOiBTLFxuICBhY3Rpb246IFZpc1N0YXRlQWN0aW9ucy5TZXRGaWx0ZXJVcGRhdGVyQWN0aW9uXG4pOiBTIHtcbiAgY29uc3Qge2lkeCwgdmFsdWVJbmRleCA9IDB9ID0gYWN0aW9uO1xuICBjb25zdCBvbGRGaWx0ZXIgPSBzdGF0ZS5maWx0ZXJzW2lkeF07XG4gIGlmICghb2xkRmlsdGVyKSB7XG4gICAgQ29uc29sZS5lcnJvcihgZmlsdGVycy4ke2lkeH0gaXMgdW5kZWZpbmVkYCk7XG4gICAgcmV0dXJuIHN0YXRlO1xuICB9XG4gIGlmIChcbiAgICBBcnJheS5pc0FycmF5KGFjdGlvbi5wcm9wKSAmJlxuICAgICghQXJyYXkuaXNBcnJheShhY3Rpb24udmFsdWUpIHx8IGFjdGlvbi5wcm9wLmxlbmd0aCAhPT0gYWN0aW9uLnZhbHVlLmxlbmd0aClcbiAgKSB7XG4gICAgQ29uc29sZS5lcnJvcignRXhwZWN0aW5nIHZhbHVlIHRvIGJlIGFuIGFycmF5IG9mIHRoZSBzYW1lIGxlbmd0aCwgc2luY2UgcHJvcCBpcyBhbiBhcnJheScpO1xuICAgIHJldHVybiBzdGF0ZTtcbiAgfVxuICAvLyBjb252ZXJ0IHByb3AgYW5kIHZhbHVlIHRvIGFycmF5XG4gIGNvbnN0IHByb3BzID0gdG9BcnJheShhY3Rpb24ucHJvcCk7XG4gIGNvbnN0IHZhbHVlcyA9IEFycmF5LmlzQXJyYXkoYWN0aW9uLnByb3ApID8gdG9BcnJheShhY3Rpb24udmFsdWUpIDogW2FjdGlvbi52YWx1ZV07XG5cbiAgbGV0IG5ld0ZpbHRlciA9IG9sZEZpbHRlcjtcbiAgbGV0IG5ld1N0YXRlID0gc3RhdGU7XG5cbiAgbGV0IGRhdGFzZXRJZHNUb0ZpbHRlcjogc3RyaW5nW10gPSBbXTtcbiAgZm9yIChsZXQgaSA9IDA7IGkgPCBwcm9wcy5sZW5ndGg7IGkrKykge1xuICAgIGNvbnN0IHByb3AgPSBwcm9wc1tpXTtcbiAgICBjb25zdCB2YWx1ZSA9IHZhbHVlc1tpXTtcbiAgICAvLyBXZSBjdXJyZW50bHkgZG8gbm90IHN1cHBvcnQgcGFzc2luZyBpbiBuYW1lIGFzIGFuIGFycmF5IGludG8gX3VwZGF0ZUZpbHRlclByb3AsIHNvIHdlIGNhbGwgaXQgbXVsdGlwbGUgdGltZXMgd2l0aCBlYWNoIG5hbWVcbiAgICAvLyBTZWUgdGhlIGNvbW1lbnQgaW4gdGhlcmUgYXMgdG8gd2hhdCBzaG91bGQgYmUgYWRkcmVzc2VkXG4gICAgbGV0IHJlcztcbiAgICBpZiAocHJvcCA9PT0gJ25hbWUnICYmIEFycmF5LmlzQXJyYXkodmFsdWUpKSB7XG4gICAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgbm8tbG9vcC1mdW5jXG4gICAgICByZXMgPSB2YWx1ZS5yZWR1Y2UoKGFjY3UsIHYpID0+IHtcbiAgICAgICAgcmV0dXJuIF91cGRhdGVGaWx0ZXJQcm9wKGFjY3UsIG5ld0ZpbHRlciwgcHJvcCwgdiwgdmFsdWVJbmRleCk7XG4gICAgICB9LCBuZXdTdGF0ZSk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHJlcyA9IF91cGRhdGVGaWx0ZXJQcm9wKG5ld1N0YXRlLCBuZXdGaWx0ZXIsIHByb3AsIHZhbHVlLCB2YWx1ZUluZGV4KTtcbiAgICB9XG4gICAgbmV3RmlsdGVyID0gcmVzLmZpbHRlcjtcbiAgICBuZXdTdGF0ZSA9IHJlcy5zdGF0ZTtcbiAgICBkYXRhc2V0SWRzVG9GaWx0ZXIgPSBkYXRhc2V0SWRzVG9GaWx0ZXIuY29uY2F0KHJlcy5kYXRhc2V0SWRzVG9GaWx0ZXIpO1xuICB9XG5cbiAgY29uc3QgZW5sYXJnZWRGaWx0ZXIgPSBzdGF0ZS5maWx0ZXJzLmZpbmQoZiA9PiBmLnZpZXcgPT09IEZJTFRFUl9WSUVXX1RZUEVTLmVubGFyZ2VkKTtcblxuICBpZiAoZW5sYXJnZWRGaWx0ZXIgJiYgZW5sYXJnZWRGaWx0ZXIuaWQgIT09IG5ld0ZpbHRlci5pZCkge1xuICAgIC8vIHRoZXJlIHNob3VsZCBiZSBvbmx5IG9uZSBlbmxhcmdlZCBmaWx0ZXJcbiAgICBuZXdGaWx0ZXIudmlldyA9IEZJTFRFUl9WSUVXX1RZUEVTLnNpZGU7XG4gIH1cblxuICAvLyBzYXZlIG5ldyBmaWx0ZXJzIHRvIG5ld1N0YXRlXG4gIG5ld1N0YXRlID0gc2V0KFsnZmlsdGVycycsIGlkeF0sIG5ld0ZpbHRlciwgbmV3U3RhdGUpO1xuXG4gIC8vIGZpbHRlciBkYXRhXG4gIGNvbnN0IGZpbHRlcmVkRGF0YXNldHMgPSBhcHBseUZpbHRlcnNUb0RhdGFzZXRzKFxuICAgIHVuaXEoZGF0YXNldElkc1RvRmlsdGVyKSxcbiAgICBuZXdTdGF0ZS5kYXRhc2V0cyxcbiAgICBuZXdTdGF0ZS5maWx0ZXJzLFxuICAgIG5ld1N0YXRlLmxheWVyc1xuICApO1xuXG4gIG5ld1N0YXRlID0gc2V0KFsnZGF0YXNldHMnXSwgZmlsdGVyZWREYXRhc2V0cywgbmV3U3RhdGUpO1xuXG4gIC8vIG5lZWQgdG8gdXBkYXRlIGZpbHRlclBsb3QgYWZ0ZXIgZmlsdGVyIERhdGFzZXQgZm9yIHBsb3QgdG8gdXBkYXRlIG9uIGZpbHRlcmVkIHJlc3VsdFxuICBjb25zdCBmaWx0ZXJXaXRoUExvdCA9IHVwZGF0ZUZpbHRlclBsb3QobmV3U3RhdGUuZGF0YXNldHMsIG5ld1N0YXRlLmZpbHRlcnNbaWR4XSk7XG5cbiAgbmV3U3RhdGUgPSBzZXQoWydmaWx0ZXJzJywgaWR4XSwgZmlsdGVyV2l0aFBMb3QsIG5ld1N0YXRlKTtcblxuICAvLyBkYXRhSWQgaXMgYW4gYXJyYXlcbiAgLy8gcGFzcyBvbmx5IHRoZSBkYXRhc2V0IHdlIG5lZWQgdG8gdXBkYXRlXG4gIG5ld1N0YXRlID0gdXBkYXRlQWxsTGF5ZXJEb21haW5EYXRhKG5ld1N0YXRlLCBkYXRhc2V0SWRzVG9GaWx0ZXIsIG5ld0ZpbHRlcik7XG5cbiAgLy8gSWYgdGltZSByYW5nZSBmaWx0ZXIgdmFsdWUgd2FzIHVwZGF0ZWQsIGFkanVzdCBhbmltYXRpb24gY29uZmlnXG4gIGlmIChuZXdGaWx0ZXIudHlwZSA9PT0gRklMVEVSX1RZUEVTLnRpbWVSYW5nZSAmJiBwcm9wcy5pbmNsdWRlcygndmFsdWUnKSkge1xuICAgIG5ld1N0YXRlID0gYWRqdXN0QW5pbWF0aW9uQ29uZmlnV2l0aEZpbHRlcihuZXdTdGF0ZSwgYWN0aW9uLmlkeCk7XG4gIH1cblxuICByZXR1cm4gbmV3U3RhdGU7XG59XG5cbmZ1bmN0aW9uIF91cGRhdGVGaWx0ZXJEYXRhSWRBdFZhbHVlSW5kZXgoZmlsdGVyLCB2YWx1ZUluZGV4LCB2YWx1ZSwgZGF0YXNldHMpIHtcbiAgbGV0IG5ld0ZpbHRlciA9IGZpbHRlcjtcbiAgaWYgKGZpbHRlci5kYXRhSWRbdmFsdWVJbmRleF0pIHtcbiAgICAvLyBpZiBkYXRhSWQgYWxyZWFkeSBleGlzdFxuICAgIG5ld0ZpbHRlciA9IF9yZW1vdmVGaWx0ZXJEYXRhSWRBdFZhbHVlSW5kZXgoZmlsdGVyLCB2YWx1ZUluZGV4LCBkYXRhc2V0cyk7XG4gIH1cbiAgaWYgKHZhbHVlKSB7XG4gICAgY29uc3QgbmV4dFZhbHVlID0gbmV3RmlsdGVyLmRhdGFJZC5zbGljZSgpO1xuICAgIG5leHRWYWx1ZVt2YWx1ZUluZGV4XSA9IHZhbHVlO1xuICAgIG5ld0ZpbHRlciA9IHNldChbJ2RhdGFJZCddLCBuZXh0VmFsdWUsIG5ld0ZpbHRlcik7XG4gIH1cbiAgcmV0dXJuIG5ld0ZpbHRlcjtcbn1cblxuZnVuY3Rpb24gX3JlbW92ZUZpbHRlckRhdGFJZEF0VmFsdWVJbmRleChmaWx0ZXIsIHZhbHVlSW5kZXgsIGRhdGFzZXRzKSB7XG4gIGNvbnN0IGRhdGFJZCA9IGZpbHRlci5kYXRhSWRbdmFsdWVJbmRleF07XG5cbiAgaWYgKGZpbHRlci5kYXRhSWQubGVuZ3RoID09PSAxICYmIHZhbHVlSW5kZXggPT09IDApIHtcbiAgICAvLyBpZiByZW1vdmUgdGhlIG9ubHkgZGF0YUlkLCBjcmVhdGUgYW4gZW1wdHkgZmlsdGVyIGluc3RlYWQ7XG4gICAgcmV0dXJuIGdldERlZmF1bHRGaWx0ZXIoe2lkOiBmaWx0ZXIuaWR9KTtcbiAgfVxuXG4gIGlmIChkYXRhSWQpIHtcbiAgICBmaWx0ZXIgPSByZW1vdmVGaWx0ZXJQbG90KGZpbHRlciwgZGF0YUlkKTtcbiAgfVxuXG4gIGZvciAoY29uc3QgcHJvcCBvZiBbJ2RhdGFJZCcsICduYW1lJywgJ2ZpZWxkSWR4JywgJ2dwdUNoYW5uZWwnXSkge1xuICAgIGlmIChBcnJheS5pc0FycmF5KGZpbHRlcltwcm9wXSkpIHtcbiAgICAgIGNvbnN0IG5leHRWYWwgPSBmaWx0ZXJbcHJvcF0uc2xpY2UoKTtcbiAgICAgIG5leHRWYWwuc3BsaWNlKHZhbHVlSW5kZXgsIDEpO1xuICAgICAgZmlsdGVyID0gc2V0KFtwcm9wXSwgbmV4dFZhbCwgZmlsdGVyKTtcbiAgICB9XG4gIH1cblxuICAvLyBtZXJnZUZpZWxkRG9tYWluIGZvciB0aGUgcmVtYWluaW5nIGZpZWxkc1xuICBjb25zdCBkb21haW5TdGVwcyA9IG1lcmdlRmlsdGVyRG9tYWluKGZpbHRlciwgZGF0YXNldHMpO1xuXG4gIGNvbnN0IG5leHRGaWx0ZXIgPSB7XG4gICAgLi4uZmlsdGVyLFxuICAgIC8vIHZhbHVlOiBuZXh0VmFsdWUsXG4gICAgLi4uKGRvbWFpblN0ZXBzID8ge2RvbWFpbjogZG9tYWluU3RlcHM/LmRvbWFpbiwgc3RlcDogZG9tYWluU3RlcHM/LnN0ZXB9IDoge30pXG4gIH07XG5cbiAgY29uc3QgbmV4dFZhbHVlID0gYWRqdXN0VmFsdWVUb0ZpbHRlckRvbWFpbihuZXh0RmlsdGVyLnZhbHVlLCBuZXh0RmlsdGVyKTtcbiAgcmV0dXJuIHtcbiAgICAuLi5uZXh0RmlsdGVyLFxuICAgIHZhbHVlOiBuZXh0VmFsdWVcbiAgfTtcbn1cblxuLyoqICpcbiAqIFVwZGF0ZXMgYSBzaW5nbGUgcHJvcGVydHkgb2YgYSBmaWx0ZXJcbiAqL1xuZnVuY3Rpb24gX3VwZGF0ZUZpbHRlclByb3Aoc3RhdGUsIGZpbHRlciwgcHJvcCwgdmFsdWUsIHZhbHVlSW5kZXgsIGRhdGFzZXRJZHM/KSB7XG4gIGxldCBkYXRhc2V0SWRzVG9GaWx0ZXI6IHN0cmluZ1tdID0gW107XG4gIHN3aXRjaCAocHJvcCkge1xuICAgIC8vIFRPRE86IE5leHQgUFIgZm9yIFVJIGlmIHdlIHVwZGF0ZSBmaWx0ZXJEYXRhSWQsIHdlIG5lZWQgdG8gY29uc2lkZXIgdHdvIGNhc2VzOlxuICAgIC8vIDEuIGRhdGFJZCBpcyBlbXB0eTogY3JlYXRlIGEgZGVmYXVsdCBmaWx0ZXJcbiAgICAvLyAyLiBBZGQgYSBuZXcgZGF0YXNldCBpZFxuICAgIGNhc2UgRklMVEVSX1VQREFURVJfUFJPUFMuZGF0YUlkOiB7XG4gICAgICBjb25zdCBvbGREYXRhSWQgPSBbLi4uZmlsdGVyLmRhdGFJZF07XG4gICAgICBmaWx0ZXIgPSBfdXBkYXRlRmlsdGVyRGF0YUlkQXRWYWx1ZUluZGV4KGZpbHRlciwgdmFsdWVJbmRleCwgdmFsdWUsIHN0YXRlLmRhdGFzZXRzKTtcbiAgICAgIGRhdGFzZXRJZHNUb0ZpbHRlciA9IHVuaXEoWy4uLm9sZERhdGFJZCwgLi4uZmlsdGVyLmRhdGFJZF0pO1xuICAgICAgYnJlYWs7XG4gICAgfVxuICAgIGNhc2UgRklMVEVSX1VQREFURVJfUFJPUFMubmFtZToge1xuICAgICAgLy8gd2UgYXJlIHN1cHBvcnRpbmcgdGhlIGN1cnJlbnQgZnVuY3Rpb25hbGl0eVxuICAgICAgLy8gVE9ETzogTmV4dCBQUiBmb3IgVUkgZmlsdGVyIG5hbWUgd2lsbCBvbmx5IHVwZGF0ZSBmaWx0ZXIgbmFtZSBidXQgaXQgd29uJ3QgaGF2ZSBzaWRlIGVmZmVjdHNcbiAgICAgIC8vIHdlIGFyZSBnb25uYSB1c2UgcGFpciBvZiBkYXRhc2V0cyBhbmQgZmllbGRJZHggdG8gdXBkYXRlIHRoZSBmaWx0ZXJcbiAgICAgIGNvbnN0IGRhdGFzZXRJZCA9IGZpbHRlci5kYXRhSWRbdmFsdWVJbmRleF07XG4gICAgICBjb25zdCB7ZmlsdGVyOiB1cGRhdGVkRmlsdGVyLCBkYXRhc2V0OiBuZXdEYXRhc2V0fSA9IGFwcGx5RmlsdGVyRmllbGROYW1lKFxuICAgICAgICBmaWx0ZXIsXG4gICAgICAgIHN0YXRlLmRhdGFzZXRzLFxuICAgICAgICBkYXRhc2V0SWQsXG4gICAgICAgIHZhbHVlLFxuICAgICAgICB2YWx1ZUluZGV4LFxuICAgICAgICB7bWVyZ2VEb21haW46IHZhbHVlSW5kZXggPiAwfVxuICAgICAgKTtcbiAgICAgIGlmICh1cGRhdGVkRmlsdGVyKSB7XG4gICAgICAgIGZpbHRlciA9IHVwZGF0ZWRGaWx0ZXI7XG4gICAgICAgIGlmIChmaWx0ZXIuZ3B1KSB7XG4gICAgICAgICAgZmlsdGVyID0gc2V0RmlsdGVyR3B1TW9kZShmaWx0ZXIsIHN0YXRlLmZpbHRlcnMpO1xuICAgICAgICAgIGZpbHRlciA9IGFzc2lnbkdwdUNoYW5uZWwoZmlsdGVyLCBzdGF0ZS5maWx0ZXJzKTtcbiAgICAgICAgfVxuICAgICAgICBzdGF0ZSA9IHNldChbJ2RhdGFzZXRzJywgZGF0YXNldElkXSwgbmV3RGF0YXNldCwgc3RhdGUpO1xuICAgICAgICAvLyByZW1vdmUgZmlsdGVyIFBsb3QgYXQgZGF0YXNldElkLCBzbyBpdCB3aWxsIGJlIHJlY2FsY3VsYXRlZFxuICAgICAgICBmaWx0ZXIgPSByZW1vdmVGaWx0ZXJQbG90KGZpbHRlciwgZGF0YXNldElkKTtcblxuICAgICAgICBkYXRhc2V0SWRzVG9GaWx0ZXIgPSB1cGRhdGVkRmlsdGVyLmRhdGFJZDtcbiAgICAgIH1cbiAgICAgIC8vIG9ubHkgZmlsdGVyIHRoZSBjdXJyZW50IGRhdGFzZXRcbiAgICAgIGJyZWFrO1xuICAgIH1cblxuICAgIGNhc2UgRklMVEVSX1VQREFURVJfUFJPUFMubGF5ZXJJZDoge1xuICAgICAgLy8gV2UgbmVlZCB0byB1cGRhdGUgb25seSBkYXRhc2V0SWQvcyBpZiB3ZSBoYXZlIGFkZGVkL3JlbW92ZWQgbGF5ZXJzXG4gICAgICAvLyAtIGNoZWNrIGZvciBsYXllcklkIGNoYW5nZXMgKFhPUiB3b3JrcyBiZWNhdXNlIG9mIHN0cmluZyB2YWx1ZXMpXG4gICAgICAvLyBpZiBubyBkaWZmZXJlbmNlcyBiZXR3ZWVuIGxheWVySWRzLCBkb24ndCBkbyBhbnkgZmlsdGVyaW5nXG4gICAgICAvLyBAdHMtaWdub3JlXG4gICAgICBjb25zdCBsYXllcklkRGlmZmVyZW5jZSA9IHhvcih2YWx1ZSwgZmlsdGVyLmxheWVySWQpO1xuXG4gICAgICBjb25zdCBsYXllckRhdGFJZHMgPSB1bmlxPHN0cmluZz4oXG4gICAgICAgIGxheWVySWREaWZmZXJlbmNlXG4gICAgICAgICAgLm1hcChsaWQgPT5cbiAgICAgICAgICAgIGdldChcbiAgICAgICAgICAgICAgc3RhdGUubGF5ZXJzLmZpbmQobCA9PiBsLmlkID09PSBsaWQpLFxuICAgICAgICAgICAgICBbJ2NvbmZpZycsICdkYXRhSWQnXVxuICAgICAgICAgICAgKVxuICAgICAgICAgIClcbiAgICAgICAgICAuZmlsdGVyKGQgPT4gZCkgYXMgc3RyaW5nW11cbiAgICAgICk7XG5cbiAgICAgIC8vIG9ubHkgZmlsdGVyIGRhdGFzZXRzSWRzXG4gICAgICBkYXRhc2V0SWRzVG9GaWx0ZXIgPSBsYXllckRhdGFJZHM7XG5cbiAgICAgIC8vIFVwZGF0ZSBuZXdGaWx0ZXIgZGF0YUlkc1xuICAgICAgY29uc3QgbmV3RGF0YUlkcyA9IHVuaXE8c3RyaW5nPihcbiAgICAgICAgdmFsdWVcbiAgICAgICAgICA/Lm1hcChsaWQgPT5cbiAgICAgICAgICAgIGdldChcbiAgICAgICAgICAgICAgc3RhdGUubGF5ZXJzLmZpbmQobCA9PiBsLmlkID09PSBsaWQpLFxuICAgICAgICAgICAgICBbJ2NvbmZpZycsICdkYXRhSWQnXVxuICAgICAgICAgICAgKVxuICAgICAgICAgIClcbiAgICAgICAgICAuZmlsdGVyKGQgPT4gZCkgYXMgc3RyaW5nW11cbiAgICAgICk7XG5cbiAgICAgIGZpbHRlciA9IHtcbiAgICAgICAgLi4uZmlsdGVyLFxuICAgICAgICBsYXllcklkOiB2YWx1ZSxcbiAgICAgICAgZGF0YUlkOiBuZXdEYXRhSWRzXG4gICAgICB9O1xuICAgICAgYnJlYWs7XG4gICAgfVxuXG4gICAgZGVmYXVsdDpcbiAgICAgIGZpbHRlciA9IHNldChbcHJvcF0sIHZhbHVlLCBmaWx0ZXIpO1xuICAgICAgZGF0YXNldElkc1RvRmlsdGVyID0gWy4uLmZpbHRlci5kYXRhSWRdO1xuICAgICAgYnJlYWs7XG4gIH1cblxuICByZXR1cm4ge2ZpbHRlciwgZGF0YXNldElkcywgZGF0YXNldElkc1RvRmlsdGVyLCBzdGF0ZX07XG59XG4vKiBlc2xpbnQtZW5hYmxlIG1heC1zdGF0ZW1lbnRzICovXG5cbi8qKlxuICogU2V0IHRoZSBwcm9wZXJ0eSBvZiBhIGZpbHRlciBwbG90XG4gKiBAbWVtYmVyb2YgdmlzU3RhdGVVcGRhdGVyc1xuICogQHB1YmxpY1xuICovXG5leHBvcnQgY29uc3Qgc2V0RmlsdGVyUGxvdFVwZGF0ZXIgPSAoXG4gIHN0YXRlOiBWaXNTdGF0ZSxcbiAge2lkeCwgbmV3UHJvcH06IFZpc1N0YXRlQWN0aW9ucy5TZXRGaWx0ZXJQbG90VXBkYXRlckFjdGlvblxuKTogVmlzU3RhdGUgPT4ge1xuICBpZiAoIXN0YXRlLmZpbHRlcnNbaWR4XSkge1xuICAgIENvbnNvbGUuZXJyb3IoYGZpbHRlcnNbJHtpZHh9XSBpcyB1bmRlZmluZWRgKTtcbiAgICByZXR1cm4gc3RhdGU7XG4gIH1cbiAgbGV0IG5ld0ZpbHRlciA9IHN0YXRlLmZpbHRlcnNbaWR4XTtcblxuICBmb3IgKGNvbnN0IHByb3AgaW4gbmV3UHJvcCkge1xuICAgIGlmIChwcm9wID09PSAncGxvdFR5cGUnKSB7XG4gICAgICBuZXdGaWx0ZXIgPSBwaWNrXygncGxvdFR5cGUnKShtZXJnZV8obmV3UHJvcC5wbG90VHlwZSkpKG5ld0ZpbHRlcik7XG4gICAgfSBlbHNlIGlmIChwcm9wID09PSAneUF4aXMnKSB7XG4gICAgICBjb25zdCBjaGFydFR5cGUgPSBuZXdQcm9wLnlBeGlzID8gUExPVF9UWVBFUy5saW5lQ2hhcnQgOiBQTE9UX1RZUEVTLmhpc3RvZ3JhbTtcblxuICAgICAgbmV3RmlsdGVyID0gcGlja18oJ3Bsb3RUeXBlJykobWVyZ2VfKHt0eXBlOiBjaGFydFR5cGV9KSkobWVyZ2VfKG5ld1Byb3ApKG5ld0ZpbHRlcikpO1xuICAgIH1cbiAgfVxuXG4gIG5ld0ZpbHRlciA9IHVwZGF0ZUZpbHRlclBsb3Qoc3RhdGUuZGF0YXNldHMsIG5ld0ZpbHRlcik7XG5cbiAgcmV0dXJuIHtcbiAgICAuLi5zdGF0ZSxcbiAgICBmaWx0ZXJzOiBzdGF0ZS5maWx0ZXJzLm1hcCgoZiwgaSkgPT4gKGkgPT09IGlkeCA/IG5ld0ZpbHRlciA6IGYpKVxuICB9O1xufTtcblxuLyoqXG4gKiBBZGQgYSBuZXcgZmlsdGVyXG4gKiBAbWVtYmVyb2YgdmlzU3RhdGVVcGRhdGVyc1xuICogQHB1YmxpY1xuICovXG5leHBvcnQgY29uc3QgYWRkRmlsdGVyVXBkYXRlciA9IChcbiAgc3RhdGU6IFZpc1N0YXRlLFxuICBhY3Rpb246IFZpc1N0YXRlQWN0aW9ucy5BZGRGaWx0ZXJVcGRhdGVyQWN0aW9uXG4pOiBWaXNTdGF0ZSA9PlxuICAhYWN0aW9uLmRhdGFJZFxuICAgID8gc3RhdGVcbiAgICA6IHtcbiAgICAgICAgLi4uc3RhdGUsXG4gICAgICAgIGZpbHRlcnM6IFsuLi5zdGF0ZS5maWx0ZXJzLCBnZXREZWZhdWx0RmlsdGVyKHtkYXRhSWQ6IGFjdGlvbi5kYXRhSWQsIGlkOiBhY3Rpb24uaWR9KV1cbiAgICAgIH07XG5cbi8qKlxuICogQ3JlYXRlIG9yIHVwZGF0ZSBhIGZpbHRlclxuICogQG1lbWJlcm9mIHZpc1N0YXRlVXBkYXRlcnNcbiAqIEBwdWJsaWNcbiAqL1xuZXhwb3J0IGNvbnN0IGNyZWF0ZU9yVXBkYXRlRmlsdGVyVXBkYXRlciA9IChcbiAgc3RhdGU6IFZpc1N0YXRlLFxuICBhY3Rpb246IFZpc1N0YXRlQWN0aW9ucy5DcmVhdGVPclVwZGF0ZUZpbHRlclVwZGF0ZXJBY3Rpb25cbik6IFZpc1N0YXRlID0+IHtcbiAgY29uc3Qge2lkLCBkYXRhSWQsIGZpZWxkLCB2YWx1ZX0gPSBhY3Rpb247XG5cbiAgbGV0IG5ld1N0YXRlID0gc3RhdGU7XG4gIGNvbnN0IG9yaWdpbmFsSW5kZXggPSBuZXdTdGF0ZS5maWx0ZXJzLmZpbmRJbmRleChmID0+IGYuaWQgPT09IGlkKTtcbiAgbGV0IGZpbHRlckluZGV4ID0gb3JpZ2luYWxJbmRleDtcbiAgaWYgKCFpZCAmJiAhZGF0YUlkKSB7XG4gICAgcmV0dXJuIG5ld1N0YXRlO1xuICB9XG4gIGlmIChvcmlnaW5hbEluZGV4IDwgMCAmJiBkYXRhSWQpIHtcbiAgICBuZXdTdGF0ZSA9IGFkZEZpbHRlclVwZGF0ZXIobmV3U3RhdGUsIHtkYXRhSWR9KTtcbiAgICBpZiAobmV3U3RhdGUuZmlsdGVycy5sZW5ndGggIT09IHN0YXRlLmZpbHRlcnMubGVuZ3RoICsgMSkge1xuICAgICAgLy8gTm8gbmV3IGZpbHRlciB3YXMgYWRkZWRcbiAgICAgIHJldHVybiBzdGF0ZTtcbiAgICB9XG4gICAgLy8gSGVyZSB3ZSBhcmUgYXNzdW1pbmcgdGhhdCB0aGUgZmlsdGVyIHdhcyBhZGRlZCBhdCB0aGUgZW5kXG4gICAgZmlsdGVySW5kZXggPSBuZXdTdGF0ZS5maWx0ZXJzLmxlbmd0aCAtIDE7XG4gICAgbmV3U3RhdGUuZmlsdGVyc1tmaWx0ZXJJbmRleF0gPSB7XG4gICAgICAuLi5uZXdTdGF0ZS5maWx0ZXJzW2ZpbHRlckluZGV4XSxcbiAgICAgIC4uLihpZCA/IHtpZH0gOiBudWxsKVxuICAgIH07XG4gIH1cblxuICAvLyBObyBuZWVkIHRvIHVwZGF0ZSB0aGlzIGlmIGl0J3MgYSBuZXdseSBjcmVhdGVkIGZpbHRlclxuICAvLyBGaXJzdCB3ZSBtYWtlIHN1cmUgYWxsIHRoZSBkYXRhSWRzIHRoYXQgZmllbGRzIHJlZmVyIHRvIGFyZSB1cGRhdGVkXG4gIGlmIChvcmlnaW5hbEluZGV4ID49IDAgJiYgZGF0YUlkKSB7XG4gICAgLy8gSWYgdGhlIGRhdGFJZCBpcyBhbiBhcnJheSwgd2UgbmVlZCB0byB1cGRhdGUgZWFjaCBvbmUgaW5kaXZpZHVhbGx5IGFzIHRoZXkgbmVlZCBhIGNvcnJlY3QgdmFsdWVJbmRleCBwYXNzZWRcbiAgICBuZXdTdGF0ZSA9IChBcnJheS5pc0FycmF5KGRhdGFJZCkgPyBkYXRhSWQgOiBbZGF0YUlkXSkucmVkdWNlKChhY2N1LCBkLCBpbmRleCkgPT4ge1xuICAgICAgcmV0dXJuIHNldEZpbHRlclVwZGF0ZXIoYWNjdSwge1xuICAgICAgICBpZHg6IGZpbHRlckluZGV4LFxuICAgICAgICBwcm9wOiAnZGF0YUlkJyxcbiAgICAgICAgdmFsdWU6IGQsXG4gICAgICAgIHZhbHVlSW5kZXg6IGluZGV4XG4gICAgICB9KTtcbiAgICB9LCBuZXdTdGF0ZSk7XG4gIH1cbiAgLy8gVGhlbiB3ZSB1cGRhdGUgdGhlIGZpZWxkc1xuICBpZiAoZmllbGQpIHtcbiAgICAvLyBJZiB0aGUgZmllbGQgaXMgYW4gYXJyYXksIHdlIG5lZWQgdG8gdXBkYXRlIGVhY2ggZmllbGQgaW5kaXZpZHVhbGx5IGFzIHRoZXkgbmVlZCBhIGNvcnJlY3QgdmFsdWVJbmRleCBwYXNzZWRcbiAgICBuZXdTdGF0ZSA9IChBcnJheS5pc0FycmF5KGZpZWxkKSA/IGZpZWxkIDogW2ZpZWxkXSkucmVkdWNlKChhY2N1LCBmLCBpbmRleCkgPT4ge1xuICAgICAgcmV0dXJuIHNldEZpbHRlclVwZGF0ZXIoYWNjdSwge1xuICAgICAgICBpZHg6IGZpbHRlckluZGV4LFxuICAgICAgICBwcm9wOiAnbmFtZScsXG4gICAgICAgIHZhbHVlOiBmLFxuICAgICAgICB2YWx1ZUluZGV4OiBpbmRleFxuICAgICAgfSk7XG4gICAgfSwgbmV3U3RhdGUpO1xuICB9XG4gIC8vIFRoZW4gd2UgdXBkYXRlIHRoZSB2YWx1ZSBzZXBhcmF0ZWx5XG4gIGlmICh2YWx1ZSAhPT0gbnVsbCAmJiB0eXBlb2YgdmFsdWUgIT09ICd1bmRlZmluZWQnKSB7XG4gICAgbmV3U3RhdGUgPSBzZXRGaWx0ZXJVcGRhdGVyKG5ld1N0YXRlLCB7aWR4OiBmaWx0ZXJJbmRleCwgcHJvcDogJ3ZhbHVlJywgdmFsdWV9KTtcbiAgfVxuXG4gIHJldHVybiBuZXdTdGF0ZTtcbn07XG5cbi8qKlxuICogU2V0IGxheWVyIGNvbG9yIHBhbGV0dGUgdWkgc3RhdGVcbiAqIEBtZW1iZXJvZiB2aXNTdGF0ZVVwZGF0ZXJzXG4gKi9cbmV4cG9ydCBjb25zdCBsYXllckNvbG9yVUlDaGFuZ2VVcGRhdGVyID0gKFxuICBzdGF0ZTogVmlzU3RhdGUsXG4gIHtvbGRMYXllciwgcHJvcCwgbmV3Q29uZmlnfTogVmlzU3RhdGVBY3Rpb25zLkxheWVyQ29sb3JVSUNoYW5nZVVwZGF0ZXJBY3Rpb25cbik6IFZpc1N0YXRlID0+IHtcbiAgY29uc3Qgb2xkVml4Q29uZmlnID0gb2xkTGF5ZXIuY29uZmlnLnZpc0NvbmZpZ1twcm9wXTtcbiAgY29uc3QgbmV3TGF5ZXIgPSBvbGRMYXllci51cGRhdGVMYXllckNvbG9yVUkocHJvcCwgbmV3Q29uZmlnKTtcbiAgY29uc3QgbmV3VmlzQ29uZmlnID0gbmV3TGF5ZXIuY29uZmlnLnZpc0NvbmZpZ1twcm9wXTtcbiAgaWYgKG9sZFZpeENvbmZpZyAhPT0gbmV3VmlzQ29uZmlnKSB7XG4gICAgcmV0dXJuIGxheWVyVmlzQ29uZmlnQ2hhbmdlVXBkYXRlcihzdGF0ZSwge1xuICAgICAgb2xkTGF5ZXIsXG4gICAgICBuZXdWaXNDb25maWc6IHtcbiAgICAgICAgW3Byb3BdOiBuZXdWaXNDb25maWdcbiAgICAgIH1cbiAgICB9KTtcbiAgfVxuICByZXR1cm4ge1xuICAgIC4uLnN0YXRlLFxuICAgIGxheWVyczogc3RhdGUubGF5ZXJzLm1hcChsID0+IChsLmlkID09PSBvbGRMYXllci5pZCA/IG5ld0xheWVyIDogbCkpXG4gIH07XG59O1xuXG4vKipcbiAqIFN0YXJ0IGFuZCBlbmQgZmlsdGVyIGFuaW1hdGlvblxuICogQG1lbWJlcm9mIHZpc1N0YXRlVXBkYXRlcnNcbiAqIEBwdWJsaWNcbiAqL1xuZXhwb3J0IGNvbnN0IHRvZ2dsZUZpbHRlckFuaW1hdGlvblVwZGF0ZXIgPSAoXG4gIHN0YXRlOiBWaXNTdGF0ZSxcbiAgYWN0aW9uOiBWaXNTdGF0ZUFjdGlvbnMuVG9nZ2xlRmlsdGVyQW5pbWF0aW9uVXBkYXRlckFjdGlvblxuKTogVmlzU3RhdGUgPT4gKHtcbiAgLi4uc3RhdGUsXG4gIGZpbHRlcnM6IHN0YXRlLmZpbHRlcnMubWFwKChmLCBpKSA9PiAoaSA9PT0gYWN0aW9uLmlkeCA/IHsuLi5mLCBpc0FuaW1hdGluZzogIWYuaXNBbmltYXRpbmd9IDogZikpXG59KTtcblxuZXhwb3J0IGZ1bmN0aW9uIGlzRmlsdGVyQW5pbWF0aW9uQ29uZmlnKGNvbmZpZzogQW5pbWF0aW9uQ29uZmlnIHwgRmlsdGVyQW5pbWF0aW9uQ29uZmlnKTogYm9vbGVhbiB7XG4gIHJldHVybiAnZGF0YUlkJyBpbiBjb25maWcgJiYgJ2FuaW1hdGlvbldpbmRvdycgaW4gY29uZmlnO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gc2V0QW5pbWF0aW9uQ29uZmlnVXBkYXRlcihcbiAgc3RhdGU6IFZpc1N0YXRlLFxuICBhY3Rpb246IFZpc1N0YXRlQWN0aW9ucy5TZXRBbmltYXRpb25Db25maWdVcGRhdGVyQWN0aW9uXG4pOiBWaXNTdGF0ZSB7XG4gIGNvbnN0IHtjb25maWd9ID0gYWN0aW9uO1xuICBpZiAoaXNGaWx0ZXJBbmltYXRpb25Db25maWcoY29uZmlnKSkge1xuICAgIC8vIEZpbmQgZmlsdGVyIHVzZWQgZm9yIGFuaW1hdGlvblxuICAgIC8vIEFzc3VtaW5nIHRoZXJlJ3Mgb25seSBvbmUgZmlsdGVyIHVzZWQgZm9yIGFuaW1hdGlvbiwgc2VlIHNldEZpbHRlclZpZXdVcGRhdGVyXG4gICAgY29uc3QgZmlsdGVyID0gc3RhdGUuZmlsdGVycy5maW5kKGYgPT4gIWlzU2lkZUZpbHRlcihmKSk7XG4gICAgaWYgKCFmaWx0ZXIpIHtcbiAgICAgIHJldHVybiBzdGF0ZTtcbiAgICB9XG4gICAgY29uc3QgbmV3RmlsdGVyID0gey4uLmZpbHRlciwgLi4uY29uZmlnfTtcbiAgICByZXR1cm4gYXBwbHlGaWx0ZXJDb25maWdVcGRhdGVyKHN0YXRlLCBhcHBseUZpbHRlckNvbmZpZyhmaWx0ZXIuaWQsIG5ld0ZpbHRlcikpO1xuICB9IGVsc2Uge1xuICAgIHJldHVybiB7XG4gICAgICAuLi5zdGF0ZSxcbiAgICAgIGFuaW1hdGlvbkNvbmZpZzoge1xuICAgICAgICAuLi5zdGF0ZS5hbmltYXRpb25Db25maWcsXG4gICAgICAgIC4uLmNvbmZpZ1xuICAgICAgfVxuICAgIH07XG4gIH1cbn1cblxuLyoqXG4gKiBAbWVtYmVyb2YgdmlzU3RhdGVVcGRhdGVyc1xuICogQHB1YmxpY1xuICovXG5leHBvcnQgY29uc3QgdG9nZ2xlTGF5ZXJBbmltYXRpb25VcGRhdGVyID0gKFxuICBzdGF0ZTogVmlzU3RhdGUsXG4gIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBAdHlwZXNjcmlwdC1lc2xpbnQvbm8tdW51c2VkLXZhcnNcbiAgYWN0aW9uOiBWaXNTdGF0ZUFjdGlvbnMuVG9nZ2xlTGF5ZXJBbmltYXRpb25VcGRhdGVyQWN0aW9uXG4pOiBWaXNTdGF0ZSA9PiAoe1xuICAuLi5zdGF0ZSxcbiAgYW5pbWF0aW9uQ29uZmlnOiB7XG4gICAgLi4uc3RhdGUuYW5pbWF0aW9uQ29uZmlnLFxuICAgIGlzQW5pbWF0aW5nOiAhc3RhdGUuYW5pbWF0aW9uQ29uZmlnLmlzQW5pbWF0aW5nXG4gIH1cbn0pO1xuXG4vKipcbiAqIEhpZGUgYW5kIHNob3cgbGF5ZXIgYW5pbWF0aW9uIGNvbnRyb2xcbiAqIEBtZW1iZXJvZiB2aXNTdGF0ZVVwZGF0ZXJzXG4gKiBAcHVibGljXG4gKi9cbmV4cG9ydCBjb25zdCB0b2dnbGVMYXllckFuaW1hdGlvbkNvbnRyb2xVcGRhdGVyID0gKHN0YXRlOiBWaXNTdGF0ZSk6IFZpc1N0YXRlID0+ICh7XG4gIC4uLnN0YXRlLFxuICBhbmltYXRpb25Db25maWc6IHtcbiAgICAuLi5zdGF0ZS5hbmltYXRpb25Db25maWcsXG4gICAgaGlkZUNvbnRyb2w6ICFzdGF0ZS5hbmltYXRpb25Db25maWcuaGlkZUNvbnRyb2xcbiAgfVxufSk7XG5cbi8qKlxuICogQ2hhbmdlIGZpbHRlciBhbmltYXRpb24gc3BlZWRcbiAqIEBtZW1iZXJvZiB2aXNTdGF0ZVVwZGF0ZXJzXG4gKiBAcHVibGljXG4gKi9cbmV4cG9ydCBjb25zdCB1cGRhdGVGaWx0ZXJBbmltYXRpb25TcGVlZFVwZGF0ZXIgPSAoXG4gIHN0YXRlOiBWaXNTdGF0ZSxcbiAgYWN0aW9uOiBWaXNTdGF0ZUFjdGlvbnMuVXBkYXRlRmlsdGVyQW5pbWF0aW9uU3BlZWRVcGRhdGVyQWN0aW9uXG4pOiBWaXNTdGF0ZSA9PiAoe1xuICAuLi5zdGF0ZSxcbiAgZmlsdGVyczogc3RhdGUuZmlsdGVycy5tYXAoKGYsIGkpID0+IChpID09PSBhY3Rpb24uaWR4ID8gey4uLmYsIHNwZWVkOiBhY3Rpb24uc3BlZWR9IDogZikpXG59KTtcblxuLyoqXG4gKiBVcGRhdGUgYW5pbWF0aW9uIHNwZWVkIHdpdGggdGhlIHZlcnRpY2FsIHNwZWVkIHNsaWRlclxuICogQG1lbWJlcm9mIHZpc1N0YXRlVXBkYXRlcnNcbiAqIEBwdWJsaWNcbiAqXG4gKi9cbmV4cG9ydCBjb25zdCB1cGRhdGVMYXllckFuaW1hdGlvblNwZWVkVXBkYXRlciA9IChcbiAgc3RhdGU6IFZpc1N0YXRlLFxuICB7c3BlZWR9OiBWaXNTdGF0ZUFjdGlvbnMuVXBkYXRlTGF5ZXJBbmltYXRpb25TcGVlZFVwZGF0ZXJBY3Rpb25cbik6IFZpc1N0YXRlID0+IHtcbiAgcmV0dXJuIHtcbiAgICAuLi5zdGF0ZSxcbiAgICBhbmltYXRpb25Db25maWc6IHtcbiAgICAgIC4uLnN0YXRlLmFuaW1hdGlvbkNvbmZpZyxcbiAgICAgIHNwZWVkXG4gICAgfVxuICB9O1xufTtcblxuLyoqXG4gKiBTaG93IGxhcmdlciB0aW1lIGZpbHRlciBhdCBib3R0b20gZm9yIHRpbWUgcGxheWJhY2sgKGFwcGx5IHRvIHRpbWUgZmlsdGVyIG9ubHkpXG4gKiBAbWVtYmVyb2YgdmlzU3RhdGVVcGRhdGVyc1xuICogQHB1YmxpY1xuICovXG5leHBvcnQgY29uc3Qgc2V0RmlsdGVyVmlld1VwZGF0ZXIgPSAoXG4gIHN0YXRlOiBWaXNTdGF0ZSxcbiAgYWN0aW9uOiBWaXNTdGF0ZUFjdGlvbnMuU2V0RmlsdGVyVmlld1VwZGF0ZXJBY3Rpb25cbikgPT4ge1xuICBjb25zdCB7dmlldywgaWR4fSA9IGFjdGlvbjtcbiAgY29uc3Qgc2hvdWxkUmVzZXRPdGhlckZpbHRlcnNWaWV3ID0gdmlldyA9PT0gRklMVEVSX1ZJRVdfVFlQRVMuZW5sYXJnZWQ7XG4gIHJldHVybiB7XG4gICAgLi4uc3RhdGUsXG4gICAgZmlsdGVyczogc3RhdGUuZmlsdGVycy5tYXAoKGYsIGkpID0+XG4gICAgICBpID09PSBpZHhcbiAgICAgICAgPyB7XG4gICAgICAgICAgICAuLi5mLFxuICAgICAgICAgICAgdmlld1xuICAgICAgICAgIH1cbiAgICAgICAgOiBzaG91bGRSZXNldE90aGVyRmlsdGVyc1ZpZXdcbiAgICAgICAgPyB7XG4gICAgICAgICAgICAuLi5mLFxuICAgICAgICAgICAgdmlldzogRklMVEVSX1ZJRVdfVFlQRVMuc2lkZVxuICAgICAgICAgIH1cbiAgICAgICAgOiBmXG4gICAgKVxuICB9O1xufTtcblxuLyoqXG4gKiBUb2dnbGVzIGZpbHRlciBmZWF0dXJlIHZpc2liaWxpdHlcbiAqIEBtZW1iZXJvZiB2aXNTdGF0ZVVwZGF0ZXJzXG4gKi9cbmV4cG9ydCBjb25zdCB0b2dnbGVGaWx0ZXJGZWF0dXJlVXBkYXRlciA9IChcbiAgc3RhdGU6IFZpc1N0YXRlLFxuICBhY3Rpb246IFZpc1N0YXRlQWN0aW9ucy5Ub2dnbGVGaWx0ZXJGZWF0dXJlVXBkYXRlckFjdGlvblxuKTogVmlzU3RhdGUgPT4ge1xuICBjb25zdCBmaWx0ZXIgPSBzdGF0ZS5maWx0ZXJzW2FjdGlvbi5pZHhdO1xuICBjb25zdCBpc1Zpc2libGUgPSBnZXQoZmlsdGVyLCBbJ3ZhbHVlJywgJ3Byb3BlcnRpZXMnLCAnaXNWaXNpYmxlJ10pO1xuXG4gIGxldCBuZXdTdGF0ZSA9IHNldEZpbHRlclVwZGF0ZXIoc3RhdGUsIHtcbiAgICBpZHg6IGFjdGlvbi5pZHgsXG4gICAgcHJvcDogJ2VuYWJsZWQnLFxuICAgIHZhbHVlOiAhaXNWaXNpYmxlXG4gIH0pO1xuXG4gIG5ld1N0YXRlID0gc2V0RmlsdGVyVXBkYXRlcihuZXdTdGF0ZSwge1xuICAgIGlkeDogYWN0aW9uLmlkeCxcbiAgICBwcm9wOiAndmFsdWUnLFxuICAgIHZhbHVlOiBmZWF0dXJlVG9GaWx0ZXJWYWx1ZShmaWx0ZXIudmFsdWUsIGZpbHRlci5pZCwge1xuICAgICAgaXNWaXNpYmxlOiAhaXNWaXNpYmxlXG4gICAgfSlcbiAgfSk7XG5cbiAgcmV0dXJuIG5ld1N0YXRlO1xufTtcblxuLyoqXG4gKiBSZW1vdmUgYSBmaWx0ZXJcbiAqIEBtZW1iZXJvZiB2aXNTdGF0ZVVwZGF0ZXJzXG4gKiBAcHVibGljXG4gKi9cbmV4cG9ydCBjb25zdCByZW1vdmVGaWx0ZXJVcGRhdGVyID0gKFxuICBzdGF0ZTogVmlzU3RhdGUsXG4gIGFjdGlvbjogVmlzU3RhdGVBY3Rpb25zLlJlbW92ZUZpbHRlclVwZGF0ZXJBY3Rpb25cbik6IFZpc1N0YXRlID0+IHtcbiAgY29uc3Qge2lkeH0gPSBhY3Rpb247XG4gIGNvbnN0IHtkYXRhSWQsIGlkfSA9IHN0YXRlLmZpbHRlcnNbaWR4XTtcblxuICBjb25zdCBuZXdGaWx0ZXJzID0gW1xuICAgIC4uLnN0YXRlLmZpbHRlcnMuc2xpY2UoMCwgaWR4KSxcbiAgICAuLi5zdGF0ZS5maWx0ZXJzLnNsaWNlKGlkeCArIDEsIHN0YXRlLmZpbHRlcnMubGVuZ3RoKVxuICBdO1xuXG4gIGNvbnN0IGZpbHRlcmVkRGF0YXNldHMgPSBhcHBseUZpbHRlcnNUb0RhdGFzZXRzKGRhdGFJZCwgc3RhdGUuZGF0YXNldHMsIG5ld0ZpbHRlcnMsIHN0YXRlLmxheWVycyk7XG4gIGNvbnN0IG5ld0VkaXRvciA9XG4gICAgZ2V0RmlsdGVySWRJbkZlYXR1cmUoc3RhdGUuZWRpdG9yLnNlbGVjdGVkRmVhdHVyZSkgPT09IGlkXG4gICAgICA/IHtcbiAgICAgICAgICAuLi5zdGF0ZS5lZGl0b3IsXG4gICAgICAgICAgc2VsZWN0ZWRGZWF0dXJlOiBudWxsXG4gICAgICAgIH1cbiAgICAgIDogc3RhdGUuZWRpdG9yO1xuXG4gIGxldCBuZXdTdGF0ZSA9IHNldChbJ2ZpbHRlcnMnXSwgbmV3RmlsdGVycywgc3RhdGUpO1xuICBuZXdTdGF0ZSA9IHNldChbJ2RhdGFzZXRzJ10sIGZpbHRlcmVkRGF0YXNldHMsIG5ld1N0YXRlKTtcbiAgbmV3U3RhdGUgPSBzZXQoWydlZGl0b3InXSwgbmV3RWRpdG9yLCBuZXdTdGF0ZSk7XG5cbiAgcmV0dXJuIHVwZGF0ZUFsbExheWVyRG9tYWluRGF0YShuZXdTdGF0ZSwgZGF0YUlkLCB1bmRlZmluZWQpO1xufTtcblxuLyoqXG4gKiBBZGQgYSBuZXcgbGF5ZXJcbiAqIEBtZW1iZXJvZiB2aXNTdGF0ZVVwZGF0ZXJzXG4gKiBAcHVibGljXG4gKi9cbmV4cG9ydCBjb25zdCBhZGRMYXllclVwZGF0ZXIgPSAoXG4gIHN0YXRlOiBWaXNTdGF0ZSxcbiAgYWN0aW9uOiBWaXNTdGF0ZUFjdGlvbnMuQWRkTGF5ZXJVcGRhdGVyQWN0aW9uXG4pOiBWaXNTdGF0ZSA9PiB7XG4gIGxldCBuZXdMYXllcjtcbiAgbGV0IG5ld0xheWVyRGF0YTtcbiAgaWYgKGFjdGlvbi5jb25maWcpIHtcbiAgICBuZXdMYXllciA9IGNyZWF0ZUxheWVyRnJvbUNvbmZpZyhzdGF0ZSwgYWN0aW9uLmNvbmZpZyk7XG4gICAgaWYgKCFuZXdMYXllcikge1xuICAgICAgQ29uc29sZS53YXJuKFxuICAgICAgICAnRmFpbGVkIHRvIGNyZWF0ZSBsYXllciBmcm9tIGNvbmZpZywgaXQgdXN1YWxseSBtZWFucyB0aGUgY29uZmlnIGlzIG5vdCBiZSBpbiBjb3JyZWN0IGZvcm1hdCcsXG4gICAgICAgIGFjdGlvbi5jb25maWdcbiAgICAgICk7XG4gICAgICByZXR1cm4gc3RhdGU7XG4gICAgfVxuXG4gICAgY29uc3QgcmVzdWx0ID0gY2FsY3VsYXRlTGF5ZXJEYXRhKG5ld0xheWVyLCBzdGF0ZSk7XG4gICAgbmV3TGF5ZXIgPSByZXN1bHQubGF5ZXI7XG4gICAgbmV3TGF5ZXJEYXRhID0gcmVzdWx0LmxheWVyRGF0YTtcbiAgfSBlbHNlIHtcbiAgICAvLyBjcmVhdGUgYW4gZW1wdHkgbGF5ZXIgd2l0aCBhIHNwZWNpZmljIGRhdGFzZXQgb3IgYSBkZWZhdWx0IG9uZVxuICAgIGNvbnN0IGRlZmF1bHREYXRhc2V0ID0gYWN0aW9uLmRhdGFzZXRJZCA/PyBPYmplY3Qua2V5cyhzdGF0ZS5kYXRhc2V0cylbMF07XG4gICAgbmV3TGF5ZXIgPSBuZXcgTGF5ZXIoe1xuICAgICAgaXNWaXNpYmxlOiB0cnVlLFxuICAgICAgaXNDb25maWdBY3RpdmU6IHRydWUsXG4gICAgICBkYXRhSWQ6IGRlZmF1bHREYXRhc2V0XG4gICAgfSk7XG4gICAgbmV3TGF5ZXJEYXRhID0ge307XG4gIH1cblxuICBsZXQgbmV3U3RhdGUgPSB7XG4gICAgLi4uc3RhdGUsXG4gICAgbGF5ZXJzOiBbLi4uc3RhdGUubGF5ZXJzLCBuZXdMYXllcl0sXG4gICAgbGF5ZXJEYXRhOiBbLi4uc3RhdGUubGF5ZXJEYXRhLCBuZXdMYXllckRhdGFdLFxuICAgIC8vIGFkZCBuZXcgbGF5ZXIgYXQgdGhlIHRvcFxuICAgIGxheWVyT3JkZXI6IFtuZXdMYXllci5pZCwgLi4uc3RhdGUubGF5ZXJPcmRlcl0sXG4gICAgc3BsaXRNYXBzOiBhZGROZXdMYXllcnNUb1NwbGl0TWFwKHN0YXRlLnNwbGl0TWFwcywgbmV3TGF5ZXIpXG4gIH07XG5cbiAgaWYgKG5ld0xheWVyLmNvbmZpZy5hbmltYXRpb24uZW5hYmxlZCkge1xuICAgIG5ld1N0YXRlID0gdXBkYXRlQW5pbWF0aW9uRG9tYWluKG5ld1N0YXRlKTtcbiAgfVxuXG4gIHJldHVybiBuZXdTdGF0ZTtcbn07XG5cbi8qKlxuICogcmVtb3ZlIGxheWVyXG4gKiBAbWVtYmVyb2YgdmlzU3RhdGVVcGRhdGVyc1xuICogQHB1YmxpY1xuICovXG5leHBvcnQgZnVuY3Rpb24gcmVtb3ZlTGF5ZXJVcGRhdGVyPFQgZXh0ZW5kcyBWaXNTdGF0ZT4oXG4gIHN0YXRlOiBULFxuICB7aWR9OiBWaXNTdGF0ZUFjdGlvbnMuUmVtb3ZlTGF5ZXJVcGRhdGVyQWN0aW9uXG4pOiBUIHtcbiAgY29uc3QgaWR4ID0gTnVtYmVyLmlzRmluaXRlKGlkKVxuICAgID8gLy8gc3VwcG9ydCBvbGRlciBBUEksIHJlbW92ZSBsYXllciBieSBpZHhcbiAgICAgIE51bWJlcihpZClcbiAgICA6IHN0YXRlLmxheWVycy5maW5kSW5kZXgobCA9PiBsLmlkID09PSBpZCk7XG4gIGlmIChpZHggPCAwIHx8IGlkeCA+PSBzdGF0ZS5sYXllcnMubGVuZ3RoKSB7XG4gICAgLy8gaW52YWxpZCBpbmRleFxuICAgIENvbnNvbGUud2FybihgY2FuIG5vdCByZW1vdmUgbGF5ZXIgd2l0aCBpbnZhbGlkIGlkfGlkeCAke2lkfWApO1xuICAgIHJldHVybiBzdGF0ZTtcbiAgfVxuXG4gIGNvbnN0IHtsYXllcnMsIGxheWVyRGF0YSwgbGF5ZXJPcmRlciwgY2xpY2tlZCwgaG92ZXJJbmZvfSA9IHN0YXRlO1xuICBjb25zdCBsYXllclRvUmVtb3ZlID0gbGF5ZXJzW2lkeF07XG4gIGNvbnN0IG5ld1N0YXRlID0ge1xuICAgIC4uLnN0YXRlLFxuICAgIGxheWVyczogZmlsdGVyT3V0QnlJZChsYXllclRvUmVtb3ZlLmlkKShsYXllcnMpLFxuICAgIGxheWVyRGF0YTogcmVtb3ZlRWxlbWVudEF0SW5kZXgoaWR4KShsYXllckRhdGEpLFxuICAgIGxheWVyT3JkZXI6IGxheWVyT3JkZXIuZmlsdGVyKGxheWVySWQgPT4gbGF5ZXJJZCAhPT0gbGF5ZXJUb1JlbW92ZS5pZCksXG4gICAgY2xpY2tlZDogbGF5ZXJUb1JlbW92ZS5pc0xheWVySG92ZXJlZChjbGlja2VkKSA/IHVuZGVmaW5lZCA6IGNsaWNrZWQsXG4gICAgaG92ZXJJbmZvOiBsYXllclRvUmVtb3ZlLmlzTGF5ZXJIb3ZlcmVkKGhvdmVySW5mbykgPyB1bmRlZmluZWQgOiBob3ZlckluZm8sXG4gICAgc3BsaXRNYXBzOiByZW1vdmVMYXllckZyb21TcGxpdE1hcHMoc3RhdGUuc3BsaXRNYXBzLCBsYXllclRvUmVtb3ZlKVxuICAgIC8vIFRPRE86IHVwZGF0ZSBmaWx0ZXJzLCBjcmVhdGUgaGVscGVyIHRvIHJlbW92ZSBsYXllciBmb3JtIGZpbHRlciAocmVtb3ZlIGxheWVyaWQgYW5kIGRhdGFpZCkgaWYgbWFwcGVkXG4gIH07XG5cbiAgcmV0dXJuIHVwZGF0ZUFuaW1hdGlvbkRvbWFpbihuZXdTdGF0ZSk7XG59XG5cbi8qKlxuICogUmVvcmRlciBsYXllclxuICogQG1lbWJlcm9mIHZpc1N0YXRlVXBkYXRlcnNcbiAqIEBwdWJsaWNcbiAqL1xuZXhwb3J0IGNvbnN0IHJlb3JkZXJMYXllclVwZGF0ZXIgPSAoXG4gIHN0YXRlOiBWaXNTdGF0ZSxcbiAge29yZGVyfTogVmlzU3RhdGVBY3Rpb25zLlJlb3JkZXJMYXllclVwZGF0ZXJBY3Rpb25cbik6IFZpc1N0YXRlID0+ICh7XG4gIC4uLnN0YXRlLFxuICBsYXllck9yZGVyOiBvcmRlclxufSk7XG5cbi8qKlxuICogZHVwbGljYXRlIGxheWVyXG4gKiBAbWVtYmVyb2YgdmlzU3RhdGVVcGRhdGVyc1xuICogQHB1YmxpY1xuICovXG5leHBvcnQgY29uc3QgZHVwbGljYXRlTGF5ZXJVcGRhdGVyID0gKFxuICBzdGF0ZTogVmlzU3RhdGUsXG4gIHtpZH06IFZpc1N0YXRlQWN0aW9ucy5EdXBsaWNhdGVMYXllclVwZGF0ZXJBY3Rpb25cbik6IFZpc1N0YXRlID0+IHtcbiAgY29uc3QgaWR4ID0gTnVtYmVyLmlzRmluaXRlKGlkKVxuICAgID8gLy8gc3VwcG9ydCBvbGRlciBBUEksIHJlbW92ZSBsYXllciBieSBpZHhcbiAgICAgIE51bWJlcihpZClcbiAgICA6IHN0YXRlLmxheWVycy5maW5kSW5kZXgobCA9PiBsLmlkID09PSBpZCk7XG4gIGlmIChpZHggPCAwIHx8ICFzdGF0ZS5sYXllcnNbaWR4XSkge1xuICAgIENvbnNvbGUud2FybihgbGF5ZXIgJHtpZHh9IG5vdCBmb3VuZCBpbiBsYXllck9yZGVyYCk7XG4gICAgcmV0dXJuIHN0YXRlO1xuICB9XG5cbiAgY29uc3Qge2xheWVyc30gPSBzdGF0ZTtcbiAgY29uc3Qgb3JpZ2luYWwgPSBsYXllcnNbaWR4XTtcblxuICBjb25zdCBvcmlnaW5hbExheWVyT3JkZXJJZHggPSBzdGF0ZS5sYXllck9yZGVyLmZpbmRJbmRleChsaWQgPT4gbGlkID09PSBvcmlnaW5hbC5pZCk7XG4gIGxldCBuZXdMYWJlbCA9IGBDb3B5IG9mICR7b3JpZ2luYWwuY29uZmlnLmxhYmVsfWA7XG4gIGxldCBwb3N0Zml4ID0gMDtcbiAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIG5vLWxvb3AtZnVuY1xuICB3aGlsZSAobGF5ZXJzLmZpbmQobCA9PiBsLmNvbmZpZy5sYWJlbCA9PT0gbmV3TGFiZWwpKSB7XG4gICAgbmV3TGFiZWwgPSBgQ29weSBvZiAke29yaWdpbmFsLmNvbmZpZy5sYWJlbH0gJHsrK3Bvc3RmaXh9YDtcbiAgfVxuXG4gIC8vIGNvbGxlY3QgbGF5ZXIgY29uZmlnIGZyb20gb3JpZ2luYWxcbiAgY29uc3QgbG9hZGVkTGF5ZXIgPSBzZXJpYWxpemVMYXllcihvcmlnaW5hbCwgc3RhdGUuc2NoZW1hKTtcblxuICAvLyBhc3NpZ24gbmV3IGlkIGFuZCBsYWJlbCB0byBjb3BpZWQgbGF5ZXJcbiAgaWYgKCFsb2FkZWRMYXllcj8uY29uZmlnKSB7XG4gICAgcmV0dXJuIHN0YXRlO1xuICB9XG4gIGxvYWRlZExheWVyLmNvbmZpZy5sYWJlbCA9IG5ld0xhYmVsO1xuICBsb2FkZWRMYXllci5pZCA9IGdlbmVyYXRlSGFzaElkKExBWUVSX0lEX0xFTkdUSCk7XG5cbiAgLy8gYWRkIGxheWVyIHRvIHN0YXRlXG4gIGxldCBuZXh0U3RhdGUgPSBhZGRMYXllclVwZGF0ZXIoc3RhdGUsIHtjb25maWc6IGxvYWRlZExheWVyfSk7XG4gIC8vIHJldHJpZXZlIG5ld2x5IGNyZWF0ZWQgbGF5ZXJcbiAgY29uc3QgbmV3TGF5ZXIgPSBuZXh0U3RhdGUubGF5ZXJzW25leHRTdGF0ZS5sYXllcnMubGVuZ3RoIC0gMV07XG4gIC8vIHVwZGF0ZSBsYXllciBvcmRlciB3aXRoIG5ld0x5YWVyLmlkXG4gIGNvbnN0IG5ld0xheWVyT3JkZXIgPSBhcnJheUluc2VydChcbiAgICBuZXh0U3RhdGUubGF5ZXJPcmRlci5zbGljZSgxLCBuZXh0U3RhdGUubGF5ZXJPcmRlci5sZW5ndGgpLFxuICAgIG9yaWdpbmFsTGF5ZXJPcmRlcklkeCxcbiAgICBuZXdMYXllci5pZFxuICApO1xuXG4gIG5leHRTdGF0ZSA9IHJlb3JkZXJMYXllclVwZGF0ZXIobmV4dFN0YXRlLCB7b3JkZXI6IG5ld0xheWVyT3JkZXJ9KTtcblxuICByZXR1cm4gdXBkYXRlQW5pbWF0aW9uRG9tYWluKG5leHRTdGF0ZSk7XG59O1xuXG4vKipcbiAqIEFkZCBhIG5ldyBlZmZlY3RcbiAqIEBtZW1iZXJvZiB2aXNTdGF0ZVVwZGF0ZXJzXG4gKiBAcHVibGljXG4gKi9cbmV4cG9ydCBjb25zdCBhZGRFZmZlY3RVcGRhdGVyID0gKFxuICBzdGF0ZTogVmlzU3RhdGUsXG4gIGFjdGlvbjogVmlzU3RhdGVBY3Rpb25zLkFkZEVmZmVjdFVwZGF0ZXJBY3Rpb25cbik6IFZpc1N0YXRlID0+IHtcbiAgaWYgKFxuICAgIGFjdGlvbi5jb25maWc/LnR5cGUgPT09IExJR0hUX0FORF9TSEFET1dfRUZGRUNULnR5cGUgJiZcbiAgICBzdGF0ZS5lZmZlY3RzLnNvbWUoZWZmZWN0ID0+IGVmZmVjdC50eXBlID09PSBMSUdIVF9BTkRfU0hBRE9XX0VGRkVDVC50eXBlKVxuICApIHtcbiAgICBDb25zb2xlLndhcm4oYENhbid0IGFkZCBtb3JlIHRoYW4gb25lICR7TElHSFRfQU5EX1NIQURPV19FRkZFQ1QubmFtZX0gZWZmZWN0YCk7XG4gICAgcmV0dXJuIHN0YXRlO1xuICB9XG5cbiAgY29uc3QgbmV3RWZmZWN0ID0gY3JlYXRlRWZmZWN0KGFjdGlvbi5jb25maWcpO1xuXG4gIC8vIGNvbGxhcHNlIGNvbmZpZ3VyYXRvcnMgZm9yIG90aGVyIGVmZmVjdHNcbiAgc3RhdGUuZWZmZWN0cy5mb3JFYWNoKGVmZmVjdCA9PiBlZmZlY3Quc2V0UHJvcHMoe2lzQ29uZmlnQWN0aXZlOiBmYWxzZX0pKTtcblxuICBjb25zdCBlZmZlY3RzID0gWy4uLnN0YXRlLmVmZmVjdHMsIG5ld0VmZmVjdF07XG4gIGNvbnN0IGVmZmVjdE9yZGVyID0gZml4RWZmZWN0T3JkZXIoZWZmZWN0cywgW25ld0VmZmVjdC5pZCwgLi4uc3RhdGUuZWZmZWN0T3JkZXJdKTtcblxuICByZXR1cm4ge1xuICAgIC4uLnN0YXRlLFxuICAgIGVmZmVjdHMsXG4gICAgZWZmZWN0T3JkZXJcbiAgfTtcbn07XG5cbi8qKlxuICogcmVtb3ZlIGVmZmVjdFxuICogQG1lbWJlcm9mIHZpc1N0YXRlVXBkYXRlcnNcbiAqIEBwdWJsaWNcbiAqL1xuZXhwb3J0IGNvbnN0IHJlbW92ZUVmZmVjdFVwZGF0ZXIgPSAoXG4gIHN0YXRlOiBWaXNTdGF0ZSxcbiAge2lkfTogVmlzU3RhdGVBY3Rpb25zLlJlbW92ZUVmZmVjdFVwZGF0ZXJBY3Rpb25cbik6IFZpc1N0YXRlID0+IHtcbiAgY29uc3QgaWR4ID0gc3RhdGUuZWZmZWN0cy5maW5kSW5kZXgobCA9PiBsLmlkID09PSBpZCk7XG4gIGlmIChpZHggPCAwIHx8IGlkeCA+PSBzdGF0ZS5lZmZlY3RzLmxlbmd0aCkge1xuICAgIENvbnNvbGUud2FybihgY2FuIG5vdCByZW1vdmUgZWZmZWN0IHdpdGggaW52YWxpZCBpZCAke2lkfWApO1xuICAgIHJldHVybiBzdGF0ZTtcbiAgfVxuXG4gIGNvbnN0IHtlZmZlY3RzLCBlZmZlY3RPcmRlcn0gPSBzdGF0ZTtcbiAgY29uc3QgZWZmZWN0VG9SZW1vdmUgPSBlZmZlY3RzW2lkeF07XG4gIHJldHVybiB7XG4gICAgLi4uc3RhdGUsXG4gICAgLy8gQHRzLWV4cGVjdC1lcnJvciBmaXhlZCBpbiB0c1xuICAgIGVmZmVjdHM6IGZpbHRlck91dEJ5SWQoZWZmZWN0VG9SZW1vdmUuaWQpKGVmZmVjdHMpLFxuICAgIGVmZmVjdE9yZGVyOiBlZmZlY3RPcmRlci5maWx0ZXIoZWZmZWN0SWQgPT4gZWZmZWN0SWQgIT09IGVmZmVjdFRvUmVtb3ZlLmlkKVxuICB9O1xufTtcblxuLyoqXG4gKiBSZW9yZGVyIGVmZmVjdFxuICogQG1lbWJlcm9mIHZpc1N0YXRlVXBkYXRlcnNcbiAqIEBwdWJsaWNcbiAqL1xuZXhwb3J0IGNvbnN0IHJlb3JkZXJFZmZlY3RVcGRhdGVyID0gKFxuICBzdGF0ZTogVmlzU3RhdGUsXG4gIHtvcmRlcn06IFZpc1N0YXRlQWN0aW9ucy5SZW9yZGVyRWZmZWN0VXBkYXRlckFjdGlvblxuKTogVmlzU3RhdGUgPT4gKHtcbiAgLi4uc3RhdGUsXG4gIGVmZmVjdE9yZGVyOiBmaXhFZmZlY3RPcmRlcihzdGF0ZS5lZmZlY3RzLCBbLi4ub3JkZXJdKVxufSk7XG5cbi8qKlxuICogVXBkYXRlIGVmZmVjdFxuICogQG1lbWJlcm9mIHZpc1N0YXRlVXBkYXRlcnNcbiAqIEBwdWJsaWNcbiAqL1xuZXhwb3J0IGNvbnN0IHVwZGF0ZUVmZmVjdFVwZGF0ZXIgPSAoXG4gIHN0YXRlOiBWaXNTdGF0ZSxcbiAge2lkLCBwcm9wc306IFZpc1N0YXRlQWN0aW9ucy5VcGRhdGVFZmZlY3RVcGRhdGVyQWN0aW9uXG4pOiBWaXNTdGF0ZSA9PiB7XG4gIGNvbnN0IGlkeCA9IHN0YXRlLmVmZmVjdHMuZmluZEluZGV4KGwgPT4gbC5pZCA9PT0gaWQpO1xuICBpZiAoaWR4IDwgMCB8fCBpZHggPj0gc3RhdGUuZWZmZWN0cy5sZW5ndGgpIHtcbiAgICBDb25zb2xlLndhcm4oYGNhbiBub3QgdXBkYXRlIGVmZmVjdCB3aXRoIGludmFsaWQgaWQgJHtpZH1gKTtcbiAgICByZXR1cm4gc3RhdGU7XG4gIH1cblxuICBsZXQgZWZmZWN0T3JkZXIgPSBzdGF0ZS5lZmZlY3RPcmRlcjtcbiAgaWYgKHByb3BzLmlkICE9PSB1bmRlZmluZWQgJiYgcHJvcHMuaWQgIT09IGlkKSB7XG4gICAgY29uc3QgaWR4MiA9IHN0YXRlLmVmZmVjdHMuZmluZEluZGV4KGwgPT4gbC5pZCA9PT0gcHJvcHMuaWQpO1xuICAgIGlmIChpZHgyID49IDApIHtcbiAgICAgIENvbnNvbGUud2FybihgY2FuIG5vdCB1cGRhdGUgZWZmZWN0IHdpdGggZXhpc3RpbmcgZWZmZWN0IGlkICR7aWR9YCk7XG4gICAgICByZXR1cm4gc3RhdGU7XG4gICAgfVxuXG4gICAgZWZmZWN0T3JkZXIgPSBlZmZlY3RPcmRlci5tYXAoZWZmZWN0T3JkZXJJZCA9PlxuICAgICAgZWZmZWN0T3JkZXJJZCA9PT0gaWQgPyAocHJvcHMuaWQgYXMgc3RyaW5nKSA6IGVmZmVjdE9yZGVySWRcbiAgICApO1xuICB9XG5cbiAgY29uc3QgbmV3RWZmZWN0cyA9IFsuLi5zdGF0ZS5lZmZlY3RzXTtcbiAgbmV3RWZmZWN0c1tpZHhdLnNldFByb3BzKHByb3BzKTtcblxuICByZXR1cm4ge1xuICAgIC4uLnN0YXRlLFxuICAgIGVmZmVjdHM6IG5ld0VmZmVjdHMsXG4gICAgZWZmZWN0T3JkZXJcbiAgfTtcbn07XG5cbi8qKlxuICogUmVtb3ZlIGEgZGF0YXNldCBhbmQgYWxsIGxheWVycywgZmlsdGVycywgdG9vbHRpcCBjb25maWdzIHRoYXQgYmFzZWQgb24gaXRcbiAqIEBtZW1iZXJvZiB2aXNTdGF0ZVVwZGF0ZXJzXG4gKiBAcHVibGljXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiByZW1vdmVEYXRhc2V0VXBkYXRlcjxUIGV4dGVuZHMgVmlzU3RhdGU+KFxuICBzdGF0ZTogVCxcbiAgYWN0aW9uOiBWaXNTdGF0ZUFjdGlvbnMuUmVtb3ZlRGF0YXNldFVwZGF0ZXJBY3Rpb25cbik6IFQge1xuICAvLyBleHRyYWN0IGRhdGFzZXQga2V5XG4gIGNvbnN0IHtkYXRhSWQ6IGRhdGFzZXRLZXl9ID0gYWN0aW9uO1xuICBjb25zdCB7ZGF0YXNldHN9ID0gc3RhdGU7XG5cbiAgLy8gY2hlY2sgaWYgZGF0YXNldCBpcyBwcmVzZW50XG4gIGlmICghZGF0YXNldHNbZGF0YXNldEtleV0pIHtcbiAgICByZXR1cm4gc3RhdGU7XG4gIH1cblxuICBjb25zdCB7XG4gICAgbGF5ZXJzLFxuICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBAdHlwZXNjcmlwdC1lc2xpbnQvbm8tdW51c2VkLXZhcnNcbiAgICBkYXRhc2V0czoge1tkYXRhc2V0S2V5XTogZGF0YXNldCwgLi4ubmV3RGF0YXNldHN9XG4gIH0gPSBzdGF0ZTtcblxuICBjb25zdCBsYXllcnNUb1JlbW92ZSA9IGxheWVycy5maWx0ZXIobCA9PiBsLmNvbmZpZy5kYXRhSWQgPT09IGRhdGFzZXRLZXkpLm1hcChsID0+IGwuaWQpO1xuXG4gIC8vIHJlbW92ZSBsYXllcnMgYW5kIGRhdGFzZXRzXG4gIGxldCBuZXdTdGF0ZSA9IGxheWVyc1RvUmVtb3ZlLnJlZHVjZSgoYWNjdSwgaWQpID0+IHJlbW92ZUxheWVyVXBkYXRlcihhY2N1LCB7aWR9KSwge1xuICAgIC4uLnN0YXRlLFxuICAgIGRhdGFzZXRzOiBuZXdEYXRhc2V0c1xuICB9KTtcblxuICAvLyB1cGRhdGUgZmlsdGVyc1xuICBjb25zdCBmaWx0ZXJzOiBGaWx0ZXJbXSA9IFtdO1xuICBmb3IgKGNvbnN0IGZpbHRlciBvZiBuZXdTdGF0ZS5maWx0ZXJzKSB7XG4gICAgY29uc3QgdmFsdWVJbmRleCA9IGZpbHRlci5kYXRhSWQuaW5kZXhPZihkYXRhc2V0S2V5KTtcbiAgICBpZiAodmFsdWVJbmRleCA+PSAwICYmIGZpbHRlci5kYXRhSWQubGVuZ3RoID4gMSkge1xuICAgICAgLy8gb25seSByZW1vdmUgb25lIHN5bmNlZCBkYXRhc2V0IGZyb20gdGhlIGZpbHRlclxuICAgICAgZmlsdGVycy5wdXNoKF9yZW1vdmVGaWx0ZXJEYXRhSWRBdFZhbHVlSW5kZXgoZmlsdGVyLCB2YWx1ZUluZGV4LCBkYXRhc2V0cykpO1xuICAgIH0gZWxzZSBpZiAodmFsdWVJbmRleCA8IDApIHtcbiAgICAgIC8vIGxlYXZlIHRoZSBmaWx0ZXIgYXMgaXNcbiAgICAgIGZpbHRlcnMucHVzaChmaWx0ZXIpO1xuICAgIH1cbiAgfVxuXG4gIG5ld1N0YXRlID0gey4uLm5ld1N0YXRlLCBmaWx0ZXJzfTtcblxuICByZXR1cm4gcmVtb3ZlRGF0YXNldEZyb21JbnRlcmFjdGlvbkNvbmZpZyhuZXdTdGF0ZSwge2RhdGFJZDogZGF0YXNldEtleX0pO1xufVxuXG5mdW5jdGlvbiByZW1vdmVEYXRhc2V0RnJvbUludGVyYWN0aW9uQ29uZmlnKHN0YXRlLCB7ZGF0YUlkfSkge1xuICBsZXQge2ludGVyYWN0aW9uQ29uZmlnfSA9IHN0YXRlO1xuICBjb25zdCB7dG9vbHRpcH0gPSBpbnRlcmFjdGlvbkNvbmZpZztcbiAgaWYgKHRvb2x0aXApIHtcbiAgICBjb25zdCB7Y29uZmlnfSA9IHRvb2x0aXA7XG4gICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIEB0eXBlc2NyaXB0LWVzbGludC9uby11bnVzZWQtdmFyc1xuICAgIGNvbnN0IHtbZGF0YUlkXTogZmllbGRzLCAuLi5maWVsZHNUb1Nob3d9ID0gY29uZmlnLmZpZWxkc1RvU2hvdztcbiAgICBpbnRlcmFjdGlvbkNvbmZpZyA9IHtcbiAgICAgIC4uLmludGVyYWN0aW9uQ29uZmlnLFxuICAgICAgdG9vbHRpcDogey4uLnRvb2x0aXAsIGNvbmZpZzogey4uLmNvbmZpZywgZmllbGRzVG9TaG93fX1cbiAgICB9O1xuICB9XG5cbiAgcmV0dXJuIHsuLi5zdGF0ZSwgaW50ZXJhY3Rpb25Db25maWd9O1xufVxuLyoqXG4gKiB1cGRhdGUgbGF5ZXIgYmxlbmRpbmcgbW9kZVxuICogQG1lbWJlcm9mIHZpc1N0YXRlVXBkYXRlcnNcbiAqIEBwdWJsaWNcbiAqL1xuZXhwb3J0IGNvbnN0IHVwZGF0ZUxheWVyQmxlbmRpbmdVcGRhdGVyID0gKFxuICBzdGF0ZTogVmlzU3RhdGUsXG4gIGFjdGlvbjogVmlzU3RhdGVBY3Rpb25zLlVwZGF0ZUxheWVyQmxlbmRpbmdVcGRhdGVyQWN0aW9uXG4pOiBWaXNTdGF0ZSA9PiAoe1xuICAuLi5zdGF0ZSxcbiAgbGF5ZXJCbGVuZGluZzogYWN0aW9uLm1vZGVcbn0pO1xuXG4vKipcbiAqIHVwZGF0ZSBvdmVybGF5IGJsZW5kaW5nIG1vZGVcbiAqIEBtZW1iZXJvZiB2aXNTdGF0ZVVwZGF0ZXJzXG4gKiBAcHVibGljXG4gKi9cbmV4cG9ydCBjb25zdCB1cGRhdGVPdmVybGF5QmxlbmRpbmdVcGRhdGVyID0gKFxuICBzdGF0ZTogVmlzU3RhdGUsXG4gIGFjdGlvbjogVmlzU3RhdGVBY3Rpb25zLlVwZGF0ZU92ZXJsYXlCbGVuZGluZ1VwZGF0ZXJBY3Rpb25cbik6IFZpc1N0YXRlID0+ICh7XG4gIC4uLnN0YXRlLFxuICBvdmVybGF5QmxlbmRpbmc6IGFjdGlvbi5tb2RlXG59KTtcblxuLyoqXG4gKiBEaXNwbGF5IGRhdGFzZXQgdGFibGUgaW4gYSBtb2RhbFxuICogQG1lbWJlcm9mIHZpc1N0YXRlVXBkYXRlcnNcbiAqIEBwdWJsaWNcbiAqL1xuZXhwb3J0IGNvbnN0IHNob3dEYXRhc2V0VGFibGVVcGRhdGVyID0gKFxuICBzdGF0ZTogVmlzU3RhdGUsXG4gIGFjdGlvbjogVmlzU3RhdGVBY3Rpb25zLlNob3dEYXRhc2V0VGFibGVVcGRhdGVyQWN0aW9uXG4pOiBWaXNTdGF0ZSA9PiB7XG4gIHJldHVybiB7XG4gICAgLi4uc3RhdGUsXG4gICAgZWRpdGluZ0RhdGFzZXQ6IGFjdGlvbi5kYXRhSWRcbiAgfTtcbn07XG5cbi8qKlxuICogQWRkIGN1c3RvbSBjb2xvciBmb3IgZGF0YXNldHMgYW5kIGxheWVyc1xuICogQG1lbWJlcm9mIHZpc1N0YXRlVXBkYXRlcnNcbiAqIEBwdWJsaWNcbiAqL1xuZXhwb3J0IGNvbnN0IHVwZGF0ZVRhYmxlQ29sb3JVcGRhdGVyID0gKFxuICBzdGF0ZTogVmlzU3RhdGUsXG4gIGFjdGlvbjogVmlzU3RhdGVBY3Rpb25zLlVwZGF0ZURhdGFzZXRDb2xvclVwZGF0ZXJcbik6IFZpc1N0YXRlID0+IHtcbiAgcmV0dXJuIHVwZGF0ZURhdGFzZXRQcm9wc1VwZGF0ZXIoc3RhdGUsIHtkYXRhSWQ6IGFjdGlvbi5kYXRhSWQsIHByb3BzOiB7Y29sb3I6IGFjdGlvbi5uZXdDb2xvcn19KTtcbn07XG5cbi8qKlxuICogcmVzZXQgdmlzU3RhdGUgdG8gaW5pdGlhbCBTdGF0ZVxuICogQG1lbWJlcm9mIHZpc1N0YXRlVXBkYXRlcnNcbiAqIEBwdWJsaWNcbiAqL1xuZXhwb3J0IGNvbnN0IHJlc2V0TWFwQ29uZmlnVXBkYXRlciA9IChzdGF0ZTogVmlzU3RhdGUpOiBWaXNTdGF0ZSA9PiAoe1xuICAuLi5JTklUSUFMX1ZJU19TVEFURSxcbiAgLi4uc3RhdGUuaW5pdGlhbFN0YXRlLFxuICBpbml0aWFsU3RhdGU6IHN0YXRlLmluaXRpYWxTdGF0ZVxufSk7XG5cbi8qKlxuICogUHJvcGFnYXRlIGB2aXNTdGF0ZWAgcmVkdWNlciB3aXRoIGEgbmV3IGNvbmZpZ3VyYXRpb24uIEN1cnJlbnQgY29uZmlnIHdpbGwgYmUgb3ZlcnJpZGUuXG4gKiBAbWVtYmVyb2YgdmlzU3RhdGVVcGRhdGVyc1xuICogQHB1YmxpY1xuICovXG5leHBvcnQgY29uc3QgcmVjZWl2ZU1hcENvbmZpZ1VwZGF0ZXIgPSAoXG4gIHN0YXRlOiBWaXNTdGF0ZSxcbiAge1xuICAgIHBheWxvYWQ6IHtjb25maWcgPSB7fSwgb3B0aW9ucyA9IHt9fVxuICB9OiB7XG4gICAgdHlwZT86IHR5cGVvZiBBY3Rpb25UeXBlcy5SRUNFSVZFX01BUF9DT05GSUc7XG4gICAgcGF5bG9hZDogUmVjZWl2ZU1hcENvbmZpZ1BheWxvYWQ7XG4gIH1cbik6IFZpc1N0YXRlID0+IHtcbiAgaWYgKCFjb25maWcudmlzU3RhdGUpIHtcbiAgICByZXR1cm4gc3RhdGU7XG4gIH1cblxuICBjb25zdCB7a2VlcEV4aXN0aW5nQ29uZmlnfSA9IG9wdGlvbnM7XG5cbiAgLy8gcmVzZXQgY29uZmlnIGlmIGtlZXBFeGlzdGluZ0NvbmZpZyBpcyBmYWxzeVxuICBsZXQgbWVyZ2VkU3RhdGUgPSAha2VlcEV4aXN0aW5nQ29uZmlnID8gcmVzZXRNYXBDb25maWdVcGRhdGVyKHN0YXRlKSA6IHN0YXRlO1xuICBmb3IgKGNvbnN0IG1lcmdlciBvZiBzdGF0ZS5tZXJnZXJzKSB7XG4gICAgaWYgKGlzVmFsaWRNZXJnZXIobWVyZ2VyKSAmJiBoYXNQcm9wc1RvTWVyZ2UoY29uZmlnLnZpc1N0YXRlLCBtZXJnZXIucHJvcCkpIHtcbiAgICAgIG1lcmdlZFN0YXRlID0gbWVyZ2VyLm1lcmdlKFxuICAgICAgICBtZXJnZWRTdGF0ZSxcbiAgICAgICAgZ2V0UHJvcFZhbHVlVG9NZXJnZXIoY29uZmlnLnZpc1N0YXRlLCBtZXJnZXIucHJvcCwgbWVyZ2VyLnRvTWVyZ2VQcm9wKSxcbiAgICAgICAgLy8gZnJvbUNvbmZpZ1xuICAgICAgICB0cnVlXG4gICAgICApO1xuICAgIH1cbiAgfVxuXG4gIHJldHVybiBtZXJnZWRTdGF0ZTtcbn07XG5cbi8qKlxuICogVHJpZ2dlciBsYXllciBob3ZlciBldmVudCB3aXRoIGhvdmVyZWQgb2JqZWN0XG4gKiBAbWVtYmVyb2YgdmlzU3RhdGVVcGRhdGVyc1xuICogQHB1YmxpY1xuICovXG5leHBvcnQgY29uc3QgbGF5ZXJIb3ZlclVwZGF0ZXIgPSAoXG4gIHN0YXRlOiBWaXNTdGF0ZSxcbiAgYWN0aW9uOiBWaXNTdGF0ZUFjdGlvbnMuT25MYXllckhvdmVyVXBkYXRlckFjdGlvblxuKTogVmlzU3RhdGUgPT4gKHtcbiAgLi4uc3RhdGUsXG4gIGhvdmVySW5mbzoge1xuICAgIC8vIGRlY2suZ2wgaW5mbyBpcyBtdXRhYmxlXG4gICAgLi4uYWN0aW9uLmluZm8sXG4gICAgLi4uKE51bWJlci5pc0Zpbml0ZShhY3Rpb24ubWFwSW5kZXgpID8ge21hcEluZGV4OiBhY3Rpb24ubWFwSW5kZXh9IDoge30pXG4gIH1cbn0pO1xuXG4vKiBlc2xpbnQtZW5hYmxlIG1heC1zdGF0ZW1lbnRzICovXG5cbi8qKlxuICogVXBkYXRlIGBpbnRlcmFjdGlvbkNvbmZpZ2BcbiAqIEBtZW1iZXJvZiB2aXNTdGF0ZVVwZGF0ZXJzXG4gKiBAcHVibGljXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBpbnRlcmFjdGlvbkNvbmZpZ0NoYW5nZVVwZGF0ZXIoXG4gIHN0YXRlOiBWaXNTdGF0ZSxcbiAgYWN0aW9uOiBWaXNTdGF0ZUFjdGlvbnMuSW50ZXJhY3Rpb25Db25maWdDaGFuZ2VVcGRhdGVyQWN0aW9uXG4pOiBWaXNTdGF0ZSB7XG4gIGNvbnN0IHtjb25maWd9ID0gYWN0aW9uO1xuXG4gIGNvbnN0IGludGVyYWN0aW9uQ29uZmlnID0ge1xuICAgIC4uLnN0YXRlLmludGVyYWN0aW9uQ29uZmlnLFxuICAgIC4uLntbY29uZmlnLmlkXTogY29uZmlnfVxuICB9O1xuXG4gIC8vIERvbid0IGVuYWJsZSB0b29sdGlwIGFuZCBicnVzaCBhdCB0aGUgc2FtZSB0aW1lXG4gIC8vIGJ1dCBjb29yZGluYXRlcyBjYW4gYmUgc2hvd24gYXQgYWxsIHRpbWVcbiAgY29uc3QgY29udHJhZGljdCA9IFsnYnJ1c2gnLCAndG9vbHRpcCddO1xuXG4gIGlmIChcbiAgICBjb250cmFkaWN0LmluY2x1ZGVzKGNvbmZpZy5pZCkgJiZcbiAgICBjb25maWcuZW5hYmxlZCAmJlxuICAgICFzdGF0ZS5pbnRlcmFjdGlvbkNvbmZpZ1tjb25maWcuaWRdLmVuYWJsZWRcbiAgKSB7XG4gICAgLy8gb25seSBlbmFibGUgb25lIGludGVyYWN0aW9uIGF0IGEgdGltZVxuICAgIGNvbnRyYWRpY3QuZm9yRWFjaChrID0+IHtcbiAgICAgIGlmIChrICE9PSBjb25maWcuaWQpIHtcbiAgICAgICAgaW50ZXJhY3Rpb25Db25maWdba10gPSB7Li4uaW50ZXJhY3Rpb25Db25maWdba10sIGVuYWJsZWQ6IGZhbHNlfTtcbiAgICAgIH1cbiAgICB9KTtcbiAgfVxuXG4gIGNvbnN0IG5ld1N0YXRlID0ge1xuICAgIC4uLnN0YXRlLFxuICAgIGludGVyYWN0aW9uQ29uZmlnXG4gIH07XG5cbiAgaWYgKGNvbmZpZy5pZCA9PT0gJ2dlb2NvZGVyJyAmJiAhY29uZmlnLmVuYWJsZWQpIHtcbiAgICByZXR1cm4gcmVtb3ZlRGF0YXNldFVwZGF0ZXIobmV3U3RhdGUsIHtkYXRhSWQ6ICdnZW9jb2Rlcl9kYXRhc2V0J30pO1xuICB9XG5cbiAgcmV0dXJuIG5ld1N0YXRlO1xufVxuXG4vKipcbiAqIFRyaWdnZXIgbGF5ZXIgY2xpY2sgZXZlbnQgd2l0aCBjbGlja2VkIG9iamVjdFxuICogQG1lbWJlcm9mIHZpc1N0YXRlVXBkYXRlcnNcbiAqIEBwdWJsaWNcbiAqL1xuZXhwb3J0IGNvbnN0IGxheWVyQ2xpY2tVcGRhdGVyID0gKFxuICBzdGF0ZTogVmlzU3RhdGUsXG4gIGFjdGlvbjogVmlzU3RhdGVBY3Rpb25zLk9uTGF5ZXJDbGlja1VwZGF0ZXJBY3Rpb25cbik6IFZpc1N0YXRlID0+ICh7XG4gIC4uLnN0YXRlLFxuICBtb3VzZVBvczogc3RhdGUuaW50ZXJhY3Rpb25Db25maWcuY29vcmRpbmF0ZS5lbmFibGVkXG4gICAgPyB7XG4gICAgICAgIC4uLnN0YXRlLm1vdXNlUG9zLFxuICAgICAgICBwaW5uZWQ6IHN0YXRlLm1vdXNlUG9zLnBpbm5lZCA/IG51bGwgOiBjbG9uZURlZXAoc3RhdGUubW91c2VQb3MpXG4gICAgICB9XG4gICAgOiBzdGF0ZS5tb3VzZVBvcyxcbiAgY2xpY2tlZDogYWN0aW9uLmluZm8gJiYgYWN0aW9uLmluZm8ucGlja2VkID8gYWN0aW9uLmluZm8gOiBudWxsXG59KTtcblxuLyoqXG4gKiBUcmlnZ2VyIG1hcCBjbGljayBldmVudCwgdW5zZWxlY3QgY2xpY2tlZCBvYmplY3RcbiAqIEBtZW1iZXJvZiB2aXNTdGF0ZVVwZGF0ZXJzXG4gKiBAcHVibGljXG4gKi9cbmV4cG9ydCBjb25zdCBtYXBDbGlja1VwZGF0ZXIgPSAoXG4gIHN0YXRlOiBWaXNTdGF0ZSxcbiAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIEB0eXBlc2NyaXB0LWVzbGludC9uby11bnVzZWQtdmFyc1xuICBhY3Rpb246IFZpc1N0YXRlQWN0aW9ucy5Pbk1hcENsaWNrVXBkYXRlckFjdGlvblxuKTogVmlzU3RhdGUgPT4ge1xuICByZXR1cm4ge1xuICAgIC4uLnN0YXRlLFxuICAgIGNsaWNrZWQ6IG51bGxcbiAgfTtcbn07XG5cbi8qKlxuICogVHJpZ2dlciBtYXAgbW92ZSBldmVudFxuICogQG1lbWJlcm9mIHZpc1N0YXRlVXBkYXRlcnNcbiAqIEBwdWJsaWNcbiAqL1xuZXhwb3J0IGNvbnN0IG1vdXNlTW92ZVVwZGF0ZXIgPSAoXG4gIHN0YXRlOiBWaXNTdGF0ZSxcbiAge2V2dH06IFZpc1N0YXRlQWN0aW9ucy5Pbk1vdXNlTW92ZVVwZGF0ZXJBY3Rpb25cbik6IFZpc1N0YXRlID0+IHtcbiAgaWYgKE9iamVjdC52YWx1ZXMoc3RhdGUuaW50ZXJhY3Rpb25Db25maWcpLnNvbWUoY29uZmlnID0+IGNvbmZpZy5lbmFibGVkKSkge1xuICAgIHJldHVybiB7XG4gICAgICAuLi5zdGF0ZSxcbiAgICAgIG1vdXNlUG9zOiB7XG4gICAgICAgIC4uLnN0YXRlLm1vdXNlUG9zLFxuICAgICAgICAuLi4oQXJyYXkuaXNBcnJheShldnQucG9pbnQpID8ge21vdXNlUG9zaXRpb246IFsuLi5ldnQucG9pbnRdfSA6IHt9KSxcbiAgICAgICAgLi4uKEFycmF5LmlzQXJyYXkoZXZ0LmxuZ0xhdCkgPyB7Y29vcmRpbmF0ZTogWy4uLmV2dC5sbmdMYXRdfSA6IHt9KVxuICAgICAgfVxuICAgIH07XG4gIH1cblxuICByZXR1cm4gc3RhdGU7XG59O1xuLyoqXG4gKiBUb2dnbGUgdmlzaWJpbGl0eSBvZiBhIGxheWVyIGZvciBhIHNwbGl0IG1hcFxuICogQG1lbWJlcm9mIHZpc1N0YXRlVXBkYXRlcnNcbiAqIEBwdWJsaWNcbiAqL1xuZXhwb3J0IGNvbnN0IHRvZ2dsZVNwbGl0TWFwVXBkYXRlciA9IChcbiAgc3RhdGU6IFZpc1N0YXRlLFxuICBhY3Rpb246IE1hcFN0YXRlQWN0aW9ucy5Ub2dnbGVTcGxpdE1hcFVwZGF0ZXJBY3Rpb25cbik6IFZpc1N0YXRlID0+XG4gIHN0YXRlLnNwbGl0TWFwcyAmJiBzdGF0ZS5zcGxpdE1hcHMubGVuZ3RoID09PSAwXG4gICAgPyB7XG4gICAgICAgIC4uLnN0YXRlLFxuICAgICAgICAvLyBtYXliZSB3ZSBzaG91bGQgdXNlIGFuIGFycmF5IHRvIHN0b3JlIHN0YXRlIGZvciBhIHNpbmdsZSBtYXAgYXMgd2VsbFxuICAgICAgICAvLyBpZiBjdXJyZW50IG1hcHMgbGVuZ3RoIGlzIGVxdWFsIHRvIDAgaXQgbWVhbnMgdGhhdCB3ZSBhcmUgYWJvdXQgdG8gc3BsaXQgdGhlIHZpZXdcbiAgICAgICAgc3BsaXRNYXBzOiBjb21wdXRlU3BsaXRNYXBMYXllcnMoc3RhdGUubGF5ZXJzLCB7ZHVwbGljYXRlOiBmYWxzZX0pXG4gICAgICB9XG4gICAgOiBjbG9zZVNwZWNpZmljTWFwQXRJbmRleChzdGF0ZSwgYWN0aW9uKTtcblxuLyoqXG4gKiBUb2dnbGUgdmlzaWJpbGl0eSBvZiBhIGxheWVyIGluIGEgc3BsaXQgbWFwXG4gKiBAbWVtYmVyb2YgdmlzU3RhdGVVcGRhdGVyc1xuICogQHB1YmxpY1xuICovXG5leHBvcnQgY29uc3QgdG9nZ2xlTGF5ZXJGb3JNYXBVcGRhdGVyID0gKFxuICBzdGF0ZTogVmlzU3RhdGUsXG4gIHttYXBJbmRleCwgbGF5ZXJJZH06IFZpc1N0YXRlQWN0aW9ucy5Ub2dnbGVMYXllckZvck1hcFVwZGF0ZXJBY3Rpb25cbik6IFZpc1N0YXRlID0+IHtcbiAgY29uc3Qge3NwbGl0TWFwc30gPSBzdGF0ZTtcblxuICByZXR1cm4ge1xuICAgIC4uLnN0YXRlLFxuICAgIHNwbGl0TWFwczogc3BsaXRNYXBzLm1hcCgoc20sIGkpID0+XG4gICAgICBpID09PSBtYXBJbmRleFxuICAgICAgICA/IHtcbiAgICAgICAgICAgIC4uLnNwbGl0TWFwc1tpXSxcbiAgICAgICAgICAgIGxheWVyczoge1xuICAgICAgICAgICAgICAuLi5zcGxpdE1hcHNbaV0ubGF5ZXJzLFxuICAgICAgICAgICAgICAvLyBpZiBsYXllcklkIG5vdCBpbiBsYXllcnMsIHNldCBpdCB0byB2aXNpYmxlXG4gICAgICAgICAgICAgIFtsYXllcklkXTogIXNwbGl0TWFwc1tpXS5sYXllcnNbbGF5ZXJJZF1cbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG4gICAgICAgIDogc21cbiAgICApXG4gIH07XG59O1xuXG4vKipcbiAqIEFkZCBuZXcgZGF0YXNldCB0byBgdmlzU3RhdGVgLCB3aXRoIG9wdGlvbiB0byBsb2FkIGEgbWFwIGNvbmZpZyBhbG9uZyB3aXRoIHRoZSBkYXRhc2V0c1xuICogQG1lbWJlcm9mIHZpc1N0YXRlVXBkYXRlcnNcbiAqIEBwdWJsaWNcbiAqL1xuLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIGNvbXBsZXhpdHlcbmV4cG9ydCBjb25zdCB1cGRhdGVWaXNEYXRhVXBkYXRlciA9IChcbiAgc3RhdGU6IFZpc1N0YXRlLFxuICBhY3Rpb246IFZpc1N0YXRlQWN0aW9ucy5VcGRhdGVWaXNEYXRhVXBkYXRlckFjdGlvblxuKTogVmlzU3RhdGUgPT4ge1xuICAvLyBkYXRhc2V0cyBjYW4gYmUgYSBzaW5nbGUgZGF0YSBlbnRyaWVzIG9yIGFuIGFycmF5IG9mIG11bHRpcGxlIGRhdGEgZW50cmllc1xuICBjb25zdCB7Y29uZmlnLCBvcHRpb25zfSA9IGFjdGlvbjtcblxuICAvLyBhcHBseSBjb25maWcgaWYgcGFzc2VkIGZyb20gYWN0aW9uXG4gIC8vIFRPRE86IHdlIGRvbid0IGhhbmRsZSBhc3luYyBtZXJnZXJzIGhlcmUgeWV0XG4gIGxldCB1cGRhdGVkU3RhdGUgPSBjb25maWdcbiAgICA/IHJlY2VpdmVNYXBDb25maWdVcGRhdGVyKHN0YXRlLCB7XG4gICAgICAgIHBheWxvYWQ6IHtjb25maWcsIG9wdGlvbnN9XG4gICAgICB9KVxuICAgIDogc3RhdGU7XG5cbiAgY29uc3QgZGF0YXNldHMgPSB0b0FycmF5KGFjdGlvbi5kYXRhc2V0cyk7XG4gIGlmICghZGF0YXNldHMubGVuZ3RoKSB7XG4gICAgcmV0dXJuIHVwZGF0ZWRTdGF0ZTtcbiAgfVxuXG4gIGNvbnN0IGNyZWF0ZURhdGFzZXRUYXNrczogVGFza1tdID0gW107XG4gIGNvbnN0IG5vdGlmaWNhdGlvblRhc2tzOiBUYXNrW10gPSBbXTtcblxuICBkYXRhc2V0cy5mb3JFYWNoKCh7aW5mbyA9IHt9LCAuLi5yZXN0fSwgZGF0YXNldEluZGV4KSA9PiB7XG4gICAgY29uc3QgdGFzayA9IGNyZWF0ZU5ld0RhdGFFbnRyeSh7aW5mbywgLi4ucmVzdH0sIHN0YXRlLmRhdGFzZXRzKTtcbiAgICBpZiAodGFzaykge1xuICAgICAgY3JlYXRlRGF0YXNldFRhc2tzLnB1c2godGFzayk7XG4gICAgfSBlbHNlIHtcbiAgICAgIG5vdGlmaWNhdGlvblRhc2tzLnB1c2goXG4gICAgICAgIEFDVElPTl9UQVNLX0FERF9OT1RJRklDQVRJT04oKS5tYXAoKCkgPT5cbiAgICAgICAgICBhZGROb3RpZmljYXRpb24oXG4gICAgICAgICAgICBlcnJvck5vdGlmaWNhdGlvbih7XG4gICAgICAgICAgICAgIG1lc3NhZ2U6IGBGYWlsZWQgdG8gY3JlYXRlIGEgbmV3IGRhdGFzZXQgZHVlIHRvIGRhdGEgdmVyaWZpY2F0aW9uIGVycm9yc2AsXG4gICAgICAgICAgICAgIGlkOiBgZGF0YXNldC1mYWlsZWQtJHtkYXRhc2V0SW5kZXh9YFxuICAgICAgICAgICAgfSlcbiAgICAgICAgICApXG4gICAgICAgIClcbiAgICAgICk7XG4gICAgfVxuICB9KTtcblxuICBjb25zdCBkYXRhc2V0c0FsbFNldHRsZWRUYXNrID0gY3JlYXRlRGF0YXNldFRhc2tzLmxlbmd0aFxuICAgID8gVGFzay5hbGxTZXR0bGVkKGNyZWF0ZURhdGFzZXRUYXNrcykubWFwKHJlc3VsdHMgPT5cbiAgICAgICAgY3JlYXRlTmV3RGF0YXNldFN1Y2Nlc3Moe3Jlc3VsdHMsIGFkZFRvTWFwT3B0aW9uczogb3B0aW9uc30pXG4gICAgICApXG4gICAgOiBudWxsO1xuXG4gIGlmIChkYXRhc2V0c0FsbFNldHRsZWRUYXNrKSB7XG4gICAgdXBkYXRlZFN0YXRlID0gc2V0TG9hZGluZ0luZGljYXRvclVwZGF0ZXIodXBkYXRlZFN0YXRlLCBwYXlsb2FkXyh7Y2hhbmdlOiAxLCB0eXBlOiAnJ30pKTtcbiAgfVxuXG4gIHJldHVybiB3aXRoVGFzayh1cGRhdGVkU3RhdGUsIFtcbiAgICAuLi4oZGF0YXNldHNBbGxTZXR0bGVkVGFzayA/IFtkYXRhc2V0c0FsbFNldHRsZWRUYXNrXSA6IFtdKSxcbiAgICAuLi5ub3RpZmljYXRpb25UYXNrc1xuICBdKTtcbn07XG5cbmV4cG9ydCBjb25zdCBjcmVhdGVOZXdEYXRhc2V0U3VjY2Vzc1VwZGF0ZXIgPSAoXG4gIHN0YXRlOiBWaXNTdGF0ZSxcbiAgYWN0aW9uOiBQYXlsb2FkQWN0aW9uPENyZWF0ZU5ld0RhdGFzZXRTdWNjZXNzUGF5bG9hZD5cbik6IFZpc1N0YXRlID0+IHtcbiAgY29uc3Qge3Jlc3VsdHMsIGFkZFRvTWFwT3B0aW9uc30gPSBhY3Rpb24ucGF5bG9hZDtcbiAgY29uc3Qgbm90aWZpY2F0aW9uVGFza3M6IFRhc2tbXSA9IFtdO1xuXG4gIGNvbnN0IG5ld0RhdGFFbnRyaWVzID0gcmVzdWx0cy5yZWR1Y2UoKGFjY3UsIHJlc3VsdCwgaWR4KSA9PiB7XG4gICAgaWYgKHJlc3VsdC5zdGF0dXMgPT09ICdmdWxmaWxsZWQnKSB7XG4gICAgICBjb25zdCBkYXRhc2V0ID0gcmVzdWx0LnZhbHVlO1xuICAgICAgcmV0dXJuIHsuLi5hY2N1LCBbZGF0YXNldC5pZF06IGRhdGFzZXR9O1xuICAgIH0gZWxzZSB7XG4gICAgICAvLyBzaG93IGVycm9yIG5vdGlmaWNhdGlvbiBvbiBVSVxuICAgICAgbm90aWZpY2F0aW9uVGFza3MucHVzaChcbiAgICAgICAgQUNUSU9OX1RBU0soKS5tYXAoKCkgPT5cbiAgICAgICAgICBhZGROb3RpZmljYXRpb24oXG4gICAgICAgICAgICBlcnJvck5vdGlmaWNhdGlvbih7XG4gICAgICAgICAgICAgIG1lc3NhZ2U6IGBEYXRhc2V0IGVycm9yOiBGYWlsZWQgdG8gY3JlYXRlIGEgbmV3IGRhdGFzZXQ6XG4gICAgICAgICAgICAgICR7cmVzdWx0LnJlYXNvbiB8fCAocmVzdWx0IGFzIGFueSkudmFsdWV9YCxcbiAgICAgICAgICAgICAgaWQ6IGBkYXRhc2V0LWNyZWF0ZS1mYWlsZWQtJHtpZHh9YFxuICAgICAgICAgICAgfSlcbiAgICAgICAgICApXG4gICAgICAgIClcbiAgICAgICk7XG4gICAgICByZXR1cm4gYWNjdTtcbiAgICB9XG4gIH0sIHt9IGFzIERhdGFzZXRzKTtcbiAgLy8gc2F2ZSBuZXcgZGF0YXNldCBlbnRyeSB0byBzdGF0ZVxuICBjb25zdCBtZXJnZWRTdGF0ZSA9IHtcbiAgICAuLi5zdGF0ZSxcbiAgICBkYXRhc2V0czogbWVyZ2VEYXRhc2V0c0J5T3JkZXIoc3RhdGUsIG5ld0RhdGFFbnRyaWVzKVxuICB9O1xuXG4gIC8vIG1lcmdlIHN0YXRlIHdpdGggY29uZmlnIHRvIGJlIG1lcmdlZFxuICBjb25zdCBsYXllck1lcmdlcnMgPSBzdGF0ZS5tZXJnZXJzLmZpbHRlcihtID0+IG0ud2FpdEZvckxheWVyRGF0YSk7XG4gIGNvbnN0IGRhdGFzZXRNZXJnZXJzID0gc3RhdGUubWVyZ2Vycy5maWx0ZXIobSA9PiAhbGF5ZXJNZXJnZXJzLmluY2x1ZGVzKG0pKTtcblxuICBjb25zdCBuZXdEYXRhSWRzID0gT2JqZWN0LmtleXMobmV3RGF0YUVudHJpZXMpO1xuICBjb25zdCBwb3N0TWVyZ2VyUGF5bG9hZCA9IHtcbiAgICBuZXdEYXRhSWRzLFxuICAgIG9wdGlvbnM6IGFkZFRvTWFwT3B0aW9ucyxcbiAgICBsYXllck1lcmdlcnNcbiAgfTtcblxuICBjb25zdCB1cGRhdGVkU3RhdGUgPSBhcHBseU1lcmdlcnNVcGRhdGVyKG1lcmdlZFN0YXRlLCB7XG4gICAgbWVyZ2VyczogZGF0YXNldE1lcmdlcnMsXG4gICAgcG9zdE1lcmdlclBheWxvYWRcbiAgfSk7XG5cbiAgcmV0dXJuIHdpdGhUYXNrKFxuICAgIHNldExvYWRpbmdJbmRpY2F0b3JVcGRhdGVyKHVwZGF0ZWRTdGF0ZSwgcGF5bG9hZF8oe2NoYW5nZTogLTF9KSksXG4gICAgbm90aWZpY2F0aW9uVGFza3NcbiAgKTtcbn07XG5cbi8qKlxuICogQWRkIG5ldyBkYXRhc2V0IHRvIGB2aXNTdGF0ZWAsIHdpdGggb3B0aW9uIHRvIGxvYWQgYSBtYXAgY29uZmlnIGFsb25nIHdpdGggdGhlIGRhdGFzZXRzXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBhcHBseU1lcmdlcnNVcGRhdGVyKFxuICBzdGF0ZTogVmlzU3RhdGUsXG4gIGFjdGlvbjoge1xuICAgIG1lcmdlcnM6IE1lcmdlcjxhbnk+W107XG4gICAgcG9zdE1lcmdlclBheWxvYWQ6IFBvc3RNZXJnZXJQYXlsb2FkO1xuICB9XG4pOiBWaXNTdGF0ZSB7XG4gIGNvbnN0IHttZXJnZXJzLCBwb3N0TWVyZ2VyUGF5bG9hZH0gPSBhY3Rpb247XG5cbiAgLy8gbWVyZ2Ugc3RhdGUgd2l0aCBjb25maWcgdG8gYmUgbWVyZ2VkXG4gIGNvbnN0IG1lcmdlU3RhdGVSZXN1bHQgPSBtZXJnZVN0YXRlRnJvbU1lcmdlcnMoXG4gICAgc3RhdGUsXG4gICAge1xuICAgICAgLi4uSU5JVElBTF9WSVNfU1RBVEUsXG4gICAgICAuLi5zdGF0ZS5pbml0aWFsU3RhdGVcbiAgICB9LFxuICAgIG1lcmdlcnMsXG4gICAgLy8gbmV3RGF0YUlkcyxcbiAgICBwb3N0TWVyZ2VyUGF5bG9hZFxuICApO1xuXG4gIC8vIGlmIGFsbCBtZXJnZWQsIGtpY2t1cCBwb3N0IG1lcmdlIHByb2Nlc3NcbiAgLy8gaWYgbm90IHdhaXRcbiAgcmV0dXJuIG1lcmdlU3RhdGVSZXN1bHQuYWxsTWVyZ2VkXG4gICAgPyBwb3N0TWVyZ2VVcGRhdGVyKG1lcmdlU3RhdGVSZXN1bHQubWVyZ2VkU3RhdGUsIHBvc3RNZXJnZXJQYXlsb2FkKVxuICAgIDogbWVyZ2VTdGF0ZVJlc3VsdC5tZXJnZWRTdGF0ZTtcbn1cblxuLyoqXG4gKiBBZGQgbmV3IGRhdGFzZXQgdG8gYHZpc1N0YXRlYCwgd2l0aCBvcHRpb24gdG8gbG9hZCBhIG1hcCBjb25maWcgYWxvbmcgd2l0aCB0aGUgZGF0YXNldHNcbiAqL1xuZnVuY3Rpb24gcG9zdE1lcmdlVXBkYXRlcihtZXJnZWRTdGF0ZTogVmlzU3RhdGUsIHBvc3RNZXJnZXJQYXlsb2FkOiBQb3N0TWVyZ2VyUGF5bG9hZCk6IFZpc1N0YXRlIHtcbiAgY29uc3Qge25ld0RhdGFJZHMsIG9wdGlvbnMsIGxheWVyTWVyZ2Vyc30gPSBwb3N0TWVyZ2VyUGF5bG9hZDtcbiAgY29uc3QgbmV3RmlsdGVycyA9IG1lcmdlZFN0YXRlLmZpbHRlcnMuZmlsdGVyKGYgPT5cbiAgICBmLmRhdGFJZC5maW5kKGZEYXRhSWQgPT4gbmV3RGF0YUlkcy5pbmNsdWRlcyhmRGF0YUlkKSlcbiAgKTtcbiAgY29uc3QgZGF0YXNldEZpbHRlcmVkOiBzdHJpbmdbXSA9IHVuaXEoXG4gICAgbmV3RmlsdGVycy5yZWR1Y2UoKGFjY3UsIGYpID0+IFsuLi5hY2N1LCAuLi5mLmRhdGFJZF0sIFtdIGFzIHN0cmluZ1tdKVxuICApO1xuICBjb25zdCBkYXRhRW1wdHkgPSBuZXdEYXRhSWRzLmxlbmd0aCA8IDE7XG5cbiAgbGV0IG5ld0xheWVycyA9ICFkYXRhRW1wdHlcbiAgICA/IG1lcmdlZFN0YXRlLmxheWVycy5maWx0ZXIobCA9PiBsLmNvbmZpZy5kYXRhSWQgJiYgbmV3RGF0YUlkcy5pbmNsdWRlcyhsLmNvbmZpZy5kYXRhSWQpKVxuICAgIDogW107XG5cbiAgY29uc3QgbmV3RGF0YUVudHJpZXMgPSBuZXdEYXRhSWRzLnJlZHVjZShcbiAgICAoYWNjdSwgaWQpID0+ICh7XG4gICAgICAuLi5hY2N1LFxuICAgICAgW2lkXTogbWVyZ2VkU3RhdGUuZGF0YXNldHNbaWRdXG4gICAgfSksXG4gICAge31cbiAgKTtcblxuICBpZiAoIW5ld0xheWVycy5sZW5ndGggJiYgKG9wdGlvbnMgfHwge30pLmF1dG9DcmVhdGVMYXllcnMgIT09IGZhbHNlKSB7XG4gICAgLy8gbm8gbGF5ZXIgbWVyZ2VkLCBmaW5kIGRlZmF1bHRzXG4gICAgY29uc3QgcmVzdWx0ID0gYWRkRGVmYXVsdExheWVycyhtZXJnZWRTdGF0ZSwgbmV3RGF0YUVudHJpZXMpO1xuICAgIG1lcmdlZFN0YXRlID0gcmVzdWx0LnN0YXRlO1xuICAgIG5ld0xheWVycyA9IHJlc3VsdC5uZXdMYXllcnM7XG4gIH1cblxuICBpZiAobWVyZ2VkU3RhdGUuc3BsaXRNYXBzLmxlbmd0aCkge1xuICAgIC8vIGlmIG1hcCBpcyBzcGxpdCwgYWRkIG5ldyBsYXllcnMgdG8gc3BsaXRNYXBzXG4gICAgbmV3TGF5ZXJzID0gbWVyZ2VkU3RhdGUubGF5ZXJzLmZpbHRlcihcbiAgICAgIGwgPT4gbC5jb25maWcuZGF0YUlkICYmIG5ld0RhdGFJZHMuaW5jbHVkZXMobC5jb25maWcuZGF0YUlkKVxuICAgICk7XG4gICAgbWVyZ2VkU3RhdGUgPSB7XG4gICAgICAuLi5tZXJnZWRTdGF0ZSxcbiAgICAgIHNwbGl0TWFwczogYWRkTmV3TGF5ZXJzVG9TcGxpdE1hcChtZXJnZWRTdGF0ZS5zcGxpdE1hcHMsIG5ld0xheWVycylcbiAgICB9O1xuICB9XG5cbiAgLy8gaWYgbm8gdG9vbHRpcHMgbWVyZ2VkIGFkZCBkZWZhdWx0IHRvb2x0aXBzXG4gIG5ld0RhdGFJZHMuZm9yRWFjaChkYXRhSWQgPT4ge1xuICAgIGNvbnN0IHRvb2x0aXBGaWVsZHMgPSBtZXJnZWRTdGF0ZS5pbnRlcmFjdGlvbkNvbmZpZy50b29sdGlwLmNvbmZpZy5maWVsZHNUb1Nob3dbZGF0YUlkXTtcbiAgICAvLyBsb2FkaW5nIGRhdGFzZXQ6IGF1dG9DcmVhdGVUb29sdGlwcyBpcyBmYWxzZSBhbmQgd2UgZG9uJ3Qgd2FudCB0byBydW4gYWRkRGVmYXVsdFRvb2x0aXBzIHdoZW4gdG9vbHRpcEZpZWxkcyBpcyBlbXB0eVxuICAgIGlmIChcbiAgICAgIG9wdGlvbnM/LmF1dG9DcmVhdGVUb29sdGlwcyAhPT0gZmFsc2UgJiZcbiAgICAgICghQXJyYXkuaXNBcnJheSh0b29sdGlwRmllbGRzKSB8fCAhdG9vbHRpcEZpZWxkcy5sZW5ndGgpXG4gICAgKSB7XG4gICAgICAvLyBhZGRpbmcgZGF0YXNldDogYXV0b0NyZWF0ZVRvb2x0aXBzIGlzIHRydWVcbiAgICAgIG1lcmdlZFN0YXRlID0gYWRkRGVmYXVsdFRvb2x0aXBzKG1lcmdlZFN0YXRlLCBuZXdEYXRhRW50cmllc1tkYXRhSWRdKTtcbiAgICB9XG4gIH0pO1xuXG4gIGNvbnN0IHVwZGF0ZWREYXRhc2V0cyA9IGRhdGFFbXB0eVxuICAgID8gT2JqZWN0LmtleXMobWVyZ2VkU3RhdGUuZGF0YXNldHMpXG4gICAgOiB1bmlxKE9iamVjdC5rZXlzKG5ld0RhdGFFbnRyaWVzKS5jb25jYXQoZGF0YXNldEZpbHRlcmVkKSk7XG5cbiAgbGV0IHVwZGF0ZWRTdGF0ZSA9IHVwZGF0ZUFsbExheWVyRG9tYWluRGF0YShtZXJnZWRTdGF0ZSwgdXBkYXRlZERhdGFzZXRzLCB1bmRlZmluZWQpO1xuXG4gIC8vIHJlZ2lzdGVyIGxheWVyIGFuaW1hdGlvbiBkb21haW4sXG4gIC8vIG5lZWQgdG8gYmUgY2FsbGVkIGFmdGVyIGxheWVyIGRhdGEgaXMgY2FsY3VsYXRlZFxuICB1cGRhdGVkU3RhdGUgPSB1cGRhdGVBbmltYXRpb25Eb21haW4odXBkYXRlZFN0YXRlKTtcblxuICAvLyB0cnkgdG8gcHJvY2VzcyBsYXllck1lcmdlcnMgYWZ0ZXIgZGF0YXNldCtkYXRhc2V0TWVyZ2Vyc1xuICB1cGRhdGVkU3RhdGUgPVxuICAgIGxheWVyTWVyZ2VycyAmJiBsYXllck1lcmdlcnMubGVuZ3RoID4gMFxuICAgICAgPyBhcHBseU1lcmdlcnNVcGRhdGVyKHVwZGF0ZWRTdGF0ZSwge1xuICAgICAgICAgIG1lcmdlcnM6IGxheWVyTWVyZ2VycyxcbiAgICAgICAgICBwb3N0TWVyZ2VyUGF5bG9hZDogey4uLnBvc3RNZXJnZXJQYXlsb2FkLCBsYXllck1lcmdlcnM6IFtdfVxuICAgICAgICB9KVxuICAgICAgOiB1cGRhdGVkU3RhdGU7XG5cbiAgLy8gY2VudGVyIHRoZSBtYXAgb25jZSB0aGUgZGF0YXNldCBpcyBjcmVhdGVkXG4gIGlmIChuZXdMYXllcnMubGVuZ3RoICYmIChvcHRpb25zIHx8IHt9KS5jZW50ZXJNYXApIHtcbiAgICBjb25zdCBib3VuZHMgPSBmaW5kTWFwQm91bmRzKG5ld0xheWVycyk7XG4gICAgaWYgKGJvdW5kcykge1xuICAgICAgY29uc3QgZml0Qm91bmRzVGFzayA9IEFDVElPTl9UQVNLX0ZJVF9CT1VORFMoKS5tYXAoKCkgPT4ge1xuICAgICAgICByZXR1cm4gZml0TWFwQm91bmRzKGJvdW5kcyk7XG4gICAgICB9KTtcbiAgICAgIHVwZGF0ZWRTdGF0ZSA9IHdpdGhUYXNrKHVwZGF0ZWRTdGF0ZSwgZml0Qm91bmRzVGFzayk7XG4gICAgfVxuICB9XG5cbiAgLy8gbmVlZCB0byBjZW50ZXIgbWFwIGhlcmUgaWYgd2UgaGF2ZSBuZXcgbGF5ZXJzXG4gIHJldHVybiB1cGRhdGVkU3RhdGU7XG59XG5cbi8qKlxuICogUmVuYW1lIGFuIGV4aXN0aW5nIGRhdGFzZXQgaW4gYHZpc1N0YXRlYFxuICogQG1lbWJlcm9mIHZpc1N0YXRlVXBkYXRlcnNcbiAqIEBwdWJsaWNcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHJlbmFtZURhdGFzZXRVcGRhdGVyKFxuICBzdGF0ZTogVmlzU3RhdGUsXG4gIGFjdGlvbjogVmlzU3RhdGVBY3Rpb25zLlJlbmFtZURhdGFzZXRVcGRhdGVyQWN0aW9uXG4pOiBWaXNTdGF0ZSB7XG4gIHJldHVybiB1cGRhdGVEYXRhc2V0UHJvcHNVcGRhdGVyKHN0YXRlLCB7ZGF0YUlkOiBhY3Rpb24uZGF0YUlkLCBwcm9wczoge2xhYmVsOiBhY3Rpb24ubGFiZWx9fSk7XG59XG5cbmNvbnN0IEFMTE9XRURfVVBEQVRFX0RBVEFTRVRfUFJPUFMgPSBbJ2xhYmVsJywgJ2NvbG9yJywgJ21ldGFkYXRhJ107XG5cbi8qKlxuICogVmFsaWRhdGVzIHByb3BlcnRpZXMgYmVmb3JlIHVwZGF0aW5nIHRoZSBkYXRhc2V0LlxuICogTWFrZXMgc3VyZSBlYWNoIHByb3BlcnR5IGlzIGluIHRoZSBhbGxvd2VkIGxpc3RcbiAqIE1ha2VzIHN1cmUgY29sb3IgdmFsdWUgaXMgUkdCXG4gKiBQZXJmb3JtcyBkZWVwIG1lcmdlIHdoZW4gdXBkYXRpbmcgbWV0YWRhdGFcbiAqL1xuY29uc3QgdmFsaWRhdGVEYXRhc2V0VXBkYXRlUHJvcHMgPSAocHJvcHMsIGRhdGFzZXQpID0+IHtcbiAgY29uc3QgdmFsaWRhdGVkUHJvcHMgPSBPYmplY3QuZW50cmllcyhwcm9wcykucmVkdWNlKChhY2MsIGVudHJ5KSA9PiB7XG4gICAgY29uc3QgW2tleSwgdmFsdWVdID0gZW50cnk7XG4gICAgLy8gaXMgaXQgYWxsb3dlZCA/XG4gICAgaWYgKCFBTExPV0VEX1VQREFURV9EQVRBU0VUX1BST1BTLmluY2x1ZGVzKGtleSkpIHtcbiAgICAgIHJldHVybiBhY2M7XG4gICAgfVxuXG4gICAgLy8gaWYgd2UgYXJlIGFkZGluZyBhIGNvbG9yIGJ1dCBpdCBpcyBub3QgUkdCIHdlIGRvbid0IGFjY2VwdCB0aGUgdmFsdWVcbiAgICAvLyBpbiB0aGUgZnV0dXJlIGFzIHdlIGFkZCBtb3JlIHByb3BzIHdlIHNob3VsZCBjaGFuZ2UgdGhpcyBpZiBpbnRvIGEgc3dpdGNoXG4gICAgaWYgKGtleSA9PT0gJ2NvbG9yJyAmJiAhaXNSZ2JDb2xvcih2YWx1ZSkpIHtcbiAgICAgIHJldHVybiBhY2M7XG4gICAgfVxuXG4gICAgLy8gZG8gd2UgbmVlZCBkZWVwIG1lcmdlID9cbiAgICByZXR1cm4gey4uLmFjYywgW2tleV06IGlzUGxhaW5PYmplY3QodmFsdWUpID8gZGVlcG1lcmdlKGRhdGFzZXRba2V5XSB8fCB7fSwgdmFsdWUpIDogdmFsdWV9O1xuICB9LCB7fSk7XG5cbiAgcmV0dXJuIHZhbGlkYXRlZFByb3BzO1xufTtcblxuLyoqXG4gKiBVcGRhdGUgRGF0YXNldCBwcm9wcyAobGFiZWwsIGNvbG9yLCBtZXRhKS4gRG8gbm90IHVzZSB0byB1cGRhdGUgZGF0YSBvciBhbnkgcmVsYXRlZCBwcm9wZXJ0aWVzXG4gKiBAbWVtYmVyb2YgdmlzU3RhdGVVcGRhdGVyc1xuICogQHB1YmxpY1xuICovXG5leHBvcnQgZnVuY3Rpb24gdXBkYXRlRGF0YXNldFByb3BzVXBkYXRlcihcbiAgc3RhdGU6IFZpc1N0YXRlLFxuICBhY3Rpb246IFZpc1N0YXRlQWN0aW9ucy5VcGRhdGVEYXRhc2V0UHJvcHNVcGRhdGVyQWN0aW9uXG4pOiBWaXNTdGF0ZSB7XG4gIGNvbnN0IHtkYXRhSWQsIHByb3BzfSA9IGFjdGlvbjtcbiAgY29uc3Qge2RhdGFzZXRzfSA9IHN0YXRlO1xuICBjb25zdCBleGlzdGluZyA9IGRhdGFzZXRzW2RhdGFJZF07XG5cbiAgaWYgKGV4aXN0aW5nKSB7XG4gICAgY29uc3QgdmFsaWRhdGVkUHJvcHMgPSB2YWxpZGF0ZURhdGFzZXRVcGRhdGVQcm9wcyhwcm9wcywgZXhpc3RpbmcpO1xuICAgIC8vICB2YWxpZGF0ZSBwcm9wczoganVzdCBjb2xvciBmb3Igbm93XG4gICAgLy8gIHdlIG9ubHkgYWxsb3cgbGFiZWwsIGNvbG9yIGFuZCBtZXRhIHRvIGJlIHVwZGF0ZWRcbiAgICAvLyBjb25zdCBuZXdUYWJsZSA9IGNvcHlUYWJsZUFuZFVwZGF0ZShleGlzdGluZywgdmFsaWRhdGVkUHJvcHMpO1xuICAgIHJldHVybiB7XG4gICAgICAuLi5zdGF0ZSxcbiAgICAgIGRhdGFzZXRzOiB7XG4gICAgICAgIC4uLmRhdGFzZXRzLFxuICAgICAgICBbZGF0YUlkXTogY29weVRhYmxlQW5kVXBkYXRlKGV4aXN0aW5nLCB2YWxpZGF0ZWRQcm9wcylcbiAgICAgIH1cbiAgICB9O1xuICB9XG5cbiAgcmV0dXJuIHN0YXRlO1xufVxuXG4vKipcbiAqIFdoZW4gYSB1c2VyIGNsaWNrcyBvbiB0aGUgc3BlY2lmaWMgbWFwIGNsb3NpbmcgaWNvblxuICogdGhlIGFwcGxpY2F0aW9uIHdpbGwgY2xvc2UgdGhlIHNlbGVjdGVkIG1hcFxuICogYW5kIHdpbGwgbWVyZ2UgdGhlIHJlbWFpbmluZyBvbmUgd2l0aCB0aGUgZ2xvYmFsIHN0YXRlXG4gKiBUT0RPOiBpIHRoaW5rIGluIHRoZSBmdXR1cmUgdGhpcyBhY3Rpb24gc2hvdWxkIGJlIGNhbGxlZCBtZXJnZSBtYXAgbGF5ZXJzIHdpdGggZ2xvYmFsIHNldHRpbmdzXG4gKiBAcGFyYW0ge09iamVjdH0gc3RhdGUgYHZpc1N0YXRlYFxuICogQHBhcmFtIHtPYmplY3R9IGFjdGlvbiBhY3Rpb25cbiAqIEByZXR1cm5zIHtPYmplY3R9IG5leHRTdGF0ZVxuICovXG5leHBvcnQgZnVuY3Rpb24gY2xvc2VTcGVjaWZpY01hcEF0SW5kZXg8UyBleHRlbmRzIFZpc1N0YXRlPihcbiAgc3RhdGU6IFMsXG4gIGFjdGlvbjogTWFwU3RhdGVBY3Rpb25zLlRvZ2dsZVNwbGl0TWFwVXBkYXRlckFjdGlvblxuKTogUyB7XG4gIC8vIHJldHJpZXZlIGxheWVycyBtZXRhIGRhdGEgZnJvbSB0aGUgcmVtYWluaW5nIG1hcCB0aGF0IHdlIG5lZWQgdG8ga2VlcFxuICBjb25zdCBpbmRleFRvUmV0cmlldmUgPSAxIC0gYWN0aW9uLnBheWxvYWQ7XG4gIGNvbnN0IG1hcExheWVycyA9IHN0YXRlLnNwbGl0TWFwc1tpbmRleFRvUmV0cmlldmVdPy5sYXllcnM7XG4gIGNvbnN0IHtsYXllcnN9ID0gc3RhdGU7XG5cbiAgLy8gdXBkYXRlIGxheWVyIHZpc2liaWxpdHlcbiAgY29uc3QgbmV3TGF5ZXJzID0gbGF5ZXJzLm1hcChsYXllciA9PlxuICAgIG1hcExheWVycyAmJiAhbWFwTGF5ZXJzW2xheWVyLmlkXSAmJiBsYXllci5jb25maWcuaXNWaXNpYmxlXG4gICAgICA/IGxheWVyLnVwZGF0ZUxheWVyQ29uZmlnKHtcbiAgICAgICAgICAvLyBpZiBsYXllci5pZCBpcyBub3QgaW4gbWFwTGF5ZXJzLCBpdCBzaG91bGQgYmUgaW5WaXNpYmxlXG4gICAgICAgICAgaXNWaXNpYmxlOiBmYWxzZVxuICAgICAgICB9KVxuICAgICAgOiBsYXllclxuICApO1xuXG4gIC8vIGRlbGV0ZSBtYXBcbiAgcmV0dXJuIHtcbiAgICAuLi5zdGF0ZSxcbiAgICBsYXllcnM6IG5ld0xheWVycyxcbiAgICBzcGxpdE1hcHM6IFtdXG4gIH07XG59XG5cbi8qKlxuICogVHJpZ2dlciBmaWxlIGxvYWRpbmcgZGlzcGF0Y2ggYGFkZERhdGFUb01hcGAgaWYgc3VjY2VlZCwgb3IgYGxvYWRGaWxlc0VycmAgaWYgZmFpbGVkXG4gKiBAbWVtYmVyb2YgdmlzU3RhdGVVcGRhdGVyc1xuICogQHB1YmxpY1xuICovXG5leHBvcnQgY29uc3QgbG9hZEZpbGVzVXBkYXRlciA9IChcbiAgc3RhdGU6IFZpc1N0YXRlLFxuICBhY3Rpb246IFZpc1N0YXRlQWN0aW9ucy5Mb2FkRmlsZXNVcGRhdGVyQWN0aW9uXG4pOiBWaXNTdGF0ZSA9PiB7XG4gIGNvbnN0IHtmaWxlcywgb25GaW5pc2ggPSBsb2FkRmlsZXNTdWNjZXNzfSA9IGFjdGlvbjtcbiAgaWYgKCFmaWxlcy5sZW5ndGgpIHtcbiAgICByZXR1cm4gc3RhdGU7XG4gIH1cblxuICBjb25zdCBmaWxlTG9hZGluZ1Byb2dyZXNzID0gQXJyYXkuZnJvbShmaWxlcykucmVkdWNlKFxuICAgIChhY2N1LCBmLCBpKSA9PiBtZXJnZV8oaW5pdGlhbEZpbGVMb2FkaW5nUHJvZ3Jlc3MoZiwgaSkpKGFjY3UpLFxuICAgIHt9XG4gICk7XG5cbiAgY29uc3QgZmlsZUxvYWRpbmcgPSB7XG4gICAgZmlsZUNhY2hlOiBbXSxcbiAgICBmaWxlc1RvTG9hZDogZmlsZXMsXG4gICAgb25GaW5pc2hcbiAgfTtcblxuICBjb25zdCBuZXh0U3RhdGUgPSBtZXJnZV8oe2ZpbGVMb2FkaW5nUHJvZ3Jlc3MsIGZpbGVMb2FkaW5nfSkoc3RhdGUpO1xuXG4gIHJldHVybiBsb2FkTmV4dEZpbGVVcGRhdGVyKG5leHRTdGF0ZSk7XG59O1xuXG4vKipcbiAqIFN1Y2Vzc2Z1bGx5IGxvYWRlZCBvbmUgZmlsZSwgbW92ZSBvbiB0byB0aGUgbmV4dCBvbmVcbiAqIEBtZW1iZXJvZiB2aXNTdGF0ZVVwZGF0ZXJzXG4gKiBAcHVibGljXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBsb2FkRmlsZVN0ZXBTdWNjZXNzVXBkYXRlcihcbiAgc3RhdGU6IFZpc1N0YXRlLFxuICBhY3Rpb246IFZpc1N0YXRlQWN0aW9ucy5Mb2FkRmlsZVN0ZXBTdWNjZXNzQWN0aW9uXG4pOiBWaXNTdGF0ZSB7XG4gIGlmICghc3RhdGUuZmlsZUxvYWRpbmcpIHtcbiAgICByZXR1cm4gc3RhdGU7XG4gIH1cbiAgY29uc3Qge2ZpbGVOYW1lLCBmaWxlQ2FjaGV9ID0gYWN0aW9uO1xuICBjb25zdCB7ZmlsZXNUb0xvYWQsIG9uRmluaXNofSA9IHN0YXRlLmZpbGVMb2FkaW5nO1xuICBjb25zdCBzdGF0ZVdpdGhQcm9ncmVzcyA9IHVwZGF0ZUZpbGVMb2FkaW5nUHJvZ3Jlc3NVcGRhdGVyKHN0YXRlLCB7XG4gICAgZmlsZU5hbWUsXG4gICAgcHJvZ3Jlc3M6IHtwZXJjZW50OiAxLCBtZXNzYWdlOiAnRG9uZSd9XG4gIH0pO1xuXG4gIC8vIHNhdmUgcHJvY2Vzc2VkIGZpbGUgdG8gZmlsZUNhY2hlXG4gIGNvbnN0IHN0YXRlV2l0aENhY2hlID0gcGlja18oJ2ZpbGVMb2FkaW5nJykobWVyZ2VfKHtmaWxlQ2FjaGV9KSkoc3RhdGVXaXRoUHJvZ3Jlc3MpO1xuXG4gIHJldHVybiB3aXRoVGFzayhcbiAgICBzdGF0ZVdpdGhDYWNoZSxcbiAgICBERUxBWV9UQVNLKDIwMCkubWFwKGZpbGVzVG9Mb2FkLmxlbmd0aCA/IGxvYWROZXh0RmlsZSA6ICgpID0+IG9uRmluaXNoKGZpbGVDYWNoZSkpXG4gICk7XG59XG5cbi8vIHdpdGhUYXNrPFQ+KHN0YXRlOiBULCB0YXNrOiBhbnkpOiBUXG5cbi8qKlxuICpcbiAqIEBtZW1iZXJvZiB2aXNTdGF0ZVVwZGF0ZXJzXG4gKiBAcHVibGljXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBsb2FkTmV4dEZpbGVVcGRhdGVyKHN0YXRlOiBWaXNTdGF0ZSk6IFZpc1N0YXRlIHtcbiAgaWYgKCFzdGF0ZS5maWxlTG9hZGluZykge1xuICAgIHJldHVybiBzdGF0ZTtcbiAgfVxuICBjb25zdCB7ZmlsZXNUb0xvYWR9ID0gc3RhdGUuZmlsZUxvYWRpbmc7XG4gIGNvbnN0IFtmaWxlLCAuLi5yZW1haW5pbmdGaWxlc1RvTG9hZF0gPSBmaWxlc1RvTG9hZDtcblxuICAvLyBzYXZlIGZpbGVzVG9Mb2FkIHRvIHN0YXRlXG4gIGNvbnN0IG5leHRTdGF0ZSA9IHBpY2tfKCdmaWxlTG9hZGluZycpKG1lcmdlXyh7ZmlsZXNUb0xvYWQ6IHJlbWFpbmluZ0ZpbGVzVG9Mb2FkfSkpKHN0YXRlKTtcblxuICBjb25zdCBzdGF0ZVdpdGhQcm9ncmVzcyA9IHVwZGF0ZUZpbGVMb2FkaW5nUHJvZ3Jlc3NVcGRhdGVyKG5leHRTdGF0ZSwge1xuICAgIGZpbGVOYW1lOiBmaWxlLm5hbWUsXG4gICAgcHJvZ3Jlc3M6IHtwZXJjZW50OiAwLCBtZXNzYWdlOiAnbG9hZGluZy4uLid9XG4gIH0pO1xuXG4gIGNvbnN0IHtsb2FkZXJzLCBsb2FkT3B0aW9uc30gPSBzdGF0ZTtcbiAgcmV0dXJuIHdpdGhUYXNrKFxuICAgIHN0YXRlV2l0aFByb2dyZXNzLFxuICAgIG1ha2VMb2FkRmlsZVRhc2soXG4gICAgICBmaWxlLFxuICAgICAgbmV4dFN0YXRlLmZpbGVMb2FkaW5nICYmIG5leHRTdGF0ZS5maWxlTG9hZGluZy5maWxlQ2FjaGUsXG4gICAgICBsb2FkZXJzLFxuICAgICAgbG9hZE9wdGlvbnNcbiAgICApXG4gICk7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBtYWtlTG9hZEZpbGVUYXNrKGZpbGUsIGZpbGVDYWNoZSwgbG9hZGVyczogTG9hZGVyW10gPSBbXSwgbG9hZE9wdGlvbnMgPSB7fSkge1xuICByZXR1cm4gTE9BRF9GSUxFX1RBU0soe2ZpbGUsIGZpbGVDYWNoZSwgbG9hZGVycywgbG9hZE9wdGlvbnN9KS5iaW1hcChcbiAgICAvLyBwcmV0dGllciBpZ25vcmVcbiAgICAvLyBzdWNjZXNzXG4gICAgZ2VuID0+XG4gICAgICBuZXh0RmlsZUJhdGNoKHtcbiAgICAgICAgZ2VuLFxuICAgICAgICBmaWxlTmFtZTogZmlsZS5uYW1lLFxuICAgICAgICBvbkZpbmlzaDogcmVzdWx0ID0+XG4gICAgICAgICAgcHJvY2Vzc0ZpbGVDb250ZW50KHtcbiAgICAgICAgICAgIGNvbnRlbnQ6IHJlc3VsdCxcbiAgICAgICAgICAgIGZpbGVDYWNoZVxuICAgICAgICAgIH0pXG4gICAgICB9KSxcblxuICAgIC8vIGVycm9yXG4gICAgZXJyID0+IGxvYWRGaWxlc0VycihmaWxlLm5hbWUsIGVycilcbiAgKTtcbn1cblxuLyoqXG4gKlxuICogQG1lbWJlcm9mIHZpc1N0YXRlVXBkYXRlcnNcbiAqIEBwdWJsaWNcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHByb2Nlc3NGaWxlQ29udGVudFVwZGF0ZXIoXG4gIHN0YXRlOiBWaXNTdGF0ZSxcbiAgYWN0aW9uOiBWaXNTdGF0ZUFjdGlvbnMuUHJvY2Vzc0ZpbGVDb250ZW50VXBkYXRlckFjdGlvblxuKTogVmlzU3RhdGUge1xuICBjb25zdCB7Y29udGVudCwgZmlsZUNhY2hlfSA9IGFjdGlvbi5wYXlsb2FkO1xuXG4gIGNvbnN0IHN0YXRlV2l0aFByb2dyZXNzID0gdXBkYXRlRmlsZUxvYWRpbmdQcm9ncmVzc1VwZGF0ZXIoc3RhdGUsIHtcbiAgICBmaWxlTmFtZTogY29udGVudC5maWxlTmFtZSxcbiAgICBwcm9ncmVzczoge3BlcmNlbnQ6IDEsIG1lc3NhZ2U6ICdwcm9jZXNzaW5nLi4uJ31cbiAgfSk7XG5cbiAgcmV0dXJuIHdpdGhUYXNrKFxuICAgIHN0YXRlV2l0aFByb2dyZXNzLFxuICAgIFBST0NFU1NfRklMRV9EQVRBKHtjb250ZW50LCBmaWxlQ2FjaGV9KS5iaW1hcChcbiAgICAgIHJlc3VsdCA9PiBsb2FkRmlsZVN0ZXBTdWNjZXNzKHtmaWxlTmFtZTogY29udGVudC5maWxlTmFtZSwgZmlsZUNhY2hlOiByZXN1bHR9KSxcbiAgICAgIGVyciA9PiBsb2FkRmlsZXNFcnIoY29udGVudC5maWxlTmFtZSwgZXJyKVxuICAgIClcbiAgKTtcbn1cblxuLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIEB0eXBlc2NyaXB0LWVzbGludC9uby11bnVzZWQtdmFyc1xuZXhwb3J0IGZ1bmN0aW9uIHBhcnNlUHJvZ3Jlc3MocHJldlByb2dyZXNzID0ge30sIHByb2dyZXNzKSB7XG4gIC8vIFRoaXMgaGFwcGVucyB3aGVuIHJlY2VpdmluZyBxdWVyeSBtZXRhZGF0YSBvciBvdGhlciBjYXNlcyB3ZSBkb24ndFxuICAvLyBoYXZlIGFuIHVwZGF0ZSBmb3IgdGhlIHVzZXIuXG4gIGlmICghcHJvZ3Jlc3MgfHwgIXByb2dyZXNzLnBlcmNlbnQpIHtcbiAgICByZXR1cm4ge307XG4gIH1cblxuICByZXR1cm4ge1xuICAgIHBlcmNlbnQ6IHByb2dyZXNzLnBlcmNlbnRcbiAgfTtcbn1cblxuLyoqXG4gKiBnZXRzIGNhbGxlZCB3aXRoIHBheWxvYWQgPSBBc3luY0dlbmVyYXRvcjw/Pz8+XG4gKiBAbWVtYmVyb2YgdmlzU3RhdGVVcGRhdGVyc1xuICogQHB1YmxpY1xuICovXG5leHBvcnQgY29uc3QgbmV4dEZpbGVCYXRjaFVwZGF0ZXIgPSAoXG4gIHN0YXRlOiBWaXNTdGF0ZSxcbiAge1xuICAgIHBheWxvYWQ6IHtnZW4sIGZpbGVOYW1lLCBwcm9ncmVzcywgYWNjdW11bGF0ZWQsIG9uRmluaXNofVxuICB9OiBWaXNTdGF0ZUFjdGlvbnMuTmV4dEZpbGVCYXRjaFVwZGF0ZXJBY3Rpb25cbik6IFZpc1N0YXRlID0+IHtcbiAgY29uc3Qgc3RhdGVXaXRoUHJvZ3Jlc3MgPSB1cGRhdGVGaWxlTG9hZGluZ1Byb2dyZXNzVXBkYXRlcihzdGF0ZSwge1xuICAgIGZpbGVOYW1lLFxuICAgIHByb2dyZXNzOiBwYXJzZVByb2dyZXNzKHN0YXRlLmZpbGVMb2FkaW5nUHJvZ3Jlc3NbZmlsZU5hbWVdLCBwcm9ncmVzcylcbiAgfSk7XG5cbiAgcmV0dXJuIHdpdGhUYXNrKHN0YXRlV2l0aFByb2dyZXNzLCBbXG4gICAgLi4uKGdldEFwcGxpY2F0aW9uQ29uZmlnKCkudXNlQXJyb3dQcm9ncmVzc2l2ZUxvYWRpbmcgJiZcbiAgICBmaWxlTmFtZS5lbmRzV2l0aCgnYXJyb3cnKSAmJlxuICAgIGFjY3VtdWxhdGVkPy5kYXRhPy5sZW5ndGggPiAwXG4gICAgICA/IFtcbiAgICAgICAgICBQUk9DRVNTX0ZJTEVfREFUQSh7Y29udGVudDogYWNjdW11bGF0ZWQsIGZpbGVDYWNoZTogW119KS5iaW1hcChcbiAgICAgICAgICAgIHJlc3VsdCA9PiBsb2FkRmlsZXNTdWNjZXNzKHJlc3VsdCksXG4gICAgICAgICAgICBlcnIgPT4gbG9hZEZpbGVzRXJyKGZpbGVOYW1lLCBlcnIpXG4gICAgICAgICAgKVxuICAgICAgICBdXG4gICAgICA6IFtdKSxcbiAgICBVTldSQVBfVEFTSyhnZW4ubmV4dCgpKS5iaW1hcChcbiAgICAgICh7dmFsdWUsIGRvbmV9KSA9PiB7XG4gICAgICAgIHJldHVybiBkb25lXG4gICAgICAgICAgPyBvbkZpbmlzaChhY2N1bXVsYXRlZClcbiAgICAgICAgICA6IG5leHRGaWxlQmF0Y2goe1xuICAgICAgICAgICAgICBnZW4sXG4gICAgICAgICAgICAgIGZpbGVOYW1lLFxuICAgICAgICAgICAgICBwcm9ncmVzczogdmFsdWUucHJvZ3Jlc3MsXG4gICAgICAgICAgICAgIGFjY3VtdWxhdGVkOiB2YWx1ZSxcbiAgICAgICAgICAgICAgb25GaW5pc2hcbiAgICAgICAgICAgIH0pO1xuICAgICAgfSxcbiAgICAgIGVyciA9PiBsb2FkRmlsZXNFcnIoZmlsZU5hbWUsIGVycilcbiAgICApXG4gIF0pO1xufTtcblxuLyoqXG4gKiBUcmlnZ2VyIGxvYWRpbmcgZmlsZSBlcnJvclxuICogQG1lbWJlcm9mIHZpc1N0YXRlVXBkYXRlcnNcbiAqIEBwdWJsaWNcbiAqL1xuZXhwb3J0IGNvbnN0IGxvYWRGaWxlc0VyclVwZGF0ZXIgPSAoXG4gIHN0YXRlOiBWaXNTdGF0ZSxcbiAge2Vycm9yLCBmaWxlTmFtZX06IFZpc1N0YXRlQWN0aW9ucy5Mb2FkRmlsZXNFcnJVcGRhdGVyQWN0aW9uXG4pOiBWaXNTdGF0ZSA9PiB7XG4gIC8vIHVwZGF0ZSB1aSB3aXRoIGVycm9yIG1lc3NhZ2VcbiAgQ29uc29sZS53YXJuKGVycm9yKTtcbiAgaWYgKCFzdGF0ZS5maWxlTG9hZGluZykge1xuICAgIHJldHVybiBzdGF0ZTtcbiAgfVxuICBjb25zdCB7ZmlsZXNUb0xvYWQsIG9uRmluaXNoLCBmaWxlQ2FjaGV9ID0gc3RhdGUuZmlsZUxvYWRpbmc7XG5cbiAgY29uc3QgbmV4dFN0YXRlID0gdXBkYXRlRmlsZUxvYWRpbmdQcm9ncmVzc1VwZGF0ZXIoc3RhdGUsIHtcbiAgICBmaWxlTmFtZSxcbiAgICBwcm9ncmVzczoge2Vycm9yfVxuICB9KTtcblxuICAvLyBraWNrIG9mZiBuZXh0IGZpbGUgb3IgZmluaXNoXG4gIHJldHVybiB3aXRoVGFzayhcbiAgICBuZXh0U3RhdGUsXG4gICAgREVMQVlfVEFTSygyMDApLm1hcChmaWxlc1RvTG9hZC5sZW5ndGggPyBsb2FkTmV4dEZpbGUgOiAoKSA9PiBvbkZpbmlzaChmaWxlQ2FjaGUpKVxuICApO1xufTtcblxuLyoqXG4gKiBXaGVuIHNlbGVjdCBkYXRhc2V0IGZvciBleHBvcnQsIGFwcGx5IGNwdSBmaWx0ZXIgdG8gc2VsZWN0ZWQgZGF0YXNldFxuICogQG1lbWJlcm9mIHZpc1N0YXRlVXBkYXRlcnNcbiAqIEBwdWJsaWNcbiAqL1xuZXhwb3J0IGNvbnN0IGFwcGx5Q1BVRmlsdGVyVXBkYXRlciA9IChcbiAgc3RhdGU6IFZpc1N0YXRlLFxuICB7ZGF0YUlkfTogVmlzU3RhdGVBY3Rpb25zLkFwcGx5Q1BVRmlsdGVyVXBkYXRlckFjdGlvblxuKTogVmlzU3RhdGUgPT4ge1xuICAvLyBhcHBseSBjcHVGaWx0ZXJcbiAgY29uc3QgZGF0YUlkcyA9IHRvQXJyYXkoZGF0YUlkKTtcblxuICByZXR1cm4gZGF0YUlkcy5yZWR1Y2UoKGFjY3UsIGlkKSA9PiBmaWx0ZXJEYXRhc2V0Q1BVKGFjY3UsIGlkKSwgc3RhdGUpO1xufTtcblxuLyoqXG4gKiBVc2VyIGlucHV0IHRvIHVwZGF0ZSB0aGUgaW5mbyBvZiB0aGUgbWFwXG4gKiBAbWVtYmVyb2YgdmlzU3RhdGVVcGRhdGVyc1xuICogQHB1YmxpY1xuICovXG5leHBvcnQgY29uc3Qgc2V0TWFwSW5mb1VwZGF0ZXIgPSAoXG4gIHN0YXRlOiBWaXNTdGF0ZSxcbiAgYWN0aW9uOiBWaXNTdGF0ZUFjdGlvbnMuU2V0TWFwSW5mb1VwZGF0ZXJBY3Rpb25cbik6IFZpc1N0YXRlID0+ICh7XG4gIC4uLnN0YXRlLFxuICBtYXBJbmZvOiB7XG4gICAgLi4uc3RhdGUubWFwSW5mbyxcbiAgICAuLi5hY3Rpb24uaW5mb1xuICB9XG59KTtcbi8qKlxuICogSGVscGVyIGZ1bmN0aW9uIHRvIHVwZGF0ZSBBbGwgbGF5ZXIgZG9tYWluIGFuZCBsYXllciBkYXRhIG9mIHN0YXRlXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBhZGREZWZhdWx0TGF5ZXJzKFxuICBzdGF0ZTogVmlzU3RhdGUsXG4gIGRhdGFzZXRzOiBEYXRhc2V0c1xuKToge3N0YXRlOiBWaXNTdGF0ZTsgbmV3TGF5ZXJzOiBMYXllcltdfSB7XG4gIGNvbnN0IGVtcHR5OiBMYXllcltdID0gW107XG4gIGNvbnN0IGRlZmF1bHRMYXllcnMgPSBPYmplY3QudmFsdWVzKGRhdGFzZXRzKS5yZWR1Y2UoKGFjY3U6IExheWVyW10sIGRhdGFzZXQpID0+IHtcbiAgICBjb25zdCBmb3VuZExheWVycyA9IGZpbmREZWZhdWx0TGF5ZXIoZGF0YXNldCwgc3RhdGUubGF5ZXJDbGFzc2VzKTtcbiAgICByZXR1cm4gZm91bmRMYXllcnMgJiYgZm91bmRMYXllcnMubGVuZ3RoID8gYWNjdS5jb25jYXQoZm91bmRMYXllcnMpIDogYWNjdTtcbiAgfSwgZW1wdHkpO1xuXG4gIHJldHVybiB7XG4gICAgc3RhdGU6IHtcbiAgICAgIC4uLnN0YXRlLFxuICAgICAgbGF5ZXJzOiBbLi4uc3RhdGUubGF5ZXJzLCAuLi5kZWZhdWx0TGF5ZXJzXSxcbiAgICAgIGxheWVyT3JkZXI6IFtcbiAgICAgICAgLy8gcHV0IG5ldyBsYXllcnMgb24gdG9wIG9mIG9sZCBvbmVzIGluIHJldmVyc2VcbiAgICAgICAgLi4uZ2V0TGF5ZXJPcmRlckZyb21MYXllcnMoZGVmYXVsdExheWVycyksXG4gICAgICAgIC4uLnN0YXRlLmxheWVyT3JkZXJcbiAgICAgIF1cbiAgICB9LFxuICAgIG5ld0xheWVyczogZGVmYXVsdExheWVyc1xuICB9O1xufVxuXG4vKipcbiAqIGhlbHBlciBmdW5jdGlvbiB0byBmaW5kIGRlZmF1bHQgdG9vbHRpcHNcbiAqIEBwYXJhbSB7T2JqZWN0fSBzdGF0ZVxuICogQHBhcmFtIHtPYmplY3R9IGRhdGFzZXRcbiAqIEByZXR1cm5zIHtPYmplY3R9IG5leHRTdGF0ZVxuICovXG5leHBvcnQgZnVuY3Rpb24gYWRkRGVmYXVsdFRvb2x0aXBzKHN0YXRlLCBkYXRhc2V0KSB7XG4gIGNvbnN0IHRvb2x0aXBGaWVsZHMgPSBmaW5kRmllbGRzVG9TaG93KHtcbiAgICAuLi5kYXRhc2V0LFxuICAgIG1heERlZmF1bHRUb29sdGlwczogc3RhdGUubWF4RGVmYXVsdFRvb2x0aXBzXG4gIH0pO1xuICBjb25zdCBtZXJnZWQgPSB7XG4gICAgLi4uc3RhdGUuaW50ZXJhY3Rpb25Db25maWcudG9vbHRpcC5jb25maWcuZmllbGRzVG9TaG93LFxuICAgIC4uLnRvb2x0aXBGaWVsZHNcbiAgfTtcblxuICByZXR1cm4gc2V0KFsnaW50ZXJhY3Rpb25Db25maWcnLCAndG9vbHRpcCcsICdjb25maWcnLCAnZmllbGRzVG9TaG93J10sIG1lcmdlZCwgc3RhdGUpO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gaW5pdGlhbEZpbGVMb2FkaW5nUHJvZ3Jlc3MoZmlsZSwgaW5kZXgpIHtcbiAgY29uc3QgZmlsZU5hbWUgPSBmaWxlLm5hbWUgfHwgYFVudGl0bGVkIEZpbGUgJHtpbmRleH1gO1xuICByZXR1cm4ge1xuICAgIFtmaWxlTmFtZV06IHtcbiAgICAgIC8vIHBlcmNlbnQgb2YgY3VycmVudCBmaWxlXG4gICAgICBwZXJjZW50OiAwLFxuICAgICAgbWVzc2FnZTogJycsXG4gICAgICBmaWxlTmFtZSxcbiAgICAgIGVycm9yOiBudWxsXG4gICAgfVxuICB9O1xufVxuXG5leHBvcnQgZnVuY3Rpb24gdXBkYXRlRmlsZUxvYWRpbmdQcm9ncmVzc1VwZGF0ZXIoc3RhdGUsIHtmaWxlTmFtZSwgcHJvZ3Jlc3N9KSB7XG4gIC8vIEB0cy1leHBlY3QtZXJyb3JcbiAgcmV0dXJuIHBpY2tfKCdmaWxlTG9hZGluZ1Byb2dyZXNzJykocGlja18oZmlsZU5hbWUpKG1lcmdlXyhwcm9ncmVzcykpKShzdGF0ZSk7XG59XG4vKipcbiAqIEhlbHBlciBmdW5jdGlvbiB0byB1cGRhdGUgbGF5ZXIgZG9tYWlucyBmb3IgYW4gYXJyYXkgb2YgZGF0YXNldHNcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHVwZGF0ZUFsbExheWVyRG9tYWluRGF0YTxTIGV4dGVuZHMgVmlzU3RhdGU+KFxuICBzdGF0ZTogUyxcbiAgZGF0YUlkOiBzdHJpbmcgfCBzdHJpbmdbXSxcbiAgdXBkYXRlZEZpbHRlcj86IEZpbHRlclxuKTogUyB7XG4gIGNvbnN0IGRhdGFJZHMgPSB0eXBlb2YgZGF0YUlkID09PSAnc3RyaW5nJyA/IFtkYXRhSWRdIDogZGF0YUlkO1xuICBjb25zdCBuZXdMYXllcnM6IExheWVyW10gPSBbXTtcbiAgY29uc3QgbmV3TGF5ZXJEYXRhOiBhbnlbXSA9IFtdO1xuXG4gIHN0YXRlLmxheWVycy5mb3JFYWNoKChvbGRMYXllciwgaSkgPT4ge1xuICAgIGlmIChvbGRMYXllci5jb25maWcuZGF0YUlkICYmIGRhdGFJZHMuaW5jbHVkZXMob2xkTGF5ZXIuY29uZmlnLmRhdGFJZCkpIHtcbiAgICAgIC8vIE5vIG5lZWQgdG8gcmVjYWxjdWxhdGUgbGF5ZXIgZG9tYWluIGlmIGZpbHRlciBoYXMgZml4ZWQgZG9tYWluXG4gICAgICBjb25zdCBuZXdMYXllciA9XG4gICAgICAgIHVwZGF0ZWRGaWx0ZXIgJiYgdXBkYXRlZEZpbHRlci5maXhlZERvbWFpblxuICAgICAgICAgID8gb2xkTGF5ZXJcbiAgICAgICAgICA6IG9sZExheWVyLnVwZGF0ZUxheWVyRG9tYWluKHN0YXRlLmRhdGFzZXRzLCB1cGRhdGVkRmlsdGVyKTtcblxuICAgICAgY29uc3Qge2xheWVyRGF0YSwgbGF5ZXJ9ID0gY2FsY3VsYXRlTGF5ZXJEYXRhKG5ld0xheWVyLCBzdGF0ZSwgc3RhdGUubGF5ZXJEYXRhW2ldKTtcblxuICAgICAgbmV3TGF5ZXJzLnB1c2gobGF5ZXIpO1xuICAgICAgbmV3TGF5ZXJEYXRhLnB1c2gobGF5ZXJEYXRhKTtcbiAgICB9IGVsc2Uge1xuICAgICAgbmV3TGF5ZXJzLnB1c2gob2xkTGF5ZXIpO1xuICAgICAgbmV3TGF5ZXJEYXRhLnB1c2goc3RhdGUubGF5ZXJEYXRhW2ldKTtcbiAgICB9XG4gIH0pO1xuXG4gIGNvbnN0IG5ld1N0YXRlID0ge1xuICAgIC4uLnN0YXRlLFxuICAgIGxheWVyczogbmV3TGF5ZXJzLFxuICAgIGxheWVyRGF0YTogbmV3TGF5ZXJEYXRhXG4gIH07XG5cbiAgcmV0dXJuIG5ld1N0YXRlO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gdXBkYXRlQW5pbWF0aW9uRG9tYWluPFMgZXh0ZW5kcyBWaXNTdGF0ZT4oc3RhdGU6IFMpOiBTIHtcbiAgLy8gbWVyZ2UgYWxsIGFuaW1hdGFibGUgbGF5ZXIgZG9tYWluIGFuZCB1cGRhdGUgZ2xvYmFsIGNvbmZpZ1xuICBjb25zdCBhbmltYXRhYmxlTGF5ZXJzID0gZ2V0QW5pbWF0YWJsZVZpc2libGVMYXllcnMoc3RhdGUubGF5ZXJzKTtcblxuICBpZiAoIWFuaW1hdGFibGVMYXllcnMubGVuZ3RoKSB7XG4gICAgcmV0dXJuIHtcbiAgICAgIC4uLnN0YXRlLFxuICAgICAgYW5pbWF0aW9uQ29uZmlnOiB7XG4gICAgICAgIC4uLnN0YXRlLmFuaW1hdGlvbkNvbmZpZyxcbiAgICAgICAgZG9tYWluOiBudWxsLFxuICAgICAgICBpc0FuaW1hdGluZzogZmFsc2UsXG4gICAgICAgIHRpbWVTdGVwczogbnVsbCxcbiAgICAgICAgZGVmYXVsdFRpbWVGb3JtYXQ6IG51bGxcbiAgICAgIH1cbiAgICB9O1xuICB9XG5cbiAgY29uc3QgbGF5ZXJEb21haW5zID0gYW5pbWF0YWJsZUxheWVycy5tYXAobCA9PiBsLmNvbmZpZy5hbmltYXRpb24uZG9tYWluIHx8IFtdKTtcbiAgLy8gQHRzLWlnbm9yZVxuICBjb25zdCBtZXJnZWREb21haW4gPSBtZXJnZVRpbWVEb21haW5zKGxheWVyRG9tYWlucyk7XG4gIGNvbnN0IGRlZmF1bHRUaW1lRm9ybWF0ID0gZ2V0VGltZVdpZGdldFRpdGxlRm9ybWF0dGVyKG1lcmdlZERvbWFpbik7XG5cbiAgLy8gbWVyZ2UgdGltZVN0ZXBzXG4gIGxldCBtZXJnZWRUaW1lU3RlcHM6IG51bWJlcltdIHwgbnVsbCA9IHVuaXE8bnVtYmVyPihcbiAgICBhbmltYXRhYmxlTGF5ZXJzLnJlZHVjZSgoYWNjdSwgbGF5ZXIpID0+IHtcbiAgICAgIGFjY3UucHVzaCguLi4obGF5ZXIuY29uZmlnLmFuaW1hdGlvbi50aW1lU3RlcHMgfHwgW10pKTtcbiAgICAgIHJldHVybiBhY2N1O1xuICAgIH0sIFtdKVxuICApLnNvcnQoKTtcblxuICBtZXJnZWRUaW1lU3RlcHMgPSBtZXJnZWRUaW1lU3RlcHMubGVuZ3RoID8gbWVyZ2VkVGltZVN0ZXBzIDogbnVsbDtcblxuICAvLyBUT0RPOiBiZXR0ZXIgaGFuZGxpbmcgb2YgZHVyYXRpb24gY2FsY3VsYXRpb25cbiAgY29uc3QgZHVyYXRpb24gPSBtZXJnZWRUaW1lU3RlcHNcbiAgICA/IChCQVNFX1NQRUVEICogKDEwMDAgLyBGUFMpKSAvIG1lcmdlZFRpbWVTdGVwcy5sZW5ndGggLyAoc3RhdGUuYW5pbWF0aW9uQ29uZmlnLnNwZWVkIHx8IDEpXG4gICAgOiBudWxsO1xuXG4gIGNvbnN0IG5leHRTdGF0ZSA9IHtcbiAgICAuLi5zdGF0ZSxcbiAgICBhbmltYXRpb25Db25maWc6IHtcbiAgICAgIC4uLnN0YXRlLmFuaW1hdGlvbkNvbmZpZyxcbiAgICAgIGRvbWFpbjogbWVyZ2VkRG9tYWluLFxuICAgICAgZGVmYXVsdFRpbWVGb3JtYXQsXG4gICAgICBkdXJhdGlvbixcbiAgICAgIHRpbWVTdGVwczogbWVyZ2VkVGltZVN0ZXBzXG4gICAgfVxuICB9O1xuXG4gIC8vIHJlc2V0IGN1cnJlbnRUaW1lIGJhc2VkIG9uIG5ldyBkb21haW5cbiAgY29uc3Qgc3luY2VkRmlsdGVyID0gc3RhdGUuZmlsdGVycz8uZmluZChmID0+IChmIGFzIFRpbWVSYW5nZUZpbHRlcikuc3luY2VkV2l0aExheWVyVGltZWxpbmUpIGFzXG4gICAgfCBUaW1lUmFuZ2VGaWx0ZXJcbiAgICB8IHVuZGVmaW5lZDtcblxuICAvLyBpZiBzeW5jZWQgZmlsdGVyIGV4aXN0IHdlZSBuZWVkIHRvIG1lcmdlIGFuaW1hdGlvbkNvbmZpZyBhbmQgZmlsdGVyIGRvbWFpbnNcbiAgLy8gYW5kIHZhbGlkYXRlIHRoZSBjdXJyZW50IHRpbWUgYWdhaW5zdCB0aGUgbmV3IG1lcmdlZCBkb21haW5cbiAgY29uc3QgbmV3QW5pbWF0aW9uRG9tYWluID0gc3luY2VkRmlsdGVyXG4gICAgPyBtZXJnZVRpbWVEb21haW5zKFttZXJnZWREb21haW4sIHN5bmNlZEZpbHRlci5kb21haW5dKVxuICAgIDogbWVyZ2VkRG9tYWluO1xuICBjb25zdCBjdXJyZW50VGltZSA9IGlzSW5SYW5nZShzdGF0ZS5hbmltYXRpb25Db25maWcuY3VycmVudFRpbWUsIG5ld0FuaW1hdGlvbkRvbWFpbilcbiAgICA/IHN0YXRlLmFuaW1hdGlvbkNvbmZpZy5jdXJyZW50VGltZVxuICAgIDogbmV3QW5pbWF0aW9uRG9tYWluWzBdO1xuXG4gIGlmIChjdXJyZW50VGltZSAhPT0gc3RhdGUuYW5pbWF0aW9uQ29uZmlnLmN1cnJlbnRUaW1lKSB7XG4gICAgLy8gaWYgY3VycmVudFRpbWUgY2hhbmdlZCwgbmVlZCB0byBjYWxsIGFuaW1hdGlvblRpbWVVcGRhdGVyIHRvIHJlIGNhbGwgZm9ybWF0TGF5ZXJEYXRhXG4gICAgcmV0dXJuIHNldExheWVyQW5pbWF0aW9uVGltZVVwZGF0ZXIobmV4dFN0YXRlLCB7dmFsdWU6IGN1cnJlbnRUaW1lfSk7XG4gIH1cblxuICByZXR1cm4gbmV4dFN0YXRlO1xufVxuXG4vKipcbiAqIFVwZGF0ZSB0aGUgc3RhdHVzIG9mIHRoZSBlZGl0b3JcbiAqIEBtZW1iZXJvZiB2aXNTdGF0ZVVwZGF0ZXJzXG4gKi9cbmV4cG9ydCBjb25zdCBzZXRFZGl0b3JNb2RlVXBkYXRlciA9IChcbiAgc3RhdGU6IFZpc1N0YXRlLFxuICB7bW9kZX06IFZpc1N0YXRlQWN0aW9ucy5TZXRFZGl0b3JNb2RlVXBkYXRlckFjdGlvblxuKTogVmlzU3RhdGUgPT4gKHtcbiAgLi4uc3RhdGUsXG4gIGVkaXRvcjoge1xuICAgIC4uLnN0YXRlLmVkaXRvcixcbiAgICBtb2RlLFxuICAgIHNlbGVjdGVkRmVhdHVyZTogbnVsbFxuICB9XG59KTtcblxuLy8gY29uc3QgZmVhdHVyZVRvRmlsdGVyVmFsdWUgPSAoZmVhdHVyZSkgPT4gKHsuLi5mZWF0dXJlLCBpZDogZmVhdHVyZS5pZH0pO1xuLyoqXG4gKiBVcGRhdGUgZWRpdG9yIGZlYXR1cmVzXG4gKiBAbWVtYmVyb2YgdmlzU3RhdGVVcGRhdGVyc1xuICovXG5leHBvcnQgZnVuY3Rpb24gc2V0RmVhdHVyZXNVcGRhdGVyKFxuICBzdGF0ZTogVmlzU3RhdGUsXG4gIHtmZWF0dXJlcyA9IFtdfTogVmlzU3RhdGVBY3Rpb25zLlNldEZlYXR1cmVzVXBkYXRlckFjdGlvblxuKTogVmlzU3RhdGUge1xuICBjb25zdCBsYXN0RmVhdHVyZSA9IGZlYXR1cmVzLmxlbmd0aCAmJiBmZWF0dXJlc1tmZWF0dXJlcy5sZW5ndGggLSAxXTtcblxuICBjb25zdCBuZXdTdGF0ZSA9IHtcbiAgICAuLi5zdGF0ZSxcbiAgICBlZGl0b3I6IHtcbiAgICAgIC4uLnN0YXRlLmVkaXRvcixcbiAgICAgIC8vIG9ubHkgc2F2ZSBub25lIGZpbHRlciBmZWF0dXJlcyB0byBlZGl0b3JcbiAgICAgIGZlYXR1cmVzOiBmZWF0dXJlcy5maWx0ZXIoZiA9PiAhZ2V0RmlsdGVySWRJbkZlYXR1cmUoZikpLFxuICAgICAgbW9kZTogbGFzdEZlYXR1cmUgJiYgbGFzdEZlYXR1cmUucHJvcGVydGllcz8uaXNDbG9zZWQgPyBFRElUT1JfTU9ERVMuRURJVCA6IHN0YXRlLmVkaXRvci5tb2RlXG4gICAgfVxuICB9O1xuXG4gIC8vIFJldHJpZXZlIGV4aXN0aW5nIGZlYXR1cmVcbiAgY29uc3Qge3NlbGVjdGVkRmVhdHVyZX0gPSBzdGF0ZS5lZGl0b3I7XG5cbiAgLy8gSWYgbm8gZmVhdHVyZSBpcyBzZWxlY3RlZCB3ZSBjYW4gc2ltcGx5IHJldHVybiBzaW5jZSBubyBvcGVyYXRpb25zXG4gIGlmICghc2VsZWN0ZWRGZWF0dXJlKSB7XG4gICAgcmV0dXJuIG5ld1N0YXRlO1xuICB9XG5cbiAgLy8gVE9ETzogY2hlY2sgaWYgdGhlIGZlYXR1cmUgaGFzIGNoYW5nZWRcbiAgY29uc3QgZmVhdHVyZSA9IGZlYXR1cmVzLmZpbmQoZiA9PiBmLmlkID09PSBzZWxlY3RlZEZlYXR1cmUuaWQpO1xuXG4gIC8vIGlmIGZlYXR1cmUgaXMgcGFydCBvZiBhIGZpbHRlclxuICBjb25zdCBmaWx0ZXJJZCA9IGZlYXR1cmUgJiYgZ2V0RmlsdGVySWRJbkZlYXR1cmUoZmVhdHVyZSk7XG4gIGlmIChmaWx0ZXJJZCAmJiBmZWF0dXJlKSB7XG4gICAgLy8gYWRkIGJib3ggZm9yIHBvbHlnb24gZmlsdGVyIHRvIHNwZWVkIHVwIGZpbHRlcmluZ1xuICAgIGlmIChmZWF0dXJlLnByb3BlcnRpZXMpIGZlYXR1cmUucHJvcGVydGllcy5iYm94ID0gYmJveChmZWF0dXJlKTtcbiAgICBjb25zdCBmZWF0dXJlVmFsdWUgPSBmZWF0dXJlVG9GaWx0ZXJWYWx1ZShmZWF0dXJlLCBmaWx0ZXJJZCk7XG4gICAgY29uc3QgZmlsdGVySWR4ID0gc3RhdGUuZmlsdGVycy5maW5kSW5kZXgoZmlsID0+IGZpbC5pZCA9PT0gZmlsdGVySWQpO1xuICAgIC8vIEB0cy1pZ25vcmVcbiAgICByZXR1cm4gc2V0RmlsdGVyVXBkYXRlcihuZXdTdGF0ZSwge1xuICAgICAgaWR4OiBmaWx0ZXJJZHgsXG4gICAgICBwcm9wOiAndmFsdWUnLFxuICAgICAgdmFsdWU6IGZlYXR1cmVWYWx1ZVxuICAgIH0pO1xuICB9XG5cbiAgcmV0dXJuIG5ld1N0YXRlO1xufVxuXG4vKipcbiAqIFNldCB0aGUgY3VycmVudCBzZWxlY3RlZCBmZWF0dXJlXG4gKiBAbWVtYmVyb2YgdWlTdGF0ZVVwZGF0ZXJzXG4gKi9cbmV4cG9ydCBjb25zdCBzZXRTZWxlY3RlZEZlYXR1cmVVcGRhdGVyID0gKFxuICBzdGF0ZTogVmlzU3RhdGUsXG4gIHtmZWF0dXJlLCBzZWxlY3Rpb25Db250ZXh0fTogVmlzU3RhdGVBY3Rpb25zLlNldFNlbGVjdGVkRmVhdHVyZVVwZGF0ZXJBY3Rpb25cbik6IFZpc1N0YXRlID0+IHtcbiAgLy8gYWRkIGJib3ggZm9yIHBvbHlnb24gZmlsdGVyIHRvIHNwZWVkIHVwIGZpbHRlcmluZ1xuICBsZXQgc2VsZWN0ZWRGZWF0dXJlID0gZmVhdHVyZTtcbiAgaWYgKGZlYXR1cmU/LnByb3BlcnRpZXMpIHtcbiAgICBzZWxlY3RlZEZlYXR1cmUgPSB7XG4gICAgICAuLi5mZWF0dXJlLFxuICAgICAgcHJvcGVydGllczoge1xuICAgICAgICAuLi5mZWF0dXJlLnByb3BlcnRpZXMsXG4gICAgICAgIGJib3g6IGJib3goZmVhdHVyZSlcbiAgICAgIH1cbiAgICB9O1xuICB9XG4gIHJldHVybiB7XG4gICAgLi4uc3RhdGUsXG4gICAgZWRpdG9yOiB7XG4gICAgICAuLi5zdGF0ZS5lZGl0b3IsXG4gICAgICBzZWxlY3RlZEZlYXR1cmUsXG4gICAgICBzZWxlY3Rpb25Db250ZXh0XG4gICAgfVxuICB9O1xufTtcblxuLyoqXG4gKiBEZWxldGUgZXhpc3RpbmcgZmVhdHVyZSBmcm9tIGZpbHRlcnNcbiAqIEBtZW1iZXJvZiB2aXNTdGF0ZVVwZGF0ZXJzXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBkZWxldGVGZWF0dXJlVXBkYXRlcihcbiAgc3RhdGU6IFZpc1N0YXRlLFxuICB7ZmVhdHVyZX06IFZpc1N0YXRlQWN0aW9ucy5EZWxldGVGZWF0dXJlVXBkYXRlckFjdGlvblxuKTogVmlzU3RhdGUge1xuICBpZiAoIWZlYXR1cmUpIHtcbiAgICByZXR1cm4gc3RhdGU7XG4gIH1cblxuICBjb25zdCBuZXdTdGF0ZSA9IHtcbiAgICAuLi5zdGF0ZSxcbiAgICBlZGl0b3I6IHtcbiAgICAgIC4uLnN0YXRlLmVkaXRvcixcbiAgICAgIHNlbGVjdGVkRmVhdHVyZTogbnVsbFxuICAgIH1cbiAgfTtcblxuICBpZiAoZ2V0RmlsdGVySWRJbkZlYXR1cmUoZmVhdHVyZSkpIHtcbiAgICBjb25zdCBmaWx0ZXJJZHggPSBuZXdTdGF0ZS5maWx0ZXJzLmZpbmRJbmRleChmID0+IGYuaWQgPT09IGdldEZpbHRlcklkSW5GZWF0dXJlKGZlYXR1cmUpKTtcblxuICAgIHJldHVybiBmaWx0ZXJJZHggPiAtMSA/IHJlbW92ZUZpbHRlclVwZGF0ZXIobmV3U3RhdGUsIHtpZHg6IGZpbHRlcklkeH0pIDogbmV3U3RhdGU7XG4gIH1cblxuICAvLyBtb2RpZnkgZWRpdG9yIG9iamVjdFxuICBjb25zdCBuZXdFZGl0b3IgPSB7XG4gICAgLi4uc3RhdGUuZWRpdG9yLFxuICAgIGZlYXR1cmVzOiBzdGF0ZS5lZGl0b3IuZmVhdHVyZXMuZmlsdGVyKGYgPT4gZi5pZCAhPT0gZmVhdHVyZS5pZCksXG4gICAgc2VsZWN0ZWRGZWF0dXJlOiBudWxsXG4gIH07XG5cbiAgcmV0dXJuIHtcbiAgICAuLi5zdGF0ZSxcbiAgICBlZGl0b3I6IG5ld0VkaXRvclxuICB9O1xufVxuXG4vKipcbiAqIFRvZ2dsZSBmZWF0dXJlIGFzIGxheWVyIGZpbHRlclxuICogQG1lbWJlcm9mIHZpc1N0YXRlVXBkYXRlcnNcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHNldFBvbHlnb25GaWx0ZXJMYXllclVwZGF0ZXIoXG4gIHN0YXRlOiBWaXNTdGF0ZSxcbiAgcGF5bG9hZDogVmlzU3RhdGVBY3Rpb25zLlNldFBvbHlnb25GaWx0ZXJMYXllclVwZGF0ZXJBY3Rpb25cbik6IFZpc1N0YXRlIHtcbiAgY29uc3Qge2xheWVyLCBmZWF0dXJlfSA9IHBheWxvYWQ7XG4gIGNvbnN0IGZpbHRlcklkID0gZ2V0RmlsdGVySWRJbkZlYXR1cmUoZmVhdHVyZSk7XG5cbiAgLy8gbGV0IG5ld0ZpbHRlciA9IG51bGw7XG4gIGxldCBmaWx0ZXJJZHg7XG4gIGxldCBuZXdMYXllcklkID0gW2xheWVyLmlkXTtcbiAgbGV0IG5ld1N0YXRlID0gc3RhdGU7XG4gIC8vIElmIHBvbHlnb24gZmlsdGVyIGFscmVhZHkgZXhpc3RzLCB3ZSBuZWVkIHRvIGZpbmQgb3V0IGlmIHRoZSBjdXJyZW50IGxheWVyIGlzIGFscmVhZHkgaW5jbHVkZWRcbiAgaWYgKGZpbHRlcklkKSB7XG4gICAgZmlsdGVySWR4ID0gc3RhdGUuZmlsdGVycy5maW5kSW5kZXgoZiA9PiBmLmlkID09PSBmaWx0ZXJJZCk7XG5cbiAgICBpZiAoIXN0YXRlLmZpbHRlcnNbZmlsdGVySWR4XSkge1xuICAgICAgLy8gd2hhdCBpZiBmaWx0ZXIgZG9lc24ndCBleGlzdD8uLi4gbm90IHBvc3NpYmxlLlxuICAgICAgLy8gYmVjYXVzZSBmZWF0dXJlcyBpbiB0aGUgZWRpdG9yIGlzIHBhc3NlZCBpbiBmcm9tIGZpbHRlcnMgYW5kIGVkaXRvcnMuXG4gICAgICAvLyBidXQgd2Ugd2lsbCBtb3ZlIHRoaXMgZmVhdHVyZSBiYWNrIHRvIGVkaXRvciBqdXN0IGluIGNhc2VcbiAgICAgIGNvbnN0IG5vbmVGaWx0ZXJGZWF0dXJlID0ge1xuICAgICAgICAuLi5mZWF0dXJlLFxuICAgICAgICBwcm9wZXJ0aWVzOiB7XG4gICAgICAgICAgLi4uZmVhdHVyZS5wcm9wZXJ0aWVzLFxuICAgICAgICAgIGZpbHRlcklkOiBudWxsXG4gICAgICAgIH1cbiAgICAgIH07XG5cbiAgICAgIHJldHVybiB7XG4gICAgICAgIC4uLnN0YXRlLFxuICAgICAgICBlZGl0b3I6IHtcbiAgICAgICAgICAuLi5zdGF0ZS5lZGl0b3IsXG4gICAgICAgICAgZmVhdHVyZXM6IFsuLi5zdGF0ZS5lZGl0b3IuZmVhdHVyZXMsIG5vbmVGaWx0ZXJGZWF0dXJlXSxcbiAgICAgICAgICBzZWxlY3RlZEZlYXR1cmU6IG5vbmVGaWx0ZXJGZWF0dXJlXG4gICAgICAgIH1cbiAgICAgIH07XG4gICAgfVxuICAgIGNvbnN0IGZpbHRlciA9IHN0YXRlLmZpbHRlcnNbZmlsdGVySWR4XTtcbiAgICBjb25zdCB7bGF5ZXJJZCA9IFtdfSA9IGZpbHRlcjtcbiAgICBjb25zdCBpc0xheWVySW5jbHVkZWQgPSBsYXllcklkLmluY2x1ZGVzKGxheWVyLmlkKTtcblxuICAgIG5ld0xheWVySWQgPSBpc0xheWVySW5jbHVkZWRcbiAgICAgID8gLy8gaWYgbGF5ZXIgaXMgaW5jbHVkZWQsIHJlbW92ZSBpdFxuICAgICAgICBsYXllcklkLmZpbHRlcihsID0+IGwgIT09IGxheWVyLmlkKVxuICAgICAgOiBbLi4ubGF5ZXJJZCwgbGF5ZXIuaWRdO1xuICB9IGVsc2Uge1xuICAgIC8vIGlmIHdlIGhhdmVuJ3QgY3JlYXRlIHRoZSBwb2x5Z29uIGZpbHRlciwgY3JlYXRlIGl0XG4gICAgY29uc3QgbmV3RmlsdGVyID0gZ2VuZXJhdGVQb2x5Z29uRmlsdGVyKFtdLCBmZWF0dXJlKTtcbiAgICBmaWx0ZXJJZHggPSBzdGF0ZS5maWx0ZXJzLmxlbmd0aDtcblxuICAgIC8vIGFkZCBmZWF0dXJlLCByZW1vdmUgZmVhdHVyZSBmcm9tIGVpZHRvclxuICAgIG5ld1N0YXRlID0ge1xuICAgICAgLi4uc3RhdGUsXG4gICAgICBmaWx0ZXJzOiBbLi4uc3RhdGUuZmlsdGVycywgbmV3RmlsdGVyXSxcbiAgICAgIGVkaXRvcjoge1xuICAgICAgICAuLi5zdGF0ZS5lZGl0b3IsXG4gICAgICAgIGZlYXR1cmVzOiBzdGF0ZS5lZGl0b3IuZmVhdHVyZXMuZmlsdGVyKGYgPT4gZi5pZCAhPT0gZmVhdHVyZS5pZCksXG4gICAgICAgIHNlbGVjdGVkRmVhdHVyZTogbmV3RmlsdGVyLnZhbHVlXG4gICAgICB9XG4gICAgfTtcbiAgfVxuXG4gIHJldHVybiBzZXRGaWx0ZXJVcGRhdGVyKG5ld1N0YXRlLCB7XG4gICAgaWR4OiBmaWx0ZXJJZHgsXG4gICAgcHJvcDogJ2xheWVySWQnLFxuICAgIHZhbHVlOiBuZXdMYXllcklkXG4gIH0pO1xufVxuXG4vKipcbiAqIEBtZW1iZXJvZiB2aXNTdGF0ZVVwZGF0ZXJzXG4gKiBAcHVibGljXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBzb3J0VGFibGVDb2x1bW5VcGRhdGVyKFxuICBzdGF0ZTogVmlzU3RhdGUsXG4gIHtkYXRhSWQsIGNvbHVtbiwgbW9kZX06IFZpc1N0YXRlQWN0aW9ucy5Tb3J0VGFibGVDb2x1bW5VcGRhdGVyQWN0aW9uXG4pOiBWaXNTdGF0ZSB7XG4gIGNvbnN0IGRhdGFzZXQgPSBzdGF0ZS5kYXRhc2V0c1tkYXRhSWRdO1xuICBpZiAoIWRhdGFzZXQpIHtcbiAgICByZXR1cm4gc3RhdGU7XG4gIH1cbiAgbGV0IHNvcnRNb2RlID0gbW9kZTtcbiAgaWYgKCFzb3J0TW9kZSkge1xuICAgIGNvbnN0IGN1cnJlbnRNb2RlID0gZ2V0KGRhdGFzZXQsIFsnc29ydENvbHVtbicsIGNvbHVtbl0pO1xuICAgIC8vIEB0cy1pZ25vcmUgLSBzaG91bGQgYmUgZml4YWJsZSBpbiBhIFRTIGZpbGVcbiAgICBzb3J0TW9kZSA9IGN1cnJlbnRNb2RlXG4gICAgICA/IE9iamVjdC5rZXlzKFNPUlRfT1JERVIpLmZpbmQobSA9PiBtICE9PSBjdXJyZW50TW9kZSlcbiAgICAgIDogU09SVF9PUkRFUi5BU0NFTkRJTkc7XG4gIH1cblxuICBjb25zdCBzb3J0ZWQgPSBzb3J0RGF0YXNldEJ5Q29sdW1uKGRhdGFzZXQsIGNvbHVtbiwgc29ydE1vZGUpO1xuICByZXR1cm4gc2V0KFsnZGF0YXNldHMnLCBkYXRhSWRdLCBzb3J0ZWQsIHN0YXRlKTtcbn1cblxuLyoqXG4gKiBAbWVtYmVyb2YgdmlzU3RhdGVVcGRhdGVyc1xuICogQHB1YmxpY1xuICovXG5leHBvcnQgZnVuY3Rpb24gcGluVGFibGVDb2x1bW5VcGRhdGVyKFxuICBzdGF0ZTogVmlzU3RhdGUsXG4gIHtkYXRhSWQsIGNvbHVtbn06IFZpc1N0YXRlQWN0aW9ucy5QaW5UYWJsZUNvbHVtblVwZGF0ZXJBY3Rpb25cbik6IFZpc1N0YXRlIHtcbiAgY29uc3QgZGF0YXNldCA9IHN0YXRlLmRhdGFzZXRzW2RhdGFJZF07XG4gIGlmICghZGF0YXNldCkge1xuICAgIHJldHVybiBzdGF0ZTtcbiAgfVxuICBjb25zdCBuZXdEYXRhc2V0ID0gcGluVGFibGVDb2x1bW5zKGRhdGFzZXQsIGNvbHVtbik7XG5cbiAgcmV0dXJuIHNldChbJ2RhdGFzZXRzJywgZGF0YUlkXSwgbmV3RGF0YXNldCwgc3RhdGUpO1xufVxuXG4vKipcbiAqIENvcHkgY29sdW1uIGNvbnRlbnQgYXMgc3RyaW5nc1xuICogQG1lbWJlcm9mIHZpc1N0YXRlVXBkYXRlcnNcbiAqIEBwdWJsaWNcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGNvcHlUYWJsZUNvbHVtblVwZGF0ZXIoXG4gIHN0YXRlOiBWaXNTdGF0ZSxcbiAge2RhdGFJZCwgY29sdW1ufTogVmlzU3RhdGVBY3Rpb25zLkNvcHlUYWJsZUNvbHVtblVwZGF0ZXJBY3Rpb25cbik6IFZpc1N0YXRlIHtcbiAgY29uc3QgZGF0YXNldCA9IHN0YXRlLmRhdGFzZXRzW2RhdGFJZF07XG4gIGlmICghZGF0YXNldCkge1xuICAgIHJldHVybiBzdGF0ZTtcbiAgfVxuICBjb25zdCBmaWVsZElkeCA9IGRhdGFzZXQuZmllbGRzLmZpbmRJbmRleChmID0+IGYubmFtZSA9PT0gY29sdW1uKTtcbiAgaWYgKGZpZWxkSWR4IDwgMCkge1xuICAgIHJldHVybiBzdGF0ZTtcbiAgfVxuICBjb25zdCB7dHlwZX0gPSBkYXRhc2V0LmZpZWxkc1tmaWVsZElkeF07XG4gIGNvbnN0IHRleHQgPSBkYXRhc2V0LmRhdGFDb250YWluZXJcbiAgICAubWFwKHJvdyA9PiBwYXJzZUZpZWxkVmFsdWUocm93LnZhbHVlQXQoZmllbGRJZHgpLCB0eXBlKSwgdHJ1ZSlcbiAgICAuam9pbignXFxuJyk7XG5cbiAgY29weSh0ZXh0KTtcblxuICByZXR1cm4gc3RhdGU7XG59XG5cbi8qKlxuICogU2V0IGRpc3BsYXkgZm9ybWF0IGZyb20gY29sdW1ucyBmcm9tIHVzZXIgc2VsZWN0aW9uXG4gKiBAbWVtYmVyb2YgdmlzU3RhdGVVcGRhdGVyc1xuICogQHB1YmxpY1xuICovXG5leHBvcnQgZnVuY3Rpb24gc2V0Q29sdW1uRGlzcGxheUZvcm1hdFVwZGF0ZXIoXG4gIHN0YXRlOiBWaXNTdGF0ZSxcbiAge2RhdGFJZCwgZm9ybWF0c306IFZpc1N0YXRlQWN0aW9ucy5TZXRDb2x1bW5EaXNwbGF5Rm9ybWF0VXBkYXRlckFjdGlvblxuKTogVmlzU3RhdGUge1xuICBjb25zdCBkYXRhc2V0ID0gc3RhdGUuZGF0YXNldHNbZGF0YUlkXTtcbiAgaWYgKCFkYXRhc2V0KSB7XG4gICAgcmV0dXJuIHN0YXRlO1xuICB9XG4gIGxldCBuZXdGaWVsZHMgPSBkYXRhc2V0LmZpZWxkcztcbiAgT2JqZWN0LmtleXMoZm9ybWF0cykuZm9yRWFjaChjb2x1bW4gPT4ge1xuICAgIGNvbnN0IGZpZWxkSWR4ID0gZGF0YXNldC5maWVsZHMuZmluZEluZGV4KGYgPT4gZi5uYW1lID09PSBjb2x1bW4pO1xuICAgIGlmIChmaWVsZElkeCA+PSAwKSB7XG4gICAgICBjb25zdCBkaXNwbGF5Rm9ybWF0ID0gZm9ybWF0c1tjb2x1bW5dO1xuICAgICAgY29uc3QgZmllbGQgPSBuZXdGaWVsZHNbZmllbGRJZHhdO1xuICAgICAgbmV3RmllbGRzID0gc3dhcF8obWVyZ2VfKHtkaXNwbGF5Rm9ybWF0fSkoZmllbGQpIGFzIHtpZDogc3RyaW5nfSkoXG4gICAgICAgIG5ld0ZpZWxkcyBhcyB7aWQ6IHN0cmluZ31bXVxuICAgICAgKSBhcyBGaWVsZFtdO1xuICAgIH1cbiAgfSk7XG5cbiAgY29uc3QgbmV3RGF0YXNldCA9IGNvcHlUYWJsZUFuZFVwZGF0ZShkYXRhc2V0LCB7ZmllbGRzOiBuZXdGaWVsZHMgYXMgRmllbGRbXX0pO1xuICBsZXQgbmV3U3RhdGUgPSBwaWNrXygnZGF0YXNldHMnKShtZXJnZV8oe1tkYXRhSWRdOiBuZXdEYXRhc2V0fSkpKHN0YXRlKTtcblxuICAvLyB1cGRhdGUgY29sb3JGaWVsZCBkaXNwbGF5Rm9ybWF0XG4gIG5ld1N0YXRlID0ge1xuICAgIC4uLm5ld1N0YXRlLFxuICAgIGxheWVyczogbmV3U3RhdGUubGF5ZXJzLm1hcChsYXllciA9PlxuICAgICAgbGF5ZXIuY29uZmlnPy5jb2xvckZpZWxkPy5uYW1lICYmIGxheWVyLmNvbmZpZy5jb2xvckZpZWxkLm5hbWUgaW4gZm9ybWF0c1xuICAgICAgICA/IGxheWVyLnVwZGF0ZUxheWVyQ29uZmlnKHtcbiAgICAgICAgICAgIGNvbG9yRmllbGQ6IHtcbiAgICAgICAgICAgICAgLi4ubGF5ZXIuY29uZmlnLmNvbG9yRmllbGQsXG4gICAgICAgICAgICAgIGRpc3BsYXlGb3JtYXQ6IGZvcm1hdHNbbGF5ZXIuY29uZmlnLmNvbG9yRmllbGQubmFtZV1cbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9KVxuICAgICAgICA6IGxheWVyXG4gICAgKVxuICB9O1xuXG4gIHJldHVybiBuZXdTdGF0ZTtcbn1cblxuLyoqXG4gKiBVcGRhdGUgZWRpdG9yXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiB0b2dnbGVFZGl0b3JWaXNpYmlsaXR5VXBkYXRlcihcbiAgc3RhdGU6IFZpc1N0YXRlLFxuICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgQHR5cGVzY3JpcHQtZXNsaW50L25vLXVudXNlZC12YXJzXG4gIGFjdGlvbjogVmlzU3RhdGVBY3Rpb25zLlRvZ2dsZUVkaXRvclZpc2liaWxpdHlVcGRhdGVyQWN0aW9uXG4pOiBWaXNTdGF0ZSB7XG4gIHJldHVybiB7XG4gICAgLi4uc3RhdGUsXG4gICAgZWRpdG9yOiB7XG4gICAgICAuLi5zdGF0ZS5lZGl0b3IsXG4gICAgICB2aXNpYmxlOiAhc3RhdGUuZWRpdG9yLnZpc2libGVcbiAgICB9XG4gIH07XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBzZXRGaWx0ZXJBbmltYXRpb25UaW1lQ29uZmlnVXBkYXRlcihcbiAgc3RhdGU6IFZpc1N0YXRlLFxuICB7aWR4LCBjb25maWd9OiBWaXNTdGF0ZUFjdGlvbnMuU2V0RmlsdGVyQW5pbWF0aW9uVGltZUNvbmZpZ0FjdGlvblxuKTogVmlzU3RhdGUge1xuICBjb25zdCBvbGRGaWx0ZXIgPSBzdGF0ZS5maWx0ZXJzW2lkeF07XG4gIGlmICghb2xkRmlsdGVyKSB7XG4gICAgQ29uc29sZS5lcnJvcihgZmlsdGVycy4ke2lkeH0gaXMgdW5kZWZpbmVkYCk7XG4gICAgcmV0dXJuIHN0YXRlO1xuICB9XG4gIGlmIChvbGRGaWx0ZXIudHlwZSAhPT0gRklMVEVSX1RZUEVTLnRpbWVSYW5nZSkge1xuICAgIENvbnNvbGUuZXJyb3IoXG4gICAgICBgc2V0RmlsdGVyQW5pbWF0aW9uVGltZUNvbmZpZyBjYW4gb25seSBiZSBjYWxsZWQgdG8gdXBkYXRlIGEgdGltZSBmaWx0ZXIuIGNoZWNrIGZpbHRlci50eXBlID09PSAndGltZVJhbmdlJ2BcbiAgICApO1xuICAgIHJldHVybiBzdGF0ZTtcbiAgfVxuXG4gIGNvbnN0IHVwZGF0ZXMgPSBjaGVja1RpbWVDb25maWdBcmdzKGNvbmZpZyk7XG5cbiAgcmV0dXJuIHBpY2tfKCdmaWx0ZXJzJykoc3dhcF8obWVyZ2VfKHVwZGF0ZXMpKG9sZEZpbHRlcikpKShzdGF0ZSk7XG59XG5cbmZ1bmN0aW9uIGNoZWNrVGltZUNvbmZpZ0FyZ3MoY29uZmlnKSB7XG4gIGNvbnN0IGFsbG93ZWQgPSBbJ3RpbWVGb3JtYXQnLCAndGltZXpvbmUnXTtcbiAgcmV0dXJuIE9iamVjdC5rZXlzKGNvbmZpZykucmVkdWNlKChhY2N1LCBwcm9wKSA9PiB7XG4gICAgaWYgKCFhbGxvd2VkLmluY2x1ZGVzKHByb3ApKSB7XG4gICAgICBDb25zb2xlLmVycm9yKFxuICAgICAgICBgc2V0TGF5ZXJBbmltYXRpb25UaW1lQ29uZmlnIHRha2VzIHRpbWVGb3JtYXQgYW5kL29yIHRpbWV6b25lIGFzIG9wdGlvbnMsIGZvdW5kICR7cHJvcH1gXG4gICAgICApO1xuICAgICAgcmV0dXJuIGFjY3U7XG4gICAgfVxuXG4gICAgLy8gaGVyZSB3ZSBhcmUgTk9UIGNoZWNraW5nIGlmIHRpbWV6b25lIG9yIHRpbWVGb3JtYXQgaW5wdXQgaXMgdmFsaWRcbiAgICBhY2N1W3Byb3BdID0gY29uZmlnW3Byb3BdO1xuICAgIHJldHVybiBhY2N1O1xuICB9LCB7fSk7XG59XG5cbi8qKlxuICogVXBkYXRlIGVkaXRvclxuICovXG5leHBvcnQgZnVuY3Rpb24gc2V0TGF5ZXJBbmltYXRpb25UaW1lQ29uZmlnVXBkYXRlcihcbiAgc3RhdGU6IFZpc1N0YXRlLFxuICB7Y29uZmlnfTogVmlzU3RhdGVBY3Rpb25zLlNldExheWVyQW5pbWF0aW9uVGltZUNvbmZpZ0FjdGlvblxuKTogVmlzU3RhdGUge1xuICBpZiAoIWNvbmZpZykge1xuICAgIHJldHVybiBzdGF0ZTtcbiAgfVxuICBjb25zdCB1cGRhdGVzID0gY2hlY2tUaW1lQ29uZmlnQXJncyhjb25maWcpO1xuICByZXR1cm4gcGlja18oJ2FuaW1hdGlvbkNvbmZpZycpKG1lcmdlXyh1cGRhdGVzKSkoc3RhdGUpO1xufVxuXG4vKipcbiAqIFVwZGF0ZSBlZGl0b3JcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGxheWVyRmlsdGVyZWRJdGVtc0NoYW5nZVVwZGF0ZXI8UyBleHRlbmRzIFZpc1N0YXRlPihcbiAgc3RhdGU6IFMsXG4gIGFjdGlvbjogVmlzU3RhdGVBY3Rpb25zLkxheWVyRmlsdGVyZWRJdGVtc0NoYW5nZUFjdGlvblxuKTogUyB7XG4gIGNvbnN0IHtldmVudCwgbGF5ZXJ9ID0gYWN0aW9uO1xuICBjb25zdCB7aWQ6IGRlY2tnbExheWVySWQsIGNvdW50fSA9IGV2ZW50O1xuICBpZiAoIWxheWVyKSB7XG4gICAgQ29uc29sZS53YXJuKGBsYXllckZpbHRlcmVkSXRlbXMgbGF5ZXIgZG9lc250IGV4aXN0c2ApO1xuICAgIHJldHVybiBzdGF0ZTtcbiAgfVxuICBpZiAobGF5ZXIuZmlsdGVyZWRJdGVtQ291bnQ/LltkZWNrZ2xMYXllcklkXSA9PT0gY291bnQpIHtcbiAgICByZXR1cm4gc3RhdGU7XG4gIH1cblxuICBsYXllci5maWx0ZXJlZEl0ZW1Db3VudCA9IHtcbiAgICAuLi5sYXllci5maWx0ZXJlZEl0ZW1Db3VudCxcbiAgICBbZGVja2dsTGF5ZXJJZF06IGNvdW50XG4gIH07XG5cbiAgcmV0dXJuIHtcbiAgICAuLi5zdGF0ZSxcbiAgICBsYXllcnM6IHN3YXBfKGxheWVyKShzdGF0ZS5sYXllcnMpXG4gIH07XG59XG5cbi8qKlxuICogVXBkYXRlIFdNUyBmZWF0dXJlIGluZm8gYW5kIHBpbiB0b29sdGlwXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiB3bXNGZWF0dXJlSW5mb1VwZGF0ZXI8UyBleHRlbmRzIFZpc1N0YXRlPihcbiAgc3RhdGU6IFMsXG4gIGFjdGlvbjogVmlzU3RhdGVBY3Rpb25zLldNU0ZlYXR1cmVJbmZvQWN0aW9uXG4pOiBTIHtcbiAgY29uc3Qge2xheWVyLCBmZWF0dXJlSW5mbywgY29vcmRpbmF0ZX0gPSBhY3Rpb247XG4gIGlmICghbGF5ZXIpIHtcbiAgICBjb25zb2xlLndhcm4oYFdNUyBmZWF0dXJlIGluZm8gbGF5ZXIgZG9lc24ndCBleGlzdGApO1xuICAgIHJldHVybiBzdGF0ZTtcbiAgfVxuXG4gIC8vIENyZWF0ZSBhIGNsaWNrZWQgb2JqZWN0IHNpbWlsYXIgdG8gbGF5ZXJDbGlja1VwZGF0ZXIgdG8gcGluIHRoZSB0b29sdGlwXG4gIGNvbnN0IGNsaWNrZWQgPSBmZWF0dXJlSW5mb1xuICAgID8ge1xuICAgICAgICBwaWNrZWQ6IHRydWUsXG4gICAgICAgIG9iamVjdDoge1xuICAgICAgICAgIHdtc0ZlYXR1cmVJbmZvOiBmZWF0dXJlSW5mb1xuICAgICAgICB9LFxuICAgICAgICBjb29yZGluYXRlOiBjb29yZGluYXRlIHx8IFswLCAwXSxcbiAgICAgICAgbGF5ZXI6IHtcbiAgICAgICAgICBwcm9wczoge1xuICAgICAgICAgICAgaWR4OiBzdGF0ZS5sYXllcnMuZmluZEluZGV4KGwgPT4gbC5pZCA9PT0gbGF5ZXIuaWQpLFxuICAgICAgICAgICAgaWQ6IGxheWVyLmlkXG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9XG4gICAgOiBudWxsO1xuXG4gIHJldHVybiB7XG4gICAgLi4uc3RhdGUsXG4gICAgY2xpY2tlZFxuICB9O1xufVxuXG4vLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgbWF4LXN0YXRlbWVudHNcbmV4cG9ydCBmdW5jdGlvbiBzeW5jVGltZUZpbHRlcldpdGhMYXllclRpbWVsaW5lVXBkYXRlcjxTIGV4dGVuZHMgVmlzU3RhdGU+KFxuICBzdGF0ZTogUyxcbiAgYWN0aW9uOiBWaXNTdGF0ZUFjdGlvbnMuU3luY1RpbWVGaWx0ZXJXaXRoTGF5ZXJUaW1lbGluZUFjdGlvblxuKTogUyB7XG4gIGNvbnN0IHtpZHg6IGZpbHRlcklkeCwgZW5hYmxlID0gZmFsc2V9ID0gYWN0aW9uO1xuXG4gIGNvbnN0IGZpbHRlciA9IHN0YXRlLmZpbHRlcnNbZmlsdGVySWR4XSBhcyBUaW1lUmFuZ2VGaWx0ZXI7XG5cbiAgbGV0IG5ld1N0YXRlID0gc3RhdGU7XG4gIGxldCBuZXdGaWx0ZXIgPSBmaWx0ZXI7XG5cbiAgLy8gaWYgd2UgZW5hYmxlIHN5bmMgd2UgYXJlIGdvaW5nIHRvIG1lcmdlIGZpbHRlciBhbmQgYW5pbWF0aW9uQ29uZmlnIGRvbWFpbnMgYW5kIHN0b3JlIGludG8gZmlsdGVyLmRvbWFpblxuICBpZiAoZW5hYmxlKSB7XG4gICAgY29uc3QgYW5pbWF0YWJsZUxheWVycyA9IGdldEFuaW1hdGFibGVWaXNpYmxlTGF5ZXJzKG5ld1N0YXRlLmxheWVycyk7XG4gICAgLy8gaWYgbm8gYW5pbWF0YWJsZUxheWVycyBhcmUgcHJlc2VudCB3ZSBzaW1wbHkgcmV0dXJuXG4gICAgaWYgKCFhbmltYXRhYmxlTGF5ZXJzLmxlbmd0aCkge1xuICAgICAgcmV0dXJuIG5ld1N0YXRlO1xuICAgIH1cblxuICAgIGNvbnN0IGludGVydmFsQmFzZWRBbmltYXRpb25MYXllcnMgPSBnZXRJbnRlcnZhbEJhc2VkQW5pbWF0aW9uTGF5ZXJzKGFuaW1hdGFibGVMYXllcnMpO1xuICAgIGNvbnN0IGhhc0ludGVydmFsQmFzZWRBbmltYXRpb25MYXllciA9IEJvb2xlYW4oaW50ZXJ2YWxCYXNlZEFuaW1hdGlvbkxheWVycy5sZW5ndGgpO1xuXG4gICAgY29uc3QgbmV3RmlsdGVyRG9tYWluID0gbWVyZ2VUaW1lRG9tYWlucyhbZmlsdGVyLmRvbWFpbiwgbmV3U3RhdGUuYW5pbWF0aW9uQ29uZmlnLmRvbWFpbl0pO1xuXG4gICAgLy8gd2Ugb25seSB1cGRhdGUgYW5pbWF0aW9uV2luZG93IGlmIHdlIGhhdmUgaW50ZXJ2YWwgYmFzZWQgYW5pbWF0aW9uIGxheWVycyB3aXRoIGRlZmluZWQgaW50ZXJ2YWxzIGFuZCB0aGUgY3VycmVudCBmaWx0ZXIgYW5pbWF0aW9uIHdpbmRvdyBpcyBub3QgaW50ZXJ2YWxcbiAgICBpZiAoaGFzSW50ZXJ2YWxCYXNlZEFuaW1hdGlvbkxheWVyKSB7XG4gICAgICBpZiAoZmlsdGVyLmFuaW1hdGlvbldpbmRvdyAhPT0gQU5JTUFUSU9OX1dJTkRPVy5pbnRlcnZhbCkge1xuICAgICAgICBuZXdTdGF0ZSA9IHNldEZpbHRlckFuaW1hdGlvbldpbmRvd1VwZGF0ZXIobmV3U3RhdGUsIHtcbiAgICAgICAgICBpZDogZmlsdGVyLmlkLFxuICAgICAgICAgIGFuaW1hdGlvbldpbmRvdzogQU5JTUFUSU9OX1dJTkRPVy5pbnRlcnZhbFxuICAgICAgICB9KTtcbiAgICAgIH1cblxuICAgICAgbmV3RmlsdGVyID0gbmV3U3RhdGUuZmlsdGVyc1tmaWx0ZXJJZHhdIGFzIFRpbWVSYW5nZUZpbHRlcjtcblxuICAgICAgLy8gYWRqdXN0IHRpbWUgZmlsdGVyIGludGVydmFsXG4gICAgICBuZXdGaWx0ZXIgPSBhZGp1c3RUaW1lRmlsdGVySW50ZXJ2YWwobmV3U3RhdGUsIG5ld0ZpbHRlcik7XG5cbiAgICAgIC8vIHJlcGxhY2UgZmlsdGVyIGluIHN0YXRlIHdpdGggbmV3RmlsdGVyXG4gICAgICBuZXdTdGF0ZSA9IHtcbiAgICAgICAgLi4ubmV3U3RhdGUsXG4gICAgICAgIGZpbHRlcnM6IHN3YXBfPEZpbHRlcj4obmV3RmlsdGVyKShuZXdTdGF0ZS5maWx0ZXJzKVxuICAgICAgfTtcbiAgICB9XG5cbiAgICBuZXdGaWx0ZXIgPSBuZXdTdGF0ZS5maWx0ZXJzW2ZpbHRlcklkeF0gYXMgVGltZVJhbmdlRmlsdGVyO1xuXG4gICAgLy8gYWRqdXN0IHZhbHVlIGJhc2VkIG9uIG5ldyBkb21haW5cbiAgICBjb25zdCBuZXdGaWx0ZXJWYWx1ZSA9IGFkanVzdFZhbHVlVG9GaWx0ZXJEb21haW4oXG4gICAgICBuZXdGaWx0ZXIuYW5pbWF0aW9uV2luZG93ID09PSBBTklNQVRJT05fV0lORE9XLmludGVydmFsXG4gICAgICAgID8gW25ld0ZpbHRlckRvbWFpblswXSwgbmV3RmlsdGVyRG9tYWluWzBdXVxuICAgICAgICA6IG5ld0ZpbHRlckRvbWFpbixcbiAgICAgIHsuLi5uZXdGaWx0ZXIsIGRvbWFpbjogbmV3RmlsdGVyRG9tYWlufVxuICAgICk7XG5cbiAgICBuZXdTdGF0ZSA9IHNldEZpbHRlclVwZGF0ZXIobmV3U3RhdGUsIHtcbiAgICAgIGlkeDogZmlsdGVySWR4LFxuICAgICAgcHJvcDogJ3ZhbHVlJyxcbiAgICAgIHZhbHVlOiBuZXdGaWx0ZXJWYWx1ZVxuICAgIH0pO1xuXG4gICAgbmV3RmlsdGVyID0ge1xuICAgICAgLi4uKG5ld1N0YXRlLmZpbHRlcnNbZmlsdGVySWR4XSBhcyBUaW1lUmFuZ2VGaWx0ZXIpLFxuICAgICAgc3luY2VkV2l0aExheWVyVGltZWxpbmU6IHRydWVcbiAgICB9O1xuXG4gICAgLy8gcmVwbGFjZSBmaWx0ZXIgaW4gc3RhdGUgd2l0aCBuZXdGaWx0ZXJcbiAgICBuZXdTdGF0ZSA9IHtcbiAgICAgIC4uLm5ld1N0YXRlLFxuICAgICAgZmlsdGVyczogc3dhcF88RmlsdGVyPihuZXdGaWx0ZXIpKG5ld1N0YXRlLmZpbHRlcnMpXG4gICAgfTtcblxuICAgIG5ld1N0YXRlID0gc2V0VGltZUZpbHRlclRpbWVsaW5lTW9kZVVwZGF0ZXIobmV3U3RhdGUsIHtcbiAgICAgIGlkOiBuZXdGaWx0ZXIuaWQsXG4gICAgICBtb2RlOiBnZXRTeW5jQW5pbWF0aW9uTW9kZShuZXdGaWx0ZXIpXG4gICAgfSk7XG5cbiAgICBuZXdGaWx0ZXIgPSBuZXdTdGF0ZS5maWx0ZXJzW2ZpbHRlcklkeF0gYXMgVGltZVJhbmdlRmlsdGVyO1xuXG4gICAgLy8gc2V0IHRoZSBhbmltYXRpb24gY29uZmlnIHZhbHVlIHRvIG1hdGNoIGZpbHRlciB2YWx1ZVxuICAgIHJldHVybiBzZXRMYXllckFuaW1hdGlvblRpbWVVcGRhdGVyKG5ld1N0YXRlLCB7XG4gICAgICB2YWx1ZTogbmV3RmlsdGVyLnZhbHVlW25ld0ZpbHRlci5zeW5jVGltZWxpbmVNb2RlXVxuICAgIH0pO1xuICB9XG5cbiAgLy8gc2V0IGRvbWFpbiBhbmQgc3RlcFxuICBuZXdGaWx0ZXIgPSB7XG4gICAgLi4uZmlsdGVyLFxuICAgIHN5bmNlZFdpdGhMYXllclRpbWVsaW5lOiBmYWxzZVxuICB9O1xuXG4gIC8vIHJlcGxhY2UgZmlsdGVyIGluIHN0YXRlIHdpdGggbmV3RmlsdGVyXG4gIG5ld1N0YXRlID0ge1xuICAgIC4uLm5ld1N0YXRlLFxuICAgIGZpbHRlcnM6IHN3YXBfPEZpbHRlcj4obmV3RmlsdGVyKShuZXdTdGF0ZS5maWx0ZXJzKVxuICB9O1xuXG4gIC8vIHJlc2V0IHN5bmMgdGltZWxpbmUgbW9kZVxuICBuZXdTdGF0ZSA9IHNldFRpbWVGaWx0ZXJUaW1lbGluZU1vZGVVcGRhdGVyKG5ld1N0YXRlLCB7XG4gICAgaWQ6IG5ld0ZpbHRlci5pZCxcbiAgICBtb2RlOiBTWU5DX1RJTUVMSU5FX01PREVTLmVuZFxuICB9KTtcblxuICBuZXdGaWx0ZXIgPSBuZXdTdGF0ZS5maWx0ZXJzW2ZpbHRlcklkeF0gYXMgVGltZVJhbmdlRmlsdGVyO1xuXG4gIC8vIHJlc2V0IGZpbHRlciB2YWx1ZVxuICBjb25zdCBuZXdGaWx0ZXJWYWx1ZSA9IGFkanVzdFZhbHVlVG9GaWx0ZXJEb21haW4obmV3RmlsdGVyLmRvbWFpbiwgbmV3RmlsdGVyKTtcblxuICBuZXdTdGF0ZSA9IHNldEZpbHRlclVwZGF0ZXIobmV3U3RhdGUsIHtcbiAgICBpZHg6IGZpbHRlcklkeCxcbiAgICBwcm9wOiAndmFsdWUnLFxuICAgIHZhbHVlOiBuZXdGaWx0ZXJWYWx1ZVxuICB9KTtcblxuICBuZXdTdGF0ZSA9IHNldFRpbWVGaWx0ZXJUaW1lbGluZU1vZGVVcGRhdGVyKG5ld1N0YXRlLCB7XG4gICAgaWQ6IG5ld0ZpbHRlci5pZCxcbiAgICBtb2RlOiBnZXRTeW5jQW5pbWF0aW9uTW9kZShuZXdGaWx0ZXIpXG4gIH0pO1xuXG4gIC8vIHJlc2V0IGFuaW1hdGlvbiBjb25maWcgY3VycmVudCB0aW1lIHRvXG4gIHJldHVybiBzZXRMYXllckFuaW1hdGlvblRpbWVVcGRhdGVyKG5ld1N0YXRlLCB7XG4gICAgdmFsdWU6IG5ld1N0YXRlLmFuaW1hdGlvbkNvbmZpZy5kb21haW4/LlswXSA/PyBudWxsXG4gIH0pO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gc2V0VGltZUZpbHRlclRpbWVsaW5lTW9kZVVwZGF0ZXI8UyBleHRlbmRzIFZpc1N0YXRlPihcbiAgc3RhdGU6IFMsXG4gIGFjdGlvbjogVmlzU3RhdGVBY3Rpb25zLnNldFRpbWVGaWx0ZXJTeW5jVGltZWxpbmVNb2RlQWN0aW9uXG4pIHtcbiAgY29uc3Qge2lkOiBmaWx0ZXJJZCwgbW9kZTogc3luY1RpbWVsaW5lTW9kZX0gPSBhY3Rpb247XG5cbiAgY29uc3QgZmlsdGVySWR4ID0gc3RhdGUuZmlsdGVycy5maW5kSW5kZXgoZiA9PiBmLmlkID09PSBmaWx0ZXJJZCk7XG4gIGlmIChmaWx0ZXJJZHggPT09IC0xKSB7XG4gICAgcmV0dXJuIHN0YXRlO1xuICB9XG5cbiAgY29uc3QgZmlsdGVyID0gc3RhdGUuZmlsdGVyc1tmaWx0ZXJJZHhdIGFzIFRpbWVSYW5nZUZpbHRlcjtcblxuICBpZiAoIXZhbGlkYXRlU3luY0FuaW1hdGlvbk1vZGUoZmlsdGVyLCBzeW5jVGltZWxpbmVNb2RlKSkge1xuICAgIHJldHVybiBzdGF0ZTtcbiAgfVxuXG4gIGNvbnN0IG5ld0ZpbHRlciA9IHtcbiAgICAuLi5maWx0ZXIsXG4gICAgc3luY1RpbWVsaW5lTW9kZVxuICB9O1xuXG4gIGNvbnN0IG5ld1N0YXRlID0ge1xuICAgIC4uLnN0YXRlLFxuICAgIGZpbHRlcnM6IHN3YXBfPEZpbHRlcj4obmV3RmlsdGVyKShzdGF0ZS5maWx0ZXJzKVxuICB9O1xuXG4gIHJldHVybiBhZGp1c3RBbmltYXRpb25Db25maWdXaXRoRmlsdGVyKG5ld1N0YXRlLCBmaWx0ZXJJZHgpO1xufVxuXG4vKipcbiAqIFVwZGF0ZSBzdGF0ZSBvZiB0aGUgbG9hZGluZyBpbmRpY2F0b3IuXG4gKiBAbWVtYmVyb2YgdmlzU3RhdGVVcGRhdGVyc1xuICogQHBhcmFtIHN0YXRlIHZpc1N0YXRlXG4gKiBAcGFyYW0gYWN0aW9uXG4gKiBAcGFyYW0gYWN0aW9uLnBheWxvYWQgUGF5bG9hZCB3aXRoIGNoYW5nZSBvZiBudW1iZXIgb2YgYWN0aXZlIGxvYWRpbmcgYWN0aW9ucy5cbiAqIEByZXR1cm5zIG5leHRTdGF0ZVxuICogQHB1YmxpY1xuICovXG5leHBvcnQgY29uc3Qgc2V0TG9hZGluZ0luZGljYXRvclVwZGF0ZXIgPSAoXG4gIHN0YXRlOiBWaXNTdGF0ZSxcbiAge3BheWxvYWQ6IHtjaGFuZ2V9fToge3BheWxvYWQ6IFNldExvYWRpbmdJbmRpY2F0b3JQYXlsb2FkfVxuKTogVmlzU3RhdGUgPT4ge1xuICBsZXQge2xvYWRpbmdJbmRpY2F0b3JWYWx1ZX0gPSBzdGF0ZTtcbiAgaWYgKCFsb2FkaW5nSW5kaWNhdG9yVmFsdWUpIHtcbiAgICBsb2FkaW5nSW5kaWNhdG9yVmFsdWUgPSAwO1xuICB9XG5cbiAgcmV0dXJuIHtcbiAgICAuLi5zdGF0ZSxcbiAgICBsb2FkaW5nSW5kaWNhdG9yVmFsdWU6IE1hdGgubWF4KGxvYWRpbmdJbmRpY2F0b3JWYWx1ZSArIGNoYW5nZSwgMClcbiAgfTtcbn07XG5cbmZ1bmN0aW9uIGFkanVzdEFuaW1hdGlvbkNvbmZpZ1dpdGhGaWx0ZXI8UyBleHRlbmRzIFZpc1N0YXRlPihzdGF0ZTogUywgZmlsdGVySWR4OiBudW1iZXIpOiBTIHtcbiAgY29uc3QgZmlsdGVyID0gc3RhdGUuZmlsdGVyc1tmaWx0ZXJJZHhdO1xuICBpZiAoKGZpbHRlciBhcyBUaW1lUmFuZ2VGaWx0ZXIpLnN5bmNlZFdpdGhMYXllclRpbWVsaW5lKSB7XG4gICAgY29uc3QgdGltZWxpbmVWYWx1ZSA9IGdldFRpbWVsaW5lVmFsdWVGcm9tRmlsdGVyKGZpbHRlcik7XG4gICAgY29uc3QgdmFsdWUgPSBzdGF0ZS5hbmltYXRpb25Db25maWcudGltZVN0ZXBzXG4gICAgICA/IHNuYXBUb01hcmtzKHRpbWVsaW5lVmFsdWUsIHN0YXRlLmFuaW1hdGlvbkNvbmZpZy50aW1lU3RlcHMpXG4gICAgICA6IHRpbWVsaW5lVmFsdWU7XG4gICAgcmV0dXJuIHNldExheWVyQW5pbWF0aW9uVGltZVVwZGF0ZXIoc3RhdGUsIHt2YWx1ZX0pO1xuICB9XG4gIHJldHVybiBzdGF0ZTtcbn1cblxuZnVuY3Rpb24gZ2V0VGltZWxpbmVWYWx1ZUZyb21GaWx0ZXIoZmlsdGVyKSB7XG4gIHJldHVybiBmaWx0ZXIudmFsdWVbZmlsdGVyLnN5bmNUaW1lbGluZU1vZGVdO1xufVxuXG5mdW5jdGlvbiBnZXRTeW5jQW5pbWF0aW9uTW9kZShmaWx0ZXI6IFRpbWVSYW5nZUZpbHRlcikge1xuICBpZiAoZmlsdGVyLmFuaW1hdGlvbldpbmRvdyA9PT0gQU5JTUFUSU9OX1dJTkRPVy5mcmVlKSB7XG4gICAgcmV0dXJuIGZpbHRlci5zeW5jVGltZWxpbmVNb2RlID8/IFNZTkNfVElNRUxJTkVfTU9ERVMuZW5kO1xuICB9XG5cbiAgcmV0dXJuIFNZTkNfVElNRUxJTkVfTU9ERVMuZW5kO1xufVxuXG5mdW5jdGlvbiB2YWxpZGF0ZVN5bmNBbmltYXRpb25Nb2RlKGZpbHRlcjogVGltZVJhbmdlRmlsdGVyLCBuZXdNb2RlOiBudW1iZXIpIHtcbiAgcmV0dXJuICEoXG4gICAgZmlsdGVyLmFuaW1hdGlvbldpbmRvdyAhPT0gQU5JTUFUSU9OX1dJTkRPVy5mcmVlICYmIG5ld01vZGUgPT09IFNZTkNfVElNRUxJTkVfTU9ERVMuc3RhcnRcbiAgKTtcbn1cblxuZnVuY3Rpb24gYWRqdXN0VGltZUZpbHRlckludGVydmFsKHN0YXRlLCBmaWx0ZXIpIHtcbiAgY29uc3QgaW50ZXJ2YWxCYXNlZEFuaW1hdGlvbkxheWVycyA9IGdldEludGVydmFsQmFzZWRBbmltYXRpb25MYXllcnMoc3RhdGUubGF5ZXJzKTtcblxuICBsZXQgaW50ZXJ2YWw6IHN0cmluZyB8IG51bGwgPSBudWxsO1xuICBpZiAoaW50ZXJ2YWxCYXNlZEFuaW1hdGlvbkxheWVycy5sZW5ndGggPiAwKSB7XG4gICAgLy8gQHRzLWlnbm9yZVxuICAgIGNvbnN0IGludGVydmFsSW5kZXggPSBpbnRlcnZhbEJhc2VkQW5pbWF0aW9uTGF5ZXJzLnJlZHVjZSgoY3VycmVudEluZGV4LCBsKSA9PiB7XG4gICAgICBpZiAobC5tZXRhLnRhcmdldFRpbWVJbnRlcnZhbCkge1xuICAgICAgICBjb25zdCBuZXdJbmRleCA9IFRJTUVfSU5URVJWQUxTX09SREVSRUQuZmluZEluZGV4KGkgPT4gaSA9PT0gbC5tZXRhLnRhcmdldFRpbWVJbnRlcnZhbCk7XG4gICAgICAgIHJldHVybiBuZXdJbmRleCA+IC0xICYmIG5ld0luZGV4IDwgY3VycmVudEluZGV4ID8gbmV3SW5kZXggOiBjdXJyZW50SW5kZXg7XG4gICAgICB9XG4gICAgfSwgVElNRV9JTlRFUlZBTFNfT1JERVJFRC5sZW5ndGggLSAxKTtcbiAgICAvLyBAdHMtaWdub3JlXG4gICAgY29uc3QgaGV4VGlsZUludGVydmFsID0gVElNRV9JTlRFUlZBTFNfT1JERVJFRFtpbnRlcnZhbEluZGV4XTtcbiAgICBpbnRlcnZhbCA9IExheWVyVG9GaWx0ZXJUaW1lSW50ZXJ2YWxbaGV4VGlsZUludGVydmFsXTtcbiAgfVxuXG4gIGlmICghaW50ZXJ2YWwpIHtcbiAgICByZXR1cm4gZmlsdGVyO1xuICB9XG5cbiAgLy8gYWRqdXN0IGZpbHRlclxuICBjb25zdCB0aW1lRm9ybWF0ID0gZ2V0RGVmYXVsdFRpbWVGb3JtYXQoaW50ZXJ2YWwpO1xuICBjb25zdCB1cGRhdGVkUGxvdFR5cGUgPSB7Li4uZmlsdGVyLnBsb3RUeXBlLCBpbnRlcnZhbCwgdGltZUZvcm1hdH07XG4gIGNvbnN0IG5ld0ZpbHRlciA9IHVwZGF0ZVRpbWVGaWx0ZXJQbG90VHlwZShmaWx0ZXIsIHVwZGF0ZWRQbG90VHlwZSwgc3RhdGUuZGF0YXNldHMpO1xuICByZXR1cm4gYWRqdXN0VmFsdWVUb0FuaW1hdGlvbldpbmRvdyhzdGF0ZSwgbmV3RmlsdGVyKTtcbn1cblxuLy8gRmluZCBkYXRhSWQgZnJvbSBhIHNhdmVkIHZpc1N0YXRlIHByb3BlcnR5OlxuLy8gbGF5ZXJzLCBmaWx0ZXJzLCBpbnRlcmFjdGlvbnMsIGxheWVyQmxlbmRpbmcsIG92ZXJsYXlCbGVuZGluZywgc3BsaXRNYXBzLCBhbmltYXRpb25Db25maWcsIGVkaXRvclxuLy8gcmVwbGFjZSBpdCB3aXRoIGFub3RoZXIgZGF0YUlkXG5mdW5jdGlvbiBkZWZhdWx0UmVwbGFjZVBhcmVudERhdGFzZXRJZHModmFsdWU6IGFueSwgZGF0YUlkOiBzdHJpbmcsIGRhdGFJZFRvUmVwbGFjZTogc3RyaW5nKSB7XG4gIGlmIChBcnJheS5pc0FycmF5KHZhbHVlKSkge1xuICAgIC8vIGZvciBsYXllcnMsIGZpbHRlcnMsIGNhbGwgZGVmYXVsdFJlcGxhY2VQYXJlbnREYXRhc2V0SWRzIG9uIGVhY2ggaXRlbSBpbiBhcnJheVxuICAgIGNvbnN0IHJlcGxhY2VkID0gdmFsdWVcbiAgICAgIC5tYXAodiA9PiBkZWZhdWx0UmVwbGFjZVBhcmVudERhdGFzZXRJZHModiwgZGF0YUlkLCBkYXRhSWRUb1JlcGxhY2UpKVxuICAgICAgLmZpbHRlcihkID0+IGQpO1xuICAgIHJldHVybiByZXBsYWNlZC5sZW5ndGggPyByZXBsYWNlZCA6IG51bGw7XG4gIH1cbiAgaWYgKHR5cGVvZiB2YWx1ZS5kYXRhSWQgPT09ICdzdHJpbmcnICYmIHZhbHVlLmRhdGFJZCA9PT0gZGF0YUlkKSB7XG4gICAgLy8gb3RoZXJzXG4gICAgcmV0dXJuIHtcbiAgICAgIC4uLnZhbHVlLFxuICAgICAgZGF0YUlkOiBkYXRhSWRUb1JlcGxhY2VcbiAgICB9O1xuICB9IGVsc2UgaWYgKEFycmF5LmlzQXJyYXkodmFsdWUuZGF0YUlkKSAmJiB2YWx1ZS5kYXRhSWQuaW5jbHVkZXMoZGF0YUlkKSkge1xuICAgIC8vIGZpbHRlclxuICAgIHJldHVybiB7XG4gICAgICAuLi52YWx1ZSxcbiAgICAgIGRhdGFJZDogdmFsdWUuZGF0YUlkLm1hcChkID0+IChkID09PSBkYXRhSWQgPyBkYXRhSWRUb1JlcGxhY2UgOiBkKSlcbiAgICB9O1xuICB9IGVsc2UgaWYgKHZhbHVlLmNvbmZpZz8uZGF0YUlkICYmIHZhbHVlLmNvbmZpZz8uZGF0YUlkID09PSBkYXRhSWQpIHtcbiAgICAvLyBsYXllclxuICAgIHJldHVybiB7XG4gICAgICAuLi52YWx1ZSxcbiAgICAgIGNvbmZpZzoge1xuICAgICAgICAuLi52YWx1ZS5jb25maWcsXG4gICAgICAgIGRhdGFJZDogZGF0YUlkVG9SZXBsYWNlXG4gICAgICB9XG4gICAgfTtcbiAgfSBlbHNlIGlmIChpc09iamVjdCh2YWx1ZSkgJiYgT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHZhbHVlLCBkYXRhSWQpKSB7XG4gICAgLy8gZm9yIHZhbHVlIHNhdmVkIGFzIHtbZGF0YUlkXTogey4uLn19XG4gICAgcmV0dXJuIHtbZGF0YUlkVG9SZXBsYWNlXTogdmFsdWVbZGF0YUlkXX07XG4gIH1cblxuICByZXR1cm4gbnVsbDtcbn1cblxuLy8gRmluZCBkYXRhc2V0SWRzIGRlcml2ZWQgYSBzYXZlZCB2aXNTdGF0ZSBQcm9wZXJ0eTtcbmZ1bmN0aW9uIGZpbmRDaGlsZERhdGFzZXRJZHModmFsdWUpIHtcbiAgaWYgKEFycmF5LmlzQXJyYXkodmFsdWUpKSB7XG4gICAgLy8gZm9yIGxheWVycywgZmlsdGVycywgY2FsbCBkZWZhdWx0UmVwbGFjZVBhcmVudERhdGFzZXRJZHMgb24gZWFjaCBpdGVtIGluIGFycmF5XG4gICAgY29uc3QgY2hpbGREYXRhSWRzID0gdmFsdWUubWFwKGZpbmRDaGlsZERhdGFzZXRJZHMpLmZpbHRlcihkID0+IGQpO1xuICAgIHJldHVybiBjaGlsZERhdGFJZHMubGVuZ3RoID8gY2hpbGREYXRhSWRzIDogbnVsbDtcbiAgfVxuXG4gIC8vIGNoaWxkIGRhdGEgaWQgdXN1YWxseSBzdG9yZXMgaW4gdGhlIGRlcml2ZWQgZGF0YXNldCBpbmZvXG4gIHJldHVybiB2YWx1ZT8ubmV3RGF0YXNldD8uaW5mby5pZCB8fCBudWxsO1xufVxuXG4vLyBtb3ZlZCB1bm1lcmdlZCBsYXllcnMsIGZpbHRlcnMsIGludGVyYWN0aW9uc1xuZnVuY3Rpb24gbW92ZVZhbHVlVG9CZU1lcmdlZChzdGF0ZSwgcHJvcFZhbHVlcywge3Byb3AsIHRvTWVyZ2VQcm9wLCBzYXZlVW5tZXJnZWR9KSB7XG4gIC8vIHJlbW92ZSBwcm9wIHZhbHVlIGZyb20gc3RhdGVcbiAgLy8gVE9ETzogc2hvdWxkIHdlIGFkZCByZW1vdmUgdXBkYXRlciB0byBtZXJnZXIgYXMgd2VsbD9cbiAgaWYgKCFwcm9wVmFsdWVzKSB7XG4gICAgcmV0dXJuIHN0YXRlO1xuICB9XG4gIGNvbnN0IHN0YXRlUmVtb3ZlZCA9XG4gICAgcHJvcCA9PT0gJ2xheWVycydcbiAgICAgID8gcHJvcFZhbHVlcy5yZWR1Y2UoKGFjY3UsIHByb3BWYWx1ZSkgPT4gcmVtb3ZlTGF5ZXJVcGRhdGVyKGFjY3UsIHtpZDogcHJvcFZhbHVlLmlkfSksIHN0YXRlKVxuICAgICAgOiBBcnJheS5pc0FycmF5KHN0YXRlW3Byb3BdKVxuICAgICAgPyB7XG4gICAgICAgICAgLi4uc3RhdGUsXG4gICAgICAgICAgW3Byb3BdOiBzdGF0ZVtwcm9wXS5maWx0ZXIocCA9PiAhcHJvcFZhbHVlcy5maW5kKHByb3BWYWx1ZSA9PiBwLmlkID09PSBwcm9wVmFsdWUuaWQpKVxuICAgICAgICB9XG4gICAgICA6IC8vIGlmIG5vdCBhcnJheSwgd2Ugd29uJ3QgcmVtb3ZlIGl0LCByZW1vdmUgZGF0YXNldCBzaG91bGQgaGFuZGxlIGl0XG4gICAgICAgIHN0YXRlO1xuXG4gIC8vIG1vdmUgdG8gc3RhdGVUb0JlTWVyZ2VkXG4gIGNvbnN0IHRvQmVNZXJnZWQgPSB7XG4gICAgW3RvTWVyZ2VQcm9wXTogc2F2ZVVubWVyZ2VkXG4gICAgICA/IC8vIGNhbGwgbWVyZ2Ugc2F2ZVVubWVyZ2VkIG1ldGhvZFxuICAgICAgICBzYXZlVW5tZXJnZWQoc3RhdGVSZW1vdmVkLCBwcm9wVmFsdWVzKVxuICAgICAgOiAvLyBpZiB0b01lcmdlUHJvcCBpcyBhcmFheSwgYXBwZW5kIHRvIGl0XG4gICAgICBBcnJheS5pc0FycmF5KHN0YXRlUmVtb3ZlZFt0b01lcmdlUHJvcF0pXG4gICAgICA/IFsuLi5zdGF0ZVJlbW92ZWRbdG9NZXJnZVByb3BdLCAuLi5wcm9wVmFsdWVzXVxuICAgICAgOiAvLyBzYXZlIHByb3BWYWx1ZXMgdG8gdG9NZXJnZVxuICAgICAgaXNPYmplY3Qoc3RhdGVSZW1vdmVkW3RvTWVyZ2VQcm9wXSlcbiAgICAgID8ge1xuICAgICAgICAgIC4uLnN0YXRlUmVtb3ZlZFt0b01lcmdlUHJvcF0sXG4gICAgICAgICAgLi4ucHJvcFZhbHVlc1xuICAgICAgICB9XG4gICAgICA6IHN0YXRlUmVtb3ZlZFt0b01lcmdlUHJvcF1cbiAgfTtcblxuICByZXR1cm4ge1xuICAgIC4uLnN0YXRlUmVtb3ZlZCxcbiAgICAuLi50b0JlTWVyZ2VkXG4gIH07XG59XG5cbmZ1bmN0aW9uIHJlcGxhY2VEYXRhc2V0QW5kRGVwczxUIGV4dGVuZHMgVmlzU3RhdGU+KFxuICBzdGF0ZTogVCxcbiAgZGF0YUlkOiBzdHJpbmcsXG4gIGRhdGFJZFRvVXNlOiBzdHJpbmdcbik6IFQge1xuICByZXR1cm4gY29tcG9zZV88VD4oW1xuICAgIGFwcGx5XyhyZXBsYWNlRGF0YXNldERlcHNJblN0YXRlLCB7ZGF0YUlkLCBkYXRhSWRUb1VzZX0pLFxuICAgIGFwcGx5XyhyZW1vdmVEYXRhc2V0VXBkYXRlciwge2RhdGFJZH0pXG4gIF0pKHN0YXRlKTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHByZXBhcmVTdGF0ZUZvckRhdGFzZXRSZXBsYWNlPFQgZXh0ZW5kcyBWaXNTdGF0ZT4oXG4gIHN0YXRlOiBULFxuICBkYXRhSWQ6IHN0cmluZyxcbiAgZGF0YUlkVG9Vc2U6IHN0cmluZ1xuKTogVCB7XG4gIGNvbnN0IHNlcmlhbGl6ZWRTdGF0ZSA9IHNlcmlhbGl6ZVZpc1N0YXRlKHN0YXRlLCBzdGF0ZS5zY2hlbWEpO1xuICBjb25zdCBuZXh0U3RhdGUgPSByZXBsYWNlRGF0YXNldEFuZERlcHMoc3RhdGUsIGRhdGFJZCwgZGF0YUlkVG9Vc2UpO1xuICAvLyBtYWtlIGEgY29weSBvZiBsYXllck9yZGVyLCBiZWNhdXNlIGxheWVyIGlkIHdpbGwgYmUgcmVtb3ZlZCBmcm9tIGl0IGJ5IGNhbGxpbmcgcmVtb3ZlTGF5ZXJVcGRhdGVyXG4gIGNvbnN0IHByZXNlcnZlTGF5ZXJPcmRlciA9IFsuLi5zdGF0ZS5sYXllck9yZGVyXTtcblxuICAvLyBwcmVzZXJ2ZSBkYXRhc2V0IG9yZGVyXG4gIG5leHRTdGF0ZS5wcmVzZXJ2ZURhdGFzZXRPcmRlciA9IE9iamVjdC5rZXlzKHN0YXRlLmRhdGFzZXRzKS5tYXAoZCA9PlxuICAgIGQgPT09IGRhdGFJZCA/IGRhdGFJZFRvVXNlIDogZFxuICApO1xuXG4gIC8vIHByZXNlcnZlTGF5ZXJPcmRlclxuICBpZiAobmV4dFN0YXRlLmxheWVyVG9CZU1lcmdlZD8ubGVuZ3RoKSB7XG4gICAgLy8gY29weSBzcGxpdCBtYXBzIHRvIGJlIG1lcmdlZCwgYmVjYXVzZSBpdCB3aWxsIGJlIHJlc2V0IGluIHJlbW92ZSBsYXllclxuICAgIG5leHRTdGF0ZS5zcGxpdE1hcHNUb0JlTWVyZ2VkID0gc2VyaWFsaXplZFN0YXRlPy5zcGxpdE1hcHMgPz8gW107XG4gICAgbmV4dFN0YXRlLmxheWVyT3JkZXIgPSBbLi4ucHJlc2VydmVMYXllck9yZGVyXTtcbiAgfVxuXG4gIHJldHVybiBuZXh0U3RhdGU7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiByZXBsYWNlRGF0YXNldERlcHNJblN0YXRlPFQgZXh0ZW5kcyBWaXNTdGF0ZT4oXG4gIHN0YXRlOiBULFxuICB7ZGF0YUlkLCBkYXRhSWRUb1VzZX06IHtkYXRhSWQ6IHN0cmluZzsgZGF0YUlkVG9Vc2U6IHN0cmluZ31cbik6IFQge1xuICBjb25zdCBzZXJpYWxpemVkU3RhdGUgPSBzZXJpYWxpemVWaXNTdGF0ZShzdGF0ZSwgc3RhdGUuc2NoZW1hKTtcblxuICBjb25zdCBuZXh0U3RhdGUgPSBzdGF0ZS5tZXJnZXJzLnJlZHVjZShcbiAgICAoXG4gICAgICBhY2N1U3RhdGUsXG4gICAgICB7cHJvcCwgdG9NZXJnZVByb3AsIHJlcGxhY2VQYXJlbnREYXRhc2V0SWRzLCBnZXRDaGlsZERhdGFzZXRJZHMsIHNhdmVVbm1lcmdlZCwgcHJlc2VydmVPcmRlcn1cbiAgICApID0+IHtcbiAgICAgIC8vIGdldCBkYXRhc2V0IGlkcyB0aGF0IGFyZSBkZXBlbmRzIG9uIHRoaXMgZGF0YXNldFxuICAgICAgY29uc3QgcHJvcHMgPSB0b0FycmF5KHByb3ApO1xuICAgICAgY29uc3QgdG9NZXJnZVByb3BzID0gdG9BcnJheSh0b01lcmdlUHJvcCk7XG4gICAgICBjb25zdCBzYXZlZFByb3BzID0gc2VyaWFsaXplZFN0YXRlID8gcHJvcHMubWFwKHAgPT4gc2VyaWFsaXplZFN0YXRlW3BdKSA6IFtdO1xuXG4gICAgICBsZXQgcmVwbGFjZWRTdGF0ZSA9IGFjY3VTdGF0ZTtcbiAgICAgIHNhdmVkUHJvcHMuZm9yRWFjaCgocHJvcFZhbHVlLCBpKSA9PiB7XG4gICAgICAgIGNvbnN0IG1lcmdlck9wdGlvbnMgPSB7XG4gICAgICAgICAgcHJvcDogcHJvcHNbaV0sXG4gICAgICAgICAgdG9NZXJnZVByb3A6IHRvTWVyZ2VQcm9wc1tpXSxcbiAgICAgICAgICBnZXRDaGlsZERhdGFzZXRJZHMsXG4gICAgICAgICAgc2F2ZVVubWVyZ2VkXG4gICAgICAgIH07XG5cbiAgICAgICAgY29uc3QgcmVwbGFjZWRJdGVtID1cbiAgICAgICAgICByZXBsYWNlUGFyZW50RGF0YXNldElkcz8uKHByb3BWYWx1ZSwgZGF0YUlkLCBkYXRhSWRUb1VzZSkgfHxcbiAgICAgICAgICBkZWZhdWx0UmVwbGFjZVBhcmVudERhdGFzZXRJZHMocHJvcFZhbHVlLCBkYXRhSWQsIGRhdGFJZFRvVXNlKTtcbiAgICAgICAgcmVwbGFjZWRTdGF0ZSA9IHJlcGxhY2VkSXRlbVxuICAgICAgICAgID8gcmVwbGFjZVByb3BWYWx1ZUluU3RhdGUocmVwbGFjZWRTdGF0ZSwgcmVwbGFjZWRJdGVtLCBtZXJnZXJPcHRpb25zKVxuICAgICAgICAgIDogcmVwbGFjZWRTdGF0ZTtcblxuICAgICAgICBpZiAoXG4gICAgICAgICAgbWVyZ2VyT3B0aW9ucy50b01lcmdlUHJvcCAhPT0gdW5kZWZpbmVkICYmXG4gICAgICAgICAgcmVwbGFjZWRTdGF0ZVttZXJnZXJPcHRpb25zLnRvTWVyZ2VQcm9wXT8ubGVuZ3RoICYmXG4gICAgICAgICAgcHJlc2VydmVPcmRlclxuICAgICAgICApIHtcbiAgICAgICAgICByZXBsYWNlZFN0YXRlW3ByZXNlcnZlT3JkZXJdID0gcHJvcFZhbHVlLm1hcChpdGVtID0+IGl0ZW0uaWQpO1xuICAgICAgICB9XG4gICAgICB9KTtcblxuICAgICAgcmV0dXJuIHJlcGxhY2VkU3RhdGU7XG4gICAgfSxcbiAgICBzdGF0ZVxuICApO1xuXG4gIHJldHVybiBuZXh0U3RhdGU7XG59XG5cbmZ1bmN0aW9uIHJlcGxhY2VQcm9wVmFsdWVJblN0YXRlKFxuICBzdGF0ZSxcbiAgcmVwbGFjZWRJdGVtLFxuICB7cHJvcCwgdG9NZXJnZVByb3AsIGdldENoaWxkRGF0YXNldElkcywgc2F2ZVVubWVyZ2VkfVxuKSB7XG4gIC8vIHByb3AgaXMgZGVwZW5kcyBvbiB0aGUgZGF0YXNldCB0byBiZSByZXBsYWNlZFxuICAvLyByZW1vdmUgcHJvcCBmcm9tIHN0YXRlLCBhbmQgbW92ZSBpdCB0byB0b0JlTWVyZ2VkXG4gIGxldCBuZXh0U3RhdGUgPSBtb3ZlVmFsdWVUb0JlTWVyZ2VkKHN0YXRlLCByZXBsYWNlZEl0ZW0sIHtwcm9wLCB0b01lcmdlUHJvcCwgc2F2ZVVubWVyZ2VkfSk7XG4gIGNvbnN0IGNoaWxkRGF0YUlkcyA9IGdldENoaWxkRGF0YXNldElkcz8uKHJlcGxhY2VkSXRlbSkgfHwgZmluZENoaWxkRGF0YXNldElkcyhyZXBsYWNlZEl0ZW0pO1xuXG4gIGlmIChjaGlsZERhdGFJZHMpIHtcbiAgICBuZXh0U3RhdGUgPSB0b0FycmF5KGNoaWxkRGF0YUlkcykucmVkdWNlKChhY2N1LCBjaGlsZERhdGFJZCkgPT4ge1xuICAgICAgLy8gc2hvdWxkbid0IG5lZWQgdG8gY2hhbmdlIGNoaWxkIGRhdGFzZXQgaWQsXG4gICAgICAvLyBidXQgc3RpbGwgbmVlZCB0byBtb3ZlIG91dCBvZiBzdGF0ZSBhbmQgbWVyZ2UgYmFjayBpblxuICAgICAgcmV0dXJuIHJlcGxhY2VEYXRhc2V0QW5kRGVwcyhhY2N1LCBjaGlsZERhdGFJZCwgY2hpbGREYXRhSWQpO1xuICAgIH0sIG5leHRTdGF0ZSk7XG4gIH1cbiAgcmV0dXJuIG5leHRTdGF0ZTtcbn1cbiJdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0FBR0EsSUFBQUEsS0FBQSxHQUFBQyxzQkFBQSxDQUFBQyxPQUFBO0FBQ0EsSUFBQUMsZ0JBQUEsR0FBQUYsc0JBQUEsQ0FBQUMsT0FBQTtBQUNBLElBQUFFLFVBQUEsR0FBQUgsc0JBQUEsQ0FBQUMsT0FBQTtBQUNBLElBQUFHLE9BQUEsR0FBQUgsT0FBQTtBQUNBLElBQUFJLFVBQUEsR0FBQUwsc0JBQUEsQ0FBQUMsT0FBQTtBQUNBLElBQUFLLElBQUEsR0FBQU4sc0JBQUEsQ0FBQUMsT0FBQTtBQUNBLElBQUFNLFFBQUEsR0FBQVAsc0JBQUEsQ0FBQUMsT0FBQTtBQUNBLElBQUFPLEtBQUEsR0FBQVIsc0JBQUEsQ0FBQUMsT0FBQTtBQUNBLElBQUFRLEtBQUEsR0FBQVQsc0JBQUEsQ0FBQUMsT0FBQTtBQUNBLElBQUFTLElBQUEsR0FBQVYsc0JBQUEsQ0FBQUMsT0FBQTtBQUNBLElBQUFVLE1BQUEsR0FBQUMsdUJBQUEsQ0FBQVgsT0FBQTtBQUVBLElBQUFZLE9BQUEsR0FBQVosT0FBQTtBQVFBLElBQUFhLFFBQUEsR0FBQWIsT0FBQTtBQTJCQSxJQUFBYyxNQUFBLEdBQUFkLE9BQUE7QUE2QkEsSUFBQWUsWUFB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RUQsYUFBYSxDQUFDLEdBQ25FRixhQUFhO01BRWpCLElBQ0VFLGFBQWEsQ0FBQ2hVLFdBQVcsS0FBS2xaLFNBQVMsS0FBQWl0QixxQkFBQSxHQUN2Q0QsYUFBYSxDQUFDRSxhQUFhLENBQUNoVSxXQUFXLENBQUMsY0FBQStULHFCQUFBLGVBQXhDQSxxQkFBQSxDQUEwQy94QixNQUFNLElBQ2hEMnhCLGFBQWEsRUFDYjtRQUNBRyxhQUFhLENBQUNILGFBQWEsQ0FBQyxHQUFHcEIsU0FBUyxDQUFDbHBCLEdBQUcsQ0FBQyxVQUFBOHFCLElBQUk7VUFBQSxPQUFJQSxJQUFJLENBQUNqd0IsRUFBRTtRQUFBLEVBQUM7TUFDL0Q7SUFDRixDQUFDLENBQUM7SUFFRixPQUFPNHZCLGFBQWE7RUFDdEIsQ0FBQyxFQUNEN3FCLEtBQ0YsQ0FBQztFQUVELE9BQU9zQyxTQUFTO0FBQ2xCO0FBRUEsU0FBUzJvQix1QkFBdUJBLENBQzlCanJCLEtBQUssRUFDTGdyQixZQUFZLEVBQUFHLE1BQUEsRUFFWjtFQUFBLElBREMxbkIsSUFBSSxHQUFBMG5CLE1BQUEsQ0FBSjFuQixJQUFJO0lBQUVzVCxXQUFXLEdBQUFvVSxNQUFBLENBQVhwVSxXQUFXO0lBQUUwVCxrQkFBa0IsR0FBQVUsTUFBQSxDQUFsQlYsa0JBQWtCO0lBQUVyQixZQUFZLEdBQUErQixNQUFBLENBQVovQixZQUFZO0VBRXBEO0VBQ0E7RUFDQSxJQUFJOW1CLFNBQVMsR0FBRzJtQixtQkFBbUIsQ0FBQ2pwQixLQUFLLEVBQUVnckIsWUFBWSxFQUFFO0lBQUN2bkIsSUFBSSxFQUFKQSxJQUFJO0lBQUVzVCxXQUFXLEVBQVhBLFdBQVc7SUFBRXFTLFlBQVksRUFBWkE7RUFBWSxDQUFDLENBQUM7RUFDM0YsSUFBTUosWUFBWSxHQUFHLENBQUF5QixrQkFBa0IsYUFBbEJBLGtCQUFrQix1QkFBbEJBLGtCQUFrQixDQUFHTyxZQUFZLENBQUMsS0FBSWxDLG1CQUFtQixDQUFDa0MsWUFBWSxDQUFDO0VBRTVGLElBQUloQyxZQUFZLEVBQUU7SUFDaEIxbUIsU0FBUyxHQUFHLElBQUErSixvQkFBTyxFQUFDMmMsWUFBWSxDQUFDLENBQUNsZSxNQUFNLENBQUMsVUFBQ0MsSUFBSSxFQUFFcWdCLFdBQVcsRUFBSztNQUM5RDtNQUNBO01BQ0EsT0FBTzNCLHFCQUFxQixDQUFDMWUsSUFBSSxFQUFFcWdCLFdBQVcsRUFBRUEsV0FBVyxDQUFDO0lBQzlELENBQUMsRUFBRTlvQixTQUFTLENBQUM7RUFDZjtFQUNBLE9BQU9BLFNBQVM7QUFDbEIiLCJpZ25vcmVMaXN0IjpbXX0=