appium-xcuitest-driver 3.62.0 → 4.3.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (90) hide show
  1. package/README.md +21 -3
  2. package/build/lib/app-utils.js +9 -9
  3. package/build/lib/commands/app-management.js +37 -6
  4. package/build/lib/commands/appearance.js +4 -4
  5. package/build/lib/commands/certificate.js +12 -12
  6. package/build/lib/commands/context.js +14 -14
  7. package/build/lib/commands/cookies.js +5 -5
  8. package/build/lib/commands/deviceInfo.js +15 -2
  9. package/build/lib/commands/element.js +17 -17
  10. package/build/lib/commands/execute.js +12 -11
  11. package/build/lib/commands/file-movement.js +12 -12
  12. package/build/lib/commands/find.js +5 -5
  13. package/build/lib/commands/general.js +12 -12
  14. package/build/lib/commands/gesture.js +21 -21
  15. package/build/lib/commands/iohid.js +5 -5
  16. package/build/lib/commands/location.js +5 -5
  17. package/build/lib/commands/log.js +3 -3
  18. package/build/lib/commands/navigation.js +3 -3
  19. package/build/lib/commands/notifications.js +5 -5
  20. package/build/lib/commands/pcap.js +8 -8
  21. package/build/lib/commands/performance.js +14 -14
  22. package/build/lib/commands/proxy-helper.js +4 -4
  23. package/build/lib/commands/record-audio.js +10 -10
  24. package/build/lib/commands/recordscreen.js +9 -9
  25. package/build/lib/commands/screenshots.js +4 -4
  26. package/build/lib/commands/web.js +32 -32
  27. package/build/lib/commands/xctest.js +3 -3
  28. package/build/lib/cookies.js +3 -3
  29. package/build/lib/css-converter.js +5 -5
  30. package/build/lib/device-connections-factory.js +8 -8
  31. package/build/lib/device-log/ios-crash-log.js +11 -11
  32. package/build/lib/device-log/ios-device-log.js +3 -3
  33. package/build/lib/device-log/ios-performance-log.js +3 -3
  34. package/build/lib/device-log/ios-simulator-log.js +3 -3
  35. package/build/lib/device-log/rotating-log.js +3 -3
  36. package/build/lib/device-log/safari-console-log.js +3 -3
  37. package/build/lib/device-log/safari-network-log.js +3 -3
  38. package/build/lib/driver.js +25 -21
  39. package/build/lib/ios-deploy.js +4 -4
  40. package/build/lib/ios-fs-helpers.js +15 -15
  41. package/build/lib/logger.js +3 -3
  42. package/build/lib/py-ios-device-client.js +15 -7
  43. package/build/lib/server.js +4 -4
  44. package/build/lib/simulator-management.js +4 -4
  45. package/build/lib/utils.js +18 -18
  46. package/lib/app-utils.js +1 -1
  47. package/lib/commands/app-management.js +30 -2
  48. package/lib/commands/appearance.js +1 -1
  49. package/lib/commands/certificate.js +1 -1
  50. package/lib/commands/context.js +7 -7
  51. package/lib/commands/cookies.js +1 -1
  52. package/lib/commands/deviceInfo.js +10 -1
  53. package/lib/commands/element.js +2 -2
  54. package/lib/commands/execute.js +3 -2
  55. package/lib/commands/file-movement.js +1 -1
  56. package/lib/commands/find.js +2 -2
  57. package/lib/commands/general.js +2 -2
  58. package/lib/commands/gesture.js +2 -2
  59. package/lib/commands/iohid.js +1 -1
  60. package/lib/commands/location.js +2 -2
  61. package/lib/commands/log.js +1 -1
  62. package/lib/commands/navigation.js +1 -1
  63. package/lib/commands/notifications.js +1 -1
  64. package/lib/commands/pcap.js +1 -1
  65. package/lib/commands/performance.js +3 -1
  66. package/lib/commands/proxy-helper.js +1 -1
  67. package/lib/commands/record-audio.js +1 -1
  68. package/lib/commands/recordscreen.js +1 -1
  69. package/lib/commands/screenshots.js +1 -1
  70. package/lib/commands/web.js +2 -2
  71. package/lib/commands/xctest.js +1 -1
  72. package/lib/cookies.js +1 -1
  73. package/lib/css-converter.js +1 -1
  74. package/lib/device-connections-factory.js +1 -1
  75. package/lib/device-log/ios-crash-log.js +1 -1
  76. package/lib/device-log/ios-device-log.js +1 -1
  77. package/lib/device-log/ios-performance-log.js +1 -1
  78. package/lib/device-log/ios-simulator-log.js +1 -1
  79. package/lib/device-log/rotating-log.js +1 -1
  80. package/lib/device-log/safari-console-log.js +1 -1
  81. package/lib/device-log/safari-network-log.js +1 -1
  82. package/lib/driver.js +16 -7
  83. package/lib/ios-deploy.js +1 -1
  84. package/lib/ios-fs-helpers.js +1 -1
  85. package/lib/logger.js +1 -1
  86. package/lib/py-ios-device-client.js +8 -1
  87. package/lib/server.js +1 -1
  88. package/lib/simulator-management.js +1 -1
  89. package/lib/utils.js +4 -1
  90. package/package.json +15 -16
package/README.md CHANGED
@@ -197,7 +197,7 @@ Capability | Description
197
197
  |`appium:iosSimulatorLogsPredicate`|Set the `--predicate` flag in the ios simulator logs|e.g.: `'process != "locationd" AND process != "DTServiceHub"' AND process != "mobileassetd"`|
198
198
  |`appium:simulatorPasteboardAutomaticSync`| Handle the `-PasteboardAutomaticSync` flag when simulator process launches. It could improve launching simulator performance not to sync pasteboard with the system when this value is `off`. `on` forces the flag enabled. `system` does not provide the flag to the launching command. `on`, `off`, or `system` is available. They are case insensitive. Defaults to `off` | e.g. `system` |
199
199
  |`appium:simulatorDevicesSetPath`| This capability allows to set an alternative path to the simulator devices set in case you have multiple sets deployed on your local system. Such feature could be useful if you, for example, would like to save disk space on the main system volume. | e.g. `/MyVolume/Devices` |
200
- |`appium:customSSLCert`| Adds a root SSL certificate to IOS Simulator. The certificate content must be provided in [PEM](https://knowledge.digicert.com/quovadis/ssl-certificates/ssl-general-topics/what-is-pem-format.html) format | e.g. ```-----BEGIN CERTIFICATE-----MIIFWjCCBEKg...-----END CERTIFICATE-----```|
200
+ |`appium:customSSLCert`| Adds a root SSL certificate to IOS Simulators and real devices. Real devices only work if [py-ios-device](https://github.com/YueChen-C/py-ios-device) tool is available on the server machine. The certificate content must be provided in [PEM](https://knowledge.digicert.com/quovadis/ssl-certificates/ssl-general-topics/what-is-pem-format.html) format | e.g. ```-----BEGIN CERTIFICATE-----MIIFWjCCBEKg...-----END CERTIFICATE-----```|
201
201
  |`appium:webkitResponseTimeout`| (Real device only) Set the time, in ms, to wait for a response from WebKit in a Safari session. Defaults to `5000` | e.g., `10000`|
202
202
 
203
203
  ### Web Context
@@ -493,7 +493,7 @@ environment | dict | no | Environment variables mapping for the app. If the app
493
493
 
494
494
  ### mobile: terminateApp
495
495
 
496
- Terminates the given app on the device under test. If the app is not installed an exception is thrown. If the app is not running then nothing is done.
496
+ Terminates the given app on the device under test via [XCTest's terminate](https://developer.apple.com/documentation/xctest/xcuiapplication/1500637-terminate) API. If the app is not installed an exception is thrown. If the app is not running then nothing is done.
497
497
 
498
498
  #### Arguments
499
499
 
@@ -505,6 +505,22 @@ bundleId | string | yes | The bundle identifier of the application to be termina
505
505
 
506
506
  Either `true` if the app was successfully terminated, otherwise `false`
507
507
 
508
+ ### mobile: killApp
509
+
510
+ Kill the given app on the real device under test by instruments service via [py-ios-device](https://github.com/YueChen-C/py-ios-device) if it is installed on the server machine.
511
+ If the app is not running or failed to kill, then nothing is done.
512
+ Note that this method takes a few more time than `mobile:terminateApp` for now since it calls the instruments service via external command, `py-ios-device`.
513
+
514
+ #### Arguments
515
+
516
+ Name | Type | Required | Description | Example
517
+ --- | --- | --- | --- | ---
518
+ bundleId | string | yes | The bundle identifier of the application to be terminated | com.mycompany.myapp
519
+
520
+ #### Returned Result
521
+
522
+ Either `true` if the app was successfully killed, otherwise `false`
523
+
508
524
  ### mobile: queryAppState
509
525
 
510
526
  Queries the state of an installed application from the device under test. An exception will be thrown if the app with given identifier is not installed.
@@ -584,7 +600,8 @@ The resulting file in .trace format can be either returned directly as base64-en
584
600
  ### mobile: installCertificate
585
601
 
586
602
  Installs a custom certificate onto the device. Since Xcode SDK 11.4 Apple has added a dedicated simctl subcommand to quickly handle certificates on Simulator over CLI.
587
- On real devices or simulators before Xcode 11.4 SDK Apple provides no official way to do it via the command line. In such case (and also as a fallback if CLI setup fails) this method tries to wrap the certificate into .mobileconfig format and then deploys the wrapped file to the internal HTTP server, so one can open it via mobile Safari. Then the algorithm goes through the profile installation procedure by clicking the necessary buttons using WebDriverAgent.
603
+ On real devices the certificate could be installed via CLI if [py-ios-device](https://github.com/YueChen-C/py-ios-device) tool is available on the server machine.
604
+ On simulators before Xcode 11.4 SDK Apple provides no official way to do it via the command line. In such case (and also as a fallback if CLI setup fails) this method tries to wrap the certificate into .mobileconfig format and then deploys the wrapped file to the internal HTTP server, so one can open it via mobile Safari. Then the algorithm goes through the profile installation procedure by clicking the necessary buttons using WebDriverAgent.
588
605
 
589
606
  #### Arguments
590
607
 
@@ -626,6 +643,7 @@ The actual battery info map, which consists of the following entries:
626
643
  ### mobile: deviceInfo
627
644
 
628
645
  Returns the miscellaneous information about the device under test.
646
+ It includes device information via lockdown in a real device since XCUITest driver 4.2.0.
629
647
 
630
648
  #### Returned Result
631
649
 
@@ -15,7 +15,7 @@ var _lodash = _interopRequireDefault(require("lodash"));
15
15
 
16
16
  var _path = _interopRequireDefault(require("path"));
17
17
 
18
- var _appiumSupport = require("appium-support");
18
+ var _support = require("@appium/support");
19
19
 
20
20
  var _logger = _interopRequireDefault(require("./logger.js"));
21
21
 
@@ -26,7 +26,7 @@ async function extractPlistEntry(app, entryName) {
26
26
  const plistPath = _path.default.resolve(app, 'Info.plist');
27
27
 
28
28
  try {
29
- return (await _appiumSupport.plist.parsePlistFile(plistPath))[entryName];
29
+ return (await _support.plist.parsePlistFile(plistPath))[entryName];
30
30
  } catch (err) {
31
31
  throw new Error(`Could not extract Info.plist from '${_path.default.basename(app)}': ${err.message}`);
32
32
  }
@@ -75,7 +75,7 @@ async function verifyApplicationPlatform(app, expectedPlatform) {
75
75
  }
76
76
 
77
77
  async function readResource(resourcePath) {
78
- const data = await _appiumSupport.plist.parsePlistFile(resourcePath);
78
+ const data = await _support.plist.parsePlistFile(resourcePath);
79
79
  const result = {};
80
80
 
81
81
  for (const [key, value] of _lodash.default.toPairs(data)) {
@@ -111,7 +111,7 @@ async function parseLocalizableStrings(opts) {
111
111
  for (const subfolder of [`${language}.lproj`, localizableStringsDir, '']) {
112
112
  lprojRoot = _path.default.resolve(app, subfolder);
113
113
 
114
- if (await _appiumSupport.fs.exists(lprojRoot)) {
114
+ if (await _support.fs.exists(lprojRoot)) {
115
115
  break;
116
116
  }
117
117
 
@@ -131,7 +131,7 @@ async function parseLocalizableStrings(opts) {
131
131
  if (stringFile) {
132
132
  const dstPath = _path.default.resolve(lprojRoot, stringFile);
133
133
 
134
- if (await _appiumSupport.fs.exists(dstPath)) {
134
+ if (await _support.fs.exists(dstPath)) {
135
135
  resourcePaths.push(dstPath);
136
136
  } else {
137
137
  const message = `No '${dstPath}' resource file has been found for '${app}'`;
@@ -146,8 +146,8 @@ async function parseLocalizableStrings(opts) {
146
146
  }
147
147
  }
148
148
 
149
- if (_lodash.default.isEmpty(resourcePaths) && (await _appiumSupport.fs.exists(lprojRoot))) {
150
- const resourceFiles = (await _appiumSupport.fs.readdir(lprojRoot)).filter(name => _lodash.default.some([STRINGS_RESOURCE, STRINGSDICT_RESOURCE], x => name.endsWith(x))).map(name => _path.default.resolve(lprojRoot, name));
149
+ if (_lodash.default.isEmpty(resourcePaths) && (await _support.fs.exists(lprojRoot))) {
150
+ const resourceFiles = (await _support.fs.readdir(lprojRoot)).filter(name => _lodash.default.some([STRINGS_RESOURCE, STRINGSDICT_RESOURCE], x => name.endsWith(x))).map(name => _path.default.resolve(lprojRoot, name));
151
151
  resourcePaths.push(...resourceFiles);
152
152
  }
153
153
 
@@ -164,7 +164,7 @@ async function parseLocalizableStrings(opts) {
164
164
  };
165
165
 
166
166
  for (const resourcePath of resourcePaths) {
167
- if (!_appiumSupport.util.isSubPath(toAbsolutePath(resourcePath), toAbsolutePath(app))) {
167
+ if (!_support.util.isSubPath(toAbsolutePath(resourcePath), toAbsolutePath(app))) {
168
168
  throw new Error(`'${resourcePath}' is expected to be located under '${app}'`);
169
169
  }
170
170
 
@@ -185,4 +185,4 @@ async function parseLocalizableStrings(opts) {
185
185
  }require('source-map-support').install();
186
186
 
187
187
 
188
- //# sourceMappingURL=data:application/json;charset=utf8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbImxpYi9hcHAtdXRpbHMuanMiXSwibmFtZXMiOlsiU1RSSU5HU0RJQ1RfUkVTT1VSQ0UiLCJTVFJJTkdTX1JFU09VUkNFIiwiZXh0cmFjdFBsaXN0RW50cnkiLCJhcHAiLCJlbnRyeU5hbWUiLCJwbGlzdFBhdGgiLCJwYXRoIiwicmVzb2x2ZSIsInBsaXN0IiwicGFyc2VQbGlzdEZpbGUiLCJlcnIiLCJFcnJvciIsImJhc2VuYW1lIiwibWVzc2FnZSIsImV4dHJhY3RCdW5kbGVJZCIsImJ1bmRsZUlkIiwibG9nIiwiZGVidWciLCJ2ZXJpZnlBcHBsaWNhdGlvblBsYXRmb3JtIiwiZXhwZWN0ZWRQbGF0Zm9ybSIsInN1cHBvcnRlZFBsYXRmb3JtcyIsIkpTT04iLCJzdHJpbmdpZnkiLCJfIiwiaXNBcnJheSIsImlzU2ltdWxhdG9yIiwiaXNUdk9TIiwicHJlZml4Iiwic3VmZml4IiwiZHN0UGxhdGZvcm0iLCJpbmNsdWRlcyIsInJlYWRSZXNvdXJjZSIsInJlc291cmNlUGF0aCIsImRhdGEiLCJyZXN1bHQiLCJrZXkiLCJ2YWx1ZSIsInRvUGFpcnMiLCJpc1N0cmluZyIsInBhcnNlTG9jYWxpemFibGVTdHJpbmdzIiwib3B0cyIsImxhbmd1YWdlIiwibG9jYWxpemFibGVTdHJpbmdzRGlyIiwic3RyaW5nRmlsZSIsInN0cmljdE1vZGUiLCJpbmZvIiwibHByb2pSb290Iiwic3ViZm9sZGVyIiwiZnMiLCJleGlzdHMiLCJyZXNvdXJjZVBhdGhzIiwiZHN0UGF0aCIsInB1c2giLCJpc0VtcHR5IiwicmVzb3VyY2VGaWxlcyIsInJlYWRkaXIiLCJmaWx0ZXIiLCJuYW1lIiwic29tZSIsIngiLCJlbmRzV2l0aCIsIm1hcCIsImxlbmd0aCIsInJlc3VsdFN0cmluZ3MiLCJ0b0Fic29sdXRlUGF0aCIsInAiLCJpc0Fic29sdXRlIiwicHJvY2VzcyIsImN3ZCIsInV0aWwiLCJpc1N1YlBhdGgiLCJrZXlzIiwibWVyZ2UiLCJlIiwid2FybiJdLCJtYXBwaW5ncyI6Ijs7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QUs0RCxVQUFMLENBQWdCRCxDQUFoQixJQUFxQkEsQ0FBckIsR0FBeUIzRCxjQUFLQyxPQUFMLENBQWE0RCxPQUFPLENBQUNDLEdBQVIsRUFBYixFQUE0QkgsQ0FBNUIsQ0FBaEM7QUFDRCxHQUZEOztBQUdBLE9BQUssTUFBTWpDLFlBQVgsSUFBMkJrQixhQUEzQixFQUEwQztBQUN4QyxRQUFJLENBQUNtQixvQkFBS0MsU0FBTCxDQUFlTixjQUFjLENBQUNoQyxZQUFELENBQTdCLEVBQTZDZ0MsY0FBYyxDQUFDN0QsR0FBRCxDQUEzRCxDQUFMLEVBQXdFO0FBRXRFLFlBQU0sSUFBSVEsS0FBSixDQUFXLElBQUdxQixZQUFhLHNDQUFxQzdCLEdBQUksR0FBcEUsQ0FBTjtBQUNEOztBQUNELFFBQUk7QUFDRixZQUFNOEIsSUFBSSxHQUFHLE1BQU1GLFlBQVksQ0FBQ0MsWUFBRCxDQUEvQjs7QUFDQWhCLHNCQUFJQyxLQUFKLENBQVcsVUFBU00sZ0JBQUVnRCxJQUFGLENBQU90QyxJQUFQLEVBQWE2QixNQUFPLG9CQUFtQjlCLFlBQWEsR0FBeEU7O0FBQ0FULHNCQUFFaUQsS0FBRixDQUFRVCxhQUFSLEVBQXVCOUIsSUFBdkI7QUFDRCxLQUpELENBSUUsT0FBT3dDLENBQVAsRUFBVTtBQUNWekQsc0JBQUkwRCxJQUFKLENBQVUsaUJBQWdCMUMsWUFBYSwrQkFBOEJ5QyxDQUFDLENBQUM1RCxPQUFRLEVBQS9FO0FBQ0Q7QUFDRjs7QUFFREcsa0JBQUk2QixJQUFKLENBQVUsT0FBTXRCLGdCQUFFZ0QsSUFBRixDQUFPUixhQUFQLEVBQXNCRCxNQUFPLG9CQUFtQmhCLFNBQVUsR0FBMUU7O0FBQ0EsU0FBT2lCLGFBQVA7QUFDRCIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCBfIGZyb20gJ2xvZGFzaCc7XG5pbXBvcnQgcGF0aCBmcm9tICdwYXRoJztcbmltcG9ydCB7IHBsaXN0LCBmcywgdXRpbCB9IGZyb20gJ2FwcGl1bS1zdXBwb3J0JztcbmltcG9ydCBsb2cgZnJvbSAnLi9sb2dnZXIuanMnO1xuXG5jb25zdCBTVFJJTkdTRElDVF9SRVNPVVJDRSA9ICcuc3RyaW5nc2RpY3QnO1xuY29uc3QgU1RSSU5HU19SRVNPVVJDRSA9ICcuc3RyaW5ncyc7XG5cblxuYXN5bmMgZnVuY3Rpb24gZXh0cmFjdFBsaXN0RW50cnkgKGFwcCwgZW50cnlOYW1lKSB7XG4gIGNvbnN0IHBsaXN0UGF0aCA9IHBhdGgucmVzb2x2ZShhcHAsICdJbmZvLnBsaXN0Jyk7XG4gIHRyeSB7XG4gICAgcmV0dXJuIChhd2FpdCBwbGlzdC5wYXJzZVBsaXN0RmlsZShwbGlzdFBhdGgpKVtlbnRyeU5hbWVdO1xuICB9IGNhdGNoIChlcnIpIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoYENvdWxkIG5vdCBleHRyYWN0IEluZm8ucGxpc3QgZnJvbSAnJHtwYXRoLmJhc2VuYW1lKGFwcCl9JzogJHtlcnIubWVzc2FnZX1gKTtcbiAgfVxufVxuXG5hc3luYyBmdW5jdGlvbiBleHRyYWN0QnVuZGxlSWQgKGFwcCkge1xuICBjb25zdCBidW5kbGVJZCA9IGF3YWl0IGV4dHJhY3RQbGlzdEVudHJ5KGFwcCwgJ0NGQnVuZGxlSWRlbnRpZmllcicpO1xuICBsb2cuZGVidWcoYEdldHRpbmcgYnVuZGxlIElEIGZyb20gYXBwICcke2FwcH0nOiAnJHtidW5kbGVJZH0nYCk7XG4gIHJldHVybiBidW5kbGVJZDtcbn1cblxuLyoqXG4gKiBAdHlwZWRlZiB7T2JqZWN0fSBQbGF0Zm9ybU9wdHNcbiAqXG4gKiBAcHJvcGVydHkge2Jvb2xlYW59IGlzU2ltdWxhdG9yIC0gV2hldGhlciB0aGUgZGVzdGluYXRpb24gcGxhdGZvcm0gaXMgYSBTaW11bGF0b3JcbiAqIEBwcm9wZXJ0eSB7Ym9vbGVhbn0gaXNUdk9TIC0gV2hldGhlciB0aGUgZGVzdGluYXRpb24gcGxhdGZvcm0gaXMgYSBTaW11bGF0b3JcbiAqL1xuXG4vKipcbiAqIFZlcmlmeSB3aGV0aGVyIHRoZSBnaXZlbiBhcHBsaWNhdGlvbiBpcyBjb21wYXRpYmxlIHRvIHRoZVxuICogcGxhdGZvcm0gd2hlcmUgaXQgaXMgZ29pbmcgdG8gYmUgaW5zdGFsbGVkIGFuZCB0ZXN0ZWQuXG4gKlxuICogQHBhcmFtIHtzdHJpbmd9IGFwcCAtIFRoZSBhY3R1YWwgcGF0aCB0byB0aGUgYXBwbGljYXRpb24gYnVuZGxlXG4gKiBAcGFyYW0ge1BsYXRmb3JtT3B0c30gZXhwZWN0ZWRQbGF0Zm9ybVxuICogQHRocm93cyB7RXJyb3J9IElmIGJ1bmRsZSBhcmNoaXRlY3R1cmUgZG9lcyBub3QgbWF0Y2ggdGhlIGV4cGVjdGVkIGRldmljZSBhcmNoaXRlY3R1cmUuXG4gKi9cbmFzeW5jIGZ1bmN0aW9uIHZlcmlmeUFwcGxpY2F0aW9uUGxhdGZvcm0gKGFwcCwgZXhwZWN0ZWRQbGF0Zm9ybSkge1xuICBsb2cuZGVidWcoJ1ZlcmlmeWluZyBhcHBsaWNhdGlvbiBwbGF0Zm9ybScpO1xuXG4gIGxldCBzdXBwb3J0ZWRQbGF0Zm9ybXM7XG4gIHRyeSB7XG4gICAgc3VwcG9ydGVkUGxhdGZvcm1zID0gYXdhaXQgZXh0cmFjdFBsaXN0RW50cnkoYXBwLCAnQ0ZCdW5kbGVTdXBwb3J0ZWRQbGF0Zm9ybXMnKTtcbiAgfSBjYXRjaCAoZXJyKSB7XG4gICAgbG9nLmRlYnVnKGVyci5tZXNzYWdlKTtcbiAgICByZXR1cm47XG4gIH1cbiAgbG9nLmRlYnVnKGBDRkJ1bmRsZVN1cHBvcnRlZFBsYXRmb3JtczogJHtKU09OLnN0cmluZ2lmeShzdXBwb3J0ZWRQbGF0Zm9ybXMpfWApO1xuICBpZiAoIV8uaXNBcnJheShzdXBwb3J0ZWRQbGF0Zm9ybXMpKSB7XG4gICAgbG9nLmRlYnVnKGBDRkJ1bmRsZVN1cHBvcnRlZFBsYXRmb3JtcyBrZXkgZG9lcyBub3QgZXhpc3QgaW4gJyR7cGF0aC5iYXNlbmFtZShhcHApfSdgKTtcbiAgICByZXR1cm47XG4gIH1cblxuICBjb25zdCB7XG4gICAgaXNTaW11bGF0b3IsXG4gICAgaXNUdk9TLFxuICB9ID0gZXhwZWN0ZWRQbGF0Zm9ybTtcbiAgY29uc3QgcHJlZml4ID0gaXNUdk9TID8gJ0FwcGxlVFYnIDogJ2lQaG9uZSc7XG4gIGNvbnN0IHN1ZmZpeCA9IGlzU2ltdWxhdG9yID8gJ1NpbXVsYXRvcicgOiAnT1MnO1xuICBjb25zdCBkc3RQbGF0Zm9ybSA9IGAke3ByZWZpeH0ke3N1ZmZpeH1gO1xuICBpZiAoIXN1cHBvcnRlZFBsYXRmb3Jtcy5pbmNsdWRlcyhkc3RQbGF0Zm9ybSkpIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoYCR7aXNTaW11bGF0b3IgPyAnU2ltdWxhdG9yJyA6ICdSZWFsIGRldmljZSd9IGFyY2hpdGVjdHVyZSBpcyB1bnN1cHBvcnRlZCBieSB0aGUgJyR7YXBwfScgYXBwbGljYXRpb24uIGAgK1xuICAgICAgYE1ha2Ugc3VyZSB0aGUgY29ycmVjdCBkZXBsb3ltZW50IHRhcmdldCBoYXMgYmVlbiBzZWxlY3RlZCBmb3IgaXRzIGNvbXBpbGF0aW9uIGluIFhjb2RlLmApO1xuICB9XG59XG5cbmFzeW5jIGZ1bmN0aW9uIHJlYWRSZXNvdXJjZSAocmVzb3VyY2VQYXRoKSB7XG4gIGNvbnN0IGRhdGEgPSBhd2FpdCBwbGlzdC5wYXJzZVBsaXN0RmlsZShyZXNvdXJjZVBhdGgpO1xuICBjb25zdCByZXN1bHQgPSB7fTtcbiAgZm9yIChjb25zdCBba2V5LCB2YWx1ZV0gb2YgXy50b1BhaXJzKGRhdGEpKSB7XG4gICAgcmVzdWx0W2tleV0gPSBfLmlzU3RyaW5nKHZhbHVlKSA/IHZhbHVlIDogSlNPTi5zdHJpbmdpZnkodmFsdWUpO1xuICB9XG4gIHJldHVybiByZXN1bHQ7XG59XG5cbmFzeW5jIGZ1bmN0aW9uIHBhcnNlTG9jYWxpemFibGVTdHJpbmdzIChvcHRzKSB7XG4gIGNvbnN0IHtcbiAgICBhcHAsXG4gICAgbGFuZ3VhZ2UgPSAnZW4nLFxuICAgIGxvY2FsaXphYmxlU3RyaW5nc0RpcixcbiAgICBzdHJpbmdGaWxlLFxuICAgIHN0cmljdE1vZGUsXG4gIH0gPSBvcHRzO1xuXG4gIGlmICghYXBwKSB7XG4gICAgY29uc3QgbWVzc2FnZSA9IGBTdHJpbmdzIGV4dHJhY3Rpb24gaXMgbm90IHN1cHBvcnRlZCBpZiAnYXBwJyBjYXBhYmlsaXR5IGlzIG5vdCBzZXRgO1xuICAgIGlmIChzdHJpY3RNb2RlKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IobWVzc2FnZSk7XG4gICAgfVxuICAgIGxvZy5pbmZvKG1lc3NhZ2UpO1xuICAgIHJldHVybiB7fTtcbiAgfVxuXG4gIGxldCBscHJvalJvb3Q7XG4gIGZvciAoY29uc3Qgc3ViZm9sZGVyIG9mIFtgJHtsYW5ndWFnZX0ubHByb2pgLCBsb2NhbGl6YWJsZVN0cmluZ3NEaXIsICcnXSkge1xuICAgIGxwcm9qUm9vdCA9IHBhdGgucmVzb2x2ZShhcHAsIHN1YmZvbGRlcik7XG4gICAgaWYgKGF3YWl0IGZzLmV4aXN0cyhscHJvalJvb3QpKSB7XG4gICAgICBicmVhaztcbiAgICB9XG4gICAgY29uc3QgbWVzc2FnZSA9IGBObyAnJHtscHJvalJvb3R9JyByZXNvdXJjZXMgZm9sZGVyIGhhcyBiZWVuIGZvdW5kYDtcbiAgICBpZiAoc3RyaWN0TW9kZSkge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKG1lc3NhZ2UpO1xuICAgIH1cbiAgICBsb2cuZGVidWcobWVzc2FnZSk7XG4gIH1cbiAgbG9nLmluZm8oYFdpbGwgZXh0cmFjdCByZXNvdXJjZSBzdHJpbmdzIGZyb20gJyR7bHByb2pSb290fSdgKTtcblxuICBjb25zdCByZXNvdXJjZVBhdGhzID0gW107XG4gIGlmIChzdHJpbmdGaWxlKSB7XG4gICAgY29uc3QgZHN0UGF0aCA9IHBhdGgucmVzb2x2ZShscHJvalJvb3QsIHN0cmluZ0ZpbGUpO1xuICAgIGlmIChhd2FpdCBmcy5leGlzdHMoZHN0UGF0aCkpIHtcbiAgICAgIHJlc291cmNlUGF0aHMucHVzaChkc3RQYXRoKTtcbiAgICB9IGVsc2Uge1xuICAgICAgY29uc3QgbWVzc2FnZSA9IGBObyAnJHtkc3RQYXRofScgcmVzb3VyY2UgZmlsZSBoYXMgYmVlbiBmb3VuZCBmb3IgJyR7YXBwfSdgO1xuICAgICAgaWYgKHN0cmljdE1vZGUpIHtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKG1lc3NhZ2UpO1xuICAgICAgfVxuICAgICAgbG9nLmluZm8obWVzc2FnZSk7XG4gICAgICBsb2cuaW5mbyhgR2V0dGluZyBhbGwgdGhlIGF2YWlsYWJsZSBzdHJpbmdzIGZyb20gJyR7bHByb2pSb290fSdgKTtcbiAgICB9XG4gIH1cblxuICBpZiAoXy5pc0VtcHR5KHJlc291cmNlUGF0aHMpICYmIGF3YWl0IGZzLmV4aXN0cyhscHJvalJvb3QpKSB7XG4gICAgY29uc3QgcmVzb3VyY2VGaWxlcyA9IChhd2FpdCBmcy5yZWFkZGlyKGxwcm9qUm9vdCkpXG4gICAgICAuZmlsdGVyKChuYW1lKSA9PiBfLnNvbWUoW1NUUklOR1NfUkVTT1VSQ0UsIFNUUklOR1NESUNUX1JFU09VUkNFXSwgKHgpID0+IG5hbWUuZW5kc1dpdGgoeCkpKVxuICAgICAgLm1hcCgobmFtZSkgPT4gcGF0aC5yZXNvbHZlKGxwcm9qUm9vdCwgbmFtZSkpO1xuICAgIHJlc291cmNlUGF0aHMucHVzaCguLi5yZXNvdXJjZUZpbGVzKTtcbiAgfVxuICBsb2cuaW5mbyhgR290ICR7cmVzb3VyY2VQYXRocy5sZW5ndGh9IHJlc291cmNlIGZpbGUocykgaW4gJyR7bHByb2pSb290fSdgKTtcblxuICBpZiAoXy5pc0VtcHR5KHJlc291cmNlUGF0aHMpKSB7XG4gICAgcmV0dXJuIHt9O1xuICB9XG5cbiAgY29uc3QgcmVzdWx0U3RyaW5ncyA9IHt9O1xuICBjb25zdCB0b0Fic29sdXRlUGF0aCA9IGZ1bmN0aW9uIChwKSB7XG4gICAgcmV0dXJuIHBhdGguaXNBYnNvbHV0ZShwKSA/IHAgOiBwYXRoLnJlc29sdmUocHJvY2Vzcy5jd2QoKSwgcCk7XG4gIH07XG4gIGZvciAoY29uc3QgcmVzb3VyY2VQYXRoIG9mIHJlc291cmNlUGF0aHMpIHtcbiAgICBpZiAoIXV0aWwuaXNTdWJQYXRoKHRvQWJzb2x1dGVQYXRoKHJlc291cmNlUGF0aCksIHRvQWJzb2x1dGVQYXRoKGFwcCkpKSB7XG4gICAgICAvLyBzZWN1cml0eSBwcmVjYXV0aW9uXG4gICAgICB0aHJvdyBuZXcgRXJyb3IoYCcke3Jlc291cmNlUGF0aH0nIGlzIGV4cGVjdGVkIHRvIGJlIGxvY2F0ZWQgdW5kZXIgJyR7YXBwfSdgKTtcbiAgICB9XG4gICAgdHJ5IHtcbiAgICAgIGNvbnN0IGRhdGEgPSBhd2FpdCByZWFkUmVzb3VyY2UocmVzb3VyY2VQYXRoKTtcbiAgICAgIGxvZy5kZWJ1ZyhgUGFyc2VkICR7Xy5rZXlzKGRhdGEpLmxlbmd0aH0gc3RyaW5nKHMpIGZyb20gJyR7cmVzb3VyY2VQYXRofSdgKTtcbiAgICAgIF8ubWVyZ2UocmVzdWx0U3RyaW5ncywgZGF0YSk7XG4gICAgfSBjYXRjaCAoZSkge1xuICAgICAgbG9nLndhcm4oYENhbm5vdCBwYXJzZSAnJHtyZXNvdXJjZVBhdGh9JyByZXNvdXJjZS4gT3JpZ2luYWwgZXJyb3I6ICR7ZS5tZXNzYWdlfWApO1xuICAgIH1cbiAgfVxuXG4gIGxvZy5pbmZvKGBHb3QgJHtfLmtleXMocmVzdWx0U3RyaW5ncykubGVuZ3RofSBzdHJpbmcocykgZnJvbSAnJHtscHJvalJvb3R9J2ApO1xuICByZXR1cm4gcmVzdWx0U3RyaW5ncztcbn1cblxuZXhwb3J0IHsgZXh0cmFjdEJ1bmRsZUlkLCB2ZXJpZnlBcHBsaWNhdGlvblBsYXRmb3JtLCBwYXJzZUxvY2FsaXphYmxlU3RyaW5ncyB9O1xuIl0sImZpbGUiOiJsaWIvYXBwLXV0aWxzLmpzIiwic291cmNlUm9vdCI6Ii4uLy4uIn0=
188
+ //# sourceMappingURL=data:application/json;charset=utf8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbImxpYi9hcHAtdXRpbHMuanMiXSwibmFtZXMiOlsiU1RSSU5HU0RJQ1RfUkVTT1VSQ0UiLCJTVFJJTkdTX1JFU09VUkNFIiwiZXh0cmFjdFBsaXN0RW50cnkiLCJhcHAiLCJlbnRyeU5hbWUiLCJwbGlzdFBhdGgiLCJwYXRoIiwicmVzb2x2ZSIsInBsaXN0IiwicGFyc2VQbGlzdEZpbGUiLCJlcnIiLCJFcnJvciIsImJhc2VuYW1lIiwibWVzc2FnZSIsImV4dHJhY3RCdW5kbGVJZCIsImJ1bmRsZUlkIiwibG9nIiwiZGVidWciLCJ2ZXJpZnlBcHBsaWNhdGlvblBsYXRmb3JtIiwiZXhwZWN0ZWRQbGF0Zm9ybSIsInN1cHBvcnRlZFBsYXRmb3JtcyIsIkpTT04iLCJzdHJpbmdpZnkiLCJfIiwiaXNBcnJheSIsImlzU2ltdWxhdG9yIiwiaXNUdk9TIiwicHJlZml4Iiwic3VmZml4IiwiZHN0UGxhdGZvcm0iLCJpbmNsdWRlcyIsInJlYWRSZXNvdXJjZSIsInJlc291cmNlUGF0aCIsImRhdGEiLCJyZXN1bHQiLCJrZXkiLCJ2YWx1ZSIsInRvUGFpcnMiLCJpc1N0cmluZyIsInBhcnNlTG9jYWxpemFibGVTdHJpbmdzIiwib3B0cyIsImxhbmd1YWdlIiwibG9jYWxpemFibGVTdHJpbmdzRGlyIiwic3RyaW5nRmlsZSIsInN0cmljdE1vZGUiLCJpbmZvIiwibHByb2pSb290Iiwic3ViZm9sZGVyIiwiZnMiLCJleGlzdHMiLCJyZXNvdXJjZVBhdGhzIiwiZHN0UGF0aCIsInB1c2giLCJpc0VtcHR5IiwicmVzb3VyY2VGaWxlcyIsInJlYWRkaXIiLCJmaWx0ZXIiLCJuYW1lIiwic29tZSIsIngiLCJlbmRzV2l0aCIsIm1hcCIsImxlbmd0aCIsInJlc3VsdFN0cmluZ3MiLCJ0b0Fic29sdXRlUGF0aCIsInAiLCJpc0Fic29sdXRlIiwicHJvY2VzcyIsImN3ZCIsInV0aWwiLCJpc1N1YlBhdGgiLCJrZXlzIiwibWVyZ2UiLCJlIiwid2FybiJdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7Ozs7OztBQUFBOztBQUNBOztBQUNBOztBQUNBOztBQUVBLE1BQU1BLG9CQUFvQixHQUFHLGNBQTdCO0FBQ0EsTUFBTUMsZ0JBQWdCLEdBQUcsVUFBekI7O0FBR0EsZUFBZUMsaUJBQWYsQ0FBa0NDLEdBQWxDLEVBQXVDQyxTQUF2QyxFQUFrRDtBQUNoRCxRQUFNQyxTQUFTLEdBQUdDLGNBQUtDLE9BQUwsQ0FBYUosR0FBYixFQUFrQixZQUFsQixDQUFsQjs7QUFDQSxNQUFJO0FBQ0YsV0FBTyxDQUFDLE1BQU1LLGVBQU1DLGNBQU4sQ0FBcUJKLFNBQXJCLENBQVAsRUFBd0NELFNBQXhDLENBQVA7QUFDRCxHQUZELENBRUUsT0FBT00sR0FBUCxFQUFZO0FBQ1osVUFBTSxJQUFJQyxLQUFKLENBQVcsc0NBQXFDTCxjQUFLTSxRQUFMLENBQWNULEdBQWQsQ0FBbUIsTUFBS08sR0FBRyxDQUFDRyxPQUFRLEVBQXBGLENBQU47QUFDRDtBQUNGOztBQUVELGVBQWVDLGVBQWYsQ0FBZ0NYLEdBQWhDLEVBQXFDO0FBQ25DLFFBQU1ZLFFBQVEsR0FBRyxNQUFNYixpQkFBaUIsQ0FBQ0MsR0FBRCxFQUFNLG9CQUFOLENBQXhDOztBQUNBYSxrQkFBSUMsS0FBSixDQUFXLCtCQUE4QmQsR0FBSSxPQUFNWSxRQUFTLEdBQTVEOztBQUNBLFNBQU9BLFFBQVA7QUFDRDs7QUFpQkQsZUFBZUcseUJBQWYsQ0FBMENmLEdBQTFDLEVBQStDZ0IsZ0JBQS9DLEVBQWlFO0FBQy9ESCxrQkFBSUMsS0FBSixDQUFVLGdDQUFWOztBQUVBLE1BQUlHLGtCQUFKOztBQUNBLE1BQUk7QUFDRkEsSUFBQUEsa0JBQWtCLEdBQUcsTUFBTWxCLGlCQUFpQixDQUFDQyxHQUFELEVBQU0sNEJBQU4sQ0FBNUM7QUFDRCxHQUZELENBRUUsT0FBT08sR0FBUCxFQUFZO0FBQ1pNLG9CQUFJQyxLQUFKLENBQVVQLEdBQUcsQ0FBQ0csT0FBZDs7QUFDQTtBQUNEOztBQUNERyxrQkFBSUMsS0FBSixDQUFXLCtCQUE4QkksSUFBSSxDQUFDQyxTQUFMLENBQWVGLGtCQUFmLENBQW1DLEVBQTVFOztBQUNBLE1BQUksQ0FBQ0csZ0JBQUVDLE9BQUYsQ0FBVUosa0JBQVYsQ0FBTCxFQUFvQztBQUNsQ0osb0JBQUlDLEtBQUosQ0FBVyxxREFBb0RYLGNBQUtNLFFBQUwsQ0FBY1QsR0FBZCxDQUFtQixHQUFsRjs7QUFDQTtBQUNEOztBQUVELFFBQU07QUFDSnNCLElBQUFBLFdBREk7QUFFSkMsSUFBQUE7QUFGSSxNQUdGUCxnQkFISjtBQUlBLFFBQU1RLE1BQU0sR0FBR0QsTUFBTSxHQUFHLFNBQUgsR0FBZSxRQUFwQztBQUNBLFFBQU1FLE1BQU0sR0FBR0gsV0FBVyxHQUFHLFdBQUgsR0FBaUIsSUFBM0M7QUFDQSxRQUFNSSxXQUFXLEdBQUksR0FBRUYsTUFBTyxHQUFFQyxNQUFPLEVBQXZDOztBQUNBLE1BQUksQ0FBQ1Isa0JBQWtCLENBQUNVLFFBQW5CLENBQTRCRCxXQUE1QixDQUFMLEVBQStDO0FBQzdDLFVBQU0sSUFBSWxCLEtBQUosQ0FBVyxHQUFFYyxXQUFXLEdBQUcsV0FBSCxHQUFpQixhQUFjLHdDQUF1Q3RCLEdBQUksaUJBQXhGLEdBQ2IseUZBREcsQ0FBTjtBQUVEO0FBQ0Y7O0FBRUQsZUFBZTRCLFlBQWYsQ0FBNkJDLFlBQTdCLEVBQTJDO0FBQ3pDLFFBQU1DLElBQUksR0FBRyxNQUFNekIsZUFBTUMsY0FBTixDQUFxQnVCLFlBQXJCLENBQW5CO0FBQ0EsUUFBTUUsTUFBTSxHQUFHLEVBQWY7O0FBQ0EsT0FBSyxNQUFNLENBQUNDLEdBQUQsRUFBTUMsS0FBTixDQUFYLElBQTJCYixnQkFBRWMsT0FBRixDQUFVSixJQUFWLENBQTNCLEVBQTRDO0FBQzFDQyxJQUFBQSxNQUFNLENBQUNDLEdBQUQsQ0FBTixHQUFjWixnQkFBRWUsUUFBRixDQUFXRixLQUFYLElBQW9CQSxLQUFwQixHQUE0QmYsSUFBSSxDQUFDQyxTQUFMLENBQWVjLEtBQWYsQ0FBMUM7QUFDRDs7QUFDRCxTQUFPRixNQUFQO0FBQ0Q7O0FBRUQsZUFBZUssdUJBQWYsQ0FBd0NDLElBQXhDLEVBQThDO0FBQzVDLFFBQU07QUFDSnJDLElBQUFBLEdBREk7QUFFSnNDLElBQUFBLFFBQVEsR0FBRyxJQUZQO0FBR0pDLElBQUFBLHFCQUhJO0FBSUpDLElBQUFBLFVBSkk7QUFLSkMsSUFBQUE7QUFMSSxNQU1GSixJQU5KOztBQVFBLE1BQUksQ0FBQ3JDLEdBQUwsRUFBVTtBQUNSLFVBQU1VLE9BQU8sR0FBSSxvRUFBakI7O0FBQ0EsUUFBSStCLFVBQUosRUFBZ0I7QUFDZCxZQUFNLElBQUlqQyxLQUFKLENBQVVFLE9BQVYsQ0FBTjtBQUNEOztBQUNERyxvQkFBSTZCLElBQUosQ0FBU2hDLE9BQVQ7O0FBQ0EsV0FBTyxFQUFQO0FBQ0Q7O0FBRUQsTUFBSWlDLFNBQUo7O0FBQ0EsT0FBSyxNQUFNQyxTQUFYLElBQXdCLENBQUUsR0FBRU4sUUFBUyxRQUFiLEVBQXNCQyxxQkFBdEIsRUFBNkMsRUFBN0MsQ0FBeEIsRUFBMEU7QUFDeEVJLElBQUFBLFNBQVMsR0FBR3hDLGNBQUtDLE9BQUwsQ0FBYUosR0FBYixFQUFrQjRDLFNBQWxCLENBQVo7O0FBQ0EsUUFBSSxNQUFNQyxZQUFHQyxNQUFILENBQVVILFNBQVYsQ0FBVixFQUFnQztBQUM5QjtBQUNEOztBQUNELFVBQU1qQyxPQUFPLEdBQUksT0FBTWlDLFNBQVUsbUNBQWpDOztBQUNBLFFBQUlGLFVBQUosRUFBZ0I7QUFDZCxZQUFNLElBQUlqQyxLQUFKLENBQVVFLE9BQVYsQ0FBTjtBQUNEOztBQUNERyxvQkFBSUMsS0FBSixDQUFVSixPQUFWO0FBQ0Q7O0FBQ0RHLGtCQUFJNkIsSUFBSixDQUFVLHVDQUFzQ0MsU0FBVSxHQUExRDs7QUFFQSxRQUFNSSxhQUFhLEdBQUcsRUFBdEI7O0FBQ0EsTUFBSVAsVUFBSixFQUFnQjtBQUNkLFVBQU1RLE9BQU8sR0FBRzdDLGNBQUtDLE9BQUwsQ0FBYXVDLFNBQWIsRUFBd0JILFVBQXhCLENBQWhCOztBQUNBLFFBQUksTUFBTUssWUFBR0MsTUFBSCxDQUFVRSxPQUFWLENBQVYsRUFBOEI7QUFDNUJELE1BQUFBLGFBQWEsQ0FBQ0UsSUFBZCxDQUFtQkQsT0FBbkI7QUFDRCxLQUZELE1BRU87QUFDTCxZQUFNdEMsT0FBTyxHQUFJLE9BQU1zQyxPQUFRLHVDQUFzQ2hELEdBQUksR0FBekU7O0FBQ0EsVUFBSXlDLFVBQUosRUFBZ0I7QUFDZCxjQUFNLElBQUlqQyxLQUFKLENBQVVFLE9BQVYsQ0FBTjtBQUNEOztBQUNERyxzQkFBSTZCLElBQUosQ0FBU2hDLE9BQVQ7O0FBQ0FHLHNCQUFJNkIsSUFBSixDQUFVLDJDQUEwQ0MsU0FBVSxHQUE5RDtBQUNEO0FBQ0Y7O0FBRUQsTUFBSXZCLGdCQUFFOEIsT0FBRixDQUFVSCxhQUFWLE1BQTRCLE1BQU1GLFlBQUdDLE1BQUgsQ0FBVUgsU0FBVixDQUFsQyxDQUFKLEVBQTREO0FBQzFELFVBQU1RLGFBQWEsR0FBRyxDQUFDLE1BQU1OLFlBQUdPLE9BQUgsQ0FBV1QsU0FBWCxDQUFQLEVBQ25CVSxNQURtQixDQUNYQyxJQUFELElBQVVsQyxnQkFBRW1DLElBQUYsQ0FBTyxDQUFDekQsZ0JBQUQsRUFBbUJELG9CQUFuQixDQUFQLEVBQWtEMkQsQ0FBRCxJQUFPRixJQUFJLENBQUNHLFFBQUwsQ0FBY0QsQ0FBZCxDQUF4RCxDQURFLEVBRW5CRSxHQUZtQixDQUVkSixJQUFELElBQVVuRCxjQUFLQyxPQUFMLENBQWF1QyxTQUFiLEVBQXdCVyxJQUF4QixDQUZLLENBQXRCO0FBR0FQLElBQUFBLGFBQWEsQ0FBQ0UsSUFBZCxDQUFtQixHQUFHRSxhQUF0QjtBQUNEOztBQUNEdEMsa0JBQUk2QixJQUFKLENBQVUsT0FBTUssYUFBYSxDQUFDWSxNQUFPLHlCQUF3QmhCLFNBQVUsR0FBdkU7O0FBRUEsTUFBSXZCLGdCQUFFOEIsT0FBRixDQUFVSCxhQUFWLENBQUosRUFBOEI7QUFDNUIsV0FBTyxFQUFQO0FBQ0Q7O0FBRUQsUUFBTWEsYUFBYSxHQUFHLEVBQXRCOztBQUNBLFFBQU1DLGNBQWMsR0FBRyxVQUFVQyxDQUFWLEVBQWE7QUFDbEMsV0FBTzNELGNBQUs0RCxVQUFMLENBQWdCRCxDQUFoQixJQUFxQkEsQ0FBckIsR0FBeUIzRCxjQUFLQyxPQUFMLENBQWE0RCxPQUFPLENBQUNDLEdBQVIsRUFBYixFQUE0QkgsQ0FBNUIsQ0FBaEM7QUFDRCxHQUZEOztBQUdBLE9BQUssTUFBTWpDLFlBQVgsSUFBMkJrQixhQUEzQixFQUEwQztBQUN4QyxRQUFJLENBQUNtQixjQUFLQyxTQUFMLENBQWVOLGNBQWMsQ0FBQ2hDLFlBQUQsQ0FBN0IsRUFBNkNnQyxjQUFjLENBQUM3RCxHQUFELENBQTNELENBQUwsRUFBd0U7QUFFdEUsWUFBTSxJQUFJUSxLQUFKLENBQVcsSUFBR3FCLFlBQWEsc0NBQXFDN0IsR0FBSSxHQUFwRSxDQUFOO0FBQ0Q7O0FBQ0QsUUFBSTtBQUNGLFlBQU04QixJQUFJLEdBQUcsTUFBTUYsWUFBWSxDQUFDQyxZQUFELENBQS9COztBQUNBaEIsc0JBQUlDLEtBQUosQ0FBVyxVQUFTTSxnQkFBRWdELElBQUYsQ0FBT3RDLElBQVAsRUFBYTZCLE1BQU8sb0JBQW1COUIsWUFBYSxHQUF4RTs7QUFDQVQsc0JBQUVpRCxLQUFGLENBQVFULGFBQVIsRUFBdUI5QixJQUF2QjtBQUNELEtBSkQsQ0FJRSxPQUFPd0MsQ0FBUCxFQUFVO0FBQ1Z6RCxzQkFBSTBELElBQUosQ0FBVSxpQkFBZ0IxQyxZQUFhLCtCQUE4QnlDLENBQUMsQ0FBQzVELE9BQVEsRUFBL0U7QUFDRDtBQUNGOztBQUVERyxrQkFBSTZCLElBQUosQ0FBVSxPQUFNdEIsZ0JBQUVnRCxJQUFGLENBQU9SLGFBQVAsRUFBc0JELE1BQU8sb0JBQW1CaEIsU0FBVSxHQUExRTs7QUFDQSxTQUFPaUIsYUFBUDtBQUNEIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IF8gZnJvbSAnbG9kYXNoJztcbmltcG9ydCBwYXRoIGZyb20gJ3BhdGgnO1xuaW1wb3J0IHsgcGxpc3QsIGZzLCB1dGlsIH0gZnJvbSAnQGFwcGl1bS9zdXBwb3J0JztcbmltcG9ydCBsb2cgZnJvbSAnLi9sb2dnZXIuanMnO1xuXG5jb25zdCBTVFJJTkdTRElDVF9SRVNPVVJDRSA9ICcuc3RyaW5nc2RpY3QnO1xuY29uc3QgU1RSSU5HU19SRVNPVVJDRSA9ICcuc3RyaW5ncyc7XG5cblxuYXN5bmMgZnVuY3Rpb24gZXh0cmFjdFBsaXN0RW50cnkgKGFwcCwgZW50cnlOYW1lKSB7XG4gIGNvbnN0IHBsaXN0UGF0aCA9IHBhdGgucmVzb2x2ZShhcHAsICdJbmZvLnBsaXN0Jyk7XG4gIHRyeSB7XG4gICAgcmV0dXJuIChhd2FpdCBwbGlzdC5wYXJzZVBsaXN0RmlsZShwbGlzdFBhdGgpKVtlbnRyeU5hbWVdO1xuICB9IGNhdGNoIChlcnIpIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoYENvdWxkIG5vdCBleHRyYWN0IEluZm8ucGxpc3QgZnJvbSAnJHtwYXRoLmJhc2VuYW1lKGFwcCl9JzogJHtlcnIubWVzc2FnZX1gKTtcbiAgfVxufVxuXG5hc3luYyBmdW5jdGlvbiBleHRyYWN0QnVuZGxlSWQgKGFwcCkge1xuICBjb25zdCBidW5kbGVJZCA9IGF3YWl0IGV4dHJhY3RQbGlzdEVudHJ5KGFwcCwgJ0NGQnVuZGxlSWRlbnRpZmllcicpO1xuICBsb2cuZGVidWcoYEdldHRpbmcgYnVuZGxlIElEIGZyb20gYXBwICcke2FwcH0nOiAnJHtidW5kbGVJZH0nYCk7XG4gIHJldHVybiBidW5kbGVJZDtcbn1cblxuLyoqXG4gKiBAdHlwZWRlZiB7T2JqZWN0fSBQbGF0Zm9ybU9wdHNcbiAqXG4gKiBAcHJvcGVydHkge2Jvb2xlYW59IGlzU2ltdWxhdG9yIC0gV2hldGhlciB0aGUgZGVzdGluYXRpb24gcGxhdGZvcm0gaXMgYSBTaW11bGF0b3JcbiAqIEBwcm9wZXJ0eSB7Ym9vbGVhbn0gaXNUdk9TIC0gV2hldGhlciB0aGUgZGVzdGluYXRpb24gcGxhdGZvcm0gaXMgYSBTaW11bGF0b3JcbiAqL1xuXG4vKipcbiAqIFZlcmlmeSB3aGV0aGVyIHRoZSBnaXZlbiBhcHBsaWNhdGlvbiBpcyBjb21wYXRpYmxlIHRvIHRoZVxuICogcGxhdGZvcm0gd2hlcmUgaXQgaXMgZ29pbmcgdG8gYmUgaW5zdGFsbGVkIGFuZCB0ZXN0ZWQuXG4gKlxuICogQHBhcmFtIHtzdHJpbmd9IGFwcCAtIFRoZSBhY3R1YWwgcGF0aCB0byB0aGUgYXBwbGljYXRpb24gYnVuZGxlXG4gKiBAcGFyYW0ge1BsYXRmb3JtT3B0c30gZXhwZWN0ZWRQbGF0Zm9ybVxuICogQHRocm93cyB7RXJyb3J9IElmIGJ1bmRsZSBhcmNoaXRlY3R1cmUgZG9lcyBub3QgbWF0Y2ggdGhlIGV4cGVjdGVkIGRldmljZSBhcmNoaXRlY3R1cmUuXG4gKi9cbmFzeW5jIGZ1bmN0aW9uIHZlcmlmeUFwcGxpY2F0aW9uUGxhdGZvcm0gKGFwcCwgZXhwZWN0ZWRQbGF0Zm9ybSkge1xuICBsb2cuZGVidWcoJ1ZlcmlmeWluZyBhcHBsaWNhdGlvbiBwbGF0Zm9ybScpO1xuXG4gIGxldCBzdXBwb3J0ZWRQbGF0Zm9ybXM7XG4gIHRyeSB7XG4gICAgc3VwcG9ydGVkUGxhdGZvcm1zID0gYXdhaXQgZXh0cmFjdFBsaXN0RW50cnkoYXBwLCAnQ0ZCdW5kbGVTdXBwb3J0ZWRQbGF0Zm9ybXMnKTtcbiAgfSBjYXRjaCAoZXJyKSB7XG4gICAgbG9nLmRlYnVnKGVyci5tZXNzYWdlKTtcbiAgICByZXR1cm47XG4gIH1cbiAgbG9nLmRlYnVnKGBDRkJ1bmRsZVN1cHBvcnRlZFBsYXRmb3JtczogJHtKU09OLnN0cmluZ2lmeShzdXBwb3J0ZWRQbGF0Zm9ybXMpfWApO1xuICBpZiAoIV8uaXNBcnJheShzdXBwb3J0ZWRQbGF0Zm9ybXMpKSB7XG4gICAgbG9nLmRlYnVnKGBDRkJ1bmRsZVN1cHBvcnRlZFBsYXRmb3JtcyBrZXkgZG9lcyBub3QgZXhpc3QgaW4gJyR7cGF0aC5iYXNlbmFtZShhcHApfSdgKTtcbiAgICByZXR1cm47XG4gIH1cblxuICBjb25zdCB7XG4gICAgaXNTaW11bGF0b3IsXG4gICAgaXNUdk9TLFxuICB9ID0gZXhwZWN0ZWRQbGF0Zm9ybTtcbiAgY29uc3QgcHJlZml4ID0gaXNUdk9TID8gJ0FwcGxlVFYnIDogJ2lQaG9uZSc7XG4gIGNvbnN0IHN1ZmZpeCA9IGlzU2ltdWxhdG9yID8gJ1NpbXVsYXRvcicgOiAnT1MnO1xuICBjb25zdCBkc3RQbGF0Zm9ybSA9IGAke3ByZWZpeH0ke3N1ZmZpeH1gO1xuICBpZiAoIXN1cHBvcnRlZFBsYXRmb3Jtcy5pbmNsdWRlcyhkc3RQbGF0Zm9ybSkpIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoYCR7aXNTaW11bGF0b3IgPyAnU2ltdWxhdG9yJyA6ICdSZWFsIGRldmljZSd9IGFyY2hpdGVjdHVyZSBpcyB1bnN1cHBvcnRlZCBieSB0aGUgJyR7YXBwfScgYXBwbGljYXRpb24uIGAgK1xuICAgICAgYE1ha2Ugc3VyZSB0aGUgY29ycmVjdCBkZXBsb3ltZW50IHRhcmdldCBoYXMgYmVlbiBzZWxlY3RlZCBmb3IgaXRzIGNvbXBpbGF0aW9uIGluIFhjb2RlLmApO1xuICB9XG59XG5cbmFzeW5jIGZ1bmN0aW9uIHJlYWRSZXNvdXJjZSAocmVzb3VyY2VQYXRoKSB7XG4gIGNvbnN0IGRhdGEgPSBhd2FpdCBwbGlzdC5wYXJzZVBsaXN0RmlsZShyZXNvdXJjZVBhdGgpO1xuICBjb25zdCByZXN1bHQgPSB7fTtcbiAgZm9yIChjb25zdCBba2V5LCB2YWx1ZV0gb2YgXy50b1BhaXJzKGRhdGEpKSB7XG4gICAgcmVzdWx0W2tleV0gPSBfLmlzU3RyaW5nKHZhbHVlKSA/IHZhbHVlIDogSlNPTi5zdHJpbmdpZnkodmFsdWUpO1xuICB9XG4gIHJldHVybiByZXN1bHQ7XG59XG5cbmFzeW5jIGZ1bmN0aW9uIHBhcnNlTG9jYWxpemFibGVTdHJpbmdzIChvcHRzKSB7XG4gIGNvbnN0IHtcbiAgICBhcHAsXG4gICAgbGFuZ3VhZ2UgPSAnZW4nLFxuICAgIGxvY2FsaXphYmxlU3RyaW5nc0RpcixcbiAgICBzdHJpbmdGaWxlLFxuICAgIHN0cmljdE1vZGUsXG4gIH0gPSBvcHRzO1xuXG4gIGlmICghYXBwKSB7XG4gICAgY29uc3QgbWVzc2FnZSA9IGBTdHJpbmdzIGV4dHJhY3Rpb24gaXMgbm90IHN1cHBvcnRlZCBpZiAnYXBwJyBjYXBhYmlsaXR5IGlzIG5vdCBzZXRgO1xuICAgIGlmIChzdHJpY3RNb2RlKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IobWVzc2FnZSk7XG4gICAgfVxuICAgIGxvZy5pbmZvKG1lc3NhZ2UpO1xuICAgIHJldHVybiB7fTtcbiAgfVxuXG4gIGxldCBscHJvalJvb3Q7XG4gIGZvciAoY29uc3Qgc3ViZm9sZGVyIG9mIFtgJHtsYW5ndWFnZX0ubHByb2pgLCBsb2NhbGl6YWJsZVN0cmluZ3NEaXIsICcnXSkge1xuICAgIGxwcm9qUm9vdCA9IHBhdGgucmVzb2x2ZShhcHAsIHN1YmZvbGRlcik7XG4gICAgaWYgKGF3YWl0IGZzLmV4aXN0cyhscHJvalJvb3QpKSB7XG4gICAgICBicmVhaztcbiAgICB9XG4gICAgY29uc3QgbWVzc2FnZSA9IGBObyAnJHtscHJvalJvb3R9JyByZXNvdXJjZXMgZm9sZGVyIGhhcyBiZWVuIGZvdW5kYDtcbiAgICBpZiAoc3RyaWN0TW9kZSkge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKG1lc3NhZ2UpO1xuICAgIH1cbiAgICBsb2cuZGVidWcobWVzc2FnZSk7XG4gIH1cbiAgbG9nLmluZm8oYFdpbGwgZXh0cmFjdCByZXNvdXJjZSBzdHJpbmdzIGZyb20gJyR7bHByb2pSb290fSdgKTtcblxuICBjb25zdCByZXNvdXJjZVBhdGhzID0gW107XG4gIGlmIChzdHJpbmdGaWxlKSB7XG4gICAgY29uc3QgZHN0UGF0aCA9IHBhdGgucmVzb2x2ZShscHJvalJvb3QsIHN0cmluZ0ZpbGUpO1xuICAgIGlmIChhd2FpdCBmcy5leGlzdHMoZHN0UGF0aCkpIHtcbiAgICAgIHJlc291cmNlUGF0aHMucHVzaChkc3RQYXRoKTtcbiAgICB9IGVsc2Uge1xuICAgICAgY29uc3QgbWVzc2FnZSA9IGBObyAnJHtkc3RQYXRofScgcmVzb3VyY2UgZmlsZSBoYXMgYmVlbiBmb3VuZCBmb3IgJyR7YXBwfSdgO1xuICAgICAgaWYgKHN0cmljdE1vZGUpIHtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKG1lc3NhZ2UpO1xuICAgICAgfVxuICAgICAgbG9nLmluZm8obWVzc2FnZSk7XG4gICAgICBsb2cuaW5mbyhgR2V0dGluZyBhbGwgdGhlIGF2YWlsYWJsZSBzdHJpbmdzIGZyb20gJyR7bHByb2pSb290fSdgKTtcbiAgICB9XG4gIH1cblxuICBpZiAoXy5pc0VtcHR5KHJlc291cmNlUGF0aHMpICYmIGF3YWl0IGZzLmV4aXN0cyhscHJvalJvb3QpKSB7XG4gICAgY29uc3QgcmVzb3VyY2VGaWxlcyA9IChhd2FpdCBmcy5yZWFkZGlyKGxwcm9qUm9vdCkpXG4gICAgICAuZmlsdGVyKChuYW1lKSA9PiBfLnNvbWUoW1NUUklOR1NfUkVTT1VSQ0UsIFNUUklOR1NESUNUX1JFU09VUkNFXSwgKHgpID0+IG5hbWUuZW5kc1dpdGgoeCkpKVxuICAgICAgLm1hcCgobmFtZSkgPT4gcGF0aC5yZXNvbHZlKGxwcm9qUm9vdCwgbmFtZSkpO1xuICAgIHJlc291cmNlUGF0aHMucHVzaCguLi5yZXNvdXJjZUZpbGVzKTtcbiAgfVxuICBsb2cuaW5mbyhgR290ICR7cmVzb3VyY2VQYXRocy5sZW5ndGh9IHJlc291cmNlIGZpbGUocykgaW4gJyR7bHByb2pSb290fSdgKTtcblxuICBpZiAoXy5pc0VtcHR5KHJlc291cmNlUGF0aHMpKSB7XG4gICAgcmV0dXJuIHt9O1xuICB9XG5cbiAgY29uc3QgcmVzdWx0U3RyaW5ncyA9IHt9O1xuICBjb25zdCB0b0Fic29sdXRlUGF0aCA9IGZ1bmN0aW9uIChwKSB7XG4gICAgcmV0dXJuIHBhdGguaXNBYnNvbHV0ZShwKSA/IHAgOiBwYXRoLnJlc29sdmUocHJvY2Vzcy5jd2QoKSwgcCk7XG4gIH07XG4gIGZvciAoY29uc3QgcmVzb3VyY2VQYXRoIG9mIHJlc291cmNlUGF0aHMpIHtcbiAgICBpZiAoIXV0aWwuaXNTdWJQYXRoKHRvQWJzb2x1dGVQYXRoKHJlc291cmNlUGF0aCksIHRvQWJzb2x1dGVQYXRoKGFwcCkpKSB7XG4gICAgICAvLyBzZWN1cml0eSBwcmVjYXV0aW9uXG4gICAgICB0aHJvdyBuZXcgRXJyb3IoYCcke3Jlc291cmNlUGF0aH0nIGlzIGV4cGVjdGVkIHRvIGJlIGxvY2F0ZWQgdW5kZXIgJyR7YXBwfSdgKTtcbiAgICB9XG4gICAgdHJ5IHtcbiAgICAgIGNvbnN0IGRhdGEgPSBhd2FpdCByZWFkUmVzb3VyY2UocmVzb3VyY2VQYXRoKTtcbiAgICAgIGxvZy5kZWJ1ZyhgUGFyc2VkICR7Xy5rZXlzKGRhdGEpLmxlbmd0aH0gc3RyaW5nKHMpIGZyb20gJyR7cmVzb3VyY2VQYXRofSdgKTtcbiAgICAgIF8ubWVyZ2UocmVzdWx0U3RyaW5ncywgZGF0YSk7XG4gICAgfSBjYXRjaCAoZSkge1xuICAgICAgbG9nLndhcm4oYENhbm5vdCBwYXJzZSAnJHtyZXNvdXJjZVBhdGh9JyByZXNvdXJjZS4gT3JpZ2luYWwgZXJyb3I6ICR7ZS5tZXNzYWdlfWApO1xuICAgIH1cbiAgfVxuXG4gIGxvZy5pbmZvKGBHb3QgJHtfLmtleXMocmVzdWx0U3RyaW5ncykubGVuZ3RofSBzdHJpbmcocykgZnJvbSAnJHtscHJvalJvb3R9J2ApO1xuICByZXR1cm4gcmVzdWx0U3RyaW5ncztcbn1cblxuZXhwb3J0IHsgZXh0cmFjdEJ1bmRsZUlkLCB2ZXJpZnlBcHBsaWNhdGlvblBsYXRmb3JtLCBwYXJzZUxvY2FsaXphYmxlU3RyaW5ncyB9O1xuIl0sImZpbGUiOiJsaWIvYXBwLXV0aWxzLmpzIiwic291cmNlUm9vdCI6Ii4uLy4uIn0=
@@ -11,20 +11,22 @@ require("source-map-support/register");
11
11
 
12
12
  var _lodash = _interopRequireDefault(require("lodash"));
13
13
 
14
- var _appiumSupport = require("appium-support");
14
+ var _support = require("@appium/support");
15
15
 
16
16
  var _logger = _interopRequireDefault(require("../logger"));
17
17
 
18
- var _appiumBaseDriver = require("appium-base-driver");
18
+ var _baseDriver = require("@appium/base-driver");
19
19
 
20
20
  var _appiumIosDevice = require("appium-ios-device");
21
21
 
22
+ var _pyIosDeviceClient = _interopRequireDefault(require("../py-ios-device-client"));
23
+
22
24
  const commands = {};
23
25
 
24
26
  function requireOptions(opts = {}, reqKeys = []) {
25
27
  for (const key of reqKeys) {
26
28
  if (!_lodash.default.isString(opts[key]) || _lodash.default.isEmpty(opts[key])) {
27
- throw new _appiumBaseDriver.errors.InvalidArgumentError(`'${key}' is expected to be a valid string. '${opts[key]}' is given instead`);
29
+ throw new _baseDriver.errors.InvalidArgumentError(`'${key}' is expected to be a valid string. '${opts[key]}' is given instead`);
28
30
  }
29
31
  }
30
32
 
@@ -41,7 +43,7 @@ commands.mobileInstallApp = async function mobileInstallApp(opts = {}) {
41
43
 
42
44
  _logger.default.info(`Installing '${srcAppPath}' to the ${this.isRealDevice() ? 'real device' : 'Simulator'} ` + `with UDID '${this.opts.device.udid}'`);
43
45
 
44
- if (!(await _appiumSupport.fs.exists(srcAppPath))) {
46
+ if (!(await _support.fs.exists(srcAppPath))) {
45
47
  _logger.default.errorAndThrow(`The application at '${srcAppPath}' does not exist or is not accessible`);
46
48
  }
47
49
 
@@ -103,6 +105,35 @@ commands.mobileActivateApp = async function mobileActivateApp(opts = {}) {
103
105
  return await this.proxyCommand('/wda/apps/activate', 'POST', requireOptions(opts, ['bundleId']));
104
106
  };
105
107
 
108
+ commands.mobileKillApp = async function mobileKillApp(opts = {}) {
109
+ if (!this.isRealDevice()) {
110
+ throw new _baseDriver.errors.UnsupportedOperationError('A real device is required');
111
+ }
112
+
113
+ const {
114
+ bundleId
115
+ } = requireOptions(opts, ['bundleId']);
116
+
117
+ try {
118
+ const {
119
+ stdout,
120
+ stderr
121
+ } = await new _pyIosDeviceClient.default(this.opts.device.udid).killApp(bundleId);
122
+
123
+ if ((stdout + stderr).includes('did not start')) {
124
+ _logger.default.info(`The bundle id '${bundleId}' did not start or it was already killed`);
125
+
126
+ return false;
127
+ }
128
+
129
+ return true;
130
+ } catch (err) {
131
+ _logger.default.warn(`Failed to kill '${bundleId}'. Original error: ${err.stderr || err.message}`);
132
+
133
+ return false;
134
+ }
135
+ };
136
+
106
137
  commands.mobileQueryAppState = async function mobileQueryAppState(opts = {}) {
107
138
  return await this.proxyCommand('/wda/apps/state', 'POST', requireOptions(opts, ['bundleId']));
108
139
  };
@@ -139,7 +170,7 @@ commands.queryAppState = async function queryAppState(bundleId) {
139
170
 
140
171
  commands.mobileListApps = async function mobileListApps(opts = {}) {
141
172
  if (!this.isRealDevice()) {
142
- throw new _appiumBaseDriver.errors.NotImplementedError(`This extension is only supported on real devices`);
173
+ throw new _baseDriver.errors.NotImplementedError(`This extension is only supported on real devices`);
143
174
  }
144
175
 
145
176
  const {
@@ -160,4 +191,4 @@ var _default = commands;
160
191
  exports.default = _default;require('source-map-support').install();
161
192
 
162
193
 
163
- //# sourceMappingURL=data:application/json;charset=utf8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbImxpYi9jb21tYW5kcy9hcHAtbWFuYWdlbWVudC5qcyJdLCJuYW1lcyI6WyJjb21tYW5kcyIsInJlcXVpcmVPcHRpb25zIiwib3B0cyIsInJlcUtleXMiLCJrZXkiLCJfIiwiaXNTdHJpbmciLCJpc0VtcHR5IiwiZXJyb3JzIiwiSW52YWxpZEFyZ3VtZW50RXJyb3IiLCJtb2JpbGVJbnN0YWxsQXBwIiwiYXBwIiwidGltZW91dE1zIiwic3RyYXRlZ3kiLCJzcmNBcHBQYXRoIiwiaGVscGVycyIsImNvbmZpZ3VyZUFwcCIsImxvZyIsImluZm8iLCJpc1JlYWxEZXZpY2UiLCJkZXZpY2UiLCJ1ZGlkIiwiZnMiLCJleGlzdHMiLCJlcnJvckFuZFRocm93IiwiaW5zdGFsbEFwcCIsImFwcFB1c2hUaW1lb3V0IiwiYXBwSW5zdGFsbFN0cmF0ZWd5IiwibW9iaWxlSXNBcHBJbnN0YWxsZWQiLCJidW5kbGVJZCIsImluc3RhbGxlZCIsImlzQXBwSW5zdGFsbGVkIiwibW9iaWxlUmVtb3ZlQXBwIiwicmVtb3ZlQXBwIiwiZXJyIiwid2FybiIsIm1lc3NhZ2UiLCJtb2JpbGVMYXVuY2hBcHAiLCJsYXVuY2hPcHRpb25zIiwiYXJndW1lbnRzIiwiaXNBcnJheSIsImVudmlyb25tZW50IiwicHJveHlDb21tYW5kIiwibW9iaWxlVGVybWluYXRlQXBwIiwibW9iaWxlQWN0aXZhdGVBcHAiLCJtb2JpbGVRdWVyeUFwcFN0YXRlIiwiYXBwUGF0aCIsImlzUGxhaW5PYmplY3QiLCJhY3RpdmF0ZUFwcCIsIk9iamVjdCIsImFzc2lnbiIsInRlcm1pbmF0ZUFwcCIsInF1ZXJ5QXBwU3RhdGUiLCJtb2JpbGVMaXN0QXBwcyIsIk5vdEltcGxlbWVudGVkRXJyb3IiLCJhcHBsaWNhdGlvblR5cGUiLCJzZXJ2aWNlIiwic2VydmljZXMiLCJzdGFydEluc3RhbGxhdGlvblByb3h5U2VydmljZSIsImxpc3RBcHBsaWNhdGlvbnMiLCJjbG9zZSJdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7Ozs7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RixRQUEvQixFQUF5QztBQUNqRSxTQUFPLE1BQU0sS0FBS0Qsb0JBQUwsQ0FBMEI7QUFBQ0MsSUFBQUE7QUFBRCxHQUExQixDQUFiO0FBQ0QsQ0FGRDs7QUFJQTdCLFFBQVEsQ0FBQ21ELFlBQVQsR0FBd0IsZUFBZUEsWUFBZixDQUE2QnRCLFFBQTdCLEVBQXVDO0FBQzdELFNBQU8sTUFBTSxLQUFLYyxrQkFBTCxDQUF3QjtBQUFDZCxJQUFBQTtBQUFELEdBQXhCLENBQWI7QUFDRCxDQUZEOztBQUlBN0IsUUFBUSxDQUFDb0QsYUFBVCxHQUF5QixlQUFlQSxhQUFmLENBQThCdkIsUUFBOUIsRUFBd0M7QUFDL0QsU0FBTyxNQUFNLEtBQUtnQixtQkFBTCxDQUF5QjtBQUFDaEIsSUFBQUE7QUFBRCxHQUF6QixDQUFiO0FBQ0QsQ0FGRDs7QUFnQkE3QixRQUFRLENBQUNxRCxjQUFULEdBQTBCLGVBQWVBLGNBQWYsQ0FBK0JuRCxJQUFJLEdBQUcsRUFBdEMsRUFBMEM7QUFDbEUsTUFBSSxDQUFDLEtBQUtpQixZQUFMLEVBQUwsRUFBMEI7QUFDeEIsVUFBTSxJQUFJWCx5QkFBTzhDLG1CQUFYLENBQWdDLGtEQUFoQyxDQUFOO0FBQ0Q7O0FBRUQsUUFBTTtBQUNKQyxJQUFBQSxlQUFlLEdBQUc7QUFEZCxNQUVGckQsSUFGSjtBQUdBLFFBQU1zRCxPQUFPLEdBQUcsTUFBTUMsMEJBQVNDLDZCQUFULENBQXVDLEtBQUt4RCxJQUFMLENBQVVrQixNQUFWLENBQWlCQyxJQUF4RCxDQUF0Qjs7QUFDQSxNQUFJO0FBQ0YsV0FBTyxNQUFNbUMsT0FBTyxDQUFDRyxnQkFBUixDQUF5QjtBQUFDSixNQUFBQTtBQUFELEtBQXpCLENBQWI7QUFDRCxHQUZELFNBRVU7QUFDUkMsSUFBQUEsT0FBTyxDQUFDSSxLQUFSO0FBQ0Q7QUFDRixDQWREOztlQWdCZTVELFEiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgXyBmcm9tICdsb2Rhc2gnO1xuaW1wb3J0IHsgZnMgfSBmcm9tICdhcHBpdW0tc3VwcG9ydCc7XG5pbXBvcnQgbG9nIGZyb20gJy4uL2xvZ2dlcic7XG5pbXBvcnQgeyBlcnJvcnMgfSBmcm9tICdhcHBpdW0tYmFzZS1kcml2ZXInO1xuaW1wb3J0IHsgc2VydmljZXMgfSBmcm9tICdhcHBpdW0taW9zLWRldmljZSc7XG5cbmNvbnN0IGNvbW1hbmRzID0ge307XG5cbmZ1bmN0aW9uIHJlcXVpcmVPcHRpb25zIChvcHRzID0ge30sIHJlcUtleXMgPSBbXSkge1xuICBmb3IgKGNvbnN0IGtleSBvZiByZXFLZXlzKSB7XG4gICAgaWYgKCFfLmlzU3RyaW5nKG9wdHNba2V5XSkgfHwgXy5pc0VtcHR5KG9wdHNba2V5XSkpIHtcbiAgICAgIHRocm93IG5ldyBlcnJvcnMuSW52YWxpZEFyZ3VtZW50RXJyb3IoXG4gICAgICAgIGAnJHtrZXl9JyBpcyBleHBlY3RlZCB0byBiZSBhIHZhbGlkIHN0cmluZy4gJyR7b3B0c1trZXldfScgaXMgZ2l2ZW4gaW5zdGVhZGBcbiAgICAgICk7XG4gICAgfVxuICB9XG4gIHJldHVybiBvcHRzO1xufVxuXG5jb21tYW5kcy5tb2JpbGVJbnN0YWxsQXBwID0gYXN5bmMgZnVuY3Rpb24gbW9iaWxlSW5zdGFsbEFwcCAob3B0cyA9IHt9KSB7XG4gIGNvbnN0IHsgYXBwLCB0aW1lb3V0TXMsIHN0cmF0ZWd5IH0gPSByZXF1aXJlT3B0aW9ucyhvcHRzLCBbJ2FwcCddKTtcbiAgY29uc3Qgc3JjQXBwUGF0aCA9IGF3YWl0IHRoaXMuaGVscGVycy5jb25maWd1cmVBcHAoYXBwLCAnLmFwcCcpO1xuICBsb2cuaW5mbyhgSW5zdGFsbGluZyAnJHtzcmNBcHBQYXRofScgdG8gdGhlICR7dGhpcy5pc1JlYWxEZXZpY2UoKSA/ICdyZWFsIGRldmljZScgOiAnU2ltdWxhdG9yJ30gYCArXG4gICAgYHdpdGggVURJRCAnJHt0aGlzLm9wdHMuZGV2aWNlLnVkaWR9J2ApO1xuICBpZiAoIWF3YWl0IGZzLmV4aXN0cyhzcmNBcHBQYXRoKSkge1xuICAgIGxvZy5lcnJvckFuZFRocm93KGBUaGUgYXBwbGljYXRpb24gYXQgJyR7c3JjQXBwUGF0aH0nIGRvZXMgbm90IGV4aXN0IG9yIGlzIG5vdCBhY2Nlc3NpYmxlYCk7XG4gIH1cbiAgYXdhaXQgdGhpcy5vcHRzLmRldmljZS5pbnN0YWxsQXBwKFxuICAgIHNyY0FwcFBhdGgsIHRpbWVvdXRNcyA/PyB0aGlzLm9wdHMuYXBwUHVzaFRpbWVvdXQsIHN0cmF0ZWd5ID8/IHRoaXMub3B0cy5hcHBJbnN0YWxsU3RyYXRlZ3lcbiAgKTtcbiAgbG9nLmluZm8oYEluc3RhbGxhdGlvbiBvZiAnJHtzcmNBcHBQYXRofScgc3VjY2VlZGVkYCk7XG59O1xuXG5jb21tYW5kcy5tb2JpbGVJc0FwcEluc3RhbGxlZCA9IGFzeW5jIGZ1bmN0aW9uIG1vYmlsZUlzQXBwSW5zdGFsbGVkIChvcHRzID0ge30pIHtcbiAgY29uc3Qge2J1bmRsZUlkfSA9IHJlcXVpcmVPcHRpb25zKG9wdHMsIFsnYnVuZGxlSWQnXSk7XG4gIGNvbnN0IGluc3RhbGxlZCA9IGF3YWl0IHRoaXMub3B0cy5kZXZpY2UuaXNBcHBJbnN0YWxsZWQoYnVuZGxlSWQpO1xuICBsb2cuaW5mbyhgQXBwICcke2J1bmRsZUlkfScgaXMke2luc3RhbGxlZCA/ICcnIDogJyBub3QnfSBpbnN0YWxsZWRgKTtcbiAgcmV0dXJuIGluc3RhbGxlZDtcbn07XG5cbmNvbW1hbmRzLm1vYmlsZVJlbW92ZUFwcCA9IGFzeW5jIGZ1bmN0aW9uIG1vYmlsZVJlbW92ZUFwcCAob3B0cyA9IHt9KSB7XG4gIGNvbnN0IHtidW5kbGVJZH0gPSByZXF1aXJlT3B0aW9ucyhvcHRzLCBbJ2J1bmRsZUlkJ10pO1xuICBsb2cuaW5mbyhgVW5pbnN0YWxsaW5nIHRoZSBhcHBsaWNhdGlvbiB3aXRoIGJ1bmRsZSBpZGVudGlmaWVyICcke2J1bmRsZUlkfScgYCArXG4gICAgYGZyb20gdGhlICR7dGhpcy5pc1JlYWxEZXZpY2UoKSA/ICdyZWFsIGRldmljZScgOiAnU2ltdWxhdG9yJ30gd2l0aCBVRElEICcke3RoaXMub3B0cy5kZXZpY2UudWRpZH0nYCk7XG4gIHRyeSB7XG4gICAgYXdhaXQgdGhpcy5vcHRzLmRldmljZS5yZW1vdmVBcHAoYnVuZGxlSWQpO1xuICAgIGxvZy5pbmZvKGBSZW1vdmFsIG9mICcke2J1bmRsZUlkfScgc3VjY2VlZGVkYCk7XG4gICAgcmV0dXJuIHRydWU7XG4gIH0gY2F0Y2ggKGVycikge1xuICAgIGxvZy53YXJuKGBDYW5ub3QgcmVtb3ZlICcke2J1bmRsZUlkfScuIE9yaWdpbmFsIGVycm9yOiAke2Vyci5tZXNzYWdlfWApO1xuICAgIHJldHVybiBmYWxzZTtcbiAgfVxufTtcblxuY29tbWFuZHMubW9iaWxlTGF1bmNoQXBwID0gYXN5bmMgZnVuY3Rpb24gbW9iaWxlTGF1bmNoQXBwIChvcHRzID0ge30pIHtcbiAgY29uc3QgbGF1bmNoT3B0aW9ucyA9IHJlcXVpcmVPcHRpb25zKG9wdHMsIFsnYnVuZGxlSWQnXSk7XG4gIGlmIChvcHRzLmFyZ3VtZW50cykge1xuICAgIGxhdW5jaE9wdGlvbnMuYXJndW1lbnRzID0gXy5pc0FycmF5KG9wdHMuYXJndW1lbnRzKSA/IG9wdHMuYXJndW1lbnRzIDogW29wdHMuYXJndW1lbnRzXTtcbiAgfVxuICBpZiAob3B0cy5lbnZpcm9ubWVudCkge1xuICAgIGxhdW5jaE9wdGlvbnMuZW52aXJvbm1lbnQgPSBvcHRzLmVudmlyb25tZW50O1xuICB9XG4gIHJldHVybiBhd2FpdCB0aGlzLnByb3h5Q29tbWFuZCgnL3dkYS9hcHBzL2xhdW5jaCcsICdQT1NUJywgbGF1bmNoT3B0aW9ucyk7XG59O1xuXG5jb21tYW5kcy5tb2JpbGVUZXJtaW5hdGVBcHAgPSBhc3luYyBmdW5jdGlvbiBtb2JpbGVUZXJtaW5hdGVBcHAgKG9wdHMgPSB7fSkge1xuICByZXR1cm4gYXdhaXQgdGhpcy5wcm94eUNvbW1hbmQoJy93ZGEvYXBwcy90ZXJtaW5hdGUnLCAnUE9TVCcsIHJlcXVpcmVPcHRpb25zKG9wdHMsIFsnYnVuZGxlSWQnXSkpO1xufTtcblxuY29tbWFuZHMubW9iaWxlQWN0aXZhdGVBcHAgPSBhc3luYyBmdW5jdGlvbiBtb2JpbGVBY3RpdmF0ZUFwcCAob3B0cyA9IHt9KSB7XG4gIHJldHVybiBhd2FpdCB0aGlzLnByb3h5Q29tbWFuZCgnL3dkYS9hcHBzL2FjdGl2YXRlJywgJ1BPU1QnLCByZXF1aXJlT3B0aW9ucyhvcHRzLCBbJ2J1bmRsZUlkJ10pKTtcbn07XG5cbi8qKlxuICogUmV0dXJucyB0aGUgY3VycmVudCBhcHBsaWNhdGlvbiBzdGF0ZVxuICpcbiAqIEBwYXJhbSB7T2JqZWN0fSBvcHRzIC0gT3B0aW9ucyBzZXQsIHdoaWNoIG11c3QgY29udGFpbiBgYnVuZGxlSWRgIHByb3BlcnR5XG4gKiBAcmV0dXJucyB7bnVtYmVyfSBUaGUgYWN0dWFsIGFwcGxpY2F0aW9uIHN0YXRlIGNvZGUuIFNlZVxuICogaHR0cHM6Ly9kZXZlbG9wZXIuYXBwbGUuY29tL2RvY3VtZW50YXRpb24veGN0ZXN0L3hjdWlhcHBsaWNhdGlvbnN0YXRlP2xhbmd1YWdlPW9iamNcbiAqIHRvIGdldCB0aGUgbGlzdCBvZiBwb3NzaWJsZSB2YWx1ZXMuXG4gKi9cbmNvbW1hbmRzLm1vYmlsZVF1ZXJ5QXBwU3RhdGUgPSBhc3luYyBmdW5jdGlvbiBtb2JpbGVRdWVyeUFwcFN0YXRlIChvcHRzID0ge30pIHtcbiAgcmV0dXJuIGF3YWl0IHRoaXMucHJveHlDb21tYW5kKCcvd2RhL2FwcHMvc3RhdGUnLCAnUE9TVCcsIHJlcXVpcmVPcHRpb25zKG9wdHMsIFsnYnVuZGxlSWQnXSkpO1xufTtcblxuY29tbWFuZHMuaW5zdGFsbEFwcCA9IGFzeW5jIGZ1bmN0aW9uIGluc3RhbGxBcHAgKGFwcFBhdGgsIG9wdHMgPSB7fSkge1xuICBhd2FpdCB0aGlzLm1vYmlsZUluc3RhbGxBcHAoe1xuICAgIC4uLihfLmlzUGxhaW5PYmplY3Qob3B0cykgPyBvcHRzIDoge30pLFxuICAgIGFwcDogYXBwUGF0aCxcbiAgfSk7XG59O1xuXG5jb21tYW5kcy5hY3RpdmF0ZUFwcCA9IGFzeW5jIGZ1bmN0aW9uIGFjdGl2YXRlQXBwIChidW5kbGVJZCwgb3B0cyA9IHt9KSB7XG4gIHJldHVybiBhd2FpdCB0aGlzLm1vYmlsZUxhdW5jaEFwcChPYmplY3QuYXNzaWduKHt9LCBvcHRzLCB7YnVuZGxlSWR9KSk7XG59O1xuXG5jb21tYW5kcy5pc0FwcEluc3RhbGxlZCA9IGFzeW5jIGZ1bmN0aW9uIGlzQXBwSW5zdGFsbGVkIChidW5kbGVJZCkge1xuICByZXR1cm4gYXdhaXQgdGhpcy5tb2JpbGVJc0FwcEluc3RhbGxlZCh7YnVuZGxlSWR9KTtcbn07XG5cbmNvbW1hbmRzLnRlcm1pbmF0ZUFwcCA9IGFzeW5jIGZ1bmN0aW9uIHRlcm1pbmF0ZUFwcCAoYnVuZGxlSWQpIHtcbiAgcmV0dXJuIGF3YWl0IHRoaXMubW9iaWxlVGVybWluYXRlQXBwKHtidW5kbGVJZH0pO1xufTtcblxuY29tbWFuZHMucXVlcnlBcHBTdGF0ZSA9IGFzeW5jIGZ1bmN0aW9uIHF1ZXJ5QXBwU3RhdGUgKGJ1bmRsZUlkKSB7XG4gIHJldHVybiBhd2FpdCB0aGlzLm1vYmlsZVF1ZXJ5QXBwU3RhdGUoe2J1bmRsZUlkfSk7XG59O1xuXG4vKipcbiAqIEB0eXBlZGVmIHtPYmplY3R9IExpc3RBcHBzT3B0aW9uc1xuICogQHByb3BlcnR5IHsnU3lzdGVtJ3wnVXNlcid9IGFwcGxpY2F0aW9uVHlwZSBbVXNlcl0gVGhlIHR5cGUgb2YgYXBwbGljYXRpb25zIHRvIGxpc3RcbiAqL1xuXG4vKipcbiAqIExpc3QgYXBwbGljYXRpb25zIGluc3RhbGxlZCBvbiB0aGUgcmVhbCBkZXZpY2UgdW5kZXIgdGVzdFxuICpcbiAqIEBwYXJhbSB7TGlzdEFwcHNPcHRpb25zfSBvcHRzXG4gKiBAcmV0dXJucyB7QXJyYXk8T2JqZWN0Pn0gQSBsaXN0IG9mIGFwcHMsIHdoZXJlIGVhY2ggaXRlbSBpcyBhIG1hcCB3aGVyZSBrZXlzIGFyZVxuICogYnVuZGxlIGlkZW50aWZpZXJzIGFuZCB2YWx1ZXMgYXJlIG1hcHMgb2YgcGxhdGZvcm0tc3BlY2lmaWMgYXBwIHByb3BlcnRpZXMuXG4gKi9cbmNvbW1hbmRzLm1vYmlsZUxpc3RBcHBzID0gYXN5bmMgZnVuY3Rpb24gbW9iaWxlTGlzdEFwcHMgKG9wdHMgPSB7fSkge1xuICBpZiAoIXRoaXMuaXNSZWFsRGV2aWNlKCkpIHtcbiAgICB0aHJvdyBuZXcgZXJyb3JzLk5vdEltcGxlbWVudGVkRXJyb3IoYFRoaXMgZXh0ZW5zaW9uIGlzIG9ubHkgc3VwcG9ydGVkIG9uIHJlYWwgZGV2aWNlc2ApO1xuICB9XG5cbiAgY29uc3Qge1xuICAgIGFwcGxpY2F0aW9uVHlwZSA9ICdVc2VyJyxcbiAgfSA9IG9wdHM7XG4gIGNvbnN0IHNlcnZpY2UgPSBhd2FpdCBzZXJ2aWNlcy5zdGFydEluc3RhbGxhdGlvblByb3h5U2VydmljZSh0aGlzLm9wdHMuZGV2aWNlLnVkaWQpO1xuICB0cnkge1xuICAgIHJldHVybiBhd2FpdCBzZXJ2aWNlLmxpc3RBcHBsaWNhdGlvbnMoe2FwcGxpY2F0aW9uVHlwZX0pO1xuICB9IGZpbmFsbHkge1xuICAgIHNlcnZpY2UuY2xvc2UoKTtcbiAgfVxufTtcblxuZXhwb3J0IGRlZmF1bHQgY29tbWFuZHM7XG4iXSwiZmlsZSI6ImxpYi9jb21tYW5kcy9hcHAtbWFuYWdlbWVudC5qcyIsInNvdXJjZVJvb3QiOiIuLi8uLi8uLiJ9
194
+ //# sourceMappingURL=data:application/json;charset=utf8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbImxpYi9jb21tYW5kcy9hcHAtbWFuYWdlbWVudC5qcyJdLCJuYW1lcyI6WyJjb21tYW5kcyIsInJlcXVpcmVPcHRpb25zIiwib3B0cyIsInJlcUtleXMiLCJrZXkiLCJfIiwiaXNTdHJpbmciLCJpc0VtcHR5IiwiZXJyb3JzIiwiSW52YWxpZEFyZ3VtZW50RXJyb3IiLCJtb2JpbGVJbnN0YWxsQXBwIiwiYXBwIiwidGltZW91dE1zIiwic3RyYXRlZ3kiLCJzcmNBcHBQYXRoIiwiaGVscGVycyIsImNvbmZpZ3VyZUFwcCIsImxvZyIsImluZm8iLCJpc1JlYWxEZXZpY2UiLCJkZXZpY2UiLCJ1ZGlkIiwiZnMiLCJleGlzdHMiLCJlcnJvckFuZFRocm93IiwiaW5zdGFsbEFwcCIsImFwcFB1c2hUaW1lb3V0IiwiYXBwSW5zdGFsbFN0cmF0ZWd5IiwibW9iaWxlSXNBcHBJbnN0YWxsZWQiLCJidW5kbGVJZCIsImluc3RhbGxlZCIsImlzQXBwSW5zdGFsbGVkIiwibW9iaWxlUmVtb3ZlQXBwIiwicmVtb3ZlQXBwIiwiZXJyIiwid2FybiIsIm1lc3NhZ2UiLCJtb2JpbGVMYXVuY2hBcHAiLCJsYXVuY2hPcHRpb25zIiwiYXJndW1lbnRzIiwiaXNBcnJheSIsImVudmlyb25tZW50IiwicHJveHlDb21tYW5kIiwibW9iaWxlVGVybWluYXRlQXBwIiwibW9iaWxlQWN0aXZhdGVBcHAiLCJtb2JpbGVLaWxsQXBwIiwiVW5zdXBwb3J0ZWRPcGVyYXRpb25FcnJvciIsInN0ZG91dCIsInN0ZGVyciIsIlB5aWRldmljZSIsImtpbGxBcHAiLCJpbmNsdWRlcyIsIm1vYmlsZVF1ZXJ5QXBwU3RhdGUiLCJhcHBQYXRoIiwiaXNQbGFpbk9iamVjdCIsImFjdGl2YXRlQXBwIiwiT2JqZWN0IiwiYXNzaWduIiwidGVybWluYXRlQXBwIiwicXVlcnlBcHBTdGF0ZSIsIm1vYmlsZUxpc3RBcHBzIiwiTm90SW1wbGVtZW50ZWRFcnJvciIsImFwcGxpY2F0aW9uVHlwZSIsInNlcnZpY2UiLCJzZXJ2aWNlcyIsInN0YXJ0SW5zdGFsbGF0aW9uUHJveHlTZXJ2aWNlIiwibGlzdEFwcGxpY2F0aW9ucyIsImNsb3NlIl0sIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7OztBQUFBOztBQUNBOztBQUNBOztBQUNBOztBQUNBOztBQUNBOztBQUVBLE1BQU1BLFFBQVEsR0FBRyxFQUFqQjs7QUFFQSxTQUFTQyxjQUFULENBQXlCQyxJQUFJLEdBQUcsRUFBaEMsRUFBb0NDLE9BQU8sR0FBRyxFQUE5QyxFQUFrRDtBQUNoRCxPQUFLLE1BQU1DLEdBQVgsSUFBa0JELE9BQWxCLEVBQTJCO0FBQ3pCLFFBQUksQ0FBQ0UsZ0JBQUVDLFFBQUYsQ0FBV0osSUFBSSxDQUFDRSxHQUFELENBQWYsQ0FBRCxJQUEwQkMsZ0JBQUVFLE9BQUYsQ0FBVUwsSUFBSSxDQUFDRSxHQUFELENBQWQsQ0FBOUIsRUFBb0Q7QUFDbEQsWUFBTSxJQUFJSSxtQkFBT0Msb0JBQVgsQ0FDSCxJQUFHTCxHQUFJLHdDQUF1Q0YsSUFBSSxDQUFDRSxHQUFELENBQU0sb0JBRHJELENBQU47QUFHRDtBQUNGOztBQUNELFNBQU9GLElBQVA7QUFDRDs7QUFFREYsUUFBUSxDQUFDVSxnQkFBVCxHQUE0QixlQUFlQSxnQkFBZixDQUFpQ1IsSUFBSSxHQUFHLEVBQXhDLEVBQTRDO0FBQ3RFLFFBQU07QUFBRVMsSUFBQUEsR0FBRjtBQUFPQyxJQUFBQSxTQUFQO0FBQWtCQyxJQUFBQTtBQUFsQixNQUErQlosY0FBYyxDQUFDQyxJQUFELEVBQU8sQ0FBQyxLQUFELENBQVAsQ0FBbkQ7QUFDQSxRQUFNWSxVQUFVLEdBQUcsTUFBTSxLQUFLQyxPQUFMLENBQWFDLFlBQWIsQ0FBMEJMLEdBQTFCLEVBQStCLE1BQS9CLENBQXpCOztBQUNBTSxrQkFBSUMsSUFBSixDQUFVLGVBQWNKLFVBQVcsWUFBVyxLQUFLSyxZQUFMLEtBQXNCLGFBQXRCLEdBQXNDLFdBQVksR0FBdkYsR0FDTixjQUFhLEtBQUtqQixJQUFMLENBQVVrQixNQUFWLENBQWlCQyxJQUFLLEdBRHRD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QUFRLENBQUMwRCxZQUFULEdBQXdCLGVBQWVBLFlBQWYsQ0FBNkI3QixRQUE3QixFQUF1QztBQUM3RCxTQUFPLE1BQU0sS0FBS2Msa0JBQUwsQ0FBd0I7QUFBQ2QsSUFBQUE7QUFBRCxHQUF4QixDQUFiO0FBQ0QsQ0FGRDs7QUFJQTdCLFFBQVEsQ0FBQzJELGFBQVQsR0FBeUIsZUFBZUEsYUFBZixDQUE4QjlCLFFBQTlCLEVBQXdDO0FBQy9ELFNBQU8sTUFBTSxLQUFLdUIsbUJBQUwsQ0FBeUI7QUFBQ3ZCLElBQUFBO0FBQUQsR0FBekIsQ0FBYjtBQUNELENBRkQ7O0FBZ0JBN0IsUUFBUSxDQUFDNEQsY0FBVCxHQUEwQixlQUFlQSxjQUFmLENBQStCMUQsSUFBSSxHQUFHLEVBQXRDLEVBQTBDO0FBQ2xFLE1BQUksQ0FBQyxLQUFLaUIsWUFBTCxFQUFMLEVBQTBCO0FBQ3hCLFVBQU0sSUFBSVgsbUJBQU9xRCxtQkFBWCxDQUFnQyxrREFBaEMsQ0FBTjtBQUNEOztBQUVELFFBQU07QUFDSkMsSUFBQUEsZUFBZSxHQUFHO0FBRGQsTUFFRjVELElBRko7QUFHQSxRQUFNNkQsT0FBTyxHQUFHLE1BQU1DLDBCQUFTQyw2QkFBVCxDQUF1QyxLQUFLL0QsSUFBTCxDQUFVa0IsTUFBVixDQUFpQkMsSUFBeEQsQ0FBdEI7O0FBQ0EsTUFBSTtBQUNGLFdBQU8sTUFBTTBDLE9BQU8sQ0FBQ0csZ0JBQVIsQ0FBeUI7QUFBQ0osTUFBQUE7QUFBRCxLQUF6QixDQUFiO0FBQ0QsR0FGRCxTQUVVO0FBQ1JDLElBQUFBLE9BQU8sQ0FBQ0ksS0FBUjtBQUNEO0FBQ0YsQ0FkRDs7ZUFnQmVuRSxRIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IF8gZnJvbSAnbG9kYXNoJztcbmltcG9ydCB7IGZzIH0gZnJvbSAnQGFwcGl1bS9zdXBwb3J0JztcbmltcG9ydCBsb2cgZnJvbSAnLi4vbG9nZ2VyJztcbmltcG9ydCB7IGVycm9ycyB9IGZyb20gJ0BhcHBpdW0vYmFzZS1kcml2ZXInO1xuaW1wb3J0IHsgc2VydmljZXMgfSBmcm9tICdhcHBpdW0taW9zLWRldmljZSc7XG5pbXBvcnQgUHlpZGV2aWNlIGZyb20gJy4uL3B5LWlvcy1kZXZpY2UtY2xpZW50JztcblxuY29uc3QgY29tbWFuZHMgPSB7fTtcblxuZnVuY3Rpb24gcmVxdWlyZU9wdGlvbnMgKG9wdHMgPSB7fSwgcmVxS2V5cyA9IFtdKSB7XG4gIGZvciAoY29uc3Qga2V5IG9mIHJlcUtleXMpIHtcbiAgICBpZiAoIV8uaXNTdHJpbmcob3B0c1trZXldKSB8fCBfLmlzRW1wdHkob3B0c1trZXldKSkge1xuICAgICAgdGhyb3cgbmV3IGVycm9ycy5JbnZhbGlkQXJndW1lbnRFcnJvcihcbiAgICAgICAgYCcke2tleX0nIGlzIGV4cGVjdGVkIHRvIGJlIGEgdmFsaWQgc3RyaW5nLiAnJHtvcHRzW2tleV19JyBpcyBnaXZlbiBpbnN0ZWFkYFxuICAgICAgKTtcbiAgICB9XG4gIH1cbiAgcmV0dXJuIG9wdHM7XG59XG5cbmNvbW1hbmRzLm1vYmlsZUluc3RhbGxBcHAgPSBhc3luYyBmdW5jdGlvbiBtb2JpbGVJbnN0YWxsQXBwIChvcHRzID0ge30pIHtcbiAgY29uc3QgeyBhcHAsIHRpbWVvdXRNcywgc3RyYXRlZ3kgfSA9IHJlcXVpcmVPcHRpb25zKG9wdHMsIFsnYXBwJ10pO1xuICBjb25zdCBzcmNBcHBQYXRoID0gYXdhaXQgdGhpcy5oZWxwZXJzLmNvbmZpZ3VyZUFwcChhcHAsICcuYXBwJyk7XG4gIGxvZy5pbmZvKGBJbnN0YWxsaW5nICcke3NyY0FwcFBhdGh9JyB0byB0aGUgJHt0aGlzLmlzUmVhbERldmljZSgpID8gJ3JlYWwgZGV2aWNlJyA6ICdTaW11bGF0b3InfSBgICtcbiAgICBgd2l0aCBVRElEICcke3RoaXMub3B0cy5kZXZpY2UudWRpZH0nYCk7XG4gIGlmICghYXdhaXQgZnMuZXhpc3RzKHNyY0FwcFBhdGgpKSB7XG4gICAgbG9nLmVycm9yQW5kVGhyb3coYFRoZSBhcHBsaWNhdGlvbiBhdCAnJHtzcmNBcHBQYXRofScgZG9lcyBub3QgZXhpc3Qgb3IgaXMgbm90IGFjY2Vzc2libGVgKTtcbiAgfVxuICBhd2FpdCB0aGlzLm9wdHMuZGV2aWNlLmluc3RhbGxBcHAoXG4gICAgc3JjQXBwUGF0aCwgdGltZW91dE1zID8/IHRoaXMub3B0cy5hcHBQdXNoVGltZW91dCwgc3RyYXRlZ3kgPz8gdGhpcy5vcHRzLmFwcEluc3RhbGxTdHJhdGVneVxuICApO1xuICBsb2cuaW5mbyhgSW5zdGFsbGF0aW9uIG9mICcke3NyY0FwcFBhdGh9JyBzdWNjZWVkZWRgKTtcbn07XG5cbmNvbW1hbmRzLm1vYmlsZUlzQXBwSW5zdGFsbGVkID0gYXN5bmMgZnVuY3Rpb24gbW9iaWxlSXNBcHBJbnN0YWxsZWQgKG9wdHMgPSB7fSkge1xuICBjb25zdCB7YnVuZGxlSWR9ID0gcmVxdWlyZU9wdGlvbnMob3B0cywgWydidW5kbGVJZCddKTtcbiAgY29uc3QgaW5zdGFsbGVkID0gYXdhaXQgdGhpcy5vcHRzLmRldmljZS5pc0FwcEluc3RhbGxlZChidW5kbGVJZCk7XG4gIGxvZy5pbmZvKGBBcHAgJyR7YnVuZGxlSWR9JyBpcyR7aW5zdGFsbGVkID8gJycgOiAnIG5vdCd9IGluc3RhbGxlZGApO1xuICByZXR1cm4gaW5zdGFsbGVkO1xufTtcblxuY29tbWFuZHMubW9iaWxlUmVtb3ZlQXBwID0gYXN5bmMgZnVuY3Rpb24gbW9iaWxlUmVtb3ZlQXBwIChvcHRzID0ge30pIHtcbiAgY29uc3Qge2J1bmRsZUlkfSA9IHJlcXVpcmVPcHRpb25zKG9wdHMsIFsnYnVuZGxlSWQnXSk7XG4gIGxvZy5pbmZvKGBVbmluc3RhbGxpbmcgdGhlIGFwcGxpY2F0aW9uIHdpdGggYnVuZGxlIGlkZW50aWZpZXIgJyR7YnVuZGxlSWR9JyBgICtcbiAgICBgZnJvbSB0aGUgJHt0aGlzLmlzUmVhbERldmljZSgpID8gJ3JlYWwgZGV2aWNlJyA6ICdTaW11bGF0b3InfSB3aXRoIFVESUQgJyR7dGhpcy5vcHRzLmRldmljZS51ZGlkfSdgKTtcbiAgdHJ5IHtcbiAgICBhd2FpdCB0aGlzLm9wdHMuZGV2aWNlLnJlbW92ZUFwcChidW5kbGVJZCk7XG4gICAgbG9nLmluZm8oYFJlbW92YWwgb2YgJyR7YnVuZGxlSWR9JyBzdWNjZWVkZWRgKTtcbiAgICByZXR1cm4gdHJ1ZTtcbiAgfSBjYXRjaCAoZXJyKSB7XG4gICAgbG9nLndhcm4oYENhbm5vdCByZW1vdmUgJyR7YnVuZGxlSWR9Jy4gT3JpZ2luYWwgZXJyb3I6ICR7ZXJyLm1lc3NhZ2V9YCk7XG4gICAgcmV0dXJuIGZhbHNlO1xuICB9XG59O1xuXG5jb21tYW5kcy5tb2JpbGVMYXVuY2hBcHAgPSBhc3luYyBmdW5jdGlvbiBtb2JpbGVMYXVuY2hBcHAgKG9wdHMgPSB7fSkge1xuICBjb25zdCBsYXVuY2hPcHRpb25zID0gcmVxdWlyZU9wdGlvbnMob3B0cywgWydidW5kbGVJZCddKTtcbiAgaWYgKG9wdHMuYXJndW1lbnRzKSB7XG4gICAgbGF1bmNoT3B0aW9ucy5hcmd1bWVudHMgPSBfLmlzQXJyYXkob3B0cy5hcmd1bWVudHMpID8gb3B0cy5hcmd1bWVudHMgOiBbb3B0cy5hcmd1bWVudHNdO1xuICB9XG4gIGlmIChvcHRzLmVudmlyb25tZW50KSB7XG4gICAgbGF1bmNoT3B0aW9ucy5lbnZpcm9ubWVudCA9IG9wdHMuZW52aXJvbm1lbnQ7XG4gIH1cbiAgcmV0dXJuIGF3YWl0IHRoaXMucHJveHlDb21tYW5kKCcvd2RhL2FwcHMvbGF1bmNoJywgJ1BPU1QnLCBsYXVuY2hPcHRpb25zKTtcbn07XG5cbmNvbW1hbmRzLm1vYmlsZVRlcm1pbmF0ZUFwcCA9IGFzeW5jIGZ1bmN0aW9uIG1vYmlsZVRlcm1pbmF0ZUFwcCAob3B0cyA9IHt9KSB7XG4gIHJldHVybiBhd2FpdCB0aGlzLnByb3h5Q29tbWFuZCgnL3dkYS9hcHBzL3Rlcm1pbmF0ZScsICdQT1NUJywgcmVxdWlyZU9wdGlvbnMob3B0cywgWydidW5kbGVJZCddKSk7XG59O1xuXG5jb21tYW5kcy5tb2JpbGVBY3RpdmF0ZUFwcCA9IGFzeW5jIGZ1bmN0aW9uIG1vYmlsZUFjdGl2YXRlQXBwIChvcHRzID0ge30pIHtcbiAgcmV0dXJuIGF3YWl0IHRoaXMucHJveHlDb21tYW5kKCcvd2RhL2FwcHMvYWN0aXZhdGUnLCAnUE9TVCcsIHJlcXVpcmVPcHRpb25zKG9wdHMsIFsnYnVuZGxlSWQnXSkpO1xufTtcblxuLyoqXG4gKiBLaWxsIHRoZSBnaXZlbiBidW5kbGUgaWQgcHJvY2VzcyB2aWEgaW5zdHJ1bWVudHMgc2VydmljZS5cbiAqIGh0dHBzOi8vZ2l0aHViLmNvbS9ZdWVDaGVuLUMvcHktaW9zLWRldmljZS9ibG9iLzUxZjQ2ODNjNWMzYzM4NWEwMTU4NThhZGEwN2E1ZjFjNjJkM2NmNTcvaW9zX2RldmljZS9jbGkvYmFzZS5weSNMMjIwXG4gKlxuICogQHBhcmFtIHtPYmplY3R9IG9wdHMgLSBPcHRpb25zIHNldCwgd2hpY2ggbXVzdCBjb250YWluIGBidW5kbGVJZGAgcHJvcGVydHlcbiAqIEByZXR1cm5zIHtib29sZWFufSBSZXR1cm5zIHRydWUgaWYgdGhlIGJ1bmRsZSBpZCBwcm9jZXNzIHdhcyBraWxsZWQuIE90aGVyd2lzZSBmYWxzZS5cbiAqL1xuY29tbWFuZHMubW9iaWxlS2lsbEFwcCA9IGFzeW5jIGZ1bmN0aW9uIG1vYmlsZUtpbGxBcHAgKG9wdHMgPSB7fSkge1xuICBpZiAoIXRoaXMuaXNSZWFsRGV2aWNlKCkpIHtcbiAgICB0aHJvdyBuZXcgZXJyb3JzLlVuc3VwcG9ydGVkT3BlcmF0aW9uRXJyb3IoJ0EgcmVhbCBkZXZpY2UgaXMgcmVxdWlyZWQnKTtcbiAgfVxuXG4gIGNvbnN0IHtidW5kbGVJZH0gPSByZXF1aXJlT3B0aW9ucyhvcHRzLCBbJ2J1bmRsZUlkJ10pO1xuICB0cnkge1xuICAgIC8vIFRPRE86IGV2ZW50dWFsbHkgd2UnZCBsaWtlIHRvIGNhbGwgdGhlIGluc3RydW1lbnRzIGtpbGwgbWV0aG9kIHZpYSBhcHBpdW0taW9zLWRldmljZS5cbiAgICBjb25zdCB7c3Rkb3V0LCBzdGRlcnJ9ID0gYXdhaXQgbmV3IFB5aWRldmljZSh0aGlzLm9wdHMuZGV2aWNlLnVkaWQpLmtpbGxBcHAoYnVuZGxlSWQpO1xuICAgIGlmICgoc3Rkb3V0ICsgc3RkZXJyKS5pbmNsdWRlcygnZGlkIG5vdCBzdGFydCcpKSB7XG4gICAgICBsb2cuaW5mbyhgVGhlIGJ1bmRsZSBpZCAnJHtidW5kbGVJZH0nIGRpZCBub3Qgc3RhcnQgb3IgaXQgd2FzIGFscmVhZHkga2lsbGVkYCk7XG4gICAgICByZXR1cm4gZmFsc2U7XG4gICAgfVxuICAgIHJldHVybiB0cnVlO1xuICB9IGNhdGNoIChlcnIpIHtcbiAgICBsb2cud2FybihgRmFpbGVkIHRvIGtpbGwgJyR7YnVuZGxlSWR9Jy4gT3JpZ2luYWwgZXJyb3I6ICR7ZXJyLnN0ZGVyciB8fCBlcnIubWVzc2FnZX1gKTtcbiAgICByZXR1cm4gZmFsc2U7XG4gIH1cbn07XG5cbi8qKlxuICogUmV0dXJucyB0aGUgY3VycmVudCBhcHBsaWNhdGlvbiBzdGF0ZVxuICpcbiAqIEBwYXJhbSB7T2JqZWN0fSBvcHRzIC0gT3B0aW9ucyBzZXQsIHdoaWNoIG11c3QgY29udGFpbiBgYnVuZGxlSWRgIHByb3BlcnR5XG4gKiBAcmV0dXJucyB7bnVtYmVyfSBUaGUgYWN0dWFsIGFwcGxpY2F0aW9uIHN0YXRlIGNvZGUuIFNlZVxuICogaHR0cHM6Ly9kZXZlbG9wZXIuYXBwbGUuY29tL2RvY3VtZW50YXRpb24veGN0ZXN0L3hjdWlhcHBsaWNhdGlvbnN0YXRlP2xhbmd1YWdlPW9iamNcbiAqIHRvIGdldCB0aGUgbGlzdCBvZiBwb3NzaWJsZSB2YWx1ZXMuXG4gKi9cbmNvbW1hbmRzLm1vYmlsZVF1ZXJ5QXBwU3RhdGUgPSBhc3luYyBmdW5jdGlvbiBtb2JpbGVRdWVyeUFwcFN0YXRlIChvcHRzID0ge30pIHtcbiAgcmV0dXJuIGF3YWl0IHRoaXMucHJveHlDb21tYW5kKCcvd2RhL2FwcHMvc3RhdGUnLCAnUE9TVCcsIHJlcXVpcmVPcHRpb25zKG9wdHMsIFsnYnVuZGxlSWQnXSkpO1xufTtcblxuY29tbWFuZHMuaW5zdGFsbEFwcCA9IGFzeW5jIGZ1bmN0aW9uIGluc3RhbGxBcHAgKGFwcFBhdGgsIG9wdHMgPSB7fSkge1xuICBhd2FpdCB0aGlzLm1vYmlsZUluc3RhbGxBcHAoe1xuICAgIC4uLihfLmlzUGxhaW5PYmplY3Qob3B0cykgPyBvcHRzIDoge30pLFxuICAgIGFwcDogYXBwUGF0aCxcbiAgfSk7XG59O1xuXG5jb21tYW5kcy5hY3RpdmF0ZUFwcCA9IGFzeW5jIGZ1bmN0aW9uIGFjdGl2YXRlQXBwIChidW5kbGVJZCwgb3B0cyA9IHt9KSB7XG4gIHJldHVybiBhd2FpdCB0aGlzLm1vYmlsZUxhdW5jaEFwcChPYmplY3QuYXNzaWduKHt9LCBvcHRzLCB7YnVuZGxlSWR9KSk7XG59O1xuXG5jb21tYW5kcy5pc0FwcEluc3RhbGxlZCA9IGFzeW5jIGZ1bmN0aW9uIGlzQXBwSW5zdGFsbGVkIChidW5kbGVJZCkge1xuICByZXR1cm4gYXdhaXQgdGhpcy5tb2JpbGVJc0FwcEluc3RhbGxlZCh7YnVuZGxlSWR9KTtcbn07XG5cbmNvbW1hbmRzLnRlcm1pbmF0ZUFwcCA9IGFzeW5jIGZ1bmN0aW9uIHRlcm1pbmF0ZUFwcCAoYnVuZGxlSWQpIHtcbiAgcmV0dXJuIGF3YWl0IHRoaXMubW9iaWxlVGVybWluYXRlQXBwKHtidW5kbGVJZH0pO1xufTtcblxuY29tbWFuZHMucXVlcnlBcHBTdGF0ZSA9IGFzeW5jIGZ1bmN0aW9uIHF1ZXJ5QXBwU3RhdGUgKGJ1bmRsZUlkKSB7XG4gIHJldHVybiBhd2FpdCB0aGlzLm1vYmlsZVF1ZXJ5QXBwU3RhdGUoe2J1bmRsZUlkfSk7XG59O1xuXG4vKipcbiAqIEB0eXBlZGVmIHtPYmplY3R9IExpc3RBcHBzT3B0aW9uc1xuICogQHByb3BlcnR5IHsnU3lzdGVtJ3wnVXNlcid9IGFwcGxpY2F0aW9uVHlwZSBbVXNlcl0gVGhlIHR5cGUgb2YgYXBwbGljYXRpb25zIHRvIGxpc3RcbiAqL1xuXG4vKipcbiAqIExpc3QgYXBwbGljYXRpb25zIGluc3RhbGxlZCBvbiB0aGUgcmVhbCBkZXZpY2UgdW5kZXIgdGVzdFxuICpcbiAqIEBwYXJhbSB7TGlzdEFwcHNPcHRpb25zfSBvcHRzXG4gKiBAcmV0dXJucyB7QXJyYXk8T2JqZWN0Pn0gQSBsaXN0IG9mIGFwcHMsIHdoZXJlIGVhY2ggaXRlbSBpcyBhIG1hcCB3aGVyZSBrZXlzIGFyZVxuICogYnVuZGxlIGlkZW50aWZpZXJzIGFuZCB2YWx1ZXMgYXJlIG1hcHMgb2YgcGxhdGZvcm0tc3BlY2lmaWMgYXBwIHByb3BlcnRpZXMuXG4gKi9cbmNvbW1hbmRzLm1vYmlsZUxpc3RBcHBzID0gYXN5bmMgZnVuY3Rpb24gbW9iaWxlTGlzdEFwcHMgKG9wdHMgPSB7fSkge1xuICBpZiAoIXRoaXMuaXNSZWFsRGV2aWNlKCkpIHtcbiAgICB0aHJvdyBuZXcgZXJyb3JzLk5vdEltcGxlbWVudGVkRXJyb3IoYFRoaXMgZXh0ZW5zaW9uIGlzIG9ubHkgc3VwcG9ydGVkIG9uIHJlYWwgZGV2aWNlc2ApO1xuICB9XG5cbiAgY29uc3Qge1xuICAgIGFwcGxpY2F0aW9uVHlwZSA9ICdVc2VyJyxcbiAgfSA9IG9wdHM7XG4gIGNvbnN0IHNlcnZpY2UgPSBhd2FpdCBzZXJ2aWNlcy5zdGFydEluc3RhbGxhdGlvblByb3h5U2VydmljZSh0aGlzLm9wdHMuZGV2aWNlLnVkaWQpO1xuICB0cnkge1xuICAgIHJldHVybiBhd2FpdCBzZXJ2aWNlLmxpc3RBcHBsaWNhdGlvbnMoe2FwcGxpY2F0aW9uVHlwZX0pO1xuICB9IGZpbmFsbHkge1xuICAgIHNlcnZpY2UuY2xvc2UoKTtcbiAgfVxufTtcblxuZXhwb3J0IGRlZmF1bHQgY29tbWFuZHM7XG4iXSwiZmlsZSI6ImxpYi9jb21tYW5kcy9hcHAtbWFuYWdlbWVudC5qcyIsInNvdXJjZVJvb3QiOiIuLi8uLi8uLiJ9
@@ -11,7 +11,7 @@ require("source-map-support/register");
11
11
 
12
12
  var _lodash = _interopRequireDefault(require("lodash"));
13
13
 
14
- var _appiumSupport = require("appium-support");
14
+ var _support = require("@appium/support");
15
15
 
16
16
  const commands = {};
17
17
  exports.commands = commands;
@@ -25,7 +25,7 @@ commands.mobileSetAppearance = async function mobileSetAppearance(opts = {}) {
25
25
  throw new Error(`The 'style' option is expected to be present`);
26
26
  }
27
27
 
28
- if (_appiumSupport.util.compareVersions(this.opts.platformVersion, '<', '12.0')) {
28
+ if (_support.util.compareVersions(this.opts.platformVersion, '<', '12.0')) {
29
29
  throw new Error('Changing appearance is only supported since iOS 12');
30
30
  }
31
31
 
@@ -41,7 +41,7 @@ commands.mobileSetAppearance = async function mobileSetAppearance(opts = {}) {
41
41
  };
42
42
 
43
43
  commands.mobileGetAppearance = async function mobileGetAppearance() {
44
- if (_appiumSupport.util.compareVersions(this.opts.platformVersion, '<', '12.0')) {
44
+ if (_support.util.compareVersions(this.opts.platformVersion, '<', '12.0')) {
45
45
  return 'unsupported';
46
46
  }
47
47
 
@@ -66,4 +66,4 @@ var _default = commands;
66
66
  exports.default = _default;require('source-map-support').install();
67
67
 
68
68
 
69
- //# sourceMappingURL=data:application/json;charset=utf8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbImxpYi9jb21tYW5kcy9hcHBlYXJhbmNlLmpzIl0sIm5hbWVzIjpbImNvbW1hbmRzIiwibW9iaWxlU2V0QXBwZWFyYW5jZSIsIm9wdHMiLCJzdHlsZSIsIkVycm9yIiwidXRpbCIsImNvbXBhcmVWZXJzaW9ucyIsInBsYXRmb3JtVmVyc2lvbiIsImlzU2ltdWxhdG9yIiwiZGV2aWNlIiwic2V0QXBwZWFyYW5jZSIsImlnbiIsIm1vYmlsZVNpcmlDb21tYW5kIiwidGV4dCIsIl8iLCJ0b0xvd2VyIiwibW9iaWxlR2V0QXBwZWFyYW5jZSIsImdldEFwcGVhcmFuY2UiLCJwcm94eUNvbW1hbmQiLCJ1c2VySW50ZXJmYWNlU3R5bGUiXSwibWFwcGluZ3MiOiI7Ozs7Ozs7Ozs7O0FBQUE7O0FBQ0E7O0FBR0EsTUFBTUEsUUFBUSxHQUFHLEVBQWpCOzs7QUFrQkFBLFFBQVEsQ0FBQ0MsbUJBQVQsR0FBK0IsZUFBZUEsbUJBQWYsQ0FBb0NDLElBQUksR0FBRyxFQUEzQyxFQUErQztBQUM1RSxRQUFNO0FBQ0pDLElBQUFBO0FBREksTUFFRkQsSUFGSjs7QUFHQSxNQUFJLENBQUNDLEtBQUwsRUFBWTtBQUNWLFVBQU0sSUFBSUMsS0FBSixDQUFXLDhDQUFYLENBQU47QUFDRDs7QUFDRCxNQUFJQyxvQkFBS0MsZUFBTCxDQUFxQixLQUFLSixJQUFMLENBQVVLLGVBQS9CLEVBQWdELEdBQWhELEVBQXFELE1BQXJELENBQUosRUFBa0U7QUFDaEUsVUFBTSxJQUFJSCxLQUFKLENBQVUsb0RBQVYsQ0FBTjtBQUNEOztBQUVELE1BQUksS0FBS0ksV0FBTCxFQUFKLEVBQXdCO0FBQ3RCLFFBQUk7QUFDRixhQUFPLE1BQU0sTUFBTSxLQUFLTixJQUFMLENBQVVPLE1BQVYsQ0FBaUJDLGFBQWpCLENBQStCUCxLQUEvQixDQUFaLENBQVA7QUFDRCxLQUZELENBRUUsT0FBT1EsR0FBUCxFQUFZLENBQUU7QUFDakI7O0FBR0QsUUFBTSxLQUFLQyxpQkFBTCxDQUF1QjtBQUMzQkMsSUFBQUEsSUFBSSxFQUFHLFFBQU9DLGdCQUFFQyxPQUFGLENBQVVaLEtBQVYsTUFBcUIsTUFBckIsR0FBOEIsSUFBOUIsR0FBcUMsS0FBTTtBQUQ5QixHQUF2QixDQUFOO0FBR0QsQ0FyQkQ7O0FBdUNBSCxRQUFRLENBQUNnQixtQkFBVCxHQUErQixlQUFlQSxtQkFBZixHQUFzQztBQUNuRSxNQUFJWCxvQkFBS0MsZUFBTCxDQUFxQixLQUFLSixJQUFMLENBQVVLLGVBQS9CLEVBQWdELEdBQWhELEVBQXFELE1BQXJELENBQUosRUFBa0U7QUFDaEUsV0FBTyxhQUFQO0FBQ0Q7O0FBRUQsTUFBSUosS0FBSjs7QUFDQSxNQUFJLEtBQUtLLFdBQUwsRUFBSixFQUF3QjtBQUN0QixRQUFJO0FBQ0ZMLE1BQUFBLEtBQUssR0FBRyxNQUFNLEtBQUtELElBQUwsQ0FBVU8sTUFBVixDQUFpQlEsYUFBakIsRUFBZDtBQUNELEtBRkQsQ0FFRSxPQUFPTixHQUFQLEVBQVksQ0FBRTtBQUNqQjs7QUFDRCxNQUFJLENBQUNSLEtBQUwsRUFBWTtBQUNWQSxJQUFBQSxLQUFLLEdBQUcsQ0FBQyxNQUFNLEtBQUtlLFlBQUwsQ0FBa0Isa0JBQWxCLEVBQXNDLEtBQXRDLENBQVAsRUFBcURDLGtCQUFyRCxJQUEyRSxTQUFuRjtBQUNEOztBQUNELFNBQU87QUFDTGhCLElBQUFBO0FBREssR0FBUDtBQUdELENBakJEOztlQXFCZUgsUSIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCBfIGZyb20gJ2xvZGFzaCc7XG5pbXBvcnQgeyB1dGlsIH0gZnJvbSAnYXBwaXVtLXN1cHBvcnQnO1xuXG5cbmNvbnN0IGNvbW1hbmRzID0ge307XG5cbi8qKlxuICogQHR5cGVkZWYge09iamVjdH0gU2V0QXBwZWFyYW5jZU9wdGlvbnNcbiAqXG4gKiBAcHJvcGVydHkge3N0cmluZ30gc3R5bGUgLSBDdXJyZW50bHkgdHdvIHN0eWxlcyBhcmUgc3VwcG9ydGVkOlxuICogLSBkYXJrXG4gKiAtIGxpZ2h0XG4gKi9cblxuLyoqXG4gKiBTZXQgdGhlIGRldmljZSdzIFVJIGFwcGVhcmFuY2Ugc3R5bGVcbiAqXG4gKiBAc2luY2UgaU9TIDEyLjBcbiAqIEBwYXJhbSB7U2V0QXBwZWFyYW5jZU9wdGlvbnN9IG9wdHNcbiAqIEB0aHJvd3Mge0Vycm9yfSBpZiB0aGUgY3VycmVudCBwbGF0Zm9ybSBkb2VzIG5vdCBzdXBwb3J0IFVJXG4gKiBhcHBlYXJhbmNlIGNoYW5nZXNcbiAqL1xuY29tbWFuZHMubW9iaWxlU2V0QXBwZWFyYW5jZSA9IGFzeW5jIGZ1bmN0aW9uIG1vYmlsZVNldEFwcGVhcmFuY2UgKG9wdHMgPSB7fSkge1xuICBjb25zdCB7XG4gICAgc3R5bGUsXG4gIH0gPSBvcHRzO1xuICBpZiAoIXN0eWxlKSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKGBUaGUgJ3N0eWxlJyBvcHRpb24gaXMgZXhwZWN0ZWQgdG8gYmUgcHJlc2VudGApO1xuICB9XG4gIGlmICh1dGlsLmNvbXBhcmVWZXJzaW9ucyh0aGlzLm9wdHMucGxhdGZvcm1WZXJzaW9uLCAnPCcsICcxMi4wJykpIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoJ0NoYW5naW5nIGFwcGVhcmFuY2UgaXMgb25seSBzdXBwb3J0ZWQgc2luY2UgaU9TIDEyJyk7XG4gIH1cblxuICBpZiAodGhpcy5pc1NpbXVsYXRvcigpKSB7XG4gICAgdHJ5IHtcbiAgICAgIHJldHVybiB2b2lkIChhd2FpdCB0aGlzLm9wdHMuZGV2aWNlLnNldEFwcGVhcmFuY2Uoc3R5bGUpKTtcbiAgICB9IGNhdGNoIChpZ24pIHt9XG4gIH1cbiAgLy8gRmFsbCBiYWNrIHRvIHRoZSB1Z2x5IFNpcmkgd29ya2Fyb3VuZCBpZiB0aGUgc2ltdWxhdG9yIGlzIHRvbyBvbGRcbiAgLy8gb3IgdGhpcyBpcyBhIHJlYWwgZGV2aWNlXG4gIGF3YWl0IHRoaXMubW9iaWxlU2lyaUNvbW1hbmQoe1xuICAgIHRleHQ6IGBUdXJuICR7Xy50b0xvd2VyKHN0eWxlKSA9PT0gJ2RhcmsnID8gJ29uJyA6ICdvZmYnfSBkYXJrIG1vZGVgLFxuICB9KTtcbn07XG5cbi8qKlxuICogQHR5cGVkZWYge09iamVjdH0gQXBwZWFyYW5jZVxuICogQHByb3BlcnR5IHtzdHJpbmd9IHN0eWxlIC0gVGhlIGRldmljZSdzIFVJIGFwcGVhcmFuY2UgdmFsdWUuXG4gKiBUaGlzIGNvdWxkIGJlIG9uZSBvZjpcbiAqIC0gYGxpZ2h0YFxuICogLSBgZGFya2BcbiAqIC0gYHVua25vd25gXG4gKiAtIGB1bnN1cHBvcnRlZGBcbiAqL1xuXG4vKipcbiAqIEdldCB0aGUgZGV2aWNlJ3MgVUkgYXBwZWFyYW5jZSBzdHlsZS5cbiAqXG4gKiBAc2luY2UgWGNvZGUgU0RLIDExXG4gKiBAcmV0dXJucyB7QXBwZWFyYW5jZX1cbiAqL1xuY29tbWFuZHMubW9iaWxlR2V0QXBwZWFyYW5jZSA9IGFzeW5jIGZ1bmN0aW9uIG1vYmlsZUdldEFwcGVhcmFuY2UgKCkge1xuICBpZiAodXRpbC5jb21wYXJlVmVyc2lvbnModGhpcy5vcHRzLnBsYXRmb3JtVmVyc2lvbiwgJzwnLCAnMTIuMCcpKSB7XG4gICAgcmV0dXJuICd1bnN1cHBvcnRlZCc7XG4gIH1cblxuICBsZXQgc3R5bGU7XG4gIGlmICh0aGlzLmlzU2ltdWxhdG9yKCkpIHtcbiAgICB0cnkge1xuICAgICAgc3R5bGUgPSBhd2FpdCB0aGlzLm9wdHMuZGV2aWNlLmdldEFwcGVhcmFuY2UoKTtcbiAgICB9IGNhdGNoIChpZ24pIHt9XG4gIH1cbiAgaWYgKCFzdHlsZSkge1xuICAgIHN0eWxlID0gKGF3YWl0IHRoaXMucHJveHlDb21tYW5kKCcvd2RhL2RldmljZS9pbmZvJywgJ0dFVCcpKS51c2VySW50ZXJmYWNlU3R5bGUgfHwgJ3Vua25vd24nO1xuICB9XG4gIHJldHVybiB7XG4gICAgc3R5bGUsXG4gIH07XG59O1xuXG5cbmV4cG9ydCB7IGNvbW1hbmRzIH07XG5leHBvcnQgZGVmYXVsdCBjb21tYW5kcztcbiJdLCJmaWxlIjoibGliL2NvbW1hbmRzL2FwcGVhcmFuY2UuanMiLCJzb3VyY2VSb290IjoiLi4vLi4vLi4ifQ==
69
+ //# sourceMappingURL=data:application/json;charset=utf8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbImxpYi9jb21tYW5kcy9hcHBlYXJhbmNlLmpzIl0sIm5hbWVzIjpbImNvbW1hbmRzIiwibW9iaWxlU2V0QXBwZWFyYW5jZSIsIm9wdHMiLCJzdHlsZSIsIkVycm9yIiwidXRpbCIsImNvbXBhcmVWZXJzaW9ucyIsInBsYXRmb3JtVmVyc2lvbiIsImlzU2ltdWxhdG9yIiwiZGV2aWNlIiwic2V0QXBwZWFyYW5jZSIsImlnbiIsIm1vYmlsZVNpcmlDb21tYW5kIiwidGV4dCIsIl8iLCJ0b0xvd2VyIiwibW9iaWxlR2V0QXBwZWFyYW5jZSIsImdldEFwcGVhcmFuY2UiLCJwcm94eUNvbW1hbmQiLCJ1c2VySW50ZXJmYWNlU3R5bGUiXSwibWFwcGluZ3MiOiI7Ozs7Ozs7Ozs7O0FBQUE7O0FBQ0E7O0FBR0EsTUFBTUEsUUFBUSxHQUFHLEVBQWpCOzs7QUFrQkFBLFFBQVEsQ0FBQ0MsbUJBQVQsR0FBK0IsZUFBZUEsbUJBQWYsQ0FBb0NDLElBQUksR0FBRyxFQUEzQyxFQUErQztBQUM1RSxRQUFNO0FBQ0pDLElBQUFBO0FBREksTUFFRkQsSUFGSjs7QUFHQSxNQUFJLENBQUNDLEtBQUwsRUFBWTtBQUNWLFVBQU0sSUFBSUMsS0FBSixDQUFXLDhDQUFYLENBQU47QUFDRDs7QUFDRCxNQUFJQyxjQUFLQyxlQUFMLENBQXFCLEtBQUtKLElBQUwsQ0FBVUssZUFBL0IsRUFBZ0QsR0FBaEQsRUFBcUQsTUFBckQsQ0FBSixFQUFrRTtBQUNoRSxVQUFNLElBQUlILEtBQUosQ0FBVSxvREFBVixDQUFOO0FBQ0Q7O0FBRUQsTUFBSSxLQUFLSSxXQUFMLEVBQUosRUFBd0I7QUFDdEIsUUFBSTtBQUNGLGFBQU8sTUFBTSxNQUFNLEtBQUtOLElBQUwsQ0FBVU8sTUFBVixDQUFpQkMsYUFBakIsQ0FBK0JQLEtBQS9CLENBQVosQ0FBUDtBQUNELEtBRkQsQ0FFRSxPQUFPUSxHQUFQLEVBQVksQ0FBRTtBQUNqQjs7QUFHRCxRQUFNLEtBQUtDLGlCQUFMLENBQXVCO0FBQzNCQyxJQUFBQSxJQUFJLEVBQUcsUUFBT0MsZ0JBQUVDLE9BQUYsQ0FBVVosS0FBVixNQUFxQixNQUFyQixHQUE4QixJQUE5QixHQUFxQyxLQUFNO0FBRDlCLEdBQXZCLENBQU47QUFHRCxDQXJCRDs7QUF1Q0FILFFBQVEsQ0FBQ2dCLG1CQUFULEdBQStCLGVBQWVBLG1CQUFmLEdBQXNDO0FBQ25FLE1BQUlYLGNBQUtDLGVBQUwsQ0FBcUIsS0FBS0osSUFBTCxDQUFVSyxlQUEvQixFQUFnRCxHQUFoRCxFQUFxRCxNQUFyRCxDQUFKLEVBQWtFO0FBQ2hFLFdBQU8sYUFBUDtBQUNEOztBQUVELE1BQUlKLEtBQUo7O0FBQ0EsTUFBSSxLQUFLSyxXQUFMLEVBQUosRUFBd0I7QUFDdEIsUUFBSTtBQUNGTCxNQUFBQSxLQUFLLEdBQUcsTUFBTSxLQUFLRCxJQUFMLENBQVVPLE1BQVYsQ0FBaUJRLGFBQWpCLEVBQWQ7QUFDRCxLQUZELENBRUUsT0FBT04sR0FBUCxFQUFZLENBQUU7QUFDakI7O0FBQ0QsTUFBSSxDQUFDUixLQUFMLEVBQVk7QUFDVkEsSUFBQUEsS0FBSyxHQUFHLENBQUMsTUFBTSxLQUFLZSxZQUFMLENBQWtCLGtCQUFsQixFQUFzQyxLQUF0QyxDQUFQLEVBQXFEQyxrQkFBckQsSUFBMkUsU0FBbkY7QUFDRDs7QUFDRCxTQUFPO0FBQ0xoQixJQUFBQTtBQURLLEdBQVA7QUFHRCxDQWpCRDs7ZUFxQmVILFEiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgXyBmcm9tICdsb2Rhc2gnO1xuaW1wb3J0IHsgdXRpbCB9IGZyb20gJ0BhcHBpdW0vc3VwcG9ydCc7XG5cblxuY29uc3QgY29tbWFuZHMgPSB7fTtcblxuLyoqXG4gKiBAdHlwZWRlZiB7T2JqZWN0fSBTZXRBcHBlYXJhbmNlT3B0aW9uc1xuICpcbiAqIEBwcm9wZXJ0eSB7c3RyaW5nfSBzdHlsZSAtIEN1cnJlbnRseSB0d28gc3R5bGVzIGFyZSBzdXBwb3J0ZWQ6XG4gKiAtIGRhcmtcbiAqIC0gbGlnaHRcbiAqL1xuXG4vKipcbiAqIFNldCB0aGUgZGV2aWNlJ3MgVUkgYXBwZWFyYW5jZSBzdHlsZVxuICpcbiAqIEBzaW5jZSBpT1MgMTIuMFxuICogQHBhcmFtIHtTZXRBcHBlYXJhbmNlT3B0aW9uc30gb3B0c1xuICogQHRocm93cyB7RXJyb3J9IGlmIHRoZSBjdXJyZW50IHBsYXRmb3JtIGRvZXMgbm90IHN1cHBvcnQgVUlcbiAqIGFwcGVhcmFuY2UgY2hhbmdlc1xuICovXG5jb21tYW5kcy5tb2JpbGVTZXRBcHBlYXJhbmNlID0gYXN5bmMgZnVuY3Rpb24gbW9iaWxlU2V0QXBwZWFyYW5jZSAob3B0cyA9IHt9KSB7XG4gIGNvbnN0IHtcbiAgICBzdHlsZSxcbiAgfSA9IG9wdHM7XG4gIGlmICghc3R5bGUpIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoYFRoZSAnc3R5bGUnIG9wdGlvbiBpcyBleHBlY3RlZCB0byBiZSBwcmVzZW50YCk7XG4gIH1cbiAgaWYgKHV0aWwuY29tcGFyZVZlcnNpb25zKHRoaXMub3B0cy5wbGF0Zm9ybVZlcnNpb24sICc8JywgJzEyLjAnKSkge1xuICAgIHRocm93IG5ldyBFcnJvcignQ2hhbmdpbmcgYXBwZWFyYW5jZSBpcyBvbmx5IHN1cHBvcnRlZCBzaW5jZSBpT1MgMTInKTtcbiAgfVxuXG4gIGlmICh0aGlzLmlzU2ltdWxhdG9yKCkpIHtcbiAgICB0cnkge1xuICAgICAgcmV0dXJuIHZvaWQgKGF3YWl0IHRoaXMub3B0cy5kZXZpY2Uuc2V0QXBwZWFyYW5jZShzdHlsZSkpO1xuICAgIH0gY2F0Y2ggKGlnbikge31cbiAgfVxuICAvLyBGYWxsIGJhY2sgdG8gdGhlIHVnbHkgU2lyaSB3b3JrYXJvdW5kIGlmIHRoZSBzaW11bGF0b3IgaXMgdG9vIG9sZFxuICAvLyBvciB0aGlzIGlzIGEgcmVhbCBkZXZpY2VcbiAgYXdhaXQgdGhpcy5tb2JpbGVTaXJpQ29tbWFuZCh7XG4gICAgdGV4dDogYFR1cm4gJHtfLnRvTG93ZXIoc3R5bGUpID09PSAnZGFyaycgPyAnb24nIDogJ29mZid9IGRhcmsgbW9kZWAsXG4gIH0pO1xufTtcblxuLyoqXG4gKiBAdHlwZWRlZiB7T2JqZWN0fSBBcHBlYXJhbmNlXG4gKiBAcHJvcGVydHkge3N0cmluZ30gc3R5bGUgLSBUaGUgZGV2aWNlJ3MgVUkgYXBwZWFyYW5jZSB2YWx1ZS5cbiAqIFRoaXMgY291bGQgYmUgb25lIG9mOlxuICogLSBgbGlnaHRgXG4gKiAtIGBkYXJrYFxuICogLSBgdW5rbm93bmBcbiAqIC0gYHVuc3VwcG9ydGVkYFxuICovXG5cbi8qKlxuICogR2V0IHRoZSBkZXZpY2UncyBVSSBhcHBlYXJhbmNlIHN0eWxlLlxuICpcbiAqIEBzaW5jZSBYY29kZSBTREsgMTFcbiAqIEByZXR1cm5zIHtBcHBlYXJhbmNlfVxuICovXG5jb21tYW5kcy5tb2JpbGVHZXRBcHBlYXJhbmNlID0gYXN5bmMgZnVuY3Rpb24gbW9iaWxlR2V0QXBwZWFyYW5jZSAoKSB7XG4gIGlmICh1dGlsLmNvbXBhcmVWZXJzaW9ucyh0aGlzLm9wdHMucGxhdGZvcm1WZXJzaW9uLCAnPCcsICcxMi4wJykpIHtcbiAgICByZXR1cm4gJ3Vuc3VwcG9ydGVkJztcbiAgfVxuXG4gIGxldCBzdHlsZTtcbiAgaWYgKHRoaXMuaXNTaW11bGF0b3IoKSkge1xuICAgIHRyeSB7XG4gICAgICBzdHlsZSA9IGF3YWl0IHRoaXMub3B0cy5kZXZpY2UuZ2V0QXBwZWFyYW5jZSgpO1xuICAgIH0gY2F0Y2ggKGlnbikge31cbiAgfVxuICBpZiAoIXN0eWxlKSB7XG4gICAgc3R5bGUgPSAoYXdhaXQgdGhpcy5wcm94eUNvbW1hbmQoJy93ZGEvZGV2aWNlL2luZm8nLCAnR0VUJykpLnVzZXJJbnRlcmZhY2VTdHlsZSB8fCAndW5rbm93bic7XG4gIH1cbiAgcmV0dXJuIHtcbiAgICBzdHlsZSxcbiAgfTtcbn07XG5cblxuZXhwb3J0IHsgY29tbWFuZHMgfTtcbmV4cG9ydCBkZWZhdWx0IGNvbW1hbmRzO1xuIl0sImZpbGUiOiJsaWIvY29tbWFuZHMvYXBwZWFyYW5jZS5qcyIsInNvdXJjZVJvb3QiOiIuLi8uLi8uLiJ9