appium-xcuitest-driver 4.5.0 → 4.7.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +28 -0
- package/build/lib/commands/execute.js +3 -1
- package/build/lib/commands/gesture.js +28 -1
- package/lib/commands/execute.js +2 -0
- package/lib/commands/gesture.js +15 -0
- package/npm-shrinkwrap.json +40958 -0
- package/package.json +3 -5
package/README.md
CHANGED
|
@@ -1300,6 +1300,34 @@ e = @driver.find_element :id, 'target element'
|
|
|
1300
1300
|
#### Reference
|
|
1301
1301
|
[tapWithNumberOfTaps:numberOfTouches:](https://developer.apple.com/documentation/xctest/xcuielement/1618671-tapwithnumberoftaps)
|
|
1302
1302
|
|
|
1303
|
+
### mobile: forcePress
|
|
1304
|
+
|
|
1305
|
+
Emulates force press on the given element/coordinates.
|
|
1306
|
+
An error is thrown if the target device does not support force press gesture.
|
|
1307
|
+
|
|
1308
|
+
#### Arguments
|
|
1309
|
+
|
|
1310
|
+
Name | Type | Required | Description | Example
|
|
1311
|
+
--- | --- | --- | --- | ---
|
|
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
|
+
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
|
+
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
|
+
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
|
+
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
|
+
|
|
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
|
+
|
|
1303
1331
|
### mobile: resetLocationService
|
|
1304
1332
|
|
|
1305
1333
|
Reset the location service on real device since Appium 1.22.0.
|
|
@@ -73,6 +73,8 @@ extensions.executeMobile = async function executeMobile(mobileCommand, opts = {}
|
|
|
73
73
|
touchAndHold: 'mobileTouchAndHold',
|
|
74
74
|
dragFromToForDuration: 'mobileDragFromToForDuration',
|
|
75
75
|
rotateElement: 'mobileRotateElement',
|
|
76
|
+
forcePress: 'mobileForcePress',
|
|
77
|
+
scrollToElement: 'mobileScrollToElement',
|
|
76
78
|
alert: 'mobileHandleAlert',
|
|
77
79
|
setPasteboard: 'mobileSetPasteboard',
|
|
78
80
|
getPasteboard: 'mobileGetPasteboard',
|
|
@@ -138,4 +140,4 @@ var _default = extensions;
|
|
|
138
140
|
exports.default = _default;require('source-map-support').install();
|
|
139
141
|
|
|
140
142
|
|
|
141
|
-
//# sourceMappingURL=data:application/json;charset=utf8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibGliL2NvbW1hbmRzL2V4ZWN1dGUuanMiLCJuYW1lcyI6WyJleHRlbnNpb25zIiwicmVjZWl2ZUFzeW5jUmVzcG9uc2UiLCJzdGF0dXMiLCJ2YWx1ZSIsImxvZyIsImRlYnVnIiwiSlNPTiIsInN0cmluZ2lmeSIsInV0aWwiLCJoYXNWYWx1ZSIsImFzeW5jUHJvbWlzZSIsIndhcm4iLCJyZWplY3QiLCJlcnJvckZyb21Db2RlIiwibWVzc2FnZSIsIl8iLCJpc1N0cmluZyIsImVycm9yIiwiZXJyb3JGcm9tVzNDSnNvbkNvZGUiLCJzdGFja3RyYWNlIiwicmVzb2x2ZSIsImV4ZWN1dGUiLCJzY3JpcHQiLCJhcmdzIiwibWF0Y2giLCJyZXBsYWNlIiwidHJpbSIsImV4ZWN1dGVNb2JpbGUiLCJpc0FycmF5IiwiaXNXZWJDb250ZXh0IiwiY29udmVydEVsZW1lbnRzRm9yQXRvbXMiLCJyZXN1bHQiLCJleGVjdXRlQXRvbSIsImNhY2hlV2ViRWxlbWVudHMiLCJlcnJvcnMiLCJOb3RJbXBsZW1lbnRlZEVycm9yIiwiZXhlY3V0ZUFzeW5jIiwiYXN5bmNXYWl0TXMiLCJwcm9taXNlIiwicmVtb3RlIiwiZXhlY3V0ZUF0b21Bc3luYyIsImN1cldlYkZyYW1lcyIsIndhaXRGb3JBdG9tIiwibW9iaWxlQ29tbWFuZCIsIm9wdHMiLCJjb21tYW5kTWFwIiwidGFwIiwic2Nyb2xsIiwic2VsZWN0UGlja2VyV2hlZWxWYWx1ZSIsInN3aXBlIiwicGluY2giLCJkb3VibGVUYXAiLCJ0d29GaW5nZXJUYXAiLCJ0YXBXaXRoTnVtYmVyT2ZUYXBzIiwidG91Y2hBbmRIb2xkIiwiZHJhZ0Zyb21Ub0ZvckR1cmF0aW9uIiwicm90YXRlRWxlbWVudCIsImFsZXJ0Iiwic2V0UGFzdGVib2FyZCIsImdldFBhc3RlYm9hcmQiLCJzb3VyY2UiLCJnZXRDb250ZXh0cyIsImluc3RhbGxBcHAiLCJpc0FwcEluc3RhbGxlZCIsInJlbW92ZUFwcCIsImxhdW5jaEFwcCIsInRlcm1pbmF0ZUFwcCIsImtpbGxBcHAiLCJxdWVyeUFwcFN0YXRlIiwiYWN0aXZhdGVBcHAiLCJsaXN0QXBwcyIsInZpZXdwb3J0U2NyZWVuc2hvdCIsInZpZXdwb3J0UmVjdCIsInN0YXJ0UGVyZlJlY29yZCIsInN0b3BQZXJmUmVjb3JkIiwiaW5zdGFsbENlcnRpZmljYXRlIiwic3RhcnRMb2dzQnJvYWRjYXN0Iiwic3RvcExvZ3NCcm9hZGNhc3QiLCJiYXR0ZXJ5SW5mbyIsImRldmljZUluZm8iLCJnZXREZXZpY2VUaW1lIiwiYWN0aXZlQXBwSW5mbyIsImRldmljZVNjcmVlbkluZm8iLCJwcmVzc0J1dHRvbiIsImVucm9sbEJpb21ldHJpYyIsInNlbmRCaW9tZXRyaWNNYXRjaCIsImlzQmlvbWV0cmljRW5yb2xsZWQiLCJjbGVhcktleWNoYWlucyIsImdldFBlcm1pc3Npb24iLCJzZXRQZXJtaXNzaW9uIiwicmVzZXRQZXJtaXNzaW9uIiwiZ2V0QXBwZWFyYW5jZSIsInNldEFwcGVhcmFuY2UiLCJzaXJpQ29tbWFuZCIsImRlbGV0ZUZpbGUiLCJkZWxldGVGb2xkZXIiLCJzdGFydEF1ZGlvUmVjb3JkaW5nIiwic3RvcEF1ZGlvUmVjb3JkaW5nIiwicnVuWENUZXN0IiwiaW5zdGFsbFhDVGVzdEJ1bmRsZSIsImxpc3RYQ1Rlc3RCdW5kbGVzIiwibGlzdFhDVGVzdHNJblRlc3RCdW5kbGUiLCJwdXNoTm90aWZpY2F0aW9uIiwiZXhwZWN0Tm90aWZpY2F0aW9uIiwicGVyZm9ybUlvSGlkRXZlbnQiLCJjb25maWd1cmVMb2NhbGl6YXRpb24iLCJyZXNldExvY2F0aW9uU2VydmljZSIsInN0YXJ0UGNhcCIsInN0b3BQY2FwIiwiaGFzIiwiVW5rbm93bkNvbW1hbmRFcnJvciIsImtleXMiLCJqb2luIl0sInNvdXJjZVJvb3QiOiIuLi8uLi8uLiIsInNvdXJjZXMiOlsibGliL2NvbW1hbmRzL2V4ZWN1dGUuanMiXSwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IF8gZnJvbSAnbG9kYXNoJztcbmltcG9ydCB7XG4gIGVycm9ycywgZXJyb3JGcm9tQ29kZSwgZXJyb3JGcm9tVzNDSnNvbkNvZGVcbn0gZnJvbSAnYXBwaXVtL2RyaXZlcic7XG5pbXBvcnQgeyB1dGlsIH0gZnJvbSAnYXBwaXVtL3N1cHBvcnQnO1xuXG5jb25zdCBleHRlbnNpb25zID0ge307XG5cbmV4dGVuc2lvbnMucmVjZWl2ZUFzeW5jUmVzcG9uc2UgPSBhc3luYyBmdW5jdGlvbiByZWNlaXZlQXN5bmNSZXNwb25zZSAoc3RhdHVzLCB2YWx1ZSkgeyAvLyBlc2xpbnQtZGlzYWJsZS1saW5lIHJlcXVpcmUtYXdhaXRcbiAgdGhpcy5sb2cuZGVidWcoYFJlY2VpdmVkIGFzeW5jIHJlc3BvbnNlOiAke0pTT04uc3RyaW5naWZ5KHZhbHVlKX1gKTtcbiAgaWYgKCF1dGlsLmhhc1ZhbHVlKHRoaXMuYXN5bmNQcm9taXNlKSkge1xuICAgIHRoaXMubG9nLndhcm4oYFJlY2VpdmVkIGFzeW5jIHJlc3BvbnNlIHdoZW4gd2Ugd2VyZSBub3QgZXhwZWN0aW5nIG9uZSEgYCArXG4gICAgICBgUmVzcG9uc2Ugd2FzOiAke0pTT04uc3RyaW5naWZ5KHZhbHVlKX1gKTtcbiAgICByZXR1cm47XG4gIH1cblxuICBpZiAodXRpbC5oYXNWYWx1ZShzdGF0dXMpICYmIHN0YXR1cyAhPT0gMCkge1xuICAgIC8vIE1KU09OV1BcbiAgICByZXR1cm4gdGhpcy5hc3luY1Byb21pc2UucmVqZWN0KGVycm9yRnJvbUNvZGUoc3RhdHVzLCB2YWx1ZS5tZXNzYWdlKSk7XG4gIH1cbiAgaWYgKCF1dGlsLmhhc1ZhbHVlKHN0YXR1cykgJiYgdmFsdWUgJiYgXy5pc1N0cmluZyh2YWx1ZS5lcnJvcikpIHtcbiAgICAvLyBXM0NcbiAgICByZXR1cm4gdGhpcy5hc3luY1Byb21pc2UucmVqZWN0KGVycm9yRnJvbVczQ0pzb25Db2RlKHZhbHVlLmVycm9yLCB2YWx1ZS5tZXNzYWdlLCB2YWx1ZS5zdGFja3RyYWNlKSk7XG4gIH1cbiAgcmV0dXJuIHRoaXMuYXN5bmNQcm9taXNlLnJlc29sdmUodmFsdWUpO1xufTtcblxuZXh0ZW5zaW9ucy5leGVjdXRlID0gYXN5bmMgZnVuY3Rpb24gZXhlY3V0ZSAoc2NyaXB0LCBhcmdzKSB7XG4gIGlmIChzY3JpcHQubWF0Y2goL15tb2JpbGU6LykpIHtcbiAgICBzY3JpcHQgPSBzY3JpcHQucmVwbGFjZSgvXm1vYmlsZTovLCAnJykudHJpbSgpO1xuICAgIHJldHVybiBhd2FpdCB0aGlzLmV4ZWN1dGVNb2JpbGUoc2NyaXB0LCBfLmlzQXJyYXkoYXJncykgPyBhcmdzWzBdIDogYXJncyk7XG4gIH0gZWxzZSBpZiAodGhpcy5pc1dlYkNvbnRleHQoKSkge1xuICAgIGFyZ3MgPSB0aGlzLmNvbnZlcnRFbGVtZW50c0ZvckF0b21zKGFyZ3MpO1xuICAgIGNvbnN0IHJlc3VsdCA9IGF3YWl0IHRoaXMuZXhlY3V0ZUF0b20oJ2V4ZWN1dGVfc2NyaXB0JywgW3NjcmlwdCwgYXJnc10pO1xuICAgIHJldHVybiB0aGlzLmNhY2hlV2ViRWxlbWVudHMocmVzdWx0KTtcbiAgfSBlbHNlIHtcbiAgICB0aHJvdyBuZXcgZXJyb3JzLk5vdEltcGxlbWVudGVkRXJyb3IoKTtcbiAgfVxufTtcblxuZXh0ZW5zaW9ucy5leGVjdXRlQXN5bmMgPSBhc3luYyBmdW5jdGlvbiBleGVjdXRlQXN5bmMgKHNjcmlwdCwgYXJncykge1xuICBpZiAoIXRoaXMuaXNXZWJDb250ZXh0KCkpIHtcbiAgICB0aHJvdyBuZXcgZXJyb3JzLk5vdEltcGxlbWVudGVkRXJyb3IoKTtcbiAgfVxuXG4gIGFyZ3MgPSB0aGlzLmNvbnZlcnRFbGVtZW50c0ZvckF0b21zKGFyZ3MpO1xuICB0aGlzLmFzeW5jV2FpdE1zID0gdGhpcy5hc3luY1dhaXRNcyB8fCAwO1xuICBjb25zdCBwcm9taXNlID0gdGhpcy5yZW1vdGUuZXhlY3V0ZUF0b21Bc3luYygnZXhlY3V0ZV9hc3luY19zY3JpcHQnLCBbc2NyaXB0LCBhcmdzLCB0aGlzLmFzeW5jV2FpdE1zXSwgdGhpcy5jdXJXZWJGcmFtZXMpO1xuICByZXR1cm4gYXdhaXQgdGhpcy53YWl0Rm9yQXRvbShwcm9taXNlKTtcbn07XG5cbmV4dGVuc2lvbnMuZXhlY3V0ZU1vYmlsZSA9IGFzeW5jIGZ1bmN0aW9uIGV4ZWN1dGVNb2JpbGUgKG1vYmlsZUNvbW1hbmQsIG9wdHMgPSB7fSkge1xuICBjb25zdCBjb21tYW5kTWFwID0ge1xuICAgIC8vcmVnaW9uIGdlc3R1cmVzIHN1cHBvcnRcbiAgICB0YXA6ICdtb2JpbGVUYXAnLFxuICAgIHNjcm9sbDogJ21vYmlsZVNjcm9sbCcsXG4gICAgc2VsZWN0UGlja2VyV2hlZWxWYWx1ZTogJ21vYmlsZVNlbGVjdFBpY2tlcldoZWVsVmFsdWUnLFxuICAgIC8vIGh0dHBzOi8vZGV2ZWxvcGVyLmFwcGxlLmNvbS9kb2N1bWVudGF0aW9uL3hjdGVzdC94Y3VpZWxlbWVudC8xNjE4NjY4LXN3aXBlbGVmdD9sYW5ndWFnZT1vYmpjXG4gICAgLy8gaHR0cHM6Ly9kZXZlbG9wZXIuYXBwbGUuY29tL2RvY3VtZW50YXRpb24veGN0ZXN0L3hjdWllbGVtZW50LzE2MTg2NzQtc3dpcGVyaWdodD9sYW5ndWFnZT1vYmpjXG4gICAgLy8gaHR0cHM6Ly9kZXZlbG9wZXIuYXBwbGUuY29tL2RvY3VtZW50YXRpb24veGN0ZXN0L3hjdWllbGVtZW50LzE2MTg2Njctc3dpcGV1cD9sYW5ndWFnZT1vYmpjXG4gICAgLy8gaHR0cHM6Ly9kZXZlbG9wZXIuYXBwbGUuY29tL2RvY3VtZW50YXRpb24veGN0ZXN0L3hjdWllbGVtZW50LzE2MTg2NjQtc3dpcGVkb3duP2xhbmd1YWdlPW9iamNcbiAgICBzd2lwZTogJ21vYmlsZVN3aXBlJyxcbiAgICAvLyBodHRwczovL2RldmVsb3Blci5hcHBsZS5jb20vZG9jdW1lbnRhdGlvbi94Y3Rlc3QveGN1aWVsZW1lbnQvMTYxODY2OS1waW5jaHdpdGhzY2FsZT9sYW5ndWFnZT1vYmpjXG4gICAgcGluY2g6ICdtb2JpbGVQaW5jaCcsXG4gICAgLy8gaHR0cHM6Ly9kZXZlbG9wZXIuYXBwbGUuY29tL2RvY3VtZW50YXRpb24veGN0ZXN0L3hjdWllbGVtZW50LzE2MTg2NzMtZG91YmxldGFwP2xhbmd1YWdlPW9iamNcbiAgICBkb3VibGVUYXA6ICdtb2JpbGVEb3VibGVUYXAnLFxuICAgIC8vIGh0dHBzOi8vZGV2ZWxvcGVyLmFwcGxlLmNvbS9kb2N1bWVudGF0aW9uL3hjdGVzdC94Y3VpZWxlbWVudC8xNjE4Njc1LXR3b2ZpbmdlcnRhcD9sYW5ndWFnZT1vYmpjXG4gICAgdHdvRmluZ2VyVGFwOiAnbW9iaWxlVHdvRmluZ2VyVGFwJyxcbiAgICAvLyBodHRwczovL2RldmVsb3Blci5hcHBsZS5jb20vZG9jdW1lbnRhdGlvbi94Y3Rlc3QveGN1aWVsZW1lbnQvMTYxODY3MS10YXB3aXRobnVtYmVyb2Z0YXBzP2xhbmd1YWdlPW9iamNcbiAgICB0YXBXaXRoTnVtYmVyT2ZUYXBzOiAnbW9iaWxlVGFwV2l0aE51bWJlck9mVGFwcycsXG4gICAgLy8gaHR0cHM6Ly9kZXZlbG9wZXIuYXBwbGUuY29tL2RvY3VtZW50YXRpb24veGN0ZXN0L3hjdWllbGVtZW50LzE2MTg2NjMtcHJlc3Nmb3JkdXJhdGlvbj9sYW5ndWFnZT1vYmpjXG4gICAgdG91Y2hBbmRIb2xkOiAnbW9iaWxlVG91Y2hBbmRIb2xkJyxcbiAgICAvLyBodHRwczovL2RldmVsb3Blci5hcHBsZS5jb20vZG9jdW1lbnRhdGlvbi94Y3Rlc3QveGN1aWVsZW1lbnQvMTYxODY3MC1wcmVzc2ZvcmR1cmF0aW9uP2xhbmd1YWdlPW9iamNcbiAgICBkcmFnRnJvbVRvRm9yRHVyYXRpb246ICdtb2JpbGVEcmFnRnJvbVRvRm9yRHVyYXRpb24nLFxuICAgIC8vIGh0dHBzOi8vZGV2ZWxvcGVyLmFwcGxlLmNvbS9kb2N1bWVudGF0aW9uL3hjdGVzdC94Y3VpZWxlbWVudC8xNjE4NjY1LXJvdGF0ZT9sYW5ndWFnZT1vYmpjXG4gICAgcm90YXRlRWxlbWVudDogJ21vYmlsZVJvdGF0ZUVsZW1lbnQnLFxuXG4gICAgLy9lbmRyZWdpb24gZ2VzdHVyZXMgc3VwcG9ydFxuICAgIGFsZXJ0OiAnbW9iaWxlSGFuZGxlQWxlcnQnLFxuXG4gICAgc2V0UGFzdGVib2FyZDogJ21vYmlsZVNldFBhc3RlYm9hcmQnLFxuICAgIGdldFBhc3RlYm9hcmQ6ICdtb2JpbGVHZXRQYXN0ZWJvYXJkJyxcblxuICAgIHNvdXJjZTogJ21vYmlsZUdldFNvdXJjZScsXG4gICAgZ2V0Q29udGV4dHM6ICdtb2JpbGVHZXRDb250ZXh0cycsXG5cbiAgICAvL3JlZ2lvbiBtdWx0aXBsZSBhcHBzIG1hbmFnZW1lbnRcbiAgICBpbnN0YWxsQXBwOiAnbW9iaWxlSW5zdGFsbEFwcCcsXG4gICAgaXNBcHBJbnN0YWxsZWQ6ICdtb2JpbGVJc0FwcEluc3RhbGxlZCcsXG4gICAgcmVtb3ZlQXBwOiAnbW9iaWxlUmVtb3ZlQXBwJyxcbiAgICBsYXVuY2hBcHA6ICdtb2JpbGVMYXVuY2hBcHAnLFxuICAgIHRlcm1pbmF0ZUFwcDogJ21vYmlsZVRlcm1pbmF0ZUFwcCcsXG4gICAga2lsbEFwcDogJ21vYmlsZUtpbGxBcHAnLFxuICAgIHF1ZXJ5QXBwU3RhdGU6ICdtb2JpbGVRdWVyeUFwcFN0YXRlJyxcbiAgICBhY3RpdmF0ZUFwcDogJ21vYmlsZUFjdGl2YXRlQXBwJyxcbiAgICBsaXN0QXBwczogJ21vYmlsZUxpc3RBcHBzJyxcbiAgICAvL2VuZHJlZ2lvbiBtdWx0aXBsZSBhcHBzIG1hbmFnZW1lbnRcblxuICAgIHZpZXdwb3J0U2NyZWVuc2hvdDogJ2dldFZpZXdwb3J0U2NyZWVuc2hvdCcsXG4gICAgdmlld3BvcnRSZWN0OiAnZ2V0Vmlld3BvcnRSZWN0JyxcblxuICAgIHN0YXJ0UGVyZlJlY29yZDogJ21vYmlsZVN0YXJ0UGVyZlJlY29yZCcsXG4gICAgc3RvcFBlcmZSZWNvcmQ6ICdtb2JpbGVTdG9wUGVyZlJlY29yZCcsXG5cbiAgICBpbnN0YWxsQ2VydGlmaWNhdGU6ICdtb2JpbGVJbnN0YWxsQ2VydGlmaWNhdGUnLFxuXG4gICAgc3RhcnRMb2dzQnJvYWRjYXN0OiAnbW9iaWxlU3RhcnRMb2dzQnJvYWRjYXN0JyxcbiAgICBzdG9wTG9nc0Jyb2FkY2FzdDogJ21vYmlsZVN0b3BMb2dzQnJvYWRjYXN0JyxcblxuICAgIGJhdHRlcnlJbmZvOiAnbW9iaWxlR2V0QmF0dGVyeUluZm8nLFxuICAgIGRldmljZUluZm86ICdtb2JpbGVHZXREZXZpY2VJbmZvJyxcbiAgICBnZXREZXZpY2VUaW1lOiAnbW9iaWxlR2V0RGV2aWNlVGltZScsXG4gICAgYWN0aXZlQXBwSW5mbzogJ21vYmlsZUdldEFjdGl2ZUFwcEluZm8nLFxuICAgIGRldmljZVNjcmVlbkluZm86ICdnZXRTY3JlZW5JbmZvJyxcblxuICAgIHByZXNzQnV0dG9uOiAnbW9iaWxlUHJlc3NCdXR0b24nLFxuXG4gICAgZW5yb2xsQmlvbWV0cmljOiAnbW9iaWxlRW5yb2xsQmlvbWV0cmljJyxcbiAgICBzZW5kQmlvbWV0cmljTWF0Y2g6ICdtb2JpbGVTZW5kQmlvbWV0cmljTWF0Y2gnLFxuICAgIGlzQmlvbWV0cmljRW5yb2xsZWQ6ICdtb2JpbGVJc0Jpb21ldHJpY0Vucm9sbGVkJyxcblxuICAgIGNsZWFyS2V5Y2hhaW5zOiAnbW9iaWxlQ2xlYXJLZXljaGFpbnMnLFxuXG4gICAgZ2V0UGVybWlzc2lvbjogJ21vYmlsZUdldFBlcm1pc3Npb24nLFxuICAgIHNldFBlcm1pc3Npb246ICdtb2JpbGVTZXRQZXJtaXNzaW9ucycsXG4gICAgcmVzZXRQZXJtaXNzaW9uOiAnbW9iaWxlUmVzZXRQZXJtaXNzaW9uJyxcblxuICAgIGdldEFwcGVhcmFuY2U6ICdtb2JpbGVHZXRBcHBlYXJhbmNlJyxcbiAgICBzZXRBcHBlYXJhbmNlOiAnbW9iaWxlU2V0QXBwZWFyYW5jZScsXG5cbiAgICBzaXJpQ29tbWFuZDogJ21vYmlsZVNpcmlDb21tYW5kJyxcblxuICAgIGRlbGV0ZUZpbGU6ICdtb2JpbGVEZWxldGVGaWxlJyxcbiAgICBkZWxldGVGb2xkZXI6ICdtb2JpbGVEZWxldGVGb2xkZXInLFxuXG4gICAgc3RhcnRBdWRpb1JlY29yZGluZzogJ3N0YXJ0QXVkaW9SZWNvcmRpbmcnLFxuICAgIHN0b3BBdWRpb1JlY29yZGluZzogJ3N0b3BBdWRpb1JlY29yZGluZycsXG5cbiAgICAvLyBYQ1Rlc3RcbiAgICBydW5YQ1Rlc3Q6ICdtb2JpbGVSdW5YQ1Rlc3QnLFxuICAgIGluc3RhbGxYQ1Rlc3RCdW5kbGU6ICdtb2JpbGVJbnN0YWxsWENUZXN0QnVuZGxlJyxcbiAgICBsaXN0WENUZXN0QnVuZGxlczogJ21vYmlsZUxpc3RYQ1Rlc3RCdW5kbGVzJyxcbiAgICBsaXN0WENUZXN0c0luVGVzdEJ1bmRsZTogJ21vYmlsZUxpc3RYQ1Rlc3RzSW5UZXN0QnVuZGxlJyxcblxuICAgIHB1c2hOb3RpZmljYXRpb246ICdtb2JpbGVQdXNoTm90aWZpY2F0aW9uJyxcbiAgICBleHBlY3ROb3RpZmljYXRpb246ICdtb2JpbGVFeHBlY3ROb3RpZmljYXRpb24nLFxuXG4gICAgcGVyZm9ybUlvSGlkRXZlbnQ6ICdtb2JpbGVQZXJmb3JtSW9IaWRFdmVudCcsXG5cbiAgICBjb25maWd1cmVMb2NhbGl6YXRpb246ICdtb2JpbGVDb25maWd1cmVMb2NhbGl6YXRpb24nLFxuXG4gICAgcmVzZXRMb2NhdGlvblNlcnZpY2U6ICdtb2JpbGVSZXNldExvY2F0aW9uU2VydmljZScsXG5cbiAgICBzdGFydFBjYXA6ICdtb2JpbGVTdGFydFBjYXAnLFxuICAgIHN0b3BQY2FwOiAnbW9iaWxlU3RvcFBjYXAnLFxuICB9O1xuXG4gIGlmICghXy5oYXMoY29tbWFuZE1hcCwgbW9iaWxlQ29tbWFuZCkpIHtcbiAgICB0aHJvdyBuZXcgZXJyb3JzLlVua25vd25Db21tYW5kRXJyb3IoYFVua25vd24gbW9iaWxlIGNvbW1hbmQgJyR7bW9iaWxlQ29tbWFuZH0nLiBPbmx5ICR7Xy5rZXlzKGNvbW1hbmRNYXApLmpvaW4oJywgJyl9IGNvbW1hbmRzIGFyZSBzdXBwb3J0ZWQuYCk7XG4gIH1cbiAgcmV0dXJuIGF3YWl0IHRoaXNbY29tbWFuZE1hcFttb2JpbGVDb21tYW5kXV0ob3B0cyk7XG59O1xuXG5leHBvcnQgZGVm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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,
|
|
@@ -342,6 +352,23 @@ helpers.mobileTapWithNumberOfTaps = async function mobileTapWithNumberOfTaps(opt
|
|
|
342
352
|
return await this.proxyCommand(`/wda/element/${elementId}/tapWithNumberOfTaps`, 'POST', params);
|
|
343
353
|
};
|
|
344
354
|
|
|
355
|
+
helpers.mobileForcePress = async function mobileForcePress(opts = {}) {
|
|
356
|
+
const {
|
|
357
|
+
x,
|
|
358
|
+
y,
|
|
359
|
+
duration,
|
|
360
|
+
pressure
|
|
361
|
+
} = opts;
|
|
362
|
+
const elementId = toElementId(opts);
|
|
363
|
+
const endpoint = elementId ? `/wda/element/${elementId}/forceTouch` : `/wda/forceTouch`;
|
|
364
|
+
return await this.proxyCommand(endpoint, 'POST', {
|
|
365
|
+
x,
|
|
366
|
+
y,
|
|
367
|
+
duration,
|
|
368
|
+
pressure
|
|
369
|
+
});
|
|
370
|
+
};
|
|
371
|
+
|
|
345
372
|
helpers.mobileSelectPickerWheelValue = async function mobileSelectPickerWheelValue(opts = {}) {
|
|
346
373
|
const elementId = toElementId(opts);
|
|
347
374
|
|
|
@@ -446,4 +473,4 @@ var _default = extensions;
|
|
|
446
473
|
exports.default = _default;require('source-map-support').install();
|
|
447
474
|
|
|
448
475
|
|
|
449
|
-
//# sourceMappingURL=data:application/json;charset=utf8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibGliL2NvbW1hbmRzL2dlc3R1cmUuanMiLCJuYW1lcyI6WyJTVVBQT1JURURfR0VTVFVSRV9ESVJFQ1RJT05TIiwiaGVscGVycyIsImV4dGVuc2lvbnMiLCJjb21tYW5kcyIsInRvRWxlbWVudElkIiwib3B0cyIsImVsZW1lbnQiLCJsb2ciLCJpbmZvIiwiZWwiLCJlbGVtZW50SWQiLCJ1dGlsIiwidW53cmFwRWxlbWVudCIsInRvRWxlbWVudE9yQXBwbGljYXRpb25JZCIsImRyaXZlciIsImZpbmROYXRpdmVFbGVtZW50T3JFbGVtZW50cyIsIm1vdmVUbyIsInhvZmZzZXQiLCJ5b2Zmc2V0IiwiaXNXZWJDb250ZXh0IiwieCIsInkiLCJnZXRMb2NhdGlvbiIsImNvb3JkcyIsImN1cldlYkNvb3JkcyIsImF0b21zRWxlbWVudCIsImdldEF0b21zRWxlbWVudCIsInJlbENvb3JkcyIsImV4ZWN1dGVBdG9tIiwiXyIsImlzTmlsIiwiY3VyQ29vcmRzIiwiZXJyb3JzIiwiVW5rbm93bkV4Y2VwdGlvbiIsImVsUG9zIiwicmVxdWlyZUZsb2F0UGFyYW1ldGVyIiwicGFyYW1OYW1lIiwicGFyYW1WYWx1ZSIsIm1ldGhvZE5hbWUiLCJpc1VuZGVmaW5lZCIsIkludmFsaWRBcmd1bWVudEVycm9yIiwicmVzdWx0IiwicGFyc2VGbG9hdCIsImlzTmFOIiwicmVxdWlyZUludFBhcmFtZXRlciIsInBhcnNlSW50IiwibW9iaWxlU2hha2UiLCJpc1NpbXVsYXRvciIsIlVua25vd25FcnJvciIsImRldmljZSIsInNoYWtlIiwiY2xpY2siLCJuYXRpdmVDbGljayIsInNldHRpbmdzIiwiZ2V0U2V0dGluZ3MiLCJuYXRpdmVXZWJUYXAiLCJuYXRpdmVXZWJUYXBTdHJpY3QiLCJkZWJ1ZyIsImdlc3R1cmVzQ2hhaW5Ub1N0cmluZyIsImdlc3R1cmVzIiwia2V5c1RvSW5jbHVkZSIsIm1hcCIsIml0ZW0iLCJvdGhlcktleXMiLCJkaWZmZXJlbmNlIiwia2V5cyIsImlzQXJyYXkiLCJpbnRlcnNlY3Rpb24iLCJsZW5ndGgiLCJhY3Rpb24iLCJpc1BsYWluT2JqZWN0IiwiSlNPTiIsInN0cmluZ2lmeSIsImpvaW4iLCJwZXJmb3JtQWN0aW9ucyIsImFjdGlvbnMiLCJwcmVwcm9jZXNzZWRBY3Rpb25zIiwiT2JqZWN0IiwiYXNzaWduIiwidHlwZSIsInBhcmFtZXRlcnMiLCJwb2ludGVyVHlwZSIsIm1vZGlmaWVkQWN0aW9uIiwiY2xvbmUiLCJmaWx0ZXIiLCJpbm5lckFjdGlvbiIsImR1cmF0aW9uIiwicHJveHlDb21tYW5kIiwicmVsZWFzZUFjdGlvbnMiLCJ3YXJuIiwicGVyZm9ybVRvdWNoIiwiZSIsImVycm9yQW5kVGhyb3ciLCJtZXNzYWdlIiwicGVyZm9ybU11bHRpQWN0aW9uIiwiaSIsImVuZHBvaW50IiwibW9iaWxlU2Nyb2xsIiwibmFtZSIsImRpcmVjdGlvbiIsInByZWRpY2F0ZVN0cmluZyIsInRvVmlzaWJsZSIsImRpc3RhbmNlIiwicGFyYW1zIiwiaW5jbHVkZXMiLCJ0b0xvd2VyIiwibW9iaWxlU3dpcGUiLCJ2ZWxvY2l0eSIsIm1vYmlsZVBpbmNoIiwic2NhbGUiLCJtb2JpbGVEb3VibGVUYXAiLCJtb2JpbGVUd29GaW5nZXJUYXAiLCJtb2JpbGVUb3VjaEFuZEhvbGQiLCJtb2JpbGVUYXAiLCJtb2JpbGVEcmFnRnJvbVRvRm9yRHVyYXRpb24iLCJmcm9tWCIsImZyb21ZIiwidG9YIiwidG9ZIiwibW9iaWxlVGFwV2l0aE51bWJlck9mVGFwcyIsIm51bWJlck9mVGFwcyIsIm51bWJlck9mVG91Y2hlcyIsIm1vYmlsZVNlbGVjdFBpY2tlcldoZWVsVmFsdWUiLCJpc1N0cmluZyIsIm9yZGVyIiwidG9Mb3dlckNhc2UiLCJvZmZzZXQiLCJtb2JpbGVSb3RhdGVFbGVtZW50Iiwicm90YXRpb24iLCJnZXRDb29yZGluYXRlcyIsImdlc3R1cmUiLCJjb29yZGluYXRlcyIsImFyZU9mZnNldHMiLCJvcHRpb25YIiwib3B0aW9ucyIsIm9wdGlvblkiLCJyZWN0IiwiZ2V0RWxlbWVudFJlY3QiLCJwb3MiLCJzaXplIiwidyIsIndpZHRoIiwiaCIsImhlaWdodCIsIm9mZnNldFgiLCJvZmZzZXRZIiwiYXBwbHlNb3ZlVG9PZmZzZXQiLCJmaXJzdENvb3JkaW5hdGVzIiwic2Vjb25kQ29vcmRpbmF0ZXMiXSwic291cmNlUm9vdCI6Ii4uLy4uLy4uIiwic291cmNlcyI6WyJsaWIvY29tbWFuZHMvZ2VzdHVyZS5qcyJdLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBlcnJvcnMgfSBmcm9tICdhcHBpdW0vZHJpdmVyJztcbmltcG9ydCB7IHV0aWwgfSBmcm9tICdhcHBpdW0vc3VwcG9ydCc7XG5pbXBvcnQgXyBmcm9tICdsb2Rhc2gnO1xuaW1wb3J0IGxvZyBmcm9tICcuLi9sb2dnZXInO1xuXG5jb25zdCBTVVBQT1JURURfR0VTVFVSRV9ESVJFQ1RJT05TID0gWyd1cCcsICdkb3duJywgJ2xlZnQnLCAncmlnaHQnXTtcblxuY29uc3QgaGVscGVycyA9IHt9LCBleHRlbnNpb25zID0ge30sIGNvbW1hbmRzID0ge307XG5cbmZ1bmN0aW9uIHRvRWxlbWVudElkIChvcHRzID0ge30pIHtcbiAgaWYgKG9wdHMuZWxlbWVudCkge1xuICAgIGxvZy5pbmZvKGBUaGUgJ2VsZW1lbnQnIGFyZ3VtZW50IG5hbWUgaXMgZGVwcmVjYXRlZC4gQ29uc2lkZXIgdXNpbmcgJ2VsZW1lbnRJZCcgaW5zdGVhZGApO1xuICB9XG4gIGNvbnN0IGVsID0gb3B0cy5lbGVtZW50SWQgfHwgb3B0cy5lbGVtZW50O1xuICByZXR1cm4gZWwgPyB1dGlsLnVud3JhcEVsZW1lbnQoZWwpIDogbnVsbDtcbn1cblxuYXN5bmMgZnVuY3Rpb24gdG9FbGVtZW50T3JBcHBsaWNhdGlvbklkIChkcml2ZXIsIG9wdHMgPSB7fSkge1xuICByZXR1cm4gdG9FbGVtZW50SWQob3B0cylcbiAgICB8fCB1dGlsLnVud3JhcEVsZW1lbnQoYXdhaXQgZHJpdmVyLmZpbmROYXRpdmVFbGVtZW50T3JFbGVtZW50cyhgY2xhc3MgbmFtZWAsIGBYQ1VJRWxlbWVudFR5cGVBcHBsaWNhdGlvbmAsIGZhbHNlKSk7XG59XG5cbmNvbW1hbmRzLm1vdmVUbyA9IGFzeW5jIGZ1bmN0aW9uIG1vdmVUbyAoZWwsIHhvZmZzZXQgPSAwLCB5b2Zmc2V0ID0gMCkge1xuICBlbCA9IHV0aWwudW53cmFwRWxlbWVudChlbCk7XG5cbiAgaWYgKHRoaXMuaXNXZWJDb250ZXh0KCkpIHtcbiAgICBsZXQge3gsIHl9ID0gYXdhaXQgdGhpcy5nZXRMb2NhdGlvbihlbCk7XG4gICAgbGV0IGNvb3JkcyA9IHtcbiAgICAgIHg6IHggKyB4b2Zmc2V0LFxuICAgICAgeTogeSArIHlvZmZzZXRcbiAgICB9O1xuICAgIHRoaXMuY3VyV2ViQ29vcmRzID0gY29vcmRzO1xuICAgIGxldCBhdG9tc0VsZW1lbnQgPSB0aGlzLmdldEF0b21zRWxlbWVudChlbCk7XG4gICAgbGV0IHJlbENvb3JkcyA9IHt4OiB4b2Zmc2V0LCB5OiB5b2Zmc2V0fTtcbiAgICBhd2FpdCB0aGlzLmV4ZWN1dGVBdG9tKCdtb3ZlX21vdXNlJywgW2F0b21zRWxlbWVudCwgcmVsQ29vcmRzXSk7XG4gIH0gZWxzZSB7XG4gICAgaWYgKF8uaXNOaWwoZWwpKSB7XG4gICAgICBpZiAoIXRoaXMuY3VyQ29vcmRzKSB7XG4gICAgICAgIHRocm93IG5ldyBlcnJvcnMuVW5rbm93bkV4Y2VwdGlvbihcbiAgICAgICAgICAnQ3VycmVudCBjdXJzb3IgcG9zaXRpb24gdW5rbm93biwgcGxlYXNlIHVzZSBtb3ZlVG8gd2l0aCBhbiBlbGVtZW50IHRoZSBmaXJzdCB0aW1lLicpO1xuICAgICAgfVxuICAgICAgdGhpcy5jdXJDb29yZHMgPSB7XG4gICAgICAgIHg6IHRoaXMuY3VyQ29vcmRzLnggKyB4b2Zmc2V0LFxuICAgICAgICB5OiB0aGlzLmN1ckNvb3Jkcy55ICsgeW9mZnNldFxuICAgICAgfTtcbiAgICB9IGVsc2Uge1xuICAgICAgbGV0IGVsUG9zID0gYXdhaXQgdGhpcy5nZXRMb2NhdGlvbihlbCk7XG4gICAgICB0aGlzLmN1ckNvb3JkcyA9IHtcbiAgICAgICAgeDogZWxQb3MueCArIHhvZmZzZXQsXG4gICAgICAgIHk6IGVsUG9zLnkgKyB5b2Zmc2V0XG4gICAgICB9O1xuICAgIH1cbiAgfVxufTtcblxuZnVuY3Rpb24gcmVxdWlyZUZsb2F0UGFyYW1ldGVyIChwYXJhbU5hbWUsIHBhcmFtVmFsdWUsIG1ldGhvZE5hbWUpIHtcbiAgaWYgKF8uaXNVbmRlZmluZWQocGFyYW1WYWx1ZSkpIHtcbiAgICB0aHJvdyBuZXcgZXJyb3JzLkludmFsaWRBcmd1bWVudEVycm9yKGBcIiR7cGFyYW1OYW1lfVwiIHBhcmFtZXRlciBpcyBtYW5kYXRvcnkgZm9yIFwiJHttZXRob2ROYW1lfVwiIGNhbGxgKTtcbiAgfVxuICBjb25zdCByZXN1bHQgPSBwYXJzZUZsb2F0KHBhcmFtVmFsdWUpO1xuICBpZiAoaXNOYU4ocmVzdWx0KSkge1xuICAgIHRocm93IG5ldyBlcnJvcnMuSW52YWxpZEFyZ3VtZW50RXJyb3IoYFwiJHtwYXJhbU5hbWV9XCIgcGFyYW1ldGVyIHNob3VsZCBiZSBhIHZhbGlkIG51bWJlci4gXCIke3BhcmFtVmFsdWV9XCIgaXMgZ2l2ZW4gaW5zdGVhZGApO1xuICB9XG4gIHJldHVybiByZXN1bHQ7XG59XG5cbmZ1bmN0aW9uIHJlcXVpcmVJbnRQYXJhbWV0ZXIgKHBhcmFtTmFtZSwgcGFyYW1WYWx1ZSwgbWV0aG9kTmFtZSkge1xuICBpZiAoXy5pc1VuZGVmaW5lZChwYXJhbVZhbHVlKSkge1xuICAgIHRocm93IG5ldyBlcnJvcnMuSW52YWxpZEFyZ3VtZW50RXJyb3IoYFwiJHtwYXJhbU5hbWV9XCIgcGFyYW1ldGVyIGlzIG1hbmRhdG9yeSBmb3IgXCIke21ldGhvZE5hbWV9XCIgY2FsbGApO1xuICB9XG4gIGNvbnN0IHJlc3VsdCA9IHBhcnNlSW50KHBhcmFtVmFsdWUsIDEwKTtcbiAgaWYgKGlzTmFOKHJlc3VsdCkpIHtcbiAgICB0aHJvdyBuZXcgZXJyb3JzLkludmFsaWRBcmd1bWVudEVycm9yKGBcIiR7cGFyYW1OYW1lfVwiIHBhcmFtZXRlciBzaG91bGQgYmUgYSB2YWxpZCBpbnRlZ2VyLiBcIiR7cGFyYW1WYWx1ZX1cIiBpcyBnaXZlbiBpbnN0ZWFkYCk7XG4gIH1cbiAgcmV0dXJuIHJlc3VsdDtcbn1cblxuY29tbWFuZHMubW9iaWxlU2hha2UgPSBhc3luYyBmdW5jdGlvbiBtb2JpbGVTaGFrZSAoKSB7XG4gIGlmICghdGhpcy5pc1NpbXVsYXRvcigpKSB7XG4gICAgdGhyb3cgbmV3IGVycm9ycy5Vbmtub3duRXJyb3IoJ1NoYWtlIGlzIG5vdCBzdXBwb3J0ZWQgb24gcmVhbCBkZXZpY2VzJyk7XG4gIH1cbiAgYXdhaXQgdGhpcy5vcHRzLmRldmljZS5zaGFrZSgpO1xufTtcblxuY29tbWFuZHMuY2xpY2sgPSBhc3luYyBmdW5jdGlvbiBjbGljayAoZWwpIHtcbiAgaWYgKCF0aGlzLmlzV2ViQ29udGV4dCgpKSB7XG4gICAgLy8gdGhlcmUgYXJlIG11bHRpcGxlIGNvbW1hbmRzIHRoYXQgbWFwIGhlcmUsIHNvIG1hbnVhbGx5IHByb3h5XG4gICAgcmV0dXJuIGF3YWl0IHRoaXMubmF0aXZlQ2xpY2soZWwpO1xuICB9XG4gIGVsID0gdXRpbC51bndyYXBFbGVtZW50KGVsKTtcbiAgaWYgKChhd2FpdCB0aGlzLnNldHRpbmdzLmdldFNldHRpbmdzKCkpLm5hdGl2ZVdlYlRhcCB8fCAoYXdhaXQgdGhpcy5zZXR0aW5ncy5nZXRTZXR0aW5ncygpKS5uYXRpdmVXZWJUYXBTdHJpY3QpIHtcbiAgICAvLyBhdG9tcy1iYXNlZCBjbGlja3MgZG9uJ3QgYWx3YXlzIHdvcmsgaW4gc2FmYXJpIDdcbiAgICB0aGlzLmxvZy5kZWJ1ZygnVXNpbmcgbmF0aXZlIHdlYiB0YXAnKTtcbiAgICBhd2FpdCB0aGlzLm5hdGl2ZVdlYlRhcChlbCk7XG4gIH0gZWxzZSB7XG4gICAgY29uc3QgYXRvbXNFbGVtZW50ID0gdGhpcy5nZXRBdG9tc0VsZW1lbnQoZWwpO1xuICAgIHJldHVybiBhd2FpdCB0aGlzLmV4ZWN1dGVBdG9tKCdjbGljaycsIFthdG9tc0VsZW1lbnRdKTtcbiAgfVxufTtcblxuZnVuY3Rpb24gZ2VzdHVyZXNDaGFpblRvU3RyaW5nIChnZXN0dXJlcywga2V5c1RvSW5jbHVkZSA9IFsnb3B0aW9ucyddKSB7XG4gIHJldHVybiBnZXN0dXJlcy5tYXAoKGl0ZW0pID0+IHtcbiAgICBsZXQgb3RoZXJLZXlzID0gXy5kaWZmZXJlbmNlKF8ua2V5cyhpdGVtKSwgWydhY3Rpb24nXSk7XG4gICAgb3RoZXJLZXlzID0gXy5pc0FycmF5KGtleXNUb0luY2x1ZGUpID8gXy5pbnRlcnNlY3Rpb24ob3RoZXJLZXlzLCBrZXlzVG9JbmNsdWRlKSA6IG90aGVyS2V5cztcbiAgICBpZiAob3RoZXJLZXlzLmxlbmd0aCkge1xuICAgICAgcmV0dXJuIGAke2l0ZW0uYWN0aW9ufWAgK1xuICAgICAgICBgKCR7Xy5tYXAob3RoZXJLZXlzLCAoeCkgPT4geCArICc9JyArIChfLmlzUGxhaW5PYmplY3QoaXRlbVt4XSkgPyBKU09OLnN0cmluZ2lmeShpdGVtW3hdKSA6IGl0ZW1beF0pKS5qb2luKCcsICcpfSlgO1xuICAgIH1cbiAgICByZXR1cm4gaXRlbS5hY3Rpb247XG4gIH0pLmpvaW4oJy0nKTtcbn1cblxuY29tbWFuZHMucGVyZm9ybUFjdGlvbnMgPSBhc3luYyBmdW5jdGlvbiBwZXJmb3JtQWN0aW9ucyAoYWN0aW9ucykge1xuICB0aGlzLmxvZy5kZWJ1ZyhgUmVjZWl2ZWQgdGhlIGZvbGxvd2luZyBXM0MgYWN0aW9uczogJHtKU09OLnN0cmluZ2lmeShhY3Rpb25zLCBudWxsLCAnICAnKX1gKTtcbiAgLy8gVGhpcyBpcyBtYW5kYXRvcnksIHNpbmNlIFdEQSBvbmx5IHN1cHBvcnRzIFRPVUNIIHBvaW50ZXIgdHlwZVxuICAvLyBhbmQgU2VsZW5pdW0gQVBJIHVzZXMgTU9VU0UgYXMgdGhlIGRlZmF1bHQgb25lXG4gIGNvbnN0IHByZXByb2Nlc3NlZEFjdGlvbnMgPSBhY3Rpb25zXG4gICAgLm1hcCgoYWN0aW9uKSA9PiBPYmplY3QuYXNzaWduKHt9LCBhY3Rpb24sIGFjdGlvbi50eXBlID09PSAncG9pbnRlcicgPyB7XG4gICAgICBwYXJhbWV0ZXJzOiB7XG4gICAgICAgIHBvaW50ZXJUeXBlOiAndG91Y2gnXG4gICAgICB9XG4gICAgfSA6IHt9KSlcbiAgICAubWFwKChhY3Rpb24pID0+IHtcbiAgICAgIGNvbnN0IG1vZGlmaWVkQWN0aW9uID0gXy5jbG9uZShhY3Rpb24pIHx8IHt9O1xuICAgICAgLy8gU2VsZW5pdW0gQVBJIHVuZXhwZWN0ZWRseSBpbnNlcnRzIHplcm8gcGF1c2VzLCB3aGljaCBhcmUgbm90IHN1cHBvcnRlZCBieSBXREFcbiAgICAgIG1vZGlmaWVkQWN0aW9uLmFjdGlvbnMgPSAoYWN0aW9uLmFjdGlvbnMgfHwgW10pXG4gICAgICAgIC5maWx0ZXIoKGlubmVyQWN0aW9uKSA9PiAhKGlubmVyQWN0aW9uLnR5cGUgPT09ICdwYXVzZScgJiYgaW5uZXJBY3Rpb24uZHVyYXRpb24gPT09IDApKTtcbiAgICAgIHJldHVybiBtb2RpZmllZEFjdGlvbjtcbiAgICB9KTtcbiAgdGhpcy5sb2cuZGVidWcoYFByZXByb2Nlc3NlZCBhY3Rpb25zOiAke0pTT04uc3RyaW5naWZ5KHByZXByb2Nlc3NlZEFjdGlvbnMsIG51bGwsICcgICcpfWApO1xuICByZXR1cm4gYXdhaXQgdGhpcy5wcm94eUNvbW1hbmQoJy9hY3Rpb25zJywgJ1BPU1QnLCB7YWN0aW9uczogcHJlcHJvY2Vzc2VkQWN0aW9uc30pO1xufTtcblxuY29tbWFuZHMucmVsZWFzZUFjdGlvbnMgPSBmdW5jdGlvbiByZWxlYXNlQWN0aW9ucyAoKSB7XG4gIHRoaXMubG9nLndhcm4oJ09uIHRoaXMgcGxhdGZvcm0sIHJlbGVhc2VBY3Rpb25zIGlzIGEgbm8tb3AnKTtcbn07XG5cbmNvbW1hbmRzLnBlcmZvcm1Ub3VjaCA9IGFzeW5jIGZ1bmN0aW9uIHBlcmZvcm1Ub3VjaCAoZ2VzdHVyZXMpIHtcbiAgdGhpcy5sb2cuZGVidWcoYFJlY2VpdmVkIHRoZSBmb2xsb3dpbmcgdG91Y2ggYWN0aW9uOiAke2dlc3R1cmVzQ2hhaW5Ub1N0cmluZyhnZXN0dXJlcyl9YCk7XG4gIHRyeSB7XG4gICAgcmV0dXJuIGF3YWl0IHRoaXMucHJveHlDb21tYW5kKCcvd2RhL3RvdWNoL3BlcmZvcm0nLCAnUE9TVCcsIHthY3Rpb25zOiBnZXN0dXJlc30pO1xuICB9IGNhdGNoIChlKSB7XG4gICAgaWYgKCF0aGlzLmlzV2ViQ29udGV4dCgpKSB7XG4gICAgICB0aHJvdyBlO1xuICAgIH1cbiAgICB0aGlzLmxvZy5lcnJvckFuZFRocm93KCdUaGUgVG91Y2ggQVBJIGlzIGFpbWVkIGZvciB1c2FnZSBpbiBOQVRJVkUgY29udGV4dC4gJyArXG4gICAgICAnQ29uc2lkZXIgdXNpbmcgXCJleGVjdXRlXCIgQVBJIHdpdGggY3VzdG9tIGV2ZW50cyB0cmlnZ2VyIHNjcmlwdCAnICtcbiAgICAgIGB0byBlbXVsYXRlIHRvdWNoIGV2ZW50cyBiZWluZyBpbiBXRUJWSUVXIGNvbnRleHQuIE9yaWdpbmFsIGVycm9yOiAke2UubWVzc2FnZX1gKTtcbiAgfVxufTtcblxuY29tbWFuZHMucGVyZm9ybU11bHRpQWN0aW9uID0gYXN5bmMgZnVuY3Rpb24gcGVyZm9ybU11bHRpQWN0aW9uIChhY3Rpb25zKSB7XG4gIHRoaXMubG9nLmRlYnVnKGBSZWNlaXZlZCB0aGUgZm9sbG93aW5nIG11bHRpIHRvdWNoIGFjdGlvbjpgKTtcbiAgZm9yIChsZXQgaSBpbiBhY3Rpb25zKSB7XG4gICAgdGhpcy5sb2cuZGVidWcoYCAgICAke3BhcnNlSW50KGksIDEwKSArIDF9OiAke18ubWFwKGFjdGlvbnNbaV0sICdhY3Rpb24nKS5qb2luKCctJyl9YCk7XG4gIH1cbiAgdHJ5IHtcbiAgICByZXR1cm4gYXdhaXQgdGhpcy5wcm94eUNvbW1hbmQoJy93ZGEvdG91Y2gvbXVsdGkvcGVyZm9ybScsICdQT1NUJywge2FjdGlvbnN9KTtcbiAgfSBjYXRjaCAoZSkge1xuICAgIGlmICghdGhpcy5pc1dlYkNvbnRleHQoKSkge1xuICAgICAgdGhyb3cgZTtcbiAgICB9XG4gICAgdGhpcy5sb2cuZXJyb3JBbmRUaHJvdygnVGhlIE11bHRpVG91Y2ggQVBJIGlzIGFpbWVkIGZvciB1c2FnZSBpbiBOQVRJVkUgY29udGV4dC4gJyArXG4gICAgICAnQ29uc2lkZXIgdXNpbmcgXCJleGVjdXRlXCIgQVBJIHdpdGggY3VzdG9tIGV2ZW50cyB0cmlnZ2VyIHNjcmlwdCAnICtcbiAgICAgIGB0byBlbXVsYXRlIG11bHRpdG91Y2ggZXZlbnRzIGJlaW5nIGluIFdFQlZJRVcgY29udGV4dC4gT3JpZ2luYWwgZXJyb3I6ICR7ZS5tZXNzYWdlfWApO1xuICB9XG59O1xuXG5jb21tYW5kcy5uYXRpdmVDbGljayA9IGFzeW5jIGZ1bmN0aW9uIG5hdGl2ZUNsaWNrIChlbCkge1xuICBlbCA9IHV0aWwudW53cmFwRWxlbWVudChlbCk7XG4gIGxldCBlbmRwb2ludCA9IGAvZWxlbWVudC8ke2VsfS9jbGlja2A7XG4gIHJldHVybiBhd2FpdCB0aGlzLnByb3h5Q29tbWFuZChlbmRwb2ludCwgJ1BPU1QnLCB7fSk7XG59O1xuXG4vKlxuICogU2VlIGh0dHBzOi8vZ2l0aHViLmNvbS9mYWNlYm9vay9XZWJEcml2ZXJBZ2VudC9ibG9iL21hc3Rlci9XZWJEcml2ZXJBZ2VudExpYi9Db21tYW5kcy9GQkVsZW1lbnRDb21tYW5kcy5tXG4gKiB0byBnZXQgdGhlIGluZm8gYWJvdXQgYXZhaWxhYmxlIFdEQSBnZXN0dXJlcyBBUElcbiAqXG4gKiBTZWUgaHR0cHM6Ly9kZXZlbG9wZXIuYXBwbGUuY29tL3JlZmVyZW5jZS94Y3Rlc3QveGN1aWVsZW1lbnQgYW5kXG4gKiBodHRwczovL2RldmVsb3Blci5hcHBsZS5jb20vcmVmZXJlbmNlL3hjdGVzdC94Y3VpY29vcmRpbmF0ZSB0byBnZXQgdGhlIGRldGFpbGVkIGRlc2NyaXB0aW9uIG9mXG4gKiBhbGwgWENUZXN0IGdlc3R1cmVzXG4qL1xuXG5oZWxwZXJzLm1vYmlsZVNjcm9sbCA9IGFzeW5jIGZ1bmN0aW9uIG1vYmlsZVNjcm9sbCAob3B0cyA9IHt9KSB7XG4gIC8vIFdEQSBzdXBwb3J0cyBmb3VyIHNjcm9sbGluZyBzdHJhdGVnaWVzOiBwcmVkaWNhdGlvbiBiYXNlZCBvbiBuYW1lLCBkaXJlY3Rpb24sXG4gIC8vIHByZWRpY2F0ZVN0cmluZywgYW5kIHRvVmlzaWJsZSwgaW4gdGhhdCBvcmRlclxuICBjb25zdCB7XG4gICAgbmFtZSxcbiAgICBkaXJlY3Rpb24sXG4gICAgcHJlZGljYXRlU3RyaW5nLFxuICAgIHRvVmlzaWJsZSxcbiAgICBkaXN0YW5jZSxcbiAgfSA9IG9wdHM7XG4gIGNvbnN0IHBhcmFtcyA9IHt9O1xuICBpZiAobmFtZSkge1xuICAgIHBhcmFtcy5uYW1lID0gbmFtZTtcbiAgfSBlbHNlIGlmIChkaXJlY3Rpb24pIHtcbiAgICBpZiAoIVNVUFBPUlRFRF9HRVNUVVJFX0RJUkVDVElPTlMuaW5jbHVkZXMoXy50b0xvd2VyKGRpcmVjdGlvbikpKSB7XG4gICAgICB0aHJvdyBuZXcgZXJyb3JzLkludmFsaWRBcmd1bWVudEVycm9yKGAnZGlyZWN0aW9uJyBtdXN0IGJlIG9uZSBvZjogJHtTVVBQT1JURURfR0VTVFVSRV9ESVJFQ1RJT05TfWApO1xuICAgIH1cbiAgICBwYXJhbXMuZGlyZWN0aW9uID0gZGlyZWN0aW9uO1xuICB9IGVsc2UgaWYgKHByZWRpY2F0ZVN0cmluZykge1xuICAgIHBhcmFtcy5wcmVkaWNhdGVTdHJpbmcgPSBwcmVkaWNhdGVTdHJpbmc7XG4gIH0gZWxzZSBpZiAodG9WaXNpYmxlKSB7XG4gICAgcGFyYW1zLnRvVmlzaWJsZSA9IHRvVmlzaWJsZTtcbiAgfSBlbHNlIHtcbiAgICB0aHJvdyBuZXcgZXJyb3JzLkludmFsaWRBcmd1bWVudEVycm9yKFxuICAgICAgJ01vYmlsZSBzY3JvbGwgc3VwcG9ydHMgdGhlIGZvbGxvd2luZyBzdHJhdGVnaWVzOiBuYW1lLCBkaXJlY3Rpb24sIHByZWRpY2F0ZVN0cmluZywgYW5kIHRvVmlzaWJsZS4gJyArXG4gICAgICAnU3BlY2lmeSBvbmUgb2YgdGhlc2UnKTtcbiAgfVxuICAvLyB3ZSBjYW4gYWxzbyBvcHRpb25hbGx5IHBhc3MgYSBkaXN0YW5jZSB3aGljaCBhcHBlYXJzIHRvIGJlIGEgcmF0aW8gb2ZcbiAgLy8gc2NyZWVuIGhlaWdodCwgc28gMS4wIG1lYW5zIGEgZnVsbCBzY3JlZW4ncyB3b3J0aCBvZiBzY3JvbGxpbmdcbiAgaWYgKCFfLmlzTmlsKGRpc3RhbmNlKSkge1xuICAgIHBhcmFtcy5kaXN0YW5jZSA9IGRpc3RhbmNlO1xuICB9XG4gIGNvbnN0IGVsZW1lbnRJZCA9IGF3YWl0IHRvRWxlbWVudE9yQXBwbGljYXRpb25JZCh0aGlzLCBvcHRzKTtcbiAgcmV0dXJuIGF3YWl0IHRoaXMucHJveHlDb21tYW5kKGAvd2RhL2VsZW1lbnQvJHtlbGVtZW50SWR9L3Njcm9sbGAsICdQT1NUJywgcGFyYW1zKTtcbn07XG5cbmhlbHBlcnMubW9iaWxlU3dpcGUgPSBhc3luYyBmdW5jdGlvbiBtb2JpbGVTd2lwZSAob3B0cyA9IHt9KSB7XG4gIGNvbnN0IHtcbiAgICBkaXJlY3Rpb24sXG4gICAgdmVsb2NpdHksXG4gIH0gPSBvcHRzO1xuICBpZiAoIVNVUFBPUlRFRF9HRVNUVVJFX0RJUkVDVElPTlMuaW5jbHVkZXMoXy50b0xvd2VyKGRpcmVjdGlvbikpKSB7XG4gICAgdGhyb3cgbmV3IGVycm9ycy5JbnZhbGlkQXJndW1lbnRFcnJvcihgJ2RpcmVjdGlvbicgbXVzdCBiZSBvbmUgb2Y6ICR7U1VQUE9SVEVEX0dFU1RVUkVfRElSRUNUSU9OU31gKTtcbiAgfVxuICBjb25zdCBwYXJhbXMgPSB7ZGlyZWN0aW9ufTtcbiAgaWYgKCFfLmlzTmlsKHZlbG9jaXR5KSkge1xuICAgIHBhcmFtcy52ZWxvY2l0eSA9IHZlbG9jaXR5O1xuICB9XG4gIGNvbnN0IGVsZW1lbnRJZCA9IGF3YWl0IHRvRWxlbWVudE9yQXBwbGljYXRpb25JZCh0aGlzLCBvcHRzKTtcbiAgcmV0dXJuIGF3YWl0IHRoaXMucHJveHlDb21tYW5kKGAvd2RhL2VsZW1lbnQvJHtlbGVtZW50SWR9L3N3aXBlYCwgJ1BPU1QnLCBwYXJhbXMpO1xufTtcblxuaGVscGVycy5tb2JpbGVQaW5jaCA9IGFzeW5jIGZ1bmN0aW9uIG1vYmlsZVBpbmNoIChvcHRzID0ge30pIHtcbiAgY29uc3QgcGFyYW1zID0ge1xuICAgIHNjYWxlOiByZXF1aXJlRmxvYXRQYXJhbWV0ZXIoJ3NjYWxlJywgb3B0cy5zY2FsZSwgJ3BpbmNoJyksXG4gICAgdmVsb2NpdHk6IHJlcXVpcmVGbG9hdFBhcmFtZXRlcigndmVsb2NpdHknLCBvcHRzLnZlbG9jaXR5LCAncGluY2gnKVxuICB9O1xuICBjb25zdCBlbGVtZW50SWQgPSBhd2FpdCB0b0VsZW1lbnRPckFwcGxpY2F0aW9uSWQodGhpcywgb3B0cyk7XG4gIHJldHVybiBhd2FpdCB0aGlzLnByb3h5Q29tbWFuZChgL3dkYS9lbGVtZW50LyR7ZWxlbWVudElkfS9waW5jaGAsICdQT1NUJywgcGFyYW1zKTtcbn07XG5cbmhlbHBlcnMubW9iaWxlRG91YmxlVGFwID0gYXN5bmMgZnVuY3Rpb24gbW9iaWxlRG91YmxlVGFwIChvcHRzID0ge30pIHtcbiAgY29uc3QgZWxlbWVudElkID0gdG9FbGVtZW50SWQob3B0cyk7XG4gIGlmIChlbGVtZW50SWQpIHtcbiAgICAvLyBEb3VibGUgdGFwIGVsZW1lbnRcbiAgICByZXR1cm4gYXdhaXQgdGhpcy5wcm94eUNvbW1hbmQoYC93ZGEvZWxlbWVudC8ke2VsZW1lbnRJZH0vZG91YmxlVGFwYCwgJ1BPU1QnKTtcbiAgfVxuICAvLyBEb3VibGUgdGFwIGNvb3JkaW5hdGVzXG4gIGNvbnN0IHBhcmFtcyA9IHtcbiAgICB4OiByZXF1aXJlRmxvYXRQYXJhbWV0ZXIoJ3gnLCBvcHRzLngsICdkb3VibGVUYXAnKSxcbiAgICB5OiByZXF1aXJlRmxvYXRQYXJhbWV0ZXIoJ3knLCBvcHRzLnksICdkb3VibGVUYXAnKVxuICB9O1xuICByZXR1cm4gYXdhaXQgdGhpcy5wcm94eUNvbW1hbmQoJy93ZGEvZG91YmxlVGFwJywgJ1BPU1QnLCBwYXJhbXMpO1xufTtcblxuaGVscGVycy5tb2JpbGVUd29GaW5nZXJUYXAgPSBhc3luYyBmdW5jdGlvbiBtb2JpbGVUd29GaW5nZXJUYXAgKG9wdHMgPSB7fSkge1xuICBjb25zdCBlbGVtZW50SWQgPSBhd2FpdCB0b0VsZW1lbnRPckFwcGxpY2F0aW9uSWQodGhpcywgb3B0cyk7XG4gIHJldHVybiBhd2FpdCB0aGlzLnByb3h5Q29tbWFuZChgL3dkYS9lbGVtZW50LyR7ZWxlbWVudElkfS90d29GaW5nZXJUYXBgLCAnUE9TVCcpO1xufTtcblxuaGVscGVycy5tb2JpbGVUb3VjaEFuZEhvbGQgPSBhc3luYyBmdW5jdGlvbiBtb2JpbGVUb3VjaEFuZEhvbGQgKG9wdHMgPSB7fSkge1xuICBjb25zdCBwYXJhbXMgPSB7XG4gICAgZHVyYXRpb246IHJlcXVpcmVGbG9hdFBhcmFtZXRlcignZHVyYXRpb24nLCBvcHRzLmR1cmF0aW9uLCAndG91Y2hBbmRIb2xkJylcbiAgfTtcbiAgY29uc3QgZWxlbWVudElkID0gdG9FbGVtZW50SWQob3B0cyk7XG4gIGlmIChlbGVtZW50SWQpIHtcbiAgICAvLyBMb25nIHRhcCBlbGVtZW50XG4gICAgcmV0dXJuIGF3YWl0IHRoaXMucHJveHlDb21tYW5kKGAvd2RhL2VsZW1lbnQvJHtlbGVtZW50SWR9L3RvdWNoQW5kSG9sZGAsICdQT1NUJywgcGFyYW1zKTtcbiAgfVxuICAvLyBMb25nIHRhcCBjb29yZGluYXRlc1xuICBwYXJhbXMueCA9IHJlcXVpcmVGbG9hdFBhcmFtZXRlcigneCcsIG9wdHMueCwgJ3RvdWNoQW5kSG9sZCcpO1xuICBwYXJhbXMueSA9IHJlcXVpcmVGbG9hdFBhcmFtZXRlcigneScsIG9wdHMueSwgJ3RvdWNoQW5kSG9sZCcpO1xuICByZXR1cm4gYXdhaXQgdGhpcy5wcm94eUNvbW1hbmQoJy93ZGEvdG91Y2hBbmRIb2xkJywgJ1BPU1QnLCBwYXJhbXMpO1xufTtcblxuaGVscGVycy5tb2JpbGVUYXAgPSBhc3luYyBmdW5jdGlvbiBtb2JpbGVUYXAgKG9wdHMgPSB7fSkge1xuICBjb25zdCBwYXJhbXMgPSB7XG4gICAgeDogcmVxdWlyZUZsb2F0UGFyYW1ldGVyKCd4Jywgb3B0cy54LCAndGFwJyksXG4gICAgeTogcmVxdWlyZUZsb2F0UGFyYW1ldGVyKCd5Jywgb3B0cy55LCAndGFwJylcbiAgfTtcbiAgY29uc3QgZWxlbWVudElkID0gdG9FbGVtZW50SWQob3B0cykgfHwgJzAnO1xuICByZXR1cm4gYXdhaXQgdGhpcy5wcm94eUNvbW1hbmQoYC93ZGEvdGFwLyR7ZWxlbWVudElkfWAsICdQT1NUJywgcGFyYW1zKTtcbn07XG5cbmhlbHBlcnMubW9iaWxlRHJhZ0Zyb21Ub0ZvckR1cmF0aW9uID0gYXN5bmMgZnVuY3Rpb24gbW9iaWxlRHJhZ0Zyb21Ub0ZvckR1cmF0aW9uIChvcHRzID0ge30pIHtcbiAgY29uc3QgcGFyYW1zID0ge1xuICAgIGR1cmF0aW9uOiByZXF1aXJlRmxvYXRQYXJhbWV0ZXIoJ2R1cmF0aW9uJywgb3B0cy5kdXJhdGlvbiwgJ2RyYWdGcm9tVG9Gb3JEdXJhdGlvbicpLFxuICAgIGZyb21YOiByZXF1aXJlRmxvYXRQYXJhbWV0ZXIoJ2Zyb21YJywgb3B0cy5mcm9tWCwgJ2RyYWdGcm9tVG9Gb3JEdXJhdGlvbicpLFxuICAgIGZyb21ZOiByZXF1aXJlRmxvYXRQYXJhbWV0ZXIoJ2Zyb21ZJywgb3B0cy5mcm9tWSwgJ2RyYWdGcm9tVG9Gb3JEdXJhdGlvbicpLFxuICAgIHRvWDogcmVxdWlyZUZsb2F0UGFyYW1ldGVyKCd0b1gnLCBvcHRzLnRvWCwgJ2RyYWdGcm9tVG9Gb3JEdXJhdGlvbicpLFxuICAgIHRvWTogcmVxdWlyZUZsb2F0UGFyYW1ldGVyKCd0b1knLCBvcHRzLnRvWSwgJ2RyYWdGcm9tVG9Gb3JEdXJhdGlvbicpXG4gIH07XG4gIGNvbnN0IGVsZW1lbnRJZCA9IHRvRWxlbWVudElkKG9wdHMpO1xuICByZXR1cm4gZWxlbWVudElkXG4gICAgLy8gRHJhZyBlbGVtZW50XG4gICAgPyBhd2FpdCB0aGlzLnByb3h5Q29tbWFuZChgL3dkYS9lbGVtZW50LyR7ZWxlbWVudElkfS9kcmFnZnJvbXRvZm9yZHVyYXRpb25gLCAnUE9TVCcsIHBhcmFtcylcbiAgICAvLyBEcmFnIGNvb3JkaW5hdGVzXG4gICAgOiBhd2FpdCB0aGlzLnByb3h5Q29tbWFuZCgnL3dkYS9kcmFnZnJvbXRvZm9yZHVyYXRpb24nLCAnUE9TVCcsIHBhcmFtcyk7XG59O1xuXG5oZWxwZXJzLm1vYmlsZVRhcFdpdGhOdW1iZXJPZlRhcHMgPSBhc3luYyBmdW5jdGlvbiBtb2JpbGVUYXBXaXRoTnVtYmVyT2ZUYXBzIChvcHRzID0ge30pIHtcbiAgY29uc3QgZWxlbWVudElkID0gdG9FbGVtZW50SWQob3B0cyk7XG4gIGlmICghZWxlbWVudElkKSB7XG4gICAgdGhyb3cgbmV3IGVycm9ycy5JbnZhbGlkQXJndW1lbnRFcnJvcignRWxlbWVudCBpZCBpcyBleHBlY3RlZCB0byBiZSBzZXQgZm9yIHRhcFdpdGhOdW1iZXJPZlRhcHMgbWV0aG9kJyk7XG4gIH1cbiAgY29uc3QgcGFyYW1zID0ge1xuICAgIG51bWJlck9mVGFwczogcmVxdWlyZUludFBhcmFtZXRlcignbnVtYmVyT2ZUYXBzJywgb3B0cy5udW1iZXJPZlRhcHMsICd0YXBXaXRoTnVtYmVyT2ZUYXBzJyksXG4gICAgbnVtYmVyT2ZUb3VjaGVzOiByZXF1aXJlSW50UGFyYW1ldGVyKCdudW1iZXJPZlRvdWNoZXMnLCBvcHRzLm51bWJlck9mVG91Y2hlcywgJ3RhcFdpdGhOdW1iZXJPZlRhcHMnKSxcbiAgfTtcbiAgcmV0dXJuIGF3YWl0IHRoaXMucHJveHlDb21tYW5kKGAvd2RhL2VsZW1lbnQvJHtlbGVtZW50SWR9L3RhcFdpdGhOdW1iZXJPZlRhcHNgLCAnUE9TVCcsIHBhcmFtcyk7XG59O1xuXG5oZWxwZXJzLm1vYmlsZVNlbGVjdFBpY2tlcldoZWVsVmFsdWUgPSBhc3luYyBmdW5jdGlvbiBtb2JpbGVTZWxlY3RQaWNrZXJXaGVlbFZhbHVlIChvcHRzID0ge30pIHtcbiAgY29uc3QgZWxlbWVudElkID0gdG9FbGVtZW50SWQob3B0cyk7XG4gIGlmICghZWxlbWVudElkKSB7XG4gICAgdGhyb3cgbmV3IGVycm9ycy5JbnZhbGlkQXJndW1lbnRFcnJvcignRWxlbWVudCBpZCBpcyBleHBlY3RlZCB0byBiZSBzZXQgZm9yIHNlbGVjdFBpY2tlcldoZWVsVmFsdWUgbWV0aG9kJyk7XG4gIH1cbiAgaWYgKCFfLmlzU3RyaW5nKG9wdHMub3JkZXIpIHx8ICFbJ25leHQnLCAncHJldmlvdXMnXS5pbmNsdWRlcyhvcHRzLm9yZGVyLnRvTG93ZXJDYXNlKCkpKSB7XG4gICAgdGhyb3cgbmV3IGVycm9ycy5JbnZhbGlkQXJndW1lbnRFcnJvcihgVGhlIG1hbmRhdG9yeSAnb3JkZXInIHBhcmFtZXRlciBpcyBleHBlY3RlZCB0byBiZSBlcXVhbCBlaXRoZXIgdG8gJ25leHQnIG9yICdwcmV2aW91cycuIGAgK1xuICAgICAgYCcke29wdHMub3JkZXJ9JyBpcyBnaXZlbiBpbnN0ZWFkYCk7XG4gIH1cbiAgY29uc3QgcGFyYW1zID0ge29yZGVyOiBvcHRzLm9yZGVyfTtcbiAgaWYgKG9wdHMub2Zmc2V0KSB7XG4gICAgcGFyYW1zLm9mZnNldCA9IHJlcXVpcmVGbG9hdFBhcmFtZXRlcignb2Zmc2V0Jywgb3B0cy5vZmZzZXQsICdzZWxlY3RQaWNrZXJXaGVlbFZhbHVlJyk7XG4gIH1cbiAgcmV0dXJuIGF3YWl0IHRoaXMucHJveHlDb21tYW5kKGAvd2RhL3BpY2tlcndoZWVsLyR7ZWxlbWVudElkfS9zZWxlY3RgLCAnUE9TVCcsIHBhcmFtcyk7XG59O1xuXG5oZWxwZXJzLm1vYmlsZVJvdGF0ZUVsZW1lbnQgPSBhc3luYyBmdW5jdGlvbiBtb2JpbGVSb3RhdGVFbGVtZW50IChvcHRzID0ge30pIHtcbiAgY29uc3QgZWxlbWVudElkID0gdG9FbGVtZW50SWQob3B0cyk7XG4gIGlmICghZWxlbWVudElkKSB7XG4gICAgdGhyb3cgbmV3IGVycm9ycy5JbnZhbGlkQXJndW1lbnRFcnJvcignRWxlbWVudCBpZCBpcyBleHBlY3RlZCB0byBiZSBzZXQgZm9yIHJvdGF0ZUVsZW1lbnQgbWV0aG9kJyk7XG4gIH1cbiAgY29uc3QgcGFyYW1zID0ge1xuICAgIHJvdGF0aW9uOiByZXF1aXJlRmxvYXRQYXJhbWV0ZXIoJ3JvdGF0aW9uJywgb3B0cy5yb3RhdGlvbiwgJ3JvdGF0ZUVsZW1lbnQnKSxcbiAgICB2ZWxvY2l0eTogcmVxdWlyZUZsb2F0UGFyYW1ldGVyKCd2ZWxvY2l0eScsIG9wdHMudmVsb2NpdHksICdyb3RhdGVFbGVtZW50JyksXG4gIH07XG4gIHJldHVybiBhd2FpdCB0aGlzLnByb3h5Q29tbWFuZChgL3dkYS9lbGVtZW50LyR7ZWxlbWVudElkfS9yb3RhdGVgLCAnUE9TVCcsIHBhcmFtcyk7XG59O1xuXG5oZWxwZXJzLmdldENvb3JkaW5hdGVzID0gYXN5bmMgZnVuY3Rpb24gZ2V0Q29vcmRpbmF0ZXMgKGdlc3R1cmUpIHtcbiAgLy8gZGVmYXVsdHNcbiAgbGV0IGNvb3JkaW5hdGVzID0ge3g6IDAsIHk6IDAsIGFyZU9mZnNldHM6IGZhbHNlfTtcblxuICBsZXQgb3B0aW9uWCA9IG51bGw7XG4gIGlmIChnZXN0dXJlLm9wdGlvbnMueCkge1xuICAgIG9wdGlvblggPSByZXF1aXJlRmxvYXRQYXJhbWV0ZXIoJ3gnLCBnZXN0dXJlLm9wdGlvbnMueCwgJ2dldENvb3JkaW5hdGVzJyk7XG4gIH1cbiAgbGV0IG9wdGlvblkgPSBudWxsO1xuICBpZiAoZ2VzdHVyZS5vcHRpb25zLnkpIHtcbiAgICBvcHRpb25ZID0gcmVxdWlyZUZsb2F0UGFyYW1ldGVyKCd5JywgZ2VzdHVyZS5vcHRpb25zLnksICdnZXRDb29yZGluYXRlcycpO1xuICB9XG5cbiAgLy8gZmlndXJlIG91dCB0aGUgZWxlbWVudCBjb29yZGluYXRlcy5cbiAgY29uc3QgZWxlbWVudElkID0gdG9FbGVtZW50SWQoZ2VzdHVyZS5vcHRpb25zKTtcbiAgaWYgKGVsZW1lbnRJZCkge1xuICAgIGxldCByZWN0ID0gYXdhaXQgdGhpcy5nZXRFbGVtZW50UmVjdChlbGVtZW50SWQpO1xuICAgIGxldCBwb3MgPSB7eDogcmVjdC54LCB5OiByZWN0Lnl9O1xuICAgIGxldCBzaXplID0ge3c6IHJlY3Qud2lkdGgsIGg6IHJlY3QuaGVpZ2h0fTtcblxuICAgIC8vIGRlZmF1bHRzXG4gICAgbGV0IG9mZnNldFggPSAwO1xuICAgIGxldCBvZmZzZXRZID0gMDtcblxuICAgIC8vIGdldCB0aGUgcmVhbCBvZmZzZXRzXG4gICAgaWYgKG9wdGlvblggfHwgb3B0aW9uWSkge1xuICAgICAgb2Zmc2V0WCA9IChvcHRpb25YIHx8IDApO1xuICAgICAgb2Zmc2V0WSA9IChvcHRpb25ZIHx8IDApO1xuICAgIH0gZWxzZSB7XG4gICAgICBvZmZzZXRYID0gKHNpemUudyAvIDIpO1xuICAgICAgb2Zmc2V0WSA9IChzaXplLmggLyAyKTtcbiAgICB9XG5cbiAgICAvLyBhcHBseSB0aGUgb2Zmc2V0c1xuICAgIGNvb3JkaW5hdGVzLnggPSBwb3MueCArIG9mZnNldFg7XG4gICAgY29vcmRpbmF0ZXMueSA9IHBvcy55ICsgb2Zmc2V0WTtcbiAgfSBlbHNlIHtcbiAgICAvLyBtb3ZlVG8gY29vcmRpbmF0ZXMgYXJlIHBhc3NlZCBpbiBhcyBvZmZzZXRzXG4gICAgY29vcmRpbmF0ZXMuYXJlT2Zmc2V0cyA9IChnZXN0dXJlLmFjdGlvbiA9PT0gJ21vdmVUbycpO1xuICAgIGNvb3JkaW5hdGVzLnggPSAob3B0aW9uWCB8fCAwKTtcbiAgICBjb29yZGluYXRlcy55ID0gKG9wdGlvblkgfHwgMCk7XG4gIH1cbiAgcmV0dXJuIGNvb3JkaW5hdGVzO1xufTtcblxuaGVscGVycy5hcHBseU1vdmVUb09mZnNldCA9IGZ1bmN0aW9uIGFwcGx5TW92ZVRvT2Zmc2V0IChmaXJzdENvb3JkaW5hdGVzLCBzZWNvbmRDb29yZGluYXRlcykge1xuICBpZiAoc2Vjb25kQ29vcmRpbmF0ZXMuYXJlT2Zmc2V0cykge1xuICAgIHJldHVybiB7XG4gICAgICB4OiBmaXJzdENvb3JkaW5hdGVzLnggKyBzZWNvbmRDb29yZGluYXRlcy54LFxuICAgICAgeTogZmlyc3RDb29yZGluYXRlcy55ICsgc2Vjb25kQ29vcmRpbmF0ZXMueSxcbiAgICB9O1xuICB9IGVsc2Uge1xuICAgIHJldHVybiBzZWNvbmRDb29yZGluYXRlcztcbiAgfVxufTtcblxuT2JqZWN0LmFzc2lnbihleHRlbnNpb25zLCBoZWxwZXJzLCBjb21tYW5kcyk7XG5leHBvcnQgeyBleHRlbnNpb25zLCBoZWxwZXJzLCBjb21tYW5kcywgZ2VzdHVyZXNDaGFpblRvU3RyaW5nIH07XG5leHBvcnQgZGVmYXVsdCBleHRlbnNpb25zO1xuIl0sIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7Ozs7O0FBQUE7O0FBQ0E7O0FBQ0E7O0FBQ0E7O0FBRUEsTUFBTUEsNEJBQTRCLEdBQUcsQ0FBQyxJQUFELEVBQU8sTUFBUCxFQUFlLE1BQWYsRUFBdUIsT0FBdkIsQ0FBckM7QUFFQSxNQUFNQyxPQUFPLEdBQUcsRUFBaEI7QUFBQSxNQUFvQkMsVUFBVSxHQUFHLEVBQWpDO0FBQUEsTUFBcUNDLFFBQVEsR0FBRyxFQUFoRDs7Ozs7QUFFQSxTQUFTQyxXQUFULENBQXNCQyxJQUFJLEdBQUcsRUFBN0IsRUFBaUM7RUFDL0IsSUFBSUEsSUFBSSxDQUFDQyxPQUFULEVBQWtCO0lBQ2hCQyxlQUFBLENBQUlDLElBQUosQ0FBVSwrRUFBVjtFQUNEOztFQUNELE1BQU1DLEVBQUUsR0FBR0osSUFBSSxDQUFDSyxTQUFMLElBQWtCTCxJQUFJLENBQUNDLE9BQWxDO0VBQ0EsT0FBT0csRUFBRSxHQUFHRSxhQUFBLENBQUtDLGFBQUwsQ0FBbUJILEVBQW5CLENBQUgsR0FBNEIsSUFBckM7QUFDRDs7QUFFRCxlQUFlSSx3QkFBZixDQUF5Q0MsTUFBekMsRUFBaURULElBQUksR0FBRyxFQUF4RCxFQUE0RDtFQUMxRCxPQUFPRCxXQUFXLENBQUNDLElBQUQsQ0FBWCxJQUNGTSxhQUFBLENBQUtDLGFBQUwsQ0FBbUIsTUFBTUUsTUFBTSxDQUFDQywyQkFBUCxD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
|
|
476
|
+
//# sourceMappingURL=data:application/json;charset=utf8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibGliL2NvbW1hbmRzL2dlc3R1cmUuanMiLCJuYW1lcyI6WyJTVVBQT1JURURfR0VTVFVSRV9ESVJFQ1RJT05TIiwiaGVscGVycyIsImV4dGVuc2lvbnMiLCJjb21tYW5kcyIsInRvRWxlbWVudElkIiwib3B0cyIsImVsZW1lbnQiLCJsb2ciLCJpbmZvIiwiZWwiLCJlbGVtZW50SWQiLCJ1dGlsIiwidW53cmFwRWxlbWVudCIsInRvRWxlbWVudE9yQXBwbGljYXRpb25JZCIsImRyaXZlciIsImZpbmROYXRpdmVFbGVtZW50T3JFbGVtZW50cyIsIm1vdmVUbyIsInhvZmZzZXQiLCJ5b2Zmc2V0IiwiaXNXZWJDb250ZXh0IiwieCIsInkiLCJnZXRMb2NhdGlvbiIsImNvb3JkcyIsImN1cldlYkNvb3JkcyIsImF0b21zRWxlbWVudCIsImdldEF0b21zRWxlbWVudCIsInJlbENvb3JkcyIsImV4ZWN1dGVBdG9tIiwiXyIsImlzTmlsIiwiY3VyQ29vcmRzIiwiZXJyb3JzIiwiVW5rbm93bkV4Y2VwdGlvbiIsImVsUG9zIiwicmVxdWlyZUZsb2F0UGFyYW1ldGVyIiwicGFyYW1OYW1lIiwicGFyYW1WYWx1ZSIsIm1ldGhvZE5hbWUiLCJpc1VuZGVmaW5lZCIsIkludmFsaWRBcmd1bWVudEVycm9yIiwicmVzdWx0IiwicGFyc2VGbG9hdCIsImlzTmFOIiwicmVxdWlyZUludFBhcmFtZXRlciIsInBhcnNlSW50IiwibW9iaWxlU2hha2UiLCJpc1NpbXVsYXRvciIsIlVua25vd25FcnJvciIsImRldmljZSIsInNoYWtlIiwiY2xpY2siLCJuYXRpdmVDbGljayIsInNldHRpbmdzIiwiZ2V0U2V0dGluZ3MiLCJuYXRpdmVXZWJUYXAiLCJuYXRpdmVXZWJUYXBTdHJpY3QiLCJkZWJ1ZyIsImdlc3R1cmVzQ2hhaW5Ub1N0cmluZyIsImdlc3R1cmVzIiwia2V5c1RvSW5jbHVkZSIsIm1hcCIsIml0ZW0iLCJvdGhlcktleXMiLCJkaWZmZXJlbmNlIiwia2V5cyIsImlzQXJyYXkiLCJpbnRlcnNlY3Rpb24iLCJsZW5ndGgiLCJhY3Rpb24iLCJpc1BsYWluT2JqZWN0IiwiSlNPTiIsInN0cmluZ2lmeSIsImpvaW4iLCJwZXJmb3JtQWN0aW9ucyIsImFjdGlvbnMiLCJwcmVwcm9jZXNzZWRBY3Rpb25zIiwiT2JqZWN0IiwiYXNzaWduIiwidHlwZSIsInBhcmFtZXRlcnMiLCJwb2ludGVyVHlwZSIsIm1vZGlmaWVkQWN0aW9uIiwiY2xvbmUiLCJmaWx0ZXIiLCJpbm5lckFjdGlvbiIsImR1cmF0aW9uIiwicHJveHlDb21tYW5kIiwicmVsZWFzZUFjdGlvbnMiLCJ3YXJuIiwicGVyZm9ybVRvdWNoIiwiZSIsImVycm9yQW5kVGhyb3ciLCJtZXNzYWdlIiwicGVyZm9ybU11bHRpQWN0aW9uIiwiaSIsImVuZHBvaW50IiwibW9iaWxlU2Nyb2xsVG9FbGVtZW50IiwibW9iaWxlU2Nyb2xsIiwibmFtZSIsImRpcmVjdGlvbiIsInByZWRpY2F0ZVN0cmluZyIsInRvVmlzaWJsZSIsImRpc3RhbmNlIiwicGFyYW1zIiwiaW5jbHVkZXMiLCJ0b0xvd2VyIiwibW9iaWxlU3dpcGUiLCJ2ZWxvY2l0eSIsIm1vYmlsZVBpbmNoIiwic2NhbGUiLCJtb2JpbGVEb3VibGVUYXAiLCJtb2JpbGVUd29GaW5nZXJUYXAiLCJtb2JpbGVUb3VjaEFuZEhvbGQiLCJtb2JpbGVUYXAiLCJtb2JpbGVEcmFnRnJvbVRvRm9yRHVyYXRpb24iLCJmcm9tWCIsImZyb21ZIiwidG9YIiwidG9ZIiwibW9iaWxlVGFwV2l0aE51bWJlck9mVGFwcyIsIm51bWJlck9mVGFwcyIsIm51bWJlck9mVG91Y2hlcyIsIm1vYmlsZUZvcmNlUHJlc3MiLCJwcmVzc3VyZSIsIm1vYmlsZVNlbGVjdFBpY2tlcldoZWVsVmFsdWUiLCJpc1N0cmluZyIsIm9yZGVyIiwidG9Mb3dlckNhc2UiLCJvZmZzZXQiLCJtb2JpbGVSb3RhdGVFbGVtZW50Iiwicm90YXRpb24iLCJnZXRDb29yZGluYXRlcyIsImdlc3R1cmUiLCJjb29yZGluYXRlcyIsImFyZU9mZnNldHMiLCJvcHRpb25YIiwib3B0aW9ucyIsIm9wdGlvblkiLCJyZWN0IiwiZ2V0RWxlbWVudFJlY3QiLCJwb3MiLCJzaXplIiwidyIsIndpZHRoIiwiaCIsImhlaWdodCIsIm9mZnNldFgiLCJvZmZzZXRZIiwiYXBwbHlNb3ZlVG9PZmZzZXQiLCJmaXJzdENvb3JkaW5hdGVzIiwic2Vjb25kQ29vcmRpbmF0ZXMiXSwic291cmNlUm9vdCI6Ii4uLy4uLy4uIiwic291cmNlcyI6WyJsaWIvY29tbWFuZHMvZ2VzdHVyZS5qcyJdLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBlcnJvcnMgfSBmcm9tICdhcHBpdW0vZHJpdmVyJztcbmltcG9ydCB7IHV0aWwgfSBmcm9tICdhcHBpdW0vc3VwcG9ydCc7XG5pbXBvcnQgXyBmcm9tICdsb2Rhc2gnO1xuaW1wb3J0IGxvZyBmcm9tICcuLi9sb2dnZXInO1xuXG5jb25zdCBTVVBQT1JURURfR0VTVFVSRV9ESVJFQ1RJT05TID0gWyd1cCcsICdkb3duJywgJ2xlZnQnLCAncmlnaHQnXTtcblxuY29uc3QgaGVscGVycyA9IHt9LCBleHRlbnNpb25zID0ge30sIGNvbW1hbmRzID0ge307XG5cbmZ1bmN0aW9uIHRvRWxlbWVudElkIChvcHRzID0ge30pIHtcbiAgaWYgKG9wdHMuZWxlbWVudCkge1xuICAgIGxvZy5pbmZvKGBUaGUgJ2VsZW1lbnQnIGFyZ3VtZW50IG5hbWUgaXMgZGVwcmVjYXRlZC4gQ29uc2lkZXIgdXNpbmcgJ2VsZW1lbnRJZCcgaW5zdGVhZGApO1xuICB9XG4gIGNvbnN0IGVsID0gb3B0cy5lbGVtZW50SWQgfHwgb3B0cy5lbGVtZW50O1xuICByZXR1cm4gZWwgPyB1dGlsLnVud3JhcEVsZW1lbnQoZWwpIDogbnVsbDtcbn1cblxuYXN5bmMgZnVuY3Rpb24gdG9FbGVtZW50T3JBcHBsaWNhdGlvbklkIChkcml2ZXIsIG9wdHMgPSB7fSkge1xuICByZXR1cm4gdG9FbGVtZW50SWQob3B0cylcbiAgICB8fCB1dGlsLnVud3JhcEVsZW1lbnQoYXdhaXQgZHJpdmVyLmZpbmROYXRpdmVFbGVtZW50T3JFbGVtZW50cyhgY2xhc3MgbmFtZWAsIGBYQ1VJRWxlbWVudFR5cGVBcHBsaWNhdGlvbmAsIGZhbHNlKSk7XG59XG5cbmNvbW1hbmRzLm1vdmVUbyA9IGFzeW5jIGZ1bmN0aW9uIG1vdmVUbyAoZWwsIHhvZmZzZXQgPSAwLCB5b2Zmc2V0ID0gMCkge1xuICBlbCA9IHV0aWwudW53cmFwRWxlbWVudChlbCk7XG5cbiAgaWYgKHRoaXMuaXNXZWJDb250ZXh0KCkpIHtcbiAgICBsZXQge3gsIHl9ID0gYXdhaXQgdGhpcy5nZXRMb2NhdGlvbihlbCk7XG4gICAgbGV0IGNvb3JkcyA9IHtcbiAgICAgIHg6IHggKyB4b2Zmc2V0LFxuICAgICAgeTogeSArIHlvZmZzZXRcbiAgICB9O1xuICAgIHRoaXMuY3VyV2ViQ29vcmRzID0gY29vcmRzO1xuICAgIGxldCBhdG9tc0VsZW1lbnQgPSB0aGlzLmdldEF0b21zRWxlbWVudChlbCk7XG4gICAgbGV0IHJlbENvb3JkcyA9IHt4OiB4b2Zmc2V0LCB5OiB5b2Zmc2V0fTtcbiAgICBhd2FpdCB0aGlzLmV4ZWN1dGVBdG9tKCdtb3ZlX21vdXNlJywgW2F0b21zRWxlbWVudCwgcmVsQ29vcmRzXSk7XG4gIH0gZWxzZSB7XG4gICAgaWYgKF8uaXNOaWwoZWwpKSB7XG4gICAgICBpZiAoIXRoaXMuY3VyQ29vcmRzKSB7XG4gICAgICAgIHRocm93IG5ldyBlcnJvcnMuVW5rbm93bkV4Y2VwdGlvbihcbiAgICAgICAgICAnQ3VycmVudCBjdXJzb3IgcG9zaXRpb24gdW5rbm93biwgcGxlYXNlIHVzZSBtb3ZlVG8gd2l0aCBhbiBlbGVtZW50IHRoZSBmaXJzdCB0aW1lLicpO1xuICAgICAgfVxuICAgICAgdGhpcy5jdXJDb29yZHMgPSB7XG4gICAgICAgIHg6IHRoaXMuY3VyQ29vcmRzLnggKyB4b2Zmc2V0LFxuICAgICAgICB5OiB0aGlzLmN1ckNvb3Jkcy55ICsgeW9mZnNldFxuICAgICAgfTtcbiAgICB9IGVsc2Uge1xuICAgICAgbGV0IGVsUG9zID0gYXdhaXQgdGhpcy5nZXRMb2NhdGlvbihlbCk7XG4gICAgICB0aGlzLmN1ckNvb3JkcyA9IHtcbiAgICAgICAgeDogZWxQb3MueCArIHhvZmZzZXQsXG4gICAgICAgIHk6IGVsUG9zLnkgKyB5b2Zmc2V0XG4gICAgICB9O1xuICAgIH1cbiAgfVxufTtcblxuZnVuY3Rpb24gcmVxdWlyZUZsb2F0UGFyYW1ldGVyIChwYXJhbU5hbWUsIHBhcmFtVmFsdWUsIG1ldGhvZE5hbWUpIHtcbiAgaWYgKF8uaXNVbmRlZmluZWQocGFyYW1WYWx1ZSkpIHtcbiAgICB0aHJvdyBuZXcgZXJyb3JzLkludmFsaWRBcmd1bWVudEVycm9yKGBcIiR7cGFyYW1OYW1lfVwiIHBhcmFtZXRlciBpcyBtYW5kYXRvcnkgZm9yIFwiJHttZXRob2ROYW1lfVwiIGNhbGxgKTtcbiAgfVxuICBjb25zdCByZXN1bHQgPSBwYXJzZUZsb2F0KHBhcmFtVmFsdWUpO1xuICBpZiAoaXNOYU4ocmVzdWx0KSkge1xuICAgIHRocm93IG5ldyBlcnJvcnMuSW52YWxpZEFyZ3VtZW50RXJyb3IoYFwiJHtwYXJhbU5hbWV9XCIgcGFyYW1ldGVyIHNob3VsZCBiZSBhIHZhbGlkIG51bWJlci4gXCIke3BhcmFtVmFsdWV9XCIgaXMgZ2l2ZW4gaW5zdGVhZGApO1xuICB9XG4gIHJldHVybiByZXN1bHQ7XG59XG5cbmZ1bmN0aW9uIHJlcXVpcmVJbnRQYXJhbWV0ZXIgKHBhcmFtTmFtZSwgcGFyYW1WYWx1ZSwgbWV0aG9kTmFtZSkge1xuICBpZiAoXy5pc1VuZGVmaW5lZChwYXJhbVZhbHVlKSkge1xuICAgIHRocm93IG5ldyBlcnJvcnMuSW52YWxpZEFyZ3VtZW50RXJyb3IoYFwiJHtwYXJhbU5hbWV9XCIgcGFyYW1ldGVyIGlzIG1hbmRhdG9yeSBmb3IgXCIke21ldGhvZE5hbWV9XCIgY2FsbGApO1xuICB9XG4gIGNvbnN0IHJlc3VsdCA9IHBhcnNlSW50KHBhcmFtVmFsdWUsIDEwKTtcbiAgaWYgKGlzTmFOKHJlc3VsdCkpIHtcbiAgICB0aHJvdyBuZXcgZXJyb3JzLkludmFsaWRBcmd1bWVudEVycm9yKGBcIiR7cGFyYW1OYW1lfVwiIHBhcmFtZXRlciBzaG91bGQgYmUgYSB2YWxpZCBpbnRlZ2VyLiBcIiR7cGFyYW1WYWx1ZX1cIiBpcyBnaXZlbiBpbnN0ZWFkYCk7XG4gIH1cbiAgcmV0dXJuIHJlc3VsdDtcbn1cblxuY29tbWFuZHMubW9iaWxlU2hha2UgPSBhc3luYyBmdW5jdGlvbiBtb2JpbGVTaGFrZSAoKSB7XG4gIGlmICghdGhpcy5pc1NpbXVsYXRvcigpKSB7XG4gICAgdGhyb3cgbmV3IGVycm9ycy5Vbmtub3duRXJyb3IoJ1NoYWtlIGlzIG5vdCBzdXBwb3J0ZWQgb24gcmVhbCBkZXZpY2VzJyk7XG4gIH1cbiAgYXdhaXQgdGhpcy5vcHRzLmRldmljZS5zaGFrZSgpO1xufTtcblxuY29tbWFuZHMuY2xpY2sgPSBhc3luYyBmdW5jdGlvbiBjbGljayAoZWwpIHtcbiAgaWYgKCF0aGlzLmlzV2ViQ29udGV4dCgpKSB7XG4gICAgLy8gdGhlcmUgYXJlIG11bHRpcGxlIGNvbW1hbmRzIHRoYXQgbWFwIGhlcmUsIHNvIG1hbnVhbGx5IHByb3h5XG4gICAgcmV0dXJuIGF3YWl0IHRoaXMubmF0aXZlQ2xpY2soZWwpO1xuICB9XG4gIGVsID0gdXRpbC51bndyYXBFbGVtZW50KGVsKTtcbiAgaWYgKChhd2FpdCB0aGlzLnNldHRpbmdzLmdldFNldHRpbmdzKCkpLm5hdGl2ZVdlYlRhcCB8fCAoYXdhaXQgdGhpcy5zZXR0aW5ncy5nZXRTZXR0aW5ncygpKS5uYXRpdmVXZWJUYXBTdHJpY3QpIHtcbiAgICAvLyBhdG9tcy1iYXNlZCBjbGlja3MgZG9uJ3QgYWx3YXlzIHdvcmsgaW4gc2FmYXJpIDdcbiAgICB0aGlzLmxvZy5kZWJ1ZygnVXNpbmcgbmF0aXZlIHdlYiB0YXAnKTtcbiAgICBhd2FpdCB0aGlzLm5hdGl2ZVdlYlRhcChlbCk7XG4gIH0gZWxzZSB7XG4gICAgY29uc3QgYXRvbXNFbGVtZW50ID0gdGhpcy5nZXRBdG9tc0VsZW1lbnQoZWwpO1xuICAgIHJldHVybiBhd2FpdCB0aGlzLmV4ZWN1dGVBdG9tKCdjbGljaycsIFthdG9tc0VsZW1lbnRdKTtcbiAgfVxufTtcblxuZnVuY3Rpb24gZ2VzdHVyZXNDaGFpblRvU3RyaW5nIChnZXN0dXJlcywga2V5c1RvSW5jbHVkZSA9IFsnb3B0aW9ucyddKSB7XG4gIHJldHVybiBnZXN0dXJlcy5tYXAoKGl0ZW0pID0+IHtcbiAgICBsZXQgb3RoZXJLZXlzID0gXy5kaWZmZXJlbmNlKF8ua2V5cyhpdGVtKSwgWydhY3Rpb24nXSk7XG4gICAgb3RoZXJLZXlzID0gXy5pc0FycmF5KGtleXNUb0luY2x1ZGUpID8gXy5pbnRlcnNlY3Rpb24ob3RoZXJLZXlzLCBrZXlzVG9JbmNsdWRlKSA6IG90aGVyS2V5cztcbiAgICBpZiAob3RoZXJLZXlzLmxlbmd0aCkge1xuICAgICAgcmV0dXJuIGAke2l0ZW0uYWN0aW9ufWAgK1xuICAgICAgICBgKCR7Xy5tYXAob3RoZXJLZXlzLCAoeCkgPT4geCArICc9JyArIChfLmlzUGxhaW5PYmplY3QoaXRlbVt4XSkgPyBKU09OLnN0cmluZ2lmeShpdGVtW3hdKSA6IGl0ZW1beF0pKS5qb2luKCcsICcpfSlgO1xuICAgIH1cbiAgICByZXR1cm4gaXRlbS5hY3Rpb247XG4gIH0pLmpvaW4oJy0nKTtcbn1cblxuY29tbWFuZHMucGVyZm9ybUFjdGlvbnMgPSBhc3luYyBmdW5jdGlvbiBwZXJmb3JtQWN0aW9ucyAoYWN0aW9ucykge1xuICB0aGlzLmxvZy5kZWJ1ZyhgUmVjZWl2ZWQgdGhlIGZvbGxvd2luZyBXM0MgYWN0aW9uczogJHtKU09OLnN0cmluZ2lmeShhY3Rpb25zLCBudWxsLCAnICAnKX1gKTtcbiAgLy8gVGhpcyBpcyBtYW5kYXRvcnksIHNpbmNlIFdEQSBvbmx5IHN1cHBvcnRzIFRPVUNIIHBvaW50ZXIgdHlwZVxuICAvLyBhbmQgU2VsZW5pdW0gQVBJIHVzZXMgTU9VU0UgYXMgdGhlIGRlZmF1bHQgb25lXG4gIGNvbnN0IHByZXByb2Nlc3NlZEFjdGlvbnMgPSBhY3Rpb25zXG4gICAgLm1hcCgoYWN0aW9uKSA9PiBPYmplY3QuYXNzaWduKHt9LCBhY3Rpb24sIGFjdGlvbi50eXBlID09PSAncG9pbnRlcicgPyB7XG4gICAgICBwYXJhbWV0ZXJzOiB7XG4gICAgICAgIHBvaW50ZXJUeXBlOiAndG91Y2gnXG4gICAgICB9XG4gICAgfSA6IHt9KSlcbiAgICAubWFwKChhY3Rpb24pID0+IHtcbiAgICAgIGNvbnN0IG1vZGlmaWVkQWN0aW9uID0gXy5jbG9uZShhY3Rpb24pIHx8IHt9O1xuICAgICAgLy8gU2VsZW5pdW0gQVBJIHVuZXhwZWN0ZWRseSBpbnNlcnRzIHplcm8gcGF1c2VzLCB3aGljaCBhcmUgbm90IHN1cHBvcnRlZCBieSBXREFcbiAgICAgIG1vZGlmaWVkQWN0aW9uLmFjdGlvbnMgPSAoYWN0aW9uLmFjdGlvbnMgfHwgW10pXG4gICAgICAgIC5maWx0ZXIoKGlubmVyQWN0aW9uKSA9PiAhKGlubmVyQWN0aW9uLnR5cGUgPT09ICdwYXVzZScgJiYgaW5uZXJBY3Rpb24uZHVyYXRpb24gPT09IDApKTtcbiAgICAgIHJldHVybiBtb2RpZmllZEFjdGlvbjtcbiAgICB9KTtcbiAgdGhpcy5sb2cuZGVidWcoYFByZXByb2Nlc3NlZCBhY3Rpb25zOiAke0pTT04uc3RyaW5naWZ5KHByZXByb2Nlc3NlZEFjdGlvbnMsIG51bGwsICcgICcpfWApO1xuICByZXR1cm4gYXdhaXQgdGhpcy5wcm94eUNvbW1hbmQoJy9hY3Rpb25zJywgJ1BPU1QnLCB7YWN0aW9uczogcHJlcHJvY2Vzc2VkQWN0aW9uc30pO1xufTtcblxuY29tbWFuZHMucmVsZWFzZUFjdGlvbnMgPSBmdW5jdGlvbiByZWxlYXNlQWN0aW9ucyAoKSB7XG4gIHRoaXMubG9nLndhcm4oJ09uIHRoaXMgcGxhdGZvcm0sIHJlbGVhc2VBY3Rpb25zIGlzIGEgbm8tb3AnKTtcbn07XG5cbmNvbW1hbmRzLnBlcmZvcm1Ub3VjaCA9IGFzeW5jIGZ1bmN0aW9uIHBlcmZvcm1Ub3VjaCAoZ2VzdHVyZXMpIHtcbiAgdGhpcy5sb2cuZGVidWcoYFJlY2VpdmVkIHRoZSBmb2xsb3dpbmcgdG91Y2ggYWN0aW9uOiAke2dlc3R1cmVzQ2hhaW5Ub1N0cmluZyhnZXN0dXJlcyl9YCk7XG4gIHRyeSB7XG4gICAgcmV0dXJuIGF3YWl0IHRoaXMucHJveHlDb21tYW5kKCcvd2RhL3RvdWNoL3BlcmZvcm0nLCAnUE9TVCcsIHthY3Rpb25zOiBnZXN0dXJlc30pO1xuICB9IGNhdGNoIChlKSB7XG4gICAgaWYgKCF0aGlzLmlzV2ViQ29udGV4dCgpKSB7XG4gICAgICB0aHJvdyBlO1xuICAgIH1cbiAgICB0aGlzLmxvZy5lcnJvckFuZFRocm93KCdUaGUgVG91Y2ggQVBJIGlzIGFpbWVkIGZvciB1c2FnZSBpbiBOQVRJVkUgY29udGV4dC4gJyArXG4gICAgICAnQ29uc2lkZXIgdXNpbmcgXCJleGVjdXRlXCIgQVBJIHdpdGggY3VzdG9tIGV2ZW50cyB0cmlnZ2VyIHNjcmlwdCAnICtcbiAgICAgIGB0byBlbXVsYXRlIHRvdWNoIGV2ZW50cyBiZWluZyBpbiBXRUJWSUVXIGNvbnRleHQuIE9yaWdpbmFsIGVycm9yOiAke2UubWVzc2FnZX1gKTtcbiAgfVxufTtcblxuY29tbWFuZHMucGVyZm9ybU11bHRpQWN0aW9uID0gYXN5bmMgZnVuY3Rpb24gcGVyZm9ybU11bHRpQWN0aW9uIChhY3Rpb25zKSB7XG4gIHRoaXMubG9nLmRlYnVnKGBSZWNlaXZlZCB0aGUgZm9sbG93aW5nIG11bHRpIHRvdWNoIGFjdGlvbjpgKTtcbiAgZm9yIChsZXQgaSBpbiBhY3Rpb25zKSB7XG4gICAgdGhpcy5sb2cuZGVidWcoYCAgICAke3BhcnNlSW50KGksIDEwKSArIDF9OiAke18ubWFwKGFjdGlvbnNbaV0sICdhY3Rpb24nKS5qb2luKCctJyl9YCk7XG4gIH1cbiAgdHJ5IHtcbiAgICByZXR1cm4gYXdhaXQgdGhpcy5wcm94eUNvbW1hbmQoJy93ZGEvdG91Y2gvbXVsdGkvcGVyZm9ybScsICdQT1NUJywge2FjdGlvbnN9KTtcbiAgfSBjYXRjaCAoZSkge1xuICAgIGlmICghdGhpcy5pc1dlYkNvbnRleHQoKSkge1xuICAgICAgdGhyb3cgZTtcbiAgICB9XG4gICAgdGhpcy5sb2cuZXJyb3JBbmRUaHJvdygnVGhlIE11bHRpVG91Y2ggQVBJIGlzIGFpbWVkIGZvciB1c2FnZSBpbiBOQVRJVkUgY29udGV4dC4gJyArXG4gICAgICAnQ29uc2lkZXIgdXNpbmcgXCJleGVjdXRlXCIgQVBJIHdpdGggY3VzdG9tIGV2ZW50cyB0cmlnZ2VyIHNjcmlwdCAnICtcbiAgICAgIGB0byBlbXVsYXRlIG11bHRpdG91Y2ggZXZlbnRzIGJlaW5nIGluIFdFQlZJRVcgY29udGV4dC4gT3JpZ2luYWwgZXJyb3I6ICR7ZS5tZXNzYWdlfWApO1xuICB9XG59O1xuXG5jb21tYW5kcy5uYXRpdmVDbGljayA9IGFzeW5jIGZ1bmN0aW9uIG5hdGl2ZUNsaWNrIChlbCkge1xuICBlbCA9IHV0aWwudW53cmFwRWxlbWVudChlbCk7XG4gIGxldCBlbmRwb2ludCA9IGAvZWxlbWVudC8ke2VsfS9jbGlja2A7XG4gIHJldHVybiBhd2FpdCB0aGlzLnByb3h5Q29tbWFuZChlbmRwb2ludCwgJ1BPU1QnLCB7fSk7XG59O1xuXG4vKlxuICogU2VlIGh0dHBzOi8vZ2l0aHViLmNvbS9mYWNlYm9vay9XZWJEcml2ZXJBZ2VudC9ibG9iL21hc3Rlci9XZWJEcml2ZXJBZ2VudExpYi9Db21tYW5kcy9GQkVsZW1lbnRDb21tYW5kcy5tXG4gKiB0byBnZXQgdGhlIGluZm8gYWJvdXQgYXZhaWxhYmxlIFdEQSBnZXN0dXJlcyBBUElcbiAqXG4gKiBTZWUgaHR0cHM6Ly9kZXZlbG9wZXIuYXBwbGUuY29tL3JlZmVyZW5jZS94Y3Rlc3QveGN1aWVsZW1lbnQgYW5kXG4gKiBodHRwczovL2RldmVsb3Blci5hcHBsZS5jb20vcmVmZXJlbmNlL3hjdGVzdC94Y3VpY29vcmRpbmF0ZSB0byBnZXQgdGhlIGRldGFpbGVkIGRlc2NyaXB0aW9uIG9mXG4gKiBhbGwgWENUZXN0IGdlc3R1cmVzXG4qL1xuXG5jb21tYW5kcy5tb2JpbGVTY3JvbGxUb0VsZW1lbnQgPSBhc3luYyBmdW5jdGlvbiBtb2JpbGVTY3JvbGxUb0VsZW1lbnQgKG9wdHMgPSB7fSkge1xuICBjb25zdCBlbGVtZW50SWQgPSBhd2FpdCB0b0VsZW1lbnRJZChvcHRzKTtcbiAgaWYgKCFlbGVtZW50SWQpIHtcbiAgICB0aHJvdyBuZXcgZXJyb3JzLkludmFsaWRBcmd1bWVudEVycm9yKCdFbGVtZW50IGlkIG11c3QgYmUgcHJvdmlkZWQnKTtcbiAgfVxuICByZXR1cm4gYXdhaXQgdGhpcy5wcm94eUNvbW1hbmQoYC93ZGEvZWxlbWVudC8ke2VsZW1lbnRJZH0vc2Nyb2xsVG9gLCAnUE9TVCcsIHt9KTtcbn07XG5cbmhlbHBlcnMubW9iaWxlU2Nyb2xsID0gYXN5bmMgZnVuY3Rpb24gbW9iaWxlU2Nyb2xsIChvcHRzID0ge30pIHtcbiAgLy8gV0RBIHN1cHBvcnRzIGZvdXIgc2Nyb2xsaW5nIHN0cmF0ZWdpZXM6IHByZWRpY2F0aW9uIGJhc2VkIG9uIG5hbWUsIGRpcmVjdGlvbixcbiAgLy8gcHJlZGljYXRlU3RyaW5nLCBhbmQgdG9WaXNpYmxlLCBpbiB0aGF0IG9yZGVyXG4gIGNvbnN0IHtcbiAgICBuYW1lLFxuICAgIGRpcmVjdGlvbixcbiAgICBwcmVkaWNhdGVTdHJpbmcsXG4gICAgdG9WaXNpYmxlLFxuICAgIGRpc3RhbmNlLFxuICB9ID0gb3B0cztcbiAgY29uc3QgcGFyYW1zID0ge307XG4gIGlmIChuYW1lKSB7XG4gICAgcGFyYW1zLm5hbWUgPSBuYW1lO1xuICB9IGVsc2UgaWYgKGRpcmVjdGlvbikge1xuICAgIGlmICghU1VQUE9SVEVEX0dFU1RVUkVfRElSRUNUSU9OUy5pbmNsdWRlcyhfLnRvTG93ZXIoZGlyZWN0aW9uKSkpIHtcbiAgICAgIHRocm93IG5ldyBlcnJvcnMuSW52YWxpZEFyZ3VtZW50RXJyb3IoYCdkaXJlY3Rpb24nIG11c3QgYmUgb25lIG9mOiAke1NVUFBPUlRFRF9HRVNUVVJFX0RJUkVDVElPTlN9YCk7XG4gICAgfVxuICAgIHBhcmFtcy5kaXJlY3Rpb24gPSBkaXJlY3Rpb247XG4gIH0gZWxzZSBpZiAocHJlZGljYXRlU3RyaW5nKSB7XG4gICAgcGFyYW1zLnByZWRpY2F0ZVN0cmluZyA9IHByZWRpY2F0ZVN0cmluZztcbiAgfSBlbHNlIGlmICh0b1Zpc2libGUpIHtcbiAgICBwYXJhbXMudG9WaXNpYmxlID0gdG9WaXNpYmxlO1xuICB9IGVsc2Uge1xuICAgIHRocm93IG5ldyBlcnJvcnMuSW52YWxpZEFyZ3VtZW50RXJyb3IoXG4gICAgICAnTW9iaWxlIHNjcm9sbCBzdXBwb3J0cyB0aGUgZm9sbG93aW5nIHN0cmF0ZWdpZXM6IG5hbWUsIGRpcmVjdGlvbiwgcHJlZGljYXRlU3RyaW5nLCBhbmQgdG9WaXNpYmxlLiAnICtcbiAgICAgICdTcGVjaWZ5IG9uZSBvZiB0aGVzZScpO1xuICB9XG4gIC8vIHdlIGNhbiBhbHNvIG9wdGlvbmFsbHkgcGFzcyBhIGRpc3RhbmNlIHdoaWNoIGFwcGVhcnMgdG8gYmUgYSByYXRpbyBvZlxuICAvLyBzY3JlZW4gaGVpZ2h0LCBzbyAxLjAgbWVhbnMgYSBmdWxsIHNjcmVlbidzIHdvcnRoIG9mIHNjcm9sbGluZ1xuICBpZiAoIV8uaXNOaWwoZGlzdGFuY2UpKSB7XG4gICAgcGFyYW1zLmRpc3RhbmNlID0gZGlzdGFuY2U7XG4gIH1cbiAgY29uc3QgZWxlbWVudElkID0gYXdhaXQgdG9FbGVtZW50T3JBcHBsaWNhdGlvbklkKHRoaXMsIG9wdHMpO1xuICByZXR1cm4gYXdhaXQgdGhpcy5wcm94eUNvbW1hbmQoYC93ZGEvZWxlbWVudC8ke2VsZW1lbnRJZH0vc2Nyb2xsYCwgJ1BPU1QnLCBwYXJhbXMpO1xufTtcblxuaGVscGVycy5tb2JpbGVTd2lwZSA9IGFzeW5jIGZ1bmN0aW9uIG1vYmlsZVN3aXBlIChvcHRzID0ge30pIHtcbiAgY29uc3Qge1xuICAgIGRpcmVjdGlvbixcbiAgICB2ZWxvY2l0eSxcbiAgfSA9IG9wdHM7XG4gIGlmICghU1VQUE9SVEVEX0dFU1RVUkVfRElSRUNUSU9OUy5pbmNsdWRlcyhfLnRvTG93ZXIoZGlyZWN0aW9uKSkpIHtcbiAgICB0aHJvdyBuZXcgZXJyb3JzLkludmFsaWRBcmd1bWVudEVycm9yKGAnZGlyZWN0aW9uJyBtdXN0IGJlIG9uZSBvZjogJHtTVVBQT1JURURfR0VTVFVSRV9ESVJFQ1RJT05TfWApO1xuICB9XG4gIGNvbnN0IHBhcmFtcyA9IHtkaXJlY3Rpb259O1xuICBpZiAoIV8uaXNOaWwodmVsb2NpdHkpKSB7XG4gICAgcGFyYW1zLnZlbG9jaXR5ID0gdmVsb2NpdHk7XG4gIH1cbiAgY29uc3QgZWxlbWVudElkID0gYXdhaXQgdG9FbGVtZW50T3JBcHBsaWNhdGlvbklkKHRoaXMsIG9wdHMpO1xuICByZXR1cm4gYXdhaXQgdGhpcy5wcm94eUNvbW1hbmQoYC93ZGEvZWxlbWVudC8ke2VsZW1lbnRJZH0vc3dpcGVgLCAnUE9TVCcsIHBhcmFtcyk7XG59O1xuXG5oZWxwZXJzLm1vYmlsZVBpbmNoID0gYXN5bmMgZnVuY3Rpb24gbW9iaWxlUGluY2ggKG9wdHMgPSB7fSkge1xuICBjb25zdCBwYXJhbXMgPSB7XG4gICAgc2NhbGU6IHJlcXVpcmVGbG9hdFBhcmFtZXRlcignc2NhbGUnLCBvcHRzLnNjYWxlLCAncGluY2gnKSxcbiAgICB2ZWxvY2l0eTogcmVxdWlyZUZsb2F0UGFyYW1ldGVyKCd2ZWxvY2l0eScsIG9wdHMudmVsb2NpdHksICdwaW5jaCcpXG4gIH07XG4gIGNvbnN0IGVsZW1lbnRJZCA9IGF3YWl0IHRvRWxlbWVudE9yQXBwbGljYXRpb25JZCh0aGlzLCBvcHRzKTtcbiAgcmV0dXJuIGF3YWl0IHRoaXMucHJveHlDb21tYW5kKGAvd2RhL2VsZW1lbnQvJHtlbGVtZW50SWR9L3BpbmNoYCwgJ1BPU1QnLCBwYXJhbXMpO1xufTtcblxuaGVscGVycy5tb2JpbGVEb3VibGVUYXAgPSBhc3luYyBmdW5jdGlvbiBtb2JpbGVEb3VibGVUYXAgKG9wdHMgPSB7fSkge1xuICBjb25zdCBlbGVtZW50SWQgPSB0b0VsZW1lbnRJZChvcHRzKTtcbiAgaWYgKGVsZW1lbnRJZCkge1xuICAgIC8vIERvdWJsZSB0YXAgZWxlbWVudFxuICAgIHJldHVybiBhd2FpdCB0aGlzLnByb3h5Q29tbWFuZChgL3dkYS9lbGVtZW50LyR7ZWxlbWVudElkfS9kb3VibGVUYXBgLCAnUE9TVCcpO1xuICB9XG4gIC8vIERvdWJsZSB0YXAgY29vcmRpbmF0ZXNcbiAgY29uc3QgcGFyYW1zID0ge1xuICAgIHg6IHJlcXVpcmVGbG9hdFBhcmFtZXRlcigneCcsIG9wdHMueCwgJ2RvdWJsZVRhcCcpLFxuICAgIHk6IHJlcXVpcmVGbG9hdFBhcmFtZXRlcigneScsIG9wdHMueSwgJ2RvdWJsZVRhcCcpXG4gIH07XG4gIHJldHVybiBhd2FpdCB0aGlzLnByb3h5Q29tbWFuZCgnL3dkYS9kb3VibGVUYXAnLCAnUE9TVCcsIHBhcmFtcyk7XG59O1xuXG5oZWxwZXJzLm1vYmlsZVR3b0ZpbmdlclRhcCA9IGFzeW5jIGZ1bmN0aW9uIG1vYmlsZVR3b0ZpbmdlclRhcCAob3B0cyA9IHt9KSB7XG4gIGNvbnN0IGVsZW1lbnRJZCA9IGF3YWl0IHRvRWxlbWVudE9yQXBwbGljYXRpb25JZCh0aGlzLCBvcHRzKTtcbiAgcmV0dXJuIGF3YWl0IHRoaXMucHJveHlDb21tYW5kKGAvd2RhL2VsZW1lbnQvJHtlbGVtZW50SWR9L3R3b0ZpbmdlclRhcGAsICdQT1NUJyk7XG59O1xuXG5oZWxwZXJzLm1vYmlsZVRvdWNoQW5kSG9sZCA9IGFzeW5jIGZ1bmN0aW9uIG1vYmlsZVRvdWNoQW5kSG9sZCAob3B0cyA9IHt9KSB7XG4gIGNvbnN0IHBhcmFtcyA9IHtcbiAgICBkdXJhdGlvbjogcmVxdWlyZUZsb2F0UGFyYW1ldGVyKCdkdXJhdGlvbicsIG9wdHMuZHVyYXRpb24sICd0b3VjaEFuZEhvbGQnKVxuICB9O1xuICBjb25zdCBlbGVtZW50SWQgPSB0b0VsZW1lbnRJZChvcHRzKTtcbiAgaWYgKGVsZW1lbnRJZCkge1xuICAgIC8vIExvbmcgdGFwIGVsZW1lbnRcbiAgICByZXR1cm4gYXdhaXQgdGhpcy5wcm94eUNvbW1hbmQoYC93ZGEvZWxlbWVudC8ke2VsZW1lbnRJZH0vdG91Y2hBbmRIb2xkYCwgJ1BPU1QnLCBwYXJhbXMpO1xuICB9XG4gIC8vIExvbmcgdGFwIGNvb3JkaW5hdGVzXG4gIHBhcmFtcy54ID0gcmVxdWlyZUZsb2F0UGFyYW1ldGVyKCd4Jywgb3B0cy54LCAndG91Y2hBbmRIb2xkJyk7XG4gIHBhcmFtcy55ID0gcmVxdWlyZUZsb2F0UGFyYW1ldGVyKCd5Jywgb3B0cy55LCAndG91Y2hBbmRIb2xkJyk7XG4gIHJldHVybiBhd2FpdCB0aGlzLnByb3h5Q29tbWFuZCgnL3dkYS90b3VjaEFuZEhvbGQnLCAnUE9TVCcsIHBhcmFtcyk7XG59O1xuXG5oZWxwZXJzLm1vYmlsZVRhcCA9IGFzeW5jIGZ1bmN0aW9uIG1vYmlsZVRhcCAob3B0cyA9IHt9KSB7XG4gIGNvbnN0IHBhcmFtcyA9IHtcbiAgICB4OiByZXF1aXJlRmxvYXRQYXJhbWV0ZXIoJ3gnLCBvcHRzLngsICd0YXAnKSxcbiAgICB5OiByZXF1aXJlRmxvYXRQYXJhbWV0ZXIoJ3knLCBvcHRzLnksICd0YXAnKVxuICB9O1xuICBjb25zdCBlbGVtZW50SWQgPSB0b0VsZW1lbnRJZChvcHRzKSB8fCAnMCc7XG4gIHJldHVybiBhd2FpdCB0aGlzLnByb3h5Q29tbWFuZChgL3dkYS90YXAvJHtlbGVtZW50SWR9YCwgJ1BPU1QnLCBwYXJhbXMpO1xufTtcblxuaGVscGVycy5tb2JpbGVEcmFnRnJvbVRvRm9yRHVyYXRpb24gPSBhc3luYyBmdW5jdGlvbiBtb2JpbGVEcmFnRnJvbVRvRm9yRHVyYXRpb24gKG9wdHMgPSB7fSkge1xuICBjb25zdCBwYXJhbXMgPSB7XG4gICAgZHVyYXRpb246IHJlcXVpcmVGbG9hdFBhcmFtZXRlcignZHVyYXRpb24nLCBvcHRzLmR1cmF0aW9uLCAnZHJhZ0Zyb21Ub0ZvckR1cmF0aW9uJyksXG4gICAgZnJvbVg6IHJlcXVpcmVGbG9hdFBhcmFtZXRlcignZnJvbVgnLCBvcHRzLmZyb21YLCAnZHJhZ0Zyb21Ub0ZvckR1cmF0aW9uJyksXG4gICAgZnJvbVk6IHJlcXVpcmVGbG9hdFBhcmFtZXRlcignZnJvbVknLCBvcHRzLmZyb21ZLCAnZHJhZ0Zyb21Ub0ZvckR1cmF0aW9uJyksXG4gICAgdG9YOiByZXF1aXJlRmxvYXRQYXJhbWV0ZXIoJ3RvWCcsIG9wdHMudG9YLCAnZHJhZ0Zyb21Ub0ZvckR1cmF0aW9uJyksXG4gICAgdG9ZOiByZXF1aXJlRmxvYXRQYXJhbWV0ZXIoJ3RvWScsIG9wdHMudG9ZLCAnZHJhZ0Zyb21Ub0ZvckR1cmF0aW9uJylcbiAgfTtcbiAgY29uc3QgZWxlbWVudElkID0gdG9FbGVtZW50SWQob3B0cyk7XG4gIHJldHVybiBlbGVtZW50SWRcbiAgICAvLyBEcmFnIGVsZW1lbnRcbiAgICA/IGF3YWl0IHRoaXMucHJveHlDb21tYW5kKGAvd2RhL2VsZW1lbnQvJHtlbGVtZW50SWR9L2RyYWdmcm9tdG9mb3JkdXJhdGlvbmAsICdQT1NUJywgcGFyYW1zKVxuICAgIC8vIERyYWcgY29vcmRpbmF0ZXNcbiAgICA6IGF3YWl0IHRoaXMucHJveHlDb21tYW5kKCcvd2RhL2RyYWdmcm9tdG9mb3JkdXJhdGlvbicsICdQT1NUJywgcGFyYW1zKTtcbn07XG5cbmhlbHBlcnMubW9iaWxlVGFwV2l0aE51bWJlck9mVGFwcyA9IGFzeW5jIGZ1bmN0aW9uIG1vYmlsZVRhcFdpdGhOdW1iZXJPZlRhcHMgKG9wdHMgPSB7fSkge1xuICBjb25zdCBlbGVtZW50SWQgPSB0b0VsZW1lbnRJZChvcHRzKTtcbiAgaWYgKCFlbGVtZW50SWQpIHtcbiAgICB0aHJvdyBuZXcgZXJyb3JzLkludmFsaWRBcmd1bWVudEVycm9yKCdFbGVtZW50IGlkIGlzIGV4cGVjdGVkIHRvIGJlIHNldCBmb3IgdGFwV2l0aE51bWJlck9mVGFwcyBtZXRob2QnKTtcbiAgfVxuICBjb25zdCBwYXJhbXMgPSB7XG4gICAgbnVtYmVyT2ZUYXBzOiByZXF1aXJlSW50UGFyYW1ldGVyKCdudW1iZXJPZlRhcHMnLCBvcHRzLm51bWJlck9mVGFwcywgJ3RhcFdpdGhOdW1iZXJPZlRhcHMnKSxcbiAgICBudW1iZXJPZlRvdWNoZXM6IHJlcXVpcmVJbnRQYXJhbWV0ZXIoJ251bWJlck9mVG91Y2hlcycsIG9wdHMubnVtYmVyT2ZUb3VjaGVzLCAndGFwV2l0aE51bWJlck9mVGFwcycpLFxuICB9O1xuICByZXR1cm4gYXdhaXQgdGhpcy5wcm94eUNvbW1hbmQoYC93ZGEvZWxlbWVudC8ke2VsZW1lbnRJZH0vdGFwV2l0aE51bWJlck9mVGFwc2AsICdQT1NUJywgcGFyYW1zKTtcbn07XG5cbmhlbHBlcnMubW9iaWxlRm9yY2VQcmVzcyA9IGFzeW5jIGZ1bmN0aW9uIG1vYmlsZUZvcmNlUHJlc3MgKG9wdHMgPSB7fSkge1xuICBjb25zdCB7eCwgeSwgZHVyYXRpb24sIHByZXNzdXJlfSA9IG9wdHM7XG4gIGNvbnN0IGVsZW1lbnRJZCA9IHRvRWxlbWVudElkKG9wdHMpO1xuICBjb25zdCBlbmRwb2ludCA9IGVsZW1lbnRJZCA/IGAvd2RhL2VsZW1lbnQvJHtlbGVtZW50SWR9L2ZvcmNlVG91Y2hgIDogYC93ZGEvZm9yY2VUb3VjaGA7XG4gIHJldHVybiBhd2FpdCB0aGlzLnByb3h5Q29tbWFuZChlbmRwb2ludCwgJ1BPU1QnLCB7eCwgeSwgZHVyYXRpb24sIHByZXNzdXJlfSk7XG59O1xuXG5oZWxwZXJzLm1vYmlsZVNlbGVjdFBpY2tlcldoZWVsVmFsdWUgPSBhc3luYyBmdW5jdGlvbiBtb2JpbGVTZWxlY3RQaWNrZXJXaGVlbFZhbHVlIChvcHRzID0ge30pIHtcbiAgY29uc3QgZWxlbWVudElkID0gdG9FbGVtZW50SWQob3B0cyk7XG4gIGlmICghZWxlbWVudElkKSB7XG4gICAgdGhyb3cgbmV3IGVycm9ycy5JbnZhbGlkQXJndW1lbnRFcnJvcignRWxlbWVudCBpZCBpcyBleHBlY3RlZCB0byBiZSBzZXQgZm9yIHNlbGVjdFBpY2tlcldoZWVsVmFsdWUgbWV0aG9kJyk7XG4gIH1cbiAgaWYgKCFfLmlzU3RyaW5nKG9wdHMub3JkZXIpIHx8ICFbJ25leHQnLCAncHJldmlvdXMnXS5pbmNsdWRlcyhvcHRzLm9yZGVyLnRvTG93ZXJDYXNlKCkpKSB7XG4gICAgdGhyb3cgbmV3IGVycm9ycy5JbnZhbGlkQXJndW1lbnRFcnJvcihgVGhlIG1hbmRhdG9yeSAnb3JkZXInIHBhcmFtZXRlciBpcyBleHBlY3RlZCB0byBiZSBlcXVhbCBlaXRoZXIgdG8gJ25leHQnIG9yICdwcmV2aW91cycuIGAgK1xuICAgICAgYCcke29wdHMub3JkZXJ9JyBpcyBnaXZlbiBpbnN0ZWFkYCk7XG4gIH1cbiAgY29uc3QgcGFyYW1zID0ge29yZGVyOiBvcHRzLm9yZGVyfTtcbiAgaWYgKG9wdHMub2Zmc2V0KSB7XG4gICAgcGFyYW1zLm9mZnNldCA9IHJlcXVpcmVGbG9hdFBhcmFtZXRlcignb2Zmc2V0Jywgb3B0cy5vZmZzZXQsICdzZWxlY3RQaWNrZXJXaGVlbFZhbHVlJyk7XG4gIH1cbiAgcmV0dXJuIGF3YWl0IHRoaXMucHJveHlDb21tYW5kKGAvd2RhL3BpY2tlcndoZWVsLyR7ZWxlbWVudElkfS9zZWxlY3RgLCAnUE9TVCcsIHBhcmFtcyk7XG59O1xuXG5oZWxwZXJzLm1vYmlsZVJvdGF0ZUVsZW1lbnQgPSBhc3luYyBmdW5jdGlvbiBtb2JpbGVSb3RhdGVFbGVtZW50IChvcHRzID0ge30pIHtcbiAgY29uc3QgZWxlbWVudElkID0gdG9FbGVtZW50SWQob3B0cyk7XG4gIGlmICghZWxlbWVudElkKSB7XG4gICAgdGhyb3cgbmV3IGVycm9ycy5JbnZhbGlkQXJndW1lbnRFcnJvcignRWxlbWVudCBpZCBpcyBleHBlY3RlZCB0byBiZSBzZXQgZm9yIHJvdGF0ZUVsZW1lbnQgbWV0aG9kJyk7XG4gIH1cbiAgY29uc3QgcGFyYW1zID0ge1xuICAgIHJvdGF0aW9uOiByZXF1aXJlRmxvYXRQYXJhbWV0ZXIoJ3JvdGF0aW9uJywgb3B0cy5yb3RhdGlvbiwgJ3JvdGF0ZUVsZW1lbnQnKSxcbiAgICB2ZWxvY2l0eTogcmVxdWlyZUZsb2F0UGFyYW1ldGVyKCd2ZWxvY2l0eScsIG9wdHMudmVsb2NpdHksICdyb3RhdGVFbGVtZW50JyksXG4gIH07XG4gIHJldHVybiBhd2FpdCB0aGlzLnByb3h5Q29tbWFuZChgL3dkYS9lbGVtZW50LyR7ZWxlbWVudElkfS9yb3RhdGVgLCAnUE9TVCcsIHBhcmFtcyk7XG59O1xuXG5oZWxwZXJzLmdldENvb3JkaW5hdGVzID0gYXN5bmMgZnVuY3Rpb24gZ2V0Q29vcmRpbmF0ZXMgKGdlc3R1cmUpIHtcbiAgLy8gZGVmYXVsdHNcbiAgbGV0IGNvb3JkaW5hdGVzID0ge3g6IDAsIHk6IDAsIGFyZU9mZnNldHM6IGZhbHNlfTtcblxuICBsZXQgb3B0aW9uWCA9IG51bGw7XG4gIGlmIChnZXN0dXJlLm9wdGlvbnMueCkge1xuICAgIG9wdGlvblggPSByZXF1aXJlRmxvYXRQYXJhbWV0ZXIoJ3gnLCBnZXN0dXJlLm9wdGlvbnMueCwgJ2dldENvb3JkaW5hdGVzJyk7XG4gIH1cbiAgbGV0IG9wdGlvblkgPSBudWxsO1xuICBpZiAoZ2VzdHVyZS5vcHRpb25zLnkpIHtcbiAgICBvcHRpb25ZID0gcmVxdWlyZUZsb2F0UGFyYW1ldGVyKCd5JywgZ2VzdHVyZS5vcHRpb25zLnksICdnZXRDb29yZGluYXRlcycpO1xuICB9XG5cbiAgLy8gZmlndXJlIG91dCB0aGUgZWxlbWVudCBjb29yZGluYXRlcy5cbiAgY29uc3QgZWxlbWVudElkID0gdG9FbGVtZW50SWQoZ2VzdHVyZS5vcHRpb25zKTtcbiAgaWYgKGVsZW1lbnRJZCkge1xuICAgIGxldCByZWN0ID0gYXdhaXQgdGhpcy5nZXRFbGVtZW50UmVjdChlbGVtZW50SWQpO1xuICAgIGxldCBwb3MgPSB7eDogcmVjdC54LCB5OiByZWN0Lnl9O1xuICAgIGxldCBzaXplID0ge3c6IHJlY3Qud2lkdGgsIGg6IHJlY3QuaGVpZ2h0fTtcblxuICAgIC8vIGRlZmF1bHRzXG4gICAgbGV0IG9mZnNldFggPSAwO1xuICAgIGxldCBvZmZzZXRZID0gMDtcblxuICAgIC8vIGdldCB0aGUgcmVhbCBvZmZzZXRzXG4gICAgaWYgKG9wdGlvblggfHwgb3B0aW9uWSkge1xuICAgICAgb2Zmc2V0WCA9IChvcHRpb25YIHx8IDApO1xuICAgICAgb2Zmc2V0WSA9IChvcHRpb25ZIHx8IDApO1xuICAgIH0gZWxzZSB7XG4gICAgICBvZmZzZXRYID0gKHNpemUudyAvIDIpO1xuICAgICAgb2Zmc2V0WSA9IChzaXplLmggLyAyKTtcbiAgICB9XG5cbiAgICAvLyBhcHBseSB0aGUgb2Zmc2V0c1xuICAgIGNvb3JkaW5hdGVzLnggPSBwb3MueCArIG9mZnNldFg7XG4gICAgY29vcmRpbmF0ZXMueSA9IHBvcy55ICsgb2Zmc2V0WTtcbiAgfSBlbHNlIHtcbiAgICAvLyBtb3ZlVG8gY29vcmRpbmF0ZXMgYXJlIHBhc3NlZCBpbiBhcyBvZmZzZXRzXG4gICAgY29vcmRpbmF0ZXMuYXJlT2Zmc2V0cyA9IChnZXN0dXJlLmFjdGlvbiA9PT0gJ21vdmVUbycpO1xuICAgIGNvb3JkaW5hdGVzLnggPSAob3B0aW9uWCB8fCAwKTtcbiAgICBjb29yZGluYXRlcy55ID0gKG9wdGlvblkgfHwgMCk7XG4gIH1cbiAgcmV0dXJuIGNvb3JkaW5hdGVzO1xufTtcblxuaGVscGVycy5hcHBseU1vdmVUb09mZnNldCA9IGZ1bmN0aW9uIGFwcGx5TW92ZVRvT2Zmc2V0IChmaXJzdENvb3JkaW5hdGVzLCBzZWNvbmRDb29yZGluYXRlcykge1xuICBpZiAoc2Vjb25kQ29vcmRpbmF0ZXMuYXJlT2Zmc2V0cykge1xuICAgIHJldHVybiB7XG4gICAgICB4OiBmaXJzdENvb3JkaW5hdGVzLnggKyBzZWNvbmRDb29yZGluYXRlcy54LFxuICAgICAgeTogZmlyc3RDb29yZGluYXRlcy55ICsgc2Vjb25kQ29vcmRpbmF0ZXMueSxcbiAgICB9O1xuICB9IGVsc2Uge1xuICAgIHJldHVybiBzZWNvbmRDb29yZGluYXRlcztcbiAgfVxufTtcblxuT2JqZWN0LmFzc2lnbihleHRlbnNpb25zLCBoZWxwZXJzLCBjb21tYW5kcyk7XG5leHBvcnQgeyBleHRlbnNpb25zLCBoZWxwZXJzLCBjb21tYW5kcywgZ2VzdHVyZXNDaGFpblRvU3RyaW5nIH07XG5leHBvcnQgZGVmYXVsdCBleHRlbnNpb25zO1xuIl0sIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7Ozs7O0FBQUE7O0FBQ0E7O0FBQ0E7O0FBQ0E7O0FBRUEsTUFBTUEsNEJBQTRCLEdBQUcsQ0FBQyxJQUFELEVBQU8sTUFBUCxFQUFlLE1BQWYsRUFBdUIsT0FBdkIsQ0FBckM7QUFFQSxNQUFNQyxPQUFPLEdBQUcsRUFBaEI7QUFBQSxNQUFvQkMsVUFBVSxHQUFHLEVBQWpDO0FBQUEsTUFBcUNDLFFBQVEsR0FBRyxFQUFoRDs7Ozs7QUFFQSxTQUFTQyxXQUFULENBQXNCQyxJQUFJLEdBQUcsRUFBN0IsRUFBaUM7RUFDL0IsSUFBSUEsSUFBSSxDQUFDQyxPQUFULEVBQWtCO0lBQ2hCQyxlQUFBLENBQUlDLElBQUosQ0FBVSwrRUFBVjtFQUNEOztFQUNELE1BQU1DLEVBQUUsR0FBR0osSUFBSSxDQUFDSyxTQUFMLElBQWtCTCxJQUFJLENBQUNDLE9BQWxDO0VBQ0EsT0FBT0csRUFBRSxHQUFHRSxhQUFBLENBQUtDLGFBQUwsQ0FBbUJILEVBQW5CLENBQUgsR0FBNEIsSUFBckM7QUFDRDs7QUFFRCxlQUFlSSx3QkFBZixDQUF5Q0MsTUFBekMsRUFBaURULElBQUksR0FBRyxFQUF4RCxFQUE0RDtFQUMxRCxPQUFPRCxXQUFXLENBQUNDLElBQUQsQ0FBWCxJQUNGTSxhQUFBLENBQUtDLGFBQUwsQ0FBbUIsTUFBTUUsTUFBTSxDQUFDQywyQkFBUCxDQUFvQyxZQUFwQyxFQUFrRCw0QkFBbEQsRUFBK0UsS0FBL0UsQ0FBekIsQ0FETDtBQUVEOztBQUVEWixRQUFRLENBQUNhLE1BQVQsR0FBa0IsZUFBZUEsTUFBZixDQUF1QlAsRUFBdkIsRUFBMkJRLE9BQU8sR0FBRyxDQUFyQyxFQUF3Q0MsT0FBTyxHQUFHLENBQWxELEVBQXFEO0VBQ3JFVCxFQUFFLEdBQUdFLGFBQUEsQ0FBS0Ms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
|
package/lib/commands/execute.js
CHANGED
|
@@ -74,6 +74,8 @@ extensions.executeMobile = async function executeMobile (mobileCommand, opts = {
|
|
|
74
74
|
dragFromToForDuration: 'mobileDragFromToForDuration',
|
|
75
75
|
// https://developer.apple.com/documentation/xctest/xcuielement/1618665-rotate?language=objc
|
|
76
76
|
rotateElement: 'mobileRotateElement',
|
|
77
|
+
forcePress: 'mobileForcePress',
|
|
78
|
+
scrollToElement: 'mobileScrollToElement',
|
|
77
79
|
|
|
78
80
|
//endregion gestures support
|
|
79
81
|
alert: 'mobileHandleAlert',
|
package/lib/commands/gesture.js
CHANGED
|
@@ -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
|
|
@@ -313,6 +321,13 @@ helpers.mobileTapWithNumberOfTaps = async function mobileTapWithNumberOfTaps (op
|
|
|
313
321
|
return await this.proxyCommand(`/wda/element/${elementId}/tapWithNumberOfTaps`, 'POST', params);
|
|
314
322
|
};
|
|
315
323
|
|
|
324
|
+
helpers.mobileForcePress = async function mobileForcePress (opts = {}) {
|
|
325
|
+
const {x, y, duration, pressure} = opts;
|
|
326
|
+
const elementId = toElementId(opts);
|
|
327
|
+
const endpoint = elementId ? `/wda/element/${elementId}/forceTouch` : `/wda/forceTouch`;
|
|
328
|
+
return await this.proxyCommand(endpoint, 'POST', {x, y, duration, pressure});
|
|
329
|
+
};
|
|
330
|
+
|
|
316
331
|
helpers.mobileSelectPickerWheelValue = async function mobileSelectPickerWheelValue (opts = {}) {
|
|
317
332
|
const elementId = toElementId(opts);
|
|
318
333
|
if (!elementId) {
|