appium-xcuitest-driver 4.6.0 → 4.7.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/README.md CHANGED
@@ -1309,12 +1309,25 @@ An error is thrown if the target device does not support force press gesture.
1309
1309
 
1310
1310
  Name | Type | Required | Description | Example
1311
1311
  --- | --- | --- | --- | ---
1312
- elementId ("element" prior to Appium v 1.22) | string | no | The internal element identifier (as hexadecimal hash string) to perform one or more taps. It is expected that both x and y are provided if this argument is ommitted. If the element identifier is provided without coordinates then the actual element's touch point will be calculated automatically by WebDriverAgent. | fe50b60b-916d-420b-8728-ee2072ec53eb
1312
+ elementId | string | no | The internal element identifier (as hexadecimal hash string) to perform one or more taps. It is expected that both x and y are provided if this argument is ommitted. If the element identifier is provided without coordinates then the actual element's touch point will be calculated automatically by WebDriverAgent. | fe50b60b-916d-420b-8728-ee2072ec53eb
1313
1313
  x | number | no | x coordinate of the gesture. It is calculated relatively to the given element (if provided). Otherwise the gesture destination point is calculated relatively to the active application. | 100
1314
1314
  y | number | no | y coordinate of the gesture. It is calculated relatively to the given element (if provided). Otherwise the gesture destination point is calculated relatively to the active application | 100
1315
1315
  duration | number | no | The float number of seconds the force press action would take. If duration is provided then it is also expected that a custom pressure value is provided as well. `0.5` by default. | 2.5
1316
1316
  pressure | number | no | The float number defining how much pressure to apply. If pressure is provided then it is also expected that a custom duration value is provided as well. `1.0` by default | 1.5
1317
1317
 
1318
+ ### mobile: scrollToElement
1319
+
1320
+ Scrolls the current viewport to the given element. It is expected the destination element is inside a scrollable container and is hittable. The scroll direction is detected automatically.
1321
+ This API uses native XCTest calls, so it performs scrolling pretty fast. The same native call is
1322
+ implicitly performed by a vanilla `click` API if the destination element is out of the current viewport. An exception is thrown if the scrolling action cannot be performed.
1323
+ This extension is available since the driver version 4.7.0.
1324
+
1325
+ #### Arguments
1326
+
1327
+ Name | Type | Required | Description | Example
1328
+ --- | --- | --- | --- | ---
1329
+ elementId | string | yes | The internal element identifier (as hexadecimal hash string) to scroll to. The destination element must be located in a scrollable container and must be hittable. If the element is already present in the current viewport then no action is performed. | fe50b60b-916d-420b-8728-ee2072ec53eb
1330
+
1318
1331
  ### mobile: resetLocationService
1319
1332
 
1320
1333
  Reset the location service on real device since Appium 1.22.0.
@@ -74,6 +74,7 @@ extensions.executeMobile = async function executeMobile(mobileCommand, opts = {}
74
74
  dragFromToForDuration: 'mobileDragFromToForDuration',
75
75
  rotateElement: 'mobileRotateElement',
76
76
  forcePress: 'mobileForcePress',
77
+ scrollToElement: 'mobileScrollToElement',
77
78
  alert: 'mobileHandleAlert',
78
79
  setPasteboard: 'mobileSetPasteboard',
79
80
  getPasteboard: 'mobileGetPasteboard',
@@ -139,4 +140,4 @@ var _default = extensions;
139
140
  exports.default = _default;require('source-map-support').install();
140
141
 
141
142
 
142
- //# sourceMappingURL=data:application/json;charset=utf8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibGliL2NvbW1hbmRzL2V4ZWN1dGUuanMiLCJuYW1lcyI6WyJleHRlbnNpb25zIiwicmVjZWl2ZUFzeW5jUmVzcG9uc2UiLCJzdGF0dXMiLCJ2YWx1ZSIsImxvZyIsImRlYnVnIiwiSlNPTiIsInN0cmluZ2lmeSIsInV0aWwiLCJoYXNWYWx1ZSIsImFzeW5jUHJvbWlzZSIsIndhcm4iLCJyZWplY3QiLCJlcnJvckZyb21Db2RlIiwibWVzc2FnZSIsIl8iLCJpc1N0cmluZyIsImVycm9yIiwiZXJyb3JGcm9tVzNDSnNvbkNvZGUiLCJzdGFja3RyYWNlIiwicmVzb2x2ZSIsImV4ZWN1dGUiLCJzY3JpcHQiLCJhcmdzIiwibWF0Y2giLCJyZXBsYWNlIiwidHJpbSIsImV4ZWN1dGVNb2JpbGUiLCJpc0FycmF5IiwiaXNXZWJDb250ZXh0IiwiY29udmVydEVsZW1lbnRzRm9yQXRvbXMiLCJyZXN1bHQiLCJleGVjdXRlQXRvbSIsImNhY2hlV2ViRWxlbWVudHMiLCJlcnJvcnMiLCJOb3RJbXBsZW1lbnRlZEVycm9yIiwiZXhlY3V0ZUFzeW5jIiwiYXN5bmNXYWl0TXMiLCJwcm9taXNlIiwicmVtb3RlIiwiZXhlY3V0ZUF0b21Bc3luYyIsImN1cldlYkZyYW1lcyIsIndhaXRGb3JBdG9tIiwibW9iaWxlQ29tbWFuZCIsIm9wdHMiLCJjb21tYW5kTWFwIiwidGFwIiwic2Nyb2xsIiwic2VsZWN0UGlja2VyV2hlZWxWYWx1ZSIsInN3aXBlIiwicGluY2giLCJkb3VibGVUYXAiLCJ0d29GaW5nZXJUYXAiLCJ0YXBXaXRoTnVtYmVyT2ZUYXBzIiwidG91Y2hBbmRIb2xkIiwiZHJhZ0Zyb21Ub0ZvckR1cmF0aW9uIiwicm90YXRlRWxlbWVudCIsImZvcmNlUHJlc3MiLCJhbGVydCIsInNldFBhc3RlYm9hcmQiLCJnZXRQYXN0ZWJvYXJkIiwic291cmNlIiwiZ2V0Q29udGV4dHMiLCJpbnN0YWxsQXBwIiwiaXNBcHBJbnN0YWxsZWQiLCJyZW1vdmVBcHAiLCJsYXVuY2hBcHAiLCJ0ZXJtaW5hdGVBcHAiLCJraWxsQXBwIiwicXVlcnlBcHBTdGF0ZSIsImFjdGl2YXRlQXBwIiwibGlzdEFwcHMiLCJ2aWV3cG9ydFNjcmVlbnNob3QiLCJ2aWV3cG9ydFJlY3QiLCJzdGFydFBlcmZSZWNvcmQiLCJzdG9wUGVyZlJlY29yZCIsImluc3RhbGxDZXJ0aWZpY2F0ZSIsInN0YXJ0TG9nc0Jyb2FkY2FzdCIsInN0b3BMb2dzQnJvYWRjYXN0IiwiYmF0dGVyeUluZm8iLCJkZXZpY2VJbmZvIiwiZ2V0RGV2aWNlVGltZSIsImFjdGl2ZUFwcEluZm8iLCJkZXZpY2VTY3JlZW5JbmZvIiwicHJlc3NCdXR0b24iLCJlbnJvbGxCaW9tZXRyaWMiLCJzZW5kQmlvbWV0cmljTWF0Y2giLCJpc0Jpb21ldHJpY0Vucm9sbGVkIiwiY2xlYXJLZXljaGFpbnMiLCJnZXRQZXJtaXNzaW9uIiwic2V0UGVybWlzc2lvbiIsInJlc2V0UGVybWlzc2lvbiIsImdldEFwcGVhcmFuY2UiLCJzZXRBcHBlYXJhbmNlIiwic2lyaUNvbW1hbmQiLCJkZWxldGVGaWxlIiwiZGVsZXRlRm9sZGVyIiwic3RhcnRBdWRpb1JlY29yZGluZyIsInN0b3BBdWRpb1JlY29yZGluZyIsInJ1blhDVGVzdCIsImluc3RhbGxYQ1Rlc3RCdW5kbGUiLCJsaXN0WENUZXN0QnVuZGxlcyIsImxpc3RYQ1Rlc3RzSW5UZXN0QnVuZGxlIiwicHVzaE5vdGlmaWNhdGlvbiIsImV4cGVjdE5vdGlmaWNhdGlvbiIsInBlcmZvcm1Jb0hpZEV2ZW50IiwiY29uZmlndXJlTG9jYWxpemF0aW9uIiwicmVzZXRMb2NhdGlvblNlcnZpY2UiLCJzdGFydFBjYXAiLCJzdG9wUGNhcCIsImhhcyIsIlVua25vd25Db21tYW5kRXJyb3IiLCJrZXlzIiwiam9pbiJdLCJzb3VyY2VSb290IjoiLi4vLi4vLi4iLCJzb3VyY2VzIjpbImxpYi9jb21tYW5kcy9leGVjdXRlLmpzIl0sInNvdXJjZXNDb250ZW50IjpbImltcG9ydCBfIGZyb20gJ2xvZGFzaCc7XG5pbXBvcnQge1xuICBlcnJvcnMsIGVycm9yRnJvbUNvZGUsIGVycm9yRnJvbVczQ0pzb25Db2RlXG59IGZyb20gJ2FwcGl1bS9kcml2ZXInO1xuaW1wb3J0IHsgdXRpbCB9IGZyb20gJ2FwcGl1bS9zdXBwb3J0JztcblxuY29uc3QgZXh0ZW5zaW9ucyA9IHt9O1xuXG5leHRlbnNpb25zLnJlY2VpdmVBc3luY1Jlc3BvbnNlID0gYXN5bmMgZnVuY3Rpb24gcmVjZWl2ZUFzeW5jUmVzcG9uc2UgKHN0YXR1cywgdmFsdWUpIHsgLy8gZXNsaW50LWRpc2FibGUtbGluZSByZXF1aXJlLWF3YWl0XG4gIHRoaXMubG9nLmRlYnVnKGBSZWNlaXZlZCBhc3luYyByZXNwb25zZTogJHtKU09OLnN0cmluZ2lmeSh2YWx1ZSl9YCk7XG4gIGlmICghdXRpbC5oYXNWYWx1ZSh0aGlzLmFzeW5jUHJvbWlzZSkpIHtcbiAgICB0aGlzLmxvZy53YXJuKGBSZWNlaXZlZCBhc3luYyByZXNwb25zZSB3aGVuIHdlIHdlcmUgbm90IGV4cGVjdGluZyBvbmUhIGAgK1xuICAgICAgYFJlc3BvbnNlIHdhczogJHtKU09OLnN0cmluZ2lmeSh2YWx1ZSl9YCk7XG4gICAgcmV0dXJuO1xuICB9XG5cbiAgaWYgKHV0aWwuaGFzVmFsdWUoc3RhdHVzKSAmJiBzdGF0dXMgIT09IDApIHtcbiAgICAvLyBNSlNPTldQXG4gICAgcmV0dXJuIHRoaXMuYXN5bmNQcm9taXNlLnJlamVjdChlcnJvckZyb21Db2RlKHN0YXR1cywgdmFsdWUubWVzc2FnZSkpO1xuICB9XG4gIGlmICghdXRpbC5oYXNWYWx1ZShzdGF0dXMpICYmIHZhbHVlICYmIF8uaXNTdHJpbmcodmFsdWUuZXJyb3IpKSB7XG4gICAgLy8gVzNDXG4gICAgcmV0dXJuIHRoaXMuYXN5bmNQcm9taXNlLnJlamVjdChlcnJvckZyb21XM0NKc29uQ29kZSh2YWx1ZS5lcnJvciwgdmFsdWUubWVzc2FnZSwgdmFsdWUuc3RhY2t0cmFjZSkpO1xuICB9XG4gIHJldHVybiB0aGlzLmFzeW5jUHJvbWlzZS5yZXNvbHZlKHZhbHVlKTtcbn07XG5cbmV4dGVuc2lvbnMuZXhlY3V0ZSA9IGFzeW5jIGZ1bmN0aW9uIGV4ZWN1dGUgKHNjcmlwdCwgYXJncykge1xuICBpZiAoc2NyaXB0Lm1hdGNoKC9ebW9iaWxlOi8pKSB7XG4gICAgc2NyaXB0ID0gc2NyaXB0LnJlcGxhY2UoL15tb2JpbGU6LywgJycpLnRyaW0oKTtcbiAgICByZXR1cm4gYXdhaXQgdGhpcy5leGVjdXRlTW9iaWxlKHNjcmlwdCwgXy5pc0FycmF5KGFyZ3MpID8gYXJnc1swXSA6IGFyZ3MpO1xuICB9IGVsc2UgaWYgKHRoaXMuaXNXZWJDb250ZXh0KCkpIHtcbiAgICBhcmdzID0gdGhpcy5jb252ZXJ0RWxlbWVudHNGb3JBdG9tcyhhcmdzKTtcbiAgICBjb25zdCByZXN1bHQgPSBhd2FpdCB0aGlzLmV4ZWN1dGVBdG9tKCdleGVjdXRlX3NjcmlwdCcsIFtzY3JpcHQsIGFyZ3NdKTtcbiAgICByZXR1cm4gdGhpcy5jYWNoZVdlYkVsZW1lbnRzKHJlc3VsdCk7XG4gIH0gZWxzZSB7XG4gICAgdGhyb3cgbmV3IGVycm9ycy5Ob3RJbXBsZW1lbnRlZEVycm9yKCk7XG4gIH1cbn07XG5cbmV4dGVuc2lvbnMuZXhlY3V0ZUFzeW5jID0gYXN5bmMgZnVuY3Rpb24gZXhlY3V0ZUFzeW5jIChzY3JpcHQsIGFyZ3MpIHtcbiAgaWYgKCF0aGlzLmlzV2ViQ29udGV4dCgpKSB7XG4gICAgdGhyb3cgbmV3IGVycm9ycy5Ob3RJbXBsZW1lbnRlZEVycm9yKCk7XG4gIH1cblxuICBhcmdzID0gdGhpcy5jb252ZXJ0RWxlbWVudHNGb3JBdG9tcyhhcmdzKTtcbiAgdGhpcy5hc3luY1dhaXRNcyA9IHRoaXMuYXN5bmNXYWl0TXMgfHwgMDtcbiAgY29uc3QgcHJvbWlzZSA9IHRoaXMucmVtb3RlLmV4ZWN1dGVBdG9tQXN5bmMoJ2V4ZWN1dGVfYXN5bmNfc2NyaXB0JywgW3NjcmlwdCwgYXJncywgdGhpcy5hc3luY1dhaXRNc10sIHRoaXMuY3VyV2ViRnJhbWVzKTtcbiAgcmV0dXJuIGF3YWl0IHRoaXMud2FpdEZvckF0b20ocHJvbWlzZSk7XG59O1xuXG5leHRlbnNpb25zLmV4ZWN1dGVNb2JpbGUgPSBhc3luYyBmdW5jdGlvbiBleGVjdXRlTW9iaWxlIChtb2JpbGVDb21tYW5kLCBvcHRzID0ge30pIHtcbiAgY29uc3QgY29tbWFuZE1hcCA9IHtcbiAgICAvL3JlZ2lvbiBnZXN0dXJlcyBzdXBwb3J0XG4gICAgdGFwOiAnbW9iaWxlVGFwJyxcbiAgICBzY3JvbGw6ICdtb2JpbGVTY3JvbGwnLFxuICAgIHNlbGVjdFBpY2tlcldoZWVsVmFsdWU6ICdtb2JpbGVTZWxlY3RQaWNrZXJXaGVlbFZhbHVlJyxcbiAgICAvLyBodHRwczovL2RldmVsb3Blci5hcHBsZS5jb20vZG9jdW1lbnRhdGlvbi94Y3Rlc3QveGN1aWVsZW1lbnQvMTYxODY2OC1zd2lwZWxlZnQ/bGFuZ3VhZ2U9b2JqY1xuICAgIC8vIGh0dHBzOi8vZGV2ZWxvcGVyLmFwcGxlLmNvbS9kb2N1bWVudGF0aW9uL3hjdGVzdC94Y3VpZWxlbWVudC8xNjE4Njc0LXN3aXBlcmlnaHQ/bGFuZ3VhZ2U9b2JqY1xuICAgIC8vIGh0dHBzOi8vZGV2ZWxvcGVyLmFwcGxlLmNvbS9kb2N1bWVudGF0aW9uL3hjdGVzdC94Y3VpZWxlbWVudC8xNjE4NjY3LXN3aXBldXA/bGFuZ3VhZ2U9b2JqY1xuICAgIC8vIGh0dHBzOi8vZGV2ZWxvcGVyLmFwcGxlLmNvbS9kb2N1bWVudGF0aW9uL3hjdGVzdC94Y3VpZWxlbWVudC8xNjE4NjY0LXN3aXBlZG93bj9sYW5ndWFnZT1vYmpjXG4gICAgc3dpcGU6ICdtb2JpbGVTd2lwZScsXG4gICAgLy8gaHR0cHM6Ly9kZXZlbG9wZXIuYXBwbGUuY29tL2RvY3VtZW50YXRpb24veGN0ZXN0L3hjdWllbGVtZW50LzE2MTg2NjktcGluY2h3aXRoc2NhbGU/bGFuZ3VhZ2U9b2JqY1xuICAgIHBpbmNoOiAnbW9iaWxlUGluY2gnLFxuICAgIC8vIGh0dHBzOi8vZGV2ZWxvcGVyLmFwcGxlLmNvbS9kb2N1bWVudGF0aW9uL3hjdGVzdC94Y3VpZWxlbWVudC8xNjE4NjczLWRvdWJsZXRhcD9sYW5ndWFnZT1vYmpjXG4gICAgZG91YmxlVGFwOiAnbW9iaWxlRG91YmxlVGFwJyxcbiAgICAvLyBodHRwczovL2RldmVsb3Blci5hcHBsZS5jb20vZG9jdW1lbnRhdGlvbi94Y3Rlc3QveGN1aWVsZW1lbnQvMTYxODY3NS10d29maW5nZXJ0YXA/bGFuZ3VhZ2U9b2JqY1xuICAgIHR3b0ZpbmdlclRhcDogJ21vYmlsZVR3b0ZpbmdlclRhcCcsXG4gICAgLy8gaHR0cHM6Ly9kZXZlbG9wZXIuYXBwbGUuY29tL2RvY3VtZW50YXRpb24veGN0ZXN0L3hjdWllbGVtZW50LzE2MTg2NzEtdGFwd2l0aG51bWJlcm9mdGFwcz9sYW5ndWFnZT1vYmpjXG4gICAgdGFwV2l0aE51bWJlck9mVGFwczogJ21vYmlsZVRhcFdpdGhOdW1iZXJPZlRhcHMnLFxuICAgIC8vIGh0dHBzOi8vZGV2ZWxvcGVyLmFwcGxlLmNvbS9kb2N1bWVudGF0aW9uL3hjdGVzdC94Y3VpZWxlbWVudC8xNjE4NjYzLXByZXNzZm9yZHVyYXRpb24/bGFuZ3VhZ2U9b2JqY1xuICAgIHRvdWNoQW5kSG9sZDogJ21vYmlsZVRvdWNoQW5kSG9sZCcsXG4gICAgLy8gaHR0cHM6Ly9kZXZlbG9wZXIuYXBwbGUuY29tL2RvY3VtZW50YXRpb24veGN0ZXN0L3hjdWllbGVtZW50LzE2MTg2NzAtcHJlc3Nmb3JkdXJhdGlvbj9sYW5ndWFnZT1vYmpjXG4gICAgZHJhZ0Zyb21Ub0ZvckR1cmF0aW9uOiAnbW9iaWxlRHJhZ0Zyb21Ub0ZvckR1cmF0aW9uJyxcbiAgICAvLyBodHRwczovL2RldmVsb3Blci5hcHBsZS5jb20vZG9jdW1lbnRhdGlvbi94Y3Rlc3QveGN1aWVsZW1lbnQvMTYxODY2NS1yb3RhdGU/bGFuZ3VhZ2U9b2JqY1xuICAgIHJvdGF0ZUVsZW1lbnQ6ICdtb2JpbGVSb3RhdGVFbGVtZW50JyxcbiAgICBmb3JjZVByZXNzOiAnbW9iaWxlRm9yY2VQcmVzcycsXG5cbiAgICAvL2VuZHJlZ2lvbiBnZXN0dXJlcyBzdXBwb3J0XG4gICAgYWxlcnQ6ICdtb2JpbGVIYW5kbGVBbGVydCcsXG5cbiAgICBzZXRQYXN0ZWJvYXJkOiAnbW9iaWxlU2V0UGFzdGVib2FyZCcsXG4gICAgZ2V0UGFzdGVib2FyZDogJ21vYmlsZUdldFBhc3RlYm9hcmQnLFxuXG4gICAgc291cmNlOiAnbW9iaWxlR2V0U291cmNlJyxcbiAgICBnZXRDb250ZXh0czogJ21vYmlsZUdldENvbnRleHRzJyxcblxuICAgIC8vcmVnaW9uIG11bHRpcGxlIGFwcHMgbWFuYWdlbWVudFxuICAgIGluc3RhbGxBcHA6ICdtb2JpbGVJbnN0YWxsQXBwJyxcbiAgICBpc0FwcEluc3RhbGxlZDogJ21vYmlsZUlzQXBwSW5zdGFsbGVkJyxcbiAgICByZW1vdmVBcHA6ICdtb2JpbGVSZW1vdmVBcHAnLFxuICAgIGxhdW5jaEFwcDogJ21vYmlsZUxhdW5jaEFwcCcsXG4gICAgdGVybWluYXRlQXBwOiAnbW9iaWxlVGVybWluYXRlQXBwJyxcbiAgICBraWxsQXBwOiAnbW9iaWxlS2lsbEFwcCcsXG4gICAgcXVlcnlBcHBTdGF0ZTogJ21vYmlsZVF1ZXJ5QXBwU3RhdGUnLFxuICAgIGFjdGl2YXRlQXBwOiAnbW9iaWxlQWN0aXZhdGVBcHAnLFxuICAgIGxpc3RBcHBzOiAnbW9iaWxlTGlzdEFwcHMnLFxuICAgIC8vZW5kcmVnaW9uIG11bHRpcGxlIGFwcHMgbWFuYWdlbWVudFxuXG4gICAgdmlld3BvcnRTY3JlZW5zaG90OiAnZ2V0Vmlld3BvcnRTY3JlZW5zaG90JyxcbiAgICB2aWV3cG9ydFJlY3Q6ICdnZXRWaWV3cG9ydFJlY3QnLFxuXG4gICAgc3RhcnRQZXJmUmVjb3JkOiAnbW9iaWxlU3RhcnRQZXJmUmVjb3JkJyxcbiAgICBzdG9wUGVyZlJlY29yZDogJ21vYmlsZVN0b3BQZXJmUmVjb3JkJyxcblxuICAgIGluc3RhbGxDZXJ0aWZpY2F0ZTogJ21vYmlsZUluc3RhbGxDZXJ0aWZpY2F0ZScsXG5cbiAgICBzdGFydExvZ3NCcm9hZGNhc3Q6ICdtb2JpbGVTdGFydExvZ3NCcm9hZGNhc3QnLFxuICAgIHN0b3BMb2dzQnJvYWRjYXN0OiAnbW9iaWxlU3RvcExvZ3NCcm9hZGNhc3QnLFxuXG4gICAgYmF0dGVyeUluZm86ICdtb2JpbGVHZXRCYXR0ZXJ5SW5mbycsXG4gICAgZGV2aWNlSW5mbzogJ21vYmlsZUdldERldmljZUluZm8nLFxuICAgIGdldERldmljZVRpbWU6ICdtb2JpbGVHZXREZXZpY2VUaW1lJyxcbiAgICBhY3RpdmVBcHBJbmZvOiAnbW9iaWxlR2V0QWN0aXZlQXBwSW5mbycsXG4gICAgZGV2aWNlU2NyZWVuSW5mbzogJ2dldFNjcmVlbkluZm8nLFxuXG4gICAgcHJlc3NCdXR0b246ICdtb2JpbGVQcmVzc0J1dHRvbicsXG5cbiAgICBlbnJvbGxCaW9tZXRyaWM6ICdtb2JpbGVFbnJvbGxCaW9tZXRyaWMnLFxuICAgIHNlbmRCaW9tZXRyaWNNYXRjaDogJ21vYmlsZVNlbmRCaW9tZXRyaWNNYXRjaCcsXG4gICAgaXNCaW9tZXRyaWNFbnJvbGxlZDogJ21vYmlsZUlzQmlvbWV0cmljRW5yb2xsZWQnLFxuXG4gICAgY2xlYXJLZXljaGFpbnM6ICdtb2JpbGVDbGVhcktleWNoYWlucycsXG5cbiAgICBnZXRQZXJtaXNzaW9uOiAnbW9iaWxlR2V0UGVybWlzc2lvbicsXG4gICAgc2V0UGVybWlzc2lvbjogJ21vYmlsZVNldFBlcm1pc3Npb25zJyxcbiAgICByZXNldFBlcm1pc3Npb246ICdtb2JpbGVSZXNldFBlcm1pc3Npb24nLFxuXG4gICAgZ2V0QXBwZWFyYW5jZTogJ21vYmlsZUdldEFwcGVhcmFuY2UnLFxuICAgIHNldEFwcGVhcmFuY2U6ICdtb2JpbGVTZXRBcHBlYXJhbmNlJyxcblxuICAgIHNpcmlDb21tYW5kOiAnbW9iaWxlU2lyaUNvbW1hbmQnLFxuXG4gICAgZGVsZXRlRmlsZTogJ21vYmlsZURlbGV0ZUZpbGUnLFxuICAgIGRlbGV0ZUZvbGRlcjogJ21vYmlsZURlbGV0ZUZvbGRlcicsXG5cbiAgICBzdGFydEF1ZGlvUmVjb3JkaW5nOiAnc3RhcnRBdWRpb1JlY29yZGluZycsXG4gICAgc3RvcEF1ZGlvUmVjb3JkaW5nOiAnc3RvcEF1ZGlvUmVjb3JkaW5nJyxcblxuICAgIC8vIFhDVGVzdFxuICAgIHJ1blhDVGVzdDogJ21vYmlsZVJ1blhDVGVzdCcsXG4gICAgaW5zdGFsbFhDVGVzdEJ1bmRsZTogJ21vYmlsZUluc3RhbGxYQ1Rlc3RCdW5kbGUnLFxuICAgIGxpc3RYQ1Rlc3RCdW5kbGVzOiAnbW9iaWxlTGlzdFhDVGVzdEJ1bmRsZXMnLFxuICAgIGxpc3RYQ1Rlc3RzSW5UZXN0QnVuZGxlOiAnbW9iaWxlTGlzdFhDVGVzdHNJblRlc3RCdW5kbGUnLFxuXG4gICAgcHVzaE5vdGlmaWNhdGlvbjogJ21vYmlsZVB1c2hOb3RpZmljYXRpb24nLFxuICAgIGV4cGVjdE5vdGlmaWNhdGlvbjogJ21vYmlsZUV4cGVjdE5vdGlmaWNhdGlvbicsXG5cbiAgICBwZXJmb3JtSW9IaWRFdmVudDogJ21vYmlsZVBlcmZvcm1Jb0hpZEV2ZW50JyxcblxuICAgIGNvbmZpZ3VyZUxvY2FsaXphdGlvbjogJ21vYmlsZUNvbmZpZ3VyZUxvY2FsaXphdGlvbicsXG5cbiAgICByZXNldExvY2F0aW9uU2VydmljZTogJ21vYmlsZVJlc2V0TG9jYXRpb25TZXJ2aWNlJyxcblxuICAgIHN0YXJ0UGNhcDogJ21vYmlsZVN0YXJ0UGNhcCcsXG4gICAgc3RvcFBjYXA6ICdtb2JpbGVTdG9wUGNhcCcsXG4gIH07XG5cbiAgaWYgKCFfLmhhcyhjb21tYW5kTWFwLCBtb2JpbGVDb21tYW5kKSkge1xuICAgIHRocm93IG5ldyBlcnJvcnMuVW5rbm93bkNvbW1hbmRFcnJvcihgVW5rbm93biBtb2JpbGUgY29tbWFuZCAnJHttb2JpbGVDb21tYW5kfScuIE9ubHkgJHtfLmtleXMoY29tbWFuZE1hcCkuam9pbignLCAnKX0gY29tbWFuZHMgYXJlIHN1cHBvcnRlZC5gKTtcbiAgfVxuICByZXR1cm4gYXdhaXQgdGhpc1tjb21tYW5kTWFwW21vYmlsZUNvbW1hbmRdXShvcHRzKTtcbn07XG5cbmV4cG9ydCBkZWZhdWx0IGV4dGVuc2lvbnM7XG4iXSwibWFwcGluZ3MiOiI7Ozs7Ozs7Ozs7O0FBQUE7O0FBQ0E7O0FBR0E7O0FBRUEsTUFBTUEsVUFBVSxHQUFHLEVBQW5COztBQUVBQSxVQUFVLENBQUNDLG9CQUFYLEdBQWtDLGVBQWVBLG9CQUFmLENBQXFDQyxNQUFyQyxFQUE2Q0MsS0FBN0MsRUFBb0Q7RUFDcEYsS0FBS0MsR0FBTCxDQUFTQyxLQUFULENBQWdCLDRCQUEyQkMsSUFBSSxDQUFDQyxTQUFMLENBQWVKLEtBQWYsQ0FBc0IsRUFBakU7O0VBQ0EsSUFBSSxDQUFDSyxhQUFBLENBQUtDLFFBQUwsQ0FBYyxLQUFLQyxZQUFuQixDQUFMLEVBQXVDO0lBQ3JDLEtBQUtOLEdBQUwsQ0FBU08sSUFBVCxDQUFlLDBEQUFELEdBQ1gsaUJBQWdCTCxJQUFJLENBQUNDLFNBQUwsQ0FBZUosS0FBZixDQUFzQixFQUR6QztJQUVBO0VBQ0Q7O0VBRUQsSUFBSUssYUFBQSxDQUFLQyxRQUFMLENBQWNQLE1BQWQsS0FBeUJBLE1BQU0sS0FBSyxDQUF4QyxFQUEyQztJQUV6QyxPQUFPLEtBQUtRLFlBQUwsQ0FBa0JFLE1BQWxCLENBQXlCLElBQUFDLHFCQUFBLEVBQWNYLE1BQWQsRUFBc0JDLEtBQUssQ0FBQ1csT0FBNUIsQ0FBekIsQ0FBUDtFQUNEOztFQUNELElBQUksQ0FBQ04sYUFBQSxDQUFLQyxRQUFMLENBQWNQLE1BQWQsQ0FBRCxJQUEwQkMsS0FBMUIsSUFBbUNZLGVBQUEsQ0FBRUMsUUFBRixDQUFXYixLQUFLLENBQUNjLEtBQWpCLENBQXZDLEVBQWdFO0lBRTlELE9BQU8sS0FBS1AsWUFBTCxDQUFrQkUsTUFBbEIsQ0FBeUIsSUFBQU0sNEJBQUEsRUFBcUJmLEtBQUssQ0FBQ2MsS0FBM0IsRUFBa0NkLEtBQUssQ0FBQ1csT0FBeEMsRUFBaURYLEtBQUssQ0FBQ2dCLFVBQXZELENBQXpCLENBQVA7RUFDRDs7RUFDRCxPQUFP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
143
+ //# sourceMappingURL=data:application/json;charset=utf8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibGliL2NvbW1hbmRzL2V4ZWN1dGUuanMiLCJuYW1lcyI6WyJleHRlbnNpb25zIiwicmVjZWl2ZUFzeW5jUmVzcG9uc2UiLCJzdGF0dXMiLCJ2YWx1ZSIsImxvZyIsImRlYnVnIiwiSlNPTiIsInN0cmluZ2lmeSIsInV0aWwiLCJoYXNWYWx1ZSIsImFzeW5jUHJvbWlzZSIsIndhcm4iLCJyZWplY3QiLCJlcnJvckZyb21Db2RlIiwibWVzc2FnZSIsIl8iLCJpc1N0cmluZyIsImVycm9yIiwiZXJyb3JGcm9tVzNDSnNvbkNvZGUiLCJzdGFja3RyYWNlIiwicmVzb2x2ZSIsImV4ZWN1dGUiLCJzY3JpcHQiLCJhcmdzIiwibWF0Y2giLCJyZXBsYWNlIiwidHJpbSIsImV4ZWN1dGVNb2JpbGUiLCJpc0FycmF5IiwiaXNXZWJDb250ZXh0IiwiY29udmVydEVsZW1lbnRzRm9yQXRvbXMiLCJyZXN1bHQiLCJleGVjdXRlQXRvbSIsImNhY2hlV2ViRWxlbWVudHMiLCJlcnJvcnMiLCJOb3RJbXBsZW1lbnRlZEVycm9yIiwiZXhlY3V0ZUFzeW5jIiwiYXN5bmNXYWl0TXMiLCJwcm9taXNlIiwicmVtb3RlIiwiZXhlY3V0ZUF0b21Bc3luYyIsImN1cldlYkZyYW1lcyIsIndhaXRGb3JBdG9tIiwibW9iaWxlQ29tbWFuZCIsIm9wdHMiLCJjb21tYW5kTWFwIiwidGFwIiwic2Nyb2xsIiwic2VsZWN0UGlja2VyV2hlZWxWYWx1ZSIsInN3aXBlIiwicGluY2giLCJkb3VibGVUYXAiLCJ0d29GaW5nZXJUYXAiLCJ0YXBXaXRoTnVtYmVyT2ZUYXBzIiwidG91Y2hBbmRIb2xkIiwiZHJhZ0Zyb21Ub0ZvckR1cmF0aW9uIiwicm90YXRlRWxlbWVudCIsImZvcmNlUHJlc3MiLCJzY3JvbGxUb0VsZW1lbnQiLCJhbGVydCIsInNldFBhc3RlYm9hcmQiLCJnZXRQYXN0ZWJvYXJkIiwic291cmNlIiwiZ2V0Q29udGV4dHMiLCJpbnN0YWxsQXBwIiwiaXNBcHBJbnN0YWxsZWQiLCJyZW1vdmVBcHAiLCJsYXVuY2hBcHAiLCJ0ZXJtaW5hdGVBcHAiLCJraWxsQXBwIiwicXVlcnlBcHBTdGF0ZSIsImFjdGl2YXRlQXBwIiwibGlzdEFwcHMiLCJ2aWV3cG9ydFNjcmVlbnNob3QiLCJ2aWV3cG9ydFJlY3QiLCJzdGFydFBlcmZSZWNvcmQiLCJzdG9wUGVyZlJlY29yZCIsImluc3RhbGxDZXJ0aWZpY2F0ZSIsInN0YXJ0TG9nc0Jyb2FkY2FzdCIsInN0b3BMb2dzQnJvYWRjYXN0IiwiYmF0dGVyeUluZm8iLCJkZXZpY2VJbmZvIiwiZ2V0RGV2aWNlVGltZSIsImFjdGl2ZUFwcEluZm8iLCJkZXZpY2VTY3JlZW5JbmZvIiwicHJlc3NCdXR0b24iLCJlbnJvbGxCaW9tZXRyaWMiLCJzZW5kQmlvbWV0cmljTWF0Y2giLCJpc0Jpb21ldHJpY0Vucm9sbGVkIiwiY2xlYXJLZXljaGFpbnMiLCJnZXRQZXJtaXNzaW9uIiwic2V0UGVybWlzc2lvbiIsInJlc2V0UGVybWlzc2lvbiIsImdldEFwcGVhcmFuY2UiLCJzZXRBcHBlYXJhbmNlIiwic2lyaUNvbW1hbmQiLCJkZWxldGVGaWxlIiwiZGVsZXRlRm9sZGVyIiwic3RhcnRBdWRpb1JlY29yZGluZyIsInN0b3BBdWRpb1JlY29yZGluZyIsInJ1blhDVGVzdCIsImluc3RhbGxYQ1Rlc3RCdW5kbGUiLCJsaXN0WENUZXN0QnVuZGxlcyIsImxpc3RYQ1Rlc3RzSW5UZXN0QnVuZGxlIiwicHVzaE5vdGlmaWNhdGlvbiIsImV4cGVjdE5vdGlmaWNhdGlvbiIsInBlcmZvcm1Jb0hpZEV2ZW50IiwiY29uZmlndXJlTG9jYWxpemF0aW9uIiwicmVzZXRMb2NhdGlvblNlcnZpY2UiLCJzdGFydFBjYXAiLCJzdG9wUGNhcCIsImhhcyIsIlVua25vd25Db21tYW5kRXJyb3IiLCJrZXlzIiwiam9pbiJdLCJzb3VyY2VSb290IjoiLi4vLi4vLi4iLCJzb3VyY2VzIjpbImxpYi9jb21tYW5kcy9leGVjdXRlLmpzIl0sInNvdXJjZXNDb250ZW50IjpbImltcG9ydCBfIGZyb20gJ2xvZGFzaCc7XG5pbXBvcnQge1xuICBlcnJvcnMsIGVycm9yRnJvbUNvZGUsIGVycm9yRnJvbVczQ0pzb25Db2RlXG59IGZyb20gJ2FwcGl1bS9kcml2ZXInO1xuaW1wb3J0IHsgdXRpbCB9IGZyb20gJ2FwcGl1bS9zdXBwb3J0JztcblxuY29uc3QgZXh0ZW5zaW9ucyA9IHt9O1xuXG5leHRlbnNpb25zLnJlY2VpdmVBc3luY1Jlc3BvbnNlID0gYXN5bmMgZnVuY3Rpb24gcmVjZWl2ZUFzeW5jUmVzcG9uc2UgKHN0YXR1cywgdmFsdWUpIHsgLy8gZXNsaW50LWRpc2FibGUtbGluZSByZXF1aXJlLWF3YWl0XG4gIHRoaXMubG9nLmRlYnVnKGBSZWNlaXZlZCBhc3luYyByZXNwb25zZTogJHtKU09OLnN0cmluZ2lmeSh2YWx1ZSl9YCk7XG4gIGlmICghdXRpbC5oYXNWYWx1ZSh0aGlzLmFzeW5jUHJvbWlzZSkpIHtcbiAgICB0aGlzLmxvZy53YXJuKGBSZWNlaXZlZCBhc3luYyByZXNwb25zZSB3aGVuIHdlIHdlcmUgbm90IGV4cGVjdGluZyBvbmUhIGAgK1xuICAgICAgYFJlc3BvbnNlIHdhczogJHtKU09OLnN0cmluZ2lmeSh2YWx1ZSl9YCk7XG4gICAgcmV0dXJuO1xuICB9XG5cbiAgaWYgKHV0aWwuaGFzVmFsdWUoc3RhdHVzKSAmJiBzdGF0dXMgIT09IDApIHtcbiAgICAvLyBNSlNPTldQXG4gICAgcmV0dXJuIHRoaXMuYXN5bmNQcm9taXNlLnJlamVjdChlcnJvckZyb21Db2RlKHN0YXR1cywgdmFsdWUubWVzc2FnZSkpO1xuICB9XG4gIGlmICghdXRpbC5oYXNWYWx1ZShzdGF0dXMpICYmIHZhbHVlICYmIF8uaXNTdHJpbmcodmFsdWUuZXJyb3IpKSB7XG4gICAgLy8gVzNDXG4gICAgcmV0dXJuIHRoaXMuYXN5bmNQcm9taXNlLnJlamVjdChlcnJvckZyb21XM0NKc29uQ29kZSh2YWx1ZS5lcnJvciwgdmFsdWUubWVzc2FnZSwgdmFsdWUuc3RhY2t0cmFjZSkpO1xuICB9XG4gIHJldHVybiB0aGlzLmFzeW5jUHJvbWlzZS5yZXNvbHZlKHZhbHVlKTtcbn07XG5cbmV4dGVuc2lvbnMuZXhlY3V0ZSA9IGFzeW5jIGZ1bmN0aW9uIGV4ZWN1dGUgKHNjcmlwdCwgYXJncykge1xuICBpZiAoc2NyaXB0Lm1hdGNoKC9ebW9iaWxlOi8pKSB7XG4gICAgc2NyaXB0ID0gc2NyaXB0LnJlcGxhY2UoL15tb2JpbGU6LywgJycpLnRyaW0oKTtcbiAgICByZXR1cm4gYXdhaXQgdGhpcy5leGVjdXRlTW9iaWxlKHNjcmlwdCwgXy5pc0FycmF5KGFyZ3MpID8gYXJnc1swXSA6IGFyZ3MpO1xuICB9IGVsc2UgaWYgKHRoaXMuaXNXZWJDb250ZXh0KCkpIHtcbiAgICBhcmdzID0gdGhpcy5jb252ZXJ0RWxlbWVudHNGb3JBdG9tcyhhcmdzKTtcbiAgICBjb25zdCByZXN1bHQgPSBhd2FpdCB0aGlzLmV4ZWN1dGVBdG9tKCdleGVjdXRlX3NjcmlwdCcsIFtzY3JpcHQsIGFyZ3NdKTtcbiAgICByZXR1cm4gdGhpcy5jYWNoZVdlYkVsZW1lbnRzKHJlc3VsdCk7XG4gIH0gZWxzZSB7XG4gICAgdGhyb3cgbmV3IGVycm9ycy5Ob3RJbXBsZW1lbnRlZEVycm9yKCk7XG4gIH1cbn07XG5cbmV4dGVuc2lvbnMuZXhlY3V0ZUFzeW5jID0gYXN5bmMgZnVuY3Rpb24gZXhlY3V0ZUFzeW5jIChzY3JpcHQsIGFyZ3MpIHtcbiAgaWYgKCF0aGlzLmlzV2ViQ29udGV4dCgpKSB7XG4gICAgdGhyb3cgbmV3IGVycm9ycy5Ob3RJbXBsZW1lbnRlZEVycm9yKCk7XG4gIH1cblxuICBhcmdzID0gdGhpcy5jb252ZXJ0RWxlbWVudHNGb3JBdG9tcyhhcmdzKTtcbiAgdGhpcy5hc3luY1dhaXRNcyA9IHRoaXMuYXN5bmNXYWl0TXMgfHwgMDtcbiAgY29uc3QgcHJvbWlzZSA9IHRoaXMucmVtb3RlLmV4ZWN1dGVBdG9tQXN5bmMoJ2V4ZWN1dGVfYXN5bmNfc2NyaXB0JywgW3NjcmlwdCwgYXJncywgdGhpcy5hc3luY1dhaXRNc10sIHRoaXMuY3VyV2ViRnJhbWVzKTtcbiAgcmV0dXJuIGF3YWl0IHRoaXMud2FpdEZvckF0b20ocHJvbWlzZSk7XG59O1xuXG5leHRlbnNpb25zLmV4ZWN1dGVNb2JpbGUgPSBhc3luYyBmdW5jdGlvbiBleGVjdXRlTW9iaWxlIChtb2JpbGVDb21tYW5kLCBvcHRzID0ge30pIHtcbiAgY29uc3QgY29tbWFuZE1hcCA9IHtcbiAgICAvL3JlZ2lvbiBnZXN0dXJlcyBzdXBwb3J0XG4gICAgdGFwOiAnbW9iaWxlVGFwJyxcbiAgICBzY3JvbGw6ICdtb2JpbGVTY3JvbGwnLFxuICAgIHNlbGVjdFBpY2tlcldoZWVsVmFsdWU6ICdtb2JpbGVTZWxlY3RQaWNrZXJXaGVlbFZhbHVlJyxcbiAgICAvLyBodHRwczovL2RldmVsb3Blci5hcHBsZS5jb20vZG9jdW1lbnRhdGlvbi94Y3Rlc3QveGN1aWVsZW1lbnQvMTYxODY2OC1zd2lwZWxlZnQ/bGFuZ3VhZ2U9b2JqY1xuICAgIC8vIGh0dHBzOi8vZGV2ZWxvcGVyLmFwcGxlLmNvbS9kb2N1bWVudGF0aW9uL3hjdGVzdC94Y3VpZWxlbWVudC8xNjE4Njc0LXN3aXBlcmlnaHQ/bGFuZ3VhZ2U9b2JqY1xuICAgIC8vIGh0dHBzOi8vZGV2ZWxvcGVyLmFwcGxlLmNvbS9kb2N1bWVudGF0aW9uL3hjdGVzdC94Y3VpZWxlbWVudC8xNjE4NjY3LXN3aXBldXA/bGFuZ3VhZ2U9b2JqY1xuICAgIC8vIGh0dHBzOi8vZGV2ZWxvcGVyLmFwcGxlLmNvbS9kb2N1bWVudGF0aW9uL3hjdGVzdC94Y3VpZWxlbWVudC8xNjE4NjY0LXN3aXBlZG93bj9sYW5ndWFnZT1vYmpjXG4gICAgc3dpcGU6ICdtb2JpbGVTd2lwZScsXG4gICAgLy8gaHR0cHM6Ly9kZXZlbG9wZXIuYXBwbGUuY29tL2RvY3VtZW50YXRpb24veGN0ZXN0L3hjdWllbGVtZW50LzE2MTg2NjktcGluY2h3aXRoc2NhbGU/bGFuZ3VhZ2U9b2JqY1xuICAgIHBpbmNoOiAnbW9iaWxlUGluY2gnLFxuICAgIC8vIGh0dHBzOi8vZGV2ZWxvcGVyLmFwcGxlLmNvbS9kb2N1bWVudGF0aW9uL3hjdGVzdC94Y3VpZWxlbWVudC8xNjE4NjczLWRvdWJsZXRhcD9sYW5ndWFnZT1vYmpjXG4gICAgZG91YmxlVGFwOiAnbW9iaWxlRG91YmxlVGFwJyxcbiAgICAvLyBodHRwczovL2RldmVsb3Blci5hcHBsZS5jb20vZG9jdW1lbnRhdGlvbi94Y3Rlc3QveGN1aWVsZW1lbnQvMTYxODY3NS10d29maW5nZXJ0YXA/bGFuZ3VhZ2U9b2JqY1xuICAgIHR3b0ZpbmdlclRhcDogJ21vYmlsZVR3b0ZpbmdlclRhcCcsXG4gICAgLy8gaHR0cHM6Ly9kZXZlbG9wZXIuYXBwbGUuY29tL2RvY3VtZW50YXRpb24veGN0ZXN0L3hjdWllbGVtZW50LzE2MTg2NzEtdGFwd2l0aG51bWJlcm9mdGFwcz9sYW5ndWFnZT1vYmpjXG4gICAgdGFwV2l0aE51bWJlck9mVGFwczogJ21vYmlsZVRhcFdpdGhOdW1iZXJPZlRhcHMnLFxuICAgIC8vIGh0dHBzOi8vZGV2ZWxvcGVyLmFwcGxlLmNvbS9kb2N1bWVudGF0aW9uL3hjdGVzdC94Y3VpZWxlbWVudC8xNjE4NjYzLXByZXNzZm9yZHVyYXRpb24/bGFuZ3VhZ2U9b2JqY1xuICAgIHRvdWNoQW5kSG9sZDogJ21vYmlsZVRvdWNoQW5kSG9sZCcsXG4gICAgLy8gaHR0cHM6Ly9kZXZlbG9wZXIuYXBwbGUuY29tL2RvY3VtZW50YXRpb24veGN0ZXN0L3hjdWllbGVtZW50LzE2MTg2NzAtcHJlc3Nmb3JkdXJhdGlvbj9sYW5ndWFnZT1vYmpjXG4gICAgZHJhZ0Zyb21Ub0ZvckR1cmF0aW9uOiAnbW9iaWxlRHJhZ0Zyb21Ub0ZvckR1cmF0aW9uJyxcbiAgICAvLyBodHRwczovL2RldmVsb3Blci5hcHBsZS5jb20vZG9jdW1lbnRhdGlvbi94Y3Rlc3QveGN1aWVsZW1lbnQvMTYxODY2NS1yb3RhdGU/bGFuZ3VhZ2U9b2JqY1xuICAgIHJvdGF0ZUVsZW1lbnQ6ICdtb2JpbGVSb3RhdGVFbGVtZW50JyxcbiAgICBmb3JjZVByZXNzOiAnbW9iaWxlRm9yY2VQcmVzcycsXG4gICAgc2Nyb2xsVG9FbGVtZW50OiAnbW9iaWxlU2Nyb2xsVG9FbGVtZW50JyxcblxuICAgIC8vZW5kcmVnaW9uIGdlc3R1cmVzIHN1cHBvcnRcbiAgICBhbGVydDogJ21vYmlsZUhhbmRsZUFsZXJ0JyxcblxuICAgIHNldFBhc3RlYm9hcmQ6ICdtb2JpbGVTZXRQYXN0ZWJvYXJkJyxcbiAgICBnZXRQYXN0ZWJvYXJkOiAnbW9iaWxlR2V0UGFzdGVib2FyZCcsXG5cbiAgICBzb3VyY2U6ICdtb2JpbGVHZXRTb3VyY2UnLFxuICAgIGdldENvbnRleHRzOiAnbW9iaWxlR2V0Q29udGV4dHMnLFxuXG4gICAgLy9yZWdpb24gbXVsdGlwbGUgYXBwcyBtYW5hZ2VtZW50XG4gICAgaW5zdGFsbEFwcDogJ21vYmlsZUluc3RhbGxBcHAnLFxuICAgIGlzQXBwSW5zdGFsbGVkOiAnbW9iaWxlSXNBcHBJbnN0YWxsZWQnLFxuICAgIHJlbW92ZUFwcDogJ21vYmlsZVJlbW92ZUFwcCcsXG4gICAgbGF1bmNoQXBwOiAnbW9iaWxlTGF1bmNoQXBwJyxcbiAgICB0ZXJtaW5hdGVBcHA6ICdtb2JpbGVUZXJtaW5hdGVBcHAnLFxuICAgIGtpbGxBcHA6ICdtb2JpbGVLaWxsQXBwJyxcbiAgICBxdWVyeUFwcFN0YXRlOiAnbW9iaWxlUXVlcnlBcHBTdGF0ZScsXG4gICAgYWN0aXZhdGVBcHA6ICdtb2JpbGVBY3RpdmF0ZUFwcCcsXG4gICAgbGlzdEFwcHM6ICdtb2JpbGVMaXN0QXBwcycsXG4gICAgLy9lbmRyZWdpb24gbXVsdGlwbGUgYXBwcyBtYW5hZ2VtZW50XG5cbiAgICB2aWV3cG9ydFNjcmVlbnNob3Q6ICdnZXRWaWV3cG9ydFNjcmVlbnNob3QnLFxuICAgIHZpZXdwb3J0UmVjdDogJ2dldFZpZXdwb3J0UmVjdCcsXG5cbiAgICBzdGFydFBlcmZSZWNvcmQ6ICdtb2JpbGVTdGFydFBlcmZSZWNvcmQnLFxuICAgIHN0b3BQZXJmUmVjb3JkOiAnbW9iaWxlU3RvcFBlcmZSZWNvcmQnLFxuXG4gICAgaW5zdGFsbENlcnRpZmljYXRlOiAnbW9iaWxlSW5zdGFsbENlcnRpZmljYXRlJyxcblxuICAgIHN0YXJ0TG9nc0Jyb2FkY2FzdDogJ21vYmlsZVN0YXJ0TG9nc0Jyb2FkY2FzdCcsXG4gICAgc3RvcExvZ3NCcm9hZGNhc3Q6ICdtb2JpbGVTdG9wTG9nc0Jyb2FkY2FzdCcsXG5cbiAgICBiYXR0ZXJ5SW5mbzogJ21vYmlsZUdldEJhdHRlcnlJbmZvJyxcbiAgICBkZXZpY2VJbmZvOiAnbW9iaWxlR2V0RGV2aWNlSW5mbycsXG4gICAgZ2V0RGV2aWNlVGltZTogJ21vYmlsZUdldERldmljZVRpbWUnLFxuICAgIGFjdGl2ZUFwcEluZm86ICdtb2JpbGVHZXRBY3RpdmVBcHBJbmZvJyxcbiAgICBkZXZpY2VTY3JlZW5JbmZvOiAnZ2V0U2NyZWVuSW5mbycsXG5cbiAgICBwcmVzc0J1dHRvbjogJ21vYmlsZVByZXNzQnV0dG9uJyxcblxuICAgIGVucm9sbEJpb21ldHJpYzogJ21vYmlsZUVucm9sbEJpb21ldHJpYycsXG4gICAgc2VuZEJpb21ldHJpY01hdGNoOiAnbW9iaWxlU2VuZEJpb21ldHJpY01hdGNoJyxcbiAgICBpc0Jpb21ldHJpY0Vucm9sbGVkOiAnbW9iaWxlSXNCaW9tZXRyaWNFbnJvbGxlZCcsXG5cbiAgICBjbGVhcktleWNoYWluczogJ21vYmlsZUNsZWFyS2V5Y2hhaW5zJyxcblxuICAgIGdldFBlcm1pc3Npb246ICdtb2JpbGVHZXRQZXJtaXNzaW9uJyxcbiAgICBzZXRQZXJtaXNzaW9uOiAnbW9iaWxlU2V0UGVybWlzc2lvbnMnLFxuICAgIHJlc2V0UGVybWlzc2lvbjogJ21vYmlsZVJlc2V0UGVybWlzc2lvbicsXG5cbiAgICBnZXRBcHBlYXJhbmNlOiAnbW9iaWxlR2V0QXBwZWFyYW5jZScsXG4gICAgc2V0QXBwZWFyYW5jZTogJ21vYmlsZVNldEFwcGVhcmFuY2UnLFxuXG4gICAgc2lyaUNvbW1hbmQ6ICdtb2JpbGVTaXJpQ29tbWFuZCcsXG5cbiAgICBkZWxldGVGaWxlOiAnbW9iaWxlRGVsZXRlRmlsZScsXG4gICAgZGVsZXRlRm9sZGVyOiAnbW9iaWxlRGVsZXRlRm9sZGVyJyxcblxuICAgIHN0YXJ0QXVkaW9SZWNvcmRpbmc6ICdzdGFydEF1ZGlvUmVjb3JkaW5nJyxcbiAgICBzdG9wQXVkaW9SZWNvcmRpbmc6ICdzdG9wQXVkaW9SZWNvcmRpbmcnLFxuXG4gICAgLy8gWENUZXN0XG4gICAgcnVuWENUZXN0OiAnbW9iaWxlUnVuWENUZXN0JyxcbiAgICBpbnN0YWxsWENUZXN0QnVuZGxlOiAnbW9iaWxlSW5zdGFsbFhDVGVzdEJ1bmRsZScsXG4gICAgbGlzdFhDVGVzdEJ1bmRsZXM6ICdtb2JpbGVMaXN0WENUZXN0QnVuZGxlcycsXG4gICAgbGlzdFhDVGVzdHNJblRlc3RCdW5kbGU6ICdtb2JpbGVMaXN0WENUZXN0c0luVGVzdEJ1bmRsZScsXG5cbiAgICBwdXNoTm90aWZpY2F0aW9uOiAnbW9iaWxlUHVzaE5vdGlmaWNhdGlvbicsXG4gICAgZXhwZWN0Tm90aWZpY2F0aW9uOiAnbW9iaWxlRXhwZWN0Tm90aWZpY2F0aW9uJyxcblxuICAgIHBlcmZvcm1Jb0hpZEV2ZW50OiAnbW9iaWxlUGVyZm9ybUlvSGlkRXZlbnQnLFxuXG4gICAgY29uZmlndXJlTG9jYWxpemF0aW9uOiAnbW9iaWxlQ29uZmlndXJlTG9jYWxpemF0aW9uJyxcblxuICAgIHJlc2V0TG9jYXRpb25TZXJ2aWNlOiAnbW9iaWxlUmVzZXRMb2NhdGlvblNlcnZpY2UnLFxuXG4gICAgc3RhcnRQY2FwOiAnbW9iaWxlU3RhcnRQY2FwJyxcbiAgICBzdG9wUGNhcDogJ21vYmlsZVN0b3BQY2FwJyxcbiAgfTtcblxuICBpZiAoIV8uaGFzKGNvbW1hbmRNYXAsIG1vYmlsZUNvbW1hbmQpKSB7XG4gICAgdGhyb3cgbmV3IGVycm9ycy5Vbmtub3duQ29tbWFuZEVycm9yKGBVbmtub3duIG1vYmlsZSBjb21tYW5kICcke21vYmlsZUNvbW1hbmR9Jy4gT25seSAke18ua2V5cyhjb21tYW5kTWFwKS5qb2luKCcsICcpfSBjb21tYW5kcyBhcmUgc3VwcG9ydGVkLmApO1xuICB9XG4gIHJldHVybiBhd2FpdCB0aGlzW2NvbW1hbmRNYXBbbW9iaWxlQ29tbWFuZF1dKG9wdHMpO1xufTtcblxuZXhwb3J0IGRlZmF1bHQgZXh0ZW5zaW9ucztcbiJdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7Ozs7QUFBQTs7QUFDQTs7QUFHQTs7QUFFQSxNQUFNQSxVQUFVLEdBQUcsRUFBbkI7O0FBRUFBLFVBQVUsQ0FBQ0Msb0JBQVgsR0FBa0MsZUFBZUEsb0JBQWYsQ0FBcUNDLE1BQXJDLEVBQTZDQyxLQUE3QyxFQUFvRDtFQUNwRixLQUFLQyxHQUFMLENBQVNDLEtBQVQsQ0FBZ0IsNEJBQTJCQyxJQUFJLENBQUNDLFNBQUwsQ0FBZUosS0FBZixDQUFzQixFQUFqRTs7RUFDQSxJQUFJLENBQUNLLGFBQUEsQ0FBS0MsUUFBTCxDQUFjLEtBQUtDLFlBQW5CLENBQUwsRUFBdUM7SUFDckMsS0FBS04sR0FBTCxDQUFTTyxJQUFULENBQWUsMERBQUQsR0FDWCxpQkFBZ0JMLElBQUksQ0FBQ0MsU0FBTCxDQUFlSixLQUFmLENBQXNCLEVBRHpDO0lBRUE7RUFDRDs7RUFFRCxJQUFJSyxhQUFBLENBQUtDLFFBQUwsQ0FBY1AsTUFBZCxLQUF5QkEsTUFBTSxLQUFLLENBQXhDLEVBQTJDO0lBRXpDLE9BQU8sS0FBS1EsWUFBTCxDQUFrQkUsTUFBbEIsQ0FBeUIsSUFBQUMscUJBQUEsRUFBY1gsTUFBZCxFQUFzQkMsS0FBSyxDQUFDVyxPQUE1QixDQUF6QixDQUFQO0VBQ0Q7O0VBQ0QsSUFBSSxDQUFDTixhQUFBLENBQUtDLFFBQUwsQ0FBY1AsTUFBZCxDQUFELElBQTBCQyxLQUExQixJQUFtQ1ksZUFBQSxDQUFFQyxRQUFGLENBQVdiLEtBQUssQ0FBQ2MsS0FBakIsQ0FBdkMsRUFBZ0U7SUFFOUQsT0FBTyxLQUFLUCxZQUFMLENBQWtCRSxNQUFsQixDQUF5QixJQUFBTSw0QkFBQSxFQUFxQmYsS0FBSyxDQUFDYyxLQUEzQixFQUFrQ2QsS0FB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
@@ -208,6 +208,16 @@ commands.nativeClick = async function nativeClick(el) {
208
208
  return await this.proxyCommand(endpoint, 'POST', {});
209
209
  };
210
210
 
211
+ commands.mobileScrollToElement = async function mobileScrollToElement(opts = {}) {
212
+ const elementId = await toElementId(opts);
213
+
214
+ if (!elementId) {
215
+ throw new _driver.errors.InvalidArgumentError('Element id must be provided');
216
+ }
217
+
218
+ return await this.proxyCommand(`/wda/element/${elementId}/scrollTo`, 'POST', {});
219
+ };
220
+
211
221
  helpers.mobileScroll = async function mobileScroll(opts = {}) {
212
222
  const {
213
223
  name,
@@ -463,4 +473,4 @@ var _default = extensions;
463
473
  exports.default = _default;require('source-map-support').install();
464
474
 
465
475
 
466
- //# sourceMappingURL=data:application/json;charset=utf8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibGliL2NvbW1hbmRzL2dlc3R1cmUuanMiLCJuYW1lcyI6WyJTVVBQT1JURURfR0VTVFVSRV9ESVJFQ1RJT05TIiwiaGVscGVycyIsImV4dGVuc2lvbnMiLCJjb21tYW5kcyIsInRvRWxlbWVudElkIiwib3B0cyIsImVsZW1lbnQiLCJsb2ciLCJpbmZvIiwiZWwiLCJlbGVtZW50SWQiLCJ1dGlsIiwidW53cmFwRWxlbWVudCIsInRvRWxlbWVudE9yQXBwbGljYXRpb25JZCIsImRyaXZlciIsImZpbmROYXRpdmVFbGVtZW50T3JFbGVtZW50cyIsIm1vdmVUbyIsInhvZmZzZXQiLCJ5b2Zmc2V0IiwiaXNXZWJDb250ZXh0IiwieCIsInkiLCJnZXRMb2NhdGlvbiIsImNvb3JkcyIsImN1cldlYkNvb3JkcyIsImF0b21zRWxlbWVudCIsImdldEF0b21zRWxlbWVudCIsInJlbENvb3JkcyIsImV4ZWN1dGVBdG9tIiwiXyIsImlzTmlsIiwiY3VyQ29vcmRzIiwiZXJyb3JzIiwiVW5rbm93bkV4Y2VwdGlvbiIsImVsUG9zIiwicmVxdWlyZUZsb2F0UGFyYW1ldGVyIiwicGFyYW1OYW1lIiwicGFyYW1WYWx1ZSIsIm1ldGhvZE5hbWUiLCJpc1VuZGVmaW5lZCIsIkludmFsaWRBcmd1bWVudEVycm9yIiwicmVzdWx0IiwicGFyc2VGbG9hdCIsImlzTmFOIiwicmVxdWlyZUludFBhcmFtZXRlciIsInBhcnNlSW50IiwibW9iaWxlU2hha2UiLCJpc1NpbXVsYXRvciIsIlVua25vd25FcnJvciIsImRldmljZSIsInNoYWtlIiwiY2xpY2siLCJuYXRpdmVDbGljayIsInNldHRpbmdzIiwiZ2V0U2V0dGluZ3MiLCJuYXRpdmVXZWJUYXAiLCJuYXRpdmVXZWJUYXBTdHJpY3QiLCJkZWJ1ZyIsImdlc3R1cmVzQ2hhaW5Ub1N0cmluZyIsImdlc3R1cmVzIiwia2V5c1RvSW5jbHVkZSIsIm1hcCIsIml0ZW0iLCJvdGhlcktleXMiLCJkaWZmZXJlbmNlIiwia2V5cyIsImlzQXJyYXkiLCJpbnRlcnNlY3Rpb24iLCJsZW5ndGgiLCJhY3Rpb24iLCJpc1BsYWluT2JqZWN0IiwiSlNPTiIsInN0cmluZ2lmeSIsImpvaW4iLCJwZXJmb3JtQWN0aW9ucyIsImFjdGlvbnMiLCJwcmVwcm9jZXNzZWRBY3Rpb25zIiwiT2JqZWN0IiwiYXNzaWduIiwidHlwZSIsInBhcmFtZXRlcnMiLCJwb2ludGVyVHlwZSIsIm1vZGlmaWVkQWN0aW9uIiwiY2xvbmUiLCJmaWx0ZXIiLCJpbm5lckFjdGlvbiIsImR1cmF0aW9uIiwicHJveHlDb21tYW5kIiwicmVsZWFzZUFjdGlvbnMiLCJ3YXJuIiwicGVyZm9ybVRvdWNoIiwiZSIsImVycm9yQW5kVGhyb3ciLCJtZXNzYWdlIiwicGVyZm9ybU11bHRpQWN0aW9uIiwiaSIsImVuZHBvaW50IiwibW9iaWxlU2Nyb2xsIiwibmFtZSIsImRpcmVjdGlvbiIsInByZWRpY2F0ZVN0cmluZyIsInRvVmlzaWJsZSIsImRpc3RhbmNlIiwicGFyYW1zIiwiaW5jbHVkZXMiLCJ0b0xvd2VyIiwibW9iaWxlU3dpcGUiLCJ2ZWxvY2l0eSIsIm1vYmlsZVBpbmNoIiwic2NhbGUiLCJtb2JpbGVEb3VibGVUYXAiLCJtb2JpbGVUd29GaW5nZXJUYXAiLCJtb2JpbGVUb3VjaEFuZEhvbGQiLCJtb2JpbGVUYXAiLCJtb2JpbGVEcmFnRnJvbVRvRm9yRHVyYXRpb24iLCJmcm9tWCIsImZyb21ZIiwidG9YIiwidG9ZIiwibW9iaWxlVGFwV2l0aE51bWJlck9mVGFwcyIsIm51bWJlck9mVGFwcyIsIm51bWJlck9mVG91Y2hlcyIsIm1vYmlsZUZvcmNlUHJlc3MiLCJwcmVzc3VyZSIsIm1vYmlsZVNlbGVjdFBpY2tlcldoZWVsVmFsdWUiLCJpc1N0cmluZyIsIm9yZGVyIiwidG9Mb3dlckNhc2UiLCJvZmZzZXQiLCJtb2JpbGVSb3RhdGVFbGVtZW50Iiwicm90YXRpb24iLCJnZXRDb29yZGluYXRlcyIsImdlc3R1cmUiLCJjb29yZGluYXRlcyIsImFyZU9mZnNldHMiLCJvcHRpb25YIiwib3B0aW9ucyIsIm9wdGlvblkiLCJyZWN0IiwiZ2V0RWxlbWVudFJlY3QiLCJwb3MiLCJzaXplIiwidyIsIndpZHRoIiwiaCIsImhlaWdodCIsIm9mZnNldFgiLCJvZmZzZXRZIiwiYXBwbHlNb3ZlVG9PZmZzZXQiLCJmaXJzdENvb3JkaW5hdGVzIiwic2Vjb25kQ29vcmRpbmF0ZXMiXSwic291cmNlUm9vdCI6Ii4uLy4uLy4uIiwic291cmNlcyI6WyJsaWIvY29tbWFuZHMvZ2VzdHVyZS5qcyJdLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBlcnJvcnMgfSBmcm9tICdhcHBpdW0vZHJpdmVyJztcbmltcG9ydCB7IHV0aWwgfSBmcm9tICdhcHBpdW0vc3VwcG9ydCc7XG5pbXBvcnQgXyBmcm9tICdsb2Rhc2gnO1xuaW1wb3J0IGxvZyBmcm9tICcuLi9sb2dnZXInO1xuXG5jb25zdCBTVVBQT1JURURfR0VTVFVSRV9ESVJFQ1RJT05TID0gWyd1cCcsICdkb3duJywgJ2xlZnQnLCAncmlnaHQnXTtcblxuY29uc3QgaGVscGVycyA9IHt9LCBleHRlbnNpb25zID0ge30sIGNvbW1hbmRzID0ge307XG5cbmZ1bmN0aW9uIHRvRWxlbWVudElkIChvcHRzID0ge30pIHtcbiAgaWYgKG9wdHMuZWxlbWVudCkge1xuICAgIGxvZy5pbmZvKGBUaGUgJ2VsZW1lbnQnIGFyZ3VtZW50IG5hbWUgaXMgZGVwcmVjYXRlZC4gQ29uc2lkZXIgdXNpbmcgJ2VsZW1lbnRJZCcgaW5zdGVhZGApO1xuICB9XG4gIGNvbnN0IGVsID0gb3B0cy5lbGVtZW50SWQgfHwgb3B0cy5lbGVtZW50O1xuICByZXR1cm4gZWwgPyB1dGlsLnVud3JhcEVsZW1lbnQoZWwpIDogbnVsbDtcbn1cblxuYXN5bmMgZnVuY3Rpb24gdG9FbGVtZW50T3JBcHBsaWNhdGlvbklkIChkcml2ZXIsIG9wdHMgPSB7fSkge1xuICByZXR1cm4gdG9FbGVtZW50SWQob3B0cylcbiAgICB8fCB1dGlsLnVud3JhcEVsZW1lbnQoYXdhaXQgZHJpdmVyLmZpbmROYXRpdmVFbGVtZW50T3JFbGVtZW50cyhgY2xhc3MgbmFtZWAsIGBYQ1VJRWxlbWVudFR5cGVBcHBsaWNhdGlvbmAsIGZhbHNlKSk7XG59XG5cbmNvbW1hbmRzLm1vdmVUbyA9IGFzeW5jIGZ1bmN0aW9uIG1vdmVUbyAoZWwsIHhvZmZzZXQgPSAwLCB5b2Zmc2V0ID0gMCkge1xuICBlbCA9IHV0aWwudW53cmFwRWxlbWVudChlbCk7XG5cbiAgaWYgKHRoaXMuaXNXZWJDb250ZXh0KCkpIHtcbiAgICBsZXQge3gsIHl9ID0gYXdhaXQgdGhpcy5nZXRMb2NhdGlvbihlbCk7XG4gICAgbGV0IGNvb3JkcyA9IHtcbiAgICAgIHg6IHggKyB4b2Zmc2V0LFxuICAgICAgeTogeSArIHlvZmZzZXRcbiAgICB9O1xuICAgIHRoaXMuY3VyV2ViQ29vcmRzID0gY29vcmRzO1xuICAgIGxldCBhdG9tc0VsZW1lbnQgPSB0aGlzLmdldEF0b21zRWxlbWVudChlbCk7XG4gICAgbGV0IHJlbENvb3JkcyA9IHt4OiB4b2Zmc2V0LCB5OiB5b2Zmc2V0fTtcbiAgICBhd2FpdCB0aGlzLmV4ZWN1dGVBdG9tKCdtb3ZlX21vdXNlJywgW2F0b21zRWxlbWVudCwgcmVsQ29vcmRzXSk7XG4gIH0gZWxzZSB7XG4gICAgaWYgKF8uaXNOaWwoZWwpKSB7XG4gICAgICBpZiAoIXRoaXMuY3VyQ29vcmRzKSB7XG4gICAgICAgIHRocm93IG5ldyBlcnJvcnMuVW5rbm93bkV4Y2VwdGlvbihcbiAgICAgICAgICAnQ3VycmVudCBjdXJzb3IgcG9zaXRpb24gdW5rbm93biwgcGxlYXNlIHVzZSBtb3ZlVG8gd2l0aCBhbiBlbGVtZW50IHRoZSBmaXJzdCB0aW1lLicpO1xuICAgICAgfVxuICAgICAgdGhpcy5jdXJDb29yZHMgPSB7XG4gICAgICAgIHg6IHRoaXMuY3VyQ29vcmRzLnggKyB4b2Zmc2V0LFxuICAgICAgICB5OiB0aGlzLmN1ckNvb3Jkcy55ICsgeW9mZnNldFxuICAgICAgfTtcbiAgICB9IGVsc2Uge1xuICAgICAgbGV0IGVsUG9zID0gYXdhaXQgdGhpcy5nZXRMb2NhdGlvbihlbCk7XG4gICAgICB0aGlzLmN1ckNvb3JkcyA9IHtcbiAgICAgICAgeDogZWxQb3MueCArIHhvZmZzZXQsXG4gICAgICAgIHk6IGVsUG9zLnkgKyB5b2Zmc2V0XG4gICAgICB9O1xuICAgIH1cbiAgfVxufTtcblxuZnVuY3Rpb24gcmVxdWlyZUZsb2F0UGFyYW1ldGVyIChwYXJhbU5hbWUsIHBhcmFtVmFsdWUsIG1ldGhvZE5hbWUpIHtcbiAgaWYgKF8uaXNVbmRlZmluZWQocGFyYW1WYWx1ZSkpIHtcbiAgICB0aHJvdyBuZXcgZXJyb3JzLkludmFsaWRBcmd1bWVudEVycm9yKGBcIiR7cGFyYW1OYW1lfVwiIHBhcmFtZXRlciBpcyBtYW5kYXRvcnkgZm9yIFwiJHttZXRob2ROYW1lfVwiIGNhbGxgKTtcbiAgfVxuICBjb25zdCByZXN1bHQgPSBwYXJzZUZsb2F0KHBhcmFtVmFsdWUpO1xuICBpZiAoaXNOYU4ocmVzdWx0KSkge1xuICAgIHRocm93IG5ldyBlcnJvcnMuSW52YWxpZEFyZ3VtZW50RXJyb3IoYFwiJHtwYXJhbU5hbWV9XCIgcGFyYW1ldGVyIHNob3VsZCBiZSBhIHZhbGlkIG51bWJlci4gXCIke3BhcmFtVmFsdWV9XCIgaXMgZ2l2ZW4gaW5zdGVhZGApO1xuICB9XG4gIHJldHVybiByZXN1bHQ7XG59XG5cbmZ1bmN0aW9uIHJlcXVpcmVJbnRQYXJhbWV0ZXIgKHBhcmFtTmFtZSwgcGFyYW1WYWx1ZSwgbWV0aG9kTmFtZSkge1xuICBpZiAoXy5pc1VuZGVmaW5lZChwYXJhbVZhbHVlKSkge1xuICAgIHRocm93IG5ldyBlcnJvcnMuSW52YWxpZEFyZ3VtZW50RXJyb3IoYFwiJHtwYXJhbU5hbWV9XCIgcGFyYW1ldGVyIGlzIG1hbmRhdG9yeSBmb3IgXCIke21ldGhvZE5hbWV9XCIgY2FsbGApO1xuICB9XG4gIGNvbnN0IHJlc3VsdCA9IHBhcnNlSW50KHBhcmFtVmFsdWUsIDEwKTtcbiAgaWYgKGlzTmFOKHJlc3VsdCkpIHtcbiAgICB0aHJvdyBuZXcgZXJyb3JzLkludmFsaWRBcmd1bWVudEVycm9yKGBcIiR7cGFyYW1OYW1lfVwiIHBhcmFtZXRlciBzaG91bGQgYmUgYSB2YWxpZCBpbnRlZ2VyLiBcIiR7cGFyYW1WYWx1ZX1cIiBpcyBnaXZlbiBpbnN0ZWFkYCk7XG4gIH1cbiAgcmV0dXJuIHJlc3VsdDtcbn1cblxuY29tbWFuZHMubW9iaWxlU2hha2UgPSBhc3luYyBmdW5jdGlvbiBtb2JpbGVTaGFrZSAoKSB7XG4gIGlmICghdGhpcy5pc1NpbXVsYXRvcigpKSB7XG4gICAgdGhyb3cgbmV3IGVycm9ycy5Vbmtub3duRXJyb3IoJ1NoYWtlIGlzIG5vdCBzdXBwb3J0ZWQgb24gcmVhbCBkZXZpY2VzJyk7XG4gIH1cbiAgYXdhaXQgdGhpcy5vcHRzLmRldmljZS5zaGFrZSgpO1xufTtcblxuY29tbWFuZHMuY2xpY2sgPSBhc3luYyBmdW5jdGlvbiBjbGljayAoZWwpIHtcbiAgaWYgKCF0aGlzLmlzV2ViQ29udGV4dCgpKSB7XG4gICAgLy8gdGhlcmUgYXJlIG11bHRpcGxlIGNvbW1hbmRzIHRoYXQgbWFwIGhlcmUsIHNvIG1hbnVhbGx5IHByb3h5XG4gICAgcmV0dXJuIGF3YWl0IHRoaXMubmF0aXZlQ2xpY2soZWwpO1xuICB9XG4gIGVsID0gdXRpbC51bndyYXBFbGVtZW50KGVsKTtcbiAgaWYgKChhd2FpdCB0aGlzLnNldHRpbmdzLmdldFNldHRpbmdzKCkpLm5hdGl2ZVdlYlRhcCB8fCAoYXdhaXQgdGhpcy5zZXR0aW5ncy5nZXRTZXR0aW5ncygpKS5uYXRpdmVXZWJUYXBTdHJpY3QpIHtcbiAgICAvLyBhdG9tcy1iYXNlZCBjbGlja3MgZG9uJ3QgYWx3YXlzIHdvcmsgaW4gc2FmYXJpIDdcbiAgICB0aGlzLmxvZy5kZWJ1ZygnVXNpbmcgbmF0aXZlIHdlYiB0YXAnKTtcbiAgICBhd2FpdCB0aGlzLm5hdGl2ZVdlYlRhcChlbCk7XG4gIH0gZWxzZSB7XG4gICAgY29uc3QgYXRvbXNFbGVtZW50ID0gdGhpcy5nZXRBdG9tc0VsZW1lbnQoZWwpO1xuICAgIHJldHVybiBhd2FpdCB0aGlzLmV4ZWN1dGVBdG9tKCdjbGljaycsIFthdG9tc0VsZW1lbnRdKTtcbiAgfVxufTtcblxuZnVuY3Rpb24gZ2VzdHVyZXNDaGFpblRvU3RyaW5nIChnZXN0dXJlcywga2V5c1RvSW5jbHVkZSA9IFsnb3B0aW9ucyddKSB7XG4gIHJldHVybiBnZXN0dXJlcy5tYXAoKGl0ZW0pID0+IHtcbiAgICBsZXQgb3RoZXJLZXlzID0gXy5kaWZmZXJlbmNlKF8ua2V5cyhpdGVtKSwgWydhY3Rpb24nXSk7XG4gICAgb3RoZXJLZXlzID0gXy5pc0FycmF5KGtleXNUb0luY2x1ZGUpID8gXy5pbnRlcnNlY3Rpb24ob3RoZXJLZXlzLCBrZXlzVG9JbmNsdWRlKSA6IG90aGVyS2V5cztcbiAgICBpZiAob3RoZXJLZXlzLmxlbmd0aCkge1xuICAgICAgcmV0dXJuIGAke2l0ZW0uYWN0aW9ufWAgK1xuICAgICAgICBgKCR7Xy5tYXAob3RoZXJLZXlzLCAoeCkgPT4geCArICc9JyArIChfLmlzUGxhaW5PYmplY3QoaXRlbVt4XSkgPyBKU09OLnN0cmluZ2lmeShpdGVtW3hdKSA6IGl0ZW1beF0pKS5qb2luKCcsICcpfSlgO1xuICAgIH1cbiAgICByZXR1cm4gaXRlbS5hY3Rpb247XG4gIH0pLmpvaW4oJy0nKTtcbn1cblxuY29tbWFuZHMucGVyZm9ybUFjdGlvbnMgPSBhc3luYyBmdW5jdGlvbiBwZXJmb3JtQWN0aW9ucyAoYWN0aW9ucykge1xuICB0aGlzLmxvZy5kZWJ1ZyhgUmVjZWl2ZWQgdGhlIGZvbGxvd2luZyBXM0MgYWN0aW9uczogJHtKU09OLnN0cmluZ2lmeShhY3Rpb25zLCBudWxsLCAnICAnKX1gKTtcbiAgLy8gVGhpcyBpcyBtYW5kYXRvcnksIHNpbmNlIFdEQSBvbmx5IHN1cHBvcnRzIFRPVUNIIHBvaW50ZXIgdHlwZVxuICAvLyBhbmQgU2VsZW5pdW0gQVBJIHVzZXMgTU9VU0UgYXMgdGhlIGRlZmF1bHQgb25lXG4gIGNvbnN0IHByZXByb2Nlc3NlZEFjdGlvbnMgPSBhY3Rpb25zXG4gICAgLm1hcCgoYWN0aW9uKSA9PiBPYmplY3QuYXNzaWduKHt9LCBhY3Rpb24sIGFjdGlvbi50eXBlID09PSAncG9pbnRlcicgPyB7XG4gICAgICBwYXJhbWV0ZXJzOiB7XG4gICAgICAgIHBvaW50ZXJUeXBlOiAndG91Y2gnXG4gICAgICB9XG4gICAgfSA6IHt9KSlcbiAgICAubWFwKChhY3Rpb24pID0+IHtcbiAgICAgIGNvbnN0IG1vZGlmaWVkQWN0aW9uID0gXy5jbG9uZShhY3Rpb24pIHx8IHt9O1xuICAgICAgLy8gU2VsZW5pdW0gQVBJIHVuZXhwZWN0ZWRseSBpbnNlcnRzIHplcm8gcGF1c2VzLCB3aGljaCBhcmUgbm90IHN1cHBvcnRlZCBieSBXREFcbiAgICAgIG1vZGlmaWVkQWN0aW9uLmFjdGlvbnMgPSAoYWN0aW9uLmFjdGlvbnMgfHwgW10pXG4gICAgICAgIC5maWx0ZXIoKGlubmVyQWN0aW9uKSA9PiAhKGlubmVyQWN0aW9uLnR5cGUgPT09ICdwYXVzZScgJiYgaW5uZXJBY3Rpb24uZHVyYXRpb24gPT09IDApKTtcbiAgICAgIHJldHVybiBtb2RpZmllZEFjdGlvbjtcbiAgICB9KTtcbiAgdGhpcy5sb2cuZGVidWcoYFByZXByb2Nlc3NlZCBhY3Rpb25zOiAke0pTT04uc3RyaW5naWZ5KHByZXByb2Nlc3NlZEFjdGlvbnMsIG51bGwsICcgICcpfWApO1xuICByZXR1cm4gYXdhaXQgdGhpcy5wcm94eUNvbW1hbmQoJy9hY3Rpb25zJywgJ1BPU1QnLCB7YWN0aW9uczogcHJlcHJvY2Vzc2VkQWN0aW9uc30pO1xufTtcblxuY29tbWFuZHMucmVsZWFzZUFjdGlvbnMgPSBmdW5jdGlvbiByZWxlYXNlQWN0aW9ucyAoKSB7XG4gIHRoaXMubG9nLndhcm4oJ09uIHRoaXMgcGxhdGZvcm0sIHJlbGVhc2VBY3Rpb25zIGlzIGEgbm8tb3AnKTtcbn07XG5cbmNvbW1hbmRzLnBlcmZvcm1Ub3VjaCA9IGFzeW5jIGZ1bmN0aW9uIHBlcmZvcm1Ub3VjaCAoZ2VzdHVyZXMpIHtcbiAgdGhpcy5sb2cuZGVidWcoYFJlY2VpdmVkIHRoZSBmb2xsb3dpbmcgdG91Y2ggYWN0aW9uOiAke2dlc3R1cmVzQ2hhaW5Ub1N0cmluZyhnZXN0dXJlcyl9YCk7XG4gIHRyeSB7XG4gICAgcmV0dXJuIGF3YWl0IHRoaXMucHJveHlDb21tYW5kKCcvd2RhL3RvdWNoL3BlcmZvcm0nLCAnUE9TVCcsIHthY3Rpb25zOiBnZXN0dXJlc30pO1xuICB9IGNhdGNoIChlKSB7XG4gICAgaWYgKCF0aGlzLmlzV2ViQ29udGV4dCgpKSB7XG4gICAgICB0aHJvdyBlO1xuICAgIH1cbiAgICB0aGlzLmxvZy5lcnJvckFuZFRocm93KCdUaGUgVG91Y2ggQVBJIGlzIGFpbWVkIGZvciB1c2FnZSBpbiBOQVRJVkUgY29udGV4dC4gJyArXG4gICAgICAnQ29uc2lkZXIgdXNpbmcgXCJleGVjdXRlXCIgQVBJIHdpdGggY3VzdG9tIGV2ZW50cyB0cmlnZ2VyIHNjcmlwdCAnICtcbiAgICAgIGB0byBlbXVsYXRlIHRvdWNoIGV2ZW50cyBiZWluZyBpbiBXRUJWSUVXIGNvbnRleHQuIE9yaWdpbmFsIGVycm9yOiAke2UubWVzc2FnZX1gKTtcbiAgfVxufTtcblxuY29tbWFuZHMucGVyZm9ybU11bHRpQWN0aW9uID0gYXN5bmMgZnVuY3Rpb24gcGVyZm9ybU11bHRpQWN0aW9uIChhY3Rpb25zKSB7XG4gIHRoaXMubG9nLmRlYnVnKGBSZWNlaXZlZCB0aGUgZm9sbG93aW5nIG11bHRpIHRvdWNoIGFjdGlvbjpgKTtcbiAgZm9yIChsZXQgaSBpbiBhY3Rpb25zKSB7XG4gICAgdGhpcy5sb2cuZGVidWcoYCAgICAke3BhcnNlSW50KGksIDEwKSArIDF9OiAke18ubWFwKGFjdGlvbnNbaV0sICdhY3Rpb24nKS5qb2luKCctJyl9YCk7XG4gIH1cbiAgdHJ5IHtcbiAgICByZXR1cm4gYXdhaXQgdGhpcy5wcm94eUNvbW1hbmQoJy93ZGEvdG91Y2gvbXVsdGkvcGVyZm9ybScsICdQT1NUJywge2FjdGlvbnN9KTtcbiAgfSBjYXRjaCAoZSkge1xuICAgIGlmICghdGhpcy5pc1dlYkNvbnRleHQoKSkge1xuICAgICAgdGhyb3cgZTtcbiAgICB9XG4gICAgdGhpcy5sb2cuZXJyb3JBbmRUaHJvdygnVGhlIE11bHRpVG91Y2ggQVBJIGlzIGFpbWVkIGZvciB1c2FnZSBpbiBOQVRJVkUgY29udGV4dC4gJyArXG4gICAgICAnQ29uc2lkZXIgdXNpbmcgXCJleGVjdXRlXCIgQVBJIHdpdGggY3VzdG9tIGV2ZW50cyB0cmlnZ2VyIHNjcmlwdCAnICtcbiAgICAgIGB0byBlbXVsYXRlIG11bHRpdG91Y2ggZXZlbnRzIGJlaW5nIGluIFdFQlZJRVcgY29udGV4dC4gT3JpZ2luYWwgZXJyb3I6ICR7ZS5tZXNzYWdlfWApO1xuICB9XG59O1xuXG5jb21tYW5kcy5uYXRpdmVDbGljayA9IGFzeW5jIGZ1bmN0aW9uIG5hdGl2ZUNsaWNrIChlbCkge1xuICBlbCA9IHV0aWwudW53cmFwRWxlbWVudChlbCk7XG4gIGxldCBlbmRwb2ludCA9IGAvZWxlbWVudC8ke2VsfS9jbGlja2A7XG4gIHJldHVybiBhd2FpdCB0aGlzLnByb3h5Q29tbWFuZChlbmRwb2ludCwgJ1BPU1QnLCB7fSk7XG59O1xuXG4vKlxuICogU2VlIGh0dHBzOi8vZ2l0aHViLmNvbS9mYWNlYm9vay9XZWJEcml2ZXJBZ2VudC9ibG9iL21hc3Rlci9XZWJEcml2ZXJBZ2VudExpYi9Db21tYW5kcy9GQkVsZW1lbnRDb21tYW5kcy5tXG4gKiB0byBnZXQgdGhlIGluZm8gYWJvdXQgYXZhaWxhYmxlIFdEQSBnZXN0dXJlcyBBUElcbiAqXG4gKiBTZWUgaHR0cHM6Ly9kZXZlbG9wZXIuYXBwbGUuY29tL3JlZmVyZW5jZS94Y3Rlc3QveGN1aWVsZW1lbnQgYW5kXG4gKiBodHRwczovL2RldmVsb3Blci5hcHBsZS5jb20vcmVmZXJlbmNlL3hjdGVzdC94Y3VpY29vcmRpbmF0ZSB0byBnZXQgdGhlIGRldGFpbGVkIGRlc2NyaXB0aW9uIG9mXG4gKiBhbGwgWENUZXN0IGdlc3R1cmVzXG4qL1xuXG5oZWxwZXJzLm1vYmlsZVNjcm9sbCA9IGFzeW5jIGZ1bmN0aW9uIG1vYmlsZVNjcm9sbCAob3B0cyA9IHt9KSB7XG4gIC8vIFdEQSBzdXBwb3J0cyBmb3VyIHNjcm9sbGluZyBzdHJhdGVnaWVzOiBwcmVkaWNhdGlvbiBiYXNlZCBvbiBuYW1lLCBkaXJlY3Rpb24sXG4gIC8vIHByZWRpY2F0ZVN0cmluZywgYW5kIHRvVmlzaWJsZSwgaW4gdGhhdCBvcmRlclxuICBjb25zdCB7XG4gICAgbmFtZSxcbiAgICBkaXJlY3Rpb24sXG4gICAgcHJlZGljYXRlU3RyaW5nLFxuICAgIHRvVmlzaWJsZSxcbiAgICBkaXN0YW5jZSxcbiAgfSA9IG9wdHM7XG4gIGNvbnN0IHBhcmFtcyA9IHt9O1xuICBpZiAobmFtZSkge1xuICAgIHBhcmFtcy5uYW1lID0gbmFtZTtcbiAgfSBlbHNlIGlmIChkaXJlY3Rpb24pIHtcbiAgICBpZiAoIVNVUFBPUlRFRF9HRVNUVVJFX0RJUkVDVElPTlMuaW5jbHVkZXMoXy50b0xvd2VyKGRpcmVjdGlvbikpKSB7XG4gICAgICB0aHJvdyBuZXcgZXJyb3JzLkludmFsaWRBcmd1bWVudEVycm9yKGAnZGlyZWN0aW9uJyBtdXN0IGJlIG9uZSBvZjogJHtTVVBQT1JURURfR0VTVFVSRV9ESVJFQ1RJT05TfWApO1xuICAgIH1cbiAgICBwYXJhbXMuZGlyZWN0aW9uID0gZGlyZWN0aW9uO1xuICB9IGVsc2UgaWYgKHByZWRpY2F0ZVN0cmluZykge1xuICAgIHBhcmFtcy5wcmVkaWNhdGVTdHJpbmcgPSBwcmVkaWNhdGVTdHJpbmc7XG4gIH0gZWxzZSBpZiAodG9WaXNpYmxlKSB7XG4gICAgcGFyYW1zLnRvVmlzaWJsZSA9IHRvVmlzaWJsZTtcbiAgfSBlbHNlIHtcbiAgICB0aHJvdyBuZXcgZXJyb3JzLkludmFsaWRBcmd1bWVudEVycm9yKFxuICAgICAgJ01vYmlsZSBzY3JvbGwgc3VwcG9ydHMgdGhlIGZvbGxvd2luZyBzdHJhdGVnaWVzOiBuYW1lLCBkaXJlY3Rpb24sIHByZWRpY2F0ZVN0cmluZywgYW5kIHRvVmlzaWJsZS4gJyArXG4gICAgICAnU3BlY2lmeSBvbmUgb2YgdGhlc2UnKTtcbiAgfVxuICAvLyB3ZSBjYW4gYWxzbyBvcHRpb25hbGx5IHBhc3MgYSBkaXN0YW5jZSB3aGljaCBhcHBlYXJzIHRvIGJlIGEgcmF0aW8gb2ZcbiAgLy8gc2NyZWVuIGhlaWdodCwgc28gMS4wIG1lYW5zIGEgZnVsbCBzY3JlZW4ncyB3b3J0aCBvZiBzY3JvbGxpbmdcbiAgaWYgKCFfLmlzTmlsKGRpc3RhbmNlKSkge1xuICAgIHBhcmFtcy5kaXN0YW5jZSA9IGRpc3RhbmNlO1xuICB9XG4gIGNvbnN0IGVsZW1lbnRJZCA9IGF3YWl0IHRvRWxlbWVudE9yQXBwbGljYXRpb25JZCh0aGlzLCBvcHRzKTtcbiAgcmV0dXJuIGF3YWl0IHRoaXMucHJveHlDb21tYW5kKGAvd2RhL2VsZW1lbnQvJHtlbGVtZW50SWR9L3Njcm9sbGAsICdQT1NUJywgcGFyYW1zKTtcbn07XG5cbmhlbHBlcnMubW9iaWxlU3dpcGUgPSBhc3luYyBmdW5jdGlvbiBtb2JpbGVTd2lwZSAob3B0cyA9IHt9KSB7XG4gIGNvbnN0IHtcbiAgICBkaXJlY3Rpb24sXG4gICAgdmVsb2NpdHksXG4gIH0gPSBvcHRzO1xuICBpZiAoIVNVUFBPUlRFRF9HRVNUVVJFX0RJUkVDVElPTlMuaW5jbHVkZXMoXy50b0xvd2VyKGRpcmVjdGlvbikpKSB7XG4gICAgdGhyb3cgbmV3IGVycm9ycy5JbnZhbGlkQXJndW1lbnRFcnJvcihgJ2RpcmVjdGlvbicgbXVzdCBiZSBvbmUgb2Y6ICR7U1VQUE9SVEVEX0dFU1RVUkVfRElSRUNUSU9OU31gKTtcbiAgfVxuICBjb25zdCBwYXJhbXMgPSB7ZGlyZWN0aW9ufTtcbiAgaWYgKCFfLmlzTmlsKHZlbG9jaXR5KSkge1xuICAgIHBhcmFtcy52ZWxvY2l0eSA9IHZlbG9jaXR5O1xuICB9XG4gIGNvbnN0IGVsZW1lbnRJZCA9IGF3YWl0IHRvRWxlbWVudE9yQXBwbGljYXRpb25JZCh0aGlzLCBvcHRzKTtcbiAgcmV0dXJuIGF3YWl0IHRoaXMucHJveHlDb21tYW5kKGAvd2RhL2VsZW1lbnQvJHtlbGVtZW50SWR9L3N3aXBlYCwgJ1BPU1QnLCBwYXJhbXMpO1xufTtcblxuaGVscGVycy5tb2JpbGVQaW5jaCA9IGFzeW5jIGZ1bmN0aW9uIG1vYmlsZVBpbmNoIChvcHRzID0ge30pIHtcbiAgY29uc3QgcGFyYW1zID0ge1xuICAgIHNjYWxlOiByZXF1aXJlRmxvYXRQYXJhbWV0ZXIoJ3NjYWxlJywgb3B0cy5zY2FsZSwgJ3BpbmNoJyksXG4gICAgdmVsb2NpdHk6IHJlcXVpcmVGbG9hdFBhcmFtZXRlcigndmVsb2NpdHknLCBvcHRzLnZlbG9jaXR5LCAncGluY2gnKVxuICB9O1xuICBjb25zdCBlbGVtZW50SWQgPSBhd2FpdCB0b0VsZW1lbnRPckFwcGxpY2F0aW9uSWQodGhpcywgb3B0cyk7XG4gIHJldHVybiBhd2FpdCB0aGlzLnByb3h5Q29tbWFuZChgL3dkYS9lbGVtZW50LyR7ZWxlbWVudElkfS9waW5jaGAsICdQT1NUJywgcGFyYW1zKTtcbn07XG5cbmhlbHBlcnMubW9iaWxlRG91YmxlVGFwID0gYXN5bmMgZnVuY3Rpb24gbW9iaWxlRG91YmxlVGFwIChvcHRzID0ge30pIHtcbiAgY29uc3QgZWxlbWVudElkID0gdG9FbGVtZW50SWQob3B0cyk7XG4gIGlmIChlbGVtZW50SWQpIHtcbiAgICAvLyBEb3VibGUgdGFwIGVsZW1lbnRcbiAgICByZXR1cm4gYXdhaXQgdGhpcy5wcm94eUNvbW1hbmQoYC93ZGEvZWxlbWVudC8ke2VsZW1lbnRJZH0vZG91YmxlVGFwYCwgJ1BPU1QnKTtcbiAgfVxuICAvLyBEb3VibGUgdGFwIGNvb3JkaW5hdGVzXG4gIGNvbnN0IHBhcmFtcyA9IHtcbiAgICB4OiByZXF1aXJlRmxvYXRQYXJhbWV0ZXIoJ3gnLCBvcHRzLngsICdkb3VibGVUYXAnKSxcbiAgICB5OiByZXF1aXJlRmxvYXRQYXJhbWV0ZXIoJ3knLCBvcHRzLnksICdkb3VibGVUYXAnKVxuICB9O1xuICByZXR1cm4gYXdhaXQgdGhpcy5wcm94eUNvbW1hbmQoJy93ZGEvZG91YmxlVGFwJywgJ1BPU1QnLCBwYXJhbXMpO1xufTtcblxuaGVscGVycy5tb2JpbGVUd29GaW5nZXJUYXAgPSBhc3luYyBmdW5jdGlvbiBtb2JpbGVUd29GaW5nZXJUYXAgKG9wdHMgPSB7fSkge1xuICBjb25zdCBlbGVtZW50SWQgPSBhd2FpdCB0b0VsZW1lbnRPckFwcGxpY2F0aW9uSWQodGhpcywgb3B0cyk7XG4gIHJldHVybiBhd2FpdCB0aGlzLnByb3h5Q29tbWFuZChgL3dkYS9lbGVtZW50LyR7ZWxlbWVudElkfS90d29GaW5nZXJUYXBgLCAnUE9TVCcpO1xufTtcblxuaGVscGVycy5tb2JpbGVUb3VjaEFuZEhvbGQgPSBhc3luYyBmdW5jdGlvbiBtb2JpbGVUb3VjaEFuZEhvbGQgKG9wdHMgPSB7fSkge1xuICBjb25zdCBwYXJhbXMgPSB7XG4gICAgZHVyYXRpb246IHJlcXVpcmVGbG9hdFBhcmFtZXRlcignZHVyYXRpb24nLCBvcHRzLmR1cmF0aW9uLCAndG91Y2hBbmRIb2xkJylcbiAgfTtcbiAgY29uc3QgZWxlbWVudElkID0gdG9FbGVtZW50SWQob3B0cyk7XG4gIGlmIChlbGVtZW50SWQpIHtcbiAgICAvLyBMb25nIHRhcCBlbGVtZW50XG4gICAgcmV0dXJuIGF3YWl0IHRoaXMucHJveHlDb21tYW5kKGAvd2RhL2VsZW1lbnQvJHtlbGVtZW50SWR9L3RvdWNoQW5kSG9sZGAsICdQT1NUJywgcGFyYW1zKTtcbiAgfVxuICAvLyBMb25nIHRhcCBjb29yZGluYXRlc1xuICBwYXJhbXMueCA9IHJlcXVpcmVGbG9hdFBhcmFtZXRlcigneCcsIG9wdHMueCwgJ3RvdWNoQW5kSG9sZCcpO1xuICBwYXJhbXMueSA9IHJlcXVpcmVGbG9hdFBhcmFtZXRlcigneScsIG9wdHMueSwgJ3RvdWNoQW5kSG9sZCcpO1xuICByZXR1cm4gYXdhaXQgdGhpcy5wcm94eUNvbW1hbmQoJy93ZGEvdG91Y2hBbmRIb2xkJywgJ1BPU1QnLCBwYXJhbXMpO1xufTtcblxuaGVscGVycy5tb2JpbGVUYXAgPSBhc3luYyBmdW5jdGlvbiBtb2JpbGVUYXAgKG9wdHMgPSB7fSkge1xuICBjb25zdCBwYXJhbXMgPSB7XG4gICAgeDogcmVxdWlyZUZsb2F0UGFyYW1ldGVyKCd4Jywgb3B0cy54LCAndGFwJyksXG4gICAgeTogcmVxdWlyZUZsb2F0UGFyYW1ldGVyKCd5Jywgb3B0cy55LCAndGFwJylcbiAgfTtcbiAgY29uc3QgZWxlbWVudElkID0gdG9FbGVtZW50SWQob3B0cykgfHwgJzAnO1xuICByZXR1cm4gYXdhaXQgdGhpcy5wcm94eUNvbW1hbmQoYC93ZGEvdGFwLyR7ZWxlbWVudElkfWAsICdQT1NUJywgcGFyYW1zKTtcbn07XG5cbmhlbHBlcnMubW9iaWxlRHJhZ0Zyb21Ub0ZvckR1cmF0aW9uID0gYXN5bmMgZnVuY3Rpb24gbW9iaWxlRHJhZ0Zyb21Ub0ZvckR1cmF0aW9uIChvcHRzID0ge30pIHtcbiAgY29uc3QgcGFyYW1zID0ge1xuICAgIGR1cmF0aW9uOiByZXF1aXJlRmxvYXRQYXJhbWV0ZXIoJ2R1cmF0aW9uJywgb3B0cy5kdXJhdGlvbiwgJ2RyYWdGcm9tVG9Gb3JEdXJhdGlvbicpLFxuICAgIGZyb21YOiByZXF1aXJlRmxvYXRQYXJhbWV0ZXIoJ2Zyb21YJywgb3B0cy5mcm9tWCwgJ2RyYWdGcm9tVG9Gb3JEdXJhdGlvbicpLFxuICAgIGZyb21ZOiByZXF1aXJlRmxvYXRQYXJhbWV0ZXIoJ2Zyb21ZJywgb3B0cy5mcm9tWSwgJ2RyYWdGcm9tVG9Gb3JEdXJhdGlvbicpLFxuICAgIHRvWDogcmVxdWlyZUZsb2F0UGFyYW1ldGVyKCd0b1gnLCBvcHRzLnRvWCwgJ2RyYWdGcm9tVG9Gb3JEdXJhdGlvbicpLFxuICAgIHRvWTogcmVxdWlyZUZsb2F0UGFyYW1ldGVyKCd0b1knLCBvcHRzLnRvWSwgJ2RyYWdGcm9tVG9Gb3JEdXJhdGlvbicpXG4gIH07XG4gIGNvbnN0IGVsZW1lbnRJZCA9IHRvRWxlbWVudElkKG9wdHMpO1xuICByZXR1cm4gZWxlbWVudElkXG4gICAgLy8gRHJhZyBlbGVtZW50XG4gICAgPyBhd2FpdCB0aGlzLnByb3h5Q29tbWFuZChgL3dkYS9lbGVtZW50LyR7ZWxlbWVudElkfS9kcmFnZnJvbXRvZm9yZHVyYXRpb25gLCAnUE9TVCcsIHBhcmFtcylcbiAgICAvLyBEcmFnIGNvb3JkaW5hdGVzXG4gICAgOiBhd2FpdCB0aGlzLnByb3h5Q29tbWFuZCgnL3dkYS9kcmFnZnJvbXRvZm9yZHVyYXRpb24nLCAnUE9TVCcsIHBhcmFtcyk7XG59O1xuXG5oZWxwZXJzLm1vYmlsZVRhcFdpdGhOdW1iZXJPZlRhcHMgPSBhc3luYyBmdW5jdGlvbiBtb2JpbGVUYXBXaXRoTnVtYmVyT2ZUYXBzIChvcHRzID0ge30pIHtcbiAgY29uc3QgZWxlbWVudElkID0gdG9FbGVtZW50SWQob3B0cyk7XG4gIGlmICghZWxlbWVudElkKSB7XG4gICAgdGhyb3cgbmV3IGVycm9ycy5JbnZhbGlkQXJndW1lbnRFcnJvcignRWxlbWVudCBpZCBpcyBleHBlY3RlZCB0byBiZSBzZXQgZm9yIHRhcFdpdGhOdW1iZXJPZlRhcHMgbWV0aG9kJyk7XG4gIH1cbiAgY29uc3QgcGFyYW1zID0ge1xuICAgIG51bWJlck9mVGFwczogcmVxdWlyZUludFBhcmFtZXRlcignbnVtYmVyT2ZUYXBzJywgb3B0cy5udW1iZXJPZlRhcHMsICd0YXBXaXRoTnVtYmVyT2ZUYXBzJyksXG4gICAgbnVtYmVyT2ZUb3VjaGVzOiByZXF1aXJlSW50UGFyYW1ldGVyKCdudW1iZXJPZlRvdWNoZXMnLCBvcHRzLm51bWJlck9mVG91Y2hlcywgJ3RhcFdpdGhOdW1iZXJPZlRhcHMnKSxcbiAgfTtcbiAgcmV0dXJuIGF3YWl0IHRoaXMucHJveHlDb21tYW5kKGAvd2RhL2VsZW1lbnQvJHtlbGVtZW50SWR9L3RhcFdpdGhOdW1iZXJPZlRhcHNgLCAnUE9TVCcsIHBhcmFtcyk7XG59O1xuXG5oZWxwZXJzLm1vYmlsZUZvcmNlUHJlc3MgPSBhc3luYyBmdW5jdGlvbiBtb2JpbGVGb3JjZVByZXNzIChvcHRzID0ge30pIHtcbiAgY29uc3Qge3gsIHksIGR1cmF0aW9uLCBwcmVzc3VyZX0gPSBvcHRzO1xuICBjb25zdCBlbGVtZW50SWQgPSB0b0VsZW1lbnRJZChvcHRzKTtcbiAgY29uc3QgZW5kcG9pbnQgPSBlbGVtZW50SWQgPyBgL3dkYS9lbGVtZW50LyR7ZWxlbWVudElkfS9mb3JjZVRvdWNoYCA6IGAvd2RhL2ZvcmNlVG91Y2hgO1xuICByZXR1cm4gYXdhaXQgdGhpcy5wcm94eUNvbW1hbmQoZW5kcG9pbnQsICdQT1NUJywge3gsIHksIGR1cmF0aW9uLCBwcmVzc3VyZX0pO1xufTtcblxuaGVscGVycy5tb2JpbGVTZWxlY3RQaWNrZXJXaGVlbFZhbHVlID0gYXN5bmMgZnVuY3Rpb24gbW9iaWxlU2VsZWN0UGlja2VyV2hlZWxWYWx1ZSAob3B0cyA9IHt9KSB7XG4gIGNvbnN0IGVsZW1lbnRJZCA9IHRvRWxlbWVudElkKG9wdHMpO1xuICBpZiAoIWVsZW1lbnRJZCkge1xuICAgIHRocm93IG5ldyBlcnJvcnMuSW52YWxpZEFyZ3VtZW50RXJyb3IoJ0VsZW1lbnQgaWQgaXMgZXhwZWN0ZWQgdG8gYmUgc2V0IGZvciBzZWxlY3RQaWNrZXJXaGVlbFZhbHVlIG1ldGhvZCcpO1xuICB9XG4gIGlmICghXy5pc1N0cmluZyhvcHRzLm9yZGVyKSB8fCAhWyduZXh0JywgJ3ByZXZpb3VzJ10uaW5jbHVkZXMob3B0cy5vcmRlci50b0xvd2VyQ2FzZSgpKSkge1xuICAgIHRocm93IG5ldyBlcnJvcnMuSW52YWxpZEFyZ3VtZW50RXJyb3IoYFRoZSBtYW5kYXRvcnkgJ29yZGVyJyBwYXJhbWV0ZXIgaXMgZXhwZWN0ZWQgdG8gYmUgZXF1YWwgZWl0aGVyIHRvICduZXh0JyBvciAncHJldmlvdXMnLiBgICtcbiAgICAgIGAnJHtvcHRzLm9yZGVyfScgaXMgZ2l2ZW4gaW5zdGVhZGApO1xuICB9XG4gIGNvbnN0IHBhcmFtcyA9IHtvcmRlcjogb3B0cy5vcmRlcn07XG4gIGlmIChvcHRzLm9mZnNldCkge1xuICAgIHBhcmFtcy5vZmZzZXQgPSByZXF1aXJlRmxvYXRQYXJhbWV0ZXIoJ29mZnNldCcsIG9wdHMub2Zmc2V0LCAnc2VsZWN0UGlja2VyV2hlZWxWYWx1ZScpO1xuICB9XG4gIHJldHVybiBhd2FpdCB0aGlzLnByb3h5Q29tbWFuZChgL3dkYS9waWNrZXJ3aGVlbC8ke2VsZW1lbnRJZH0vc2VsZWN0YCwgJ1BPU1QnLCBwYXJhbXMpO1xufTtcblxuaGVscGVycy5tb2JpbGVSb3RhdGVFbGVtZW50ID0gYXN5bmMgZnVuY3Rpb24gbW9iaWxlUm90YXRlRWxlbWVudCAob3B0cyA9IHt9KSB7XG4gIGNvbnN0IGVsZW1lbnRJZCA9IHRvRWxlbWVudElkKG9wdHMpO1xuICBpZiAoIWVsZW1lbnRJZCkge1xuICAgIHRocm93IG5ldyBlcnJvcnMuSW52YWxpZEFyZ3VtZW50RXJyb3IoJ0VsZW1lbnQgaWQgaXMgZXhwZWN0ZWQgdG8gYmUgc2V0IGZvciByb3RhdGVFbGVtZW50IG1ldGhvZCcpO1xuICB9XG4gIGNvbnN0IHBhcmFtcyA9IHtcbiAgICByb3RhdGlvbjogcmVxdWlyZUZsb2F0UGFyYW1ldGVyKCdyb3RhdGlvbicsIG9wdHMucm90YXRpb24sICdyb3RhdGVFbGVtZW50JyksXG4gICAgdmVsb2NpdHk6IHJlcXVpcmVGbG9hdFBhcmFtZXRlcigndmVsb2NpdHknLCBvcHRzLnZlbG9jaXR5LCAncm90YXRlRWxlbWVudCcpLFxuICB9O1xuICByZXR1cm4gYXdhaXQgdGhpcy5wcm94eUNvbW1hbmQoYC93ZGEvZWxlbWVudC8ke2VsZW1lbnRJZH0vcm90YXRlYCwgJ1BPU1QnLCBwYXJhbXMpO1xufTtcblxuaGVscGVycy5nZXRDb29yZGluYXRlcyA9IGFzeW5jIGZ1bmN0aW9uIGdldENvb3JkaW5hdGVzIChnZXN0dXJlKSB7XG4gIC8vIGRlZmF1bHRzXG4gIGxldCBjb29yZGluYXRlcyA9IHt4OiAwLCB5OiAwLCBhcmVPZmZzZXRzOiBmYWxzZX07XG5cbiAgbGV0IG9wdGlvblggPSBudWxsO1xuICBpZiAoZ2VzdHVyZS5vcHRpb25zLngpIHtcbiAgICBvcHRpb25YID0gcmVxdWlyZUZsb2F0UGFyYW1ldGVyKCd4JywgZ2VzdHVyZS5vcHRpb25zLngsICdnZXRDb29yZGluYXRlcycpO1xuICB9XG4gIGxldCBvcHRpb25ZID0gbnVsbDtcbiAgaWYgKGdlc3R1cmUub3B0aW9ucy55KSB7XG4gICAgb3B0aW9uWSA9IHJlcXVpcmVGbG9hdFBhcmFtZXRlcigneScsIGdlc3R1cmUub3B0aW9ucy55LCAnZ2V0Q29vcmRpbmF0ZXMnKTtcbiAgfVxuXG4gIC8vIGZpZ3VyZSBvdXQgdGhlIGVsZW1lbnQgY29vcmRpbmF0ZXMuXG4gIGNvbnN0IGVsZW1lbnRJZCA9IHRvRWxlbWVudElkKGdlc3R1cmUub3B0aW9ucyk7XG4gIGlmIChlbGVtZW50SWQpIHtcbiAgICBsZXQgcmVjdCA9IGF3YWl0IHRoaXMuZ2V0RWxlbWVudFJlY3QoZWxlbWVudElkKTtcbiAgICBsZXQgcG9zID0ge3g6IHJlY3QueCwgeTogcmVjdC55fTtcbiAgICBsZXQgc2l6ZSA9IHt3OiByZWN0LndpZHRoLCBoOiByZWN0LmhlaWdodH07XG5cbiAgICAvLyBkZWZhdWx0c1xuICAgIGxldCBvZmZzZXRYID0gMDtcbiAgICBsZXQgb2Zmc2V0WSA9IDA7XG5cbiAgICAvLyBnZXQgdGhlIHJlYWwgb2Zmc2V0c1xuICAgIGlmIChvcHRpb25YIHx8IG9wdGlvblkpIHtcbiAgICAgIG9mZnNldFggPSAob3B0aW9uWCB8fCAwKTtcbiAgICAgIG9mZnNldFkgPSAob3B0aW9uWSB8fCAwKTtcbiAgICB9IGVsc2Uge1xuICAgICAgb2Zmc2V0WCA9IChzaXplLncgLyAyKTtcbiAgICAgIG9mZnNldFkgPSAoc2l6ZS5oIC8gMik7XG4gICAgfVxuXG4gICAgLy8gYXBwbHkgdGhlIG9mZnNldHNcbiAgICBjb29yZGluYXRlcy54ID0gcG9zLnggKyBvZmZzZXRYO1xuICAgIGNvb3JkaW5hdGVzLnkgPSBwb3MueSArIG9mZnNldFk7XG4gIH0gZWxzZSB7XG4gICAgLy8gbW92ZVRvIGNvb3JkaW5hdGVzIGFyZSBwYXNzZWQgaW4gYXMgb2Zmc2V0c1xuICAgIGNvb3JkaW5hdGVzLmFyZU9mZnNldHMgPSAoZ2VzdHVyZS5hY3Rpb24gPT09ICdtb3ZlVG8nKTtcbiAgICBjb29yZGluYXRlcy54ID0gKG9wdGlvblggfHwgMCk7XG4gICAgY29vcmRpbmF0ZXMueSA9IChvcHRpb25ZIHx8IDApO1xuICB9XG4gIHJldHVybiBjb29yZGluYXRlcztcbn07XG5cbmhlbHBlcnMuYXBwbHlNb3ZlVG9PZmZzZXQgPSBmdW5jdGlvbiBhcHBseU1vdmVUb09mZnNldCAoZmlyc3RDb29yZGluYXRlcywgc2Vjb25kQ29vcmRpbmF0ZXMpIHtcbiAgaWYgKHNlY29uZENvb3JkaW5hdGVzLmFyZU9mZnNldHMpIHtcbiAgICByZXR1cm4ge1xuICAgICAgeDogZmlyc3RDb29yZGluYXRlcy54ICsgc2Vjb25kQ29vcmRpbmF0ZXMueCxcbiAgICAgIHk6IGZpcnN0Q29vcmRpbmF0ZXMueSArIHNlY29uZENvb3JkaW5hdGVzLnksXG4gICAgfTtcbiAgfSBlbHNlIHtcbiAgICByZXR1cm4gc2Vjb25kQ29vcmRpbmF0ZXM7XG4gIH1cbn07XG5cbk9iamVjdC5hc3NpZ24oZXh0ZW5zaW9ucywgaGVscGVycywgY29tbWFuZHMpO1xuZXhwb3J0IHsgZXh0ZW5zaW9ucywgaGVscGVycywgY29tbWFuZHMsIGdlc3R1cmVzQ2hhaW5Ub1N0cmluZyB9O1xuZXhwb3J0IGRlZmF1bHQgZXh0ZW5zaW9ucztcbiJdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7Ozs7OztBQUFBOztBQUNBOztBQUNBOztBQUNBOztBQUVBLE1BQU1BLDRCQUE0QixHQUFHLENBQUMsSUFBRCxFQUFPLE1BQVAsRUFBZSxNQUFmLEVBQXVCLE9BQXZCLENBQXJDO0FBRUEsTUFBTUMsT0FBTyxHQUFHLEVBQWhCO0FBQUEsTUFBb0JDLFVBQVUsR0FBRyxFQUFqQztBQUFBLE1BQXFDQyxRQUFRLEdBQUcsRUFBaEQ7Ozs7O0FBRUEsU0FBU0MsV0FBVCxDQUFzQkMsSUFBSSxHQUFH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
476
+ //# sourceMappingURL=data:application/json;charset=utf8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibGliL2NvbW1hbmRzL2dlc3R1cmUuanMiLCJuYW1lcyI6WyJTVVBQT1JURURfR0VTVFVSRV9ESVJFQ1RJT05TIiwiaGVscGVycyIsImV4dGVuc2lvbnMiLCJjb21tYW5kcyIsInRvRWxlbWVudElkIiwib3B0cyIsImVsZW1lbnQiLCJsb2ciLCJpbmZvIiwiZWwiLCJlbGVtZW50SWQiLCJ1dGlsIiwidW53cmFwRWxlbWVudCIsInRvRWxlbWVudE9yQXBwbGljYXRpb25JZCIsImRyaXZlciIsImZpbmROYXRpdmVFbGVtZW50T3JFbGVtZW50cyIsIm1vdmVUbyIsInhvZmZzZXQiLCJ5b2Zmc2V0IiwiaXNXZWJDb250ZXh0IiwieCIsInkiLCJnZXRMb2NhdGlvbiIsImNvb3JkcyIsImN1cldlYkNvb3JkcyIsImF0b21zRWxlbWVudCIsImdldEF0b21zRWxlbWVudCIsInJlbENvb3JkcyIsImV4ZWN1dGVBdG9tIiwiXyIsImlzTmlsIiwiY3VyQ29vcmRzIiwiZXJyb3JzIiwiVW5rbm93bkV4Y2VwdGlvbiIsImVsUG9zIiwicmVxdWlyZUZsb2F0UGFyYW1ldGVyIiwicGFyYW1OYW1lIiwicGFyYW1WYWx1ZSIsIm1ldGhvZE5hbWUiLCJpc1VuZGVmaW5lZCIsIkludmFsaWRBcmd1bWVudEVycm9yIiwicmVzdWx0IiwicGFyc2VGbG9hdCIsImlzTmFOIiwicmVxdWlyZUludFBhcmFtZXRlciIsInBhcnNlSW50IiwibW9iaWxlU2hha2UiLCJpc1NpbXVsYXRvciIsIlVua25vd25FcnJvciIsImRldmljZSIsInNoYWtlIiwiY2xpY2siLCJuYXRpdmVDbGljayIsInNldHRpbmdzIiwiZ2V0U2V0dGluZ3MiLCJuYXRpdmVXZWJUYXAiLCJuYXRpdmVXZWJUYXBTdHJpY3QiLCJkZWJ1ZyIsImdlc3R1cmVzQ2hhaW5Ub1N0cmluZyIsImdlc3R1cmVzIiwia2V5c1RvSW5jbHVkZSIsIm1hcCIsIml0ZW0iLCJvdGhlcktleXMiLCJkaWZmZXJlbmNlIiwia2V5cyIsImlzQXJyYXkiLCJpbnRlcnNlY3Rpb24iLCJsZW5ndGgiLCJhY3Rpb24iLCJpc1BsYWluT2JqZWN0IiwiSlNPTiIsInN0cmluZ2lmeSIsImpvaW4iLCJwZXJmb3JtQWN0aW9ucyIsImFjdGlvbnMiLCJwcmVwcm9jZXNzZWRBY3Rpb25zIiwiT2JqZWN0IiwiYXNzaWduIiwidHlwZSIsInBhcmFtZXRlcnMiLCJwb2ludGVyVHlwZSIsIm1vZGlmaWVkQWN0aW9uIiwiY2xvbmUiLCJmaWx0ZXIiLCJpbm5lckFjdGlvbiIsImR1cmF0aW9uIiwicHJveHlDb21tYW5kIiwicmVsZWFzZUFjdGlvbnMiLCJ3YXJuIiwicGVyZm9ybVRvdWNoIiwiZSIsImVycm9yQW5kVGhyb3ciLCJtZXNzYWdlIiwicGVyZm9ybU11bHRpQWN0aW9uIiwiaSIsImVuZHBvaW50IiwibW9iaWxlU2Nyb2xsVG9FbGVtZW50IiwibW9iaWxlU2Nyb2xsIiwibmFtZSIsImRpcmVjdGlvbiIsInByZWRpY2F0ZVN0cmluZyIsInRvVmlzaWJsZSIsImRpc3RhbmNlIiwicGFyYW1zIiwiaW5jbHVkZXMiLCJ0b0xvd2VyIiwibW9iaWxlU3dpcGUiLCJ2ZWxvY2l0eSIsIm1vYmlsZVBpbmNoIiwic2NhbGUiLCJtb2JpbGVEb3VibGVUYXAiLCJtb2JpbGVUd29GaW5nZXJUYXAiLCJtb2JpbGVUb3VjaEFuZEhvbGQiLCJtb2JpbGVUYXAiLCJtb2JpbGVEcmFnRnJvbVRvRm9yRHVyYXRpb24iLCJmcm9tWCIsImZyb21ZIiwidG9YIiwidG9ZIiwibW9iaWxlVGFwV2l0aE51bWJlck9mVGFwcyIsIm51bWJlck9mVGFwcyIsIm51bWJlck9mVG91Y2hlcyIsIm1vYmlsZUZvcmNlUHJlc3MiLCJwcmVzc3VyZSIsIm1vYmlsZVNlbGVjdFBpY2tlcldoZWVsVmFsdWUiLCJpc1N0cmluZyIsIm9yZGVyIiwidG9Mb3dlckNhc2UiLCJvZmZzZXQiLCJtb2JpbGVSb3RhdGVFbGVtZW50Iiwicm90YXRpb24iLCJnZXRDb29yZGluYXRlcyIsImdlc3R1cmUiLCJjb29yZGluYXRlcyIsImFyZU9mZnNldHMiLCJvcHRpb25YIiwib3B0aW9ucyIsIm9wdGlvblkiLCJyZWN0IiwiZ2V0RWxlbWVudFJlY3QiLCJwb3MiLCJzaXplIiwidyIsIndpZHRoIiwiaCIsImhlaWdodCIsIm9mZnNldFgiLCJvZmZzZXRZIiwiYXBwbHlNb3ZlVG9PZmZzZXQiLCJmaXJzdENvb3JkaW5hdGVzIiwic2Vjb25kQ29vcmRpbmF0ZXMiXSwic291cmNlUm9vdCI6Ii4uLy4uLy4uIiwic291cmNlcyI6WyJsaWIvY29tbWFuZHMvZ2VzdHVyZS5qcyJdLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBlcnJvcnMgfSBmcm9tICdhcHBpdW0vZHJpdmVyJztcbmltcG9ydCB7IHV0aWwgfSBmcm9tICdhcHBpdW0vc3VwcG9ydCc7XG5pbXBvcnQgXyBmcm9tICdsb2Rhc2gnO1xuaW1wb3J0IGxvZyBmcm9tICcuLi9sb2dnZXInO1xuXG5jb25zdCBTVVBQT1JURURfR0VTVFVSRV9ESVJFQ1RJT05TID0gWyd1cCcsICdkb3duJywgJ2xlZnQnLCAncmlnaHQnXTtcblxuY29uc3QgaGVscGVycyA9IHt9LCBleHRlbnNpb25zID0ge30sIGNvbW1hbmRzID0ge307XG5cbmZ1bmN0aW9uIHRvRWxlbWVudElkIChvcHRzID0ge30pIHtcbiAgaWYgKG9wdHMuZWxlbWVudCkge1xuICAgIGxvZy5pbmZvKGBUaGUgJ2VsZW1lbnQnIGFyZ3VtZW50IG5hbWUgaXMgZGVwcmVjYXRlZC4gQ29uc2lkZXIgdXNpbmcgJ2VsZW1lbnRJZCcgaW5zdGVhZGApO1xuICB9XG4gIGNvbnN0IGVsID0gb3B0cy5lbGVtZW50SWQgfHwgb3B0cy5lbGVtZW50O1xuICByZXR1cm4gZWwgPyB1dGlsLnVud3JhcEVsZW1lbnQoZWwpIDogbnVsbDtcbn1cblxuYXN5bmMgZnVuY3Rpb24gdG9FbGVtZW50T3JBcHBsaWNhdGlvbklkIChkcml2ZXIsIG9wdHMgPSB7fSkge1xuICByZXR1cm4gdG9FbGVtZW50SWQob3B0cylcbiAgICB8fCB1dGlsLnVud3JhcEVsZW1lbnQoYXdhaXQgZHJpdmVyLmZpbmROYXRpdmVFbGVtZW50T3JFbGVtZW50cyhgY2xhc3MgbmFtZWAsIGBYQ1VJRWxlbWVudFR5cGVBcHBsaWNhdGlvbmAsIGZhbHNlKSk7XG59XG5cbmNvbW1hbmRzLm1vdmVUbyA9IGFzeW5jIGZ1bmN0aW9uIG1vdmVUbyAoZWwsIHhvZmZzZXQgPSAwLCB5b2Zmc2V0ID0gMCkge1xuICBlbCA9IHV0aWwudW53cmFwRWxlbWVudChlbCk7XG5cbiAgaWYgKHRoaXMuaXNXZWJDb250ZXh0KCkpIHtcbiAgICBsZXQge3gsIHl9ID0gYXdhaXQgdGhpcy5nZXRMb2NhdGlvbihlbCk7XG4gICAgbGV0IGNvb3JkcyA9IHtcbiAgICAgIHg6IHggKyB4b2Zmc2V0LFxuICAgICAgeTogeSArIHlvZmZzZXRcbiAgICB9O1xuICAgIHRoaXMuY3VyV2ViQ29vcmRzID0gY29vcmRzO1xuICAgIGxldCBhdG9tc0VsZW1lbnQgPSB0aGlzLmdldEF0b21zRWxlbWVudChlbCk7XG4gICAgbGV0IHJlbENvb3JkcyA9IHt4OiB4b2Zmc2V0LCB5OiB5b2Zmc2V0fTtcbiAgICBhd2FpdCB0aGlzLmV4ZWN1dGVBdG9tKCdtb3ZlX21vdXNlJywgW2F0b21zRWxlbWVudCwgcmVsQ29vcmRzXSk7XG4gIH0gZWxzZSB7XG4gICAgaWYgKF8uaXNOaWwoZWwpKSB7XG4gICAgICBpZiAoIXRoaXMuY3VyQ29vcmRzKSB7XG4gICAgICAgIHRocm93IG5ldyBlcnJvcnMuVW5rbm93bkV4Y2VwdGlvbihcbiAgICAgICAgICAnQ3VycmVudCBjdXJzb3IgcG9zaXRpb24gdW5rbm93biwgcGxlYXNlIHVzZSBtb3ZlVG8gd2l0aCBhbiBlbGVtZW50IHRoZSBmaXJzdCB0aW1lLicpO1xuICAgICAgfVxuICAgICAgdGhpcy5jdXJDb29yZHMgPSB7XG4gICAgICAgIHg6IHRoaXMuY3VyQ29vcmRzLnggKyB4b2Zmc2V0LFxuICAgICAgICB5OiB0aGlzLmN1ckNvb3Jkcy55ICsgeW9mZnNldFxuICAgICAgfTtcbiAgICB9IGVsc2Uge1xuICAgICAgbGV0IGVsUG9zID0gYXdhaXQgdGhpcy5nZXRMb2NhdGlvbihlbCk7XG4gICAgICB0aGlzLmN1ckNvb3JkcyA9IHtcbiAgICAgICAgeDogZWxQb3MueCArIHhvZmZzZXQsXG4gICAgICAgIHk6IGVsUG9zLnkgKyB5b2Zmc2V0XG4gICAgICB9O1xuICAgIH1cbiAgfVxufTtcblxuZnVuY3Rpb24gcmVxdWlyZUZsb2F0UGFyYW1ldGVyIChwYXJhbU5hbWUsIHBhcmFtVmFsdWUsIG1ldGhvZE5hbWUpIHtcbiAgaWYgKF8uaXNVbmRlZmluZWQocGFyYW1WYWx1ZSkpIHtcbiAgICB0aHJvdyBuZXcgZXJyb3JzLkludmFsaWRBcmd1bWVudEVycm9yKGBcIiR7cGFyYW1OYW1lfVwiIHBhcmFtZXRlciBpcyBtYW5kYXRvcnkgZm9yIFwiJHttZXRob2ROYW1lfVwiIGNhbGxgKTtcbiAgfVxuICBjb25zdCByZXN1bHQgPSBwYXJzZUZsb2F0KHBhcmFtVmFsdWUpO1xuICBpZiAoaXNOYU4ocmVzdWx0KSkge1xuICAgIHRocm93IG5ldyBlcnJvcnMuSW52YWxpZEFyZ3VtZW50RXJyb3IoYFwiJHtwYXJhbU5hbWV9XCIgcGFyYW1ldGVyIHNob3VsZCBiZSBhIHZhbGlkIG51bWJlci4gXCIke3BhcmFtVmFsdWV9XCIgaXMgZ2l2ZW4gaW5zdGVhZGApO1xuICB9XG4gIHJldHVybiByZXN1bHQ7XG59XG5cbmZ1bmN0aW9uIHJlcXVpcmVJbnRQYXJhbWV0ZXIgKHBhcmFtTmFtZSwgcGFyYW1WYWx1ZSwgbWV0aG9kTmFtZSkge1xuICBpZiAoXy5pc1VuZGVmaW5lZChwYXJhbVZhbHVlKSkge1xuICAgIHRocm93IG5ldyBlcnJvcnMuSW52YWxpZEFyZ3VtZW50RXJyb3IoYFwiJHtwYXJhbU5hbWV9XCIgcGFyYW1ldGVyIGlzIG1hbmRhdG9yeSBmb3IgXCIke21ldGhvZE5hbWV9XCIgY2FsbGApO1xuICB9XG4gIGNvbnN0IHJlc3VsdCA9IHBhcnNlSW50KHBhcmFtVmFsdWUsIDEwKTtcbiAgaWYgKGlzTmFOKHJlc3VsdCkpIHtcbiAgICB0aHJvdyBuZXcgZXJyb3JzLkludmFsaWRBcmd1bWVudEVycm9yKGBcIiR7cGFyYW1OYW1lfVwiIHBhcmFtZXRlciBzaG91bGQgYmUgYSB2YWxpZCBpbnRlZ2VyLiBcIiR7cGFyYW1WYWx1ZX1cIiBpcyBnaXZlbiBpbnN0ZWFkYCk7XG4gIH1cbiAgcmV0dXJuIHJlc3VsdDtcbn1cblxuY29tbWFuZHMubW9iaWxlU2hha2UgPSBhc3luYyBmdW5jdGlvbiBtb2JpbGVTaGFrZSAoKSB7XG4gIGlmICghdGhpcy5pc1NpbXVsYXRvcigpKSB7XG4gICAgdGhyb3cgbmV3IGVycm9ycy5Vbmtub3duRXJyb3IoJ1NoYWtlIGlzIG5vdCBzdXBwb3J0ZWQgb24gcmVhbCBkZXZpY2VzJyk7XG4gIH1cbiAgYXdhaXQgdGhpcy5vcHRzLmRldmljZS5zaGFrZSgpO1xufTtcblxuY29tbWFuZHMuY2xpY2sgPSBhc3luYyBmdW5jdGlvbiBjbGljayAoZWwpIHtcbiAgaWYgKCF0aGlzLmlzV2ViQ29udGV4dCgpKSB7XG4gICAgLy8gdGhlcmUgYXJlIG11bHRpcGxlIGNvbW1hbmRzIHRoYXQgbWFwIGhlcmUsIHNvIG1hbnVhbGx5IHByb3h5XG4gICAgcmV0dXJuIGF3YWl0IHRoaXMubmF0aXZlQ2xpY2soZWwpO1xuICB9XG4gIGVsID0gdXRpbC51bndyYXBFbGVtZW50KGVsKTtcbiAgaWYgKChhd2FpdCB0aGlzLnNldHRpbmdzLmdldFNldHRpbmdzKCkpLm5hdGl2ZVdlYlRhcCB8fCAoYXdhaXQgdGhpcy5zZXR0aW5ncy5nZXRTZXR0aW5ncygpKS5uYXRpdmVXZWJUYXBTdHJpY3QpIHtcbiAgICAvLyBhdG9tcy1iYXNlZCBjbGlja3MgZG9uJ3QgYWx3YXlzIHdvcmsgaW4gc2FmYXJpIDdcbiAgICB0aGlzLmxvZy5kZWJ1ZygnVXNpbmcgbmF0aXZlIHdlYiB0YXAnKTtcbiAgICBhd2FpdCB0aGlzLm5hdGl2ZVdlYlRhcChlbCk7XG4gIH0gZWxzZSB7XG4gICAgY29uc3QgYXRvbXNFbGVtZW50ID0gdGhpcy5nZXRBdG9tc0VsZW1lbnQoZWwpO1xuICAgIHJldHVybiBhd2FpdCB0aGlzLmV4ZWN1dGVBdG9tKCdjbGljaycsIFthdG9tc0VsZW1lbnRdKTtcbiAgfVxufTtcblxuZnVuY3Rpb24gZ2VzdHVyZXNDaGFpblRvU3RyaW5nIChnZXN0dXJlcywga2V5c1RvSW5jbHVkZSA9IFsnb3B0aW9ucyddKSB7XG4gIHJldHVybiBnZXN0dXJlcy5tYXAoKGl0ZW0pID0+IHtcbiAgICBsZXQgb3RoZXJLZXlzID0gXy5kaWZmZXJlbmNlKF8ua2V5cyhpdGVtKSwgWydhY3Rpb24nXSk7XG4gICAgb3RoZXJLZXlzID0gXy5pc0FycmF5KGtleXNUb0luY2x1ZGUpID8gXy5pbnRlcnNlY3Rpb24ob3RoZXJLZXlzLCBrZXlzVG9JbmNsdWRlKSA6IG90aGVyS2V5cztcbiAgICBpZiAob3RoZXJLZXlzLmxlbmd0aCkge1xuICAgICAgcmV0dXJuIGAke2l0ZW0uYWN0aW9ufWAgK1xuICAgICAgICBgKCR7Xy5tYXAob3RoZXJLZXlzLCAoeCkgPT4geCArICc9JyArIChfLmlzUGxhaW5PYmplY3QoaXRlbVt4XSkgPyBKU09OLnN0cmluZ2lmeShpdGVtW3hdKSA6IGl0ZW1beF0pKS5qb2luKCcsICcpfSlgO1xuICAgIH1cbiAgICByZXR1cm4gaXRlbS5hY3Rpb247XG4gIH0pLmpvaW4oJy0nKTtcbn1cblxuY29tbWFuZHMucGVyZm9ybUFjdGlvbnMgPSBhc3luYyBmdW5jdGlvbiBwZXJmb3JtQWN0aW9ucyAoYWN0aW9ucykge1xuICB0aGlzLmxvZy5kZWJ1ZyhgUmVjZWl2ZWQgdGhlIGZvbGxvd2luZyBXM0MgYWN0aW9uczogJHtKU09OLnN0cmluZ2lmeShhY3Rpb25zLCBudWxsLCAnICAnKX1gKTtcbiAgLy8gVGhpcyBpcyBtYW5kYXRvcnksIHNpbmNlIFdEQSBvbmx5IHN1cHBvcnRzIFRPVUNIIHBvaW50ZXIgdHlwZVxuICAvLyBhbmQgU2VsZW5pdW0gQVBJIHVzZXMgTU9VU0UgYXMgdGhlIGRlZmF1bHQgb25lXG4gIGNvbnN0IHByZXByb2Nlc3NlZEFjdGlvbnMgPSBhY3Rpb25zXG4gICAgLm1hcCgoYWN0aW9uKSA9PiBPYmplY3QuYXNzaWduKHt9LCBhY3Rpb24sIGFjdGlvbi50eXBlID09PSAncG9pbnRlcicgPyB7XG4gICAgICBwYXJhbWV0ZXJzOiB7XG4gICAgICAgIHBvaW50ZXJUeXBlOiAndG91Y2gnXG4gICAgICB9XG4gICAgfSA6IHt9KSlcbiAgICAubWFwKChhY3Rpb24pID0+IHtcbiAgICAgIGNvbnN0IG1vZGlmaWVkQWN0aW9uID0gXy5jbG9uZShhY3Rpb24pIHx8IHt9O1xuICAgICAgLy8gU2VsZW5pdW0gQVBJIHVuZXhwZWN0ZWRseSBpbnNlcnRzIHplcm8gcGF1c2VzLCB3aGljaCBhcmUgbm90IHN1cHBvcnRlZCBieSBXREFcbiAgICAgIG1vZGlmaWVkQWN0aW9uLmFjdGlvbnMgPSAoYWN0aW9uLmFjdGlvbnMgfHwgW10pXG4gICAgICAgIC5maWx0ZXIoKGlubmVyQWN0aW9uKSA9PiAhKGlubmVyQWN0aW9uLnR5cGUgPT09ICdwYXVzZScgJiYgaW5uZXJBY3Rpb24uZHVyYXRpb24gPT09IDApKTtcbiAgICAgIHJldHVybiBtb2RpZmllZEFjdGlvbjtcbiAgICB9KTtcbiAgdGhpcy5sb2cuZGVidWcoYFByZXByb2Nlc3NlZCBhY3Rpb25zOiAke0pTT04uc3RyaW5naWZ5KHByZXByb2Nlc3NlZEFjdGlvbnMsIG51bGwsICcgICcpfWApO1xuICByZXR1cm4gYXdhaXQgdGhpcy5wcm94eUNvbW1hbmQoJy9hY3Rpb25zJywgJ1BPU1QnLCB7YWN0aW9uczogcHJlcHJvY2Vzc2VkQWN0aW9uc30pO1xufTtcblxuY29tbWFuZHMucmVsZWFzZUFjdGlvbnMgPSBmdW5jdGlvbiByZWxlYXNlQWN0aW9ucyAoKSB7XG4gIHRoaXMubG9nLndhcm4oJ09uIHRoaXMgcGxhdGZvcm0sIHJlbGVhc2VBY3Rpb25zIGlzIGEgbm8tb3AnKTtcbn07XG5cbmNvbW1hbmRzLnBlcmZvcm1Ub3VjaCA9IGFzeW5jIGZ1bmN0aW9uIHBlcmZvcm1Ub3VjaCAoZ2VzdHVyZXMpIHtcbiAgdGhpcy5sb2cuZGVidWcoYFJlY2VpdmVkIHRoZSBmb2xsb3dpbmcgdG91Y2ggYWN0aW9uOiAke2dlc3R1cmVzQ2hhaW5Ub1N0cmluZyhnZXN0dXJlcyl9YCk7XG4gIHRyeSB7XG4gICAgcmV0dXJuIGF3YWl0IHRoaXMucHJveHlDb21tYW5kKCcvd2RhL3RvdWNoL3BlcmZvcm0nLCAnUE9TVCcsIHthY3Rpb25zOiBnZXN0dXJlc30pO1xuICB9IGNhdGNoIChlKSB7XG4gICAgaWYgKCF0aGlzLmlzV2ViQ29udGV4dCgpKSB7XG4gICAgICB0aHJvdyBlO1xuICAgIH1cbiAgICB0aGlzLmxvZy5lcnJvckFuZFRocm93KCdUaGUgVG91Y2ggQVBJIGlzIGFpbWVkIGZvciB1c2FnZSBpbiBOQVRJVkUgY29udGV4dC4gJyArXG4gICAgICAnQ29uc2lkZXIgdXNpbmcgXCJleGVjdXRlXCIgQVBJIHdpdGggY3VzdG9tIGV2ZW50cyB0cmlnZ2VyIHNjcmlwdCAnICtcbiAgICAgIGB0byBlbXVsYXRlIHRvdWNoIGV2ZW50cyBiZWluZyBpbiBXRUJWSUVXIGNvbnRleHQuIE9yaWdpbmFsIGVycm9yOiAke2UubWVzc2FnZX1gKTtcbiAgfVxufTtcblxuY29tbWFuZHMucGVyZm9ybU11bHRpQWN0aW9uID0gYXN5bmMgZnVuY3Rpb24gcGVyZm9ybU11bHRpQWN0aW9uIChhY3Rpb25zKSB7XG4gIHRoaXMubG9nLmRlYnVnKGBSZWNlaXZlZCB0aGUgZm9sbG93aW5nIG11bHRpIHRvdWNoIGFjdGlvbjpgKTtcbiAgZm9yIChsZXQgaSBpbiBhY3Rpb25zKSB7XG4gICAgdGhpcy5sb2cuZGVidWcoYCAgICAke3BhcnNlSW50KGksIDEwKSArIDF9OiAke18ubWFwKGFjdGlvbnNbaV0sICdhY3Rpb24nKS5qb2luKCctJyl9YCk7XG4gIH1cbiAgdHJ5IHtcbiAgICByZXR1cm4gYXdhaXQgdGhpcy5wcm94eUNvbW1hbmQoJy93ZGEvdG91Y2gvbXVsdGkvcGVyZm9ybScsICdQT1NUJywge2FjdGlvbnN9KTtcbiAgfSBjYXRjaCAoZSkge1xuICAgIGlmICghdGhpcy5pc1dlYkNvbnRleHQoKSkge1xuICAgICAgdGhyb3cgZTtcbiAgICB9XG4gICAgdGhpcy5sb2cuZXJyb3JBbmRUaHJvdygnVGhlIE11bHRpVG91Y2ggQVBJIGlzIGFpbWVkIGZvciB1c2FnZSBpbiBOQVRJVkUgY29udGV4dC4gJyArXG4gICAgICAnQ29uc2lkZXIgdXNpbmcgXCJleGVjdXRlXCIgQVBJIHdpdGggY3VzdG9tIGV2ZW50cyB0cmlnZ2VyIHNjcmlwdCAnICtcbiAgICAgIGB0byBlbXVsYXRlIG11bHRpdG91Y2ggZXZlbnRzIGJlaW5nIGluIFdFQlZJRVcgY29udGV4dC4gT3JpZ2luYWwgZXJyb3I6ICR7ZS5tZXNzYWdlfWApO1xuICB9XG59O1xuXG5jb21tYW5kcy5uYXRpdmVDbGljayA9IGFzeW5jIGZ1bmN0aW9uIG5hdGl2ZUNsaWNrIChlbCkge1xuICBlbCA9IHV0aWwudW53cmFwRWxlbWVudChlbCk7XG4gIGxldCBlbmRwb2ludCA9IGAvZWxlbWVudC8ke2VsfS9jbGlja2A7XG4gIHJldHVybiBhd2FpdCB0aGlzLnByb3h5Q29tbWFuZChlbmRwb2ludCwgJ1BPU1QnLCB7fSk7XG59O1xuXG4vKlxuICogU2VlIGh0dHBzOi8vZ2l0aHViLmNvbS9mYWNlYm9vay9XZWJEcml2ZXJBZ2VudC9ibG9iL21hc3Rlci9XZWJEcml2ZXJBZ2VudExpYi9Db21tYW5kcy9GQkVsZW1lbnRDb21tYW5kcy5tXG4gKiB0byBnZXQgdGhlIGluZm8gYWJvdXQgYXZhaWxhYmxlIFdEQSBnZXN0dXJlcyBBUElcbiAqXG4gKiBTZWUgaHR0cHM6Ly9kZXZlbG9wZXIuYXBwbGUuY29tL3JlZmVyZW5jZS94Y3Rlc3QveGN1aWVsZW1lbnQgYW5kXG4gKiBodHRwczovL2RldmVsb3Blci5hcHBsZS5jb20vcmVmZXJlbmNlL3hjdGVzdC94Y3VpY29vcmRpbmF0ZSB0byBnZXQgdGhlIGRldGFpbGVkIGRlc2NyaXB0aW9uIG9mXG4gKiBhbGwgWENUZXN0IGdlc3R1cmVzXG4qL1xuXG5jb21tYW5kcy5tb2JpbGVTY3JvbGxUb0VsZW1lbnQgPSBhc3luYyBmdW5jdGlvbiBtb2JpbGVTY3JvbGxUb0VsZW1lbnQgKG9wdHMgPSB7fSkge1xuICBjb25zdCBlbGVtZW50SWQgPSBhd2FpdCB0b0VsZW1lbnRJZChvcHRzKTtcbiAgaWYgKCFlbGVtZW50SWQpIHtcbiAgICB0aHJvdyBuZXcgZXJyb3JzLkludmFsaWRBcmd1bWVudEVycm9yKCdFbGVtZW50IGlkIG11c3QgYmUgcHJvdmlkZWQnKTtcbiAgfVxuICByZXR1cm4gYXdhaXQgdGhpcy5wcm94eUNvbW1hbmQoYC93ZGEvZWxlbWVudC8ke2VsZW1lbnRJZH0vc2Nyb2xsVG9gLCAnUE9TVCcsIHt9KTtcbn07XG5cbmhlbHBlcnMubW9iaWxlU2Nyb2xsID0gYXN5bmMgZnVuY3Rpb24gbW9iaWxlU2Nyb2xsIChvcHRzID0ge30pIHtcbiAgLy8gV0RBIHN1cHBvcnRzIGZvdXIgc2Nyb2xsaW5nIHN0cmF0ZWdpZXM6IHByZWRpY2F0aW9uIGJhc2VkIG9uIG5hbWUsIGRpcmVjdGlvbixcbiAgLy8gcHJlZGljYXRlU3RyaW5nLCBhbmQgdG9WaXNpYmxlLCBpbiB0aGF0IG9yZGVyXG4gIGNvbnN0IHtcbiAgICBuYW1lLFxuICAgIGRpcmVjdGlvbixcbiAgICBwcmVkaWNhdGVTdHJpbmcsXG4gICAgdG9WaXNpYmxlLFxuICAgIGRpc3RhbmNlLFxuICB9ID0gb3B0cztcbiAgY29uc3QgcGFyYW1zID0ge307XG4gIGlmIChuYW1lKSB7XG4gICAgcGFyYW1zLm5hbWUgPSBuYW1lO1xuICB9IGVsc2UgaWYgKGRpcmVjdGlvbikge1xuICAgIGlmICghU1VQUE9SVEVEX0dFU1RVUkVfRElSRUNUSU9OUy5pbmNsdWRlcyhfLnRvTG93ZXIoZGlyZWN0aW9uKSkpIHtcbiAgICAgIHRocm93IG5ldyBlcnJvcnMuSW52YWxpZEFyZ3VtZW50RXJyb3IoYCdkaXJlY3Rpb24nIG11c3QgYmUgb25lIG9mOiAke1NVUFBPUlRFRF9HRVNUVVJFX0RJUkVDVElPTlN9YCk7XG4gICAgfVxuICAgIHBhcmFtcy5kaXJlY3Rpb24gPSBkaXJlY3Rpb247XG4gIH0gZWxzZSBpZiAocHJlZGljYXRlU3RyaW5nKSB7XG4gICAgcGFyYW1zLnByZWRpY2F0ZVN0cmluZyA9IHByZWRpY2F0ZVN0cmluZztcbiAgfSBlbHNlIGlmICh0b1Zpc2libGUpIHtcbiAgICBwYXJhbXMudG9WaXNpYmxlID0gdG9WaXNpYmxlO1xuICB9IGVsc2Uge1xuICAgIHRocm93IG5ldyBlcnJvcnMuSW52YWxpZEFyZ3VtZW50RXJyb3IoXG4gICAgICAnTW9iaWxlIHNjcm9sbCBzdXBwb3J0cyB0aGUgZm9sbG93aW5nIHN0cmF0ZWdpZXM6IG5hbWUsIGRpcmVjdGlvbiwgcHJlZGljYXRlU3RyaW5nLCBhbmQgdG9WaXNpYmxlLiAnICtcbiAgICAgICdTcGVjaWZ5IG9uZSBvZiB0aGVzZScpO1xuICB9XG4gIC8vIHdlIGNhbiBhbHNvIG9wdGlvbmFsbHkgcGFzcyBhIGRpc3RhbmNlIHdoaWNoIGFwcGVhcnMgdG8gYmUgYSByYXRpbyBvZlxuICAvLyBzY3JlZW4gaGVpZ2h0LCBzbyAxLjAgbWVhbnMgYSBmdWxsIHNjcmVlbidzIHdvcnRoIG9mIHNjcm9sbGluZ1xuICBpZiAoIV8uaXNOaWwoZGlzdGFuY2UpKSB7XG4gICAgcGFyYW1zLmRpc3RhbmNlID0gZGlzdGFuY2U7XG4gIH1cbiAgY29uc3QgZWxlbWVudElkID0gYXdhaXQgdG9FbGVtZW50T3JBcHBsaWNhdGlvbklkKHRoaXMsIG9wdHMpO1xuICByZXR1cm4gYXdhaXQgdGhpcy5wcm94eUNvbW1hbmQoYC93ZGEvZWxlbWVudC8ke2VsZW1lbnRJZH0vc2Nyb2xsYCwgJ1BPU1QnLCBwYXJhbXMpO1xufTtcblxuaGVscGVycy5tb2JpbGVTd2lwZSA9IGFzeW5jIGZ1bmN0aW9uIG1vYmlsZVN3aXBlIChvcHRzID0ge30pIHtcbiAgY29uc3Qge1xuICAgIGRpcmVjdGlvbixcbiAgICB2ZWxvY2l0eSxcbiAgfSA9IG9wdHM7XG4gIGlmICghU1VQUE9SVEVEX0dFU1RVUkVfRElSRUNUSU9OUy5pbmNsdWRlcyhfLnRvTG93ZXIoZGlyZWN0aW9uKSkpIHtcbiAgICB0aHJvdyBuZXcgZXJyb3JzLkludmFsaWRBcmd1bWVudEVycm9yKGAnZGlyZWN0aW9uJyBtdXN0IGJlIG9uZSBvZjogJHtTVVBQT1JURURfR0VTVFVSRV9ESVJFQ1RJT05TfWApO1xuICB9XG4gIGNvbnN0IHBhcmFtcyA9IHtkaXJlY3Rpb259O1xuICBpZiAoIV8uaXNOaWwodmVsb2NpdHkpKSB7XG4gICAgcGFyYW1zLnZlbG9jaXR5ID0gdmVsb2NpdHk7XG4gIH1cbiAgY29uc3QgZWxlbWVudElkID0gYXdhaXQgdG9FbGVtZW50T3JBcHBsaWNhdGlvbklkKHRoaXMsIG9wdHMpO1xuICByZXR1cm4gYXdhaXQgdGhpcy5wcm94eUNvbW1hbmQoYC93ZGEvZWxlbWVudC8ke2VsZW1lbnRJZH0vc3dpcGVgLCAnUE9TVCcsIHBhcmFtcyk7XG59O1xuXG5oZWxwZXJzLm1vYmlsZVBpbmNoID0gYXN5bmMgZnVuY3Rpb24gbW9iaWxlUGluY2ggKG9wdHMgPSB7fSkge1xuICBjb25zdCBwYXJhbXMgPSB7XG4gICAgc2NhbGU6IHJlcXVpcmVGbG9hdFBhcmFtZXRlcignc2NhbGUnLCBvcHRzLnNjYWxlLCAncGluY2gnKSxcbiAgICB2ZWxvY2l0eTogcmVxdWlyZUZsb2F0UGFyYW1ldGVyKCd2ZWxvY2l0eScsIG9wdHMudmVsb2NpdHksICdwaW5jaCcpXG4gIH07XG4gIGNvbnN0IGVsZW1lbnRJZCA9IGF3YWl0IHRvRWxlbWVudE9yQXBwbGljYXRpb25JZCh0aGlzLCBvcHRzKTtcbiAgcmV0dXJuIGF3YWl0IHRoaXMucHJveHlDb21tYW5kKGAvd2RhL2VsZW1lbnQvJHtlbGVtZW50SWR9L3BpbmNoYCwgJ1BPU1QnLCBwYXJhbXMpO1xufTtcblxuaGVscGVycy5tb2JpbGVEb3VibGVUYXAgPSBhc3luYyBmdW5jdGlvbiBtb2JpbGVEb3VibGVUYXAgKG9wdHMgPSB7fSkge1xuICBjb25zdCBlbGVtZW50SWQgPSB0b0VsZW1lbnRJZChvcHRzKTtcbiAgaWYgKGVsZW1lbnRJZCkge1xuICAgIC8vIERvdWJsZSB0YXAgZWxlbWVudFxuICAgIHJldHVybiBhd2FpdCB0aGlzLnByb3h5Q29tbWFuZChgL3dkYS9lbGVtZW50LyR7ZWxlbWVudElkfS9kb3VibGVUYXBgLCAnUE9TVCcpO1xuICB9XG4gIC8vIERvdWJsZSB0YXAgY29vcmRpbmF0ZXNcbiAgY29uc3QgcGFyYW1zID0ge1xuICAgIHg6IHJlcXVpcmVGbG9hdFBhcmFtZXRlcigneCcsIG9wdHMueCwgJ2RvdWJsZVRhcCcpLFxuICAgIHk6IHJlcXVpcmVGbG9hdFBhcmFtZXRlcigneScsIG9wdHMueSwgJ2RvdWJsZVRhcCcpXG4gIH07XG4gIHJldHVybiBhd2FpdCB0aGlzLnByb3h5Q29tbWFuZCgnL3dkYS9kb3VibGVUYXAnLCAnUE9TVCcsIHBhcmFtcyk7XG59O1xuXG5oZWxwZXJzLm1vYmlsZVR3b0ZpbmdlclRhcCA9IGFzeW5jIGZ1bmN0aW9uIG1vYmlsZVR3b0ZpbmdlclRhcCAob3B0cyA9IHt9KSB7XG4gIGNvbnN0IGVsZW1lbnRJZCA9IGF3YWl0IHRvRWxlbWVudE9yQXBwbGljYXRpb25JZCh0aGlzLCBvcHRzKTtcbiAgcmV0dXJuIGF3YWl0IHRoaXMucHJveHlDb21tYW5kKGAvd2RhL2VsZW1lbnQvJHtlbGVtZW50SWR9L3R3b0ZpbmdlclRhcGAsICdQT1NUJyk7XG59O1xuXG5oZWxwZXJzLm1vYmlsZVRvdWNoQW5kSG9sZCA9IGFzeW5jIGZ1bmN0aW9uIG1vYmlsZVRvdWNoQW5kSG9sZCAob3B0cyA9IHt9KSB7XG4gIGNvbnN0IHBhcmFtcyA9IHtcbiAgICBkdXJhdGlvbjogcmVxdWlyZUZsb2F0UGFyYW1ldGVyKCdkdXJhdGlvbicsIG9wdHMuZHVyYXRpb24sICd0b3VjaEFuZEhvbGQnKVxuICB9O1xuICBjb25zdCBlbGVtZW50SWQgPSB0b0VsZW1lbnRJZChvcHRzKTtcbiAgaWYgKGVsZW1lbnRJZCkge1xuICAgIC8vIExvbmcgdGFwIGVsZW1lbnRcbiAgICByZXR1cm4gYXdhaXQgdGhpcy5wcm94eUNvbW1hbmQoYC93ZGEvZWxlbWVudC8ke2VsZW1lbnRJZH0vdG91Y2hBbmRIb2xkYCwgJ1BPU1QnLCBwYXJhbXMpO1xuICB9XG4gIC8vIExvbmcgdGFwIGNvb3JkaW5hdGVzXG4gIHBhcmFtcy54ID0gcmVxdWlyZUZsb2F0UGFyYW1ldGVyKCd4Jywgb3B0cy54LCAndG91Y2hBbmRIb2xkJyk7XG4gIHBhcmFtcy55ID0gcmVxdWlyZUZsb2F0UGFyYW1ldGVyKCd5Jywgb3B0cy55LCAndG91Y2hBbmRIb2xkJyk7XG4gIHJldHVybiBhd2FpdCB0aGlzLnByb3h5Q29tbWFuZCgnL3dkYS90b3VjaEFuZEhvbGQnLCAnUE9TVCcsIHBhcmFtcyk7XG59O1xuXG5oZWxwZXJzLm1vYmlsZVRhcCA9IGFzeW5jIGZ1bmN0aW9uIG1vYmlsZVRhcCAob3B0cyA9IHt9KSB7XG4gIGNvbnN0IHBhcmFtcyA9IHtcbiAgICB4OiByZXF1aXJlRmxvYXRQYXJhbWV0ZXIoJ3gnLCBvcHRzLngsICd0YXAnKSxcbiAgICB5OiByZXF1aXJlRmxvYXRQYXJhbWV0ZXIoJ3knLCBvcHRzLnksICd0YXAnKVxuICB9O1xuICBjb25zdCBlbGVtZW50SWQgPSB0b0VsZW1lbnRJZChvcHRzKSB8fCAnMCc7XG4gIHJldHVybiBhd2FpdCB0aGlzLnByb3h5Q29tbWFuZChgL3dkYS90YXAvJHtlbGVtZW50SWR9YCwgJ1BPU1QnLCBwYXJhbXMpO1xufTtcblxuaGVscGVycy5tb2JpbGVEcmFnRnJvbVRvRm9yRHVyYXRpb24gPSBhc3luYyBmdW5jdGlvbiBtb2JpbGVEcmFnRnJvbVRvRm9yRHVyYXRpb24gKG9wdHMgPSB7fSkge1xuICBjb25zdCBwYXJhbXMgPSB7XG4gICAgZHVyYXRpb246IHJlcXVpcmVGbG9hdFBhcmFtZXRlcignZHVyYXRpb24nLCBvcHRzLmR1cmF0aW9uLCAnZHJhZ0Zyb21Ub0ZvckR1cmF0aW9uJyksXG4gICAgZnJvbVg6IHJlcXVpcmVGbG9hdFBhcmFtZXRlcignZnJvbVgnLCBvcHRzLmZyb21YLCAnZHJhZ0Zyb21Ub0ZvckR1cmF0aW9uJyksXG4gICAgZnJvbVk6IHJlcXVpcmVGbG9hdFBhcmFtZXRlcignZnJvbVknLCBvcHRzLmZyb21ZLCAnZHJhZ0Zyb21Ub0ZvckR1cmF0aW9uJyksXG4gICAgdG9YOiByZXF1aXJlRmxvYXRQYXJhbWV0ZXIoJ3RvWCcsIG9wdHMudG9YLCAnZHJhZ0Zyb21Ub0ZvckR1cmF0aW9uJyksXG4gICAgdG9ZOiByZXF1aXJlRmxvYXRQYXJhbWV0ZXIoJ3RvWScsIG9wdHMudG9ZLCAnZHJhZ0Zyb21Ub0ZvckR1cmF0aW9uJylcbiAgfTtcbiAgY29uc3QgZWxlbWVudElkID0gdG9FbGVtZW50SWQob3B0cyk7XG4gIHJldHVybiBlbGVtZW50SWRcbiAgICAvLyBEcmFnIGVsZW1lbnRcbiAgICA/IGF3YWl0IHRoaXMucHJveHlDb21tYW5kKGAvd2RhL2VsZW1lbnQvJHtlbGVtZW50SWR9L2RyYWdmcm9tdG9mb3JkdXJhdGlvbmAsICdQT1NUJywgcGFyYW1zKVxuICAgIC8vIERyYWcgY29vcmRpbmF0ZXNcbiAgICA6IGF3YWl0IHRoaXMucHJveHlDb21tYW5kKCcvd2RhL2RyYWdmcm9tdG9mb3JkdXJhdGlvbicsICdQT1NUJywgcGFyYW1zKTtcbn07XG5cbmhlbHBlcnMubW9iaWxlVGFwV2l0aE51bWJlck9mVGFwcyA9IGFzeW5jIGZ1bmN0aW9uIG1vYmlsZVRhcFdpdGhOdW1iZXJPZlRhcHMgKG9wdHMgPSB7fSkge1xuICBjb25zdCBlbGVtZW50SWQgPSB0b0VsZW1lbnRJZChvcHRzKTtcbiAgaWYgKCFlbGVtZW50SWQpIHtcbiAgICB0aHJvdyBuZXcgZXJyb3JzLkludmFsaWRBcmd1bWVudEVycm9yKCdFbGVtZW50IGlkIGlzIGV4cGVjdGVkIHRvIGJlIHNldCBmb3IgdGFwV2l0aE51bWJlck9mVGFwcyBtZXRob2QnKTtcbiAgfVxuICBjb25zdCBwYXJhbXMgPSB7XG4gICAgbnVtYmVyT2ZUYXBzOiByZXF1aXJlSW50UGFyYW1ldGVyKCdudW1iZXJPZlRhcHMnLCBvcHRzLm51bWJlck9mVGFwcywgJ3RhcFdpdGhOdW1iZXJPZlRhcHMnKSxcbiAgICBudW1iZXJPZlRvdWNoZXM6IHJlcXVpcmVJbnRQYXJhbWV0ZXIoJ251bWJlck9mVG91Y2hlcycsIG9wdHMubnVtYmVyT2ZUb3VjaGVzLCAndGFwV2l0aE51bWJlck9mVGFwcycpLFxuICB9O1xuICByZXR1cm4gYXdhaXQgdGhpcy5wcm94eUNvbW1hbmQoYC93ZGEvZWxlbWVudC8ke2VsZW1lbnRJZH0vdGFwV2l0aE51bWJlck9mVGFwc2AsICdQT1NUJywgcGFyYW1zKTtcbn07XG5cbmhlbHBlcnMubW9iaWxlRm9yY2VQcmVzcyA9IGFzeW5jIGZ1bmN0aW9uIG1vYmlsZUZvcmNlUHJlc3MgKG9wdHMgPSB7fSkge1xuICBjb25zdCB7eCwgeSwgZHVyYXRpb24sIHByZXNzdXJlfSA9IG9wdHM7XG4gIGNvbnN0IGVsZW1lbnRJZCA9IHRvRWxlbWVudElkKG9wdHMpO1xuICBjb25zdCBlbmRwb2ludCA9IGVsZW1lbnRJZCA/IGAvd2RhL2VsZW1lbnQvJHtlbGVtZW50SWR9L2ZvcmNlVG91Y2hgIDogYC93ZGEvZm9yY2VUb3VjaGA7XG4gIHJldHVybiBhd2FpdCB0aGlzLnByb3h5Q29tbWFuZChlbmRwb2ludCwgJ1BPU1QnLCB7eCwgeSwgZHVyYXRpb24sIHByZXNzdXJlfSk7XG59O1xuXG5oZWxwZXJzLm1vYmlsZVNlbGVjdFBpY2tlcldoZWVsVmFsdWUgPSBhc3luYyBmdW5jdGlvbiBtb2JpbGVTZWxlY3RQaWNrZXJXaGVlbFZhbHVlIChvcHRzID0ge30pIHtcbiAgY29uc3QgZWxlbWVudElkID0gdG9FbGVtZW50SWQob3B0cyk7XG4gIGlmICghZWxlbWVudElkKSB7XG4gICAgdGhyb3cgbmV3IGVycm9ycy5JbnZhbGlkQXJndW1lbnRFcnJvcignRWxlbWVudCBpZCBpcyBleHBlY3RlZCB0byBiZSBzZXQgZm9yIHNlbGVjdFBpY2tlcldoZWVsVmFsdWUgbWV0aG9kJyk7XG4gIH1cbiAgaWYgKCFfLmlzU3RyaW5nKG9wdHMub3JkZXIpIHx8ICFbJ25leHQnLCAncHJldmlvdXMnXS5pbmNsdWRlcyhvcHRzLm9yZGVyLnRvTG93ZXJDYXNlKCkpKSB7XG4gICAgdGhyb3cgbmV3IGVycm9ycy5JbnZhbGlkQXJndW1lbnRFcnJvcihgVGhlIG1hbmRhdG9yeSAnb3JkZXInIHBhcmFtZXRlciBpcyBleHBlY3RlZCB0byBiZSBlcXVhbCBlaXRoZXIgdG8gJ25leHQnIG9yICdwcmV2aW91cycuIGAgK1xuICAgICAgYCcke29wdHMub3JkZXJ9JyBpcyBnaXZlbiBpbnN0ZWFkYCk7XG4gIH1cbiAgY29uc3QgcGFyYW1zID0ge29yZGVyOiBvcHRzLm9yZGVyfTtcbiAgaWYgKG9wdHMub2Zmc2V0KSB7XG4gICAgcGFyYW1zLm9mZnNldCA9IHJlcXVpcmVGbG9hdFBhcmFtZXRlcignb2Zmc2V0Jywgb3B0cy5vZmZzZXQsICdzZWxlY3RQaWNrZXJXaGVlbFZhbHVlJyk7XG4gIH1cbiAgcmV0dXJuIGF3YWl0IHRoaXMucHJveHlDb21tYW5kKGAvd2RhL3BpY2tlcndoZWVsLyR7ZWxlbWVudElkfS9zZWxlY3RgLCAnUE9TVCcsIHBhcmFtcyk7XG59O1xuXG5oZWxwZXJzLm1vYmlsZVJvdGF0ZUVsZW1lbnQgPSBhc3luYyBmdW5jdGlvbiBtb2JpbGVSb3RhdGVFbGVtZW50IChvcHRzID0ge30pIHtcbiAgY29uc3QgZWxlbWVudElkID0gdG9FbGVtZW50SWQob3B0cyk7XG4gIGlmICghZWxlbWVudElkKSB7XG4gICAgdGhyb3cgbmV3IGVycm9ycy5JbnZhbGlkQXJndW1lbnRFcnJvcignRWxlbWVudCBpZCBpcyBleHBlY3RlZCB0byBiZSBzZXQgZm9yIHJvdGF0ZUVsZW1lbnQgbWV0aG9kJyk7XG4gIH1cbiAgY29uc3QgcGFyYW1zID0ge1xuICAgIHJvdGF0aW9uOiByZXF1aXJlRmxvYXRQYXJhbWV0ZXIoJ3JvdGF0aW9uJywgb3B0cy5yb3RhdGlvbiwgJ3JvdGF0ZUVsZW1lbnQnKSxcbiAgICB2ZWxvY2l0eTogcmVxdWlyZUZsb2F0UGFyYW1ldGVyKCd2ZWxvY2l0eScsIG9wdHMudmVsb2NpdHksICdyb3RhdGVFbGVtZW50JyksXG4gIH07XG4gIHJldHVybiBhd2FpdCB0aGlzLnByb3h5Q29tbWFuZChgL3dkYS9lbGVtZW50LyR7ZWxlbWVudElkfS9yb3RhdGVgLCAnUE9TVCcsIHBhcmFtcyk7XG59O1xuXG5oZWxwZXJzLmdldENvb3JkaW5hdGVzID0gYXN5bmMgZnVuY3Rpb24gZ2V0Q29vcmRpbmF0ZXMgKGdlc3R1cmUpIHtcbiAgLy8gZGVmYXVsdHNcbiAgbGV0IGNvb3JkaW5hdGVzID0ge3g6IDAsIHk6IDAsIGFyZU9mZnNldHM6IGZhbHNlfTtcblxuICBsZXQgb3B0aW9uWCA9IG51bGw7XG4gIGlmIChnZXN0dXJlLm9wdGlvbnMueCkge1xuICAgIG9wdGlvblggPSByZXF1aXJlRmxvYXRQYXJhbWV0ZXIoJ3gnLCBnZXN0dXJlLm9wdGlvbnMueCwgJ2dldENvb3JkaW5hdGVzJyk7XG4gIH1cbiAgbGV0IG9wdGlvblkgPSBudWxsO1xuICBpZiAoZ2VzdHVyZS5vcHRpb25zLnkpIHtcbiAgICBvcHRpb25ZID0gcmVxdWlyZUZsb2F0UGFyYW1ldGVyKCd5JywgZ2VzdHVyZS5vcHRpb25zLnksICdnZXRDb29yZGluYXRlcycpO1xuICB9XG5cbiAgLy8gZmlndXJlIG91dCB0aGUgZWxlbWVudCBjb29yZGluYXRlcy5cbiAgY29uc3QgZWxlbWVudElkID0gdG9FbGVtZW50SWQoZ2VzdHVyZS5vcHRpb25zKTtcbiAgaWYgKGVsZW1lbnRJZCkge1xuICAgIGxldCByZWN0ID0gYXdhaXQgdGhpcy5nZXRFbGVtZW50UmVjdChlbGVtZW50SWQpO1xuICAgIGxldCBwb3MgPSB7eDogcmVjdC54LCB5OiByZWN0Lnl9O1xuICAgIGxldCBzaXplID0ge3c6IHJlY3Qud2lkdGgsIGg6IHJlY3QuaGVpZ2h0fTtcblxuICAgIC8vIGRlZmF1bHRzXG4gICAgbGV0IG9mZnNldFggPSAwO1xuICAgIGxldCBvZmZzZXRZID0gMDtcblxuICAgIC8vIGdldCB0aGUgcmVhbCBvZmZzZXRzXG4gICAgaWYgKG9wdGlvblggfHwgb3B0aW9uWSkge1xuICAgICAgb2Zmc2V0WCA9IChvcHRpb25YIHx8IDApO1xuICAgICAgb2Zmc2V0WSA9IChvcHRpb25ZIHx8IDApO1xuICAgIH0gZWxzZSB7XG4gICAgICBvZmZzZXRYID0gKHNpemUudyAvIDIpO1xuICAgICAgb2Zmc2V0WSA9IChzaXplLmggLyAyKTtcbiAgICB9XG5cbiAgICAvLyBhcHBseSB0aGUgb2Zmc2V0c1xuICAgIGNvb3JkaW5hdGVzLnggPSBwb3MueCArIG9mZnNldFg7XG4gICAgY29vcmRpbmF0ZXMueSA9IHBvcy55ICsgb2Zmc2V0WTtcbiAgfSBlbHNlIHtcbiAgICAvLyBtb3ZlVG8gY29vcmRpbmF0ZXMgYXJlIHBhc3NlZCBpbiBhcyBvZmZzZXRzXG4gICAgY29vcmRpbmF0ZXMuYXJlT2Zmc2V0cyA9IChnZXN0dXJlLmFjdGlvbiA9PT0gJ21vdmVUbycpO1xuICAgIGNvb3JkaW5hdGVzLnggPSAob3B0aW9uWCB8fCAwKTtcbiAgICBjb29yZGluYXRlcy55ID0gKG9wdGlvblkgfHwgMCk7XG4gIH1cbiAgcmV0dXJuIGNvb3JkaW5hdGVzO1xufTtcblxuaGVscGVycy5hcHBseU1vdmVUb09mZnNldCA9IGZ1bmN0aW9uIGFwcGx5TW92ZVRvT2Zmc2V0IChmaXJzdENvb3JkaW5hdGVzLCBzZWNvbmRDb29yZGluYXRlcykge1xuICBpZiAoc2Vjb25kQ29vcmRpbmF0ZXMuYXJlT2Zmc2V0cykge1xuICAgIHJldHVybiB7XG4gICAgICB4OiBmaXJzdENvb3JkaW5hdGVzLnggKyBzZWNvbmRDb29yZGluYXRlcy54LFxuICAgICAgeTogZmlyc3RDb29yZGluYXRlcy55ICsgc2Vjb25kQ29vcmRpbmF0ZXMueSxcbiAgICB9O1xuICB9IGVsc2Uge1xuICAgIHJldHVybiBzZWNvbmRDb29yZGluYXRlcztcbiAgfVxufTtcblxuT2JqZWN0LmFzc2lnbihleHRlbnNpb25zLCBoZWxwZXJzLCBjb21tYW5kcyk7XG5leHBvcnQgeyBleHRlbnNpb25zLCBoZWxwZXJzLCBjb21tYW5kcywgZ2VzdHVyZXNDaGFpblRvU3RyaW5nIH07XG5leHBvcnQgZGVmYXVsdCBleHRlbnNpb25zO1xuIl0sIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7Ozs7O0FBQUE7O0FBQ0E7O0FBQ0E7O0FBQ0E7O0FBRUEsTUFBTUEsNEJBQTRCLEdBQUcsQ0FBQyxJQUFELEVBQU8sTUFBUCxFQUFlLE1BQWYsRUFBdUIsT0FBdkIsQ0FBckM7QUFFQSxNQUFNQyxPQUFPLEdBQUcsRUFBaEI7QUFBQSxNQUFvQkMsVUFBVSxHQUFHLEVBQWpDO0FBQUEsTUFBcUNDLFFBQVEsR0FBRyxFQUFoRDs7Ozs7QUFFQSxTQUFTQyxXQUFULENBQXNCQyxJQUFJLEdBQUcsRUFBN0IsRUFBaUM7RUFDL0IsSUFBSUEsSUFBSSxDQUFDQyxPQUFULEVBQWtCO0lBQ2hCQyxlQUFBLENBQUlDLElBQUosQ0FBVSwrRUFBVjtFQUNEOztFQUNELE1BQU1DLEVBQUUsR0FBR0osSUFBSSxDQUFDSyxTQUFMLElBQWtCTCxJQUFJLENBQUNDLE9BQWxDO0VBQ0EsT0FBT0csRUFBRSxHQUFHRSxhQUFBLENBQUtDLGFBQUwsQ0FBbUJILEVBQW5CLENBQUgsR0FBNEIsSUFBckM7QUFDRDs7QUFFRCxlQUFlSSx3QkFBZixDQUF5Q0MsTUFBekMsRUFBaURULElBQUksR0FBRyxFQUF4RCxFQUE0RDtFQUMxRCxPQUFPRCxXQUFXLENBQUNDLElBQUQsQ0FBWCxJQUNGTSxhQUFBLENBQUtDLGFBQUwsQ0FBbUIsTUFBTUUsTUFBTSxDQUFDQywyQkFBUCxDQUFvQyxZQUFwQyxFQUFrRCw0QkFBbEQsRUFBK0UsS0FBL0UsQ0FBekIsQ0FETDtBQUVEOztBQUVEWixRQUFRLENBQUNhLE1BQVQsR0FBa0IsZUFBZUEsTUFBZixDQUF1QlAsRUFBdkIsRUFBMkJRLE9BQU8sR0FBRyxDQUFyQyxFQUF3Q0MsT0FBTyxHQUFHLENBQWxELEVBQXFEO0VBQ3JFVCxFQUFFLEdBQUdFLGFBQUEsQ0FBS0Ms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
@@ -75,6 +75,7 @@ extensions.executeMobile = async function executeMobile (mobileCommand, opts = {
75
75
  // https://developer.apple.com/documentation/xctest/xcuielement/1618665-rotate?language=objc
76
76
  rotateElement: 'mobileRotateElement',
77
77
  forcePress: 'mobileForcePress',
78
+ scrollToElement: 'mobileScrollToElement',
78
79
 
79
80
  //endregion gestures support
80
81
  alert: 'mobileHandleAlert',
@@ -181,6 +181,14 @@ commands.nativeClick = async function nativeClick (el) {
181
181
  * all XCTest gestures
182
182
  */
183
183
 
184
+ commands.mobileScrollToElement = async function mobileScrollToElement (opts = {}) {
185
+ const elementId = await toElementId(opts);
186
+ if (!elementId) {
187
+ throw new errors.InvalidArgumentError('Element id must be provided');
188
+ }
189
+ return await this.proxyCommand(`/wda/element/${elementId}/scrollTo`, 'POST', {});
190
+ };
191
+
184
192
  helpers.mobileScroll = async function mobileScroll (opts = {}) {
185
193
  // WDA supports four scrolling strategies: predication based on name, direction,
186
194
  // predicateString, and toVisible, in that order