appium-mac2-driver 1.5.1 → 1.5.2

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (37) hide show
  1. package/CHANGELOG.md +12 -0
  2. package/README.md +1 -1
  3. package/WebDriverAgentMac/WebDriverAgentLib/Commands/AMActionCommands.m +7 -0
  4. package/WebDriverAgentMac/WebDriverAgentLib/Utilities/FBW3CActionsSynthesizer.m +6 -4
  5. package/build/index.js +1 -1
  6. package/build/lib/commands/app-management.js +1 -1
  7. package/build/lib/commands/app-management.js.map +1 -1
  8. package/build/lib/commands/applescript.js +1 -1
  9. package/build/lib/commands/applescript.js.map +1 -1
  10. package/build/lib/commands/execute.js +1 -1
  11. package/build/lib/commands/execute.js.map +1 -1
  12. package/build/lib/commands/find.js +1 -1
  13. package/build/lib/commands/find.js.map +1 -1
  14. package/build/lib/commands/gestures.js +1 -1
  15. package/build/lib/commands/gestures.js.map +1 -1
  16. package/build/lib/commands/index.js +1 -1
  17. package/build/lib/commands/index.js.map +1 -1
  18. package/build/lib/commands/record-screen.js +1 -1
  19. package/build/lib/commands/record-screen.js.map +1 -1
  20. package/build/lib/commands/screenshots.js +1 -1
  21. package/build/lib/commands/screenshots.js.map +1 -1
  22. package/build/lib/commands/source.js +1 -1
  23. package/build/lib/commands/source.js.map +1 -1
  24. package/build/lib/desired-caps.js +1 -1
  25. package/build/lib/desired-caps.js.map +1 -1
  26. package/build/lib/driver.js +1 -1
  27. package/build/lib/driver.js.map +1 -1
  28. package/build/lib/logger.js +1 -1
  29. package/build/lib/logger.js.map +1 -1
  30. package/build/lib/method-map.js +1 -1
  31. package/build/lib/method-map.js.map +1 -1
  32. package/build/lib/utils.js +1 -1
  33. package/build/lib/utils.js.map +1 -1
  34. package/build/lib/wda-mac.js +1 -1
  35. package/build/lib/wda-mac.js.map +1 -1
  36. package/npm-shrinkwrap.json +1080 -11432
  37. package/package.json +2 -2
package/CHANGELOG.md CHANGED
@@ -1,3 +1,15 @@
1
+ ## [1.5.2](https://github.com/appium/appium-mac2-driver/compare/v1.5.1...v1.5.2) (2023-02-20)
2
+
3
+
4
+ ### Bug Fixes
5
+
6
+ * Init mouse cursor at the proper starting position ([#192](https://github.com/appium/appium-mac2-driver/issues/192)) ([67d10e0](https://github.com/appium/appium-mac2-driver/commit/67d10e09a9bd4f88560bb05b953ff7988f005289))
7
+
8
+
9
+ ### Miscellaneous Chores
10
+
11
+ * Add dummy implementation of releaseActions API ([#191](https://github.com/appium/appium-mac2-driver/issues/191)) ([45f7956](https://github.com/appium/appium-mac2-driver/commit/45f79565ee4afa1e0ac2faabe30454420800f7c9))
12
+
1
13
  ## [1.5.1](https://github.com/appium/appium-mac2-driver/compare/v1.5.0...v1.5.1) (2023-01-17)
2
14
 
3
15
 
package/README.md CHANGED
@@ -73,7 +73,7 @@ These attribute values could be retrieved from the page source output and then u
73
73
 
74
74
  Mac2 driver supports the following location strategies:
75
75
 
76
- Name | Description | Speed Ranking | Example
76
+ Name | Description | Speed Ranking | Pseudocode
77
77
  --- | --- | --- | ---
78
78
  accessibilityId, id, name | These all strategies are mapped to the same Mac2 driver ByIdentifier lookup strategy. The locator matches the passed value with element's `identifer` attribute case-sensitively. | `⭐⭐⭐⭐⭐` | AppiumBy.accessibilityId("identifier"), By.id("identifier"), By.name("identifier")
79
79
  className | Class name uses stringified element types for lookup | `⭐⭐⭐⭐⭐` | By.className("XCUIElementTypePopUpButton")
@@ -23,6 +23,7 @@
23
23
  return
24
24
  @[
25
25
  [[FBRoute POST:@"/actions"] respondWithTarget:self action:@selector(handlePerformW3CActions:)],
26
+ [[FBRoute DELETE:@"/actions"] respondWithTarget:self action:@selector(handleReleaseW3CActions:)],
26
27
  ];
27
28
  }
28
29
 
@@ -46,4 +47,10 @@
46
47
  return FBResponseWithOK();
47
48
  }
48
49
 
50
+ + (id<FBResponsePayload>)handleReleaseW3CActions:(FBRouteRequest *)request
51
+ {
52
+ // just a dummy call to avoid UnknownCommandError being thrown
53
+ return FBResponseWithOK();
54
+ }
55
+
49
56
  @end
@@ -288,10 +288,12 @@ static NSString *const FB_KEY_ACTIONS = @"actions";
288
288
  error:(NSError **)error
289
289
  {
290
290
  if (nil == eventPath) {
291
- XCPointerEventPath *result = [[XCPointerEventPath alloc] initForMouseEvents];
292
- [result moveMouseToPoint:self.atPosition
293
- atOffset:FBMillisToSeconds(self.offset)
294
- duration:FBMillisToSeconds(self.duration)];
291
+ XCPointerEventPath *result = [[XCPointerEventPath alloc] initForMouseEventsAtLocation:self.atPosition];
292
+ if (self.offset > 0 || self.duration > 0) {
293
+ [result moveMouseToPoint:self.atPosition
294
+ atOffset:FBMillisToSeconds(self.offset)
295
+ duration:FBMillisToSeconds(self.duration)];
296
+ }
295
297
  return @[result];
296
298
  }
297
299
 
package/build/index.js CHANGED
@@ -15,4 +15,4 @@ require("source-map-support/register");
15
15
  var _driver = _interopRequireDefault(require("./lib/driver"));
16
16
  var _default = _driver.default;
17
17
  exports.default = _default;
18
- //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJNYWMyRHJpdmVyIl0sInNvdXJjZXMiOlsiLi4vaW5kZXguanMiXSwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IE1hYzJEcml2ZXIgZnJvbSAnLi9saWIvZHJpdmVyJztcblxuZXhwb3J0IGRlZmF1bHQgTWFjMkRyaXZlcjtcbmV4cG9ydCB7IE1hYzJEcml2ZXIgfTtcbiJdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7Ozs7Ozs7QUFBQTtBQUFzQyxlQUV2QkEsZUFBVTtBQUFBIn0=
18
+ //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJfZHJpdmVyIiwiX2ludGVyb3BSZXF1aXJlRGVmYXVsdCIsInJlcXVpcmUiLCJfZGVmYXVsdCIsIk1hYzJEcml2ZXIiLCJleHBvcnRzIiwiZGVmYXVsdCJdLCJzb3VyY2VzIjpbIi4uL2luZGV4LmpzIl0sInNvdXJjZXNDb250ZW50IjpbImltcG9ydCBNYWMyRHJpdmVyIGZyb20gJy4vbGliL2RyaXZlcic7XG5cbmV4cG9ydCBkZWZhdWx0IE1hYzJEcml2ZXI7XG5leHBvcnQgeyBNYWMyRHJpdmVyIH07XG4iXSwibWFwcGluZ3MiOiI7Ozs7Ozs7Ozs7Ozs7O0FBQUEsSUFBQUEsT0FBQSxHQUFBQyxzQkFBQSxDQUFBQyxPQUFBO0FBQXNDLElBQUFDLFFBQUEsR0FFdkJDLGVBQVU7QUFBQUMsT0FBQSxDQUFBQyxPQUFBLEdBQUFILFFBQUEifQ==
@@ -43,4 +43,4 @@ commands.macosQueryAppState = async function macosQueryAppState(opts = {}) {
43
43
  };
44
44
  var _default = commands;
45
45
  exports.default = _default;
46
- //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJjb21tYW5kcyIsIm1hY29zTGF1bmNoQXBwIiwib3B0cyIsImJ1bmRsZUlkIiwiZW52aXJvbm1lbnQiLCJ3ZGEiLCJwcm94eSIsImNvbW1hbmQiLCJhcmd1bWVudHMiLCJtYWNvc0FjdGl2YXRlQXBwIiwibWFjb3NUZXJtaW5hdGVBcHAiLCJtYWNvc1F1ZXJ5QXBwU3RhdGUiXSwic291cmNlcyI6WyIuLi8uLi8uLi9saWIvY29tbWFuZHMvYXBwLW1hbmFnZW1lbnQuanMiXSwic291cmNlc0NvbnRlbnQiOlsiY29uc3QgY29tbWFuZHMgPSB7fTtcblxuLyoqXG4gKiBAdHlwZWRlZiB7T2JqZWN0fSBMYXVuY2hBcHBPcHRpb25zXG4gKiBAcHJvcGVydHkgeyFzdHJpbmd9IGJ1bmRsZUlkIGJ1bmRsZSBpZGVudGlmaWVyIG9mIHRoZSBhcHAgdG8gYmUgbGF1bmNoZWRcbiAqIG9yIGFjdGl2YXRlZFxuICogQHByb3BlcnR5IHs/QXJyYXk8c3RyaW5nPn0gYXJndW1lbnRzIHRoZSBsaXN0IG9mIGNvbW1hbmQgbGluZSBhcmd1bWVudHNcbiAqIGZvciB0aGUgYXBwIHRvIGJlIGJlIGxhdW5jaGVkIHdpdGguIFRoaXMgcGFyYW1ldGVyIGlzIGlnbm9yZWQgaWYgdGhlIGFwcFxuICogaXMgYWxyZWFkeSBydW5uaW5nLlxuICogQHByb3BlcnR5IHtPYmplY3R9IGVudmlyb25tZW50IGVudmlyb25tZW50IHZhcmlhYmxlcyBtYXBwaW5nLiBDdXN0b21cbiAqIHZhcmlhYmxlcyBhcmUgYWRkZWQgdG8gdGhlIGRlZmF1bHQgcHJvY2VzcyBlbnZpcm9ubWVudC5cbiAqL1xuXG4vKipcbiAqIFN0YXJ0IGFuIGFwcCB3aXRoIGdpdmVuIGJ1bmRsZSBpZGVudGlmaWVyIG9yIGFjdGl2YXRlcyBpdFxuICogaWYgdGhlIGFwcCBpcyBhbHJlYWR5IHJ1bm5pbmcuIEFuIGV4Y2VwdGlvbiBpcyB0aHJvd24gaWYgdGhlXG4gKiBhcHAgd2l0aCB0aGUgZ2l2ZW4gaWRlbnRpZmllciBjYW5ub3QgYmUgZm91bmQuXG4gKlxuICogQHBhcmFtIHtMYXVuY2hBcHBPcHRpb25zfSBvcHRzXG4gKi9cbmNvbW1hbmRzLm1hY29zTGF1bmNoQXBwID0gYXN5bmMgZnVuY3Rpb24gbWFjb3NMYXVuY2hBcHAgKG9wdHMgPSB7fSkge1xuICBjb25zdCB7IGJ1bmRsZUlkLCBlbnZpcm9ubWVudCB9ID0gb3B0cztcbiAgcmV0dXJuIGF3YWl0IHRoaXMud2RhLnByb3h5LmNvbW1hbmQoJy93ZGEvYXBwcy9sYXVuY2gnLCAnUE9TVCcsIHtcbiAgICBhcmd1bWVudHM6IG9wdHMuYXJndW1lbnRzLFxuICAgIGVudmlyb25tZW50LFxuICAgIGJ1bmRsZUlkLFxuICB9KTtcbn07XG5cbi8qKlxuICogQHR5cGVkZWYge09iamVjdH0gQWN0aXZhdGVBcHBPcHRpb25zXG4gKiBAcHJvcGVydHkgeyFzdHJpbmd9IGJ1bmRsZUlkIGJ1bmRsZSBpZGVudGlmaWVyIG9mIHRoZSBhcHAgdG8gYmUgYWN0aXZhdGVkXG4gKi9cblxuLyoqXG4gKiBBY3RpdmF0ZSBhbiBhcHAgd2l0aCBnaXZlbiBidW5kbGUgaWRlbnRpZmllci4gQW4gZXhjZXB0aW9uIGlzIHRocm93biBpZiB0aGVcbiAqIGFwcCBjYW5ub3QgYmUgZm91bmQgb3IgaXMgbm90IHJ1bm5pbmcuXG4gKlxuICogQHBhcmFtIHtBY3RpdmF0ZUFwcE9wdGlvbnN9IG9wdHNcbiAqL1xuY29tbWFuZHMubWFjb3NBY3RpdmF0ZUFwcCA9IGFzeW5jIGZ1bmN0aW9uIG1hY29zQWN0aXZhdGVBcHAgKG9wdHMgPSB7fSkge1xuICBjb25zdCB7IGJ1bmRsZUlkIH0gPSBvcHRzO1xuICByZXR1cm4gYXdhaXQgdGhpcy53ZGEucHJveHkuY29tbWFuZCgnL3dkYS9hcHBzL2FjdGl2YXRlJywgJ1BPU1QnLCB7IGJ1bmRsZUlkIH0pO1xufTtcblxuLyoqXG4gKiBAdHlwZWRlZiB7T2JqZWN0fSBUZXJtaW5hdGVBcHBPcHRpb25zXG4gKiBAcHJvcGVydHkgeyFzdHJpbmd9IGJ1bmRsZUlkIGJ1bmRsZSBpZGVudGlmaWVyIG9mIHRoZSBhcHAgdG8gYmUgdGVybWluYXRlZFxuICovXG5cbi8qKlxuICogVGVybWluYXRlIGFuIGFwcCB3aXRoIGdpdmVuIGJ1bmRsZSBpZGVudGlmaWVyLiBBbiBleGNlcHRpb24gaXMgdGhyb3duIGlmIHRoZVxuICogYXBwIGNhbm5vdCBiZSBmb3VuZC5cbiAqXG4gKiBAcGFyYW0ge1Rlcm1pbmF0ZUFwcE9wdGlvbnN9IG9wdHNcbiAqIEByZXR1cm5zIHtib29sZWFufSBgdHJ1ZWAgaWYgdGhlIGFwcCB3YXMgcnVubmluZyBhbmQgaGFzIGJlZW4gc3VjY2Vzc2Z1bGx5IHRlcm1pbmF0ZWQuXG4gKiBgZmFsc2VgIGlmIHRoZSBhcHAgd2FzIG5vdCBydW5uaW5nIGJlZm9yZS5cbiAqL1xuY29tbWFuZHMubWFjb3NUZXJtaW5hdGVBcHAgPSBhc3luYyBmdW5jdGlvbiBtYWNvc1Rlcm1pbmF0ZUFwcCAob3B0cyA9IHt9KSB7XG4gIGNvbnN0IHsgYnVuZGxlSWQgfSA9IG9wdHM7XG4gIHJldHVybiBhd2FpdCB0aGlzLndkYS5wcm94eS5jb21tYW5kKCcvd2RhL2FwcHMvdGVybWluYXRlJywgJ1BPU1QnLCB7IGJ1bmRsZUlkIH0pO1xufTtcblxuLyoqXG4gKiBAdHlwZWRlZiB7T2JqZWN0fSBRdWVyeUFwcFN0YXRlT3B0aW9uc1xuICogQHByb3BlcnR5IHshc3RyaW5nfSBidW5kbGVJZCBidW5kbGUgaWRlbnRpZmllciBvZiB0aGUgYXBwIHdob3NlIHN0YXRlIHNob3VsZCBiZSBxdWVyaWVkXG4gKi9cblxuLyoqXG4gKiBRdWVyeSBhbiBhcHAgc3RhdGUgd2l0aCBnaXZlbiBidW5kbGUgaWRlbnRpZmllci4gQW4gZXhjZXB0aW9uIGlzIHRocm93biBpZiB0aGVcbiAqIGFwcCBjYW5ub3QgYmUgZm91bmQuXG4gKlxuICogQHBhcmFtIHtRdWVyeUFwcFN0YXRlT3B0aW9uc30gb3B0c1xuICogQHJldHVybnMge251bWJlcn0gVGhlIGFwcGxpY2F0aW9uIHN0YXRlIGNvZGUuIFNlZVxuICogaHR0cHM6Ly9kZXZlbG9wZXIuYXBwbGUuY29tL2RvY3VtZW50YXRpb24veGN0ZXN0L3hjdWlhcHBsaWNhdGlvbnN0YXRlP2xhbmd1YWdlPW9iamNcbiAqIGZvciBtb3JlIGRldGFpbHNcbiAqL1xuY29tbWFuZHMubWFjb3NRdWVyeUFwcFN0YXRlID0gYXN5bmMgZnVuY3Rpb24gbWFjb3NRdWVyeUFwcFN0YXRlIChvcHRzID0ge30pIHtcbiAgY29uc3QgeyBidW5kbGVJZCB9ID0gb3B0cztcbiAgcmV0dXJuIGF3YWl0IHRoaXMud2RhLnByb3h5LmNvbW1hbmQoJy93ZGEvYXBwcy9zdGF0ZScsICdQT1NUJywgeyBidW5kbGVJZCB9KTtcbn07XG5cbmV4cG9ydCBkZWZhdWx0IGNvbW1hbmRzO1xuIl0sIm1hcHBpbmdzIjoiOzs7Ozs7O0FBQUEsTUFBTUEsUUFBUSxHQUFHLENBQUMsQ0FBQztBQW9CbkJBLFFBQVEsQ0FBQ0MsY0FBYyxHQUFHLGVBQWVBLGNBQWMsQ0FBRUMsSUFBSSxHQUFHLENBQUMsQ0FBQyxFQUFFO0VBQ2xFLE1BQU07SUFBRUMsUUFBUTtJQUFFQztFQUFZLENBQUMsR0FBR0YsSUFBSTtFQUN0QyxPQUFPLE1BQU0sSUFBSSxDQUFDRyxHQUFHLENBQUNDLEtBQUssQ0FBQ0MsT0FBTyxDQUFDLGtCQUFrQixFQUFFLE1BQU0sRUFBRTtJQUM5REMsU0FBUyxFQUFFTixJQUFJLENBQUNNLFNBQVM7SUFDekJKLFdBQVc7SUFDWEQ7RUFDRixDQUFDLENBQUM7QUFDSixDQUFDO0FBYURILFFBQVEsQ0FBQ1MsZ0JBQWdCLEdBQUcsZUFBZUEsZ0JBQWdCLENBQUVQLElBQUksR0FBRyxDQUFDLENBQUMsRUFBRTtFQUN0RSxNQUFNO0lBQUVDO0VBQVMsQ0FBQyxHQUFHRCxJQUFJO0VBQ3pCLE9BQU8sTUFBTSxJQUFJLENBQUNHLEdBQUcsQ0FBQ0MsS0FBSyxDQUFDQyxPQUFPLENBQUMsb0JBQW9CLEVBQUUsTUFBTSxFQUFFO0lBQUVKO0VBQVMsQ0FBQyxDQUFDO0FBQ2pGLENBQUM7QUFlREgsUUFBUSxDQUFDVSxpQkFBaUIsR0FBRyxlQUFlQSxpQkFBaUIsQ0FBRVIsSUFBSSxHQUFHLENBQUMsQ0FBQyxFQUFFO0VBQ3hFLE1BQU07SUFBRUM7RUFBUyxDQUFDLEdBQUdELElBQUk7RUFDekIsT0FBTyxNQUFNLElBQUksQ0FBQ0csR0FBRyxDQUFDQyxLQUFLLENBQUNDLE9BQU8sQ0FBQyxxQkFBcUIsRUFBRSxNQUFNLEVBQUU7SUFBRUo7RUFBUyxDQUFDLENBQUM7QUFDbEYsQ0FBQztBQWdCREgsUUFBUSxDQUFDVyxrQkFBa0IsR0FBRyxlQUFlQSxrQkFBa0IsQ0FBRVQsSUFBSSxHQUFHLENBQUMsQ0FBQyxFQUFFO0VBQzFFLE1BQU07SUFBRUM7RUFBUyxDQUFDLEdBQUdELElBQUk7RUFDekIsT0FBTyxNQUFNLElBQUksQ0FBQ0csR0FBRyxDQUFDQyxLQUFLLENBQUNDLE9BQU8sQ0FBQyxpQkFBaUIsRUFBRSxNQUFNLEVBQUU7SUFBRUo7RUFBUyxDQUFDLENBQUM7QUFDOUUsQ0FBQztBQUFDLGVBRWFILFFBQVE7QUFBQSJ9
46
+ //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJjb21tYW5kcyIsIm1hY29zTGF1bmNoQXBwIiwib3B0cyIsImJ1bmRsZUlkIiwiZW52aXJvbm1lbnQiLCJ3ZGEiLCJwcm94eSIsImNvbW1hbmQiLCJhcmd1bWVudHMiLCJtYWNvc0FjdGl2YXRlQXBwIiwibWFjb3NUZXJtaW5hdGVBcHAiLCJtYWNvc1F1ZXJ5QXBwU3RhdGUiLCJfZGVmYXVsdCIsImV4cG9ydHMiLCJkZWZhdWx0Il0sInNvdXJjZXMiOlsiLi4vLi4vLi4vbGliL2NvbW1hbmRzL2FwcC1tYW5hZ2VtZW50LmpzIl0sInNvdXJjZXNDb250ZW50IjpbImNvbnN0IGNvbW1hbmRzID0ge307XG5cbi8qKlxuICogQHR5cGVkZWYge09iamVjdH0gTGF1bmNoQXBwT3B0aW9uc1xuICogQHByb3BlcnR5IHshc3RyaW5nfSBidW5kbGVJZCBidW5kbGUgaWRlbnRpZmllciBvZiB0aGUgYXBwIHRvIGJlIGxhdW5jaGVkXG4gKiBvciBhY3RpdmF0ZWRcbiAqIEBwcm9wZXJ0eSB7P0FycmF5PHN0cmluZz59IGFyZ3VtZW50cyB0aGUgbGlzdCBvZiBjb21tYW5kIGxpbmUgYXJndW1lbnRzXG4gKiBmb3IgdGhlIGFwcCB0byBiZSBiZSBsYXVuY2hlZCB3aXRoLiBUaGlzIHBhcmFtZXRlciBpcyBpZ25vcmVkIGlmIHRoZSBhcHBcbiAqIGlzIGFscmVhZHkgcnVubmluZy5cbiAqIEBwcm9wZXJ0eSB7T2JqZWN0fSBlbnZpcm9ubWVudCBlbnZpcm9ubWVudCB2YXJpYWJsZXMgbWFwcGluZy4gQ3VzdG9tXG4gKiB2YXJpYWJsZXMgYXJlIGFkZGVkIHRvIHRoZSBkZWZhdWx0IHByb2Nlc3MgZW52aXJvbm1lbnQuXG4gKi9cblxuLyoqXG4gKiBTdGFydCBhbiBhcHAgd2l0aCBnaXZlbiBidW5kbGUgaWRlbnRpZmllciBvciBhY3RpdmF0ZXMgaXRcbiAqIGlmIHRoZSBhcHAgaXMgYWxyZWFkeSBydW5uaW5nLiBBbiBleGNlcHRpb24gaXMgdGhyb3duIGlmIHRoZVxuICogYXBwIHdpdGggdGhlIGdpdmVuIGlkZW50aWZpZXIgY2Fubm90IGJlIGZvdW5kLlxuICpcbiAqIEBwYXJhbSB7TGF1bmNoQXBwT3B0aW9uc30gb3B0c1xuICovXG5jb21tYW5kcy5tYWNvc0xhdW5jaEFwcCA9IGFzeW5jIGZ1bmN0aW9uIG1hY29zTGF1bmNoQXBwIChvcHRzID0ge30pIHtcbiAgY29uc3QgeyBidW5kbGVJZCwgZW52aXJvbm1lbnQgfSA9IG9wdHM7XG4gIHJldHVybiBhd2FpdCB0aGlzLndkYS5wcm94eS5jb21tYW5kKCcvd2RhL2FwcHMvbGF1bmNoJywgJ1BPU1QnLCB7XG4gICAgYXJndW1lbnRzOiBvcHRzLmFyZ3VtZW50cyxcbiAgICBlbnZpcm9ubWVudCxcbiAgICBidW5kbGVJZCxcbiAgfSk7XG59O1xuXG4vKipcbiAqIEB0eXBlZGVmIHtPYmplY3R9IEFjdGl2YXRlQXBwT3B0aW9uc1xuICogQHByb3BlcnR5IHshc3RyaW5nfSBidW5kbGVJZCBidW5kbGUgaWRlbnRpZmllciBvZiB0aGUgYXBwIHRvIGJlIGFjdGl2YXRlZFxuICovXG5cbi8qKlxuICogQWN0aXZhdGUgYW4gYXBwIHdpdGggZ2l2ZW4gYnVuZGxlIGlkZW50aWZpZXIuIEFuIGV4Y2VwdGlvbiBpcyB0aHJvd24gaWYgdGhlXG4gKiBhcHAgY2Fubm90IGJlIGZvdW5kIG9yIGlzIG5vdCBydW5uaW5nLlxuICpcbiAqIEBwYXJhbSB7QWN0aXZhdGVBcHBPcHRpb25zfSBvcHRzXG4gKi9cbmNvbW1hbmRzLm1hY29zQWN0aXZhdGVBcHAgPSBhc3luYyBmdW5jdGlvbiBtYWNvc0FjdGl2YXRlQXBwIChvcHRzID0ge30pIHtcbiAgY29uc3QgeyBidW5kbGVJZCB9ID0gb3B0cztcbiAgcmV0dXJuIGF3YWl0IHRoaXMud2RhLnByb3h5LmNvbW1hbmQoJy93ZGEvYXBwcy9hY3RpdmF0ZScsICdQT1NUJywgeyBidW5kbGVJZCB9KTtcbn07XG5cbi8qKlxuICogQHR5cGVkZWYge09iamVjdH0gVGVybWluYXRlQXBwT3B0aW9uc1xuICogQHByb3BlcnR5IHshc3RyaW5nfSBidW5kbGVJZCBidW5kbGUgaWRlbnRpZmllciBvZiB0aGUgYXBwIHRvIGJlIHRlcm1pbmF0ZWRcbiAqL1xuXG4vKipcbiAqIFRlcm1pbmF0ZSBhbiBhcHAgd2l0aCBnaXZlbiBidW5kbGUgaWRlbnRpZmllci4gQW4gZXhjZXB0aW9uIGlzIHRocm93biBpZiB0aGVcbiAqIGFwcCBjYW5ub3QgYmUgZm91bmQuXG4gKlxuICogQHBhcmFtIHtUZXJtaW5hdGVBcHBPcHRpb25zfSBvcHRzXG4gKiBAcmV0dXJucyB7Ym9vbGVhbn0gYHRydWVgIGlmIHRoZSBhcHAgd2FzIHJ1bm5pbmcgYW5kIGhhcyBiZWVuIHN1Y2Nlc3NmdWxseSB0ZXJtaW5hdGVkLlxuICogYGZhbHNlYCBpZiB0aGUgYXBwIHdhcyBub3QgcnVubmluZyBiZWZvcmUuXG4gKi9cbmNvbW1hbmRzLm1hY29zVGVybWluYXRlQXBwID0gYXN5bmMgZnVuY3Rpb24gbWFjb3NUZXJtaW5hdGVBcHAgKG9wdHMgPSB7fSkge1xuICBjb25zdCB7IGJ1bmRsZUlkIH0gPSBvcHRzO1xuICByZXR1cm4gYXdhaXQgdGhpcy53ZGEucHJveHkuY29tbWFuZCgnL3dkYS9hcHBzL3Rlcm1pbmF0ZScsICdQT1NUJywgeyBidW5kbGVJZCB9KTtcbn07XG5cbi8qKlxuICogQHR5cGVkZWYge09iamVjdH0gUXVlcnlBcHBTdGF0ZU9wdGlvbnNcbiAqIEBwcm9wZXJ0eSB7IXN0cmluZ30gYnVuZGxlSWQgYnVuZGxlIGlkZW50aWZpZXIgb2YgdGhlIGFwcCB3aG9zZSBzdGF0ZSBzaG91bGQgYmUgcXVlcmllZFxuICovXG5cbi8qKlxuICogUXVlcnkgYW4gYXBwIHN0YXRlIHdpdGggZ2l2ZW4gYnVuZGxlIGlkZW50aWZpZXIuIEFuIGV4Y2VwdGlvbiBpcyB0aHJvd24gaWYgdGhlXG4gKiBhcHAgY2Fubm90IGJlIGZvdW5kLlxuICpcbiAqIEBwYXJhbSB7UXVlcnlBcHBTdGF0ZU9wdGlvbnN9IG9wdHNcbiAqIEByZXR1cm5zIHtudW1iZXJ9IFRoZSBhcHBsaWNhdGlvbiBzdGF0ZSBjb2RlLiBTZWVcbiAqIGh0dHBzOi8vZGV2ZWxvcGVyLmFwcGxlLmNvbS9kb2N1bWVudGF0aW9uL3hjdGVzdC94Y3VpYXBwbGljYXRpb25zdGF0ZT9sYW5ndWFnZT1vYmpjXG4gKiBmb3IgbW9yZSBkZXRhaWxzXG4gKi9cbmNvbW1hbmRzLm1hY29zUXVlcnlBcHBTdGF0ZSA9IGFzeW5jIGZ1bmN0aW9uIG1hY29zUXVlcnlBcHBTdGF0ZSAob3B0cyA9IHt9KSB7XG4gIGNvbnN0IHsgYnVuZGxlSWQgfSA9IG9wdHM7XG4gIHJldHVybiBhd2FpdCB0aGlzLndkYS5wcm94eS5jb21tYW5kKCcvd2RhL2FwcHMvc3RhdGUnLCAnUE9TVCcsIHsgYnVuZGxlSWQgfSk7XG59O1xuXG5leHBvcnQgZGVmYXVsdCBjb21tYW5kcztcbiJdLCJtYXBwaW5ncyI6Ijs7Ozs7OztBQUFBLE1BQU1BLFFBQVEsR0FBRyxDQUFDLENBQUM7QUFvQm5CQSxRQUFRLENBQUNDLGNBQWMsR0FBRyxlQUFlQSxjQUFjQSxDQUFFQyxJQUFJLEdBQUcsQ0FBQyxDQUFDLEVBQUU7RUFDbEUsTUFBTTtJQUFFQyxRQUFRO0lBQUVDO0VBQVksQ0FBQyxHQUFHRixJQUFJO0VBQ3RDLE9BQU8sTUFBTSxJQUFJLENBQUNHLEdBQUcsQ0FBQ0MsS0FBSyxDQUFDQyxPQUFPLENBQUMsa0JBQWtCLEVBQUUsTUFBTSxFQUFFO0lBQzlEQyxTQUFTLEVBQUVOLElBQUksQ0FBQ00sU0FBUztJQUN6QkosV0FBVztJQUNYRDtFQUNGLENBQUMsQ0FBQztBQUNKLENBQUM7QUFhREgsUUFBUSxDQUFDUyxnQkFBZ0IsR0FBRyxlQUFlQSxnQkFBZ0JBLENBQUVQLElBQUksR0FBRyxDQUFDLENBQUMsRUFBRTtFQUN0RSxNQUFNO0lBQUVDO0VBQVMsQ0FBQyxHQUFHRCxJQUFJO0VBQ3pCLE9BQU8sTUFBTSxJQUFJLENBQUNHLEdBQUcsQ0FBQ0MsS0FBSyxDQUFDQyxPQUFPLENBQUMsb0JBQW9CLEVBQUUsTUFBTSxFQUFFO0lBQUVKO0VBQVMsQ0FBQyxDQUFDO0FBQ2pGLENBQUM7QUFlREgsUUFBUSxDQUFDVSxpQkFBaUIsR0FBRyxlQUFlQSxpQkFBaUJBLENBQUVSLElBQUksR0FBRyxDQUFDLENBQUMsRUFBRTtFQUN4RSxNQUFNO0lBQUVDO0VBQVMsQ0FBQyxHQUFHRCxJQUFJO0VBQ3pCLE9BQU8sTUFBTSxJQUFJLENBQUNHLEdBQUcsQ0FBQ0MsS0FBSyxDQUFDQyxPQUFPLENBQUMscUJBQXFCLEVBQUUsTUFBTSxFQUFFO0lBQUVKO0VBQVMsQ0FBQyxDQUFDO0FBQ2xGLENBQUM7QUFnQkRILFFBQVEsQ0FBQ1csa0JBQWtCLEdBQUcsZUFBZUEsa0JBQWtCQSxDQUFFVCxJQUFJLEdBQUcsQ0FBQyxDQUFDLEVBQUU7RUFDMUUsTUFBTTtJQUFFQztFQUFTLENBQUMsR0FBR0QsSUFBSTtFQUN6QixPQUFPLE1BQU0sSUFBSSxDQUFDRyxHQUFHLENBQUNDLEtBQUssQ0FBQ0MsT0FBTyxDQUFDLGlCQUFpQixFQUFFLE1BQU0sRUFBRTtJQUFFSjtFQUFTLENBQUMsQ0FBQztBQUM5RSxDQUFDO0FBQUMsSUFBQVMsUUFBQSxHQUVhWixRQUFRO0FBQUFhLE9BQUEsQ0FBQUMsT0FBQSxHQUFBRixRQUFBIn0=
@@ -1 +1 @@
1
- {"version":3,"file":"app-management.js","names":["commands","macosLaunchApp","opts","bundleId","environment","wda","proxy","command","arguments","macosActivateApp","macosTerminateApp","macosQueryAppState"],"sources":["../../../lib/commands/app-management.js"],"sourcesContent":["const commands = {};\n\n/**\n * @typedef {Object} LaunchAppOptions\n * @property {!string} bundleId bundle identifier of the app to be launched\n * or activated\n * @property {?Array<string>} arguments the list of command line arguments\n * for the app to be be launched with. This parameter is ignored if the app\n * is already running.\n * @property {Object} environment environment variables mapping. Custom\n * variables are added to the default process environment.\n */\n\n/**\n * Start an app with given bundle identifier or activates it\n * if the app is already running. An exception is thrown if the\n * app with the given identifier cannot be found.\n *\n * @param {LaunchAppOptions} opts\n */\ncommands.macosLaunchApp = async function macosLaunchApp (opts = {}) {\n const { bundleId, environment } = opts;\n return await this.wda.proxy.command('/wda/apps/launch', 'POST', {\n arguments: opts.arguments,\n environment,\n bundleId,\n });\n};\n\n/**\n * @typedef {Object} ActivateAppOptions\n * @property {!string} bundleId bundle identifier of the app to be activated\n */\n\n/**\n * Activate an app with given bundle identifier. An exception is thrown if the\n * app cannot be found or is not running.\n *\n * @param {ActivateAppOptions} opts\n */\ncommands.macosActivateApp = async function macosActivateApp (opts = {}) {\n const { bundleId } = opts;\n return await this.wda.proxy.command('/wda/apps/activate', 'POST', { bundleId });\n};\n\n/**\n * @typedef {Object} TerminateAppOptions\n * @property {!string} bundleId bundle identifier of the app to be terminated\n */\n\n/**\n * Terminate an app with given bundle identifier. An exception is thrown if the\n * app cannot be found.\n *\n * @param {TerminateAppOptions} opts\n * @returns {boolean} `true` if the app was running and has been successfully terminated.\n * `false` if the app was not running before.\n */\ncommands.macosTerminateApp = async function macosTerminateApp (opts = {}) {\n const { bundleId } = opts;\n return await this.wda.proxy.command('/wda/apps/terminate', 'POST', { bundleId });\n};\n\n/**\n * @typedef {Object} QueryAppStateOptions\n * @property {!string} bundleId bundle identifier of the app whose state should be queried\n */\n\n/**\n * Query an app state with given bundle identifier. An exception is thrown if the\n * app cannot be found.\n *\n * @param {QueryAppStateOptions} opts\n * @returns {number} The application state code. See\n * https://developer.apple.com/documentation/xctest/xcuiapplicationstate?language=objc\n * for more details\n */\ncommands.macosQueryAppState = async function macosQueryAppState (opts = {}) {\n const { bundleId } = opts;\n return await this.wda.proxy.command('/wda/apps/state', 'POST', { bundleId });\n};\n\nexport default commands;\n"],"mappings":";;;;;;;AAAA,MAAMA,QAAQ,GAAG,CAAC,CAAC;AAoBnBA,QAAQ,CAACC,cAAc,GAAG,eAAeA,cAAc,CAAEC,IAAI,GAAG,CAAC,CAAC,EAAE;EAClE,MAAM;IAAEC,QAAQ;IAAEC;EAAY,CAAC,GAAGF,IAAI;EACtC,OAAO,MAAM,IAAI,CAACG,GAAG,CAACC,KAAK,CAACC,OAAO,CAAC,kBAAkB,EAAE,MAAM,EAAE;IAC9DC,SAAS,EAAEN,IAAI,CAACM,SAAS;IACzBJ,WAAW;IACXD;EACF,CAAC,CAAC;AACJ,CAAC;AAaDH,QAAQ,CAACS,gBAAgB,GAAG,eAAeA,gBAAgB,CAAEP,IAAI,GAAG,CAAC,CAAC,EAAE;EACtE,MAAM;IAAEC;EAAS,CAAC,GAAGD,IAAI;EACzB,OAAO,MAAM,IAAI,CAACG,GAAG,CAACC,KAAK,CAACC,OAAO,CAAC,oBAAoB,EAAE,MAAM,EAAE;IAAEJ;EAAS,CAAC,CAAC;AACjF,CAAC;AAeDH,QAAQ,CAACU,iBAAiB,GAAG,eAAeA,iBAAiB,CAAER,IAAI,GAAG,CAAC,CAAC,EAAE;EACxE,MAAM;IAAEC;EAAS,CAAC,GAAGD,IAAI;EACzB,OAAO,MAAM,IAAI,CAACG,GAAG,CAACC,KAAK,CAACC,OAAO,CAAC,qBAAqB,EAAE,MAAM,EAAE;IAAEJ;EAAS,CAAC,CAAC;AAClF,CAAC;AAgBDH,QAAQ,CAACW,kBAAkB,GAAG,eAAeA,kBAAkB,CAAET,IAAI,GAAG,CAAC,CAAC,EAAE;EAC1E,MAAM;IAAEC;EAAS,CAAC,GAAGD,IAAI;EACzB,OAAO,MAAM,IAAI,CAACG,GAAG,CAACC,KAAK,CAACC,OAAO,CAAC,iBAAiB,EAAE,MAAM,EAAE;IAAEJ;EAAS,CAAC,CAAC;AAC9E,CAAC;AAAC,eAEaH,QAAQ;AAAA"}
1
+ {"version":3,"file":"app-management.js","names":["commands","macosLaunchApp","opts","bundleId","environment","wda","proxy","command","arguments","macosActivateApp","macosTerminateApp","macosQueryAppState","_default","exports","default"],"sources":["../../../lib/commands/app-management.js"],"sourcesContent":["const commands = {};\n\n/**\n * @typedef {Object} LaunchAppOptions\n * @property {!string} bundleId bundle identifier of the app to be launched\n * or activated\n * @property {?Array<string>} arguments the list of command line arguments\n * for the app to be be launched with. This parameter is ignored if the app\n * is already running.\n * @property {Object} environment environment variables mapping. Custom\n * variables are added to the default process environment.\n */\n\n/**\n * Start an app with given bundle identifier or activates it\n * if the app is already running. An exception is thrown if the\n * app with the given identifier cannot be found.\n *\n * @param {LaunchAppOptions} opts\n */\ncommands.macosLaunchApp = async function macosLaunchApp (opts = {}) {\n const { bundleId, environment } = opts;\n return await this.wda.proxy.command('/wda/apps/launch', 'POST', {\n arguments: opts.arguments,\n environment,\n bundleId,\n });\n};\n\n/**\n * @typedef {Object} ActivateAppOptions\n * @property {!string} bundleId bundle identifier of the app to be activated\n */\n\n/**\n * Activate an app with given bundle identifier. An exception is thrown if the\n * app cannot be found or is not running.\n *\n * @param {ActivateAppOptions} opts\n */\ncommands.macosActivateApp = async function macosActivateApp (opts = {}) {\n const { bundleId } = opts;\n return await this.wda.proxy.command('/wda/apps/activate', 'POST', { bundleId });\n};\n\n/**\n * @typedef {Object} TerminateAppOptions\n * @property {!string} bundleId bundle identifier of the app to be terminated\n */\n\n/**\n * Terminate an app with given bundle identifier. An exception is thrown if the\n * app cannot be found.\n *\n * @param {TerminateAppOptions} opts\n * @returns {boolean} `true` if the app was running and has been successfully terminated.\n * `false` if the app was not running before.\n */\ncommands.macosTerminateApp = async function macosTerminateApp (opts = {}) {\n const { bundleId } = opts;\n return await this.wda.proxy.command('/wda/apps/terminate', 'POST', { bundleId });\n};\n\n/**\n * @typedef {Object} QueryAppStateOptions\n * @property {!string} bundleId bundle identifier of the app whose state should be queried\n */\n\n/**\n * Query an app state with given bundle identifier. An exception is thrown if the\n * app cannot be found.\n *\n * @param {QueryAppStateOptions} opts\n * @returns {number} The application state code. See\n * https://developer.apple.com/documentation/xctest/xcuiapplicationstate?language=objc\n * for more details\n */\ncommands.macosQueryAppState = async function macosQueryAppState (opts = {}) {\n const { bundleId } = opts;\n return await this.wda.proxy.command('/wda/apps/state', 'POST', { bundleId });\n};\n\nexport default commands;\n"],"mappings":";;;;;;;AAAA,MAAMA,QAAQ,GAAG,CAAC,CAAC;AAoBnBA,QAAQ,CAACC,cAAc,GAAG,eAAeA,cAAcA,CAAEC,IAAI,GAAG,CAAC,CAAC,EAAE;EAClE,MAAM;IAAEC,QAAQ;IAAEC;EAAY,CAAC,GAAGF,IAAI;EACtC,OAAO,MAAM,IAAI,CAACG,GAAG,CAACC,KAAK,CAACC,OAAO,CAAC,kBAAkB,EAAE,MAAM,EAAE;IAC9DC,SAAS,EAAEN,IAAI,CAACM,SAAS;IACzBJ,WAAW;IACXD;EACF,CAAC,CAAC;AACJ,CAAC;AAaDH,QAAQ,CAACS,gBAAgB,GAAG,eAAeA,gBAAgBA,CAAEP,IAAI,GAAG,CAAC,CAAC,EAAE;EACtE,MAAM;IAAEC;EAAS,CAAC,GAAGD,IAAI;EACzB,OAAO,MAAM,IAAI,CAACG,GAAG,CAACC,KAAK,CAACC,OAAO,CAAC,oBAAoB,EAAE,MAAM,EAAE;IAAEJ;EAAS,CAAC,CAAC;AACjF,CAAC;AAeDH,QAAQ,CAACU,iBAAiB,GAAG,eAAeA,iBAAiBA,CAAER,IAAI,GAAG,CAAC,CAAC,EAAE;EACxE,MAAM;IAAEC;EAAS,CAAC,GAAGD,IAAI;EACzB,OAAO,MAAM,IAAI,CAACG,GAAG,CAACC,KAAK,CAACC,OAAO,CAAC,qBAAqB,EAAE,MAAM,EAAE;IAAEJ;EAAS,CAAC,CAAC;AAClF,CAAC;AAgBDH,QAAQ,CAACW,kBAAkB,GAAG,eAAeA,kBAAkBA,CAAET,IAAI,GAAG,CAAC,CAAC,EAAE;EAC1E,MAAM;IAAEC;EAAS,CAAC,GAAGD,IAAI;EACzB,OAAO,MAAM,IAAI,CAACG,GAAG,CAACC,KAAK,CAACC,OAAO,CAAC,iBAAiB,EAAE,MAAM,EAAE;IAAEJ;EAAS,CAAC,CAAC;AAC9E,CAAC;AAAC,IAAAS,QAAA,GAEaZ,QAAQ;AAAAa,OAAA,CAAAC,OAAA,GAAAF,QAAA"}
@@ -64,4 +64,4 @@ commands.macosExecAppleScript = async function macosExecAppleScript(opts = {}) {
64
64
  };
65
65
  var _default = commands;
66
66
  exports.default = _default;
67
- //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJPU0FTQ1JJUFQiLCJBUFBMRV9TQ1JJUFRfRkVBVFVSRSIsImNvbW1hbmRzIiwibWFjb3NFeGVjQXBwbGVTY3JpcHQiLCJvcHRzIiwiZW5zdXJlRmVhdHVyZUVuYWJsZWQiLCJzY3JpcHQiLCJsYW5ndWFnZSIsImNvbW1hbmQiLCJjd2QiLCJ0aW1lb3V0IiwibG9nIiwiZXJyb3JBbmRUaHJvdyIsInRlc3QiLCJzaG91bGRSdW5TY3JpcHQiLCJhcmdzIiwicHVzaCIsInRtcFJvb3QiLCJ0ZW1wRGlyIiwib3BlbkRpciIsInRtcFNjcmlwdFBhdGgiLCJwYXRoIiwicmVzb2x2ZSIsImZzIiwid3JpdGVGaWxlIiwiaW5mbyIsInV0aWwiLCJxdW90ZSIsInN0ZG91dCIsImV4ZWMiLCJlIiwiRXJyb3IiLCJzdGRlcnIiLCJtZXNzYWdlIiwicmltcmFmIl0sInNvdXJjZXMiOlsiLi4vLi4vLi4vbGliL2NvbW1hbmRzL2FwcGxlc2NyaXB0LmpzIl0sInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IGZzLCB0ZW1wRGlyLCB1dGlsIH0gZnJvbSAnYXBwaXVtL3N1cHBvcnQnO1xuaW1wb3J0IHsgZXhlYyB9IGZyb20gJ3RlZW5fcHJvY2Vzcyc7XG5pbXBvcnQgbG9nIGZyb20gJy4uL2xvZ2dlcic7XG5pbXBvcnQgcGF0aCBmcm9tICdwYXRoJztcblxuY29uc3QgT1NBU0NSSVBUID0gJ29zYXNjcmlwdCc7XG5jb25zdCBBUFBMRV9TQ1JJUFRfRkVBVFVSRSA9ICdhcHBsZV9zY3JpcHQnO1xuXG5jb25zdCBjb21tYW5kcyA9IHt9O1xuXG4vKipcbiAqIEB0eXBlZGVmIHtPYmplY3R9IEV4ZWNBcHBsZVNjcmlwdE9wdGlvbnNcbiAqIEBwcm9wZXJ0eSB7P3N0cmluZ30gc2NyaXB0IEEgdmFsaWQgQXBwbGVTY3JpcHQgdG8gZXhlY3V0ZVxuICogQHByb3BlcnR5IHs/c3RyaW5nfSBsYW5ndWFnZSBPdmVycmlkZXMgdGhlIHNjcmlwdGluZyBsYW5ndWFnZS4gQmFzaWNhbGx5LCBzZXRzIHRoZSB2YWx1ZSBvZiBgLWxgIGNvbW1hbmRcbiAqIGxpbmUgYXJndW1lbnQgb2YgYG9zYXNjcmlwdGAgdG9vbC4gSWYgdW5zZXQgdGhlIEFwcGxlU2NyaXB0IGxhbmd1YWdlIGlzIGFzc3VtZWQuXG4gKiBAcHJvcGVydHkgez9zdHJpbmd9IGNvbW1hbmQgQSB2YWxpZCBBcHBsZVNjcmlwdCBhcyBhIHNpbmdsZSBjb21tYW5kIChubyBsaW5lIGJyZWFrcykgdG8gZXhlY3V0ZVxuICogQHByb3BlcnR5IHs/bnVtYmVyfSB0aW1lb3V0IFsyMDAwMF0gVGhlIG51bWJlciBvZiBzZWNvbmRzIHRvIHdhaXQgdW50aWwgYSBsb25nLXJ1bm5pbmcgY29tbWFuZCBpc1xuICogZmluaXNoZWQuIEFuIGVycm9yIGlzIHRocm93biBpZiB0aGUgY29tbWFuZCBpcyBzdGlsbCBydW5uaW5nIGFmdGVyIHRoaXMgdGltZW91dCBleHBpcmVzLlxuICogQHByb3BlcnR5IHs/c3RyaW5nfSBjd2QgVGhlIHBhdGggdG8gYW4gZXhpc3RpbmcgZm9sZGVyLCB3aGljaCBpcyBnb2luZyB0byBiZSBzZXQgYXMgdGhlXG4gKiB3b3JraW5nIGRpcmVjdG9yeSBmb3IgdGhlIGNvbW1hbmQvc2NyaXB0IGJlaW5nIGV4ZWN1dGVkLlxuICovXG5cbi8qKlxuICogRXhlY3V0ZXMgdGhlIGdpdmVuIEFwcGxlU2NyaXB0IGNvbW1hbmQgb3IgYSB3aG9sZSBzY3JpcHQgYmFzZWQgb24gdGhlXG4gKiBnaXZlbiBvcHRpb25zLiBFaXRoZXIgb2YgdGhlc2Ugb3B0aW9ucyBtdXN0IGJlIHByb3ZpZGVkLiBJZiBib3RoIGFyZSBwcm92aWRlZFxuICogdGhlbiB0aGUgYGNvbW1hbmRgIG9uZSBnZXRzIHRoZSBwcmlvcml0eS5cbiAqIE5vdGUgdGhhdCBBcHBsZVNjcmlwdCBjb21tYW5kIGNhbm5vdCBjb250YWluIGxpbmUgYnJlYWtzLiBDb25zaWRlciBtYWtpbmcgaXRcbiAqIHRvIGEgc2NyaXB0IGluIHN1Y2ggY2FzZS5cbiAqIE5vdGUgdGhhdCBieSBkZWZhdWx0IEFwcGxlU2NyaXB0IGVuZ2luZSBibG9ja3MgY29tbWFuZHMvc2NyaXB0cyBleGVjdXRpb24gaWYgeW91ciBzY3JpcHRcbiAqIGlzIHRyeWluZyB0byBhY2Nlc3Mgc29tZSBwcml2YXRlIGVudGl0aWVzLCBsaWtlIGNhbWVyYXMgb3IgdGhlIGRlc2t0b3Agc2NyZWVuXG4gKiBhbmQgbm8gcGVybWlzc2lvbnMgdG8gZG8gaXQgYXJlIGdpdmVuIHRvIHRoZSBwYXJlbnQgKGZvciBleGFtcGxlLCBBcHBpdW0gb3IgVGVybWluYWwpXG4gKiBwcm9jZXNzIGluIFN5c3RlbSBQcmVmZXJlbmNlcyAtPiBQcml2YWN5IGxpc3QuXG4gKlxuICogQHBhcmFtIHshRXhlY0FwcGxlU2NyaXB0T3B0aW9uc30gb3B0c1xuICogQHJldHVybnMge3N0cmluZ30gVGhlIGFjdHVhbCBzdGRvdXQgb2YgdGhlIGdpdmVuIGNvbW1hbmQvc2NyaXB0XG4gKiBAdGhyb3dzIHtFcnJvcn0gSWYgdGhlIGV4aXQgY29kZSBvZiB0aGUgZ2l2ZW4gY29tbWFuZC9zY3JpcHQgaXMgbm90IHplcm8uXG4gKiBUaGUgYWN0dWFsIHN0ZGVyciBvdXRwdXQgaXMgc2V0IHRvIHRoZSBlcnJvciBtZXNzYWdlIHZhbHVlLlxuICovXG5jb21tYW5kcy5tYWNvc0V4ZWNBcHBsZVNjcmlwdCA9IGFzeW5jIGZ1bmN0aW9uIG1hY29zRXhlY0FwcGxlU2NyaXB0IChvcHRzID0ge30pIHtcbiAgdGhpcy5lbnN1cmVGZWF0dXJlRW5hYmxlZChBUFBMRV9TQ1JJUFRfRkVBVFVSRSk7XG5cbiAgY29uc3Qge1xuICAgIHNjcmlwdCxcbiAgICBsYW5ndWFnZSxcbiAgICBjb21tYW5kLFxuICAgIGN3ZCxcbiAgICB0aW1lb3V0LFxuICB9ID0gb3B0cztcbiAgaWYgKCFzY3JpcHQgJiYgIWNvbW1hbmQpIHtcbiAgICBsb2cuZXJyb3JBbmRUaHJvdygnQXBwbGVTY3JpcHQgc2NyaXB0L2NvbW1hbmQgbXVzdCBub3QgYmUgZW1wdHknKTtcbiAgfVxuICBpZiAoL1xcbi8udGVzdChjb21tYW5kKSkge1xuICAgIGxvZy5lcnJvckFuZFRocm93KCdBcHBsZVNjcmlwdCBjb21tYW5kcyBjYW5ub3QgY29udGFpbiBsaW5lIGJyZWFrcycpO1xuICB9XG4gIC8vICdjb21tYW5kJyBoYXMgcHJpb3JpdHkgb3ZlciAnc2NyaXB0J1xuICBjb25zdCBzaG91bGRSdW5TY3JpcHQgPSAhY29tbWFuZDtcblxuICBjb25zdCBhcmdzID0gW107XG4gIGlmIChsYW5ndWFnZSkge1xuICAgIGFyZ3MucHVzaCgnLWwnLCBsYW5ndWFnZSk7XG4gIH1cbiAgbGV0IHRtcFJvb3Q7XG4gIHRyeSB7XG4gICAgaWYgKHNob3VsZFJ1blNjcmlwdCkge1xuICAgICAgdG1wUm9vdCA9IGF3YWl0IHRlbXBEaXIub3BlbkRpcigpO1xuICAgICAgY29uc3QgdG1wU2NyaXB0UGF0aCA9IHBhdGgucmVzb2x2ZSh0bXBSb290LCAnYXBwaXVtX3NjcmlwdC5zY3B0Jyk7XG4gICAgICBhd2FpdCBmcy53cml0ZUZpbGUodG1wU2NyaXB0UGF0aCwgc2NyaXB0LCAndXRmOCcpO1xuICAgICAgYXJncy5wdXNoKHRtcFNjcmlwdFBhdGgpO1xuICAgIH0gZWxzZSB7XG4gICAgICBhcmdzLnB1c2goJy1lJywgY29tbWFuZCk7XG4gICAgfVxuICAgIGxvZy5pbmZvKGBSdW5uaW5nICR7T1NBU0NSSVBUfSB3aXRoIGFyZ3VtZW50czogJHt1dGlsLnF1b3RlKGFyZ3MpfWApO1xuICAgIHRyeSB7XG4gICAgICBjb25zdCB7c3Rkb3V0fSA9IGF3YWl0IGV4ZWMoT1NBU0NSSVBULCBhcmdzLCB7Y3dkLCB0aW1lb3V0fSk7XG4gICAgICByZXR1cm4gc3Rkb3V0O1xuICAgIH0gY2F0Y2ggKGUpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcihlLnN0ZGVyciB8fCBlLm1lc3NhZ2UpO1xuICAgIH1cbiAgfSBmaW5hbGx5IHtcbiAgICBpZiAodG1wUm9vdCkge1xuICAgICAgYXdhaXQgZnMucmltcmFmKHRtcFJvb3QpO1xuICAgIH1cbiAgfVxufTtcblxuZXhwb3J0IHsgY29tbWFuZHMgfTtcbmV4cG9ydCBkZWZhdWx0IGNvbW1hbmRzO1xuIl0sIm1hcHBpbmdzIjoiOzs7Ozs7OztBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBRUEsTUFBTUEsU0FBUyxHQUFHLFdBQVc7QUFDN0IsTUFBTUMsb0JBQW9CLEdBQUcsY0FBYztBQUUzQyxNQUFNQyxRQUFRLEdBQUcsQ0FBQyxDQUFDO0FBQUM7QUE4QnBCQSxRQUFRLENBQUNDLG9CQUFvQixHQUFHLGVBQWVBLG9CQUFvQixDQUFFQyxJQUFJLEdBQUcsQ0FBQyxDQUFDLEVBQUU7RUFDOUUsSUFBSSxDQUFDQyxvQkFBb0IsQ0FBQ0osb0JBQW9CLENBQUM7RUFFL0MsTUFBTTtJQUNKSyxNQUFNO0lBQ05DLFFBQVE7SUFDUkMsT0FBTztJQUNQQyxHQUFHO0lBQ0hDO0VBQ0YsQ0FBQyxHQUFHTixJQUFJO0VBQ1IsSUFBSSxDQUFDRSxNQUFNLElBQUksQ0FBQ0UsT0FBTyxFQUFFO0lBQ3ZCRyxlQUFHLENBQUNDLGFBQWEsQ0FBQyw4Q0FBOEMsQ0FBQztFQUNuRTtFQUNBLElBQUksSUFBSSxDQUFDQyxJQUFJLENBQUNMLE9BQU8sQ0FBQyxFQUFFO0lBQ3RCRyxlQUFHLENBQUNDLGFBQWEsQ0FBQyxpREFBaUQsQ0FBQztFQUN0RTtFQUVBLE1BQU1FLGVBQWUsR0FBRyxDQUFDTixPQUFPO0VBRWhDLE1BQU1PLElBQUksR0FBRyxFQUFFO0VBQ2YsSUFBSVIsUUFBUSxFQUFFO0lBQ1pRLElBQUksQ0FBQ0MsSUFBSSxDQUFDLElBQUksRUFBRVQsUUFBUSxDQUFDO0VBQzNCO0VBQ0EsSUFBSVUsT0FBTztFQUNYLElBQUk7SUFDRixJQUFJSCxlQUFlLEVBQUU7TUFDbkJHLE9BQU8sR0FBRyxNQUFNQyxnQkFBTyxDQUFDQyxPQUFPLEVBQUU7TUFDakMsTUFBTUMsYUFBYSxHQUFHQyxhQUFJLENBQUNDLE9BQU8sQ0FBQ0wsT0FBTyxFQUFFLG9CQUFvQixDQUFDO01BQ2pFLE1BQU1NLFdBQUUsQ0FBQ0MsU0FBUyxDQUFDSixhQUFhLEVBQUVkLE1BQU0sRUFBRSxNQUFNLENBQUM7TUFDakRTLElBQUksQ0FBQ0MsSUFBSSxDQUFDSSxhQUFhLENBQUM7SUFDMUIsQ0FBQyxNQUFNO01BQ0xMLElBQUksQ0FBQ0MsSUFBSSxDQUFDLElBQUksRUFBRVIsT0FBTyxDQUFDO0lBQzFCO0lBQ0FHLGVBQUcsQ0FBQ2MsSUFBSSxDQUFFLFdBQVV6QixTQUFVLG9CQUFtQjBCLGFBQUksQ0FBQ0MsS0FBSyxDQUFDWixJQUFJLENBQUUsRUFBQyxDQUFDO0lBQ3BFLElBQUk7TUFDRixNQUFNO1FBQUNhO01BQU0sQ0FBQyxHQUFHLE1BQU0sSUFBQUMsa0JBQUksRUFBQzdCLFNBQVMsRUFBRWUsSUFBSSxFQUFFO1FBQUNOLEdBQUc7UUFBRUM7TUFBTyxDQUFDLENBQUM7TUFDNUQsT0FBT2tCLE1BQU07SUFDZixDQUFDLENBQUMsT0FBT0UsQ0FBQyxFQUFFO01BQ1YsTUFBTSxJQUFJQyxLQUFLLENBQUNELENBQUMsQ0FBQ0UsTUFBTSxJQUFJRixDQUFDLENBQUNHLE9BQU8sQ0FBQztJQUN4QztFQUNGLENBQUMsU0FBUztJQUNSLElBQUloQixPQUFPLEVBQUU7TUFDWCxNQUFNTSxXQUFFLENBQUNXLE1BQU0sQ0FBQ2pCLE9BQU8sQ0FBQztJQUMxQjtFQUNGO0FBQ0YsQ0FBQztBQUFDLGVBR2FmLFFBQVE7QUFBQSJ9
67
+ //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJfc3VwcG9ydCIsInJlcXVpcmUiLCJfdGVlbl9wcm9jZXNzIiwiX2xvZ2dlciIsIl9pbnRlcm9wUmVxdWlyZURlZmF1bHQiLCJfcGF0aCIsIk9TQVNDUklQVCIsIkFQUExFX1NDUklQVF9GRUFUVVJFIiwiY29tbWFuZHMiLCJleHBvcnRzIiwibWFjb3NFeGVjQXBwbGVTY3JpcHQiLCJvcHRzIiwiZW5zdXJlRmVhdHVyZUVuYWJsZWQiLCJzY3JpcHQiLCJsYW5ndWFnZSIsImNvbW1hbmQiLCJjd2QiLCJ0aW1lb3V0IiwibG9nIiwiZXJyb3JBbmRUaHJvdyIsInRlc3QiLCJzaG91bGRSdW5TY3JpcHQiLCJhcmdzIiwicHVzaCIsInRtcFJvb3QiLCJ0ZW1wRGlyIiwib3BlbkRpciIsInRtcFNjcmlwdFBhdGgiLCJwYXRoIiwicmVzb2x2ZSIsImZzIiwid3JpdGVGaWxlIiwiaW5mbyIsInV0aWwiLCJxdW90ZSIsInN0ZG91dCIsImV4ZWMiLCJlIiwiRXJyb3IiLCJzdGRlcnIiLCJtZXNzYWdlIiwicmltcmFmIiwiX2RlZmF1bHQiLCJkZWZhdWx0Il0sInNvdXJjZXMiOlsiLi4vLi4vLi4vbGliL2NvbW1hbmRzL2FwcGxlc2NyaXB0LmpzIl0sInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IGZzLCB0ZW1wRGlyLCB1dGlsIH0gZnJvbSAnYXBwaXVtL3N1cHBvcnQnO1xuaW1wb3J0IHsgZXhlYyB9IGZyb20gJ3RlZW5fcHJvY2Vzcyc7XG5pbXBvcnQgbG9nIGZyb20gJy4uL2xvZ2dlcic7XG5pbXBvcnQgcGF0aCBmcm9tICdwYXRoJztcblxuY29uc3QgT1NBU0NSSVBUID0gJ29zYXNjcmlwdCc7XG5jb25zdCBBUFBMRV9TQ1JJUFRfRkVBVFVSRSA9ICdhcHBsZV9zY3JpcHQnO1xuXG5jb25zdCBjb21tYW5kcyA9IHt9O1xuXG4vKipcbiAqIEB0eXBlZGVmIHtPYmplY3R9IEV4ZWNBcHBsZVNjcmlwdE9wdGlvbnNcbiAqIEBwcm9wZXJ0eSB7P3N0cmluZ30gc2NyaXB0IEEgdmFsaWQgQXBwbGVTY3JpcHQgdG8gZXhlY3V0ZVxuICogQHByb3BlcnR5IHs/c3RyaW5nfSBsYW5ndWFnZSBPdmVycmlkZXMgdGhlIHNjcmlwdGluZyBsYW5ndWFnZS4gQmFzaWNhbGx5LCBzZXRzIHRoZSB2YWx1ZSBvZiBgLWxgIGNvbW1hbmRcbiAqIGxpbmUgYXJndW1lbnQgb2YgYG9zYXNjcmlwdGAgdG9vbC4gSWYgdW5zZXQgdGhlIEFwcGxlU2NyaXB0IGxhbmd1YWdlIGlzIGFzc3VtZWQuXG4gKiBAcHJvcGVydHkgez9zdHJpbmd9IGNvbW1hbmQgQSB2YWxpZCBBcHBsZVNjcmlwdCBhcyBhIHNpbmdsZSBjb21tYW5kIChubyBsaW5lIGJyZWFrcykgdG8gZXhlY3V0ZVxuICogQHByb3BlcnR5IHs/bnVtYmVyfSB0aW1lb3V0IFsyMDAwMF0gVGhlIG51bWJlciBvZiBzZWNvbmRzIHRvIHdhaXQgdW50aWwgYSBsb25nLXJ1bm5pbmcgY29tbWFuZCBpc1xuICogZmluaXNoZWQuIEFuIGVycm9yIGlzIHRocm93biBpZiB0aGUgY29tbWFuZCBpcyBzdGlsbCBydW5uaW5nIGFmdGVyIHRoaXMgdGltZW91dCBleHBpcmVzLlxuICogQHByb3BlcnR5IHs/c3RyaW5nfSBjd2QgVGhlIHBhdGggdG8gYW4gZXhpc3RpbmcgZm9sZGVyLCB3aGljaCBpcyBnb2luZyB0byBiZSBzZXQgYXMgdGhlXG4gKiB3b3JraW5nIGRpcmVjdG9yeSBmb3IgdGhlIGNvbW1hbmQvc2NyaXB0IGJlaW5nIGV4ZWN1dGVkLlxuICovXG5cbi8qKlxuICogRXhlY3V0ZXMgdGhlIGdpdmVuIEFwcGxlU2NyaXB0IGNvbW1hbmQgb3IgYSB3aG9sZSBzY3JpcHQgYmFzZWQgb24gdGhlXG4gKiBnaXZlbiBvcHRpb25zLiBFaXRoZXIgb2YgdGhlc2Ugb3B0aW9ucyBtdXN0IGJlIHByb3ZpZGVkLiBJZiBib3RoIGFyZSBwcm92aWRlZFxuICogdGhlbiB0aGUgYGNvbW1hbmRgIG9uZSBnZXRzIHRoZSBwcmlvcml0eS5cbiAqIE5vdGUgdGhhdCBBcHBsZVNjcmlwdCBjb21tYW5kIGNhbm5vdCBjb250YWluIGxpbmUgYnJlYWtzLiBDb25zaWRlciBtYWtpbmcgaXRcbiAqIHRvIGEgc2NyaXB0IGluIHN1Y2ggY2FzZS5cbiAqIE5vdGUgdGhhdCBieSBkZWZhdWx0IEFwcGxlU2NyaXB0IGVuZ2luZSBibG9ja3MgY29tbWFuZHMvc2NyaXB0cyBleGVjdXRpb24gaWYgeW91ciBzY3JpcHRcbiAqIGlzIHRyeWluZyB0byBhY2Nlc3Mgc29tZSBwcml2YXRlIGVudGl0aWVzLCBsaWtlIGNhbWVyYXMgb3IgdGhlIGRlc2t0b3Agc2NyZWVuXG4gKiBhbmQgbm8gcGVybWlzc2lvbnMgdG8gZG8gaXQgYXJlIGdpdmVuIHRvIHRoZSBwYXJlbnQgKGZvciBleGFtcGxlLCBBcHBpdW0gb3IgVGVybWluYWwpXG4gKiBwcm9jZXNzIGluIFN5c3RlbSBQcmVmZXJlbmNlcyAtPiBQcml2YWN5IGxpc3QuXG4gKlxuICogQHBhcmFtIHshRXhlY0FwcGxlU2NyaXB0T3B0aW9uc30gb3B0c1xuICogQHJldHVybnMge3N0cmluZ30gVGhlIGFjdHVhbCBzdGRvdXQgb2YgdGhlIGdpdmVuIGNvbW1hbmQvc2NyaXB0XG4gKiBAdGhyb3dzIHtFcnJvcn0gSWYgdGhlIGV4aXQgY29kZSBvZiB0aGUgZ2l2ZW4gY29tbWFuZC9zY3JpcHQgaXMgbm90IHplcm8uXG4gKiBUaGUgYWN0dWFsIHN0ZGVyciBvdXRwdXQgaXMgc2V0IHRvIHRoZSBlcnJvciBtZXNzYWdlIHZhbHVlLlxuICovXG5jb21tYW5kcy5tYWNvc0V4ZWNBcHBsZVNjcmlwdCA9IGFzeW5jIGZ1bmN0aW9uIG1hY29zRXhlY0FwcGxlU2NyaXB0IChvcHRzID0ge30pIHtcbiAgdGhpcy5lbnN1cmVGZWF0dXJlRW5hYmxlZChBUFBMRV9TQ1JJUFRfRkVBVFVSRSk7XG5cbiAgY29uc3Qge1xuICAgIHNjcmlwdCxcbiAgICBsYW5ndWFnZSxcbiAgICBjb21tYW5kLFxuICAgIGN3ZCxcbiAgICB0aW1lb3V0LFxuICB9ID0gb3B0cztcbiAgaWYgKCFzY3JpcHQgJiYgIWNvbW1hbmQpIHtcbiAgICBsb2cuZXJyb3JBbmRUaHJvdygnQXBwbGVTY3JpcHQgc2NyaXB0L2NvbW1hbmQgbXVzdCBub3QgYmUgZW1wdHknKTtcbiAgfVxuICBpZiAoL1xcbi8udGVzdChjb21tYW5kKSkge1xuICAgIGxvZy5lcnJvckFuZFRocm93KCdBcHBsZVNjcmlwdCBjb21tYW5kcyBjYW5ub3QgY29udGFpbiBsaW5lIGJyZWFrcycpO1xuICB9XG4gIC8vICdjb21tYW5kJyBoYXMgcHJpb3JpdHkgb3ZlciAnc2NyaXB0J1xuICBjb25zdCBzaG91bGRSdW5TY3JpcHQgPSAhY29tbWFuZDtcblxuICBjb25zdCBhcmdzID0gW107XG4gIGlmIChsYW5ndWFnZSkge1xuICAgIGFyZ3MucHVzaCgnLWwnLCBsYW5ndWFnZSk7XG4gIH1cbiAgbGV0IHRtcFJvb3Q7XG4gIHRyeSB7XG4gICAgaWYgKHNob3VsZFJ1blNjcmlwdCkge1xuICAgICAgdG1wUm9vdCA9IGF3YWl0IHRlbXBEaXIub3BlbkRpcigpO1xuICAgICAgY29uc3QgdG1wU2NyaXB0UGF0aCA9IHBhdGgucmVzb2x2ZSh0bXBSb290LCAnYXBwaXVtX3NjcmlwdC5zY3B0Jyk7XG4gICAgICBhd2FpdCBmcy53cml0ZUZpbGUodG1wU2NyaXB0UGF0aCwgc2NyaXB0LCAndXRmOCcpO1xuICAgICAgYXJncy5wdXNoKHRtcFNjcmlwdFBhdGgpO1xuICAgIH0gZWxzZSB7XG4gICAgICBhcmdzLnB1c2goJy1lJywgY29tbWFuZCk7XG4gICAgfVxuICAgIGxvZy5pbmZvKGBSdW5uaW5nICR7T1NBU0NSSVBUfSB3aXRoIGFyZ3VtZW50czogJHt1dGlsLnF1b3RlKGFyZ3MpfWApO1xuICAgIHRyeSB7XG4gICAgICBjb25zdCB7c3Rkb3V0fSA9IGF3YWl0IGV4ZWMoT1NBU0NSSVBULCBhcmdzLCB7Y3dkLCB0aW1lb3V0fSk7XG4gICAgICByZXR1cm4gc3Rkb3V0O1xuICAgIH0gY2F0Y2ggKGUpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcihlLnN0ZGVyciB8fCBlLm1lc3NhZ2UpO1xuICAgIH1cbiAgfSBmaW5hbGx5IHtcbiAgICBpZiAodG1wUm9vdCkge1xuICAgICAgYXdhaXQgZnMucmltcmFmKHRtcFJvb3QpO1xuICAgIH1cbiAgfVxufTtcblxuZXhwb3J0IHsgY29tbWFuZHMgfTtcbmV4cG9ydCBkZWZhdWx0IGNvbW1hbmRzO1xuIl0sIm1hcHBpbmdzIjoiOzs7Ozs7OztBQUFBLElBQUFBLFFBQUEsR0FBQUMsT0FBQTtBQUNBLElBQUFDLGFBQUEsR0FBQUQsT0FBQTtBQUNBLElBQUFFLE9BQUEsR0FBQUMsc0JBQUEsQ0FBQUgsT0FBQTtBQUNBLElBQUFJLEtBQUEsR0FBQUQsc0JBQUEsQ0FBQUgsT0FBQTtBQUVBLE1BQU1LLFNBQVMsR0FBRyxXQUFXO0FBQzdCLE1BQU1DLG9CQUFvQixHQUFHLGNBQWM7QUFFM0MsTUFBTUMsUUFBUSxHQUFHLENBQUMsQ0FBQztBQUFDQyxPQUFBLENBQUFELFFBQUEsR0FBQUEsUUFBQTtBQThCcEJBLFFBQVEsQ0FBQ0Usb0JBQW9CLEdBQUcsZUFBZUEsb0JBQW9CQSxDQUFFQyxJQUFJLEdBQUcsQ0FBQyxDQUFDLEVBQUU7RUFDOUUsSUFBSSxDQUFDQyxvQkFBb0IsQ0FBQ0wsb0JBQW9CLENBQUM7RUFFL0MsTUFBTTtJQUNKTSxNQUFNO0lBQ05DLFFBQVE7SUFDUkMsT0FBTztJQUNQQyxHQUFHO0lBQ0hDO0VBQ0YsQ0FBQyxHQUFHTixJQUFJO0VBQ1IsSUFBSSxDQUFDRSxNQUFNLElBQUksQ0FBQ0UsT0FBTyxFQUFFO0lBQ3ZCRyxlQUFHLENBQUNDLGFBQWEsQ0FBQyw4Q0FBOEMsQ0FBQztFQUNuRTtFQUNBLElBQUksSUFBSSxDQUFDQyxJQUFJLENBQUNMLE9BQU8sQ0FBQyxFQUFFO0lBQ3RCRyxlQUFHLENBQUNDLGFBQWEsQ0FBQyxpREFBaUQsQ0FBQztFQUN0RTtFQUVBLE1BQU1FLGVBQWUsR0FBRyxDQUFDTixPQUFPO0VBRWhDLE1BQU1PLElBQUksR0FBRyxFQUFFO0VBQ2YsSUFBSVIsUUFBUSxFQUFFO0lBQ1pRLElBQUksQ0FBQ0MsSUFBSSxDQUFDLElBQUksRUFBRVQsUUFBUSxDQUFDO0VBQzNCO0VBQ0EsSUFBSVUsT0FBTztFQUNYLElBQUk7SUFDRixJQUFJSCxlQUFlLEVBQUU7TUFDbkJHLE9BQU8sR0FBRyxNQUFNQyxnQkFBTyxDQUFDQyxPQUFPLEVBQUU7TUFDakMsTUFBTUMsYUFBYSxHQUFHQyxhQUFJLENBQUNDLE9BQU8sQ0FBQ0wsT0FBTyxFQUFFLG9CQUFvQixDQUFDO01BQ2pFLE1BQU1NLFdBQUUsQ0FBQ0MsU0FBUyxDQUFDSixhQUFhLEVBQUVkLE1BQU0sRUFBRSxNQUFNLENBQUM7TUFDakRTLElBQUksQ0FBQ0MsSUFBSSxDQUFDSSxhQUFhLENBQUM7SUFDMUIsQ0FBQyxNQUFNO01BQ0xMLElBQUksQ0FBQ0MsSUFBSSxDQUFDLElBQUksRUFBRVIsT0FBTyxDQUFDO0lBQzFCO0lBQ0FHLGVBQUcsQ0FBQ2MsSUFBSSxDQUFFLFdBQVUxQixTQUFVLG9CQUFtQjJCLGFBQUksQ0FBQ0MsS0FBSyxDQUFDWixJQUFJLENBQUUsRUFBQyxDQUFDO0lBQ3BFLElBQUk7TUFDRixNQUFNO1FBQUNhO01BQU0sQ0FBQyxHQUFHLE1BQU0sSUFBQUMsa0JBQUksRUFBQzlCLFNBQVMsRUFBRWdCLElBQUksRUFBRTtRQUFDTixHQUFHO1FBQUVDO01BQU8sQ0FBQyxDQUFDO01BQzVELE9BQU9rQixNQUFNO0lBQ2YsQ0FBQyxDQUFDLE9BQU9FLENBQUMsRUFBRTtNQUNWLE1BQU0sSUFBSUMsS0FBSyxDQUFDRCxDQUFDLENBQUNFLE1BQU0sSUFBSUYsQ0FBQyxDQUFDRyxPQUFPLENBQUM7SUFDeEM7RUFDRixDQUFDLFNBQVM7SUFDUixJQUFJaEIsT0FBTyxFQUFFO01BQ1gsTUFBTU0sV0FBRSxDQUFDVyxNQUFNLENBQUNqQixPQUFPLENBQUM7SUFDMUI7RUFDRjtBQUNGLENBQUM7QUFBQyxJQUFBa0IsUUFBQSxHQUdhbEMsUUFBUTtBQUFBQyxPQUFBLENBQUFrQyxPQUFBLEdBQUFELFFBQUEifQ==
@@ -1 +1 @@
1
- {"version":3,"file":"applescript.js","names":["OSASCRIPT","APPLE_SCRIPT_FEATURE","commands","macosExecAppleScript","opts","ensureFeatureEnabled","script","language","command","cwd","timeout","log","errorAndThrow","test","shouldRunScript","args","push","tmpRoot","tempDir","openDir","tmpScriptPath","path","resolve","fs","writeFile","info","util","quote","stdout","exec","e","Error","stderr","message","rimraf"],"sources":["../../../lib/commands/applescript.js"],"sourcesContent":["import { fs, tempDir, util } from 'appium/support';\nimport { exec } from 'teen_process';\nimport log from '../logger';\nimport path from 'path';\n\nconst OSASCRIPT = 'osascript';\nconst APPLE_SCRIPT_FEATURE = 'apple_script';\n\nconst commands = {};\n\n/**\n * @typedef {Object} ExecAppleScriptOptions\n * @property {?string} script A valid AppleScript to execute\n * @property {?string} language Overrides the scripting language. Basically, sets the value of `-l` command\n * line argument of `osascript` tool. If unset the AppleScript language is assumed.\n * @property {?string} command A valid AppleScript as a single command (no line breaks) to execute\n * @property {?number} timeout [20000] The number of seconds to wait until a long-running command is\n * finished. An error is thrown if the command is still running after this timeout expires.\n * @property {?string} cwd The path to an existing folder, which is going to be set as the\n * working directory for the command/script being executed.\n */\n\n/**\n * Executes the given AppleScript command or a whole script based on the\n * given options. Either of these options must be provided. If both are provided\n * then the `command` one gets the priority.\n * Note that AppleScript command cannot contain line breaks. Consider making it\n * to a script in such case.\n * Note that by default AppleScript engine blocks commands/scripts execution if your script\n * is trying to access some private entities, like cameras or the desktop screen\n * and no permissions to do it are given to the parent (for example, Appium or Terminal)\n * process in System Preferences -> Privacy list.\n *\n * @param {!ExecAppleScriptOptions} opts\n * @returns {string} The actual stdout of the given command/script\n * @throws {Error} If the exit code of the given command/script is not zero.\n * The actual stderr output is set to the error message value.\n */\ncommands.macosExecAppleScript = async function macosExecAppleScript (opts = {}) {\n this.ensureFeatureEnabled(APPLE_SCRIPT_FEATURE);\n\n const {\n script,\n language,\n command,\n cwd,\n timeout,\n } = opts;\n if (!script && !command) {\n log.errorAndThrow('AppleScript script/command must not be empty');\n }\n if (/\\n/.test(command)) {\n log.errorAndThrow('AppleScript commands cannot contain line breaks');\n }\n // 'command' has priority over 'script'\n const shouldRunScript = !command;\n\n const args = [];\n if (language) {\n args.push('-l', language);\n }\n let tmpRoot;\n try {\n if (shouldRunScript) {\n tmpRoot = await tempDir.openDir();\n const tmpScriptPath = path.resolve(tmpRoot, 'appium_script.scpt');\n await fs.writeFile(tmpScriptPath, script, 'utf8');\n args.push(tmpScriptPath);\n } else {\n args.push('-e', command);\n }\n log.info(`Running ${OSASCRIPT} with arguments: ${util.quote(args)}`);\n try {\n const {stdout} = await exec(OSASCRIPT, args, {cwd, timeout});\n return stdout;\n } catch (e) {\n throw new Error(e.stderr || e.message);\n }\n } finally {\n if (tmpRoot) {\n await fs.rimraf(tmpRoot);\n }\n }\n};\n\nexport { commands };\nexport default commands;\n"],"mappings":";;;;;;;;AAAA;AACA;AACA;AACA;AAEA,MAAMA,SAAS,GAAG,WAAW;AAC7B,MAAMC,oBAAoB,GAAG,cAAc;AAE3C,MAAMC,QAAQ,GAAG,CAAC,CAAC;AAAC;AA8BpBA,QAAQ,CAACC,oBAAoB,GAAG,eAAeA,oBAAoB,CAAEC,IAAI,GAAG,CAAC,CAAC,EAAE;EAC9E,IAAI,CAACC,oBAAoB,CAACJ,oBAAoB,CAAC;EAE/C,MAAM;IACJK,MAAM;IACNC,QAAQ;IACRC,OAAO;IACPC,GAAG;IACHC;EACF,CAAC,GAAGN,IAAI;EACR,IAAI,CAACE,MAAM,IAAI,CAACE,OAAO,EAAE;IACvBG,eAAG,CAACC,aAAa,CAAC,8CAA8C,CAAC;EACnE;EACA,IAAI,IAAI,CAACC,IAAI,CAACL,OAAO,CAAC,EAAE;IACtBG,eAAG,CAACC,aAAa,CAAC,iDAAiD,CAAC;EACtE;EAEA,MAAME,eAAe,GAAG,CAACN,OAAO;EAEhC,MAAMO,IAAI,GAAG,EAAE;EACf,IAAIR,QAAQ,EAAE;IACZQ,IAAI,CAACC,IAAI,CAAC,IAAI,EAAET,QAAQ,CAAC;EAC3B;EACA,IAAIU,OAAO;EACX,IAAI;IACF,IAAIH,eAAe,EAAE;MACnBG,OAAO,GAAG,MAAMC,gBAAO,CAACC,OAAO,EAAE;MACjC,MAAMC,aAAa,GAAGC,aAAI,CAACC,OAAO,CAACL,OAAO,EAAE,oBAAoB,CAAC;MACjE,MAAMM,WAAE,CAACC,SAAS,CAACJ,aAAa,EAAEd,MAAM,EAAE,MAAM,CAAC;MACjDS,IAAI,CAACC,IAAI,CAACI,aAAa,CAAC;IAC1B,CAAC,MAAM;MACLL,IAAI,CAACC,IAAI,CAAC,IAAI,EAAER,OAAO,CAAC;IAC1B;IACAG,eAAG,CAACc,IAAI,CAAE,WAAUzB,SAAU,oBAAmB0B,aAAI,CAACC,KAAK,CAACZ,IAAI,CAAE,EAAC,CAAC;IACpE,IAAI;MACF,MAAM;QAACa;MAAM,CAAC,GAAG,MAAM,IAAAC,kBAAI,EAAC7B,SAAS,EAAEe,IAAI,EAAE;QAACN,GAAG;QAAEC;MAAO,CAAC,CAAC;MAC5D,OAAOkB,MAAM;IACf,CAAC,CAAC,OAAOE,CAAC,EAAE;MACV,MAAM,IAAIC,KAAK,CAACD,CAAC,CAACE,MAAM,IAAIF,CAAC,CAACG,OAAO,CAAC;IACxC;EACF,CAAC,SAAS;IACR,IAAIhB,OAAO,EAAE;MACX,MAAMM,WAAE,CAACW,MAAM,CAACjB,OAAO,CAAC;IAC1B;EACF;AACF,CAAC;AAAC,eAGaf,QAAQ;AAAA"}
1
+ {"version":3,"file":"applescript.js","names":["_support","require","_teen_process","_logger","_interopRequireDefault","_path","OSASCRIPT","APPLE_SCRIPT_FEATURE","commands","exports","macosExecAppleScript","opts","ensureFeatureEnabled","script","language","command","cwd","timeout","log","errorAndThrow","test","shouldRunScript","args","push","tmpRoot","tempDir","openDir","tmpScriptPath","path","resolve","fs","writeFile","info","util","quote","stdout","exec","e","Error","stderr","message","rimraf","_default","default"],"sources":["../../../lib/commands/applescript.js"],"sourcesContent":["import { fs, tempDir, util } from 'appium/support';\nimport { exec } from 'teen_process';\nimport log from '../logger';\nimport path from 'path';\n\nconst OSASCRIPT = 'osascript';\nconst APPLE_SCRIPT_FEATURE = 'apple_script';\n\nconst commands = {};\n\n/**\n * @typedef {Object} ExecAppleScriptOptions\n * @property {?string} script A valid AppleScript to execute\n * @property {?string} language Overrides the scripting language. Basically, sets the value of `-l` command\n * line argument of `osascript` tool. If unset the AppleScript language is assumed.\n * @property {?string} command A valid AppleScript as a single command (no line breaks) to execute\n * @property {?number} timeout [20000] The number of seconds to wait until a long-running command is\n * finished. An error is thrown if the command is still running after this timeout expires.\n * @property {?string} cwd The path to an existing folder, which is going to be set as the\n * working directory for the command/script being executed.\n */\n\n/**\n * Executes the given AppleScript command or a whole script based on the\n * given options. Either of these options must be provided. If both are provided\n * then the `command` one gets the priority.\n * Note that AppleScript command cannot contain line breaks. Consider making it\n * to a script in such case.\n * Note that by default AppleScript engine blocks commands/scripts execution if your script\n * is trying to access some private entities, like cameras or the desktop screen\n * and no permissions to do it are given to the parent (for example, Appium or Terminal)\n * process in System Preferences -> Privacy list.\n *\n * @param {!ExecAppleScriptOptions} opts\n * @returns {string} The actual stdout of the given command/script\n * @throws {Error} If the exit code of the given command/script is not zero.\n * The actual stderr output is set to the error message value.\n */\ncommands.macosExecAppleScript = async function macosExecAppleScript (opts = {}) {\n this.ensureFeatureEnabled(APPLE_SCRIPT_FEATURE);\n\n const {\n script,\n language,\n command,\n cwd,\n timeout,\n } = opts;\n if (!script && !command) {\n log.errorAndThrow('AppleScript script/command must not be empty');\n }\n if (/\\n/.test(command)) {\n log.errorAndThrow('AppleScript commands cannot contain line breaks');\n }\n // 'command' has priority over 'script'\n const shouldRunScript = !command;\n\n const args = [];\n if (language) {\n args.push('-l', language);\n }\n let tmpRoot;\n try {\n if (shouldRunScript) {\n tmpRoot = await tempDir.openDir();\n const tmpScriptPath = path.resolve(tmpRoot, 'appium_script.scpt');\n await fs.writeFile(tmpScriptPath, script, 'utf8');\n args.push(tmpScriptPath);\n } else {\n args.push('-e', command);\n }\n log.info(`Running ${OSASCRIPT} with arguments: ${util.quote(args)}`);\n try {\n const {stdout} = await exec(OSASCRIPT, args, {cwd, timeout});\n return stdout;\n } catch (e) {\n throw new Error(e.stderr || e.message);\n }\n } finally {\n if (tmpRoot) {\n await fs.rimraf(tmpRoot);\n }\n }\n};\n\nexport { commands };\nexport default commands;\n"],"mappings":";;;;;;;;AAAA,IAAAA,QAAA,GAAAC,OAAA;AACA,IAAAC,aAAA,GAAAD,OAAA;AACA,IAAAE,OAAA,GAAAC,sBAAA,CAAAH,OAAA;AACA,IAAAI,KAAA,GAAAD,sBAAA,CAAAH,OAAA;AAEA,MAAMK,SAAS,GAAG,WAAW;AAC7B,MAAMC,oBAAoB,GAAG,cAAc;AAE3C,MAAMC,QAAQ,GAAG,CAAC,CAAC;AAACC,OAAA,CAAAD,QAAA,GAAAA,QAAA;AA8BpBA,QAAQ,CAACE,oBAAoB,GAAG,eAAeA,oBAAoBA,CAAEC,IAAI,GAAG,CAAC,CAAC,EAAE;EAC9E,IAAI,CAACC,oBAAoB,CAACL,oBAAoB,CAAC;EAE/C,MAAM;IACJM,MAAM;IACNC,QAAQ;IACRC,OAAO;IACPC,GAAG;IACHC;EACF,CAAC,GAAGN,IAAI;EACR,IAAI,CAACE,MAAM,IAAI,CAACE,OAAO,EAAE;IACvBG,eAAG,CAACC,aAAa,CAAC,8CAA8C,CAAC;EACnE;EACA,IAAI,IAAI,CAACC,IAAI,CAACL,OAAO,CAAC,EAAE;IACtBG,eAAG,CAACC,aAAa,CAAC,iDAAiD,CAAC;EACtE;EAEA,MAAME,eAAe,GAAG,CAACN,OAAO;EAEhC,MAAMO,IAAI,GAAG,EAAE;EACf,IAAIR,QAAQ,EAAE;IACZQ,IAAI,CAACC,IAAI,CAAC,IAAI,EAAET,QAAQ,CAAC;EAC3B;EACA,IAAIU,OAAO;EACX,IAAI;IACF,IAAIH,eAAe,EAAE;MACnBG,OAAO,GAAG,MAAMC,gBAAO,CAACC,OAAO,EAAE;MACjC,MAAMC,aAAa,GAAGC,aAAI,CAACC,OAAO,CAACL,OAAO,EAAE,oBAAoB,CAAC;MACjE,MAAMM,WAAE,CAACC,SAAS,CAACJ,aAAa,EAAEd,MAAM,EAAE,MAAM,CAAC;MACjDS,IAAI,CAACC,IAAI,CAACI,aAAa,CAAC;IAC1B,CAAC,MAAM;MACLL,IAAI,CAACC,IAAI,CAAC,IAAI,EAAER,OAAO,CAAC;IAC1B;IACAG,eAAG,CAACc,IAAI,CAAE,WAAU1B,SAAU,oBAAmB2B,aAAI,CAACC,KAAK,CAACZ,IAAI,CAAE,EAAC,CAAC;IACpE,IAAI;MACF,MAAM;QAACa;MAAM,CAAC,GAAG,MAAM,IAAAC,kBAAI,EAAC9B,SAAS,EAAEgB,IAAI,EAAE;QAACN,GAAG;QAAEC;MAAO,CAAC,CAAC;MAC5D,OAAOkB,MAAM;IACf,CAAC,CAAC,OAAOE,CAAC,EAAE;MACV,MAAM,IAAIC,KAAK,CAACD,CAAC,CAACE,MAAM,IAAIF,CAAC,CAACG,OAAO,CAAC;IACxC;EACF,CAAC,SAAS;IACR,IAAIhB,OAAO,EAAE;MACX,MAAMM,WAAE,CAACW,MAAM,CAACjB,OAAO,CAAC;IAC1B;EACF;AACF,CAAC;AAAC,IAAAkB,QAAA,GAGalC,QAAQ;AAAAC,OAAA,CAAAkC,OAAA,GAAAD,QAAA"}
@@ -52,4 +52,4 @@ commands.executeMacosCommand = async function executeMacosCommand(command, opts
52
52
  };
53
53
  var _default = commands;
54
54
  exports.default = _default;
55
- //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJjb21tYW5kcyIsIkVYVEVOU0lPTl9DT01NQU5EU19NQVBQSU5HIiwic2V0VmFsdWUiLCJjbGljayIsInNjcm9sbCIsInN3aXBlIiwicmlnaHRDbGljayIsImhvdmVyIiwiZG91YmxlQ2xpY2siLCJjbGlja0FuZERyYWciLCJjbGlja0FuZERyYWdBbmRIb2xkIiwia2V5cyIsInRhcCIsImRvdWJsZVRhcCIsInByZXNzIiwicHJlc3NBbmREcmFnIiwicHJlc3NBbmREcmFnQW5kSG9sZCIsInNvdXJjZSIsImxhdW5jaEFwcCIsImFjdGl2YXRlQXBwIiwidGVybWluYXRlQXBwIiwicXVlcnlBcHBTdGF0ZSIsImFwcGxlU2NyaXB0Iiwic3RhcnRSZWNvcmRpbmdTY3JlZW4iLCJzdG9wUmVjb3JkaW5nU2NyZWVuIiwic2NyZWVuc2hvdHMiLCJleGVjdXRlIiwic2NyaXB0IiwiYXJncyIsIm1hdGNoIiwibG9nIiwiaW5mbyIsInJlcGxhY2UiLCJ0cmltIiwiZXhlY3V0ZU1hY29zQ29tbWFuZCIsIl8iLCJpc0FycmF5IiwiZXJyb3JzIiwiTm90SW1wbGVtZW50ZWRFcnJvciIsImNvbW1hbmQiLCJvcHRzIiwiaGFzIiwiVW5rbm93bkNvbW1hbmRFcnJvciJdLCJzb3VyY2VzIjpbIi4uLy4uLy4uL2xpYi9jb21tYW5kcy9leGVjdXRlLmpzIl0sInNvdXJjZXNDb250ZW50IjpbImltcG9ydCBfIGZyb20gJ2xvZGFzaCc7XG5pbXBvcnQgeyBlcnJvcnMgfSBmcm9tICdhcHBpdW0vZHJpdmVyJztcbmltcG9ydCBsb2cgZnJvbSAnLi4vbG9nZ2VyJztcblxuY29uc3QgY29tbWFuZHMgPSB7fTtcblxuY29uc3QgRVhURU5TSU9OX0NPTU1BTkRTX01BUFBJTkcgPSB7XG4gIHNldFZhbHVlOiAnbWFjb3NTZXRWYWx1ZScsXG4gIGNsaWNrOiAnbWFjb3NDbGljaycsXG4gIHNjcm9sbDogJ21hY29zU2Nyb2xsJyxcbiAgc3dpcGU6ICdtYWNvc1N3aXBlJyxcbiAgcmlnaHRDbGljazogJ21hY29zUmlnaHRDbGljaycsXG4gIGhvdmVyOiAnbWFjb3NIb3ZlcicsXG4gIGRvdWJsZUNsaWNrOiAnbWFjb3NEb3VibGVDbGljaycsXG4gIGNsaWNrQW5kRHJhZzogJ21hY29zQ2xpY2tBbmREcmFnJyxcbiAgY2xpY2tBbmREcmFnQW5kSG9sZDogJ21hY29zQ2xpY2tBbmREcmFnQW5kSG9sZCcsXG4gIGtleXM6ICdtYWNvc0tleXMnLFxuXG4gIHRhcDogJ21hY29zVGFwJyxcbiAgZG91YmxlVGFwOiAnbWFjb3NEb3VibGVUYXAnLFxuICBwcmVzczogJ21hY29zUHJlc3MnLFxuICBwcmVzc0FuZERyYWc6ICdtYWNvc1ByZXNzQW5kRHJhZycsXG4gIHByZXNzQW5kRHJhZ0FuZEhvbGQ6ICdtYWNvc1ByZXNzQW5kRHJhZ0FuZEhvbGQnLFxuXG4gIHNvdXJjZTogJ21hY29zU291cmNlJyxcblxuICBsYXVuY2hBcHA6ICdtYWNvc0xhdW5jaEFwcCcsXG4gIGFjdGl2YXRlQXBwOiAnbWFjb3NBY3RpdmF0ZUFwcCcsXG4gIHRlcm1pbmF0ZUFwcDogJ21hY29zVGVybWluYXRlQXBwJyxcbiAgcXVlcnlBcHBTdGF0ZTogJ21hY29zUXVlcnlBcHBTdGF0ZScsXG5cbiAgYXBwbGVTY3JpcHQ6ICdtYWNvc0V4ZWNBcHBsZVNjcmlwdCcsXG5cbiAgc3RhcnRSZWNvcmRpbmdTY3JlZW46ICdzdGFydFJlY29yZGluZ1NjcmVlbicsXG4gIHN0b3BSZWNvcmRpbmdTY3JlZW46ICdzdG9wUmVjb3JkaW5nU2NyZWVuJyxcblxuICBzY3JlZW5zaG90czogJ21hY29zU2NyZWVuc2hvdHMnLFxufTtcblxuY29tbWFuZHMuZXhlY3V0ZSA9IGFzeW5jIGZ1bmN0aW9uIGV4ZWN1dGUgKHNjcmlwdCwgYXJncykge1xuICBpZiAoc2NyaXB0Lm1hdGNoKC9ebWFjb3M6LykpIHtcbiAgICBsb2cuaW5mbyhgRXhlY3V0aW5nIGV4dGVuc2lvbiBjb21tYW5kICcke3NjcmlwdH0nYCk7XG4gICAgc2NyaXB0ID0gc2NyaXB0LnJlcGxhY2UoL15tYWNvczovLCAnJykudHJpbSgpO1xuICAgIHJldHVybiBhd2FpdCB0aGlzLmV4ZWN1dGVNYWNvc0NvbW1hbmQoc2NyaXB0LCBfLmlzQXJyYXkoYXJncykgPyBhcmdzWzBdIDogYXJncyk7XG4gIH1cbiAgdGhyb3cgbmV3IGVycm9ycy5Ob3RJbXBsZW1lbnRlZEVycm9yKCk7XG59O1xuXG5jb21tYW5kcy5leGVjdXRlTWFjb3NDb21tYW5kID0gYXN5bmMgZnVuY3Rpb24gZXhlY3V0ZU1hY29zQ29tbWFuZCAoY29tbWFuZCwgb3B0cyA9IHt9KSB7XG4gIGlmICghXy5oYXMoRVhURU5TSU9OX0NPTU1BTkRTX01BUFBJTkcsIGNvbW1hbmQpKSB7XG4gICAgdGhyb3cgbmV3IGVycm9ycy5Vbmtub3duQ29tbWFuZEVycm9yKGBVbmtub3duIGV4dGVuc2lvbiBjb21tYW5kIFwiJHtjb21tYW5kfVwiLiBgICtcbiAgICAgIGBPbmx5ICR7Xy5rZXlzKEVYVEVOU0lPTl9DT01NQU5EU19NQVBQSU5HKX0gY29tbWFuZHMgYXJlIHN1cHBvcnRlZC5gKTtcbiAgfVxuICByZXR1cm4gYXdhaXQgdGhpc1tFWFRFTlNJT05fQ09NTUFORFNfTUFQUElOR1tjb21tYW5kXV0ob3B0cyk7XG59O1xuXG5leHBvcnQgZGVmYXVsdCBjb21tYW5kcztcbiJdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7QUFBQTtBQUNBO0FBQ0E7QUFFQSxNQUFNQSxRQUFRLEdBQUcsQ0FBQyxDQUFDO0FBRW5CLE1BQU1DLDBCQUEwQixHQUFHO0VBQ2pDQyxRQUFRLEVBQUUsZUFBZTtFQUN6QkMsS0FBSyxFQUFFLFlBQVk7RUFDbkJDLE1BQU0sRUFBRSxhQUFhO0VBQ3JCQyxLQUFLLEVBQUUsWUFBWTtFQUNuQkMsVUFBVSxFQUFFLGlCQUFpQjtFQUM3QkMsS0FBSyxFQUFFLFlBQVk7RUFDbkJDLFdBQVcsRUFBRSxrQkFBa0I7RUFDL0JDLFlBQVksRUFBRSxtQkFBbUI7RUFDakNDLG1CQUFtQixFQUFFLDBCQUEwQjtFQUMvQ0MsSUFBSSxFQUFFLFdBQVc7RUFFakJDLEdBQUcsRUFBRSxVQUFVO0VBQ2ZDLFNBQVMsRUFBRSxnQkFBZ0I7RUFDM0JDLEtBQUssRUFBRSxZQUFZO0VBQ25CQyxZQUFZLEVBQUUsbUJBQW1CO0VBQ2pDQyxtQkFBbUIsRUFBRSwwQkFBMEI7RUFFL0NDLE1BQU0sRUFBRSxhQUFhO0VBRXJCQyxTQUFTLEVBQUUsZ0JBQWdCO0VBQzNCQyxXQUFXLEVBQUUsa0JBQWtCO0VBQy9CQyxZQUFZLEVBQUUsbUJBQW1CO0VBQ2pDQyxhQUFhLEVBQUUsb0JBQW9CO0VBRW5DQyxXQUFXLEVBQUUsc0JBQXNCO0VBRW5DQyxvQkFBb0IsRUFBRSxzQkFBc0I7RUFDNUNDLG1CQUFtQixFQUFFLHFCQUFxQjtFQUUxQ0MsV0FBVyxFQUFFO0FBQ2YsQ0FBQztBQUVEekIsUUFBUSxDQUFDMEIsT0FBTyxHQUFHLGVBQWVBLE9BQU8sQ0FBRUMsTUFBTSxFQUFFQyxJQUFJLEVBQUU7RUFDdkQsSUFBSUQsTUFBTSxDQUFDRSxLQUFLLENBQUMsU0FBUyxDQUFDLEVBQUU7SUFDM0JDLGVBQUcsQ0FBQ0MsSUFBSSxDQUFFLGdDQUErQkosTUFBTyxHQUFFLENBQUM7SUFDbkRBLE1BQU0sR0FBR0EsTUFBTSxDQUFDSyxPQUFPLENBQUMsU0FBUyxFQUFFLEVBQUUsQ0FBQyxDQUFDQyxJQUFJLEVBQUU7SUFDN0MsT0FBTyxNQUFNLElBQUksQ0FBQ0MsbUJBQW1CLENBQUNQLE1BQU0sRUFBRVEsZUFBQyxDQUFDQyxPQUFPLENBQUNSLElBQUksQ0FBQyxHQUFHQSxJQUFJLENBQUMsQ0FBQyxDQUFDLEdBQUdBLElBQUksQ0FBQztFQUNqRjtFQUNBLE1BQU0sSUFBSVMsY0FBTSxDQUFDQyxtQkFBbUIsRUFBRTtBQUN4QyxDQUFDO0FBRUR0QyxRQUFRLENBQUNrQyxtQkFBbUIsR0FBRyxlQUFlQSxtQkFBbUIsQ0FBRUssT0FBTyxFQUFFQyxJQUFJLEdBQUcsQ0FBQyxDQUFDLEVBQUU7RUFDckYsSUFBSSxDQUFDTCxlQUFDLENBQUNNLEdBQUcsQ0FBQ3hDLDBCQUEwQixFQUFFc0MsT0FBTyxDQUFDLEVBQUU7SUFDL0MsTUFBTSxJQUFJRixjQUFNLENBQUNLLG1CQUFtQixDQUFFLDhCQUE2QkgsT0FBUSxLQUFJLEdBQzVFLFFBQU9KLGVBQUMsQ0FBQ3hCLElBQUksQ0FBQ1YsMEJBQTBCLENBQUUsMEJBQXlCLENBQUM7RUFDekU7RUFDQSxPQUFPLE1BQU0sSUFBSSxDQUFDQSwwQkFBMEIsQ0FBQ3NDLE9BQU8sQ0FBQyxDQUFDLENBQUNDLElBQUksQ0FBQztBQUM5RCxDQUFDO0FBQUMsZUFFYXhDLFFBQVE7QUFBQSJ9
55
+ //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJfbG9kYXNoIiwiX2ludGVyb3BSZXF1aXJlRGVmYXVsdCIsInJlcXVpcmUiLCJfZHJpdmVyIiwiX2xvZ2dlciIsImNvbW1hbmRzIiwiRVhURU5TSU9OX0NPTU1BTkRTX01BUFBJTkciLCJzZXRWYWx1ZSIsImNsaWNrIiwic2Nyb2xsIiwic3dpcGUiLCJyaWdodENsaWNrIiwiaG92ZXIiLCJkb3VibGVDbGljayIsImNsaWNrQW5kRHJhZyIsImNsaWNrQW5kRHJhZ0FuZEhvbGQiLCJrZXlzIiwidGFwIiwiZG91YmxlVGFwIiwicHJlc3MiLCJwcmVzc0FuZERyYWciLCJwcmVzc0FuZERyYWdBbmRIb2xkIiwic291cmNlIiwibGF1bmNoQXBwIiwiYWN0aXZhdGVBcHAiLCJ0ZXJtaW5hdGVBcHAiLCJxdWVyeUFwcFN0YXRlIiwiYXBwbGVTY3JpcHQiLCJzdGFydFJlY29yZGluZ1NjcmVlbiIsInN0b3BSZWNvcmRpbmdTY3JlZW4iLCJzY3JlZW5zaG90cyIsImV4ZWN1dGUiLCJzY3JpcHQiLCJhcmdzIiwibWF0Y2giLCJsb2ciLCJpbmZvIiwicmVwbGFjZSIsInRyaW0iLCJleGVjdXRlTWFjb3NDb21tYW5kIiwiXyIsImlzQXJyYXkiLCJlcnJvcnMiLCJOb3RJbXBsZW1lbnRlZEVycm9yIiwiY29tbWFuZCIsIm9wdHMiLCJoYXMiLCJVbmtub3duQ29tbWFuZEVycm9yIiwiX2RlZmF1bHQiLCJleHBvcnRzIiwiZGVmYXVsdCJdLCJzb3VyY2VzIjpbIi4uLy4uLy4uL2xpYi9jb21tYW5kcy9leGVjdXRlLmpzIl0sInNvdXJjZXNDb250ZW50IjpbImltcG9ydCBfIGZyb20gJ2xvZGFzaCc7XG5pbXBvcnQgeyBlcnJvcnMgfSBmcm9tICdhcHBpdW0vZHJpdmVyJztcbmltcG9ydCBsb2cgZnJvbSAnLi4vbG9nZ2VyJztcblxuY29uc3QgY29tbWFuZHMgPSB7fTtcblxuY29uc3QgRVhURU5TSU9OX0NPTU1BTkRTX01BUFBJTkcgPSB7XG4gIHNldFZhbHVlOiAnbWFjb3NTZXRWYWx1ZScsXG4gIGNsaWNrOiAnbWFjb3NDbGljaycsXG4gIHNjcm9sbDogJ21hY29zU2Nyb2xsJyxcbiAgc3dpcGU6ICdtYWNvc1N3aXBlJyxcbiAgcmlnaHRDbGljazogJ21hY29zUmlnaHRDbGljaycsXG4gIGhvdmVyOiAnbWFjb3NIb3ZlcicsXG4gIGRvdWJsZUNsaWNrOiAnbWFjb3NEb3VibGVDbGljaycsXG4gIGNsaWNrQW5kRHJhZzogJ21hY29zQ2xpY2tBbmREcmFnJyxcbiAgY2xpY2tBbmREcmFnQW5kSG9sZDogJ21hY29zQ2xpY2tBbmREcmFnQW5kSG9sZCcsXG4gIGtleXM6ICdtYWNvc0tleXMnLFxuXG4gIHRhcDogJ21hY29zVGFwJyxcbiAgZG91YmxlVGFwOiAnbWFjb3NEb3VibGVUYXAnLFxuICBwcmVzczogJ21hY29zUHJlc3MnLFxuICBwcmVzc0FuZERyYWc6ICdtYWNvc1ByZXNzQW5kRHJhZycsXG4gIHByZXNzQW5kRHJhZ0FuZEhvbGQ6ICdtYWNvc1ByZXNzQW5kRHJhZ0FuZEhvbGQnLFxuXG4gIHNvdXJjZTogJ21hY29zU291cmNlJyxcblxuICBsYXVuY2hBcHA6ICdtYWNvc0xhdW5jaEFwcCcsXG4gIGFjdGl2YXRlQXBwOiAnbWFjb3NBY3RpdmF0ZUFwcCcsXG4gIHRlcm1pbmF0ZUFwcDogJ21hY29zVGVybWluYXRlQXBwJyxcbiAgcXVlcnlBcHBTdGF0ZTogJ21hY29zUXVlcnlBcHBTdGF0ZScsXG5cbiAgYXBwbGVTY3JpcHQ6ICdtYWNvc0V4ZWNBcHBsZVNjcmlwdCcsXG5cbiAgc3RhcnRSZWNvcmRpbmdTY3JlZW46ICdzdGFydFJlY29yZGluZ1NjcmVlbicsXG4gIHN0b3BSZWNvcmRpbmdTY3JlZW46ICdzdG9wUmVjb3JkaW5nU2NyZWVuJyxcblxuICBzY3JlZW5zaG90czogJ21hY29zU2NyZWVuc2hvdHMnLFxufTtcblxuY29tbWFuZHMuZXhlY3V0ZSA9IGFzeW5jIGZ1bmN0aW9uIGV4ZWN1dGUgKHNjcmlwdCwgYXJncykge1xuICBpZiAoc2NyaXB0Lm1hdGNoKC9ebWFjb3M6LykpIHtcbiAgICBsb2cuaW5mbyhgRXhlY3V0aW5nIGV4dGVuc2lvbiBjb21tYW5kICcke3NjcmlwdH0nYCk7XG4gICAgc2NyaXB0ID0gc2NyaXB0LnJlcGxhY2UoL15tYWNvczovLCAnJykudHJpbSgpO1xuICAgIHJldHVybiBhd2FpdCB0aGlzLmV4ZWN1dGVNYWNvc0NvbW1hbmQoc2NyaXB0LCBfLmlzQXJyYXkoYXJncykgPyBhcmdzWzBdIDogYXJncyk7XG4gIH1cbiAgdGhyb3cgbmV3IGVycm9ycy5Ob3RJbXBsZW1lbnRlZEVycm9yKCk7XG59O1xuXG5jb21tYW5kcy5leGVjdXRlTWFjb3NDb21tYW5kID0gYXN5bmMgZnVuY3Rpb24gZXhlY3V0ZU1hY29zQ29tbWFuZCAoY29tbWFuZCwgb3B0cyA9IHt9KSB7XG4gIGlmICghXy5oYXMoRVhURU5TSU9OX0NPTU1BTkRTX01BUFBJTkcsIGNvbW1hbmQpKSB7XG4gICAgdGhyb3cgbmV3IGVycm9ycy5Vbmtub3duQ29tbWFuZEVycm9yKGBVbmtub3duIGV4dGVuc2lvbiBjb21tYW5kIFwiJHtjb21tYW5kfVwiLiBgICtcbiAgICAgIGBPbmx5ICR7Xy5rZXlzKEVYVEVOU0lPTl9DT01NQU5EU19NQVBQSU5HKX0gY29tbWFuZHMgYXJlIHN1cHBvcnRlZC5gKTtcbiAgfVxuICByZXR1cm4gYXdhaXQgdGhpc1tFWFRFTlNJT05fQ09NTUFORFNfTUFQUElOR1tjb21tYW5kXV0ob3B0cyk7XG59O1xuXG5leHBvcnQgZGVmYXVsdCBjb21tYW5kcztcbiJdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7QUFBQSxJQUFBQSxPQUFBLEdBQUFDLHNCQUFBLENBQUFDLE9BQUE7QUFDQSxJQUFBQyxPQUFBLEdBQUFELE9BQUE7QUFDQSxJQUFBRSxPQUFBLEdBQUFILHNCQUFBLENBQUFDLE9BQUE7QUFFQSxNQUFNRyxRQUFRLEdBQUcsQ0FBQyxDQUFDO0FBRW5CLE1BQU1DLDBCQUEwQixHQUFHO0VBQ2pDQyxRQUFRLEVBQUUsZUFBZTtFQUN6QkMsS0FBSyxFQUFFLFlBQVk7RUFDbkJDLE1BQU0sRUFBRSxhQUFhO0VBQ3JCQyxLQUFLLEVBQUUsWUFBWTtFQUNuQkMsVUFBVSxFQUFFLGlCQUFpQjtFQUM3QkMsS0FBSyxFQUFFLFlBQVk7RUFDbkJDLFdBQVcsRUFBRSxrQkFBa0I7RUFDL0JDLFlBQVksRUFBRSxtQkFBbUI7RUFDakNDLG1CQUFtQixFQUFFLDBCQUEwQjtFQUMvQ0MsSUFBSSxFQUFFLFdBQVc7RUFFakJDLEdBQUcsRUFBRSxVQUFVO0VBQ2ZDLFNBQVMsRUFBRSxnQkFBZ0I7RUFDM0JDLEtBQUssRUFBRSxZQUFZO0VBQ25CQyxZQUFZLEVBQUUsbUJBQW1CO0VBQ2pDQyxtQkFBbUIsRUFBRSwwQkFBMEI7RUFFL0NDLE1BQU0sRUFBRSxhQUFhO0VBRXJCQyxTQUFTLEVBQUUsZ0JBQWdCO0VBQzNCQyxXQUFXLEVBQUUsa0JBQWtCO0VBQy9CQyxZQUFZLEVBQUUsbUJBQW1CO0VBQ2pDQyxhQUFhLEVBQUUsb0JBQW9CO0VBRW5DQyxXQUFXLEVBQUUsc0JBQXNCO0VBRW5DQyxvQkFBb0IsRUFBRSxzQkFBc0I7RUFDNUNDLG1CQUFtQixFQUFFLHFCQUFxQjtFQUUxQ0MsV0FBVyxFQUFFO0FBQ2YsQ0FBQztBQUVEekIsUUFBUSxDQUFDMEIsT0FBTyxHQUFHLGVBQWVBLE9BQU9BLENBQUVDLE1BQU0sRUFBRUMsSUFBSSxFQUFFO0VBQ3ZELElBQUlELE1BQU0sQ0FBQ0UsS0FBSyxDQUFDLFNBQVMsQ0FBQyxFQUFFO0lBQzNCQyxlQUFHLENBQUNDLElBQUksQ0FBRSxnQ0FBK0JKLE1BQU8sR0FBRSxDQUFDO0lBQ25EQSxNQUFNLEdBQUdBLE1BQU0sQ0FBQ0ssT0FBTyxDQUFDLFNBQVMsRUFBRSxFQUFFLENBQUMsQ0FBQ0MsSUFBSSxFQUFFO0lBQzdDLE9BQU8sTUFBTSxJQUFJLENBQUNDLG1CQUFtQixDQUFDUCxNQUFNLEVBQUVRLGVBQUMsQ0FBQ0MsT0FBTyxDQUFDUixJQUFJLENBQUMsR0FBR0EsSUFBSSxDQUFDLENBQUMsQ0FBQyxHQUFHQSxJQUFJLENBQUM7RUFDakY7RUFDQSxNQUFNLElBQUlTLGNBQU0sQ0FBQ0MsbUJBQW1CLEVBQUU7QUFDeEMsQ0FBQztBQUVEdEMsUUFBUSxDQUFDa0MsbUJBQW1CLEdBQUcsZUFBZUEsbUJBQW1CQSxDQUFFSyxPQUFPLEVBQUVDLElBQUksR0FBRyxDQUFDLENBQUMsRUFBRTtFQUNyRixJQUFJLENBQUNMLGVBQUMsQ0FBQ00sR0FBRyxDQUFDeEMsMEJBQTBCLEVBQUVzQyxPQUFPLENBQUMsRUFBRTtJQUMvQyxNQUFNLElBQUlGLGNBQU0sQ0FBQ0ssbUJBQW1CLENBQUUsOEJBQTZCSCxPQUFRLEtBQUksR0FDNUUsUUFBT0osZUFBQyxDQUFDeEIsSUFBSSxDQUFDViwwQkFBMEIsQ0FBRSwwQkFBeUIsQ0FBQztFQUN6RTtFQUNBLE9BQU8sTUFBTSxJQUFJLENBQUNBLDBCQUEwQixDQUFDc0MsT0FBTyxDQUFDLENBQUMsQ0FBQ0MsSUFBSSxDQUFDO0FBQzlELENBQUM7QUFBQyxJQUFBRyxRQUFBLEdBRWEzQyxRQUFRO0FBQUE0QyxPQUFBLENBQUFDLE9BQUEsR0FBQUYsUUFBQSJ9
@@ -1 +1 @@
1
- {"version":3,"file":"execute.js","names":["commands","EXTENSION_COMMANDS_MAPPING","setValue","click","scroll","swipe","rightClick","hover","doubleClick","clickAndDrag","clickAndDragAndHold","keys","tap","doubleTap","press","pressAndDrag","pressAndDragAndHold","source","launchApp","activateApp","terminateApp","queryAppState","appleScript","startRecordingScreen","stopRecordingScreen","screenshots","execute","script","args","match","log","info","replace","trim","executeMacosCommand","_","isArray","errors","NotImplementedError","command","opts","has","UnknownCommandError"],"sources":["../../../lib/commands/execute.js"],"sourcesContent":["import _ from 'lodash';\nimport { errors } from 'appium/driver';\nimport log from '../logger';\n\nconst commands = {};\n\nconst EXTENSION_COMMANDS_MAPPING = {\n setValue: 'macosSetValue',\n click: 'macosClick',\n scroll: 'macosScroll',\n swipe: 'macosSwipe',\n rightClick: 'macosRightClick',\n hover: 'macosHover',\n doubleClick: 'macosDoubleClick',\n clickAndDrag: 'macosClickAndDrag',\n clickAndDragAndHold: 'macosClickAndDragAndHold',\n keys: 'macosKeys',\n\n tap: 'macosTap',\n doubleTap: 'macosDoubleTap',\n press: 'macosPress',\n pressAndDrag: 'macosPressAndDrag',\n pressAndDragAndHold: 'macosPressAndDragAndHold',\n\n source: 'macosSource',\n\n launchApp: 'macosLaunchApp',\n activateApp: 'macosActivateApp',\n terminateApp: 'macosTerminateApp',\n queryAppState: 'macosQueryAppState',\n\n appleScript: 'macosExecAppleScript',\n\n startRecordingScreen: 'startRecordingScreen',\n stopRecordingScreen: 'stopRecordingScreen',\n\n screenshots: 'macosScreenshots',\n};\n\ncommands.execute = async function execute (script, args) {\n if (script.match(/^macos:/)) {\n log.info(`Executing extension command '${script}'`);\n script = script.replace(/^macos:/, '').trim();\n return await this.executeMacosCommand(script, _.isArray(args) ? args[0] : args);\n }\n throw new errors.NotImplementedError();\n};\n\ncommands.executeMacosCommand = async function executeMacosCommand (command, opts = {}) {\n if (!_.has(EXTENSION_COMMANDS_MAPPING, command)) {\n throw new errors.UnknownCommandError(`Unknown extension command \"${command}\". ` +\n `Only ${_.keys(EXTENSION_COMMANDS_MAPPING)} commands are supported.`);\n }\n return await this[EXTENSION_COMMANDS_MAPPING[command]](opts);\n};\n\nexport default commands;\n"],"mappings":";;;;;;;;AAAA;AACA;AACA;AAEA,MAAMA,QAAQ,GAAG,CAAC,CAAC;AAEnB,MAAMC,0BAA0B,GAAG;EACjCC,QAAQ,EAAE,eAAe;EACzBC,KAAK,EAAE,YAAY;EACnBC,MAAM,EAAE,aAAa;EACrBC,KAAK,EAAE,YAAY;EACnBC,UAAU,EAAE,iBAAiB;EAC7BC,KAAK,EAAE,YAAY;EACnBC,WAAW,EAAE,kBAAkB;EAC/BC,YAAY,EAAE,mBAAmB;EACjCC,mBAAmB,EAAE,0BAA0B;EAC/CC,IAAI,EAAE,WAAW;EAEjBC,GAAG,EAAE,UAAU;EACfC,SAAS,EAAE,gBAAgB;EAC3BC,KAAK,EAAE,YAAY;EACnBC,YAAY,EAAE,mBAAmB;EACjCC,mBAAmB,EAAE,0BAA0B;EAE/CC,MAAM,EAAE,aAAa;EAErBC,SAAS,EAAE,gBAAgB;EAC3BC,WAAW,EAAE,kBAAkB;EAC/BC,YAAY,EAAE,mBAAmB;EACjCC,aAAa,EAAE,oBAAoB;EAEnCC,WAAW,EAAE,sBAAsB;EAEnCC,oBAAoB,EAAE,sBAAsB;EAC5CC,mBAAmB,EAAE,qBAAqB;EAE1CC,WAAW,EAAE;AACf,CAAC;AAEDzB,QAAQ,CAAC0B,OAAO,GAAG,eAAeA,OAAO,CAAEC,MAAM,EAAEC,IAAI,EAAE;EACvD,IAAID,MAAM,CAACE,KAAK,CAAC,SAAS,CAAC,EAAE;IAC3BC,eAAG,CAACC,IAAI,CAAE,gCAA+BJ,MAAO,GAAE,CAAC;IACnDA,MAAM,GAAGA,MAAM,CAACK,OAAO,CAAC,SAAS,EAAE,EAAE,CAAC,CAACC,IAAI,EAAE;IAC7C,OAAO,MAAM,IAAI,CAACC,mBAAmB,CAACP,MAAM,EAAEQ,eAAC,CAACC,OAAO,CAACR,IAAI,CAAC,GAAGA,IAAI,CAAC,CAAC,CAAC,GAAGA,IAAI,CAAC;EACjF;EACA,MAAM,IAAIS,cAAM,CAACC,mBAAmB,EAAE;AACxC,CAAC;AAEDtC,QAAQ,CAACkC,mBAAmB,GAAG,eAAeA,mBAAmB,CAAEK,OAAO,EAAEC,IAAI,GAAG,CAAC,CAAC,EAAE;EACrF,IAAI,CAACL,eAAC,CAACM,GAAG,CAACxC,0BAA0B,EAAEsC,OAAO,CAAC,EAAE;IAC/C,MAAM,IAAIF,cAAM,CAACK,mBAAmB,CAAE,8BAA6BH,OAAQ,KAAI,GAC5E,QAAOJ,eAAC,CAACxB,IAAI,CAACV,0BAA0B,CAAE,0BAAyB,CAAC;EACzE;EACA,OAAO,MAAM,IAAI,CAACA,0BAA0B,CAACsC,OAAO,CAAC,CAAC,CAACC,IAAI,CAAC;AAC9D,CAAC;AAAC,eAEaxC,QAAQ;AAAA"}
1
+ {"version":3,"file":"execute.js","names":["_lodash","_interopRequireDefault","require","_driver","_logger","commands","EXTENSION_COMMANDS_MAPPING","setValue","click","scroll","swipe","rightClick","hover","doubleClick","clickAndDrag","clickAndDragAndHold","keys","tap","doubleTap","press","pressAndDrag","pressAndDragAndHold","source","launchApp","activateApp","terminateApp","queryAppState","appleScript","startRecordingScreen","stopRecordingScreen","screenshots","execute","script","args","match","log","info","replace","trim","executeMacosCommand","_","isArray","errors","NotImplementedError","command","opts","has","UnknownCommandError","_default","exports","default"],"sources":["../../../lib/commands/execute.js"],"sourcesContent":["import _ from 'lodash';\nimport { errors } from 'appium/driver';\nimport log from '../logger';\n\nconst commands = {};\n\nconst EXTENSION_COMMANDS_MAPPING = {\n setValue: 'macosSetValue',\n click: 'macosClick',\n scroll: 'macosScroll',\n swipe: 'macosSwipe',\n rightClick: 'macosRightClick',\n hover: 'macosHover',\n doubleClick: 'macosDoubleClick',\n clickAndDrag: 'macosClickAndDrag',\n clickAndDragAndHold: 'macosClickAndDragAndHold',\n keys: 'macosKeys',\n\n tap: 'macosTap',\n doubleTap: 'macosDoubleTap',\n press: 'macosPress',\n pressAndDrag: 'macosPressAndDrag',\n pressAndDragAndHold: 'macosPressAndDragAndHold',\n\n source: 'macosSource',\n\n launchApp: 'macosLaunchApp',\n activateApp: 'macosActivateApp',\n terminateApp: 'macosTerminateApp',\n queryAppState: 'macosQueryAppState',\n\n appleScript: 'macosExecAppleScript',\n\n startRecordingScreen: 'startRecordingScreen',\n stopRecordingScreen: 'stopRecordingScreen',\n\n screenshots: 'macosScreenshots',\n};\n\ncommands.execute = async function execute (script, args) {\n if (script.match(/^macos:/)) {\n log.info(`Executing extension command '${script}'`);\n script = script.replace(/^macos:/, '').trim();\n return await this.executeMacosCommand(script, _.isArray(args) ? args[0] : args);\n }\n throw new errors.NotImplementedError();\n};\n\ncommands.executeMacosCommand = async function executeMacosCommand (command, opts = {}) {\n if (!_.has(EXTENSION_COMMANDS_MAPPING, command)) {\n throw new errors.UnknownCommandError(`Unknown extension command \"${command}\". ` +\n `Only ${_.keys(EXTENSION_COMMANDS_MAPPING)} commands are supported.`);\n }\n return await this[EXTENSION_COMMANDS_MAPPING[command]](opts);\n};\n\nexport default commands;\n"],"mappings":";;;;;;;;AAAA,IAAAA,OAAA,GAAAC,sBAAA,CAAAC,OAAA;AACA,IAAAC,OAAA,GAAAD,OAAA;AACA,IAAAE,OAAA,GAAAH,sBAAA,CAAAC,OAAA;AAEA,MAAMG,QAAQ,GAAG,CAAC,CAAC;AAEnB,MAAMC,0BAA0B,GAAG;EACjCC,QAAQ,EAAE,eAAe;EACzBC,KAAK,EAAE,YAAY;EACnBC,MAAM,EAAE,aAAa;EACrBC,KAAK,EAAE,YAAY;EACnBC,UAAU,EAAE,iBAAiB;EAC7BC,KAAK,EAAE,YAAY;EACnBC,WAAW,EAAE,kBAAkB;EAC/BC,YAAY,EAAE,mBAAmB;EACjCC,mBAAmB,EAAE,0BAA0B;EAC/CC,IAAI,EAAE,WAAW;EAEjBC,GAAG,EAAE,UAAU;EACfC,SAAS,EAAE,gBAAgB;EAC3BC,KAAK,EAAE,YAAY;EACnBC,YAAY,EAAE,mBAAmB;EACjCC,mBAAmB,EAAE,0BAA0B;EAE/CC,MAAM,EAAE,aAAa;EAErBC,SAAS,EAAE,gBAAgB;EAC3BC,WAAW,EAAE,kBAAkB;EAC/BC,YAAY,EAAE,mBAAmB;EACjCC,aAAa,EAAE,oBAAoB;EAEnCC,WAAW,EAAE,sBAAsB;EAEnCC,oBAAoB,EAAE,sBAAsB;EAC5CC,mBAAmB,EAAE,qBAAqB;EAE1CC,WAAW,EAAE;AACf,CAAC;AAEDzB,QAAQ,CAAC0B,OAAO,GAAG,eAAeA,OAAOA,CAAEC,MAAM,EAAEC,IAAI,EAAE;EACvD,IAAID,MAAM,CAACE,KAAK,CAAC,SAAS,CAAC,EAAE;IAC3BC,eAAG,CAACC,IAAI,CAAE,gCAA+BJ,MAAO,GAAE,CAAC;IACnDA,MAAM,GAAGA,MAAM,CAACK,OAAO,CAAC,SAAS,EAAE,EAAE,CAAC,CAACC,IAAI,EAAE;IAC7C,OAAO,MAAM,IAAI,CAACC,mBAAmB,CAACP,MAAM,EAAEQ,eAAC,CAACC,OAAO,CAACR,IAAI,CAAC,GAAGA,IAAI,CAAC,CAAC,CAAC,GAAGA,IAAI,CAAC;EACjF;EACA,MAAM,IAAIS,cAAM,CAACC,mBAAmB,EAAE;AACxC,CAAC;AAEDtC,QAAQ,CAACkC,mBAAmB,GAAG,eAAeA,mBAAmBA,CAAEK,OAAO,EAAEC,IAAI,GAAG,CAAC,CAAC,EAAE;EACrF,IAAI,CAACL,eAAC,CAACM,GAAG,CAACxC,0BAA0B,EAAEsC,OAAO,CAAC,EAAE;IAC/C,MAAM,IAAIF,cAAM,CAACK,mBAAmB,CAAE,8BAA6BH,OAAQ,KAAI,GAC5E,QAAOJ,eAAC,CAACxB,IAAI,CAACV,0BAA0B,CAAE,0BAAyB,CAAC;EACzE;EACA,OAAO,MAAM,IAAI,CAACA,0BAA0B,CAACsC,OAAO,CAAC,CAAC,CAACC,IAAI,CAAC;AAC9D,CAAC;AAAC,IAAAG,QAAA,GAEa3C,QAAQ;AAAA4C,OAAA,CAAAC,OAAA,GAAAF,QAAA"}
@@ -23,4 +23,4 @@ commands.findElOrEls = async function findElOrEls(strategy, selector, mult, cont
23
23
  };
24
24
  var _default = commands;
25
25
  exports.default = _default;
26
- //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJjb21tYW5kcyIsImZpbmRFbE9yRWxzIiwic3RyYXRlZ3kiLCJzZWxlY3RvciIsIm11bHQiLCJjb250ZXh0IiwidXRpbCIsInVud3JhcEVsZW1lbnQiLCJlbmRwb2ludCIsIndkYSIsInByb3h5IiwiY29tbWFuZCIsInVzaW5nIiwidmFsdWUiXSwic291cmNlcyI6WyIuLi8uLi8uLi9saWIvY29tbWFuZHMvZmluZC5qcyJdLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyB1dGlsIH0gZnJvbSAnYXBwaXVtL3N1cHBvcnQnO1xuXG5cbmNvbnN0IGNvbW1hbmRzID0ge307XG5cbi8vIFRoaXMgaXMgbmVlZGVkIHRvIG1ha2UgbG9va3VwIGJ5IGltYWdlIHdvcmtpbmdcbmNvbW1hbmRzLmZpbmRFbE9yRWxzID0gYXN5bmMgZnVuY3Rpb24gZmluZEVsT3JFbHMgKHN0cmF0ZWd5LCBzZWxlY3RvciwgbXVsdCwgY29udGV4dCkge1xuICBjb250ZXh0ID0gdXRpbC51bndyYXBFbGVtZW50KGNvbnRleHQpO1xuICBjb25zdCBlbmRwb2ludCA9IGAvZWxlbWVudCR7Y29udGV4dCA/IGAvJHtjb250ZXh0fS9lbGVtZW50YCA6ICcnfSR7bXVsdCA/ICdzJyA6ICcnfWA7XG5cbiAgaWYgKHN0cmF0ZWd5ID09PSAnLWlvcyBwcmVkaWNhdGUgc3RyaW5nJykge1xuICAgIHN0cmF0ZWd5ID0gJ3ByZWRpY2F0ZSBzdHJpbmcnO1xuICB9IGVsc2UgaWYgKHN0cmF0ZWd5ID09PSAnLWlvcyBjbGFzcyBjaGFpbicpIHtcbiAgICBzdHJhdGVneSA9ICdjbGFzcyBjaGFpbic7XG4gIH1cblxuICByZXR1cm4gYXdhaXQgdGhpcy53ZGEucHJveHkuY29tbWFuZChlbmRwb2ludCwgJ1BPU1QnLCB7XG4gICAgdXNpbmc6IHN0cmF0ZWd5LFxuICAgIHZhbHVlOiBzZWxlY3RvcixcbiAgfSk7XG59O1xuXG5cbmV4cG9ydCB7IGNvbW1hbmRzIH07XG5leHBvcnQgZGVmYXVsdCBjb21tYW5kcztcbiJdLCJtYXBwaW5ncyI6Ijs7Ozs7OztBQUFBO0FBR0EsTUFBTUEsUUFBUSxHQUFHLENBQUMsQ0FBQztBQUFDO0FBR3BCQSxRQUFRLENBQUNDLFdBQVcsR0FBRyxlQUFlQSxXQUFXLENBQUVDLFFBQVEsRUFBRUMsUUFBUSxFQUFFQyxJQUFJLEVBQUVDLE9BQU8sRUFBRTtFQUNwRkEsT0FBTyxHQUFHQyxhQUFJLENBQUNDLGFBQWEsQ0FBQ0YsT0FBTyxDQUFDO0VBQ3JDLE1BQU1HLFFBQVEsR0FBSSxXQUFVSCxPQUFPLEdBQUksSUFBR0EsT0FBUSxVQUFTLEdBQUcsRUFBRyxHQUFFRCxJQUFJLEdBQUcsR0FBRyxHQUFHLEVBQUcsRUFBQztFQUVwRixJQUFJRixRQUFRLEtBQUssdUJBQXVCLEVBQUU7SUFDeENBLFFBQVEsR0FBRyxrQkFBa0I7RUFDL0IsQ0FBQyxNQUFNLElBQUlBLFFBQVEsS0FBSyxrQkFBa0IsRUFBRTtJQUMxQ0EsUUFBUSxHQUFHLGFBQWE7RUFDMUI7RUFFQSxPQUFPLE1BQU0sSUFBSSxDQUFDTyxHQUFHLENBQUNDLEtBQUssQ0FBQ0MsT0FBTyxDQUFDSCxRQUFRLEVBQUUsTUFBTSxFQUFFO0lBQ3BESSxLQUFLLEVBQUVWLFFBQVE7SUFDZlcsS0FBSyxFQUFFVjtFQUNULENBQUMsQ0FBQztBQUNKLENBQUM7QUFBQyxlQUlhSCxRQUFRO0FBQUEifQ==
26
+ //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJfc3VwcG9ydCIsInJlcXVpcmUiLCJjb21tYW5kcyIsImV4cG9ydHMiLCJmaW5kRWxPckVscyIsInN0cmF0ZWd5Iiwic2VsZWN0b3IiLCJtdWx0IiwiY29udGV4dCIsInV0aWwiLCJ1bndyYXBFbGVtZW50IiwiZW5kcG9pbnQiLCJ3ZGEiLCJwcm94eSIsImNvbW1hbmQiLCJ1c2luZyIsInZhbHVlIiwiX2RlZmF1bHQiLCJkZWZhdWx0Il0sInNvdXJjZXMiOlsiLi4vLi4vLi4vbGliL2NvbW1hbmRzL2ZpbmQuanMiXSwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgdXRpbCB9IGZyb20gJ2FwcGl1bS9zdXBwb3J0JztcblxuXG5jb25zdCBjb21tYW5kcyA9IHt9O1xuXG4vLyBUaGlzIGlzIG5lZWRlZCB0byBtYWtlIGxvb2t1cCBieSBpbWFnZSB3b3JraW5nXG5jb21tYW5kcy5maW5kRWxPckVscyA9IGFzeW5jIGZ1bmN0aW9uIGZpbmRFbE9yRWxzIChzdHJhdGVneSwgc2VsZWN0b3IsIG11bHQsIGNvbnRleHQpIHtcbiAgY29udGV4dCA9IHV0aWwudW53cmFwRWxlbWVudChjb250ZXh0KTtcbiAgY29uc3QgZW5kcG9pbnQgPSBgL2VsZW1lbnQke2NvbnRleHQgPyBgLyR7Y29udGV4dH0vZWxlbWVudGAgOiAnJ30ke211bHQgPyAncycgOiAnJ31gO1xuXG4gIGlmIChzdHJhdGVneSA9PT0gJy1pb3MgcHJlZGljYXRlIHN0cmluZycpIHtcbiAgICBzdHJhdGVneSA9ICdwcmVkaWNhdGUgc3RyaW5nJztcbiAgfSBlbHNlIGlmIChzdHJhdGVneSA9PT0gJy1pb3MgY2xhc3MgY2hhaW4nKSB7XG4gICAgc3RyYXRlZ3kgPSAnY2xhc3MgY2hhaW4nO1xuICB9XG5cbiAgcmV0dXJuIGF3YWl0IHRoaXMud2RhLnByb3h5LmNvbW1hbmQoZW5kcG9pbnQsICdQT1NUJywge1xuICAgIHVzaW5nOiBzdHJhdGVneSxcbiAgICB2YWx1ZTogc2VsZWN0b3IsXG4gIH0pO1xufTtcblxuXG5leHBvcnQgeyBjb21tYW5kcyB9O1xuZXhwb3J0IGRlZmF1bHQgY29tbWFuZHM7XG4iXSwibWFwcGluZ3MiOiI7Ozs7Ozs7QUFBQSxJQUFBQSxRQUFBLEdBQUFDLE9BQUE7QUFHQSxNQUFNQyxRQUFRLEdBQUcsQ0FBQyxDQUFDO0FBQUNDLE9BQUEsQ0FBQUQsUUFBQSxHQUFBQSxRQUFBO0FBR3BCQSxRQUFRLENBQUNFLFdBQVcsR0FBRyxlQUFlQSxXQUFXQSxDQUFFQyxRQUFRLEVBQUVDLFFBQVEsRUFBRUMsSUFBSSxFQUFFQyxPQUFPLEVBQUU7RUFDcEZBLE9BQU8sR0FBR0MsYUFBSSxDQUFDQyxhQUFhLENBQUNGLE9BQU8sQ0FBQztFQUNyQyxNQUFNRyxRQUFRLEdBQUksV0FBVUgsT0FBTyxHQUFJLElBQUdBLE9BQVEsVUFBUyxHQUFHLEVBQUcsR0FBRUQsSUFBSSxHQUFHLEdBQUcsR0FBRyxFQUFHLEVBQUM7RUFFcEYsSUFBSUYsUUFBUSxLQUFLLHVCQUF1QixFQUFFO0lBQ3hDQSxRQUFRLEdBQUcsa0JBQWtCO0VBQy9CLENBQUMsTUFBTSxJQUFJQSxRQUFRLEtBQUssa0JBQWtCLEVBQUU7SUFDMUNBLFFBQVEsR0FBRyxhQUFhO0VBQzFCO0VBRUEsT0FBTyxNQUFNLElBQUksQ0FBQ08sR0FBRyxDQUFDQyxLQUFLLENBQUNDLE9BQU8sQ0FBQ0gsUUFBUSxFQUFFLE1BQU0sRUFBRTtJQUNwREksS0FBSyxFQUFFVixRQUFRO0lBQ2ZXLEtBQUssRUFBRVY7RUFDVCxDQUFDLENBQUM7QUFDSixDQUFDO0FBQUMsSUFBQVcsUUFBQSxHQUlhZixRQUFRO0FBQUFDLE9BQUEsQ0FBQWUsT0FBQSxHQUFBRCxRQUFBIn0=
@@ -1 +1 @@
1
- {"version":3,"file":"find.js","names":["commands","findElOrEls","strategy","selector","mult","context","util","unwrapElement","endpoint","wda","proxy","command","using","value"],"sources":["../../../lib/commands/find.js"],"sourcesContent":["import { util } from 'appium/support';\n\n\nconst commands = {};\n\n// This is needed to make lookup by image working\ncommands.findElOrEls = async function findElOrEls (strategy, selector, mult, context) {\n context = util.unwrapElement(context);\n const endpoint = `/element${context ? `/${context}/element` : ''}${mult ? 's' : ''}`;\n\n if (strategy === '-ios predicate string') {\n strategy = 'predicate string';\n } else if (strategy === '-ios class chain') {\n strategy = 'class chain';\n }\n\n return await this.wda.proxy.command(endpoint, 'POST', {\n using: strategy,\n value: selector,\n });\n};\n\n\nexport { commands };\nexport default commands;\n"],"mappings":";;;;;;;AAAA;AAGA,MAAMA,QAAQ,GAAG,CAAC,CAAC;AAAC;AAGpBA,QAAQ,CAACC,WAAW,GAAG,eAAeA,WAAW,CAAEC,QAAQ,EAAEC,QAAQ,EAAEC,IAAI,EAAEC,OAAO,EAAE;EACpFA,OAAO,GAAGC,aAAI,CAACC,aAAa,CAACF,OAAO,CAAC;EACrC,MAAMG,QAAQ,GAAI,WAAUH,OAAO,GAAI,IAAGA,OAAQ,UAAS,GAAG,EAAG,GAAED,IAAI,GAAG,GAAG,GAAG,EAAG,EAAC;EAEpF,IAAIF,QAAQ,KAAK,uBAAuB,EAAE;IACxCA,QAAQ,GAAG,kBAAkB;EAC/B,CAAC,MAAM,IAAIA,QAAQ,KAAK,kBAAkB,EAAE;IAC1CA,QAAQ,GAAG,aAAa;EAC1B;EAEA,OAAO,MAAM,IAAI,CAACO,GAAG,CAACC,KAAK,CAACC,OAAO,CAACH,QAAQ,EAAE,MAAM,EAAE;IACpDI,KAAK,EAAEV,QAAQ;IACfW,KAAK,EAAEV;EACT,CAAC,CAAC;AACJ,CAAC;AAAC,eAIaH,QAAQ;AAAA"}
1
+ {"version":3,"file":"find.js","names":["_support","require","commands","exports","findElOrEls","strategy","selector","mult","context","util","unwrapElement","endpoint","wda","proxy","command","using","value","_default","default"],"sources":["../../../lib/commands/find.js"],"sourcesContent":["import { util } from 'appium/support';\n\n\nconst commands = {};\n\n// This is needed to make lookup by image working\ncommands.findElOrEls = async function findElOrEls (strategy, selector, mult, context) {\n context = util.unwrapElement(context);\n const endpoint = `/element${context ? `/${context}/element` : ''}${mult ? 's' : ''}`;\n\n if (strategy === '-ios predicate string') {\n strategy = 'predicate string';\n } else if (strategy === '-ios class chain') {\n strategy = 'class chain';\n }\n\n return await this.wda.proxy.command(endpoint, 'POST', {\n using: strategy,\n value: selector,\n });\n};\n\n\nexport { commands };\nexport default commands;\n"],"mappings":";;;;;;;AAAA,IAAAA,QAAA,GAAAC,OAAA;AAGA,MAAMC,QAAQ,GAAG,CAAC,CAAC;AAACC,OAAA,CAAAD,QAAA,GAAAA,QAAA;AAGpBA,QAAQ,CAACE,WAAW,GAAG,eAAeA,WAAWA,CAAEC,QAAQ,EAAEC,QAAQ,EAAEC,IAAI,EAAEC,OAAO,EAAE;EACpFA,OAAO,GAAGC,aAAI,CAACC,aAAa,CAACF,OAAO,CAAC;EACrC,MAAMG,QAAQ,GAAI,WAAUH,OAAO,GAAI,IAAGA,OAAQ,UAAS,GAAG,EAAG,GAAED,IAAI,GAAG,GAAG,GAAG,EAAG,EAAC;EAEpF,IAAIF,QAAQ,KAAK,uBAAuB,EAAE;IACxCA,QAAQ,GAAG,kBAAkB;EAC/B,CAAC,MAAM,IAAIA,QAAQ,KAAK,kBAAkB,EAAE;IAC1CA,QAAQ,GAAG,aAAa;EAC1B;EAEA,OAAO,MAAM,IAAI,CAACO,GAAG,CAACC,KAAK,CAACC,OAAO,CAACH,QAAQ,EAAE,MAAM,EAAE;IACpDI,KAAK,EAAEV,QAAQ;IACfW,KAAK,EAAEV;EACT,CAAC,CAAC;AACJ,CAAC;AAAC,IAAAW,QAAA,GAIaf,QAAQ;AAAAC,OAAA,CAAAe,OAAA,GAAAD,QAAA"}
@@ -287,4 +287,4 @@ commands.macosPressAndDragAndHold = async function macosPressAndDragAndHold(opts
287
287
  };
288
288
  var _default = commands;
289
289
  exports.default = _default;
290
- //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJjb21tYW5kcyIsImV4dHJhY3RVdWlkIiwib3B0aW9ucyIsImtleU5hbWVzIiwibmFtZSIsInJlc3VsdCIsInV0aWwiLCJ1bndyYXBFbGVtZW50IiwicmVxdWlyZVV1aWQiLCJlcnJvcnMiLCJJbnZhbGlkQXJndW1lbnRFcnJvciIsIm1hY29zU2V0VmFsdWUiLCJvcHRzIiwidXVpZCIsInZhbHVlIiwidGV4dCIsImtleU1vZGlmaWVyRmxhZ3MiLCJ3ZGEiLCJwcm94eSIsImNvbW1hbmQiLCJtYWNvc0NsaWNrIiwieCIsInkiLCJ1cmwiLCJtYWNvc1Njcm9sbCIsImRlbHRhWCIsImRlbHRhWSIsIm1hY29zU3dpcGUiLCJkaXJlY3Rpb24iLCJ2ZWxvY2l0eSIsIm1hY29zUmlnaHRDbGljayIsIm1hY29zSG92ZXIiLCJtYWNvc0RvdWJsZUNsaWNrIiwibWFjb3NDbGlja0FuZERyYWciLCJzb3VyY2VVdWlkIiwiZGVzdFV1aWQiLCJzdGFydFgiLCJzdGFydFkiLCJlbmRYIiwiZW5kWSIsImR1cmF0aW9uIiwiZGVzdCIsIndyYXBFbGVtZW50IiwibWFjb3NDbGlja0FuZERyYWdBbmRIb2xkIiwiaG9sZER1cmF0aW9uIiwibWFjb3NLZXlzIiwia2V5cyIsIm1hY29zUHJlc3NBbmRIb2xkIiwibWFjb3NUYXAiLCJtYWNvc0RvdWJsZVRhcCIsIm1hY29zUHJlc3NBbmREcmFnIiwibWFjb3NQcmVzc0FuZERyYWdBbmRIb2xkIl0sInNvdXJjZXMiOlsiLi4vLi4vLi4vbGliL2NvbW1hbmRzL2dlc3R1cmVzLmpzIl0sInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IHV0aWwgfSBmcm9tICdhcHBpdW0vc3VwcG9ydCc7XG5pbXBvcnQgeyBlcnJvcnMgfSBmcm9tICdhcHBpdW0vZHJpdmVyJztcblxuY29uc3QgY29tbWFuZHMgPSB7fTtcblxuZnVuY3Rpb24gZXh0cmFjdFV1aWQgKG9wdGlvbnMgPSB7fSwga2V5TmFtZXMgPSBbJ2VsZW1lbnRJZCcsICdlbGVtZW50J10pIHtcbiAgZm9yIChjb25zdCBuYW1lIG9mIGtleU5hbWVzKSB7XG4gICAgaWYgKG9wdGlvbnNbbmFtZV0pIHtcbiAgICAgIGNvbnN0IHJlc3VsdCA9IHV0aWwudW53cmFwRWxlbWVudChvcHRpb25zW25hbWVdKTtcbiAgICAgIGlmIChyZXN1bHQpIHtcbiAgICAgICAgcmV0dXJuIHJlc3VsdDtcbiAgICAgIH1cbiAgICB9XG4gIH1cbiAgcmV0dXJuIG51bGw7XG59XG5cbmZ1bmN0aW9uIHJlcXVpcmVVdWlkIChvcHRpb25zID0ge30sIGtleU5hbWVzID0gWydlbGVtZW50SWQnLCAnZWxlbWVudCddKSB7XG4gIGNvbnN0IHJlc3VsdCA9IGV4dHJhY3RVdWlkKG9wdGlvbnMsIGtleU5hbWVzKTtcbiAgaWYgKCFyZXN1bHQpIHtcbiAgICB0aHJvdyBuZXcgZXJyb3JzLkludmFsaWRBcmd1bWVudEVycm9yKGAke2tleU5hbWVzWzBdfSBmaWVsZCBpcyBtYW5kYXRvcnlgKTtcbiAgfVxuICByZXR1cm4gcmVzdWx0O1xufVxuXG5cbi8qKlxuICogQHR5cGVkZWYge09iamVjdH0gU2V0VmFsdWVPcHRpb25zXG4gKiBAcHJvcGVydHkgeyFzdHJpbmd9IGVsZW1lbnRJZCB1dWlkIG9mIHRoZSBlbGVtZW50IHRvIHNldCB2YWx1ZSBmb3JcbiAqIEBwcm9wZXJ0eSB7Kn0gdmFsdWUgdmFsdWUgdG8gc2V0LiBDb3VsZCBhbHNvIGJlIGFuIGFycmF5XG4gKiBAcHJvcGVydHkge3N0cmluZ30gdGV4dCB0ZXh0IHRvIHNldC4gSWYgYm90aCB2YWx1ZSBhbmQgdGV4dCBhcmUgc2V0XG4gKiB0aGVuIGB2YWx1ZWAgaXMgcHJlZmVycmVkXG4gKiBAcHJvcGVydHkgez9udW1iZXJ9IGtleU1vZGlmaWVyRmxhZ3MgaWYgc2V0IHRoZW4gdGhlIGdpdmVuIGtleSBtb2RpZmllcnMgd2lsbCBiZVxuICogYXBwbGllZCB3aGlsZSB0aGUgZWxlbWVudCB2YWx1ZSBpcyBiZWluZyBzZXQuIFNlZVxuICogaHR0cHM6Ly9kZXZlbG9wZXIuYXBwbGUuY29tL2RvY3VtZW50YXRpb24veGN0ZXN0L3hjdWlrZXltb2RpZmllcmZsYWdzXG4gKiBmb3IgbW9yZSBkZXRhaWxzXG4gKi9cblxuLyoqXG4gKiBTZXQgdmFsdWUgdG8gdGhlIGdpdmVuIGVsZW1lbnRcbiAqXG4gKiBAcGFyYW0ge1NldFZhbHVlT3B0aW9uc30gb3B0c1xuICovXG5jb21tYW5kcy5tYWNvc1NldFZhbHVlID0gYXN5bmMgZnVuY3Rpb24gbWFjb3NTZXRWYWx1ZSAob3B0cyA9IHt9KSB7XG4gIGNvbnN0IHV1aWQgPSByZXF1aXJlVXVpZChvcHRzKTtcbiAgY29uc3QgeyB2YWx1ZSwgdGV4dCwga2V5TW9kaWZpZXJGbGFncyB9ID0gb3B0cztcbiAgcmV0dXJuIGF3YWl0IHRoaXMud2RhLnByb3h5LmNvbW1hbmQoYC9lbGVtZW50LyR7dXVpZH0vdmFsdWVgLCAnUE9TVCcsIHtcbiAgICB2YWx1ZSwgdGV4dCxcbiAgICBrZXlNb2RpZmllckZsYWdzLFxuICB9KTtcbn07XG5cbi8qKlxuICogQHR5cGVkZWYge09iamVjdH0gQ2xpY2tPcHRpb25zXG4gKiBAcHJvcGVydHkgez9zdHJpbmd9IGVsZW1lbnRJZCB1dWlkIG9mIHRoZSBlbGVtZW50IHRvIGNsaWNrLiBFaXRoZXIgdGhpcyBwcm9wZXJ0eVxuICogb3IvYW5kIHggYW5kIHkgbXVzdCBiZSBzZXQuIElmIGJvdGggYXJlIHNldCB0aGVuIHggYW5kIHkgYXJlIGNvbnNpZGVyZWQgYXMgcmVsYXRpdmVcbiAqIGVsZW1lbnQgY29vcmRpbmF0ZXMuIElmIG9ubHkgeCBhbmQgeSBhcmUgc2V0IHRoZW4gdGhlc2UgYXJlIHBhcnNlZCBhc1xuICogYWJzb2x1dGUgY29vcmRpbmF0ZXMuXG4gKiBAcHJvcGVydHkgez9udW1iZXJ9IHggY2xpY2sgWCBjb29yZGluYXRlXG4gKiBAcHJvcGVydHkgez9udW1iZXJ9IHkgY2xpY2sgWSBjb29yZGluYXRlXG4gKiBAcHJvcGVydHkgez9udW1iZXJ9IGtleU1vZGlmaWVyRmxhZ3MgaWYgc2V0IHRoZW4gdGhlIGdpdmVuIGtleSBtb2RpZmllcnMgd2lsbCBiZVxuICogYXBwbGllZCB3aGlsZSBjbGljayBpcyBwZXJmb3JtZWQuIFNlZVxuICogaHR0cHM6Ly9kZXZlbG9wZXIuYXBwbGUuY29tL2RvY3VtZW50YXRpb24veGN0ZXN0L3hjdWlrZXltb2RpZmllcmZsYWdzXG4gKiBmb3IgbW9yZSBkZXRhaWxzXG4gKi9cblxuLyoqXG4gKiBQZXJmb3JtIGNsaWNrIGdlc3R1cmUgb24gYW4gZWxlbWVudCBvciBieSByZWxhdGl2ZS9hYnNvbHV0ZSBjb29yZGluYXRlc1xuICpcbiAqIEBwYXJhbSB7Q2xpY2tPcHRpb25zfSBvcHRzXG4gKi9cbmNvbW1hbmRzLm1hY29zQ2xpY2sgPSBhc3luYyBmdW5jdGlvbiBtYWNvc0NsaWNrIChvcHRzID0ge30pIHtcbiAgY29uc3QgdXVpZCA9IGV4dHJhY3RVdWlkKG9wdHMpO1xuICBjb25zdCB7IHgsIHksIGtleU1vZGlmaWVyRmxhZ3MgfSA9IG9wdHM7XG4gIGNvbnN0IHVybCA9IHV1aWQgPyBgL2VsZW1lbnQvJHt1dWlkfS9jbGlja2AgOiAnL3dkYS9jbGljayc7XG4gIHJldHVybiBhd2FpdCB0aGlzLndkYS5wcm94eS5jb21tYW5kKHVybCwgJ1BPU1QnLCB7XG4gICAgeCwgeSxcbiAgICBrZXlNb2RpZmllckZsYWdzLFxuICB9KTtcbn07XG5cbi8qKlxuICogQHR5cGVkZWYge09iamVjdH0gU2Nyb2xsT3B0aW9uc1xuICogQHByb3BlcnR5IHs/c3RyaW5nfSBlbGVtZW50SWQgdXVpZCBvZiB0aGUgZWxlbWVudCB0byBiZSBzY3JvbGxlZC4gRWl0aGVyIHRoaXMgcHJvcGVydHlcbiAqIG9yL2FuZCB4IGFuZCB5IG11c3QgYmUgc2V0LiBJZiBib3RoIGFyZSBzZXQgdGhlbiB4IGFuZCB5IGFyZSBjb25zaWRlcmVkIGFzIHJlbGF0aXZlXG4gKiBlbGVtZW50IGNvb3JkaW5hdGVzLiBJZiBvbmx5IHggYW5kIHkgYXJlIHNldCB0aGVuIHRoZXNlIGFyZSBwYXJzZWQgYXNcbiAqIGFic29sdXRlIGNvb3JkaW5hdGVzLlxuICogQHByb3BlcnR5IHs/bnVtYmVyfSB4IHNjcm9sbCBYIGNvb3JkaW5hdGVcbiAqIEBwcm9wZXJ0eSB7P251bWJlcn0geSBzY3JvbGwgWSBjb29yZGluYXRlXG4gKiBAcHJvcGVydHkgeyFudW1iZXJ9IGRlbHRhWCBob3Jpem9udGFsIGRlbHRhIGFzIGZsb2F0IG51bWJlclxuICogQHByb3BlcnR5IHshbnVtYmVyfSBkZWx0YVkgdmVydGljYWwgZGVsdGEgYXMgZmxvYXQgbnVtYmVyXG4gKiBAcHJvcGVydHkgez9udW1iZXJ9IGtleU1vZGlmaWVyRmxhZ3MgaWYgc2V0IHRoZW4gdGhlIGdpdmVuIGtleSBtb2RpZmllcnMgd2lsbCBiZVxuICogYXBwbGllZCB3aGlsZSBzY3JvbGwgaXMgcGVyZm9ybWVkLiBTZWVcbiAqIGh0dHBzOi8vZGV2ZWxvcGVyLmFwcGxlLmNvbS9kb2N1bWVudGF0aW9uL3hjdGVzdC94Y3Vpa2V5bW9kaWZpZXJmbGFnc1xuICogZm9yIG1vcmUgZGV0YWlsc1xuICovXG5cbi8qKlxuICogUGVyZm9ybSBzY3JvbGwgZ2VzdHVyZSBvbiBhbiBlbGVtZW50IG9yIGJ5IHJlbGF0aXZlL2Fic29sdXRlIGNvb3JkaW5hdGVzXG4gKlxuICogQHBhcmFtIHtTY3JvbGxPcHRpb25zfSBvcHRzXG4gKi9cbmNvbW1hbmRzLm1hY29zU2Nyb2xsID0gYXN5bmMgZnVuY3Rpb24gbWFjb3NTY3JvbGwgKG9wdHMgPSB7fSkge1xuICBjb25zdCB1dWlkID0gZXh0cmFjdFV1aWQob3B0cyk7XG4gIGNvbnN0IHtcbiAgICB4LCB5LFxuICAgIGRlbHRhWCwgZGVsdGFZLFxuICAgIGtleU1vZGlmaWVyRmxhZ3MsXG4gIH0gPSBvcHRzO1xuICBjb25zdCB1cmwgPSB1dWlkID8gYC93ZGEvZWxlbWVudC8ke3V1aWR9L3Njcm9sbGAgOiAnL3dkYS9zY3JvbGwnO1xuICByZXR1cm4gYXdhaXQgdGhpcy53ZGEucHJveHkuY29tbWFuZCh1cmwsICdQT1NUJywge1xuICAgIGRlbHRhWCwgZGVsdGFZLFxuICAgIHgsIHksXG4gICAga2V5TW9kaWZpZXJGbGFncyxcbiAgfSk7XG59O1xuXG4vKipcbiAqIEB0eXBlZGVmIHtPYmplY3R9IFN3aXBlT3B0aW9uc1xuICogQHByb3BlcnR5IHs/c3RyaW5nfSBlbGVtZW50SWQgdXVpZCBvZiB0aGUgZWxlbWVudCB0byBiZSBzd2lwZWQuIEVpdGhlciB0aGlzIHByb3BlcnR5XG4gKiBvci9hbmQgeCBhbmQgeSBtdXN0IGJlIHNldC4gSWYgYm90aCBhcmUgc2V0IHRoZW4geCBhbmQgeSBhcmUgY29uc2lkZXJlZCBhcyByZWxhdGl2ZVxuICogZWxlbWVudCBjb29yZGluYXRlcy4gSWYgb25seSB4IGFuZCB5IGFyZSBzZXQgdGhlbiB0aGVzZSBhcmUgcGFyc2VkIGFzXG4gKiBhYnNvbHV0ZSBjb29yZGluYXRlcy5cbiAqIEBwcm9wZXJ0eSB7P251bWJlcn0geCBzd2lwZSBYIGNvb3JkaW5hdGVcbiAqIEBwcm9wZXJ0eSB7P251bWJlcn0geSBzd2lwZSBZIGNvb3JkaW5hdGVcbiAqIEBwcm9wZXJ0eSB7IXN0cmluZ30gZGlyZWN0aW9uIGVpdGhlciAndXAnLCAnZG93bicsICdsZWZ0JyBvciAncmlnaHQnXG4gKiBAcHJvcGVydHkgez9udW1iZXJ9IHZlbG9jaXR5IFRoZSB2YWx1ZSBpcyBtZWFzdXJlZCBpbiBwaXhlbHMgcGVyIHNlY29uZCBhbmQgc2FtZVxuICogdmFsdWVzIGNvdWxkIGJlaGF2ZSBkaWZmZXJlbnRseSBvbiBkaWZmZXJlbnQgZGV2aWNlcyBkZXBlbmRpbmcgb24gdGhlaXIgZGlzcGxheVxuICogZGVuc2l0eS4gSGlnaGVyIHZhbHVlcyBtYWtlIHN3aXBlIGdlc3R1cmUgZmFzdGVyICh3aGljaCB1c3VhbGx5IHNjcm9sbHMgbGFyZ2VyXG4gKiBhcmVhcyBpZiB3ZSBhcHBseSBpdCB0byBhIGxpc3QpIGFuZCBsb3dlciB2YWx1ZXMgc2xvdyBpdCBkb3duLlxuICogT25seSB2YWx1ZXMgZ3JlYXRlciB0aGFuIHplcm8gaGF2ZSBlZmZlY3QuXG4gKiBAcHJvcGVydHkgez9udW1iZXJ9IGtleU1vZGlmaWVyRmxhZ3MgaWYgc2V0IHRoZW4gdGhlIGdpdmVuIGtleSBtb2RpZmllcnMgd2lsbCBiZVxuICogYXBwbGllZCB3aGlsZSBzY3JvbGwgaXMgcGVyZm9ybWVkLiBTZWVcbiAqIGh0dHBzOi8vZGV2ZWxvcGVyLmFwcGxlLmNvbS9kb2N1bWVudGF0aW9uL3hjdGVzdC94Y3Vpa2V5bW9kaWZpZXJmbGFnc1xuICogZm9yIG1vcmUgZGV0YWlsc1xuICovXG5cbi8qKlxuICogUGVyZm9ybSBzd2lwZSBnZXN0dXJlIG9uIGFuIGVsZW1lbnRcbiAqXG4gKiBAcGFyYW0ge1N3aXBlT3B0aW9uc30gb3B0c1xuICovXG5jb21tYW5kcy5tYWNvc1N3aXBlID0gYXN5bmMgZnVuY3Rpb24gbWFjb3NTd2lwZSAob3B0cyA9IHt9KSB7XG4gIGNvbnN0IHV1aWQgPSBleHRyYWN0VXVpZChvcHRzKTtcbiAgY29uc3Qge1xuICAgIHgsIHksXG4gICAgZGlyZWN0aW9uLFxuICAgIHZlbG9jaXR5LFxuICAgIGtleU1vZGlmaWVyRmxhZ3MsXG4gIH0gPSBvcHRzO1xuICBjb25zdCB1cmwgPSB1dWlkID8gYC93ZGEvZWxlbWVudC8ke3V1aWR9L3N3aXBlYCA6IGAvd2RhL3N3aXBlYDtcbiAgcmV0dXJuIGF3YWl0IHRoaXMud2RhLnByb3h5LmNvbW1hbmQodXJsLCAnUE9TVCcsIHtcbiAgICB4LCB5LFxuICAgIGRpcmVjdGlvbixcbiAgICB2ZWxvY2l0eSxcbiAgICBrZXlNb2RpZmllckZsYWdzLFxuICB9KTtcbn07XG5cbi8qKlxuICogQHR5cGVkZWYge09iamVjdH0gUmlnaHRDbGlja09wdGlvbnNcbiAqIEBwcm9wZXJ0eSB7P3N0cmluZ30gZWxlbWVudElkIHV1aWQgb2YgdGhlIGVsZW1lbnQgdG8gY2xpY2suIEVpdGhlciB0aGlzIHByb3BlcnR5XG4gKiBvci9hbmQgeCBhbmQgeSBtdXN0IGJlIHNldC4gSWYgYm90aCBhcmUgc2V0IHRoZW4geCBhbmQgeSBhcmUgY29uc2lkZXJlZCBhcyByZWxhdGl2ZVxuICogZWxlbWVudCBjb29yZGluYXRlcy4gSWYgb25seSB4IGFuZCB5IGFyZSBzZXQgdGhlbiB0aGVzZSBhcmUgcGFyc2VkIGFzXG4gKiBhYnNvbHV0ZSBjb29yZGluYXRlcy5cbiAqIEBwcm9wZXJ0eSB7P251bWJlcn0geCBjbGljayBYIGNvb3JkaW5hdGVcbiAqIEBwcm9wZXJ0eSB7P251bWJlcn0geSBjbGljayBZIGNvb3JkaW5hdGVcbiAqIEBwcm9wZXJ0eSB7P251bWJlcn0ga2V5TW9kaWZpZXJGbGFncyBpZiBzZXQgdGhlbiB0aGUgZ2l2ZW4ga2V5IG1vZGlmaWVycyB3aWxsIGJlXG4gKiBhcHBsaWVkIHdoaWxlIGNsaWNrIGlzIHBlcmZvcm1lZC4gU2VlXG4gKiBodHRwczovL2RldmVsb3Blci5hcHBsZS5jb20vZG9jdW1lbnRhdGlvbi94Y3Rlc3QveGN1aWtleW1vZGlmaWVyZmxhZ3NcbiAqIGZvciBtb3JlIGRldGFpbHNcbiAqL1xuXG4vKipcbiAqIFBlcmZvcm0gcmlnaHQgY2xpY2sgZ2VzdHVyZSBvbiBhbiBlbGVtZW50IG9yIGJ5IHJlbGF0aXZlL2Fic29sdXRlIGNvb3JkaW5hdGVzXG4gKlxuICogQHBhcmFtIHtSaWdodENsaWNrT3B0aW9uc30gb3B0c1xuICovXG5jb21tYW5kcy5tYWNvc1JpZ2h0Q2xpY2sgPSBhc3luYyBmdW5jdGlvbiBtYWNvc1JpZ2h0Q2xpY2sgKG9wdHMgPSB7fSkge1xuICBjb25zdCB1dWlkID0gZXh0cmFjdFV1aWQob3B0cyk7XG4gIGNvbnN0IHsgeCwgeSwga2V5TW9kaWZpZXJGbGFncyB9ID0gb3B0cztcbiAgY29uc3QgdXJsID0gdXVpZCA/IGAvd2RhL2VsZW1lbnQvJHt1dWlkfS9yaWdodENsaWNrYCA6ICcvd2RhL3JpZ2h0Q2xpY2snO1xuICByZXR1cm4gYXdhaXQgdGhpcy53ZGEucHJveHkuY29tbWFuZCh1cmwsICdQT1NUJywge1xuICAgIHgsIHksXG4gICAga2V5TW9kaWZpZXJGbGFncyxcbiAgfSk7XG59O1xuXG4vKipcbiAqIEB0eXBlZGVmIHtPYmplY3R9IEhvdmVyT3B0aW9uc1xuICogQHByb3BlcnR5IHs/c3RyaW5nfSBlbGVtZW50SWQgdXVpZCBvZiB0aGUgZWxlbWVudCB0byBob3Zlci4gRWl0aGVyIHRoaXMgcHJvcGVydHlcbiAqIG9yL2FuZCB4IGFuZCB5IG11c3QgYmUgc2V0LiBJZiBib3RoIGFyZSBzZXQgdGhlbiB4IGFuZCB5IGFyZSBjb25zaWRlcmVkIGFzIHJlbGF0aXZlXG4gKiBlbGVtZW50IGNvb3JkaW5hdGVzLiBJZiBvbmx5IHggYW5kIHkgYXJlIHNldCB0aGVuIHRoZXNlIGFyZSBwYXJzZWQgYXNcbiAqIGFic29sdXRlIGNvb3JkaW5hdGVzLlxuICogQHByb3BlcnR5IHs/bnVtYmVyfSB4IGNsaWNrIFggY29vcmRpbmF0ZVxuICogQHByb3BlcnR5IHs/bnVtYmVyfSB5IGNsaWNrIFkgY29vcmRpbmF0ZVxuICogQHByb3BlcnR5IHs/bnVtYmVyfSBrZXlNb2RpZmllckZsYWdzIGlmIHNldCB0aGVuIHRoZSBnaXZlbiBrZXkgbW9kaWZpZXJzIHdpbGwgYmVcbiAqIGFwcGxpZWQgd2hpbGUgaG92ZXIgaXMgcGVyZm9ybWVkLiBTZWVcbiAqIGh0dHBzOi8vZGV2ZWxvcGVyLmFwcGxlLmNvbS9kb2N1bWVudGF0aW9uL3hjdGVzdC94Y3Vpa2V5bW9kaWZpZXJmbGFnc1xuICogZm9yIG1vcmUgZGV0YWlsc1xuICovXG5cbi8qKlxuICogUGVyZm9ybSBob3ZlciBnZXN0dXJlIG9uIGFuIGVsZW1lbnQgb3IgYnkgcmVsYXRpdmUvYWJzb2x1dGUgY29vcmRpbmF0ZXNcbiAqXG4gKiBAcGFyYW0ge0hvdmVyT3B0aW9uc30gb3B0c1xuICovXG5jb21tYW5kcy5tYWNvc0hvdmVyID0gYXN5bmMgZnVuY3Rpb24gbWFjb3NIb3ZlciAob3B0cyA9IHt9KSB7XG4gIGNvbnN0IHV1aWQgPSBleHRyYWN0VXVpZChvcHRzKTtcbiAgY29uc3QgeyB4LCB5LCBrZXlNb2RpZmllckZsYWdzIH0gPSBvcHRzO1xuICBjb25zdCB1cmwgPSB1dWlkID8gYC93ZGEvZWxlbWVudC8ke3V1aWR9L2hvdmVyYCA6ICcvd2RhL2hvdmVyJztcbiAgcmV0dXJuIGF3YWl0IHRoaXMud2RhLnByb3h5LmNvbW1hbmQodXJsLCAnUE9TVCcsIHtcbiAgICB4LCB5LFxuICAgIGtleU1vZGlmaWVyRmxhZ3MsXG4gIH0pO1xufTtcblxuLyoqXG4gKiBAdHlwZWRlZiB7T2JqZWN0fSBEb3VibGVDbGlja09wdGlvbnNcbiAqIEBwcm9wZXJ0eSB7P3N0cmluZ30gZWxlbWVudElkIHV1aWQgb2YgdGhlIGVsZW1lbnQgdG8gZG91YmxlIGNsaWNrLiBFaXRoZXIgdGhpcyBwcm9wZXJ0eVxuICogb3IvYW5kIHggYW5kIHkgbXVzdCBiZSBzZXQuIElmIGJvdGggYXJlIHNldCB0aGVuIHggYW5kIHkgYXJlIGNvbnNpZGVyZWQgYXMgcmVsYXRpdmVcbiAqIGVsZW1lbnQgY29vcmRpbmF0ZXMuIElmIG9ubHkgeCBhbmQgeSBhcmUgc2V0IHRoZW4gdGhlc2UgYXJlIHBhcnNlZCBhc1xuICogYWJzb2x1dGUgY29vcmRpbmF0ZXMuXG4gKiBAcHJvcGVydHkgez9udW1iZXJ9IHggY2xpY2sgWCBjb29yZGluYXRlXG4gKiBAcHJvcGVydHkgez9udW1iZXJ9IHkgY2xpY2sgWSBjb29yZGluYXRlXG4gKiBAcHJvcGVydHkgez9udW1iZXJ9IGtleU1vZGlmaWVyRmxhZ3MgaWYgc2V0IHRoZW4gdGhlIGdpdmVuIGtleSBtb2RpZmllcnMgd2lsbCBiZVxuICogYXBwbGllZCB3aGlsZSBkb3VibGUgY2xpY2sgaXMgcGVyZm9ybWVkLiBTZWVcbiAqIGh0dHBzOi8vZGV2ZWxvcGVyLmFwcGxlLmNvbS9kb2N1bWVudGF0aW9uL3hjdGVzdC94Y3Vpa2V5bW9kaWZpZXJmbGFnc1xuICogZm9yIG1vcmUgZGV0YWlsc1xuICovXG5cbi8qKlxuICogUGVyZm9ybSBkb3VibGUgY2xpY2sgZ2VzdHVyZSBvbiBhbiBlbGVtZW50IG9yIGJ5IHJlbGF0aXZlL2Fic29sdXRlIGNvb3JkaW5hdGVzXG4gKlxuICogQHBhcmFtIHtEb3VibGVDbGlja09wdGlvbnN9IG9wdHNcbiAqL1xuY29tbWFuZHMubWFjb3NEb3VibGVDbGljayA9IGFzeW5jIGZ1bmN0aW9uIG1hY29zRG91YmxlQ2xpY2sgKG9wdHMgPSB7fSkge1xuICBjb25zdCB1dWlkID0gZXh0cmFjdFV1aWQob3B0cyk7XG4gIGNvbnN0IHsgeCwgeSwga2V5TW9kaWZpZXJGbGFncyB9ID0gb3B0cztcbiAgY29uc3QgdXJsID0gdXVpZCA/IGAvd2RhL2VsZW1lbnQvJHt1dWlkfS9kb3VibGVDbGlja2AgOiAnL3dkYS9kb3VibGVDbGljayc7XG4gIHJldHVybiBhd2FpdCB0aGlzLndkYS5wcm94eS5jb21tYW5kKHVybCwgJ1BPU1QnLCB7XG4gICAgeCwgeSxcbiAgICBrZXlNb2RpZmllckZsYWdzLFxuICB9KTtcbn07XG5cbi8qKlxuICogQHR5cGVkZWYge09iamVjdH0gQ2xpY2tBbmREcmFnT3B0aW9uc1xuICogQHByb3BlcnR5IHs/c3RyaW5nfSBzb3VyY2VFbGVtZW50SWQgdXVpZCBvZiB0aGUgZWxlbWVudCB0byBzdGFydCB0aGUgZHJhZyBmcm9tLiBFaXRoZXIgdGhpcyBwcm9wZXJ0eVxuICogYW5kIGBkZXN0aW5hdGlvbkVsZW1lbnRgIG11c3QgYmUgcHJvdmlkZWQgb3IgYHN0YXJ0WGAsIGBzdGFydFlgLCBgZW5kWGAsIGBlbmRZYCBjb29yZGluYXRlc1xuICogbXVzdCBiZSBzZXQuXG4gKiBAcHJvcGVydHkgez9zdHJpbmd9IGRlc3RpbmF0aW9uRWxlbWVudElkIHV1aWQgb2YgdGhlIGVsZW1lbnQgdG8gZW5kIHRoZSBkcmFnIG9uLiBFaXRoZXIgdGhpcyBwcm9wZXJ0eVxuICogYW5kIGBzb3VyY2VFbGVtZW50YCBtdXN0IGJlIHByb3ZpZGVkIG9yIGBzdGFydFhgLCBgc3RhcnRZYCwgYGVuZFhgLCBgZW5kWWAgY29vcmRpbmF0ZXNcbiAqIG11c3QgYmUgc2V0LlxuICogQHByb3BlcnR5IHs/bnVtYmVyfSBzdGFydFggc3RhcnRpbmcgWCBjb29yZGluYXRlXG4gKiBAcHJvcGVydHkgez9udW1iZXJ9IHN0YXJ0WSBzdGFydGluZyBZIGNvb3JkaW5hdGVcbiAqIEBwcm9wZXJ0eSB7P251bWJlcn0gZW5kWCBlbmRpbmcgWCBjb29yZGluYXRlXG4gKiBAcHJvcGVydHkgez9udW1iZXJ9IGVuZFkgZW5kaW5nIFkgY29vcmRpbmF0ZVxuICogQHByb3BlcnR5IHshbnVtYmVyfSBkdXJhdGlvbiBsb25nIGNsaWNrIGR1cmF0aW9uIGluIGZsb2F0IHNlY29uZHNcbiAqIEBwcm9wZXJ0eSB7P251bWJlcn0ga2V5TW9kaWZpZXJGbGFncyBpZiBzZXQgdGhlbiB0aGUgZ2l2ZW4ga2V5IG1vZGlmaWVycyB3aWxsIGJlXG4gKiBhcHBsaWVkIHdoaWxlIGRyYWcgaXMgcGVyZm9ybWVkLiBTZWVcbiAqIGh0dHBzOi8vZGV2ZWxvcGVyLmFwcGxlLmNvbS9kb2N1bWVudGF0aW9uL3hjdGVzdC94Y3Vpa2V5bW9kaWZpZXJmbGFnc1xuICogZm9yIG1vcmUgZGV0YWlsc1xuICovXG5cbi8qKlxuICogUGVyZm9ybSBsb25nIGNsaWNrIGFuZCBkcmFnIGdlc3R1cmUgb24gYW4gZWxlbWVudCBvciBieSBhYnNvbHV0ZSBjb29yZGluYXRlc1xuICpcbiAqIEBwYXJhbSB7Q2xpY2tBbmREcmFnT3B0aW9uc30gb3B0c1xuICovXG5jb21tYW5kcy5tYWNvc0NsaWNrQW5kRHJhZyA9IGFzeW5jIGZ1bmN0aW9uIG1hY29zQ2xpY2tBbmREcmFnIChvcHRzID0ge30pIHtcbiAgY29uc3Qgc291cmNlVXVpZCA9IGV4dHJhY3RVdWlkKG9wdHMsIFsnc291cmNlRWxlbWVudElkJywgJ3NvdXJjZUVsZW1lbnQnXSk7XG4gIGNvbnN0IGRlc3RVdWlkID0gZXh0cmFjdFV1aWQob3B0cywgWydkZXN0aW5hdGlvbkVsZW1lbnRJZCcsICdkZXN0aW5hdGlvbkVsZW1lbnQnXSk7XG4gIGNvbnN0IHtcbiAgICBzdGFydFgsIHN0YXJ0WSxcbiAgICBlbmRYLCBlbmRZLFxuICAgIGR1cmF0aW9uLFxuICAgIGtleU1vZGlmaWVyRmxhZ3NcbiAgfSA9IG9wdHM7XG4gIGNvbnN0IHVybCA9IHNvdXJjZVV1aWQgJiYgZGVzdFV1aWRcbiAgICA/IGAvd2RhL2VsZW1lbnQvJHtzb3VyY2VVdWlkfS9jbGlja0FuZERyYWdgXG4gICAgOiAnL3dkYS9jbGlja0FuZERyYWcnO1xuICBjb25zdCBkZXN0ID0gZGVzdFV1aWQgJiYgdXRpbC53cmFwRWxlbWVudChkZXN0VXVpZCk7XG4gIHJldHVybiBhd2FpdCB0aGlzLndkYS5wcm94eS5jb21tYW5kKHVybCwgJ1BPU1QnLCB7XG4gICAgc3RhcnRYLCBzdGFydFksXG4gICAgZW5kWCwgZW5kWSxcbiAgICBkdXJhdGlvbixcbiAgICBkZXN0LFxuICAgIGtleU1vZGlmaWVyRmxhZ3MsXG4gIH0pO1xufTtcblxuLyoqXG4gKiBAdHlwZWRlZiB7T2JqZWN0fSBDbGlja0FuZERyYWdBbmRIb2xkT3B0aW9uc1xuICogQHByb3BlcnR5IHs/c3RyaW5nfSBzb3VyY2VFbGVtZW50SWQgdXVpZCBvZiB0aGUgZWxlbWVudCB0byBzdGFydCB0aGUgZHJhZyBmcm9tLiBFaXRoZXIgdGhpcyBwcm9wZXJ0eVxuICogYW5kIGBkZXN0aW5hdGlvbkVsZW1lbnRgIG11c3QgYmUgcHJvdmlkZWQgb3IgYHN0YXJ0WGAsIGBzdGFydFlgLCBgZW5kWGAsIGBlbmRZYCBjb29yZGluYXRlc1xuICogbXVzdCBiZSBzZXQuXG4gKiBAcHJvcGVydHkgez9zdHJpbmd9IGRlc3RpbmF0aW9uRWxlbWVudElkIHV1aWQgb2YgdGhlIGVsZW1lbnQgdG8gZW5kIHRoZSBkcmFnIG9uLiBFaXRoZXIgdGhpcyBwcm9wZXJ0eVxuICogYW5kIGBzb3VyY2VFbGVtZW50YCBtdXN0IGJlIHByb3ZpZGVkIG9yIGBzdGFydFhgLCBgc3RhcnRZYCwgYGVuZFhgLCBgZW5kWWAgY29vcmRpbmF0ZXNcbiAqIG11c3QgYmUgc2V0LlxuICogQHByb3BlcnR5IHs/bnVtYmVyfSBzdGFydFggc3RhcnRpbmcgWCBjb29yZGluYXRlXG4gKiBAcHJvcGVydHkgez9udW1iZXJ9IHN0YXJ0WSBzdGFydGluZyBZIGNvb3JkaW5hdGVcbiAqIEBwcm9wZXJ0eSB7P251bWJlcn0gZW5kWCBlbmRpbmcgWCBjb29yZGluYXRlXG4gKiBAcHJvcGVydHkgez9udW1iZXJ9IGVuZFkgZW5kaW5nIFkgY29vcmRpbmF0ZVxuICogQHByb3BlcnR5IHshbnVtYmVyfSBkdXJhdGlvbiBsb25nIGNsaWNrIGR1cmF0aW9uIGluIGZsb2F0IHNlY29uZHNcbiAqIEBwcm9wZXJ0eSB7P251bWJlcn0gdmVsb2NpdHkgZHJhZ2dpbmcgdmVsb2NpdHkgaW4gcGl4ZWxzIHBlciBzZWNvbmQuXG4gKiBJZiBub3QgcHJvdmlkZWQgdGhlbiB0aGUgZGVmYXVsdCB2ZWxvY2l0eSBpcyB1c2VkLiBTZWVcbiAqIGh0dHBzOi8vZGV2ZWxvcGVyLmFwcGxlLmNvbS9kb2N1bWVudGF0aW9uL3hjdGVzdC94Y3VpZ2VzdHVyZXZlbG9jaXR5XG4gKiBmb3IgbW9yZSBkZXRhaWxzXG4gKiBAcHJvcGVydHkgez9udW1iZXJ9IGtleU1vZGlmaWVyRmxhZ3MgaWYgc2V0IHRoZW4gdGhlIGdpdmVuIGtleSBtb2RpZmllcnMgd2lsbCBiZVxuICogYXBwbGllZCB3aGlsZSBkcmFnIGlzIHBlcmZvcm1lZC4gU2VlXG4gKiBodHRwczovL2RldmVsb3Blci5hcHBsZS5jb20vZG9jdW1lbnRhdGlvbi94Y3Rlc3QveGN1aWtleW1vZGlmaWVyZmxhZ3NcbiAqIGZvciBtb3JlIGRldGFpbHNcbiAqL1xuXG4vKipcbiAqIFBlcmZvcm0gbG9uZyBjbGljaywgZHJhZyBhbmQgaG9sZCBnZXN0dXJlIG9uIGFuIGVsZW1lbnQgb3IgYnkgYWJzb2x1dGUgY29vcmRpbmF0ZXNcbiAqXG4gKiBAcGFyYW0ge0NsaWNrQW5kRHJhZ0FuZEhvbGRPcHRpb25zfSBvcHRzXG4gKi9cbmNvbW1hbmRzLm1hY29zQ2xpY2tBbmREcmFnQW5kSG9sZCA9IGFzeW5jIGZ1bmN0aW9uIG1hY29zQ2xpY2tBbmREcmFnQW5kSG9sZCAob3B0cyA9IHt9KSB7XG4gIGNvbnN0IHNvdXJjZVV1aWQgPSBleHRyYWN0VXVpZChvcHRzLCBbJ3NvdXJjZUVsZW1lbnRJZCcsICdzb3VyY2VFbGVtZW50J10pO1xuICBjb25zdCBkZXN0VXVpZCA9IGV4dHJhY3RVdWlkKG9wdHMsIFsnZGVzdGluYXRpb25FbGVtZW50SWQnLCAnZGVzdGluYXRpb25FbGVtZW50J10pO1xuICBjb25zdCB7XG4gICAgc3RhcnRYLCBzdGFydFksXG4gICAgZW5kWCwgZW5kWSxcbiAgICBkdXJhdGlvbiwgaG9sZER1cmF0aW9uLFxuICAgIHZlbG9jaXR5LFxuICAgIGtleU1vZGlmaWVyRmxhZ3NcbiAgfSA9IG9wdHM7XG4gIGNvbnN0IHVybCA9IHNvdXJjZVV1aWQgJiYgZGVzdFV1aWRcbiAgICA/IGAvd2RhL2VsZW1lbnQvJHtzb3VyY2VVdWlkfS9jbGlja0FuZERyYWdBbmRIb2xkYFxuICAgIDogJy93ZGEvY2xpY2tBbmREcmFnQW5kSG9sZCc7XG4gIGNvbnN0IGRlc3QgPSBkZXN0VXVpZCAmJiB1dGlsLndyYXBFbGVtZW50KGRlc3RVdWlkKTtcbiAgcmV0dXJuIGF3YWl0IHRoaXMud2RhLnByb3h5LmNvbW1hbmQodXJsLCAnUE9TVCcsIHtcbiAgICBzdGFydFgsIHN0YXJ0WSxcbiAgICBlbmRYLCBlbmRZLFxuICAgIGR1cmF0aW9uLCBob2xkRHVyYXRpb24sXG4gICAgdmVsb2NpdHksXG4gICAgZGVzdCxcbiAgICBrZXlNb2RpZmllckZsYWdzLFxuICB9KTtcbn07XG5cbi8qKlxuICogQHR5cGVkZWYge09iamVjdH0gS2V5T3B0aW9uc1xuICogQHByb3BlcnR5IHshc3RyaW5nfSBrZXkgYSBzdHJpbmcsIHRoYXQgcmVwcmVzZW50cyBhIGtleSB0byB0eXBlIChzZWVcbiAqIGh0dHBzOi8vZGV2ZWxvcGVyLmFwcGxlLmNvbS9kb2N1bWVudGF0aW9uL3hjdGVzdC94Y3VpZWxlbWVudC8xNTAwNjA0LXR5cGVrZXk/bGFuZ3VhZ2U9b2JqY1xuICogYW5kIGh0dHBzOi8vZGV2ZWxvcGVyLmFwcGxlLmNvbS9kb2N1bWVudGF0aW9uL3hjdGVzdC94Y3Vpa2V5Ym9hcmRrZXk/bGFuZ3VhZ2U9b2JqYylcbiAqIEBwcm9wZXJ0eSB7P251bWJlcn0gbW9kaWZpZXJGbGFncyBhIHNldCBvZiBtb2RpZmllciBmbGFnc1xuICogKGh0dHBzOi8vZGV2ZWxvcGVyLmFwcGxlLmNvbS9kb2N1bWVudGF0aW9uL3hjdGVzdC94Y3Vpa2V5bW9kaWZpZXJmbGFncz9sYW5ndWFnZT1vYmpjKVxuICogdG8gdXNlIHdoZW4gdHlwaW5nIHRoZSBrZXkuXG4gKi9cblxuLyoqXG4gKiBAdHlwZWRlZiB7T2JqZWN0fSBLZXlzT3B0aW9uc1xuICogQHByb3BlcnR5IHs/c3RyaW5nfSBlbGVtZW50SWQgdXVpZCBvZiB0aGUgZWxlbWVudCB0byBzZW5kIGtleXMgdG8uXG4gKiBJZiB0aGUgZWxlbWVudCBpcyBub3QgcHJvdmlkZWQgdGhlbiB0aGUga2V5cyB3aWxsIGJlIHNlbnQgdG8gdGhlIGN1cnJlbnQgYXBwbGljYXRpb24uXG4gKiBAcHJvcGVydHkgeyFBcnJheTxLZXlPcHRpb25zfHN0cmluZz59IGtleXMgQXJyYXkgb2Yga2V5cyB0byB0eXBlLlxuICogRWFjaCBpdGVtIGNvdWxkIGVpdGhlciBiZSBhIHN0cmluZywgdGhhdCByZXByZXNlbnRzIGEga2V5IGl0c2VsZiAoc2VlXG4gKiBodHRwczovL2RldmVsb3Blci5hcHBsZS5jb20vZG9jdW1lbnRhdGlvbi94Y3Rlc3QveGN1aWVsZW1lbnQvMTUwMDYwNC10eXBla2V5P2xhbmd1YWdlPW9iamNcbiAqIGFuZCBodHRwczovL2RldmVsb3Blci5hcHBsZS5jb20vZG9jdW1lbnRhdGlvbi94Y3Rlc3QveGN1aWtleWJvYXJka2V5P2xhbmd1YWdlPW9iamMpXG4gKiBvciBhIGRpY3Rpb25hcnksIGlmIHRoZSBrZXkgc2hvdWxkIGFsc28gYmUgZW50ZXJlZCB3aXRoIG1vZGlmaWVycy5cbiAqL1xuXG4vKipcbiAqIFNlbmQga2V5cyB0byB0aGUgZ2l2ZW4gZWxlbWVudCBvciB0byB0aGUgYXBwbGljYXRpb24gdW5kZXIgdGVzdFxuICpcbiAqIEBwYXJhbSB7S2V5c09wdGlvbnN9IG9wdHNcbiAqL1xuY29tbWFuZHMubWFjb3NLZXlzID0gYXN5bmMgZnVuY3Rpb24gbWFjb3NLZXlzIChvcHRzID0ge30pIHtcbiAgY29uc3QgdXVpZCA9IGV4dHJhY3RVdWlkKG9wdHMpO1xuICBjb25zdCB7IGtleXMgfSA9IG9wdHM7XG4gIGNvbnN0IHVybCA9IHV1aWQgPyBgL3dkYS9lbGVtZW50LyR7dXVpZH0va2V5c2AgOiAnL3dkYS9rZXlzJztcbiAgcmV0dXJuIGF3YWl0IHRoaXMud2RhLnByb3h5LmNvbW1hbmQodXJsLCAnUE9TVCcsIHsga2V5cyB9KTtcbn07XG5cbi8qKlxuICogQHR5cGVkZWYge09iamVjdH0gUHJlc3NPcHRpb25zXG4gKiBAcHJvcGVydHkgez9zdHJpbmd9IGVsZW1lbnRJZCB1dWlkIG9mIHRoZSBUb3VjaCBCYXIgZWxlbWVudCB0byBiZSBwcmVzc2VkLiBFaXRoZXIgdGhpcyBwcm9wZXJ0eVxuICogb3IvYW5kIHggYW5kIHkgbXVzdCBiZSBzZXQuIElmIGJvdGggYXJlIHNldCB0aGVuIHggYW5kIHkgYXJlIGNvbnNpZGVyZWQgYXMgcmVsYXRpdmVcbiAqIGVsZW1lbnQgY29vcmRpbmF0ZXMuIElmIG9ubHkgeCBhbmQgeSBhcmUgc2V0IHRoZW4gdGhlc2UgYXJlIHBhcnNlZCBhc1xuICogYWJzb2x1dGUgVG91Y2ggQmFyIGNvb3JkaW5hdGVzLlxuICogQHByb3BlcnR5IHs/bnVtYmVyfSB4IGxvbmcgY2xpY2sgWCBjb29yZGluYXRlXG4gKiBAcHJvcGVydHkgez9udW1iZXJ9IHkgbG9uZyBjbGljayBZIGNvb3JkaW5hdGVcbiAqIEBwcm9wZXJ0eSB7IW51bWJlcn0gZHVyYXRpb24gdGhlIG51bWJlciBvZiBmbG9hdCBzZWNvbmRzIHRvIGhvbGQgdGhlIG1vdXNlIGJ1dHRvblxuICogQHByb3BlcnR5IHs/bnVtYmVyfSBrZXlNb2RpZmllckZsYWdzIGlmIHNldCB0aGVuIHRoZSBnaXZlbiBrZXkgbW9kaWZpZXJzIHdpbGwgYmVcbiAqIGFwcGxpZWQgd2hpbGUgY2xpY2sgaXMgcGVyZm9ybWVkLiBTZWVcbiAqIGh0dHBzOi8vZGV2ZWxvcGVyLmFwcGxlLmNvbS9kb2N1bWVudGF0aW9uL3hjdGVzdC94Y3Vpa2V5bW9kaWZpZXJmbGFnc1xuICogZm9yIG1vcmUgZGV0YWlsc1xuICovXG5cbi8qKlxuICogUGVyZm9ybSBwcmVzcyBnZXN0dXJlIG9uIGEgVG91Y2ggQmFyIGVsZW1lbnQgb3IgYnkgcmVsYXRpdmUvYWJzb2x1dGUgY29vcmRpbmF0ZXNcbiAqXG4gKiBAcGFyYW0ge1ByZXNzT3B0aW9uc30gb3B0c1xuICovXG5jb21tYW5kcy5tYWNvc1ByZXNzQW5kSG9sZCA9IGFzeW5jIGZ1bmN0aW9uIG1hY29zUHJlc3NBbmRIb2xkIChvcHRzID0ge30pIHtcbiAgY29uc3QgdXVpZCA9IGV4dHJhY3RVdWlkKG9wdHMpO1xuICBjb25zdCB7IHgsIHksIGR1cmF0aW9uLCBrZXlNb2RpZmllckZsYWdzIH0gPSBvcHRzO1xuICBjb25zdCB1cmwgPSB1dWlkID8gYC93ZGEvZWxlbWVudC8ke3V1aWR9L3ByZXNzYCA6ICcvd2RhL3ByZXNzJztcbiAgcmV0dXJuIGF3YWl0IHRoaXMud2RhLnByb3h5LmNvbW1hbmQodXJsLCAnUE9TVCcsIHtcbiAgICB4LCB5LFxuICAgIGR1cmF0aW9uLFxuICAgIGtleU1vZGlmaWVyRmxhZ3MsXG4gIH0pO1xufTtcblxuLyoqXG4gKiBAdHlwZWRlZiB7T2JqZWN0fSBUYXBPcHRpb25zXG4gKiBAcHJvcGVydHkgez9zdHJpbmd9IGVsZW1lbnRJZCB1dWlkIG9mIHRoZSBUb3VjaCBCYXIgZWxlbWVudCB0byB0YXAuIEVpdGhlciB0aGlzIHByb3BlcnR5XG4gKiBvci9hbmQgeCBhbmQgeSBtdXN0IGJlIHNldC4gSWYgYm90aCBhcmUgc2V0IHRoZW4geCBhbmQgeSBhcmUgY29uc2lkZXJlZCBhcyByZWxhdGl2ZVxuICogZWxlbWVudCBjb29yZGluYXRlcy4gSWYgb25seSB4IGFuZCB5IGFyZSBzZXQgdGhlbiB0aGVzZSBhcmUgcGFyc2VkIGFzXG4gKiBhYnNvbHV0ZSBUb3VjaCBCYXIgY29vcmRpbmF0ZXMuXG4gKiBAcHJvcGVydHkgez9udW1iZXJ9IHggY2xpY2sgWCBjb29yZGluYXRlXG4gKiBAcHJvcGVydHkgez9udW1iZXJ9IHkgY2xpY2sgWSBjb29yZGluYXRlXG4gKiBAcHJvcGVydHkgez9udW1iZXJ9IGtleU1vZGlmaWVyRmxhZ3MgaWYgc2V0IHRoZW4gdGhlIGdpdmVuIGtleSBtb2RpZmllcnMgd2lsbCBiZVxuICogYXBwbGllZCB3aGlsZSBjbGljayBpcyBwZXJmb3JtZWQuIFNlZVxuICogaHR0cHM6Ly9kZXZlbG9wZXIuYXBwbGUuY29tL2RvY3VtZW50YXRpb24veGN0ZXN0L3hjdWlrZXltb2RpZmllcmZsYWdzXG4gKiBmb3IgbW9yZSBkZXRhaWxzXG4gKi9cblxuLyoqXG4gKiBQZXJmb3JtIHRhcCBnZXN0dXJlIG9uIGEgVG91Y2ggQmFyIGVsZW1lbnQgb3IgYnkgcmVsYXRpdmUvYWJzb2x1dGUgY29vcmRpbmF0ZXNcbiAqXG4gKiBAcGFyYW0ge1RhcE9wdGlvbnN9IG9wdHNcbiAqL1xuY29tbWFuZHMubWFjb3NUYXAgPSBhc3luYyBmdW5jdGlvbiBtYWNvc1RhcCAob3B0cyA9IHt9KSB7XG4gIGNvbnN0IHV1aWQgPSBleHRyYWN0VXVpZChvcHRzKTtcbiAgY29uc3QgeyB4LCB5LCBrZXlNb2RpZmllckZsYWdzIH0gPSBvcHRzO1xuICBjb25zdCB1cmwgPSB1dWlkID8gYC93ZGEvZWxlbWVudC8ke3V1aWR9L3RhcGAgOiAnL3dkYS90YXAnO1xuICByZXR1cm4gYXdhaXQgdGhpcy53ZGEucHJveHkuY29tbWFuZCh1cmwsICdQT1NUJywge1xuICAgIHgsIHksXG4gICAga2V5TW9kaWZpZXJGbGFncyxcbiAgfSk7XG59O1xuXG4vKipcbiAqIEB0eXBlZGVmIHtPYmplY3R9IERvdWJsZVRhcE9wdGlvbnNcbiAqIEBwcm9wZXJ0eSB7P3N0cmluZ30gZWxlbWVudElkIHV1aWQgb2YgdGhlIFRvdWNoIEJhciBlbGVtZW50IHRvIHRhcC4gRWl0aGVyIHRoaXMgcHJvcGVydHlcbiAqIG9yL2FuZCB4IGFuZCB5IG11c3QgYmUgc2V0LiBJZiBib3RoIGFyZSBzZXQgdGhlbiB4IGFuZCB5IGFyZSBjb25zaWRlcmVkIGFzIHJlbGF0aXZlXG4gKiBlbGVtZW50IGNvb3JkaW5hdGVzLiBJZiBvbmx5IHggYW5kIHkgYXJlIHNldCB0aGVuIHRoZXNlIGFyZSBwYXJzZWQgYXNcbiAqIGFic29sdXRlIFRvdWNoIEJhciBjb29yZGluYXRlcy5cbiAqIEBwcm9wZXJ0eSB7P251bWJlcn0geCBjbGljayBYIGNvb3JkaW5hdGVcbiAqIEBwcm9wZXJ0eSB7P251bWJlcn0geSBjbGljayBZIGNvb3JkaW5hdGVcbiAqIEBwcm9wZXJ0eSB7P251bWJlcn0ga2V5TW9kaWZpZXJGbGFncyBpZiBzZXQgdGhlbiB0aGUgZ2l2ZW4ga2V5IG1vZGlmaWVycyB3aWxsIGJlXG4gKiBhcHBsaWVkIHdoaWxlIGNsaWNrIGlzIHBlcmZvcm1lZC4gU2VlXG4gKiBodHRwczovL2RldmVsb3Blci5hcHBsZS5jb20vZG9jdW1lbnRhdGlvbi94Y3Rlc3QveGN1aWtleW1vZGlmaWVyZmxhZ3NcbiAqIGZvciBtb3JlIGRldGFpbHNcbiAqL1xuXG4vKipcbiAqIFBlcmZvcm0gdGFwIGdlc3R1cmUgb24gYSBUb3VjaCBCYXIgZWxlbWVudCBvciBieSByZWxhdGl2ZS9hYnNvbHV0ZSBjb29yZGluYXRlc1xuICpcbiAqIEBwYXJhbSB7RG91YmxlVGFwT3B0aW9uc30gb3B0c1xuICovXG5jb21tYW5kcy5tYWNvc0RvdWJsZVRhcCA9IGFzeW5jIGZ1bmN0aW9uIG1hY29zRG91YmxlVGFwIChvcHRzID0ge30pIHtcbiAgY29uc3QgdXVpZCA9IGV4dHJhY3RVdWlkKG9wdHMpO1xuICBjb25zdCB7IHgsIHksIGtleU1vZGlmaWVyRmxhZ3MgfSA9IG9wdHM7XG4gIGNvbnN0IHVybCA9IHV1aWQgPyBgL3dkYS9lbGVtZW50LyR7dXVpZH0vZG91YmxlVGFwYCA6ICcvd2RhL2RvdWJsZVRhcCc7XG4gIHJldHVybiBhd2FpdCB0aGlzLndkYS5wcm94eS5jb21tYW5kKHVybCwgJ1BPU1QnLCB7XG4gICAgeCwgeSxcbiAgICBrZXlNb2RpZmllckZsYWdzLFxuICB9KTtcbn07XG5cbi8qKlxuICogQHR5cGVkZWYge09iamVjdH0gUHJlc3NBbmREcmFnT3B0aW9uc1xuICogQHByb3BlcnR5IHs/c3RyaW5nfSBzb3VyY2VFbGVtZW50SWQgdXVpZCBvZiBhIFRvdWNoIEJhciBlbGVtZW50IHRvIHN0YXJ0IHRoZSBkcmFnIGZyb20uIEVpdGhlciB0aGlzIHByb3BlcnR5XG4gKiBhbmQgYGRlc3RpbmF0aW9uRWxlbWVudGAgbXVzdCBiZSBwcm92aWRlZCBvciBgc3RhcnRYYCwgYHN0YXJ0WWAsIGBlbmRYYCwgYGVuZFlgIGNvb3JkaW5hdGVzXG4gKiBtdXN0IGJlIHNldC5cbiAqIEBwcm9wZXJ0eSB7P3N0cmluZ30gZGVzdGluYXRpb25FbGVtZW50SWQgdXVpZCBvZiBhIFRvdWNoIEJhciBlbGVtZW50IHRvIGVuZCB0aGUgZHJhZyBvbi4gRWl0aGVyIHRoaXMgcHJvcGVydHlcbiAqIGFuZCBgc291cmNlRWxlbWVudGAgbXVzdCBiZSBwcm92aWRlZCBvciBgc3RhcnRYYCwgYHN0YXJ0WWAsIGBlbmRYYCwgYGVuZFlgIGNvb3JkaW5hdGVzXG4gKiBtdXN0IGJlIHNldC5cbiAqIEBwcm9wZXJ0eSB7P251bWJlcn0gc3RhcnRYIHN0YXJ0aW5nIFggY29vcmRpbmF0ZVxuICogQHByb3BlcnR5IHs/bnVtYmVyfSBzdGFydFkgc3RhcnRpbmcgWSBjb29yZGluYXRlXG4gKiBAcHJvcGVydHkgez9udW1iZXJ9IGVuZFggZW5kaW5nIFggY29vcmRpbmF0ZVxuICogQHByb3BlcnR5IHs/bnVtYmVyfSBlbmRZIGVuZGluZyBZIGNvb3JkaW5hdGVcbiAqIEBwcm9wZXJ0eSB7IW51bWJlcn0gZHVyYXRpb24gbG9uZyBjbGljayBkdXJhdGlvbiBpbiBmbG9hdCBzZWNvbmRzXG4gKiBAcHJvcGVydHkgez9udW1iZXJ9IGtleU1vZGlmaWVyRmxhZ3MgaWYgc2V0IHRoZW4gdGhlIGdpdmVuIGtleSBtb2RpZmllcnMgd2lsbCBiZVxuICogYXBwbGllZCB3aGlsZSBkcmFnIGlzIHBlcmZvcm1lZC4gU2VlXG4gKiBodHRwczovL2RldmVsb3Blci5hcHBsZS5jb20vZG9jdW1lbnRhdGlvbi94Y3Rlc3QveGN1aWtleW1vZGlmaWVyZmxhZ3NcbiAqIGZvciBtb3JlIGRldGFpbHNcbiAqL1xuXG4vKipcbiAqIFBlcmZvcm0gbG9uZyBwcmVzcyBhbmQgZHJhZyBnZXN0dXJlIG9uIGEgVG91Y2ggQmFyIGVsZW1lbnQgb3IgYnkgYWJzb2x1dGUgY29vcmRpbmF0ZXNcbiAqXG4gKiBAcGFyYW0ge1ByZXNzQW5kRHJhZ09wdGlvbnN9IG9wdHNcbiAqL1xuY29tbWFuZHMubWFjb3NQcmVzc0FuZERyYWcgPSBhc3luYyBmdW5jdGlvbiBtYWNvc1ByZXNzQW5kRHJhZyAob3B0cyA9IHt9KSB7XG4gIGNvbnN0IHNvdXJjZVV1aWQgPSBleHRyYWN0VXVpZChvcHRzLCBbJ3NvdXJjZUVsZW1lbnRJZCcsICdzb3VyY2VFbGVtZW50J10pO1xuICBjb25zdCBkZXN0VXVpZCA9IGV4dHJhY3RVdWlkKG9wdHMsIFsnZGVzdGluYXRpb25FbGVtZW50SWQnLCAnZGVzdGluYXRpb25FbGVtZW50J10pO1xuICBjb25zdCB7XG4gICAgc3RhcnRYLCBzdGFydFksXG4gICAgZW5kWCwgZW5kWSxcbiAgICBkdXJhdGlvbixcbiAgICBrZXlNb2RpZmllckZsYWdzXG4gIH0gPSBvcHRzO1xuICBjb25zdCB1cmwgPSBzb3VyY2VVdWlkICYmIGRlc3RVdWlkXG4gICAgPyBgL3dkYS9lbGVtZW50LyR7c291cmNlVXVpZH0vcHJlc3NBbmREcmFnYFxuICAgIDogJy93ZGEvcHJlc3NBbmREcmFnJztcbiAgY29uc3QgZGVzdCA9IGRlc3RVdWlkICYmIHV0aWwud3JhcEVsZW1lbnQoZGVzdFV1aWQpO1xuICByZXR1cm4gYXdhaXQgdGhpcy53ZGEucHJveHkuY29tbWFuZCh1cmwsICdQT1NUJywge1xuICAgIHN0YXJ0WCwgc3RhcnRZLFxuICAgIGVuZFgsIGVuZFksXG4gICAgZHVyYXRpb24sXG4gICAgZGVzdCxcbiAgICBrZXlNb2RpZmllckZsYWdzLFxuICB9KTtcbn07XG5cbi8qKlxuICogQHR5cGVkZWYge09iamVjdH0gUHJlc3NBbmREcmFnQW5kSG9sZE9wdGlvbnNcbiAqIEBwcm9wZXJ0eSB7P3N0cmluZ30gc291cmNlRWxlbWVudElkIHV1aWQgb2YgYSBUb3VjaCBCYXIgZWxlbWVudCB0byBzdGFydCB0aGUgZHJhZyBmcm9tLiBFaXRoZXIgdGhpcyBwcm9wZXJ0eVxuICogYW5kIGBkZXN0aW5hdGlvbkVsZW1lbnRgIG11c3QgYmUgcHJvdmlkZWQgb3IgYHN0YXJ0WGAsIGBzdGFydFlgLCBgZW5kWGAsIGBlbmRZYCBjb29yZGluYXRlc1xuICogbXVzdCBiZSBzZXQuXG4gKiBAcHJvcGVydHkgez9zdHJpbmd9IGRlc3RpbmF0aW9uRWxlbWVudElkIHV1aWQgb2YgYSBUb3VjaCBCYXIgZWxlbWVudCB0byBlbmQgdGhlIGRyYWcgb24uIEVpdGhlciB0aGlzIHByb3BlcnR5XG4gKiBhbmQgYHNvdXJjZUVsZW1lbnRgIG11c3QgYmUgcHJvdmlkZWQgb3IgYHN0YXJ0WGAsIGBzdGFydFlgLCBgZW5kWGAsIGBlbmRZYCBjb29yZGluYXRlc1xuICogbXVzdCBiZSBzZXQuXG4gKiBAcHJvcGVydHkgez9udW1iZXJ9IHN0YXJ0WCBzdGFydGluZyBYIGNvb3JkaW5hdGVcbiAqIEBwcm9wZXJ0eSB7P251bWJlcn0gc3RhcnRZIHN0YXJ0aW5nIFkgY29vcmRpbmF0ZVxuICogQHByb3BlcnR5IHs/bnVtYmVyfSBlbmRYIGVuZGluZyBYIGNvb3JkaW5hdGVcbiAqIEBwcm9wZXJ0eSB7P251bWJlcn0gZW5kWSBlbmRpbmcgWSBjb29yZGluYXRlXG4gKiBAcHJvcGVydHkgeyFudW1iZXJ9IGR1cmF0aW9uIGxvbmcgY2xpY2sgZHVyYXRpb24gaW4gZmxvYXQgc2Vjb25kc1xuICogQHByb3BlcnR5IHs/bnVtYmVyfSB2ZWxvY2l0eSBkcmFnZ2luZyB2ZWxvY2l0eSBpbiBwaXhlbHMgcGVyIHNlY29uZC5cbiAqIElmIG5vdCBwcm92aWRlZCB0aGVuIHRoZSBkZWZhdWx0IHZlbG9jaXR5IGlzIHVzZWQuIFNlZVxuICogaHR0cHM6Ly9kZXZlbG9wZXIuYXBwbGUuY29tL2RvY3VtZW50YXRpb24veGN0ZXN0L3hjdWlnZXN0dXJldmVsb2NpdHlcbiAqIGZvciBtb3JlIGRldGFpbHNcbiAqIEBwcm9wZXJ0eSB7P251bWJlcn0ga2V5TW9kaWZpZXJGbGFncyBpZiBzZXQgdGhlbiB0aGUgZ2l2ZW4ga2V5IG1vZGlmaWVycyB3aWxsIGJlXG4gKiBhcHBsaWVkIHdoaWxlIGRyYWcgaXMgcGVyZm9ybWVkLiBTZWVcbiAqIGh0dHBzOi8vZGV2ZWxvcGVyLmFwcGxlLmNvbS9kb2N1bWVudGF0aW9uL3hjdGVzdC94Y3Vpa2V5bW9kaWZpZXJmbGFnc1xuICogZm9yIG1vcmUgZGV0YWlsc1xuICovXG5cbi8qKlxuICogUGVyZm9ybSBwcmVzcywgZHJhZyBhbmQgaG9sZCBnZXN0dXJlIG9uIGEgVG91Y2ggQmFyIGVsZW1lbnQgb3IgYnkgYWJzb2x1dGUgVG91Y2ggQmFyIGNvb3JkaW5hdGVzXG4gKlxuICogQHBhcmFtIHtQcmVzc0FuZERyYWdBbmRIb2xkT3B0aW9uc30gb3B0c1xuICovXG5jb21tYW5kcy5tYWNvc1ByZXNzQW5kRHJhZ0FuZEhvbGQgPSBhc3luYyBmdW5jdGlvbiBtYWNvc1ByZXNzQW5kRHJhZ0FuZEhvbGQgKG9wdHMgPSB7fSkge1xuICBjb25zdCBzb3VyY2VVdWlkID0gZXh0cmFjdFV1aWQob3B0cywgWydzb3VyY2VFbGVtZW50SWQnLCAnc291cmNlRWxlbWVudCddKTtcbiAgY29uc3QgZGVzdFV1aWQgPSBleHRyYWN0VXVpZChvcHRzLCBbJ2Rlc3RpbmF0aW9uRWxlbWVudElkJywgJ2Rlc3RpbmF0aW9uRWxlbWVudCddKTtcbiAgY29uc3Qge1xuICAgIHN0YXJ0WCwgc3RhcnRZLFxuICAgIGVuZFgsIGVuZFksXG4gICAgZHVyYXRpb24sIGhvbGREdXJhdGlvbixcbiAgICB2ZWxvY2l0eSxcbiAgICBrZXlNb2RpZmllckZsYWdzXG4gIH0gPSBvcHRzO1xuICBjb25zdCB1cmwgPSBzb3VyY2VVdWlkICYmIGRlc3RVdWlkXG4gICAgPyBgL3dkYS9lbGVtZW50LyR7c291cmNlVXVpZH0vcHJlc3NBbmREcmFnQW5kSG9sZGBcbiAgICA6ICcvd2RhL3ByZXNzQW5kRHJhZ0FuZEhvbGQnO1xuICBjb25zdCBkZXN0ID0gZGVzdFV1aWQgJiYgdXRpbC53cmFwRWxlbWVudChkZXN0VXVpZCk7XG4gIHJldHVybiBhd2FpdCB0aGlzLndkYS5wcm94eS5jb21tYW5kKHVybCwgJ1BPU1QnLCB7XG4gICAgc3RhcnRYLCBzdGFydFksXG4gICAgZW5kWCwgZW5kWSxcbiAgICBkdXJhdGlvbiwgaG9sZER1cmF0aW9uLFxuICAgIHZlbG9jaXR5LFxuICAgIGRlc3QsXG4gICAga2V5TW9kaWZpZXJGbGFncyxcbiAgfSk7XG59O1xuXG5leHBvcnQgZGVmYXVsdCBjb21tYW5kcztcbiJdLCJtYXBwaW5ncyI6Ijs7Ozs7OztBQUFBO0FBQ0E7QUFFQSxNQUFNQSxRQUFRLEdBQUcsQ0FBQyxDQUFDO0FBRW5CLFNBQVNDLFdBQVcsQ0FBRUMsT0FBTyxHQUFHLENBQUMsQ0FBQyxFQUFFQyxRQUFRLEdBQUcsQ0FBQyxXQUFXLEVBQUUsU0FBUyxDQUFDLEVBQUU7RUFDdkUsS0FBSyxNQUFNQyxJQUFJLElBQUlELFFBQVEsRUFBRTtJQUMzQixJQUFJRCxPQUFPLENBQUNFLElBQUksQ0FBQyxFQUFFO01BQ2pCLE1BQU1DLE1BQU0sR0FBR0MsYUFBSSxDQUFDQyxhQUFhLENBQUNMLE9BQU8sQ0FBQ0UsSUFBSSxDQUFDLENBQUM7TUFDaEQsSUFBSUMsTUFBTSxFQUFFO1FBQ1YsT0FBT0EsTUFBTTtNQUNmO0lBQ0Y7RUFDRjtFQUNBLE9B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
290
+ //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJfc3VwcG9ydCIsInJlcXVpcmUiLCJfZHJpdmVyIiwiY29tbWFuZHMiLCJleHRyYWN0VXVpZCIsIm9wdGlvbnMiLCJrZXlOYW1lcyIsIm5hbWUiLCJyZXN1bHQiLCJ1dGlsIiwidW53cmFwRWxlbWVudCIsInJlcXVpcmVVdWlkIiwiZXJyb3JzIiwiSW52YWxpZEFyZ3VtZW50RXJyb3IiLCJtYWNvc1NldFZhbHVlIiwib3B0cyIsInV1aWQiLCJ2YWx1ZSIsInRleHQiLCJrZXlNb2RpZmllckZsYWdzIiwid2RhIiwicHJveHkiLCJjb21tYW5kIiwibWFjb3NDbGljayIsIngiLCJ5IiwidXJsIiwibWFjb3NTY3JvbGwiLCJkZWx0YVgiLCJkZWx0YVkiLCJtYWNvc1N3aXBlIiwiZGlyZWN0aW9uIiwidmVsb2NpdHkiLCJtYWNvc1JpZ2h0Q2xpY2siLCJtYWNvc0hvdmVyIiwibWFjb3NEb3VibGVDbGljayIsIm1hY29zQ2xpY2tBbmREcmFnIiwic291cmNlVXVpZCIsImRlc3RVdWlkIiwic3RhcnRYIiwic3RhcnRZIiwiZW5kWCIsImVuZFkiLCJkdXJhdGlvbiIsImRlc3QiLCJ3cmFwRWxlbWVudCIsIm1hY29zQ2xpY2tBbmREcmFnQW5kSG9sZCIsImhvbGREdXJhdGlvbiIsIm1hY29zS2V5cyIsImtleXMiLCJtYWNvc1ByZXNzQW5kSG9sZCIsIm1hY29zVGFwIiwibWFjb3NEb3VibGVUYXAiLCJtYWNvc1ByZXNzQW5kRHJhZyIsIm1hY29zUHJlc3NBbmREcmFnQW5kSG9sZCIsIl9kZWZhdWx0IiwiZXhwb3J0cyIsImRlZmF1bHQiXSwic291cmNlcyI6WyIuLi8uLi8uLi9saWIvY29tbWFuZHMvZ2VzdHVyZXMuanMiXSwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgdXRpbCB9IGZyb20gJ2FwcGl1bS9zdXBwb3J0JztcbmltcG9ydCB7IGVycm9ycyB9IGZyb20gJ2FwcGl1bS9kcml2ZXInO1xuXG5jb25zdCBjb21tYW5kcyA9IHt9O1xuXG5mdW5jdGlvbiBleHRyYWN0VXVpZCAob3B0aW9ucyA9IHt9LCBrZXlOYW1lcyA9IFsnZWxlbWVudElkJywgJ2VsZW1lbnQnXSkge1xuICBmb3IgKGNvbnN0IG5hbWUgb2Yga2V5TmFtZXMpIHtcbiAgICBpZiAob3B0aW9uc1tuYW1lXSkge1xuICAgICAgY29uc3QgcmVzdWx0ID0gdXRpbC51bndyYXBFbGVtZW50KG9wdGlvbnNbbmFtZV0pO1xuICAgICAgaWYgKHJlc3VsdCkge1xuICAgICAgICByZXR1cm4gcmVzdWx0O1xuICAgICAgfVxuICAgIH1cbiAgfVxuICByZXR1cm4gbnVsbDtcbn1cblxuZnVuY3Rpb24gcmVxdWlyZVV1aWQgKG9wdGlvbnMgPSB7fSwga2V5TmFtZXMgPSBbJ2VsZW1lbnRJZCcsICdlbGVtZW50J10pIHtcbiAgY29uc3QgcmVzdWx0ID0gZXh0cmFjdFV1aWQob3B0aW9ucywga2V5TmFtZXMpO1xuICBpZiAoIXJlc3VsdCkge1xuICAgIHRocm93IG5ldyBlcnJvcnMuSW52YWxpZEFyZ3VtZW50RXJyb3IoYCR7a2V5TmFtZXNbMF19IGZpZWxkIGlzIG1hbmRhdG9yeWApO1xuICB9XG4gIHJldHVybiByZXN1bHQ7XG59XG5cblxuLyoqXG4gKiBAdHlwZWRlZiB7T2JqZWN0fSBTZXRWYWx1ZU9wdGlvbnNcbiAqIEBwcm9wZXJ0eSB7IXN0cmluZ30gZWxlbWVudElkIHV1aWQgb2YgdGhlIGVsZW1lbnQgdG8gc2V0IHZhbHVlIGZvclxuICogQHByb3BlcnR5IHsqfSB2YWx1ZSB2YWx1ZSB0byBzZXQuIENvdWxkIGFsc28gYmUgYW4gYXJyYXlcbiAqIEBwcm9wZXJ0eSB7c3RyaW5nfSB0ZXh0IHRleHQgdG8gc2V0LiBJZiBib3RoIHZhbHVlIGFuZCB0ZXh0IGFyZSBzZXRcbiAqIHRoZW4gYHZhbHVlYCBpcyBwcmVmZXJyZWRcbiAqIEBwcm9wZXJ0eSB7P251bWJlcn0ga2V5TW9kaWZpZXJGbGFncyBpZiBzZXQgdGhlbiB0aGUgZ2l2ZW4ga2V5IG1vZGlmaWVycyB3aWxsIGJlXG4gKiBhcHBsaWVkIHdoaWxlIHRoZSBlbGVtZW50IHZhbHVlIGlzIGJlaW5nIHNldC4gU2VlXG4gKiBodHRwczovL2RldmVsb3Blci5hcHBsZS5jb20vZG9jdW1lbnRhdGlvbi94Y3Rlc3QveGN1aWtleW1vZGlmaWVyZmxhZ3NcbiAqIGZvciBtb3JlIGRldGFpbHNcbiAqL1xuXG4vKipcbiAqIFNldCB2YWx1ZSB0byB0aGUgZ2l2ZW4gZWxlbWVudFxuICpcbiAqIEBwYXJhbSB7U2V0VmFsdWVPcHRpb25zfSBvcHRzXG4gKi9cbmNvbW1hbmRzLm1hY29zU2V0VmFsdWUgPSBhc3luYyBmdW5jdGlvbiBtYWNvc1NldFZhbHVlIChvcHRzID0ge30pIHtcbiAgY29uc3QgdXVpZCA9IHJlcXVpcmVVdWlkKG9wdHMpO1xuICBjb25zdCB7IHZhbHVlLCB0ZXh0LCBrZXlNb2RpZmllckZsYWdzIH0gPSBvcHRzO1xuICByZXR1cm4gYXdhaXQgdGhpcy53ZGEucHJveHkuY29tbWFuZChgL2VsZW1lbnQvJHt1dWlkfS92YWx1ZWAsICdQT1NUJywge1xuICAgIHZhbHVlLCB0ZXh0LFxuICAgIGtleU1vZGlmaWVyRmxhZ3MsXG4gIH0pO1xufTtcblxuLyoqXG4gKiBAdHlwZWRlZiB7T2JqZWN0fSBDbGlja09wdGlvbnNcbiAqIEBwcm9wZXJ0eSB7P3N0cmluZ30gZWxlbWVudElkIHV1aWQgb2YgdGhlIGVsZW1lbnQgdG8gY2xpY2suIEVpdGhlciB0aGlzIHByb3BlcnR5XG4gKiBvci9hbmQgeCBhbmQgeSBtdXN0IGJlIHNldC4gSWYgYm90aCBhcmUgc2V0IHRoZW4geCBhbmQgeSBhcmUgY29uc2lkZXJlZCBhcyByZWxhdGl2ZVxuICogZWxlbWVudCBjb29yZGluYXRlcy4gSWYgb25seSB4IGFuZCB5IGFyZSBzZXQgdGhlbiB0aGVzZSBhcmUgcGFyc2VkIGFzXG4gKiBhYnNvbHV0ZSBjb29yZGluYXRlcy5cbiAqIEBwcm9wZXJ0eSB7P251bWJlcn0geCBjbGljayBYIGNvb3JkaW5hdGVcbiAqIEBwcm9wZXJ0eSB7P251bWJlcn0geSBjbGljayBZIGNvb3JkaW5hdGVcbiAqIEBwcm9wZXJ0eSB7P251bWJlcn0ga2V5TW9kaWZpZXJGbGFncyBpZiBzZXQgdGhlbiB0aGUgZ2l2ZW4ga2V5IG1vZGlmaWVycyB3aWxsIGJlXG4gKiBhcHBsaWVkIHdoaWxlIGNsaWNrIGlzIHBlcmZvcm1lZC4gU2VlXG4gKiBodHRwczovL2RldmVsb3Blci5hcHBsZS5jb20vZG9jdW1lbnRhdGlvbi94Y3Rlc3QveGN1aWtleW1vZGlmaWVyZmxhZ3NcbiAqIGZvciBtb3JlIGRldGFpbHNcbiAqL1xuXG4vKipcbiAqIFBlcmZvcm0gY2xpY2sgZ2VzdHVyZSBvbiBhbiBlbGVtZW50IG9yIGJ5IHJlbGF0aXZlL2Fic29sdXRlIGNvb3JkaW5hdGVzXG4gKlxuICogQHBhcmFtIHtDbGlja09wdGlvbnN9IG9wdHNcbiAqL1xuY29tbWFuZHMubWFjb3NDbGljayA9IGFzeW5jIGZ1bmN0aW9uIG1hY29zQ2xpY2sgKG9wdHMgPSB7fSkge1xuICBjb25zdCB1dWlkID0gZXh0cmFjdFV1aWQob3B0cyk7XG4gIGNvbnN0IHsgeCwgeSwga2V5TW9kaWZpZXJGbGFncyB9ID0gb3B0cztcbiAgY29uc3QgdXJsID0gdXVpZCA/IGAvZWxlbWVudC8ke3V1aWR9L2NsaWNrYCA6ICcvd2RhL2NsaWNrJztcbiAgcmV0dXJuIGF3YWl0IHRoaXMud2RhLnByb3h5LmNvbW1hbmQodXJsLCAnUE9TVCcsIHtcbiAgICB4LCB5LFxuICAgIGtleU1vZGlmaWVyRmxhZ3MsXG4gIH0pO1xufTtcblxuLyoqXG4gKiBAdHlwZWRlZiB7T2JqZWN0fSBTY3JvbGxPcHRpb25zXG4gKiBAcHJvcGVydHkgez9zdHJpbmd9IGVsZW1lbnRJZCB1dWlkIG9mIHRoZSBlbGVtZW50IHRvIGJlIHNjcm9sbGVkLiBFaXRoZXIgdGhpcyBwcm9wZXJ0eVxuICogb3IvYW5kIHggYW5kIHkgbXVzdCBiZSBzZXQuIElmIGJvdGggYXJlIHNldCB0aGVuIHggYW5kIHkgYXJlIGNvbnNpZGVyZWQgYXMgcmVsYXRpdmVcbiAqIGVsZW1lbnQgY29vcmRpbmF0ZXMuIElmIG9ubHkgeCBhbmQgeSBhcmUgc2V0IHRoZW4gdGhlc2UgYXJlIHBhcnNlZCBhc1xuICogYWJzb2x1dGUgY29vcmRpbmF0ZXMuXG4gKiBAcHJvcGVydHkgez9udW1iZXJ9IHggc2Nyb2xsIFggY29vcmRpbmF0ZVxuICogQHByb3BlcnR5IHs/bnVtYmVyfSB5IHNjcm9sbCBZIGNvb3JkaW5hdGVcbiAqIEBwcm9wZXJ0eSB7IW51bWJlcn0gZGVsdGFYIGhvcml6b250YWwgZGVsdGEgYXMgZmxvYXQgbnVtYmVyXG4gKiBAcHJvcGVydHkgeyFudW1iZXJ9IGRlbHRhWSB2ZXJ0aWNhbCBkZWx0YSBhcyBmbG9hdCBudW1iZXJcbiAqIEBwcm9wZXJ0eSB7P251bWJlcn0ga2V5TW9kaWZpZXJGbGFncyBpZiBzZXQgdGhlbiB0aGUgZ2l2ZW4ga2V5IG1vZGlmaWVycyB3aWxsIGJlXG4gKiBhcHBsaWVkIHdoaWxlIHNjcm9sbCBpcyBwZXJmb3JtZWQuIFNlZVxuICogaHR0cHM6Ly9kZXZlbG9wZXIuYXBwbGUuY29tL2RvY3VtZW50YXRpb24veGN0ZXN0L3hjdWlrZXltb2RpZmllcmZsYWdzXG4gKiBmb3IgbW9yZSBkZXRhaWxzXG4gKi9cblxuLyoqXG4gKiBQZXJmb3JtIHNjcm9sbCBnZXN0dXJlIG9uIGFuIGVsZW1lbnQgb3IgYnkgcmVsYXRpdmUvYWJzb2x1dGUgY29vcmRpbmF0ZXNcbiAqXG4gKiBAcGFyYW0ge1Njcm9sbE9wdGlvbnN9IG9wdHNcbiAqL1xuY29tbWFuZHMubWFjb3NTY3JvbGwgPSBhc3luYyBmdW5jdGlvbiBtYWNvc1Njcm9sbCAob3B0cyA9IHt9KSB7XG4gIGNvbnN0IHV1aWQgPSBleHRyYWN0VXVpZChvcHRzKTtcbiAgY29uc3Qge1xuICAgIHgsIHksXG4gICAgZGVsdGFYLCBkZWx0YVksXG4gICAga2V5TW9kaWZpZXJGbGFncyxcbiAgfSA9IG9wdHM7XG4gIGNvbnN0IHVybCA9IHV1aWQgPyBgL3dkYS9lbGVtZW50LyR7dXVpZH0vc2Nyb2xsYCA6ICcvd2RhL3Njcm9sbCc7XG4gIHJldHVybiBhd2FpdCB0aGlzLndkYS5wcm94eS5jb21tYW5kKHVybCwgJ1BPU1QnLCB7XG4gICAgZGVsdGFYLCBkZWx0YVksXG4gICAgeCwgeSxcbiAgICBrZXlNb2RpZmllckZsYWdzLFxuICB9KTtcbn07XG5cbi8qKlxuICogQHR5cGVkZWYge09iamVjdH0gU3dpcGVPcHRpb25zXG4gKiBAcHJvcGVydHkgez9zdHJpbmd9IGVsZW1lbnRJZCB1dWlkIG9mIHRoZSBlbGVtZW50IHRvIGJlIHN3aXBlZC4gRWl0aGVyIHRoaXMgcHJvcGVydHlcbiAqIG9yL2FuZCB4IGFuZCB5IG11c3QgYmUgc2V0LiBJZiBib3RoIGFyZSBzZXQgdGhlbiB4IGFuZCB5IGFyZSBjb25zaWRlcmVkIGFzIHJlbGF0aXZlXG4gKiBlbGVtZW50IGNvb3JkaW5hdGVzLiBJZiBvbmx5IHggYW5kIHkgYXJlIHNldCB0aGVuIHRoZXNlIGFyZSBwYXJzZWQgYXNcbiAqIGFic29sdXRlIGNvb3JkaW5hdGVzLlxuICogQHByb3BlcnR5IHs/bnVtYmVyfSB4IHN3aXBlIFggY29vcmRpbmF0ZVxuICogQHByb3BlcnR5IHs/bnVtYmVyfSB5IHN3aXBlIFkgY29vcmRpbmF0ZVxuICogQHByb3BlcnR5IHshc3RyaW5nfSBkaXJlY3Rpb24gZWl0aGVyICd1cCcsICdkb3duJywgJ2xlZnQnIG9yICdyaWdodCdcbiAqIEBwcm9wZXJ0eSB7P251bWJlcn0gdmVsb2NpdHkgVGhlIHZhbHVlIGlzIG1lYXN1cmVkIGluIHBpeGVscyBwZXIgc2Vjb25kIGFuZCBzYW1lXG4gKiB2YWx1ZXMgY291bGQgYmVoYXZlIGRpZmZlcmVudGx5IG9uIGRpZmZlcmVudCBkZXZpY2VzIGRlcGVuZGluZyBvbiB0aGVpciBkaXNwbGF5XG4gKiBkZW5zaXR5LiBIaWdoZXIgdmFsdWVzIG1ha2Ugc3dpcGUgZ2VzdHVyZSBmYXN0ZXIgKHdoaWNoIHVzdWFsbHkgc2Nyb2xscyBsYXJnZXJcbiAqIGFyZWFzIGlmIHdlIGFwcGx5IGl0IHRvIGEgbGlzdCkgYW5kIGxvd2VyIHZhbHVlcyBzbG93IGl0IGRvd24uXG4gKiBPbmx5IHZhbHVlcyBncmVhdGVyIHRoYW4gemVybyBoYXZlIGVmZmVjdC5cbiAqIEBwcm9wZXJ0eSB7P251bWJlcn0ga2V5TW9kaWZpZXJGbGFncyBpZiBzZXQgdGhlbiB0aGUgZ2l2ZW4ga2V5IG1vZGlmaWVycyB3aWxsIGJlXG4gKiBhcHBsaWVkIHdoaWxlIHNjcm9sbCBpcyBwZXJmb3JtZWQuIFNlZVxuICogaHR0cHM6Ly9kZXZlbG9wZXIuYXBwbGUuY29tL2RvY3VtZW50YXRpb24veGN0ZXN0L3hjdWlrZXltb2RpZmllcmZsYWdzXG4gKiBmb3IgbW9yZSBkZXRhaWxzXG4gKi9cblxuLyoqXG4gKiBQZXJmb3JtIHN3aXBlIGdlc3R1cmUgb24gYW4gZWxlbWVudFxuICpcbiAqIEBwYXJhbSB7U3dpcGVPcHRpb25zfSBvcHRzXG4gKi9cbmNvbW1hbmRzLm1hY29zU3dpcGUgPSBhc3luYyBmdW5jdGlvbiBtYWNvc1N3aXBlIChvcHRzID0ge30pIHtcbiAgY29uc3QgdXVpZCA9IGV4dHJhY3RVdWlkKG9wdHMpO1xuICBjb25zdCB7XG4gICAgeCwgeSxcbiAgICBkaXJlY3Rpb24sXG4gICAgdmVsb2NpdHksXG4gICAga2V5TW9kaWZpZXJGbGFncyxcbiAgfSA9IG9wdHM7XG4gIGNvbnN0IHVybCA9IHV1aWQgPyBgL3dkYS9lbGVtZW50LyR7dXVpZH0vc3dpcGVgIDogYC93ZGEvc3dpcGVgO1xuICByZXR1cm4gYXdhaXQgdGhpcy53ZGEucHJveHkuY29tbWFuZCh1cmwsICdQT1NUJywge1xuICAgIHgsIHksXG4gICAgZGlyZWN0aW9uLFxuICAgIHZlbG9jaXR5LFxuICAgIGtleU1vZGlmaWVyRmxhZ3MsXG4gIH0pO1xufTtcblxuLyoqXG4gKiBAdHlwZWRlZiB7T2JqZWN0fSBSaWdodENsaWNrT3B0aW9uc1xuICogQHByb3BlcnR5IHs/c3RyaW5nfSBlbGVtZW50SWQgdXVpZCBvZiB0aGUgZWxlbWVudCB0byBjbGljay4gRWl0aGVyIHRoaXMgcHJvcGVydHlcbiAqIG9yL2FuZCB4IGFuZCB5IG11c3QgYmUgc2V0LiBJZiBib3RoIGFyZSBzZXQgdGhlbiB4IGFuZCB5IGFyZSBjb25zaWRlcmVkIGFzIHJlbGF0aXZlXG4gKiBlbGVtZW50IGNvb3JkaW5hdGVzLiBJZiBvbmx5IHggYW5kIHkgYXJlIHNldCB0aGVuIHRoZXNlIGFyZSBwYXJzZWQgYXNcbiAqIGFic29sdXRlIGNvb3JkaW5hdGVzLlxuICogQHByb3BlcnR5IHs/bnVtYmVyfSB4IGNsaWNrIFggY29vcmRpbmF0ZVxuICogQHByb3BlcnR5IHs/bnVtYmVyfSB5IGNsaWNrIFkgY29vcmRpbmF0ZVxuICogQHByb3BlcnR5IHs/bnVtYmVyfSBrZXlNb2RpZmllckZsYWdzIGlmIHNldCB0aGVuIHRoZSBnaXZlbiBrZXkgbW9kaWZpZXJzIHdpbGwgYmVcbiAqIGFwcGxpZWQgd2hpbGUgY2xpY2sgaXMgcGVyZm9ybWVkLiBTZWVcbiAqIGh0dHBzOi8vZGV2ZWxvcGVyLmFwcGxlLmNvbS9kb2N1bWVudGF0aW9uL3hjdGVzdC94Y3Vpa2V5bW9kaWZpZXJmbGFnc1xuICogZm9yIG1vcmUgZGV0YWlsc1xuICovXG5cbi8qKlxuICogUGVyZm9ybSByaWdodCBjbGljayBnZXN0dXJlIG9uIGFuIGVsZW1lbnQgb3IgYnkgcmVsYXRpdmUvYWJzb2x1dGUgY29vcmRpbmF0ZXNcbiAqXG4gKiBAcGFyYW0ge1JpZ2h0Q2xpY2tPcHRpb25zfSBvcHRzXG4gKi9cbmNvbW1hbmRzLm1hY29zUmlnaHRDbGljayA9IGFzeW5jIGZ1bmN0aW9uIG1hY29zUmlnaHRDbGljayAob3B0cyA9IHt9KSB7XG4gIGNvbnN0IHV1aWQgPSBleHRyYWN0VXVpZChvcHRzKTtcbiAgY29uc3QgeyB4LCB5LCBrZXlNb2RpZmllckZsYWdzIH0gPSBvcHRzO1xuICBjb25zdCB1cmwgPSB1dWlkID8gYC93ZGEvZWxlbWVudC8ke3V1aWR9L3JpZ2h0Q2xpY2tgIDogJy93ZGEvcmlnaHRDbGljayc7XG4gIHJldHVybiBhd2FpdCB0aGlzLndkYS5wcm94eS5jb21tYW5kKHVybCwgJ1BPU1QnLCB7XG4gICAgeCwgeSxcbiAgICBrZXlNb2RpZmllckZsYWdzLFxuICB9KTtcbn07XG5cbi8qKlxuICogQHR5cGVkZWYge09iamVjdH0gSG92ZXJPcHRpb25zXG4gKiBAcHJvcGVydHkgez9zdHJpbmd9IGVsZW1lbnRJZCB1dWlkIG9mIHRoZSBlbGVtZW50IHRvIGhvdmVyLiBFaXRoZXIgdGhpcyBwcm9wZXJ0eVxuICogb3IvYW5kIHggYW5kIHkgbXVzdCBiZSBzZXQuIElmIGJvdGggYXJlIHNldCB0aGVuIHggYW5kIHkgYXJlIGNvbnNpZGVyZWQgYXMgcmVsYXRpdmVcbiAqIGVsZW1lbnQgY29vcmRpbmF0ZXMuIElmIG9ubHkgeCBhbmQgeSBhcmUgc2V0IHRoZW4gdGhlc2UgYXJlIHBhcnNlZCBhc1xuICogYWJzb2x1dGUgY29vcmRpbmF0ZXMuXG4gKiBAcHJvcGVydHkgez9udW1iZXJ9IHggY2xpY2sgWCBjb29yZGluYXRlXG4gKiBAcHJvcGVydHkgez9udW1iZXJ9IHkgY2xpY2sgWSBjb29yZGluYXRlXG4gKiBAcHJvcGVydHkgez9udW1iZXJ9IGtleU1vZGlmaWVyRmxhZ3MgaWYgc2V0IHRoZW4gdGhlIGdpdmVuIGtleSBtb2RpZmllcnMgd2lsbCBiZVxuICogYXBwbGllZCB3aGlsZSBob3ZlciBpcyBwZXJmb3JtZWQuIFNlZVxuICogaHR0cHM6Ly9kZXZlbG9wZXIuYXBwbGUuY29tL2RvY3VtZW50YXRpb24veGN0ZXN0L3hjdWlrZXltb2RpZmllcmZsYWdzXG4gKiBmb3IgbW9yZSBkZXRhaWxzXG4gKi9cblxuLyoqXG4gKiBQZXJmb3JtIGhvdmVyIGdlc3R1cmUgb24gYW4gZWxlbWVudCBvciBieSByZWxhdGl2ZS9hYnNvbHV0ZSBjb29yZGluYXRlc1xuICpcbiAqIEBwYXJhbSB7SG92ZXJPcHRpb25zfSBvcHRzXG4gKi9cbmNvbW1hbmRzLm1hY29zSG92ZXIgPSBhc3luYyBmdW5jdGlvbiBtYWNvc0hvdmVyIChvcHRzID0ge30pIHtcbiAgY29uc3QgdXVpZCA9IGV4dHJhY3RVdWlkKG9wdHMpO1xuICBjb25zdCB7IHgsIHksIGtleU1vZGlmaWVyRmxhZ3MgfSA9IG9wdHM7XG4gIGNvbnN0IHVybCA9IHV1aWQgPyBgL3dkYS9lbGVtZW50LyR7dXVpZH0vaG92ZXJgIDogJy93ZGEvaG92ZXInO1xuICByZXR1cm4gYXdhaXQgdGhpcy53ZGEucHJveHkuY29tbWFuZCh1cmwsICdQT1NUJywge1xuICAgIHgsIHksXG4gICAga2V5TW9kaWZpZXJGbGFncyxcbiAgfSk7XG59O1xuXG4vKipcbiAqIEB0eXBlZGVmIHtPYmplY3R9IERvdWJsZUNsaWNrT3B0aW9uc1xuICogQHByb3BlcnR5IHs/c3RyaW5nfSBlbGVtZW50SWQgdXVpZCBvZiB0aGUgZWxlbWVudCB0byBkb3VibGUgY2xpY2suIEVpdGhlciB0aGlzIHByb3BlcnR5XG4gKiBvci9hbmQgeCBhbmQgeSBtdXN0IGJlIHNldC4gSWYgYm90aCBhcmUgc2V0IHRoZW4geCBhbmQgeSBhcmUgY29uc2lkZXJlZCBhcyByZWxhdGl2ZVxuICogZWxlbWVudCBjb29yZGluYXRlcy4gSWYgb25seSB4IGFuZCB5IGFyZSBzZXQgdGhlbiB0aGVzZSBhcmUgcGFyc2VkIGFzXG4gKiBhYnNvbHV0ZSBjb29yZGluYXRlcy5cbiAqIEBwcm9wZXJ0eSB7P251bWJlcn0geCBjbGljayBYIGNvb3JkaW5hdGVcbiAqIEBwcm9wZXJ0eSB7P251bWJlcn0geSBjbGljayBZIGNvb3JkaW5hdGVcbiAqIEBwcm9wZXJ0eSB7P251bWJlcn0ga2V5TW9kaWZpZXJGbGFncyBpZiBzZXQgdGhlbiB0aGUgZ2l2ZW4ga2V5IG1vZGlmaWVycyB3aWxsIGJlXG4gKiBhcHBsaWVkIHdoaWxlIGRvdWJsZSBjbGljayBpcyBwZXJmb3JtZWQuIFNlZVxuICogaHR0cHM6Ly9kZXZlbG9wZXIuYXBwbGUuY29tL2RvY3VtZW50YXRpb24veGN0ZXN0L3hjdWlrZXltb2RpZmllcmZsYWdzXG4gKiBmb3IgbW9yZSBkZXRhaWxzXG4gKi9cblxuLyoqXG4gKiBQZXJmb3JtIGRvdWJsZSBjbGljayBnZXN0dXJlIG9uIGFuIGVsZW1lbnQgb3IgYnkgcmVsYXRpdmUvYWJzb2x1dGUgY29vcmRpbmF0ZXNcbiAqXG4gKiBAcGFyYW0ge0RvdWJsZUNsaWNrT3B0aW9uc30gb3B0c1xuICovXG5jb21tYW5kcy5tYWNvc0RvdWJsZUNsaWNrID0gYXN5bmMgZnVuY3Rpb24gbWFjb3NEb3VibGVDbGljayAob3B0cyA9IHt9KSB7XG4gIGNvbnN0IHV1aWQgPSBleHRyYWN0VXVpZChvcHRzKTtcbiAgY29uc3QgeyB4LCB5LCBrZXlNb2RpZmllckZsYWdzIH0gPSBvcHRzO1xuICBjb25zdCB1cmwgPSB1dWlkID8gYC93ZGEvZWxlbWVudC8ke3V1aWR9L2RvdWJsZUNsaWNrYCA6ICcvd2RhL2RvdWJsZUNsaWNrJztcbiAgcmV0dXJuIGF3YWl0IHRoaXMud2RhLnByb3h5LmNvbW1hbmQodXJsLCAnUE9TVCcsIHtcbiAgICB4LCB5LFxuICAgIGtleU1vZGlmaWVyRmxhZ3MsXG4gIH0pO1xufTtcblxuLyoqXG4gKiBAdHlwZWRlZiB7T2JqZWN0fSBDbGlja0FuZERyYWdPcHRpb25zXG4gKiBAcHJvcGVydHkgez9zdHJpbmd9IHNvdXJjZUVsZW1lbnRJZCB1dWlkIG9mIHRoZSBlbGVtZW50IHRvIHN0YXJ0IHRoZSBkcmFnIGZyb20uIEVpdGhlciB0aGlzIHByb3BlcnR5XG4gKiBhbmQgYGRlc3RpbmF0aW9uRWxlbWVudGAgbXVzdCBiZSBwcm92aWRlZCBvciBgc3RhcnRYYCwgYHN0YXJ0WWAsIGBlbmRYYCwgYGVuZFlgIGNvb3JkaW5hdGVzXG4gKiBtdXN0IGJlIHNldC5cbiAqIEBwcm9wZXJ0eSB7P3N0cmluZ30gZGVzdGluYXRpb25FbGVtZW50SWQgdXVpZCBvZiB0aGUgZWxlbWVudCB0byBlbmQgdGhlIGRyYWcgb24uIEVpdGhlciB0aGlzIHByb3BlcnR5XG4gKiBhbmQgYHNvdXJjZUVsZW1lbnRgIG11c3QgYmUgcHJvdmlkZWQgb3IgYHN0YXJ0WGAsIGBzdGFydFlgLCBgZW5kWGAsIGBlbmRZYCBjb29yZGluYXRlc1xuICogbXVzdCBiZSBzZXQuXG4gKiBAcHJvcGVydHkgez9udW1iZXJ9IHN0YXJ0WCBzdGFydGluZyBYIGNvb3JkaW5hdGVcbiAqIEBwcm9wZXJ0eSB7P251bWJlcn0gc3RhcnRZIHN0YXJ0aW5nIFkgY29vcmRpbmF0ZVxuICogQHByb3BlcnR5IHs/bnVtYmVyfSBlbmRYIGVuZGluZyBYIGNvb3JkaW5hdGVcbiAqIEBwcm9wZXJ0eSB7P251bWJlcn0gZW5kWSBlbmRpbmcgWSBjb29yZGluYXRlXG4gKiBAcHJvcGVydHkgeyFudW1iZXJ9IGR1cmF0aW9uIGxvbmcgY2xpY2sgZHVyYXRpb24gaW4gZmxvYXQgc2Vjb25kc1xuICogQHByb3BlcnR5IHs/bnVtYmVyfSBrZXlNb2RpZmllckZsYWdzIGlmIHNldCB0aGVuIHRoZSBnaXZlbiBrZXkgbW9kaWZpZXJzIHdpbGwgYmVcbiAqIGFwcGxpZWQgd2hpbGUgZHJhZyBpcyBwZXJmb3JtZWQuIFNlZVxuICogaHR0cHM6Ly9kZXZlbG9wZXIuYXBwbGUuY29tL2RvY3VtZW50YXRpb24veGN0ZXN0L3hjdWlrZXltb2RpZmllcmZsYWdzXG4gKiBmb3IgbW9yZSBkZXRhaWxzXG4gKi9cblxuLyoqXG4gKiBQZXJmb3JtIGxvbmcgY2xpY2sgYW5kIGRyYWcgZ2VzdHVyZSBvbiBhbiBlbGVtZW50IG9yIGJ5IGFic29sdXRlIGNvb3JkaW5hdGVzXG4gKlxuICogQHBhcmFtIHtDbGlja0FuZERyYWdPcHRpb25zfSBvcHRzXG4gKi9cbmNvbW1hbmRzLm1hY29zQ2xpY2tBbmREcmFnID0gYXN5bmMgZnVuY3Rpb24gbWFjb3NDbGlja0FuZERyYWcgKG9wdHMgPSB7fSkge1xuICBjb25zdCBzb3VyY2VVdWlkID0gZXh0cmFjdFV1aWQob3B0cywgWydzb3VyY2VFbGVtZW50SWQnLCAnc291cmNlRWxlbWVudCddKTtcbiAgY29uc3QgZGVzdFV1aWQgPSBleHRyYWN0VXVpZChvcHRzLCBbJ2Rlc3RpbmF0aW9uRWxlbWVudElkJywgJ2Rlc3RpbmF0aW9uRWxlbWVudCddKTtcbiAgY29uc3Qge1xuICAgIHN0YXJ0WCwgc3RhcnRZLFxuICAgIGVuZFgsIGVuZFksXG4gICAgZHVyYXRpb24sXG4gICAga2V5TW9kaWZpZXJGbGFnc1xuICB9ID0gb3B0cztcbiAgY29uc3QgdXJsID0gc291cmNlVXVpZCAmJiBkZXN0VXVpZFxuICAgID8gYC93ZGEvZWxlbWVudC8ke3NvdXJjZVV1aWR9L2NsaWNrQW5kRHJhZ2BcbiAgICA6ICcvd2RhL2NsaWNrQW5kRHJhZyc7XG4gIGNvbnN0IGRlc3QgPSBkZXN0VXVpZCAmJiB1dGlsLndyYXBFbGVtZW50KGRlc3RVdWlkKTtcbiAgcmV0dXJuIGF3YWl0IHRoaXMud2RhLnByb3h5LmNvbW1hbmQodXJsLCAnUE9TVCcsIHtcbiAgICBzdGFydFgsIHN0YXJ0WSxcbiAgICBlbmRYLCBlbmRZLFxuICAgIGR1cmF0aW9uLFxuICAgIGRlc3QsXG4gICAga2V5TW9kaWZpZXJGbGFncyxcbiAgfSk7XG59O1xuXG4vKipcbiAqIEB0eXBlZGVmIHtPYmplY3R9IENsaWNrQW5kRHJhZ0FuZEhvbGRPcHRpb25zXG4gKiBAcHJvcGVydHkgez9zdHJpbmd9IHNvdXJjZUVsZW1lbnRJZCB1dWlkIG9mIHRoZSBlbGVtZW50IHRvIHN0YXJ0IHRoZSBkcmFnIGZyb20uIEVpdGhlciB0aGlzIHByb3BlcnR5XG4gKiBhbmQgYGRlc3RpbmF0aW9uRWxlbWVudGAgbXVzdCBiZSBwcm92aWRlZCBvciBgc3RhcnRYYCwgYHN0YXJ0WWAsIGBlbmRYYCwgYGVuZFlgIGNvb3JkaW5hdGVzXG4gKiBtdXN0IGJlIHNldC5cbiAqIEBwcm9wZXJ0eSB7P3N0cmluZ30gZGVzdGluYXRpb25FbGVtZW50SWQgdXVpZCBvZiB0aGUgZWxlbWVudCB0byBlbmQgdGhlIGRyYWcgb24uIEVpdGhlciB0aGlzIHByb3BlcnR5XG4gKiBhbmQgYHNvdXJjZUVsZW1lbnRgIG11c3QgYmUgcHJvdmlkZWQgb3IgYHN0YXJ0WGAsIGBzdGFydFlgLCBgZW5kWGAsIGBlbmRZYCBjb29yZGluYXRlc1xuICogbXVzdCBiZSBzZXQuXG4gKiBAcHJvcGVydHkgez9udW1iZXJ9IHN0YXJ0WCBzdGFydGluZyBYIGNvb3JkaW5hdGVcbiAqIEBwcm9wZXJ0eSB7P251bWJlcn0gc3RhcnRZIHN0YXJ0aW5nIFkgY29vcmRpbmF0ZVxuICogQHByb3BlcnR5IHs/bnVtYmVyfSBlbmRYIGVuZGluZyBYIGNvb3JkaW5hdGVcbiAqIEBwcm9wZXJ0eSB7P251bWJlcn0gZW5kWSBlbmRpbmcgWSBjb29yZGluYXRlXG4gKiBAcHJvcGVydHkgeyFudW1iZXJ9IGR1cmF0aW9uIGxvbmcgY2xpY2sgZHVyYXRpb24gaW4gZmxvYXQgc2Vjb25kc1xuICogQHByb3BlcnR5IHs/bnVtYmVyfSB2ZWxvY2l0eSBkcmFnZ2luZyB2ZWxvY2l0eSBpbiBwaXhlbHMgcGVyIHNlY29uZC5cbiAqIElmIG5vdCBwcm92aWRlZCB0aGVuIHRoZSBkZWZhdWx0IHZlbG9jaXR5IGlzIHVzZWQuIFNlZVxuICogaHR0cHM6Ly9kZXZlbG9wZXIuYXBwbGUuY29tL2RvY3VtZW50YXRpb24veGN0ZXN0L3hjdWlnZXN0dXJldmVsb2NpdHlcbiAqIGZvciBtb3JlIGRldGFpbHNcbiAqIEBwcm9wZXJ0eSB7P251bWJlcn0ga2V5TW9kaWZpZXJGbGFncyBpZiBzZXQgdGhlbiB0aGUgZ2l2ZW4ga2V5IG1vZGlmaWVycyB3aWxsIGJlXG4gKiBhcHBsaWVkIHdoaWxlIGRyYWcgaXMgcGVyZm9ybWVkLiBTZWVcbiAqIGh0dHBzOi8vZGV2ZWxvcGVyLmFwcGxlLmNvbS9kb2N1bWVudGF0aW9uL3hjdGVzdC94Y3Vpa2V5bW9kaWZpZXJmbGFnc1xuICogZm9yIG1vcmUgZGV0YWlsc1xuICovXG5cbi8qKlxuICogUGVyZm9ybSBsb25nIGNsaWNrLCBkcmFnIGFuZCBob2xkIGdlc3R1cmUgb24gYW4gZWxlbWVudCBvciBieSBhYnNvbHV0ZSBjb29yZGluYXRlc1xuICpcbiAqIEBwYXJhbSB7Q2xpY2tBbmREcmFnQW5kSG9sZE9wdGlvbnN9IG9wdHNcbiAqL1xuY29tbWFuZHMubWFjb3NDbGlja0FuZERyYWdBbmRIb2xkID0gYXN5bmMgZnVuY3Rpb24gbWFjb3NDbGlja0FuZERyYWdBbmRIb2xkIChvcHRzID0ge30pIHtcbiAgY29uc3Qgc291cmNlVXVpZCA9IGV4dHJhY3RVdWlkKG9wdHMsIFsnc291cmNlRWxlbWVudElkJywgJ3NvdXJjZUVsZW1lbnQnXSk7XG4gIGNvbnN0IGRlc3RVdWlkID0gZXh0cmFjdFV1aWQob3B0cywgWydkZXN0aW5hdGlvbkVsZW1lbnRJZCcsICdkZXN0aW5hdGlvbkVsZW1lbnQnXSk7XG4gIGNvbnN0IHtcbiAgICBzdGFydFgsIHN0YXJ0WSxcbiAgICBlbmRYLCBlbmRZLFxuICAgIGR1cmF0aW9uLCBob2xkRHVyYXRpb24sXG4gICAgdmVsb2NpdHksXG4gICAga2V5TW9kaWZpZXJGbGFnc1xuICB9ID0gb3B0cztcbiAgY29uc3QgdXJsID0gc291cmNlVXVpZCAmJiBkZXN0VXVpZFxuICAgID8gYC93ZGEvZWxlbWVudC8ke3NvdXJjZVV1aWR9L2NsaWNrQW5kRHJhZ0FuZEhvbGRgXG4gICAgOiAnL3dkYS9jbGlja0FuZERyYWdBbmRIb2xkJztcbiAgY29uc3QgZGVzdCA9IGRlc3RVdWlkICYmIHV0aWwud3JhcEVsZW1lbnQoZGVzdFV1aWQpO1xuICByZXR1cm4gYXdhaXQgdGhpcy53ZGEucHJveHkuY29tbWFuZCh1cmwsICdQT1NUJywge1xuICAgIHN0YXJ0WCwgc3RhcnRZLFxuICAgIGVuZFgsIGVuZFksXG4gICAgZHVyYXRpb24sIGhvbGREdXJhdGlvbixcbiAgICB2ZWxvY2l0eSxcbiAgICBkZXN0LFxuICAgIGtleU1vZGlmaWVyRmxhZ3MsXG4gIH0pO1xufTtcblxuLyoqXG4gKiBAdHlwZWRlZiB7T2JqZWN0fSBLZXlPcHRpb25zXG4gKiBAcHJvcGVydHkgeyFzdHJpbmd9IGtleSBhIHN0cmluZywgdGhhdCByZXByZXNlbnRzIGEga2V5IHRvIHR5cGUgKHNlZVxuICogaHR0cHM6Ly9kZXZlbG9wZXIuYXBwbGUuY29tL2RvY3VtZW50YXRpb24veGN0ZXN0L3hjdWllbGVtZW50LzE1MDA2MDQtdHlwZWtleT9sYW5ndWFnZT1vYmpjXG4gKiBhbmQgaHR0cHM6Ly9kZXZlbG9wZXIuYXBwbGUuY29tL2RvY3VtZW50YXRpb24veGN0ZXN0L3hjdWlrZXlib2FyZGtleT9sYW5ndWFnZT1vYmpjKVxuICogQHByb3BlcnR5IHs/bnVtYmVyfSBtb2RpZmllckZsYWdzIGEgc2V0IG9mIG1vZGlmaWVyIGZsYWdzXG4gKiAoaHR0cHM6Ly9kZXZlbG9wZXIuYXBwbGUuY29tL2RvY3VtZW50YXRpb24veGN0ZXN0L3hjdWlrZXltb2RpZmllcmZsYWdzP2xhbmd1YWdlPW9iamMpXG4gKiB0byB1c2Ugd2hlbiB0eXBpbmcgdGhlIGtleS5cbiAqL1xuXG4vKipcbiAqIEB0eXBlZGVmIHtPYmplY3R9IEtleXNPcHRpb25zXG4gKiBAcHJvcGVydHkgez9zdHJpbmd9IGVsZW1lbnRJZCB1dWlkIG9mIHRoZSBlbGVtZW50IHRvIHNlbmQga2V5cyB0by5cbiAqIElmIHRoZSBlbGVtZW50IGlzIG5vdCBwcm92aWRlZCB0aGVuIHRoZSBrZXlzIHdpbGwgYmUgc2VudCB0byB0aGUgY3VycmVudCBhcHBsaWNhdGlvbi5cbiAqIEBwcm9wZXJ0eSB7IUFycmF5PEtleU9wdGlvbnN8c3RyaW5nPn0ga2V5cyBBcnJheSBvZiBrZXlzIHRvIHR5cGUuXG4gKiBFYWNoIGl0ZW0gY291bGQgZWl0aGVyIGJlIGEgc3RyaW5nLCB0aGF0IHJlcHJlc2VudHMgYSBrZXkgaXRzZWxmIChzZWVcbiAqIGh0dHBzOi8vZGV2ZWxvcGVyLmFwcGxlLmNvbS9kb2N1bWVudGF0aW9uL3hjdGVzdC94Y3VpZWxlbWVudC8xNTAwNjA0LXR5cGVrZXk/bGFuZ3VhZ2U9b2JqY1xuICogYW5kIGh0dHBzOi8vZGV2ZWxvcGVyLmFwcGxlLmNvbS9kb2N1bWVudGF0aW9uL3hjdGVzdC94Y3Vpa2V5Ym9hcmRrZXk/bGFuZ3VhZ2U9b2JqYylcbiAqIG9yIGEgZGljdGlvbmFyeSwgaWYgdGhlIGtleSBzaG91bGQgYWxzbyBiZSBlbnRlcmVkIHdpdGggbW9kaWZpZXJzLlxuICovXG5cbi8qKlxuICogU2VuZCBrZXlzIHRvIHRoZSBnaXZlbiBlbGVtZW50IG9yIHRvIHRoZSBhcHBsaWNhdGlvbiB1bmRlciB0ZXN0XG4gKlxuICogQHBhcmFtIHtLZXlzT3B0aW9uc30gb3B0c1xuICovXG5jb21tYW5kcy5tYWNvc0tleXMgPSBhc3luYyBmdW5jdGlvbiBtYWNvc0tleXMgKG9wdHMgPSB7fSkge1xuICBjb25zdCB1dWlkID0gZXh0cmFjdFV1aWQob3B0cyk7XG4gIGNvbnN0IHsga2V5cyB9ID0gb3B0cztcbiAgY29uc3QgdXJsID0gdXVpZCA/IGAvd2RhL2VsZW1lbnQvJHt1dWlkfS9rZXlzYCA6ICcvd2RhL2tleXMnO1xuICByZXR1cm4gYXdhaXQgdGhpcy53ZGEucHJveHkuY29tbWFuZCh1cmwsICdQT1NUJywgeyBrZXlzIH0pO1xufTtcblxuLyoqXG4gKiBAdHlwZWRlZiB7T2JqZWN0fSBQcmVzc09wdGlvbnNcbiAqIEBwcm9wZXJ0eSB7P3N0cmluZ30gZWxlbWVudElkIHV1aWQgb2YgdGhlIFRvdWNoIEJhciBlbGVtZW50IHRvIGJlIHByZXNzZWQuIEVpdGhlciB0aGlzIHByb3BlcnR5XG4gKiBvci9hbmQgeCBhbmQgeSBtdXN0IGJlIHNldC4gSWYgYm90aCBhcmUgc2V0IHRoZW4geCBhbmQgeSBhcmUgY29uc2lkZXJlZCBhcyByZWxhdGl2ZVxuICogZWxlbWVudCBjb29yZGluYXRlcy4gSWYgb25seSB4IGFuZCB5IGFyZSBzZXQgdGhlbiB0aGVzZSBhcmUgcGFyc2VkIGFzXG4gKiBhYnNvbHV0ZSBUb3VjaCBCYXIgY29vcmRpbmF0ZXMuXG4gKiBAcHJvcGVydHkgez9udW1iZXJ9IHggbG9uZyBjbGljayBYIGNvb3JkaW5hdGVcbiAqIEBwcm9wZXJ0eSB7P251bWJlcn0geSBsb25nIGNsaWNrIFkgY29vcmRpbmF0ZVxuICogQHByb3BlcnR5IHshbnVtYmVyfSBkdXJhdGlvbiB0aGUgbnVtYmVyIG9mIGZsb2F0IHNlY29uZHMgdG8gaG9sZCB0aGUgbW91c2UgYnV0dG9uXG4gKiBAcHJvcGVydHkgez9udW1iZXJ9IGtleU1vZGlmaWVyRmxhZ3MgaWYgc2V0IHRoZW4gdGhlIGdpdmVuIGtleSBtb2RpZmllcnMgd2lsbCBiZVxuICogYXBwbGllZCB3aGlsZSBjbGljayBpcyBwZXJmb3JtZWQuIFNlZVxuICogaHR0cHM6Ly9kZXZlbG9wZXIuYXBwbGUuY29tL2RvY3VtZW50YXRpb24veGN0ZXN0L3hjdWlrZXltb2RpZmllcmZsYWdzXG4gKiBmb3IgbW9yZSBkZXRhaWxzXG4gKi9cblxuLyoqXG4gKiBQZXJmb3JtIHByZXNzIGdlc3R1cmUgb24gYSBUb3VjaCBCYXIgZWxlbWVudCBvciBieSByZWxhdGl2ZS9hYnNvbHV0ZSBjb29yZGluYXRlc1xuICpcbiAqIEBwYXJhbSB7UHJlc3NPcHRpb25zfSBvcHRzXG4gKi9cbmNvbW1hbmRzLm1hY29zUHJlc3NBbmRIb2xkID0gYXN5bmMgZnVuY3Rpb24gbWFjb3NQcmVzc0FuZEhvbGQgKG9wdHMgPSB7fSkge1xuICBjb25zdCB1dWlkID0gZXh0cmFjdFV1aWQob3B0cyk7XG4gIGNvbnN0IHsgeCwgeSwgZHVyYXRpb24sIGtleU1vZGlmaWVyRmxhZ3MgfSA9IG9wdHM7XG4gIGNvbnN0IHVybCA9IHV1aWQgPyBgL3dkYS9lbGVtZW50LyR7dXVpZH0vcHJlc3NgIDogJy93ZGEvcHJlc3MnO1xuICByZXR1cm4gYXdhaXQgdGhpcy53ZGEucHJveHkuY29tbWFuZCh1cmwsICdQT1NUJywge1xuICAgIHgsIHksXG4gICAgZHVyYXRpb24sXG4gICAga2V5TW9kaWZpZXJGbGFncyxcbiAgfSk7XG59O1xuXG4vKipcbiAqIEB0eXBlZGVmIHtPYmplY3R9IFRhcE9wdGlvbnNcbiAqIEBwcm9wZXJ0eSB7P3N0cmluZ30gZWxlbWVudElkIHV1aWQgb2YgdGhlIFRvdWNoIEJhciBlbGVtZW50IHRvIHRhcC4gRWl0aGVyIHRoaXMgcHJvcGVydHlcbiAqIG9yL2FuZCB4IGFuZCB5IG11c3QgYmUgc2V0LiBJZiBib3RoIGFyZSBzZXQgdGhlbiB4IGFuZCB5IGFyZSBjb25zaWRlcmVkIGFzIHJlbGF0aXZlXG4gKiBlbGVtZW50IGNvb3JkaW5hdGVzLiBJZiBvbmx5IHggYW5kIHkgYXJlIHNldCB0aGVuIHRoZXNlIGFyZSBwYXJzZWQgYXNcbiAqIGFic29sdXRlIFRvdWNoIEJhciBjb29yZGluYXRlcy5cbiAqIEBwcm9wZXJ0eSB7P251bWJlcn0geCBjbGljayBYIGNvb3JkaW5hdGVcbiAqIEBwcm9wZXJ0eSB7P251bWJlcn0geSBjbGljayBZIGNvb3JkaW5hdGVcbiAqIEBwcm9wZXJ0eSB7P251bWJlcn0ga2V5TW9kaWZpZXJGbGFncyBpZiBzZXQgdGhlbiB0aGUgZ2l2ZW4ga2V5IG1vZGlmaWVycyB3aWxsIGJlXG4gKiBhcHBsaWVkIHdoaWxlIGNsaWNrIGlzIHBlcmZvcm1lZC4gU2VlXG4gKiBodHRwczovL2RldmVsb3Blci5hcHBsZS5jb20vZG9jdW1lbnRhdGlvbi94Y3Rlc3QveGN1aWtleW1vZGlmaWVyZmxhZ3NcbiAqIGZvciBtb3JlIGRldGFpbHNcbiAqL1xuXG4vKipcbiAqIFBlcmZvcm0gdGFwIGdlc3R1cmUgb24gYSBUb3VjaCBCYXIgZWxlbWVudCBvciBieSByZWxhdGl2ZS9hYnNvbHV0ZSBjb29yZGluYXRlc1xuICpcbiAqIEBwYXJhbSB7VGFwT3B0aW9uc30gb3B0c1xuICovXG5jb21tYW5kcy5tYWNvc1RhcCA9IGFzeW5jIGZ1bmN0aW9uIG1hY29zVGFwIChvcHRzID0ge30pIHtcbiAgY29uc3QgdXVpZCA9IGV4dHJhY3RVdWlkKG9wdHMpO1xuICBjb25zdCB7IHgsIHksIGtleU1vZGlmaWVyRmxhZ3MgfSA9IG9wdHM7XG4gIGNvbnN0IHVybCA9IHV1aWQgPyBgL3dkYS9lbGVtZW50LyR7dXVpZH0vdGFwYCA6ICcvd2RhL3RhcCc7XG4gIHJldHVybiBhd2FpdCB0aGlzLndkYS5wcm94eS5jb21tYW5kKHVybCwgJ1BPU1QnLCB7XG4gICAgeCwgeSxcbiAgICBrZXlNb2RpZmllckZsYWdzLFxuICB9KTtcbn07XG5cbi8qKlxuICogQHR5cGVkZWYge09iamVjdH0gRG91YmxlVGFwT3B0aW9uc1xuICogQHByb3BlcnR5IHs/c3RyaW5nfSBlbGVtZW50SWQgdXVpZCBvZiB0aGUgVG91Y2ggQmFyIGVsZW1lbnQgdG8gdGFwLiBFaXRoZXIgdGhpcyBwcm9wZXJ0eVxuICogb3IvYW5kIHggYW5kIHkgbXVzdCBiZSBzZXQuIElmIGJvdGggYXJlIHNldCB0aGVuIHggYW5kIHkgYXJlIGNvbnNpZGVyZWQgYXMgcmVsYXRpdmVcbiAqIGVsZW1lbnQgY29vcmRpbmF0ZXMuIElmIG9ubHkgeCBhbmQgeSBhcmUgc2V0IHRoZW4gdGhlc2UgYXJlIHBhcnNlZCBhc1xuICogYWJzb2x1dGUgVG91Y2ggQmFyIGNvb3JkaW5hdGVzLlxuICogQHByb3BlcnR5IHs/bnVtYmVyfSB4IGNsaWNrIFggY29vcmRpbmF0ZVxuICogQHByb3BlcnR5IHs/bnVtYmVyfSB5IGNsaWNrIFkgY29vcmRpbmF0ZVxuICogQHByb3BlcnR5IHs/bnVtYmVyfSBrZXlNb2RpZmllckZsYWdzIGlmIHNldCB0aGVuIHRoZSBnaXZlbiBrZXkgbW9kaWZpZXJzIHdpbGwgYmVcbiAqIGFwcGxpZWQgd2hpbGUgY2xpY2sgaXMgcGVyZm9ybWVkLiBTZWVcbiAqIGh0dHBzOi8vZGV2ZWxvcGVyLmFwcGxlLmNvbS9kb2N1bWVudGF0aW9uL3hjdGVzdC94Y3Vpa2V5bW9kaWZpZXJmbGFnc1xuICogZm9yIG1vcmUgZGV0YWlsc1xuICovXG5cbi8qKlxuICogUGVyZm9ybSB0YXAgZ2VzdHVyZSBvbiBhIFRvdWNoIEJhciBlbGVtZW50IG9yIGJ5IHJlbGF0aXZlL2Fic29sdXRlIGNvb3JkaW5hdGVzXG4gKlxuICogQHBhcmFtIHtEb3VibGVUYXBPcHRpb25zfSBvcHRzXG4gKi9cbmNvbW1hbmRzLm1hY29zRG91YmxlVGFwID0gYXN5bmMgZnVuY3Rpb24gbWFjb3NEb3VibGVUYXAgKG9wdHMgPSB7fSkge1xuICBjb25zdCB1dWlkID0gZXh0cmFjdFV1aWQob3B0cyk7XG4gIGNvbnN0IHsgeCwgeSwga2V5TW9kaWZpZXJGbGFncyB9ID0gb3B0cztcbiAgY29uc3QgdXJsID0gdXVpZCA/IGAvd2RhL2VsZW1lbnQvJHt1dWlkfS9kb3VibGVUYXBgIDogJy93ZGEvZG91YmxlVGFwJztcbiAgcmV0dXJuIGF3YWl0IHRoaXMud2RhLnByb3h5LmNvbW1hbmQodXJsLCAnUE9TVCcsIHtcbiAgICB4LCB5LFxuICAgIGtleU1vZGlmaWVyRmxhZ3MsXG4gIH0pO1xufTtcblxuLyoqXG4gKiBAdHlwZWRlZiB7T2JqZWN0fSBQcmVzc0FuZERyYWdPcHRpb25zXG4gKiBAcHJvcGVydHkgez9zdHJpbmd9IHNvdXJjZUVsZW1lbnRJZCB1dWlkIG9mIGEgVG91Y2ggQmFyIGVsZW1lbnQgdG8gc3RhcnQgdGhlIGRyYWcgZnJvbS4gRWl0aGVyIHRoaXMgcHJvcGVydHlcbiAqIGFuZCBgZGVzdGluYXRpb25FbGVtZW50YCBtdXN0IGJlIHByb3ZpZGVkIG9yIGBzdGFydFhgLCBgc3RhcnRZYCwgYGVuZFhgLCBgZW5kWWAgY29vcmRpbmF0ZXNcbiAqIG11c3QgYmUgc2V0LlxuICogQHByb3BlcnR5IHs/c3RyaW5nfSBkZXN0aW5hdGlvbkVsZW1lbnRJZCB1dWlkIG9mIGEgVG91Y2ggQmFyIGVsZW1lbnQgdG8gZW5kIHRoZSBkcmFnIG9uLiBFaXRoZXIgdGhpcyBwcm9wZXJ0eVxuICogYW5kIGBzb3VyY2VFbGVtZW50YCBtdXN0IGJlIHByb3ZpZGVkIG9yIGBzdGFydFhgLCBgc3RhcnRZYCwgYGVuZFhgLCBgZW5kWWAgY29vcmRpbmF0ZXNcbiAqIG11c3QgYmUgc2V0LlxuICogQHByb3BlcnR5IHs/bnVtYmVyfSBzdGFydFggc3RhcnRpbmcgWCBjb29yZGluYXRlXG4gKiBAcHJvcGVydHkgez9udW1iZXJ9IHN0YXJ0WSBzdGFydGluZyBZIGNvb3JkaW5hdGVcbiAqIEBwcm9wZXJ0eSB7P251bWJlcn0gZW5kWCBlbmRpbmcgWCBjb29yZGluYXRlXG4gKiBAcHJvcGVydHkgez9udW1iZXJ9IGVuZFkgZW5kaW5nIFkgY29vcmRpbmF0ZVxuICogQHByb3BlcnR5IHshbnVtYmVyfSBkdXJhdGlvbiBsb25nIGNsaWNrIGR1cmF0aW9uIGluIGZsb2F0IHNlY29uZHNcbiAqIEBwcm9wZXJ0eSB7P251bWJlcn0ga2V5TW9kaWZpZXJGbGFncyBpZiBzZXQgdGhlbiB0aGUgZ2l2ZW4ga2V5IG1vZGlmaWVycyB3aWxsIGJlXG4gKiBhcHBsaWVkIHdoaWxlIGRyYWcgaXMgcGVyZm9ybWVkLiBTZWVcbiAqIGh0dHBzOi8vZGV2ZWxvcGVyLmFwcGxlLmNvbS9kb2N1bWVudGF0aW9uL3hjdGVzdC94Y3Vpa2V5bW9kaWZpZXJmbGFnc1xuICogZm9yIG1vcmUgZGV0YWlsc1xuICovXG5cbi8qKlxuICogUGVyZm9ybSBsb25nIHByZXNzIGFuZCBkcmFnIGdlc3R1cmUgb24gYSBUb3VjaCBCYXIgZWxlbWVudCBvciBieSBhYnNvbHV0ZSBjb29yZGluYXRlc1xuICpcbiAqIEBwYXJhbSB7UHJlc3NBbmREcmFnT3B0aW9uc30gb3B0c1xuICovXG5jb21tYW5kcy5tYWNvc1ByZXNzQW5kRHJhZyA9IGFzeW5jIGZ1bmN0aW9uIG1hY29zUHJlc3NBbmREcmFnIChvcHRzID0ge30pIHtcbiAgY29uc3Qgc291cmNlVXVpZCA9IGV4dHJhY3RVdWlkKG9wdHMsIFsnc291cmNlRWxlbWVudElkJywgJ3NvdXJjZUVsZW1lbnQnXSk7XG4gIGNvbnN0IGRlc3RVdWlkID0gZXh0cmFjdFV1aWQob3B0cywgWydkZXN0aW5hdGlvbkVsZW1lbnRJZCcsICdkZXN0aW5hdGlvbkVsZW1lbnQnXSk7XG4gIGNvbnN0IHtcbiAgICBzdGFydFgsIHN0YXJ0WSxcbiAgICBlbmRYLCBlbmRZLFxuICAgIGR1cmF0aW9uLFxuICAgIGtleU1vZGlmaWVyRmxhZ3NcbiAgfSA9IG9wdHM7XG4gIGNvbnN0IHVybCA9IHNvdXJjZVV1aWQgJiYgZGVzdFV1aWRcbiAgICA/IGAvd2RhL2VsZW1lbnQvJHtzb3VyY2VVdWlkfS9wcmVzc0FuZERyYWdgXG4gICAgOiAnL3dkYS9wcmVzc0FuZERyYWcnO1xuICBjb25zdCBkZXN0ID0gZGVzdFV1aWQgJiYgdXRpbC53cmFwRWxlbWVudChkZXN0VXVpZCk7XG4gIHJldHVybiBhd2FpdCB0aGlzLndkYS5wcm94eS5jb21tYW5kKHVybCwgJ1BPU1QnLCB7XG4gICAgc3RhcnRYLCBzdGFydFksXG4gICAgZW5kWCwgZW5kWSxcbiAgICBkdXJhdGlvbixcbiAgICBkZXN0LFxuICAgIGtleU1vZGlmaWVyRmxhZ3MsXG4gIH0pO1xufTtcblxuLyoqXG4gKiBAdHlwZWRlZiB7T2JqZWN0fSBQcmVzc0FuZERyYWdBbmRIb2xkT3B0aW9uc1xuICogQHByb3BlcnR5IHs/c3RyaW5nfSBzb3VyY2VFbGVtZW50SWQgdXVpZCBvZiBhIFRvdWNoIEJhciBlbGVtZW50IHRvIHN0YXJ0IHRoZSBkcmFnIGZyb20uIEVpdGhlciB0aGlzIHByb3BlcnR5XG4gKiBhbmQgYGRlc3RpbmF0aW9uRWxlbWVudGAgbXVzdCBiZSBwcm92aWRlZCBvciBgc3RhcnRYYCwgYHN0YXJ0WWAsIGBlbmRYYCwgYGVuZFlgIGNvb3JkaW5hdGVzXG4gKiBtdXN0IGJlIHNldC5cbiAqIEBwcm9wZXJ0eSB7P3N0cmluZ30gZGVzdGluYXRpb25FbGVtZW50SWQgdXVpZCBvZiBhIFRvdWNoIEJhciBlbGVtZW50IHRvIGVuZCB0aGUgZHJhZyBvbi4gRWl0aGVyIHRoaXMgcHJvcGVydHlcbiAqIGFuZCBgc291cmNlRWxlbWVudGAgbXVzdCBiZSBwcm92aWRlZCBvciBgc3RhcnRYYCwgYHN0YXJ0WWAsIGBlbmRYYCwgYGVuZFlgIGNvb3JkaW5hdGVzXG4gKiBtdXN0IGJlIHNldC5cbiAqIEBwcm9wZXJ0eSB7P251bWJlcn0gc3RhcnRYIHN0YXJ0aW5nIFggY29vcmRpbmF0ZVxuICogQHByb3BlcnR5IHs/bnVtYmVyfSBzdGFydFkgc3RhcnRpbmcgWSBjb29yZGluYXRlXG4gKiBAcHJvcGVydHkgez9udW1iZXJ9IGVuZFggZW5kaW5nIFggY29vcmRpbmF0ZVxuICogQHByb3BlcnR5IHs/bnVtYmVyfSBlbmRZIGVuZGluZyBZIGNvb3JkaW5hdGVcbiAqIEBwcm9wZXJ0eSB7IW51bWJlcn0gZHVyYXRpb24gbG9uZyBjbGljayBkdXJhdGlvbiBpbiBmbG9hdCBzZWNvbmRzXG4gKiBAcHJvcGVydHkgez9udW1iZXJ9IHZlbG9jaXR5IGRyYWdnaW5nIHZlbG9jaXR5IGluIHBpeGVscyBwZXIgc2Vjb25kLlxuICogSWYgbm90IHByb3ZpZGVkIHRoZW4gdGhlIGRlZmF1bHQgdmVsb2NpdHkgaXMgdXNlZC4gU2VlXG4gKiBodHRwczovL2RldmVsb3Blci5hcHBsZS5jb20vZG9jdW1lbnRhdGlvbi94Y3Rlc3QveGN1aWdlc3R1cmV2ZWxvY2l0eVxuICogZm9yIG1vcmUgZGV0YWlsc1xuICogQHByb3BlcnR5IHs/bnVtYmVyfSBrZXlNb2RpZmllckZsYWdzIGlmIHNldCB0aGVuIHRoZSBnaXZlbiBrZXkgbW9kaWZpZXJzIHdpbGwgYmVcbiAqIGFwcGxpZWQgd2hpbGUgZHJhZyBpcyBwZXJmb3JtZWQuIFNlZVxuICogaHR0cHM6Ly9kZXZlbG9wZXIuYXBwbGUuY29tL2RvY3VtZW50YXRpb24veGN0ZXN0L3hjdWlrZXltb2RpZmllcmZsYWdzXG4gKiBmb3IgbW9yZSBkZXRhaWxzXG4gKi9cblxuLyoqXG4gKiBQZXJmb3JtIHByZXNzLCBkcmFnIGFuZCBob2xkIGdlc3R1cmUgb24gYSBUb3VjaCBCYXIgZWxlbWVudCBvciBieSBhYnNvbHV0ZSBUb3VjaCBCYXIgY29vcmRpbmF0ZXNcbiAqXG4gKiBAcGFyYW0ge1ByZXNzQW5kRHJhZ0FuZEhvbGRPcHRpb25zfSBvcHRzXG4gKi9cbmNvbW1hbmRzLm1hY29zUHJlc3NBbmREcmFnQW5kSG9sZCA9IGFzeW5jIGZ1bmN0aW9uIG1hY29zUHJlc3NBbmREcmFnQW5kSG9sZCAob3B0cyA9IHt9KSB7XG4gIGNvbnN0IHNvdXJjZVV1aWQgPSBleHRyYWN0VXVpZChvcHRzLCBbJ3NvdXJjZUVsZW1lbnRJZCcsICdzb3VyY2VFbGVtZW50J10pO1xuICBjb25zdCBkZXN0VXVpZCA9IGV4dHJhY3RVdWlkKG9wdHMsIFsnZGVzdGluYXRpb25FbGVtZW50SWQnLCAnZGVzdGluYXRpb25FbGVtZW50J10pO1xuICBjb25zdCB7XG4gICAgc3RhcnRYLCBzdGFydFksXG4gICAgZW5kWCwgZW5kWSxcbiAgICBkdXJhdGlvbiwgaG9sZER1cmF0aW9uLFxuICAgIHZlbG9jaXR5LFxuICAgIGtleU1vZGlmaWVyRmxhZ3NcbiAgfSA9IG9wdHM7XG4gIGNvbnN0IHVybCA9IHNvdXJjZVV1aWQgJiYgZGVzdFV1aWRcbiAgICA/IGAvd2RhL2VsZW1lbnQvJHtzb3VyY2VVdWlkfS9wcmVzc0FuZERyYWdBbmRIb2xkYFxuICAgIDogJy93ZGEvcHJlc3NBbmREcmFnQW5kSG9sZCc7XG4gIGNvbnN0IGRlc3QgPSBkZXN0VXVpZCAmJiB1dGlsLndyYXBFbGVtZW50KGRlc3RVdWlkKTtcbiAgcmV0dXJuIGF3YWl0IHRoaXMud2RhLnByb3h5LmNvbW1hbmQodXJsLCAnUE9TVCcsIHtcbiAgICBzdGFydFgsIHN0YXJ0WSxcbiAgICBlbmRYLCBlbmRZLFxuICAgIGR1cmF0aW9uLCBob2xkRHVyYXRpb24sXG4gICAgdmVsb2NpdHksXG4gICAgZGVzdCxcbiAgICBrZXlNb2RpZmllckZsYWdzLFxuICB9KTtcbn07XG5cbmV4cG9ydCBkZWZhdWx0IGNvbW1hbmRzO1xuIl0sIm1hcHBpbmdzIjoiOzs7Ozs7O0FBQUEsSUFBQUEsUUFBQSxHQUFBQyxPQUFBO0FBQ0EsSUFBQUMsT0FBQSxHQUFBRCxPQUFBO0FBRUEsTUFBTUUsUUFBUSxHQUFHLENBQUMsQ0FBQztBQUVuQixTQUFTQyxXQUFXQSxDQUFFQyxPQUFPLEdBQUcsQ0FBQyxDQUFDLEVBQUVDLFFBQVEsR0FBRyxDQUFDLFdBQVcsRUFBRSxTQUFTLENBQUMsRUFBRTtFQUN2RSxLQUFLLE1BQU1DLElBQUksSUFBSUQsUUFBUSxFQUFFO0lBQzNCLElBQUlELE9BQU8sQ0FBQ0UsSUFBSSxDQUFDLEVBQUU7TUFDakIsTUFBTUMsTUFBTSxHQUFHQyxh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