appium-xcuitest-driver 4.13.3 → 4.14.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/CHANGELOG.md CHANGED
@@ -1,3 +1,17 @@
1
+ ## [4.14.0](https://github.com/appium/appium-xcuitest-driver/compare/v4.13.4...v4.14.0) (2022-12-13)
2
+
3
+
4
+ ### Features
5
+
6
+ * Streamline changing of Simulator preferences ([#1463](https://github.com/appium/appium-xcuitest-driver/issues/1463)) ([79c2e36](https://github.com/appium/appium-xcuitest-driver/commit/79c2e3626d550a2d04ace00d840d7b8e4d14614b))
7
+
8
+ ## [4.13.4](https://github.com/appium/appium-xcuitest-driver/compare/v4.13.3...v4.13.4) (2022-12-10)
9
+
10
+
11
+ ### Miscellaneous Chores
12
+
13
+ * Only call appropriate setters if their capabilities are defined ([#1462](https://github.com/appium/appium-xcuitest-driver/issues/1462)) ([f633a51](https://github.com/appium/appium-xcuitest-driver/commit/f633a51981aab8d03c3a3cb173bea90b6f9178a1))
14
+
1
15
  ## [4.13.3](https://github.com/appium/appium-xcuitest-driver/compare/v4.13.2...v4.13.3) (2022-12-08)
2
16
 
3
17
 
package/README.md CHANGED
@@ -151,8 +151,10 @@ Capability | Description
151
151
  `appium:app` | Full path to the application to be tested (the app must be located on the same machine where the server is running). `.ipa` and `.app` application extensions are supported. Zipped `.app` bundles are supported as well. Could also be an URL to a remote location. If neither of the `app` or `bundleId` capabilities are provided then the driver starts from the Home screen and expects the test to know what to do next. Do not provide both `app` and `browserName` capabilities at once.
152
152
  `appium:localizableStringsDir` | Where to look for localizable strings in the application bundle. Defaults to `en.lproj`
153
153
  `appium:otherApps` | App or list of apps (as a JSON array) to install prior to running tests. Note that it will not work with iOS real devices. Fore example: `["http://appium.github.io/appium/assets/TestApp9.4.app.zip", "/path/to/app-b.app"]`
154
- `appium:language` | Language to set for iOS, for example `fr`. Please read [Language IDs](https://developer.apple.com/library/archive/documentation/MacOSX/Conceptual/BPInternational/LanguageandLocaleIDs/LanguageandLocaleIDs.html) to get more details abuot available values for this capability.
155
- `appium:locale` | Locale to set for iOS, for example `fr_CA`. Please read [Locale IDs](https://developer.apple.com/library/archive/documentation/MacOSX/Conceptual/BPInternational/LanguageandLocaleIDs/LanguageandLocaleIDs.html#//apple_ref/doc/uid/10000171i-CH15-SW9) to get more details abuot available values for this capability.
154
+ `appium:language` | Language to set for iOS app, for example `fr`. Please read [Language IDs](https://developer.apple.com/library/archive/documentation/MacOSX/Conceptual/BPInternational/LanguageandLocaleIDs/LanguageandLocaleIDs.html) to get more details about available values for this capability. If a test is executed on a Simulator then UI language is changed as well. You can also change Simulator language in runtime using [mobile: configureLocalization](#mobile-configurelocalization) extension.
155
+ `appium:locale` | Locale to set for iOS app, for example `fr_CA`. Please read [Locale IDs](https://developer.apple.com/library/archive/documentation/MacOSX/Conceptual/BPInternational/LanguageandLocaleIDs/LanguageandLocaleIDs.html#//apple_ref/doc/uid/10000171i-CH15-SW9) to get more details about available values for this capability.
156
+ If a test is executed on a Simulator then UI locale is changed as well. You can also change Simulator locale in runtime using [mobile: configureLocalization](#mobile-configurelocalization) extension.
157
+ `appium:calendarFormat` | Calendar format to set for iOS Simulator, for example `gregorian` or `persian`. Can only be set in conjunction with `appium:locale`.
156
158
  `appium:appPushTimeout` | The timeout for application upload in milliseconds. Works for real devices only. The default value is `30000`ms
157
159
  `appium:appInstallStrategy` | Select application installation strategy for real devices. The following strategies are supported: `serial` (default) - pushes app files to the device in a sequential order; this is the least performant strategy, although the most reliable; `parallel` - pushes app files simultaneously; this is usually the the most performant strategy, but sometimes could not be very stable; `ios-deploy` - tells the driver to use a third-party tool [ios-deploy](https://www.npmjs.com/package/ios-deploy) to install the app; obviously the tool must be installed separately first and must be present in PATH before it could be used. | parallel
158
160
 
@@ -225,6 +227,7 @@ Capability | Description
225
227
  |`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` |
226
228
  |`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-----```|
227
229
  |`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`|
230
+ |`appium:safariGlobalPreferences`| (Simulator only) Allows changing of Mobile Safari's preferences at the session startup. Check the documentation on arguments of [mobile: updateSafariPreferences](#mobile-updatesafaripreferences) extension to get more details on the value type requirements. | { ShowTabBar: 0, WarnAboutFraudulentWebsites: 0 } |
228
231
 
229
232
  ### Web Context
230
233
 
@@ -240,12 +243,12 @@ Capability | Description
240
243
  |`appium:additionalWebviewBundleIds`|Array (or JSON array) of possible bundle identifiers for webviews. This is sometimes necessary if the Web Inspector is found to be returning a modified bundle identifier for the app. Defaults to `[]`|e.g., `['io.appium.modifiedId', 'ABCDEF']`|
241
244
  |`appium:webviewConnectTimeout`|The time to wait, in `ms`, for the initial presence of webviews in MobileSafari or hybrid apps. Defaults to `0`|e.g., '5000'|
242
245
  |`appium:safariIgnoreWebHostnames`| Provide a list of hostnames (comma-separated) that the Safari automation tools should ignore. This is to provide a workaround to prevent a webkit bug where the web context is unintentionally changed to a 3rd party website and the test gets stuck. The common culprits are search engines (yahoo, bing, google) and `about:blank` |e.g. `'www.yahoo.com, www.bing.com, www.google.com, about:blank'`|
243
- |`appium:nativeWebTap` | Enable native, non-javascript-based taps being in web context mode. Defaults to `false`. Warning: sometimes the preciseness of native taps could be broken, because there is no reliable way to map web element coordinates to native ones. | `true` |
244
- |`appium:nativeWebTapStrict` | Enforce native taps to be done by XCUITest driver rather than WebDriverAgent. Only applicable if `nativeWebTap` is enabled. `false` by default | `false` |
246
+ |`appium:nativeWebTap`| Enable native, non-javascript-based taps being in web context mode. Defaults to `false`. Warning: sometimes the preciseness of native taps could be broken, because there is no reliable way to map web element coordinates to native ones. | `true` |
247
+ |`appium:nativeWebTapStrict`| Enforce native taps to be done by XCUITest driver rather than WebDriverAgent. Only applicable if `nativeWebTap` is enabled. `false` by default | `false` |
245
248
  |`appium:safariInitialUrl`| Initial safari url, default is a local welcome page. Setting it to an empty string will skip the initial navigation. | e.g. `https://www.github.com` |
246
- |`appium:safariAllowPopups`| Allow javascript to open new windows in Safari. Default keeps current sim setting|`true` or `false`|
247
- |`appium:safariIgnoreFraudWarning`| Prevent Safari from showing a fraudulent website warning. Default keeps current sim setting.|`true` or `false`|
248
- |`appium:safariOpenLinksInBackground`| Whether Safari should allow links to open in new windows. Default keeps current sim setting.|`true` or `false`|
249
+ |`appium:safariAllowPopups`| (Simulator only) Allow javascript to open new windows in Safari. Default keeps current sim setting. |`true` or `false`|
250
+ |`appium:safariIgnoreFraudWarning`| (Simulator only) Prevent Safari from showing a fraudulent website warning. Default keeps current sim setting. |`true` or `false`|
251
+ |`appium:safariOpenLinksInBackground`| (Simulator only) Whether Safari should allow links to open in new windows. Default keeps current sim setting. |`true` or `false`|
249
252
  |`appium:webviewConnectRetries`| Number of times to send connection message to remote debugger, to get webview. Default: `8` |e.g., `12`|
250
253
  |`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`|
251
254
  |`appium:enableAsyncExecuteFromHttps`| Capability to allow simulators to execute asynchronous JavaScript on pages using HTTPS. Defaults to `false` | `true` or `false` |
@@ -1526,6 +1529,16 @@ If the connection is disconnected, condition inducer will be automatically disab
1526
1529
 
1527
1530
  Either `true` or `false`, where `true` means disabling of the condition inducer has been successful
1528
1531
 
1532
+ ### mobile: updateSafariPreferences
1533
+
1534
+ Updates preferences of Mobile Safari on Simulator
1535
+
1536
+ #### Arguments
1537
+
1538
+ Name | Type | Required | Description | Example
1539
+ --- | --- | --- | --- | ---
1540
+ preferences | map | yes | An object containing Mobile Safari preferences to be updated. The list of available setting names and their values could be retrieved by changing the corresponding Safari settings under Preferences-&gt;Safari and then inspecting `Library/Preferences/com.apple.mobilesafari.plist` file inside of `com.apple.mobilesafari` app container. The full path to the Mobile Safari's container could be retrieved from `xcrun simctl get_app_container <sim_udid> com.apple.mobilesafari data` command output. Use the `xcrun simctl spawn <sim_udid> defaults read <path_to_plist>` command to print the actual .plist content to the Terminal. | { ShowTabBar: 0, WarnAboutFraudulentWebsites: 0 }
1541
+
1529
1542
  ## Known issues
1530
1543
 
1531
1544
  * `shake` is implemented via AppleScript and works only on Simulator due to lack of support from Apple
@@ -119,7 +119,8 @@ extensions.executeMobile = async function executeMobile(mobileCommand, opts = {}
119
119
  stopPcap: 'mobileStopPcap',
120
120
  listConditionInducers: 'mobileListConditionInducers',
121
121
  enableConditionInducer: 'mobileEnableConditionInducer',
122
- disableConditionInducer: 'mobileDisableConditionInducer'
122
+ disableConditionInducer: 'mobileDisableConditionInducer',
123
+ updateSafariPreferences: 'mobileUpdateSafariPreferences'
123
124
  };
124
125
  if (!_lodash.default.has(commandMap, mobileCommand)) {
125
126
  throw new _driver.errors.UnknownCommandError(`Unknown mobile command '${mobileCommand}'. Only ${_lodash.default.keys(commandMap).join(', ')} commands are supported.`);
@@ -128,4 +129,4 @@ extensions.executeMobile = async function executeMobile(mobileCommand, opts = {}
128
129
  };
129
130
  var _default = extensions;
130
131
  exports.default = _default;
131
- //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJleHRlbnNpb25zIiwicmVjZWl2ZUFzeW5jUmVzcG9uc2UiLCJzdGF0dXMiLCJ2YWx1ZSIsImxvZyIsImRlYnVnIiwiSlNPTiIsInN0cmluZ2lmeSIsInV0aWwiLCJoYXNWYWx1ZSIsImFzeW5jUHJvbWlzZSIsIndhcm4iLCJyZWplY3QiLCJlcnJvckZyb21Db2RlIiwibWVzc2FnZSIsIl8iLCJpc1N0cmluZyIsImVycm9yIiwiZXJyb3JGcm9tVzNDSnNvbkNvZGUiLCJzdGFja3RyYWNlIiwicmVzb2x2ZSIsImV4ZWN1dGUiLCJzY3JpcHQiLCJhcmdzIiwibWF0Y2giLCJyZXBsYWNlIiwidHJpbSIsImV4ZWN1dGVNb2JpbGUiLCJpc0FycmF5IiwiaXNXZWJDb250ZXh0IiwiY29udmVydEVsZW1lbnRzRm9yQXRvbXMiLCJyZXN1bHQiLCJleGVjdXRlQXRvbSIsImNhY2hlV2ViRWxlbWVudHMiLCJlcnJvcnMiLCJOb3RJbXBsZW1lbnRlZEVycm9yIiwiZXhlY3V0ZUFzeW5jIiwiYXN5bmNXYWl0TXMiLCJwcm9taXNlIiwicmVtb3RlIiwiZXhlY3V0ZUF0b21Bc3luYyIsImN1cldlYkZyYW1lcyIsIndhaXRGb3JBdG9tIiwibW9iaWxlQ29tbWFuZCIsIm9wdHMiLCJjb21tYW5kTWFwIiwidGFwIiwic2Nyb2xsIiwic2VsZWN0UGlja2VyV2hlZWxWYWx1ZSIsInN3aXBlIiwicGluY2giLCJkb3VibGVUYXAiLCJ0d29GaW5nZXJUYXAiLCJ0YXBXaXRoTnVtYmVyT2ZUYXBzIiwidG91Y2hBbmRIb2xkIiwiZHJhZ0Zyb21Ub0ZvckR1cmF0aW9uIiwicm90YXRlRWxlbWVudCIsImRyYWdGcm9tVG9XaXRoVmVsb2NpdHkiLCJmb3JjZVByZXNzIiwic2Nyb2xsVG9FbGVtZW50IiwiYWxlcnQiLCJzZXRQYXN0ZWJvYXJkIiwiZ2V0UGFzdGVib2FyZCIsInNvdXJjZSIsImdldENvbnRleHRzIiwiaW5zdGFsbEFwcCIsImlzQXBwSW5zdGFsbGVkIiwicmVtb3ZlQXBwIiwibGF1bmNoQXBwIiwidGVybWluYXRlQXBwIiwia2lsbEFwcCIsInF1ZXJ5QXBwU3RhdGUiLCJhY3RpdmF0ZUFwcCIsImxpc3RBcHBzIiwidmlld3BvcnRTY3JlZW5zaG90Iiwidmlld3BvcnRSZWN0Iiwic3RhcnRQZXJmUmVjb3JkIiwic3RvcFBlcmZSZWNvcmQiLCJpbnN0YWxsQ2VydGlmaWNhdGUiLCJsaXN0Q2VydGlmaWNhdGVzIiwic3RhcnRMb2dzQnJvYWRjYXN0Iiwic3RvcExvZ3NCcm9hZGNhc3QiLCJiYXR0ZXJ5SW5mbyIsImRldmljZUluZm8iLCJnZXREZXZpY2VUaW1lIiwiYWN0aXZlQXBwSW5mbyIsImRldmljZVNjcmVlbkluZm8iLCJwcmVzc0J1dHRvbiIsImVucm9sbEJpb21ldHJpYyIsInNlbmRCaW9tZXRyaWNNYXRjaCIsImlzQmlvbWV0cmljRW5yb2xsZWQiLCJjbGVhcktleWNoYWlucyIsImdldFBlcm1pc3Npb24iLCJzZXRQZXJtaXNzaW9uIiwicmVzZXRQZXJtaXNzaW9uIiwiZ2V0QXBwZWFyYW5jZSIsInNldEFwcGVhcmFuY2UiLCJzaXJpQ29tbWFuZCIsInB1c2hGaWxlIiwicHVsbEZpbGUiLCJwdWxsRm9sZGVyIiwiZGVsZXRlRmlsZSIsImRlbGV0ZUZvbGRlciIsInN0YXJ0QXVkaW9SZWNvcmRpbmciLCJzdG9wQXVkaW9SZWNvcmRpbmciLCJydW5YQ1Rlc3QiLCJpbnN0YWxsWENUZXN0QnVuZGxlIiwibGlzdFhDVGVzdEJ1bmRsZXMiLCJsaXN0WENUZXN0c0luVGVzdEJ1bmRsZSIsInB1c2hOb3RpZmljYXRpb24iLCJleHBlY3ROb3RpZmljYXRpb24iLCJwZXJmb3JtSW9IaWRFdmVudCIsImNvbmZpZ3VyZUxvY2FsaXphdGlvbiIsInJlc2V0TG9jYXRpb25TZXJ2aWNlIiwic3RhcnRQY2FwIiwic3RvcFBjYXAiLCJsaXN0Q29uZGl0aW9uSW5kdWNlcnMiLCJlbmFibGVDb25kaXRpb25JbmR1Y2VyIiwiZGlzYWJsZUNvbmRpdGlvbkluZHVjZXIiLCJoYXMiLCJVbmtub3duQ29tbWFuZEVycm9yIiwia2V5cyIsImpvaW4iXSwic291cmNlcyI6WyIuLi8uLi8uLi9saWIvY29tbWFuZHMvZXhlY3V0ZS5qcyJdLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgXyBmcm9tICdsb2Rhc2gnO1xuaW1wb3J0IHtcbiAgZXJyb3JzLCBlcnJvckZyb21Db2RlLCBlcnJvckZyb21XM0NKc29uQ29kZVxufSBmcm9tICdhcHBpdW0vZHJpdmVyJztcbmltcG9ydCB7IHV0aWwgfSBmcm9tICdhcHBpdW0vc3VwcG9ydCc7XG5cbmNvbnN0IGV4dGVuc2lvbnMgPSB7fTtcblxuZXh0ZW5zaW9ucy5yZWNlaXZlQXN5bmNSZXNwb25zZSA9IGFzeW5jIGZ1bmN0aW9uIHJlY2VpdmVBc3luY1Jlc3BvbnNlIChzdGF0dXMsIHZhbHVlKSB7IC8vIGVzbGludC1kaXNhYmxlLWxpbmUgcmVxdWlyZS1hd2FpdFxuICB0aGlzLmxvZy5kZWJ1ZyhgUmVjZWl2ZWQgYXN5bmMgcmVzcG9uc2U6ICR7SlNPTi5zdHJpbmdpZnkodmFsdWUpfWApO1xuICBpZiAoIXV0aWwuaGFzVmFsdWUodGhpcy5hc3luY1Byb21pc2UpKSB7XG4gICAgdGhpcy5sb2cud2FybihgUmVjZWl2ZWQgYXN5bmMgcmVzcG9uc2Ugd2hlbiB3ZSB3ZXJlIG5vdCBleHBlY3Rpbmcgb25lISBgICtcbiAgICAgIGBSZXNwb25zZSB3YXM6ICR7SlNPTi5zdHJpbmdpZnkodmFsdWUpfWApO1xuICAgIHJldHVybjtcbiAgfVxuXG4gIGlmICh1dGlsLmhhc1ZhbHVlKHN0YXR1cykgJiYgc3RhdHVzICE9PSAwKSB7XG4gICAgLy8gTUpTT05XUFxuICAgIHJldHVybiB0aGlzLmFzeW5jUHJvbWlzZS5yZWplY3QoZXJyb3JGcm9tQ29kZShzdGF0dXMsIHZhbHVlLm1lc3NhZ2UpKTtcbiAgfVxuICBpZiAoIXV0aWwuaGFzVmFsdWUoc3RhdHVzKSAmJiB2YWx1ZSAmJiBfLmlzU3RyaW5nKHZhbHVlLmVycm9yKSkge1xuICAgIC8vIFczQ1xuICAgIHJldHVybiB0aGlzLmFzeW5jUHJvbWlzZS5yZWplY3QoZXJyb3JGcm9tVzNDSnNvbkNvZGUodmFsdWUuZXJyb3IsIHZhbHVlLm1lc3NhZ2UsIHZhbHVlLnN0YWNrdHJhY2UpKTtcbiAgfVxuICByZXR1cm4gdGhpcy5hc3luY1Byb21pc2UucmVzb2x2ZSh2YWx1ZSk7XG59O1xuXG5leHRlbnNpb25zLmV4ZWN1dGUgPSBhc3luYyBmdW5jdGlvbiBleGVjdXRlIChzY3JpcHQsIGFyZ3MpIHtcbiAgaWYgKHNjcmlwdC5tYXRjaCgvXm1vYmlsZTovKSkge1xuICAgIHNjcmlwdCA9IHNjcmlwdC5yZXBsYWNlKC9ebW9iaWxlOi8sICcnKS50cmltKCk7XG4gICAgcmV0dXJuIGF3YWl0IHRoaXMuZXhlY3V0ZU1vYmlsZShzY3JpcHQsIF8uaXNBcnJheShhcmdzKSA/IGFyZ3NbMF0gOiBhcmdzKTtcbiAgfSBlbHNlIGlmICh0aGlzLmlzV2ViQ29udGV4dCgpKSB7XG4gICAgYXJncyA9IHRoaXMuY29udmVydEVsZW1lbnRzRm9yQXRvbXMoYXJncyk7XG4gICAgY29uc3QgcmVzdWx0ID0gYXdhaXQgdGhpcy5leGVjdXRlQXRvbSgnZXhlY3V0ZV9zY3JpcHQnLCBbc2NyaXB0LCBhcmdzXSk7XG4gICAgcmV0dXJuIHRoaXMuY2FjaGVXZWJFbGVtZW50cyhyZXN1bHQpO1xuICB9IGVsc2Uge1xuICAgIHRocm93IG5ldyBlcnJvcnMuTm90SW1wbGVtZW50ZWRFcnJvcigpO1xuICB9XG59O1xuXG5leHRlbnNpb25zLmV4ZWN1dGVBc3luYyA9IGFzeW5jIGZ1bmN0aW9uIGV4ZWN1dGVBc3luYyAoc2NyaXB0LCBhcmdzKSB7XG4gIGlmICghdGhpcy5pc1dlYkNvbnRleHQoKSkge1xuICAgIHRocm93IG5ldyBlcnJvcnMuTm90SW1wbGVtZW50ZWRFcnJvcigpO1xuICB9XG5cbiAgYXJncyA9IHRoaXMuY29udmVydEVsZW1lbnRzRm9yQXRvbXMoYXJncyk7XG4gIHRoaXMuYXN5bmNXYWl0TXMgPSB0aGlzLmFzeW5jV2FpdE1zIHx8IDA7XG4gIGNvbnN0IHByb21pc2UgPSB0aGlzLnJlbW90ZS5leGVjdXRlQXRvbUFzeW5jKCdleGVjdXRlX2FzeW5jX3NjcmlwdCcsIFtcbiAgICBzY3JpcHQsIGFyZ3MsIHRoaXMuYXN5bmNXYWl0TXNcbiAgXSwgdGhpcy5jdXJXZWJGcmFtZXMpO1xuICByZXR1cm4gdGhpcy5jYWNoZVdlYkVsZW1lbnRzKGF3YWl0IHRoaXMud2FpdEZvckF0b20ocHJvbWlzZSkpO1xufTtcblxuZXh0ZW5zaW9ucy5leGVjdXRlTW9iaWxlID0gYXN5bmMgZnVuY3Rpb24gZXhlY3V0ZU1vYmlsZSAobW9iaWxlQ29tbWFuZCwgb3B0cyA9IHt9KSB7XG4gIGNvbnN0IGNvbW1hbmRNYXAgPSB7XG4gICAgLy9yZWdpb24gZ2VzdHVyZXMgc3VwcG9ydFxuICAgIHRhcDogJ21vYmlsZVRhcCcsXG4gICAgc2Nyb2xsOiAnbW9iaWxlU2Nyb2xsJyxcbiAgICBzZWxlY3RQaWNrZXJXaGVlbFZhbHVlOiAnbW9iaWxlU2VsZWN0UGlja2VyV2hlZWxWYWx1ZScsXG4gICAgLy8gaHR0cHM6Ly9kZXZlbG9wZXIuYXBwbGUuY29tL2RvY3VtZW50YXRpb24veGN0ZXN0L3hjdWllbGVtZW50LzE2MTg2Njgtc3dpcGVsZWZ0P2xhbmd1YWdlPW9iamNcbiAgICAvLyBodHRwczovL2RldmVsb3Blci5hcHBsZS5jb20vZG9jdW1lbnRhdGlvbi94Y3Rlc3QveGN1aWVsZW1lbnQvMTYxODY3NC1zd2lwZXJpZ2h0P2xhbmd1YWdlPW9iamNcbiAgICAvLyBodHRwczovL2RldmVsb3Blci5hcHBsZS5jb20vZG9jdW1lbnRhdGlvbi94Y3Rlc3QveGN1aWVsZW1lbnQvMTYxODY2Ny1zd2lwZXVwP2xhbmd1YWdlPW9iamNcbiAgICAvLyBodHRwczovL2RldmVsb3Blci5hcHBsZS5jb20vZG9jdW1lbnRhdGlvbi94Y3Rlc3QveGN1aWVsZW1lbnQvMTYxODY2NC1zd2lwZWRvd24/bGFuZ3VhZ2U9b2JqY1xuICAgIHN3aXBlOiAnbW9iaWxlU3dpcGUnLFxuICAgIC8vIGh0dHBzOi8vZGV2ZWxvcGVyLmFwcGxlLmNvbS9kb2N1bWVudGF0aW9uL3hjdGVzdC94Y3VpZWxlbWVudC8xNjE4NjY5LXBpbmNod2l0aHNjYWxlP2xhbmd1YWdlPW9iamNcbiAgICBwaW5jaDogJ21vYmlsZVBpbmNoJyxcbiAgICAvLyBodHRwczovL2RldmVsb3Blci5hcHBsZS5jb20vZG9jdW1lbnRhdGlvbi94Y3Rlc3QveGN1aWVsZW1lbnQvMTYxODY3My1kb3VibGV0YXA/bGFuZ3VhZ2U9b2JqY1xuICAgIGRvdWJsZVRhcDogJ21vYmlsZURvdWJsZVRhcCcsXG4gICAgLy8gaHR0cHM6Ly9kZXZlbG9wZXIuYXBwbGUuY29tL2RvY3VtZW50YXRpb24veGN0ZXN0L3hjdWllbGVtZW50LzE2MTg2NzUtdHdvZmluZ2VydGFwP2xhbmd1YWdlPW9iamNcbiAgICB0d29GaW5nZXJUYXA6ICdtb2JpbGVUd29GaW5nZXJUYXAnLFxuICAgIC8vIGh0dHBzOi8vZGV2ZWxvcGVyLmFwcGxlLmNvbS9kb2N1bWVudGF0aW9uL3hjdGVzdC94Y3VpZWxlbWVudC8xNjE4NjcxLXRhcHdpdGhudW1iZXJvZnRhcHM/bGFuZ3VhZ2U9b2JqY1xuICAgIHRhcFdpdGhOdW1iZXJPZlRhcHM6ICdtb2JpbGVUYXBXaXRoTnVtYmVyT2ZUYXBzJyxcbiAgICAvLyBodHRwczovL2RldmVsb3Blci5hcHBsZS5jb20vZG9jdW1lbnRhdGlvbi94Y3Rlc3QveGN1aWVsZW1lbnQvMTYxODY2My1wcmVzc2ZvcmR1cmF0aW9uP2xhbmd1YWdlPW9iamNcbiAgICB0b3VjaEFuZEhvbGQ6ICdtb2JpbGVUb3VjaEFuZEhvbGQnLFxuICAgIC8vIGh0dHBzOi8vZGV2ZWxvcGVyLmFwcGxlLmNvbS9kb2N1bWVudGF0aW9uL3hjdGVzdC94Y3VpZWxlbWVudC8xNjE4NjcwLXByZXNzZm9yZHVyYXRpb24/bGFuZ3VhZ2U9b2JqY1xuICAgIGRyYWdGcm9tVG9Gb3JEdXJhdGlvbjogJ21vYmlsZURyYWdGcm9tVG9Gb3JEdXJhdGlvbicsXG4gICAgLy8gaHR0cHM6Ly9kZXZlbG9wZXIuYXBwbGUuY29tL2RvY3VtZW50YXRpb24veGN0ZXN0L3hjdWllbGVtZW50LzE2MTg2NjUtcm90YXRlP2xhbmd1YWdlPW9iamNcbiAgICByb3RhdGVFbGVtZW50OiAnbW9iaWxlUm90YXRlRWxlbWVudCcsXG4gICAgLy8gaHR0cHM6Ly9kZXZlbG9wZXIuYXBwbGUuY29tL2RvY3VtZW50YXRpb24veGN0ZXN0L3hjdWljb29yZGluYXRlLzM1NTE2OTItcHJlc3Nmb3JkdXJhdGlvbj9sYW5ndWFnZT1vYmpjXG4gICAgZHJhZ0Zyb21Ub1dpdGhWZWxvY2l0eTogJ21vYmlsZURyYWdGcm9tVG9XaXRoVmVsb2NpdHknLFxuICAgIGZvcmNlUHJlc3M6ICdtb2JpbGVGb3JjZVByZXNzJyxcbiAgICBzY3JvbGxUb0VsZW1lbnQ6ICdtb2JpbGVTY3JvbGxUb0VsZW1lbnQnLFxuXG4gICAgLy9lbmRyZWdpb24gZ2VzdHVyZXMgc3VwcG9ydFxuICAgIGFsZXJ0OiAnbW9iaWxlSGFuZGxlQWxlcnQnLFxuXG4gICAgc2V0UGFzdGVib2FyZDogJ21vYmlsZVNldFBhc3RlYm9hcmQnLFxuICAgIGdldFBhc3RlYm9hcmQ6ICdtb2JpbGVHZXRQYXN0ZWJvYXJkJyxcblxuICAgIHNvdXJjZTogJ21vYmlsZUdldFNvdXJjZScsXG4gICAgZ2V0Q29udGV4dHM6ICdtb2JpbGVHZXRDb250ZXh0cycsXG5cbiAgICAvL3JlZ2lvbiBtdWx0aXBsZSBhcHBzIG1hbmFnZW1lbnRcbiAgICBpbnN0YWxsQXBwOiAnbW9iaWxlSW5zdGFsbEFwcCcsXG4gICAgaXNBcHBJbnN0YWxsZWQ6ICdtb2JpbGVJc0FwcEluc3RhbGxlZCcsXG4gICAgcmVtb3ZlQXBwOiAnbW9iaWxlUmVtb3ZlQXBwJyxcbiAgICBsYXVuY2hBcHA6ICdtb2JpbGVMYXVuY2hBcHAnLFxuICAgIHRlcm1pbmF0ZUFwcDogJ21vYmlsZVRlcm1pbmF0ZUFwcCcsXG4gICAga2lsbEFwcDogJ21vYmlsZUtpbGxBcHAnLFxuICAgIHF1ZXJ5QXBwU3RhdGU6ICdtb2JpbGVRdWVyeUFwcFN0YXRlJyxcbiAgICBhY3RpdmF0ZUFwcDogJ21vYmlsZUFjdGl2YXRlQXBwJyxcbiAgICBsaXN0QXBwczogJ21vYmlsZUxpc3RBcHBzJyxcbiAgICAvL2VuZHJlZ2lvbiBtdWx0aXBsZSBhcHBzIG1hbmFnZW1lbnRcblxuICAgIHZpZXdwb3J0U2NyZWVuc2hvdDogJ2dldFZpZXdwb3J0U2NyZWVuc2hvdCcsXG4gICAgdmlld3BvcnRSZWN0OiAnZ2V0Vmlld3BvcnRSZWN0JyxcblxuICAgIHN0YXJ0UGVyZlJlY29yZDogJ21vYmlsZVN0YXJ0UGVyZlJlY29yZCcsXG4gICAgc3RvcFBlcmZSZWNvcmQ6ICdtb2JpbGVTdG9wUGVyZlJlY29yZCcsXG5cbiAgICBpbnN0YWxsQ2VydGlmaWNhdGU6ICdtb2JpbGVJbnN0YWxsQ2VydGlmaWNhdGUnLFxuICAgIGxpc3RDZXJ0aWZpY2F0ZXM6ICdtb2JpbGVMaXN0Q2VydGlmaWNhdGVzJyxcblxuICAgIHN0YXJ0TG9nc0Jyb2FkY2FzdDogJ21vYmlsZVN0YXJ0TG9nc0Jyb2FkY2FzdCcsXG4gICAgc3RvcExvZ3NCcm9hZGNhc3Q6ICdtb2JpbGVTdG9wTG9nc0Jyb2FkY2FzdCcsXG5cbiAgICBiYXR0ZXJ5SW5mbzogJ21vYmlsZUdldEJhdHRlcnlJbmZvJyxcbiAgICBkZXZpY2VJbmZvOiAnbW9iaWxlR2V0RGV2aWNlSW5mbycsXG4gICAgZ2V0RGV2aWNlVGltZTogJ21vYmlsZUdldERldmljZVRpbWUnLFxuICAgIGFjdGl2ZUFwcEluZm86ICdtb2JpbGVHZXRBY3RpdmVBcHBJbmZvJyxcbiAgICBkZXZpY2VTY3JlZW5JbmZvOiAnZ2V0U2NyZWVuSW5mbycsXG5cbiAgICBwcmVzc0J1dHRvbjogJ21vYmlsZVByZXNzQnV0dG9uJyxcblxuICAgIGVucm9sbEJpb21ldHJpYzogJ21vYmlsZUVucm9sbEJpb21ldHJpYycsXG4gICAgc2VuZEJpb21ldHJpY01hdGNoOiAnbW9iaWxlU2VuZEJpb21ldHJpY01hdGNoJyxcbiAgICBpc0Jpb21ldHJpY0Vucm9sbGVkOiAnbW9iaWxlSXNCaW9tZXRyaWNFbnJvbGxlZCcsXG5cbiAgICBjbGVhcktleWNoYWluczogJ21vYmlsZUNsZWFyS2V5Y2hhaW5zJyxcblxuICAgIGdldFBlcm1pc3Npb246ICdtb2JpbGVHZXRQZXJtaXNzaW9uJyxcbiAgICBzZXRQZXJtaXNzaW9uOiAnbW9iaWxlU2V0UGVybWlzc2lvbnMnLFxuICAgIHJlc2V0UGVybWlzc2lvbjogJ21vYmlsZVJlc2V0UGVybWlzc2lvbicsXG5cbiAgICBnZXRBcHBlYXJhbmNlOiAnbW9iaWxlR2V0QXBwZWFyYW5jZScsXG4gICAgc2V0QXBwZWFyYW5jZTogJ21vYmlsZVNldEFwcGVhcmFuY2UnLFxuXG4gICAgc2lyaUNvbW1hbmQ6ICdtb2JpbGVTaXJpQ29tbWFuZCcsXG5cbiAgICBwdXNoRmlsZTogJ21vYmlsZVB1c2hGaWxlJyxcbiAgICBwdWxsRmlsZTogJ21vYmlsZVB1bGxGaWxlJyxcbiAgICBwdWxsRm9sZGVyOiAnbW9iaWxlUHVsbEZvbGRlcicsXG4gICAgZGVsZXRlRmlsZTogJ21vYmlsZURlbGV0ZUZpbGUnLFxuICAgIGRlbGV0ZUZvbGRlcjogJ21vYmlsZURlbGV0ZUZvbGRlcicsXG5cbiAgICBzdGFydEF1ZGlvUmVjb3JkaW5nOiAnc3RhcnRBdWRpb1JlY29yZGluZycsXG4gICAgc3RvcEF1ZGlvUmVjb3JkaW5nOiAnc3RvcEF1ZGlvUmVjb3JkaW5nJyxcblxuICAgIC8vIFhDVGVzdFxuICAgIHJ1blhDVGVzdDogJ21vYmlsZVJ1blhDVGVzdCcsXG4gICAgaW5zdGFsbFhDVGVzdEJ1bmRsZTogJ21vYmlsZUluc3RhbGxYQ1Rlc3RCdW5kbGUnLFxuICAgIGxpc3RYQ1Rlc3RCdW5kbGVzOiAnbW9iaWxlTGlzdFhDVGVzdEJ1bmRsZXMnLFxuICAgIGxpc3RYQ1Rlc3RzSW5UZXN0QnVuZGxlOiAnbW9iaWxlTGlzdFhDVGVzdHNJblRlc3RCdW5kbGUnLFxuXG4gICAgcHVzaE5vdGlmaWNhdGlvbjogJ21vYmlsZVB1c2hOb3RpZmljYXRpb24nLFxuICAgIGV4cGVjdE5vdGlmaWNhdGlvbjogJ21vYmlsZUV4cGVjdE5vdGlmaWNhdGlvbicsXG5cbiAgICBwZXJmb3JtSW9IaWRFdmVudDogJ21vYmlsZVBlcmZvcm1Jb0hpZEV2ZW50JyxcblxuICAgIGNvbmZpZ3VyZUxvY2FsaXphdGlvbjogJ21vYmlsZUNvbmZpZ3VyZUxvY2FsaXphdGlvbicsXG5cbiAgICByZXNldExvY2F0aW9uU2VydmljZTogJ21vYmlsZVJlc2V0TG9jYXRpb25TZXJ2aWNlJyxcblxuICAgIHN0YXJ0UGNhcDogJ21vYmlsZVN0YXJ0UGNhcCcsXG4gICAgc3RvcFBjYXA6ICdtb2JpbGVTdG9wUGNhcCcsXG4gICAgbGlzdENvbmRpdGlvbkluZHVjZXJzOiAnbW9iaWxlTGlzdENvbmRpdGlvbkluZHVjZXJzJyxcbiAgICBlbmFibGVDb25kaXRpb25JbmR1Y2VyOiAnbW9iaWxlRW5hYmxlQ29uZGl0aW9uSW5kdWNlcicsXG4gICAgZGlzYWJsZUNvbmRpdGlvbkluZHVjZXI6ICdtb2JpbGVEaXNhYmxlQ29uZGl0aW9uSW5kdWNlcicsXG4gIH07XG5cbiAgaWYgKCFfLmhhcyhjb21tYW5kTWFwLCBtb2JpbGVDb21tYW5kKSkge1xuICAgIHRocm93IG5ldyBlcnJvcnMuVW5rbm93bkNvbW1hbmRFcnJvcihgVW5rbm93biBtb2JpbGUgY29tbWFuZCAnJHttb2JpbGVDb21tYW5kfScuIE9ubHkgJHtfLmtleXMoY29tbWFuZE1hcCkuam9pbignLCAnKX0gY29tbWFuZHMgYXJlIHN1cHBvcnRlZC5gKTtcbiAgfVxuICByZXR1cm4gYXdhaXQgdGhpc1tjb21tYW5kTWFwW21vYmlsZUNvbW1hbmRdXShvcHRzKTtcbn07XG5cbmV4cG9ydCBkZWZhdWx0IGV4dGVuc2lvbnM7XG4iXSwibWFwcGluZ3MiOiI7Ozs7Ozs7O0FBQUE7QUFDQTtBQUdBO0FBRUEsTUFBTUEsVUFBVSxHQUFHLENBQUMsQ0FBQztBQUVyQkEsVUFBVSxDQUFDQyxvQkFBb0IsR0FBRyxlQUFlQSxvQkFBb0IsQ0FBRUMsTUFB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
132
+ //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJleHRlbnNpb25zIiwicmVjZWl2ZUFzeW5jUmVzcG9uc2UiLCJzdGF0dXMiLCJ2YWx1ZSIsImxvZyIsImRlYnVnIiwiSlNPTiIsInN0cmluZ2lmeSIsInV0aWwiLCJoYXNWYWx1ZSIsImFzeW5jUHJvbWlzZSIsIndhcm4iLCJyZWplY3QiLCJlcnJvckZyb21Db2RlIiwibWVzc2FnZSIsIl8iLCJpc1N0cmluZyIsImVycm9yIiwiZXJyb3JGcm9tVzNDSnNvbkNvZGUiLCJzdGFja3RyYWNlIiwicmVzb2x2ZSIsImV4ZWN1dGUiLCJzY3JpcHQiLCJhcmdzIiwibWF0Y2giLCJyZXBsYWNlIiwidHJpbSIsImV4ZWN1dGVNb2JpbGUiLCJpc0FycmF5IiwiaXNXZWJDb250ZXh0IiwiY29udmVydEVsZW1lbnRzRm9yQXRvbXMiLCJyZXN1bHQiLCJleGVjdXRlQXRvbSIsImNhY2hlV2ViRWxlbWVudHMiLCJlcnJvcnMiLCJOb3RJbXBsZW1lbnRlZEVycm9yIiwiZXhlY3V0ZUFzeW5jIiwiYXN5bmNXYWl0TXMiLCJwcm9taXNlIiwicmVtb3RlIiwiZXhlY3V0ZUF0b21Bc3luYyIsImN1cldlYkZyYW1lcyIsIndhaXRGb3JBdG9tIiwibW9iaWxlQ29tbWFuZCIsIm9wdHMiLCJjb21tYW5kTWFwIiwidGFwIiwic2Nyb2xsIiwic2VsZWN0UGlja2VyV2hlZWxWYWx1ZSIsInN3aXBlIiwicGluY2giLCJkb3VibGVUYXAiLCJ0d29GaW5nZXJUYXAiLCJ0YXBXaXRoTnVtYmVyT2ZUYXBzIiwidG91Y2hBbmRIb2xkIiwiZHJhZ0Zyb21Ub0ZvckR1cmF0aW9uIiwicm90YXRlRWxlbWVudCIsImRyYWdGcm9tVG9XaXRoVmVsb2NpdHkiLCJmb3JjZVByZXNzIiwic2Nyb2xsVG9FbGVtZW50IiwiYWxlcnQiLCJzZXRQYXN0ZWJvYXJkIiwiZ2V0UGFzdGVib2FyZCIsInNvdXJjZSIsImdldENvbnRleHRzIiwiaW5zdGFsbEFwcCIsImlzQXBwSW5zdGFsbGVkIiwicmVtb3ZlQXBwIiwibGF1bmNoQXBwIiwidGVybWluYXRlQXBwIiwia2lsbEFwcCIsInF1ZXJ5QXBwU3RhdGUiLCJhY3RpdmF0ZUFwcCIsImxpc3RBcHBzIiwidmlld3BvcnRTY3JlZW5zaG90Iiwidmlld3BvcnRSZWN0Iiwic3RhcnRQZXJmUmVjb3JkIiwic3RvcFBlcmZSZWNvcmQiLCJpbnN0YWxsQ2VydGlmaWNhdGUiLCJsaXN0Q2VydGlmaWNhdGVzIiwic3RhcnRMb2dzQnJvYWRjYXN0Iiwic3RvcExvZ3NCcm9hZGNhc3QiLCJiYXR0ZXJ5SW5mbyIsImRldmljZUluZm8iLCJnZXREZXZpY2VUaW1lIiwiYWN0aXZlQXBwSW5mbyIsImRldmljZVNjcmVlbkluZm8iLCJwcmVzc0J1dHRvbiIsImVucm9sbEJpb21ldHJpYyIsInNlbmRCaW9tZXRyaWNNYXRjaCIsImlzQmlvbWV0cmljRW5yb2xsZWQiLCJjbGVhcktleWNoYWlucyIsImdldFBlcm1pc3Npb24iLCJzZXRQZXJtaXNzaW9uIiwicmVzZXRQZXJtaXNzaW9uIiwiZ2V0QXBwZWFyYW5jZSIsInNldEFwcGVhcmFuY2UiLCJzaXJpQ29tbWFuZCIsInB1c2hGaWxlIiwicHVsbEZpbGUiLCJwdWxsRm9sZGVyIiwiZGVsZXRlRmlsZSIsImRlbGV0ZUZvbGRlciIsInN0YXJ0QXVkaW9SZWNvcmRpbmciLCJzdG9wQXVkaW9SZWNvcmRpbmciLCJydW5YQ1Rlc3QiLCJpbnN0YWxsWENUZXN0QnVuZGxlIiwibGlzdFhDVGVzdEJ1bmRsZXMiLCJsaXN0WENUZXN0c0luVGVzdEJ1bmRsZSIsInB1c2hOb3RpZmljYXRpb24iLCJleHBlY3ROb3RpZmljYXRpb24iLCJwZXJmb3JtSW9IaWRFdmVudCIsImNvbmZpZ3VyZUxvY2FsaXphdGlvbiIsInJlc2V0TG9jYXRpb25TZXJ2aWNlIiwic3RhcnRQY2FwIiwic3RvcFBjYXAiLCJsaXN0Q29uZGl0aW9uSW5kdWNlcnMiLCJlbmFibGVDb25kaXRpb25JbmR1Y2VyIiwiZGlzYWJsZUNvbmRpdGlvbkluZHVjZXIiLCJ1cGRhdGVTYWZhcmlQcmVmZXJlbmNlcyIsImhhcyIsIlVua25vd25Db21tYW5kRXJyb3IiLCJrZXlzIiwiam9pbiJdLCJzb3VyY2VzIjpbIi4uLy4uLy4uL2xpYi9jb21tYW5kcy9leGVjdXRlLmpzIl0sInNvdXJjZXNDb250ZW50IjpbImltcG9ydCBfIGZyb20gJ2xvZGFzaCc7XG5pbXBvcnQge1xuICBlcnJvcnMsIGVycm9yRnJvbUNvZGUsIGVycm9yRnJvbVczQ0pzb25Db2RlXG59IGZyb20gJ2FwcGl1bS9kcml2ZXInO1xuaW1wb3J0IHsgdXRpbCB9IGZyb20gJ2FwcGl1bS9zdXBwb3J0JztcblxuY29uc3QgZXh0ZW5zaW9ucyA9IHt9O1xuXG5leHRlbnNpb25zLnJlY2VpdmVBc3luY1Jlc3BvbnNlID0gYXN5bmMgZnVuY3Rpb24gcmVjZWl2ZUFzeW5jUmVzcG9uc2UgKHN0YXR1cywgdmFsdWUpIHsgLy8gZXNsaW50LWRpc2FibGUtbGluZSByZXF1aXJlLWF3YWl0XG4gIHRoaXMubG9nLmRlYnVnKGBSZWNlaXZlZCBhc3luYyByZXNwb25zZTogJHtKU09OLnN0cmluZ2lmeSh2YWx1ZSl9YCk7XG4gIGlmICghdXRpbC5oYXNWYWx1ZSh0aGlzLmFzeW5jUHJvbWlzZSkpIHtcbiAgICB0aGlzLmxvZy53YXJuKGBSZWNlaXZlZCBhc3luYyByZXNwb25zZSB3aGVuIHdlIHdlcmUgbm90IGV4cGVjdGluZyBvbmUhIGAgK1xuICAgICAgYFJlc3BvbnNlIHdhczogJHtKU09OLnN0cmluZ2lmeSh2YWx1ZSl9YCk7XG4gICAgcmV0dXJuO1xuICB9XG5cbiAgaWYgKHV0aWwuaGFzVmFsdWUoc3RhdHVzKSAmJiBzdGF0dXMgIT09IDApIHtcbiAgICAvLyBNSlNPTldQXG4gICAgcmV0dXJuIHRoaXMuYXN5bmNQcm9taXNlLnJlamVjdChlcnJvckZyb21Db2RlKHN0YXR1cywgdmFsdWUubWVzc2FnZSkpO1xuICB9XG4gIGlmICghdXRpbC5oYXNWYWx1ZShzdGF0dXMpICYmIHZhbHVlICYmIF8uaXNTdHJpbmcodmFsdWUuZXJyb3IpKSB7XG4gICAgLy8gVzNDXG4gICAgcmV0dXJuIHRoaXMuYXN5bmNQcm9taXNlLnJlamVjdChlcnJvckZyb21XM0NKc29uQ29kZSh2YWx1ZS5lcnJvciwgdmFsdWUubWVzc2FnZSwgdmFsdWUuc3RhY2t0cmFjZSkpO1xuICB9XG4gIHJldHVybiB0aGlzLmFzeW5jUHJvbWlzZS5yZXNvbHZlKHZhbHVlKTtcbn07XG5cbmV4dGVuc2lvbnMuZXhlY3V0ZSA9IGFzeW5jIGZ1bmN0aW9uIGV4ZWN1dGUgKHNjcmlwdCwgYXJncykge1xuICBpZiAoc2NyaXB0Lm1hdGNoKC9ebW9iaWxlOi8pKSB7XG4gICAgc2NyaXB0ID0gc2NyaXB0LnJlcGxhY2UoL15tb2JpbGU6LywgJycpLnRyaW0oKTtcbiAgICByZXR1cm4gYXdhaXQgdGhpcy5leGVjdXRlTW9iaWxlKHNjcmlwdCwgXy5pc0FycmF5KGFyZ3MpID8gYXJnc1swXSA6IGFyZ3MpO1xuICB9IGVsc2UgaWYgKHRoaXMuaXNXZWJDb250ZXh0KCkpIHtcbiAgICBhcmdzID0gdGhpcy5jb252ZXJ0RWxlbWVudHNGb3JBdG9tcyhhcmdzKTtcbiAgICBjb25zdCByZXN1bHQgPSBhd2FpdCB0aGlzLmV4ZWN1dGVBdG9tKCdleGVjdXRlX3NjcmlwdCcsIFtzY3JpcHQsIGFyZ3NdKTtcbiAgICByZXR1cm4gdGhpcy5jYWNoZVdlYkVsZW1lbnRzKHJlc3VsdCk7XG4gIH0gZWxzZSB7XG4gICAgdGhyb3cgbmV3IGVycm9ycy5Ob3RJbXBsZW1lbnRlZEVycm9yKCk7XG4gIH1cbn07XG5cbmV4dGVuc2lvbnMuZXhlY3V0ZUFzeW5jID0gYXN5bmMgZnVuY3Rpb24gZXhlY3V0ZUFzeW5jIChzY3JpcHQsIGFyZ3MpIHtcbiAgaWYgKCF0aGlzLmlzV2ViQ29udGV4dCgpKSB7XG4gICAgdGhyb3cgbmV3IGVycm9ycy5Ob3RJbXBsZW1lbnRlZEVycm9yKCk7XG4gIH1cblxuICBhcmdzID0gdGhpcy5jb252ZXJ0RWxlbWVudHNGb3JBdG9tcyhhcmdzKTtcbiAgdGhpcy5hc3luY1dhaXRNcyA9IHRoaXMuYXN5bmNXYWl0TXMgfHwgMDtcbiAgY29uc3QgcHJvbWlzZSA9IHRoaXMucmVtb3RlLmV4ZWN1dGVBdG9tQXN5bmMoJ2V4ZWN1dGVfYXN5bmNfc2NyaXB0JywgW1xuICAgIHNjcmlwdCwgYXJncywgdGhpcy5hc3luY1dhaXRNc1xuICBdLCB0aGlzLmN1cldlYkZyYW1lcyk7XG4gIHJldHVybiB0aGlzLmNhY2hlV2ViRWxlbWVudHMoYXdhaXQgdGhpcy53YWl0Rm9yQXRvbShwcm9taXNlKSk7XG59O1xuXG5leHRlbnNpb25zLmV4ZWN1dGVNb2JpbGUgPSBhc3luYyBmdW5jdGlvbiBleGVjdXRlTW9iaWxlIChtb2JpbGVDb21tYW5kLCBvcHRzID0ge30pIHtcbiAgY29uc3QgY29tbWFuZE1hcCA9IHtcbiAgICAvL3JlZ2lvbiBnZXN0dXJlcyBzdXBwb3J0XG4gICAgdGFwOiAnbW9iaWxlVGFwJyxcbiAgICBzY3JvbGw6ICdtb2JpbGVTY3JvbGwnLFxuICAgIHNlbGVjdFBpY2tlcldoZWVsVmFsdWU6ICdtb2JpbGVTZWxlY3RQaWNrZXJXaGVlbFZhbHVlJyxcbiAgICAvLyBodHRwczovL2RldmVsb3Blci5hcHBsZS5jb20vZG9jdW1lbnRhdGlvbi94Y3Rlc3QveGN1aWVsZW1lbnQvMTYxODY2OC1zd2lwZWxlZnQ/bGFuZ3VhZ2U9b2JqY1xuICAgIC8vIGh0dHBzOi8vZGV2ZWxvcGVyLmFwcGxlLmNvbS9kb2N1bWVudGF0aW9uL3hjdGVzdC94Y3VpZWxlbWVudC8xNjE4Njc0LXN3aXBlcmlnaHQ/bGFuZ3VhZ2U9b2JqY1xuICAgIC8vIGh0dHBzOi8vZGV2ZWxvcGVyLmFwcGxlLmNvbS9kb2N1bWVudGF0aW9uL3hjdGVzdC94Y3VpZWxlbWVudC8xNjE4NjY3LXN3aXBldXA/bGFuZ3VhZ2U9b2JqY1xuICAgIC8vIGh0dHBzOi8vZGV2ZWxvcGVyLmFwcGxlLmNvbS9kb2N1bWVudGF0aW9uL3hjdGVzdC94Y3VpZWxlbWVudC8xNjE4NjY0LXN3aXBlZG93bj9sYW5ndWFnZT1vYmpjXG4gICAgc3dpcGU6ICdtb2JpbGVTd2lwZScsXG4gICAgLy8gaHR0cHM6Ly9kZXZlbG9wZXIuYXBwbGUuY29tL2RvY3VtZW50YXRpb24veGN0ZXN0L3hjdWllbGVtZW50LzE2MTg2NjktcGluY2h3aXRoc2NhbGU/bGFuZ3VhZ2U9b2JqY1xuICAgIHBpbmNoOiAnbW9iaWxlUGluY2gnLFxuICAgIC8vIGh0dHBzOi8vZGV2ZWxvcGVyLmFwcGxlLmNvbS9kb2N1bWVudGF0aW9uL3hjdGVzdC94Y3VpZWxlbWVudC8xNjE4NjczLWRvdWJsZXRhcD9sYW5ndWFnZT1vYmpjXG4gICAgZG91YmxlVGFwOiAnbW9iaWxlRG91YmxlVGFwJyxcbiAgICAvLyBodHRwczovL2RldmVsb3Blci5hcHBsZS5jb20vZG9jdW1lbnRhdGlvbi94Y3Rlc3QveGN1aWVsZW1lbnQvMTYxODY3NS10d29maW5nZXJ0YXA/bGFuZ3VhZ2U9b2JqY1xuICAgIHR3b0ZpbmdlclRhcDogJ21vYmlsZVR3b0ZpbmdlclRhcCcsXG4gICAgLy8gaHR0cHM6Ly9kZXZlbG9wZXIuYXBwbGUuY29tL2RvY3VtZW50YXRpb24veGN0ZXN0L3hjdWllbGVtZW50LzE2MTg2NzEtdGFwd2l0aG51bWJlcm9mdGFwcz9sYW5ndWFnZT1vYmpjXG4gICAgdGFwV2l0aE51bWJlck9mVGFwczogJ21vYmlsZVRhcFdpdGhOdW1iZXJPZlRhcHMnLFxuICAgIC8vIGh0dHBzOi8vZGV2ZWxvcGVyLmFwcGxlLmNvbS9kb2N1bWVudGF0aW9uL3hjdGVzdC94Y3VpZWxlbWVudC8xNjE4NjYzLXByZXNzZm9yZHVyYXRpb24/bGFuZ3VhZ2U9b2JqY1xuICAgIHRvdWNoQW5kSG9sZDogJ21vYmlsZVRvdWNoQW5kSG9sZCcsXG4gICAgLy8gaHR0cHM6Ly9kZXZlbG9wZXIuYXBwbGUuY29tL2RvY3VtZW50YXRpb24veGN0ZXN0L3hjdWllbGVtZW50LzE2MTg2NzAtcHJlc3Nmb3JkdXJhdGlvbj9sYW5ndWFnZT1vYmpjXG4gICAgZHJhZ0Zyb21Ub0ZvckR1cmF0aW9uOiAnbW9iaWxlRHJhZ0Zyb21Ub0ZvckR1cmF0aW9uJyxcbiAgICAvLyBodHRwczovL2RldmVsb3Blci5hcHBsZS5jb20vZG9jdW1lbnRhdGlvbi94Y3Rlc3QveGN1aWVsZW1lbnQvMTYxODY2NS1yb3RhdGU/bGFuZ3VhZ2U9b2JqY1xuICAgIHJvdGF0ZUVsZW1lbnQ6ICdtb2JpbGVSb3RhdGVFbGVtZW50JyxcbiAgICAvLyBodHRwczovL2RldmVsb3Blci5hcHBsZS5jb20vZG9jdW1lbnRhdGlvbi94Y3Rlc3QveGN1aWNvb3JkaW5hdGUvMzU1MTY5Mi1wcmVzc2ZvcmR1cmF0aW9uP2xhbmd1YWdlPW9iamNcbiAgICBkcmFnRnJvbVRvV2l0aFZlbG9jaXR5OiAnbW9iaWxlRHJhZ0Zyb21Ub1dpdGhWZWxvY2l0eScsXG4gICAgZm9yY2VQcmVzczogJ21vYmlsZUZvcmNlUHJlc3MnLFxuICAgIHNjcm9sbFRvRWxlbWVudDogJ21vYmlsZVNjcm9sbFRvRWxlbWVudCcsXG5cbiAgICAvL2VuZHJlZ2lvbiBnZXN0dXJlcyBzdXBwb3J0XG4gICAgYWxlcnQ6ICdtb2JpbGVIYW5kbGVBbGVydCcsXG5cbiAgICBzZXRQYXN0ZWJvYXJkOiAnbW9iaWxlU2V0UGFzdGVib2FyZCcsXG4gICAgZ2V0UGFzdGVib2FyZDogJ21vYmlsZUdldFBhc3RlYm9hcmQnLFxuXG4gICAgc291cmNlOiAnbW9iaWxlR2V0U291cmNlJyxcbiAgICBnZXRDb250ZXh0czogJ21vYmlsZUdldENvbnRleHRzJyxcblxuICAgIC8vcmVnaW9uIG11bHRpcGxlIGFwcHMgbWFuYWdlbWVudFxuICAgIGluc3RhbGxBcHA6ICdtb2JpbGVJbnN0YWxsQXBwJyxcbiAgICBpc0FwcEluc3RhbGxlZDogJ21vYmlsZUlzQXBwSW5zdGFsbGVkJyxcbiAgICByZW1vdmVBcHA6ICdtb2JpbGVSZW1vdmVBcHAnLFxuICAgIGxhdW5jaEFwcDogJ21vYmlsZUxhdW5jaEFwcCcsXG4gICAgdGVybWluYXRlQXBwOiAnbW9iaWxlVGVybWluYXRlQXBwJyxcbiAgICBraWxsQXBwOiAnbW9iaWxlS2lsbEFwcCcsXG4gICAgcXVlcnlBcHBTdGF0ZTogJ21vYmlsZVF1ZXJ5QXBwU3RhdGUnLFxuICAgIGFjdGl2YXRlQXBwOiAnbW9iaWxlQWN0aXZhdGVBcHAnLFxuICAgIGxpc3RBcHBzOiAnbW9iaWxlTGlzdEFwcHMnLFxuICAgIC8vZW5kcmVnaW9uIG11bHRpcGxlIGFwcHMgbWFuYWdlbWVudFxuXG4gICAgdmlld3BvcnRTY3JlZW5zaG90OiAnZ2V0Vmlld3BvcnRTY3JlZW5zaG90JyxcbiAgICB2aWV3cG9ydFJlY3Q6ICdnZXRWaWV3cG9ydFJlY3QnLFxuXG4gICAgc3RhcnRQZXJmUmVjb3JkOiAnbW9iaWxlU3RhcnRQZXJmUmVjb3JkJyxcbiAgICBzdG9wUGVyZlJlY29yZDogJ21vYmlsZVN0b3BQZXJmUmVjb3JkJyxcblxuICAgIGluc3RhbGxDZXJ0aWZpY2F0ZTogJ21vYmlsZUluc3RhbGxDZXJ0aWZpY2F0ZScsXG4gICAgbGlzdENlcnRpZmljYXRlczogJ21vYmlsZUxpc3RDZXJ0aWZpY2F0ZXMnLFxuXG4gICAgc3RhcnRMb2dzQnJvYWRjYXN0OiAnbW9iaWxlU3RhcnRMb2dzQnJvYWRjYXN0JyxcbiAgICBzdG9wTG9nc0Jyb2FkY2FzdDogJ21vYmlsZVN0b3BMb2dzQnJvYWRjYXN0JyxcblxuICAgIGJhdHRlcnlJbmZvOiAnbW9iaWxlR2V0QmF0dGVyeUluZm8nLFxuICAgIGRldmljZUluZm86ICdtb2JpbGVHZXREZXZpY2VJbmZvJyxcbiAgICBnZXREZXZpY2VUaW1lOiAnbW9iaWxlR2V0RGV2aWNlVGltZScsXG4gICAgYWN0aXZlQXBwSW5mbzogJ21vYmlsZUdldEFjdGl2ZUFwcEluZm8nLFxuICAgIGRldmljZVNjcmVlbkluZm86ICdnZXRTY3JlZW5JbmZvJyxcblxuICAgIHByZXNzQnV0dG9uOiAnbW9iaWxlUHJlc3NCdXR0b24nLFxuXG4gICAgZW5yb2xsQmlvbWV0cmljOiAnbW9iaWxlRW5yb2xsQmlvbWV0cmljJyxcbiAgICBzZW5kQmlvbWV0cmljTWF0Y2g6ICdtb2JpbGVTZW5kQmlvbWV0cmljTWF0Y2gnLFxuICAgIGlzQmlvbWV0cmljRW5yb2xsZWQ6ICdtb2JpbGVJc0Jpb21ldHJpY0Vucm9sbGVkJyxcblxuICAgIGNsZWFyS2V5Y2hhaW5zOiAnbW9iaWxlQ2xlYXJLZXljaGFpbnMnLFxuXG4gICAgZ2V0UGVybWlzc2lvbjogJ21vYmlsZUdldFBlcm1pc3Npb24nLFxuICAgIHNldFBlcm1pc3Npb246ICdtb2JpbGVTZXRQZXJtaXNzaW9ucycsXG4gICAgcmVzZXRQZXJtaXNzaW9uOiAnbW9iaWxlUmVzZXRQZXJtaXNzaW9uJyxcblxuICAgIGdldEFwcGVhcmFuY2U6ICdtb2JpbGVHZXRBcHBlYXJhbmNlJyxcbiAgICBzZXRBcHBlYXJhbmNlOiAnbW9iaWxlU2V0QXBwZWFyYW5jZScsXG5cbiAgICBzaXJpQ29tbWFuZDogJ21vYmlsZVNpcmlDb21tYW5kJyxcblxuICAgIHB1c2hGaWxlOiAnbW9iaWxlUHVzaEZpbGUnLFxuICAgIHB1bGxGaWxlOiAnbW9iaWxlUHVsbEZpbGUnLFxuICAgIHB1bGxGb2xkZXI6ICdtb2JpbGVQdWxsRm9sZGVyJyxcbiAgICBkZWxldGVGaWxlOiAnbW9iaWxlRGVsZXRlRmlsZScsXG4gICAgZGVsZXRlRm9sZGVyOiAnbW9iaWxlRGVsZXRlRm9sZGVyJyxcblxuICAgIHN0YXJ0QXVkaW9SZWNvcmRpbmc6ICdzdGFydEF1ZGlvUmVjb3JkaW5nJyxcbiAgICBzdG9wQXVkaW9SZWNvcmRpbmc6ICdzdG9wQXVkaW9SZWNvcmRpbmcnLFxuXG4gICAgLy8gWENUZXN0XG4gICAgcnVuWENUZXN0OiAnbW9iaWxlUnVuWENUZXN0JyxcbiAgICBpbnN0YWxsWENUZXN0QnVuZGxlOiAnbW9iaWxlSW5zdGFsbFhDVGVzdEJ1bmRsZScsXG4gICAgbGlzdFhDVGVzdEJ1bmRsZXM6ICdtb2JpbGVMaXN0WENUZXN0QnVuZGxlcycsXG4gICAgbGlzdFhDVGVzdHNJblRlc3RCdW5kbGU6ICdtb2JpbGVMaXN0WENUZXN0c0luVGVzdEJ1bmRsZScsXG5cbiAgICBwdXNoTm90aWZpY2F0aW9uOiAnbW9iaWxlUHVzaE5vdGlmaWNhdGlvbicsXG4gICAgZXhwZWN0Tm90aWZpY2F0aW9uOiAnbW9iaWxlRXhwZWN0Tm90aWZpY2F0aW9uJyxcblxuICAgIHBlcmZvcm1Jb0hpZEV2ZW50OiAnbW9iaWxlUGVyZm9ybUlvSGlkRXZlbnQnLFxuXG4gICAgY29uZmlndXJlTG9jYWxpemF0aW9uOiAnbW9iaWxlQ29uZmlndXJlTG9jYWxpemF0aW9uJyxcblxuICAgIHJlc2V0TG9jYXRpb25TZXJ2aWNlOiAnbW9iaWxlUmVzZXRMb2NhdGlvblNlcnZpY2UnLFxuXG4gICAgc3RhcnRQY2FwOiAnbW9iaWxlU3RhcnRQY2FwJyxcbiAgICBzdG9wUGNhcDogJ21vYmlsZVN0b3BQY2FwJyxcbiAgICBsaXN0Q29uZGl0aW9uSW5kdWNlcnM6ICdtb2JpbGVMaXN0Q29uZGl0aW9uSW5kdWNlcnMnLFxuICAgIGVuYWJsZUNvbmRpdGlvbkluZHVjZXI6ICdtb2JpbGVFbmFibGVDb25kaXRpb25JbmR1Y2VyJyxcbiAgICBkaXNhYmxlQ29uZGl0aW9uSW5kdWNlcjogJ21vYmlsZURpc2FibGVDb25kaXRpb25JbmR1Y2VyJyxcblxuICAgIHVwZGF0ZVNhZmFyaVByZWZlcmVuY2VzOiAnbW9iaWxlVXBkYXRlU2FmYXJpUHJlZmVyZW5jZXMnLFxuICB9O1xuXG4gIGlmICghXy5oYXMoY29tbWFuZE1hcCwgbW9iaWxlQ29tbWFuZCkpIHtcbiAgICB0aHJvdyBuZXcgZXJyb3JzLlVua25vd25Db21tYW5kRXJyb3IoYFVua25vd24gbW9iaWxlIGNvbW1hbmQgJyR7bW9iaWxlQ29tbWFuZH0nLiBPbmx5ICR7Xy5rZXlzKGNvbW1hbmRNYXApLmpvaW4oJywgJyl9IGNvbW1hbmRzIGFyZSBzdXBwb3J0ZWQuYCk7XG4gIH1cbiAgcmV0dXJuIGF3YWl0IHRoaXNbY29tbWFuZE1hcFttb2JpbGVDb21tYW5kXV0ob3B0cyk7XG59O1xuXG5leHBvcnQgZGVmYXVsdCBleHRlbnNpb25zO1xuIl0sIm1hcHBpbmdzIjoiOzs7Ozs7OztBQUFBO0FB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
@@ -1 +1 @@
1
- {"version":3,"file":"execute.js","names":["extensions","receiveAsyncResponse","status","value","log","debug","JSON","stringify","util","hasValue","asyncPromise","warn","reject","errorFromCode","message","_","isString","error","errorFromW3CJsonCode","stacktrace","resolve","execute","script","args","match","replace","trim","executeMobile","isArray","isWebContext","convertElementsForAtoms","result","executeAtom","cacheWebElements","errors","NotImplementedError","executeAsync","asyncWaitMs","promise","remote","executeAtomAsync","curWebFrames","waitForAtom","mobileCommand","opts","commandMap","tap","scroll","selectPickerWheelValue","swipe","pinch","doubleTap","twoFingerTap","tapWithNumberOfTaps","touchAndHold","dragFromToForDuration","rotateElement","dragFromToWithVelocity","forcePress","scrollToElement","alert","setPasteboard","getPasteboard","source","getContexts","installApp","isAppInstalled","removeApp","launchApp","terminateApp","killApp","queryAppState","activateApp","listApps","viewportScreenshot","viewportRect","startPerfRecord","stopPerfRecord","installCertificate","listCertificates","startLogsBroadcast","stopLogsBroadcast","batteryInfo","deviceInfo","getDeviceTime","activeAppInfo","deviceScreenInfo","pressButton","enrollBiometric","sendBiometricMatch","isBiometricEnrolled","clearKeychains","getPermission","setPermission","resetPermission","getAppearance","setAppearance","siriCommand","pushFile","pullFile","pullFolder","deleteFile","deleteFolder","startAudioRecording","stopAudioRecording","runXCTest","installXCTestBundle","listXCTestBundles","listXCTestsInTestBundle","pushNotification","expectNotification","performIoHidEvent","configureLocalization","resetLocationService","startPcap","stopPcap","listConditionInducers","enableConditionInducer","disableConditionInducer","has","UnknownCommandError","keys","join"],"sources":["../../../lib/commands/execute.js"],"sourcesContent":["import _ from 'lodash';\nimport {\n errors, errorFromCode, errorFromW3CJsonCode\n} from 'appium/driver';\nimport { util } from 'appium/support';\n\nconst extensions = {};\n\nextensions.receiveAsyncResponse = async function receiveAsyncResponse (status, value) { // eslint-disable-line require-await\n this.log.debug(`Received async response: ${JSON.stringify(value)}`);\n if (!util.hasValue(this.asyncPromise)) {\n this.log.warn(`Received async response when we were not expecting one! ` +\n `Response was: ${JSON.stringify(value)}`);\n return;\n }\n\n if (util.hasValue(status) && status !== 0) {\n // MJSONWP\n return this.asyncPromise.reject(errorFromCode(status, value.message));\n }\n if (!util.hasValue(status) && value && _.isString(value.error)) {\n // W3C\n return this.asyncPromise.reject(errorFromW3CJsonCode(value.error, value.message, value.stacktrace));\n }\n return this.asyncPromise.resolve(value);\n};\n\nextensions.execute = async function execute (script, args) {\n if (script.match(/^mobile:/)) {\n script = script.replace(/^mobile:/, '').trim();\n return await this.executeMobile(script, _.isArray(args) ? args[0] : args);\n } else if (this.isWebContext()) {\n args = this.convertElementsForAtoms(args);\n const result = await this.executeAtom('execute_script', [script, args]);\n return this.cacheWebElements(result);\n } else {\n throw new errors.NotImplementedError();\n }\n};\n\nextensions.executeAsync = async function executeAsync (script, args) {\n if (!this.isWebContext()) {\n throw new errors.NotImplementedError();\n }\n\n args = this.convertElementsForAtoms(args);\n this.asyncWaitMs = this.asyncWaitMs || 0;\n const promise = this.remote.executeAtomAsync('execute_async_script', [\n script, args, this.asyncWaitMs\n ], this.curWebFrames);\n return this.cacheWebElements(await this.waitForAtom(promise));\n};\n\nextensions.executeMobile = async function executeMobile (mobileCommand, opts = {}) {\n const commandMap = {\n //region gestures support\n tap: 'mobileTap',\n scroll: 'mobileScroll',\n selectPickerWheelValue: 'mobileSelectPickerWheelValue',\n // https://developer.apple.com/documentation/xctest/xcuielement/1618668-swipeleft?language=objc\n // https://developer.apple.com/documentation/xctest/xcuielement/1618674-swiperight?language=objc\n // https://developer.apple.com/documentation/xctest/xcuielement/1618667-swipeup?language=objc\n // https://developer.apple.com/documentation/xctest/xcuielement/1618664-swipedown?language=objc\n swipe: 'mobileSwipe',\n // https://developer.apple.com/documentation/xctest/xcuielement/1618669-pinchwithscale?language=objc\n pinch: 'mobilePinch',\n // https://developer.apple.com/documentation/xctest/xcuielement/1618673-doubletap?language=objc\n doubleTap: 'mobileDoubleTap',\n // https://developer.apple.com/documentation/xctest/xcuielement/1618675-twofingertap?language=objc\n twoFingerTap: 'mobileTwoFingerTap',\n // https://developer.apple.com/documentation/xctest/xcuielement/1618671-tapwithnumberoftaps?language=objc\n tapWithNumberOfTaps: 'mobileTapWithNumberOfTaps',\n // https://developer.apple.com/documentation/xctest/xcuielement/1618663-pressforduration?language=objc\n touchAndHold: 'mobileTouchAndHold',\n // https://developer.apple.com/documentation/xctest/xcuielement/1618670-pressforduration?language=objc\n dragFromToForDuration: 'mobileDragFromToForDuration',\n // https://developer.apple.com/documentation/xctest/xcuielement/1618665-rotate?language=objc\n rotateElement: 'mobileRotateElement',\n // https://developer.apple.com/documentation/xctest/xcuicoordinate/3551692-pressforduration?language=objc\n dragFromToWithVelocity: 'mobileDragFromToWithVelocity',\n forcePress: 'mobileForcePress',\n scrollToElement: 'mobileScrollToElement',\n\n //endregion gestures support\n alert: 'mobileHandleAlert',\n\n setPasteboard: 'mobileSetPasteboard',\n getPasteboard: 'mobileGetPasteboard',\n\n source: 'mobileGetSource',\n getContexts: 'mobileGetContexts',\n\n //region multiple apps management\n installApp: 'mobileInstallApp',\n isAppInstalled: 'mobileIsAppInstalled',\n removeApp: 'mobileRemoveApp',\n launchApp: 'mobileLaunchApp',\n terminateApp: 'mobileTerminateApp',\n killApp: 'mobileKillApp',\n queryAppState: 'mobileQueryAppState',\n activateApp: 'mobileActivateApp',\n listApps: 'mobileListApps',\n //endregion multiple apps management\n\n viewportScreenshot: 'getViewportScreenshot',\n viewportRect: 'getViewportRect',\n\n startPerfRecord: 'mobileStartPerfRecord',\n stopPerfRecord: 'mobileStopPerfRecord',\n\n installCertificate: 'mobileInstallCertificate',\n listCertificates: 'mobileListCertificates',\n\n startLogsBroadcast: 'mobileStartLogsBroadcast',\n stopLogsBroadcast: 'mobileStopLogsBroadcast',\n\n batteryInfo: 'mobileGetBatteryInfo',\n deviceInfo: 'mobileGetDeviceInfo',\n getDeviceTime: 'mobileGetDeviceTime',\n activeAppInfo: 'mobileGetActiveAppInfo',\n deviceScreenInfo: 'getScreenInfo',\n\n pressButton: 'mobilePressButton',\n\n enrollBiometric: 'mobileEnrollBiometric',\n sendBiometricMatch: 'mobileSendBiometricMatch',\n isBiometricEnrolled: 'mobileIsBiometricEnrolled',\n\n clearKeychains: 'mobileClearKeychains',\n\n getPermission: 'mobileGetPermission',\n setPermission: 'mobileSetPermissions',\n resetPermission: 'mobileResetPermission',\n\n getAppearance: 'mobileGetAppearance',\n setAppearance: 'mobileSetAppearance',\n\n siriCommand: 'mobileSiriCommand',\n\n pushFile: 'mobilePushFile',\n pullFile: 'mobilePullFile',\n pullFolder: 'mobilePullFolder',\n deleteFile: 'mobileDeleteFile',\n deleteFolder: 'mobileDeleteFolder',\n\n startAudioRecording: 'startAudioRecording',\n stopAudioRecording: 'stopAudioRecording',\n\n // XCTest\n runXCTest: 'mobileRunXCTest',\n installXCTestBundle: 'mobileInstallXCTestBundle',\n listXCTestBundles: 'mobileListXCTestBundles',\n listXCTestsInTestBundle: 'mobileListXCTestsInTestBundle',\n\n pushNotification: 'mobilePushNotification',\n expectNotification: 'mobileExpectNotification',\n\n performIoHidEvent: 'mobilePerformIoHidEvent',\n\n configureLocalization: 'mobileConfigureLocalization',\n\n resetLocationService: 'mobileResetLocationService',\n\n startPcap: 'mobileStartPcap',\n stopPcap: 'mobileStopPcap',\n listConditionInducers: 'mobileListConditionInducers',\n enableConditionInducer: 'mobileEnableConditionInducer',\n disableConditionInducer: 'mobileDisableConditionInducer',\n };\n\n if (!_.has(commandMap, mobileCommand)) {\n throw new errors.UnknownCommandError(`Unknown mobile command '${mobileCommand}'. Only ${_.keys(commandMap).join(', ')} commands are supported.`);\n }\n return await this[commandMap[mobileCommand]](opts);\n};\n\nexport default extensions;\n"],"mappings":"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"}
1
+ {"version":3,"file":"execute.js","names":["extensions","receiveAsyncResponse","status","value","log","debug","JSON","stringify","util","hasValue","asyncPromise","warn","reject","errorFromCode","message","_","isString","error","errorFromW3CJsonCode","stacktrace","resolve","execute","script","args","match","replace","trim","executeMobile","isArray","isWebContext","convertElementsForAtoms","result","executeAtom","cacheWebElements","errors","NotImplementedError","executeAsync","asyncWaitMs","promise","remote","executeAtomAsync","curWebFrames","waitForAtom","mobileCommand","opts","commandMap","tap","scroll","selectPickerWheelValue","swipe","pinch","doubleTap","twoFingerTap","tapWithNumberOfTaps","touchAndHold","dragFromToForDuration","rotateElement","dragFromToWithVelocity","forcePress","scrollToElement","alert","setPasteboard","getPasteboard","source","getContexts","installApp","isAppInstalled","removeApp","launchApp","terminateApp","killApp","queryAppState","activateApp","listApps","viewportScreenshot","viewportRect","startPerfRecord","stopPerfRecord","installCertificate","listCertificates","startLogsBroadcast","stopLogsBroadcast","batteryInfo","deviceInfo","getDeviceTime","activeAppInfo","deviceScreenInfo","pressButton","enrollBiometric","sendBiometricMatch","isBiometricEnrolled","clearKeychains","getPermission","setPermission","resetPermission","getAppearance","setAppearance","siriCommand","pushFile","pullFile","pullFolder","deleteFile","deleteFolder","startAudioRecording","stopAudioRecording","runXCTest","installXCTestBundle","listXCTestBundles","listXCTestsInTestBundle","pushNotification","expectNotification","performIoHidEvent","configureLocalization","resetLocationService","startPcap","stopPcap","listConditionInducers","enableConditionInducer","disableConditionInducer","updateSafariPreferences","has","UnknownCommandError","keys","join"],"sources":["../../../lib/commands/execute.js"],"sourcesContent":["import _ from 'lodash';\nimport {\n errors, errorFromCode, errorFromW3CJsonCode\n} from 'appium/driver';\nimport { util } from 'appium/support';\n\nconst extensions = {};\n\nextensions.receiveAsyncResponse = async function receiveAsyncResponse (status, value) { // eslint-disable-line require-await\n this.log.debug(`Received async response: ${JSON.stringify(value)}`);\n if (!util.hasValue(this.asyncPromise)) {\n this.log.warn(`Received async response when we were not expecting one! ` +\n `Response was: ${JSON.stringify(value)}`);\n return;\n }\n\n if (util.hasValue(status) && status !== 0) {\n // MJSONWP\n return this.asyncPromise.reject(errorFromCode(status, value.message));\n }\n if (!util.hasValue(status) && value && _.isString(value.error)) {\n // W3C\n return this.asyncPromise.reject(errorFromW3CJsonCode(value.error, value.message, value.stacktrace));\n }\n return this.asyncPromise.resolve(value);\n};\n\nextensions.execute = async function execute (script, args) {\n if (script.match(/^mobile:/)) {\n script = script.replace(/^mobile:/, '').trim();\n return await this.executeMobile(script, _.isArray(args) ? args[0] : args);\n } else if (this.isWebContext()) {\n args = this.convertElementsForAtoms(args);\n const result = await this.executeAtom('execute_script', [script, args]);\n return this.cacheWebElements(result);\n } else {\n throw new errors.NotImplementedError();\n }\n};\n\nextensions.executeAsync = async function executeAsync (script, args) {\n if (!this.isWebContext()) {\n throw new errors.NotImplementedError();\n }\n\n args = this.convertElementsForAtoms(args);\n this.asyncWaitMs = this.asyncWaitMs || 0;\n const promise = this.remote.executeAtomAsync('execute_async_script', [\n script, args, this.asyncWaitMs\n ], this.curWebFrames);\n return this.cacheWebElements(await this.waitForAtom(promise));\n};\n\nextensions.executeMobile = async function executeMobile (mobileCommand, opts = {}) {\n const commandMap = {\n //region gestures support\n tap: 'mobileTap',\n scroll: 'mobileScroll',\n selectPickerWheelValue: 'mobileSelectPickerWheelValue',\n // https://developer.apple.com/documentation/xctest/xcuielement/1618668-swipeleft?language=objc\n // https://developer.apple.com/documentation/xctest/xcuielement/1618674-swiperight?language=objc\n // https://developer.apple.com/documentation/xctest/xcuielement/1618667-swipeup?language=objc\n // https://developer.apple.com/documentation/xctest/xcuielement/1618664-swipedown?language=objc\n swipe: 'mobileSwipe',\n // https://developer.apple.com/documentation/xctest/xcuielement/1618669-pinchwithscale?language=objc\n pinch: 'mobilePinch',\n // https://developer.apple.com/documentation/xctest/xcuielement/1618673-doubletap?language=objc\n doubleTap: 'mobileDoubleTap',\n // https://developer.apple.com/documentation/xctest/xcuielement/1618675-twofingertap?language=objc\n twoFingerTap: 'mobileTwoFingerTap',\n // https://developer.apple.com/documentation/xctest/xcuielement/1618671-tapwithnumberoftaps?language=objc\n tapWithNumberOfTaps: 'mobileTapWithNumberOfTaps',\n // https://developer.apple.com/documentation/xctest/xcuielement/1618663-pressforduration?language=objc\n touchAndHold: 'mobileTouchAndHold',\n // https://developer.apple.com/documentation/xctest/xcuielement/1618670-pressforduration?language=objc\n dragFromToForDuration: 'mobileDragFromToForDuration',\n // https://developer.apple.com/documentation/xctest/xcuielement/1618665-rotate?language=objc\n rotateElement: 'mobileRotateElement',\n // https://developer.apple.com/documentation/xctest/xcuicoordinate/3551692-pressforduration?language=objc\n dragFromToWithVelocity: 'mobileDragFromToWithVelocity',\n forcePress: 'mobileForcePress',\n scrollToElement: 'mobileScrollToElement',\n\n //endregion gestures support\n alert: 'mobileHandleAlert',\n\n setPasteboard: 'mobileSetPasteboard',\n getPasteboard: 'mobileGetPasteboard',\n\n source: 'mobileGetSource',\n getContexts: 'mobileGetContexts',\n\n //region multiple apps management\n installApp: 'mobileInstallApp',\n isAppInstalled: 'mobileIsAppInstalled',\n removeApp: 'mobileRemoveApp',\n launchApp: 'mobileLaunchApp',\n terminateApp: 'mobileTerminateApp',\n killApp: 'mobileKillApp',\n queryAppState: 'mobileQueryAppState',\n activateApp: 'mobileActivateApp',\n listApps: 'mobileListApps',\n //endregion multiple apps management\n\n viewportScreenshot: 'getViewportScreenshot',\n viewportRect: 'getViewportRect',\n\n startPerfRecord: 'mobileStartPerfRecord',\n stopPerfRecord: 'mobileStopPerfRecord',\n\n installCertificate: 'mobileInstallCertificate',\n listCertificates: 'mobileListCertificates',\n\n startLogsBroadcast: 'mobileStartLogsBroadcast',\n stopLogsBroadcast: 'mobileStopLogsBroadcast',\n\n batteryInfo: 'mobileGetBatteryInfo',\n deviceInfo: 'mobileGetDeviceInfo',\n getDeviceTime: 'mobileGetDeviceTime',\n activeAppInfo: 'mobileGetActiveAppInfo',\n deviceScreenInfo: 'getScreenInfo',\n\n pressButton: 'mobilePressButton',\n\n enrollBiometric: 'mobileEnrollBiometric',\n sendBiometricMatch: 'mobileSendBiometricMatch',\n isBiometricEnrolled: 'mobileIsBiometricEnrolled',\n\n clearKeychains: 'mobileClearKeychains',\n\n getPermission: 'mobileGetPermission',\n setPermission: 'mobileSetPermissions',\n resetPermission: 'mobileResetPermission',\n\n getAppearance: 'mobileGetAppearance',\n setAppearance: 'mobileSetAppearance',\n\n siriCommand: 'mobileSiriCommand',\n\n pushFile: 'mobilePushFile',\n pullFile: 'mobilePullFile',\n pullFolder: 'mobilePullFolder',\n deleteFile: 'mobileDeleteFile',\n deleteFolder: 'mobileDeleteFolder',\n\n startAudioRecording: 'startAudioRecording',\n stopAudioRecording: 'stopAudioRecording',\n\n // XCTest\n runXCTest: 'mobileRunXCTest',\n installXCTestBundle: 'mobileInstallXCTestBundle',\n listXCTestBundles: 'mobileListXCTestBundles',\n listXCTestsInTestBundle: 'mobileListXCTestsInTestBundle',\n\n pushNotification: 'mobilePushNotification',\n expectNotification: 'mobileExpectNotification',\n\n performIoHidEvent: 'mobilePerformIoHidEvent',\n\n configureLocalization: 'mobileConfigureLocalization',\n\n resetLocationService: 'mobileResetLocationService',\n\n startPcap: 'mobileStartPcap',\n stopPcap: 'mobileStopPcap',\n listConditionInducers: 'mobileListConditionInducers',\n enableConditionInducer: 'mobileEnableConditionInducer',\n disableConditionInducer: 'mobileDisableConditionInducer',\n\n updateSafariPreferences: 'mobileUpdateSafariPreferences',\n };\n\n if (!_.has(commandMap, mobileCommand)) {\n throw new errors.UnknownCommandError(`Unknown mobile command '${mobileCommand}'. Only ${_.keys(commandMap).join(', ')} commands are supported.`);\n }\n return await this[commandMap[mobileCommand]](opts);\n};\n\nexport default extensions;\n"],"mappings":"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"}
@@ -578,7 +578,20 @@ extensions.mobileWebNav = async function mobileWebNav(navType) {
578
578
  this.remote.allowNavigationWithoutReload = false;
579
579
  }
580
580
  };
581
+ commands.mobileUpdateSafariPreferences = async function mobileUpdateSafariPreferences(opts = {}) {
582
+ if (!this.isSimulator()) {
583
+ throw new Error('This extension is only available for Simulator');
584
+ }
585
+ const {
586
+ preferences
587
+ } = opts;
588
+ if (!_lodash.default.isPlainObject(preferences)) {
589
+ throw new _driver.errors.InvalidArgumentError('"preferences" argument must be a valid object');
590
+ }
591
+ this.log.debug(`About to update Safari preferences: ${JSON.stringify(preferences)}`);
592
+ await this.opts.device.updateSafariSettings(preferences);
593
+ };
581
594
  Object.assign(commands, extensions, helpers);
582
595
  var _default = commands;
583
596
  exports.default = _default;
584
- //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJJUEhPTkVfVE9QX0JBUl9IRUlHSFQiLCJJUEhPTkVfU0NST0xMRURfVE9QX0JBUl9IRUlHSFQiLCJJUEhPTkVfWF9TQ1JPTExFRF9PRkZTRVQiLCJJUEhPTkVfWF9OT1RDSF9PRkZTRVRfSU9TIiwiSVBIT05FX1hfTk9UQ0hfT0ZGU0VUX0lPU18xMyIsIklQSE9ORV9MQU5EU0NBUEVfVE9QX0JBUl9IRUlHSFQiLCJJUEhPTkVfQk9UVE9NX0JBUl9PRkZTRVQiLCJUQUJfQkFSX09GRlNFVCIsIklQSE9ORV9XRUJfQ09PUkRfU01BUlRfQVBQX0JBTk5FUl9PRkZTRVQiLCJJUEFEX1dFQl9DT09SRF9TTUFSVF9BUFBfQkFOTkVSX09GRlNFVCIsIk5PVENIRURfREVWSUNFX1NJWkVTIiwidyIsImgiLCJXM0NfV0VCX0VMRU1FTlRfSURFTlRJRklFUiIsInV0aWwiLCJBVE9NX1dBSVRfVElNRU9VVF9NUyIsIkFUT01fSU5JVElBTF9XQUlUX01TIiwiT05fT0JTVFJVQ1RJTkdfQUxFUlRfRVZFTlQiLCJWSVNJQkxFIiwiSU5WSVNJQkxFIiwiREVURUNUIiwiVklTSUJJTElUSUVTIiwiVEFCX0JBUl9QT1NJVElPTl9UT1AiLCJUQUJfQkFSX1BPU0lUSU9OX0JPVFRPTSIsIlRBQl9CQVJfUE9TU0lUSU9OUyIsImNvbW1hbmRzIiwiaGVscGVycyIsImV4dGVuc2lvbnMiLCJpc1ZhbGlkRWxlbWVudElkZW50aWZpZXIiLCJpZCIsIl8iLCJpc1N0cmluZyIsImlzTnVtYmVyIiwiaXNFbXB0eSIsImlzTmFOIiwic2V0RnJhbWUiLCJmcmFtZSIsImlzV2ViQ29udGV4dCIsImVycm9ycyIsIk5vdEltcGxlbWVudGVkRXJyb3IiLCJpc051bGwiLCJjdXJXZWJGcmFtZXMiLCJsb2ciLCJkZWJ1ZyIsImhhc0VsZW1lbnRJZCIsImF0b21zRWxlbWVudCIsImdldEF0b21zRWxlbWVudCIsInZhbHVlIiwiZXhlY3V0ZUF0b20iLCJXSU5ET1ciLCJ1bnNoaWZ0IiwiYXRvbSIsImlzVW5kZWZpbmVkIiwiTm9TdWNoRnJhbWVFcnJvciIsImdldENzc1Byb3BlcnR5IiwicHJvcGVydHlOYW1lIiwiZWwiLCJzdWJtaXQiLCJyZWZyZXNoIiwiZ2V0VXJsIiwicmVtb3RlIiwiZXhlY3V0ZSIsInRpdGxlIiwiZ2V0Q29va2llcyIsInNjcmlwdCIsImpzQ29va2llcyIsImNvb2tpZXMiLCJuYW1lIiwidG9QYWlycyIsImNvb2tpZVV0aWxzIiwiY3JlYXRlSldQQ29va2llIiwidW5kZWZpbmVkIiwicHVzaCIsImVyciIsImVycm9yIiwiVW5rbm93bkVycm9yIiwic2V0Q29va2llIiwiY29va2llIiwiY2xvbmUiLCJwYXRoIiwianNDb29raWUiLCJjcmVhdGVKU0Nvb2tpZSIsImV4cGlyZXMiLCJleHBpcnkiLCJEYXRlIiwidG9VVENTdHJpbmciLCJkb21haW4iLCJodHRwT25seSIsInNlY3VyZSIsIkpTT04iLCJzdHJpbmdpZnkiLCJkZWxldGVDb29raWUiLCJjb29raWVOYW1lIiwiaW5kZXhPZiIsIm1hcCIsIl9kZWxldGVDb29raWUiLCJkZWxldGVDb29raWVzIiwibGVuZ3RoIiwid2ViQ29va2llIiwiZXhwaXJlQ29va2llIiwiY2FjaGVXZWJFbGVtZW50IiwiaXNQbGFpbk9iamVjdCIsImVsSWQiLCJ1bndyYXBFbGVtZW50IiwiY2FjaGVJZCIsImluY2x1ZGVzIiwidXVpZFY0Iiwid2ViRWxlbWVudHNDYWNoZSIsInNldCIsIndyYXBFbGVtZW50IiwiY2FjaGVXZWJFbGVtZW50cyIsInJlc3BvbnNlIiwidG9DYWNoZWQiLCJ2IiwiaXNBcnJheSIsInJlc3VsdCIsInJlZHVjZSIsImFjYyIsImtleSIsImZpbmRXZWJFbGVtZW50T3JFbGVtZW50cyIsInN0cmF0ZWd5Iiwic2VsZWN0b3IiLCJtYW55IiwiY3R4IiwiY29udGV4dEVsZW1lbnQiLCJpc05pbCIsImVsZW1lbnQiLCJkb0ZpbmQiLCJpbXBsaWNpdFdhaXRGb3JDb25kaXRpb24iLCJtZXNzYWdlIiwiaXNGdW5jdGlvbiIsIm1hdGNoIiwiTm9TdWNoRWxlbWVudEVycm9yIiwiY2xpY2tXZWJDb29yZHMiLCJjb29yZHMiLCJ0cmFuc2xhdGVXZWJDb29yZHMiLCJjdXJXZWJDb29yZHMiLCJjbGlja0Nvb3JkcyIsImFyZ3MiLCJhbHdheXNEZWZhdWx0RnJhbWUiLCJmcmFtZXMiLCJwcm9taXNlIiwid2FpdEZvckF0b20iLCJleGVjdXRlQXRvbUFzeW5jIiwicmVzcG9uc2VVcmwiLCJCIiwicmVzb2x2ZSIsInJlamVjdCIsImFzeW5jUHJvbWlzZSIsImVsT3JJZCIsImhhcyIsIlN0YWxlRWxlbWVudFJlZmVyZW5jZUVycm9yIiwiRUxFTUVOVCIsImdldCIsImNvbnZlcnRFbGVtZW50c0ZvckF0b21zIiwiYXJnIiwiaXNFcnJvclR5cGUiLCJnZXRFbGVtZW50SWQiLCJoYXNWYWx1ZSIsImdldFNhZmFyaUlzSXBob25lIiwiaXNCb29sZWFuIiwiX2lzU2FmYXJpSXBob25lIiwidXNlckFnZW50IiwidG9Mb3dlckNhc2UiLCJ3YXJuIiwiZ2V0U2FmYXJpRGV2aWNlU2l6ZSIsIndpZHRoIiwiaGVpZ2h0Iiwibm9ybUhlaWdodCIsIm5vcm1XaWR0aCIsImdldFNhZmFyaUlzTm90Y2hlZCIsIl9pc1NhZmFyaU5vdGNoZWQiLCJkZXZpY2UiLCJnZXRFeHRyYVRyYW5zbGF0ZVdlYkNvb3Jkc09mZnNldCIsInd2UG9zIiwicmVhbERpbXMiLCJ0b3BPZmZzZXQiLCJib3R0b21PZmZzZXQiLCJpc0lwaG9uZSIsIm5hdGl2ZVdlYlRhcFRhYkJhclZpc2liaWxpdHkiLCJuYXRpdmVXZWJUYXBTbWFydEFwcEJhbm5lclZpc2liaWxpdHkiLCJzYWZhcmlUYWJCYXJQb3NpdGlvbiIsImNvbXBhcmVWZXJzaW9ucyIsIm9wdHMiLCJwbGF0Zm9ybVZlcnNpb24iLCJzZXR0aW5ncyIsImdldFNldHRpbmdzIiwidGFiQmFyVmlzaWJpbGl0eSIsImxvd2VyQ2FzZSIsImJhbm5lclZpc2liaWxpdHkiLCJ0YWJCYXJQb3NpdGlvbiIsIkludmFsaWRBcmd1bWVudEVycm9yIiwiaXNOb3RjaGVkIiwib3JpZW50YXRpb24iLCJub3RjaE9mZnNldCIsImlzU2Nyb2xsZWQiLCJjb250ZXh0c0FuZFZpZXdzIiwiZ2V0Q29udGV4dHNBbmRWaWV3cyIsInRhYnMiLCJmaWx0ZXIiLCJzdGFydHNXaXRoIiwiZ2V0RXh0cmFOYXRpdmVXZWJUYXBPZmZzZXQiLCJ5Iiwib2Zmc2V0IiwiYmFubmVycyIsImZpbmROYXRpdmVFbGVtZW50T3JFbGVtZW50cyIsInRhcFdlYkVsZW1lbnROYXRpdmVseSIsImRyaXZlciIsInRleHQiLCJlbHMiLCJyZWN0IiwicHJveHlDb21tYW5kIiwiZWwyIiwicmVjdDIiLCJ4IiwiTWF0aCIsInJvdW5kIiwibmF0aXZlV2ViVGFwIiwibmF0aXZlV2ViVGFwU3RyaWN0IiwiUHJvbWlzZSIsImFsbCIsInNpemUiLCJjb29yZGluYXRlcyIsInBlcmZvcm1Ub3VjaCIsImFjdGlvbiIsIm9wdGlvbnMiLCJ3ZWJ2aWV3IiwicmV0cnlJbnRlcnZhbCIsImlnbiIsIkVycm9yIiwiY21kIiwid3ZEaW1zIiwiaW1wbGljaXRXYWl0TXMiLCJzZXRJbXBsaWNpdFdhaXQiLCJ4UmF0aW8iLCJ5UmF0aW8iLCJuZXdDb29yZHMiLCJjaGVja0ZvckFsZXJ0IiwiZ2V0QWxlcnRUZXh0IiwidGltZXIiLCJ0aW1pbmciLCJUaW1lciIsInN0YXJ0IiwidGltZWRBdG9tUHJvbWlzZSIsInRpbWVvdXQiLCJoYW5kbGVQcm9taXNlRXJyb3IiLCJwIiwib3JpZ2luYWxFcnJvciIsIkFnZ3JlZ2F0ZUVycm9yIiwiVGltZW91dEVycm9yIiwiZ2V0RHVyYXRpb24iLCJhc01pbGxpU2Vjb25kcyIsInRvRml4ZWQiLCJhbnkiLCJkZWxheSIsImlzRnVsZmlsbGVkIiwiX3dhaXRpbmdBdG9tcyIsImNvdW50IiwiYWxlcnROb3RpZmllciIsIkV2ZW50RW1pdHRlciIsImFsZXJ0TW9uaXRvciIsIm9uQWxlcnRDYWxsYmFjayIsImlzUmVzb2x2ZWQiLCJlbWl0IiwiVW5leHBlY3RlZEFsZXJ0T3BlbkVycm9yIiwib25jZSIsInRoZW4iLCJjYXRjaCIsInJlbW92ZUxpc3RlbmVyIiwibW9iaWxlV2ViTmF2IiwibmF2VHlwZSIsImFsbG93TmF2aWdhdGlvbldpdGhvdXRSZWxvYWQiLCJPYmplY3QiLCJhc3NpZ24iXSwic291cmNlcyI6WyIuLi8uLi8uLi9saWIvY29tbWFuZHMvd2ViLmpzIl0sInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IHJldHJ5SW50ZXJ2YWwgfSBmcm9tICdhc3luY2JveCc7XG5pbXBvcnQgeyB1dGlsLCB0aW1pbmcgfSBmcm9tICdhcHBpdW0vc3VwcG9ydCc7XG5pbXBvcnQgXyBmcm9tICdsb2Rhc2gnO1xuaW1wb3J0IEIgZnJvbSAnYmx1ZWJpcmQnO1xuaW1wb3J0IHsgZXJyb3JzLCBpc0Vycm9yVHlwZSB9IGZyb20gJ2FwcGl1bS9kcml2ZXInO1xuaW1wb3J0IGNvb2tpZVV0aWxzIGZyb20gJy4uL2Nvb2tpZXMnO1xuaW1wb3J0IHsgRXZlbnRFbWl0dGVyIH0gZnJvbSAnZXZlbnRzJztcblxuY29uc3QgSVBIT05FX1RPUF9CQVJfSEVJR0hUID0gNzE7XG5jb25zdCBJUEhPTkVfU0NST0xMRURfVE9QX0JBUl9IRUlHSFQgPSA0MTtcbmNvbnN0IElQSE9ORV9YX1NDUk9MTEVEX09GRlNFVCA9IDU1O1xuY29uc3QgSVBIT05FX1hfTk9UQ0hfT0ZGU0VUX0lPUyA9IDI0O1xuY29uc3QgSVBIT05FX1hfTk9UQ0hfT0ZGU0VUX0lPU18xMyA9IDIwO1xuXG5jb25zdCBJUEhPTkVfTEFORFNDQVBFX1RPUF9CQVJfSEVJR0hUID0gNTE7XG5jb25zdCBJUEhPTkVfQk9UVE9NX0JBUl9PRkZTRVQgPSA0OTtcbmNvbnN0IFRBQl9CQVJfT0ZGU0VUID0gMzM7XG5jb25zdCBJUEhPTkVfV0VCX0NPT1JEX1NNQVJUX0FQUF9CQU5ORVJfT0ZGU0VUID0gODQ7XG5jb25zdCBJUEFEX1dFQl9DT09SRF9TTUFSVF9BUFBfQkFOTkVSX09GRlNFVCA9IDk1O1xuXG5jb25zdCBOT1RDSEVEX0RFVklDRV9TSVpFUyA9IFtcbiAge3c6IDExMjUsIGg6IDI0MzZ9LCAvLyAxMSBQcm8sIFgsIFhzXG4gIHt3OiA4MjgsIGg6IDE3OTJ9LCAvLyAxMSwgWHJcbiAge3c6IDEyNDIsIGg6IDI2ODh9LCAvLyAxMSBQcm8gTWF4LCBYcyBNYXhcbl07XG5cbmNvbnN0IHsgVzNDX1dFQl9FTEVNRU5UX0lERU5USUZJRVIgfSA9IHV0aWw7XG5cbmNvbnN0IEFUT01fV0FJVF9USU1FT1VUX01TID0gMiAqIDYwMDAwO1xuY29uc3QgQVRPTV9JTklUSUFMX1dBSVRfTVMgPSAxMDAwO1xuXG5jb25zdCBPTl9PQlNUUlVDVElOR19BTEVSVF9FVkVOVCA9ICdhbGVydCc7XG5cbmNvbnN0IFZJU0lCTEUgPSAndmlzaWJsZSc7XG5jb25zdCBJTlZJU0lCTEUgPSAnaW52aXNpYmxlJztcbmNvbnN0IERFVEVDVCA9ICdkZXRlY3QnO1xuY29uc3QgVklTSUJJTElUSUVTID0gW1ZJU0lCTEUsIElOVklTSUJMRSwgREVURUNUXTtcblxuLy8gVGhlIHBvc2l0aW9uIG9mIFNhZmFyaSdzIHRhYiAoc2VhcmNoIGJhcikuXG4vLyBTaW5jZSBpT1MgMTUsIHRoZSBiYXIgaXMgdGhlIGJvdHRvbSBieSBkZWZhdWx0LlxuY29uc3QgVEFCX0JBUl9QT1NJVElPTl9UT1AgPSAndG9wJztcbmNvbnN0IFRBQl9CQVJfUE9TSVRJT05fQk9UVE9NID0gJ2JvdHRvbSc7XG5jb25zdCBUQUJfQkFSX1BPU1NJVElPTlMgPSBbVEFCX0JBUl9QT1NJVElPTl9UT1AsIFRBQl9CQVJfUE9TSVRJT05fQk9UVE9NXTtcblxuY29uc3QgY29tbWFuZHMgPSB7fSwgaGVscGVycyA9IHt9LCBleHRlbnNpb25zID0ge307XG5cbmZ1bmN0aW9uIGlzVmFsaWRFbGVtZW50SWRlbnRpZmllciAoaWQpIHtcbiAgaWYgKCFfLmlzU3RyaW5nKGlkKSAmJiAhXy5pc051bWJlcihpZCkpIHtcbiAgICByZXR1cm4gZmFsc2U7XG4gIH1cbiAgaWYgKF8uaXNTdHJpbmcoaWQpICYmIF8uaXNFbXB0eShpZCkpIHtcbiAgICByZXR1cm4gZmFsc2U7XG4gIH1cbiAgaWYgKF8uaXNOdW1iZXIoaWQpICYmIGlzTmFOKGlkKSkge1xuICAgIHJldHVybiBmYWxzZTtcbiAgfVxuICByZXR1cm4gdHJ1ZTtcbn1cblxuY29tbWFuZHMuc2V0RnJhbWUgPSBhc3luYyBmdW5jdGlvbiBzZXRGcmFtZSAoZnJhbWUpIHtcbiAgaWYgKCF0aGlzLmlzV2ViQ29udGV4dCgpKSB7XG4gICAgdGhyb3cgbmV3IGVycm9ycy5Ob3RJbXBsZW1lbnRlZEVycm9yKCk7XG4gIH1cblxuICBpZiAoXy5pc051bGwoZnJhbWUpKSB7XG4gICAgdGhpcy5jdXJXZWJGcmFtZXMgPSBbXTtcbiAgICB0aGlzLmxvZy5kZWJ1ZygnTGVhdmluZyB3ZWIgZnJhbWUgYW5kIGdvaW5nIGJhY2sgdG8gZGVmYXVsdCBjb250ZW50Jyk7XG4gICAgcmV0dXJuO1xuICB9XG5cbiAgaWYgKGhlbHBlcnMuaGFzRWxlbWVudElkKGZyYW1lKSkge1xuICAgIGNvbnN0IGF0b21zRWxlbWVudCA9IHRoaXMuZ2V0QXRvbXNFbGVtZW50KGZyYW1lKTtcbiAgICBjb25zdCB2YWx1ZSA9IGF3YWl0IHRoaXMuZXhlY3V0ZUF0b20oJ2dldF9mcmFtZV93aW5kb3cnLCBbYXRvbXNFbGVtZW50XSk7XG4gICAgdGhpcy5sb2cuZGVidWcoYEVudGVyaW5nIG5ldyB3ZWIgZnJhbWU6ICcke3ZhbHVlLldJTkRPV30nYCk7XG4gICAgdGhpcy5jdXJXZWJGcmFtZXMudW5zaGlmdCh2YWx1ZS5XSU5ET1cpO1xuICB9IGVsc2Uge1xuICAgIGNvbnN0IGF0b20gPSBfLmlzTnVtYmVyKGZyYW1lKSA/ICdmcmFtZV9ieV9pbmRleCcgOiAnZnJhbWVfYnlfaWRfb3JfbmFtZSc7XG4gICAgY29uc3QgdmFsdWUgPSBhd2FpdCB0aGlzLmV4ZWN1dGVBdG9tKGF0b20sIFtmcmFtZV0pO1xuICAgIGlmIChfLmlzTnVsbCh2YWx1ZSkgfHwgXy5pc1VuZGVmaW5lZCh2YWx1ZS5XSU5ET1cpKSB7XG4gICAgICB0aHJvdyBuZXcgZXJyb3JzLk5vU3VjaEZyYW1lRXJyb3IoKTtcbiAgICB9XG4gICAgdGhpcy5sb2cuZGVidWcoYEVudGVyaW5nIG5ldyB3ZWIgZnJhbWU6ICcke3ZhbHVlLldJTkRPV30nYCk7XG4gICAgdGhpcy5jdXJXZWJGcmFtZXMudW5zaGlmdCh2YWx1ZS5XSU5ET1cpO1xuICB9XG59O1xuXG5jb21tYW5kcy5nZXRDc3NQcm9wZXJ0eSA9IGFzeW5jIGZ1bmN0aW9uIGdldENzc1Byb3BlcnR5IChwcm9wZXJ0eU5hbWUsIGVsKSB7XG4gIGlmICghdGhpcy5pc1dlYkNvbnRleHQoKSkge1xuICAgIHRocm93IG5ldyBlcnJvcnMuTm90SW1wbGVtZW50ZWRFcnJvcigpO1xuICB9XG5cbiAgY29uc3QgYXRvbXNFbGVtZW50ID0gdGhpcy5nZXRBdG9tc0VsZW1lbnQoZWwpO1xuICByZXR1cm4gYXdhaXQgdGhpcy5leGVjdXRlQXRvbSgnZ2V0X3ZhbHVlX29mX2Nzc19wcm9wZXJ0eScsIFthdG9tc0VsZW1lbnQsIHByb3BlcnR5TmFtZV0pO1xufTtcblxuY29tbWFuZHMuc3VibWl0ID0gYXN5bmMgZnVuY3Rpb24gc3VibWl0IChlbCkge1xuICBpZiAoIXRoaXMuaXNXZWJDb250ZXh0KCkpIHtcbiAgICB0aHJvdyBuZXcgZXJyb3JzLk5vdEltcGxlbWVudGVkRXJyb3IoKTtcbiAgfVxuXG4gIGNvbnN0IGF0b21zRWxlbWVudCA9IHRoaXMuZ2V0QXRvbXNFbGVtZW50KGVsKTtcbiAgYXdhaXQgdGhpcy5leGVjdXRlQXRvbSgnc3VibWl0JywgW2F0b21zRWxlbWVudF0pO1xufTtcblxuY29tbWFuZHMucmVmcmVzaCA9IGFzeW5jIGZ1bmN0aW9uIHJlZnJlc2ggKCkge1xuICBpZiAoIXRoaXMuaXNXZWJDb250ZXh0KCkpIHtcbiAgICB0aHJvdyBuZXcgZXJyb3JzLk5vdEltcGxlbWVudGVkRXJyb3IoKTtcbiAgfVxuXG4gIGF3YWl0IHRoaXMuZXhlY3V0ZUF0b20oJ3JlZnJlc2gnLCBbXSk7XG59O1xuXG5jb21tYW5kcy5nZXRVcmwgPSBhc3luYyBmdW5jdGlvbiBnZXRVcmwgKCkge1xuICBpZiAoIXRoaXMuaXNXZWJDb250ZXh0KCkpIHtcbiAgICB0aHJvdyBuZXcgZXJyb3JzLk5vdEltcGxlbWVudGVkRXJyb3IoKTtcbiAgfVxuXG4gIHJldHVybiBhd2FpdCB0aGlzLnJlbW90ZS5leGVjdXRlKCd3aW5kb3cubG9jYXRpb24uaHJlZicpO1xufTtcblxuY29tbWFuZHMudGl0bGUgPSBhc3luYyBmdW5jdGlvbiB0aXRsZSAoKSB7XG4gIGlmICghdGhpcy5pc1dlYkNvbnRleHQoKSkge1xuICAgIHRocm93IG5ldyBlcnJvcnMuTm90SW1wbGVtZW50ZWRFcnJvcigpO1xuICB9XG5cbiAgcmV0dXJuIGF3YWl0IHRoaXMuZXhlY3V0ZUF0b20oJ3RpdGxlJywgW10sIHRydWUpO1xufTtcblxuY29tbWFuZHMuZ2V0Q29va2llcyA9IGFzeW5jIGZ1bmN0aW9uIGdldENvb2tpZXMgKCkge1xuICBpZiAoIXRoaXMuaXNXZWJDb250ZXh0KCkpIHtcbiAgICB0aHJvdyBuZXcgZXJyb3JzLk5vdEltcGxlbWVudGVkRXJyb3IoKTtcbiAgfVxuXG4gIHRoaXMubG9nLmRlYnVnKCdSZXRyaWV2aW5nIGFsbCBjb29raWVzJyk7XG5cbiAgbGV0IHNjcmlwdCA9ICdyZXR1cm4gZG9jdW1lbnQuY29va2llJztcbiAgbGV0IGpzQ29va2llcyA9IGF3YWl0IHRoaXMuZXhlY3V0ZUF0b20oJ2V4ZWN1dGVfc2NyaXB0JywgW3NjcmlwdCwgW11dKTtcblxuICBsZXQgY29va2llcyA9IFtdO1xuICB0cnkge1xuICAgIGZvciAobGV0IFtuYW1lLCB2YWx1ZV0gb2YgXy50b1BhaXJzKGNvb2tpZVV0aWxzLmNyZWF0ZUpXUENvb2tpZSh1bmRlZmluZWQsIGpzQ29va2llcykpKSB7XG4gICAgICBjb29raWVzLnB1c2goe25hbWUsIHZhbHVlfSk7XG4gICAgfVxuICAgIHJldHVybiBjb29raWVzO1xuICB9IGNhdGNoIChlcnIpIHtcbiAgICB0aGlzLmxvZy5lcnJvcihlcnIpO1xuICAgIHRocm93IG5ldyBlcnJvcnMuVW5rbm93bkVycm9yKGBFcnJvciBwYXJzaW5nIGNvb2tpZXMgZnJvbSByZXN1bHQ6ICcke2pzQ29va2llc30nYCk7XG4gIH1cbn07XG5cbmNvbW1hbmRzLnNldENvb2tpZSA9IGFzeW5jIGZ1bmN0aW9uIHNldENvb2tpZSAoY29va2llKSB7XG4gIGlmICghdGhpcy5pc1dlYkNvbnRleHQoKSkge1xuICAgIHRocm93IG5ldyBlcnJvcnMuTm90SW1wbGVtZW50ZWRFcnJvcigpO1xuICB9XG5cbiAgY29va2llID0gXy5jbG9uZShjb29raWUpO1xuXG4gIC8vIGlmIGBwYXRoYCBmaWVsZCBpcyBub3Qgc3BlY2lmaWVkLCBTYWZhcmkgd2lsbCBub3QgdXBkYXRlIGNvb2tpZXMgYXMgZXhwZWN0ZWQ7IGVnIGlzc3VlICMxNzA4XG4gIGlmICghY29va2llLnBhdGgpIHtcbiAgICBjb29raWUucGF0aCA9ICcvJztcbiAgfVxuXG4gIGNvbnN0IGpzQ29va2llID0gY29va2llVXRpbHMuY3JlYXRlSlNDb29raWUoY29va2llLm5hbWUsIGNvb2tpZS52YWx1ZSwge1xuICAgIGV4cGlyZXM6IF8uaXNOdW1iZXIoY29va2llLmV4cGlyeSkgPyAobmV3IERhdGUoY29va2llLmV4cGlyeSAqIDEwMDApKS50b1VUQ1N0cmluZygpIDpcbiAgICAgIGNvb2tpZS5leHBpcnksXG4gICAgcGF0aDogY29va2llLnBhdGgsXG4gICAgZG9tYWluOiBjb29raWUuZG9tYWluLFxuICAgIGh0dHBPbmx5OiBjb29raWUuaHR0cE9ubHksXG4gICAgc2VjdXJlOiBjb29raWUuc2VjdXJlXG4gIH0pO1xuICBsZXQgc2NyaXB0ID0gYGRvY3VtZW50LmNvb2tpZSA9ICR7SlNPTi5zdHJpbmdpZnkoanNDb29raWUpfWA7XG4gIGF3YWl0IHRoaXMuZXhlY3V0ZUF0b20oJ2V4ZWN1dGVfc2NyaXB0JywgW3NjcmlwdCwgW11dKTtcbn07XG5cbmNvbW1hbmRzLmRlbGV0ZUNvb2tpZSA9IGFzeW5jIGZ1bmN0aW9uIGRlbGV0ZUNvb2tpZSAoY29va2llTmFtZSkge1xuICBpZiAoIXRoaXMuaXNXZWJDb250ZXh0KCkpIHtcbiAgICB0aHJvdyBuZXcgZXJyb3JzLk5vdEltcGxlbWVudGVkRXJyb3IoKTtcbiAgfVxuXG4gIC8vIGNoZWNrIGNvb2tpZSBleGlzdGVuY2VcbiAgbGV0IGNvb2tpZXMgPSBhd2FpdCB0aGlzLmdldENvb2tpZXMoKTtcbiAgaWYgKF8uaW5kZXhPZihfLm1hcChjb29raWVzLCAnbmFtZScpLCBjb29raWVOYW1lKSA9PT0gLTEpIHtcbiAgICB0aGlzLmxvZy5kZWJ1ZyhgQ29va2llICcke2Nvb2tpZU5hbWV9JyBub3QgZm91bmQuIElnbm9yaW5nLmApO1xuICAgIHJldHVybiB0cnVlO1xuICB9XG5cbiAgcmV0dXJuIGF3YWl0IHRoaXMuX2RlbGV0ZUNvb2tpZShjb29raWVOYW1lKTtcbn07XG5cbmNvbW1hbmRzLmRlbGV0ZUNvb2tpZXMgPSBhc3luYyBmdW5jdGlvbiBkZWxldGVDb29raWVzICgpIHtcbiAgaWYgKCF0aGlzLmlzV2ViQ29udGV4dCgpKSB7XG4gICAgdGhyb3cgbmV3IGVycm9ycy5Ob3RJbXBsZW1lbnRlZEVycm9yKCk7XG4gIH1cblxuICBsZXQgY29va2llcyA9IGF3YWl0IHRoaXMuZ2V0Q29va2llcygpO1xuICBpZiAoY29va2llcy5sZW5ndGgpIHtcbiAgICBmb3IgKGxldCBjb29raWUgb2YgY29va2llcykge1xuICAgICAgYXdhaXQgdGhpcy5fZGVsZXRlQ29va2llKGNvb2tpZS5uYW1lKTtcbiAgICB9XG4gIH1cbiAgcmV0dXJuIHRydWU7XG59O1xuXG5oZWxwZXJzLl9kZWxldGVDb29raWUgPSBhc3luYyBmdW5jdGlvbiBfZGVsZXRlQ29va2llIChjb29raWVOYW1lKSB7XG4gIHRoaXMubG9nLmRlYnVnKGBEZWxldGluZyBjb29raWUgJyR7Y29va2llTmFtZX0nYCk7XG4gIGxldCB3ZWJDb29raWUgPSBjb29raWVVdGlscy5leHBpcmVDb29raWUoY29va2llTmFtZSwge3BhdGg6ICcvJ30pO1xuICBsZXQgc2NyaXB0ID0gYGRvY3VtZW50LmNvb2tpZSA9ICR7SlNPTi5zdHJpbmdpZnkod2ViQ29va2llKX1gO1xuICBhd2FpdCB0aGlzLmV4ZWN1dGVBdG9tKCdleGVjdXRlX3NjcmlwdCcsIFtzY3JpcHQsIFtdXSk7XG59O1xuXG5oZWxwZXJzLmNhY2hlV2ViRWxlbWVudCA9IGZ1bmN0aW9uIGNhY2hlV2ViRWxlbWVudCAoZWwpIHtcbiAgaWYgKCFfLmlzUGxhaW5PYmplY3QoZWwpKSB7XG4gICAgcmV0dXJuIGVsO1xuICB9XG4gIGNvbnN0IGVsSWQgPSB1dGlsLnVud3JhcEVsZW1lbnQoZWwpO1xuICBpZiAoIWlzVmFsaWRFbGVtZW50SWRlbnRpZmllcihlbElkKSkge1xuICAgIHJldHVybiBlbDtcbiAgfVxuICAvLyBJbiBuZXdlciBkZWJ1Z2dlciByZWxlYXNlcyBlbGVtZW50IGlkZW50aWZpZXJzIGxvb2sgbGlrZSBgOndkYzoxNjI4MTUxNjQ5MzI1YFxuICAvLyBXZSBhc3N1bWUgaXQgaXMgc2FmZSB0byB1c2UgdGhlc2UgdG8gaWRlbnRpZnkgY2FjaGVkIGVsZW1lbnRzXG4gIGNvbnN0IGNhY2hlSWQgPSBfLmluY2x1ZGVzKGVsSWQsICc6JykgPyBlbElkIDogdXRpbC51dWlkVjQoKTtcbiAgdGhpcy53ZWJFbGVtZW50c0NhY2hlLnNldChjYWNoZUlkLCBlbElkKTtcbiAgcmV0dXJuIHV0aWwud3JhcEVsZW1lbnQoY2FjaGVJZCk7XG59O1xuXG5oZWxwZXJzLmNhY2hlV2ViRWxlbWVudHMgPSBmdW5jdGlvbiBjYWNoZVdlYkVsZW1lbnRzIChyZXNwb25zZSkge1xuICBjb25zdCB0b0NhY2hlZCA9ICh2KSA9PiBfLmlzQXJyYXkodikgfHwgXy5pc1BsYWluT2JqZWN0KHYpXG4gICAgPyB0aGlzLmNhY2hlV2ViRWxlbWVudHModilcbiAgICA6IHY7XG5cbiAgaWYgKF8uaXNBcnJheShyZXNwb25zZSkpIHtcbiAgICByZXR1cm4gcmVzcG9uc2UubWFwKHRvQ2FjaGVkKTtcbiAgfSBlbHNlIGlmIChfLmlzUGxhaW5PYmplY3QocmVzcG9uc2UpKSB7XG4gICAgY29uc3QgcmVzdWx0ID0gey4uLnJlc3BvbnNlLCAuLi4odGhpcy5jYWNoZVdlYkVsZW1lbnQocmVzcG9uc2UpKX07XG4gICAgcmV0dXJuIF8udG9QYWlycyhyZXN1bHQpLnJlZHVjZShcbiAgICAgIChhY2MsIFtrZXksIHZhbHVlXSkgPT4ge1xuICAgICAgICBhY2Nba2V5XSA9IHRvQ2FjaGVkKHZhbHVlKTtcbiAgICAgICAgcmV0dXJuIGFjYztcbiAgICAgIH0sIHt9XG4gICAgKTtcbiAgfVxuICByZXR1cm4gcmVzcG9uc2U7XG59O1xuXG5leHRlbnNpb25zLmZpbmRXZWJFbGVtZW50T3JFbGVtZW50cyA9IGFzeW5jIGZ1bmN0aW9uIGZpbmRXZWJFbGVtZW50T3JFbGVtZW50cyAoc3RyYXRlZ3ksIHNlbGVjdG9yLCBtYW55LCBjdHgpIHtcbiAgY29uc3QgY29udGV4dEVsZW1lbnQgPSBfLmlzTmlsKGN0eCkgPyBudWxsIDogdGhpcy5nZXRBdG9tc0VsZW1lbnQoY3R4KTtcbiAgbGV0IGVsZW1lbnQ7XG4gIGxldCBkb0ZpbmQgPSBhc3luYyAoKSA9PiB7XG4gICAgZWxlbWVudCA9IGF3YWl0IHRoaXMuZXhlY3V0ZUF0b20oYGZpbmRfZWxlbWVudCR7bWFueSA/ICdzJyA6ICcnfWAsIFtzdHJhdGVneSwgc2VsZWN0b3IsIGNvbnRleHRFbGVtZW50XSk7XG4gICAgcmV0dXJuICFfLmlzTnVsbChlbGVtZW50KTtcbiAgfTtcbiAgdHJ5IHtcbiAgICBhd2FpdCB0aGlzLmltcGxpY2l0V2FpdEZvckNvbmRpdGlvbihkb0ZpbmQpO1xuICB9IGNhdGNoIChlcnIpIHtcbiAgICBpZiAoZXJyLm1lc3NhZ2UgJiYgXy5pc0Z1bmN0aW9uKGVyci5tZXNzYWdlLm1hdGNoKSAmJiBlcnIubWVzc2FnZS5tYXRjaCgvQ29uZGl0aW9uIHVubWV0LykpIHtcbiAgICAgIC8vIGNvbmRpdGlvbiB3YXMgbm90IG1ldCBzZXR0aW5nIHJlcyB0byBlbXB0eSBhcnJheVxuICAgICAgZWxlbWVudCA9IFtdO1xuICAgIH0gZWxzZSB7XG4gICAgICB0aHJvdyBlcnI7XG4gICAgfVxuICB9XG5cbiAgaWYgKG1hbnkpIHtcbiAgICByZXR1cm4gdGhpcy5jYWNoZVdlYkVsZW1lbnRzKGVsZW1lbnQpO1xuICB9XG4gIGlmIChfLmlzRW1wdHkoZWxlbWVudCkpIHtcbiAgICB0aHJvdyBuZXcgZXJyb3JzLk5vU3VjaEVsZW1lbnRFcnJvcigpO1xuICB9XG4gIHJldHVybiB0aGlzLmNhY2hlV2ViRWxlbWVudHMoZWxlbWVudCk7XG59O1xuXG5leHRlbnNpb25zLmNsaWNrV2ViQ29vcmRzID0gYXN5bmMgZnVuY3Rpb24gY2xpY2tXZWJDb29yZHMgKCkge1xuICBsZXQgY29vcmRzID0gYXdhaXQgdGhpcy50cmFuc2xhdGVXZWJDb29yZHModGhpcy5jdXJXZWJDb29yZHMpO1xuICBhd2FpdCB0aGlzLmNsaWNrQ29vcmRzKGNvb3Jkcyk7XG59O1xuXG5oZWxwZXJzLmV4ZWN1dGVBdG9tID0gYXN5bmMgZnVuY3Rpb24gZXhlY3V0ZUF0b20gKGF0b20sIGFyZ3MsIGFsd2F5c0RlZmF1bHRGcmFtZSA9IGZhbHNlKSB7XG4gIGxldCBmcmFtZXMgPSBhbHdheXNEZWZhdWx0RnJhbWUgPT09IHRydWUgPyBbXSA6IHRoaXMuY3VyV2ViRnJhbWVzO1xuICBsZXQgcHJvbWlzZSA9IHRoaXMucmVtb3RlLmV4ZWN1dGVBdG9tKGF0b20sIGFyZ3MsIGZyYW1lcyk7XG4gIHJldHVybiBhd2FpdCB0aGlzLndhaXRGb3JBdG9tKHByb21pc2UpO1xufTtcblxuaGVscGVycy5leGVjdXRlQXRvbUFzeW5jID0gYXN5bmMgZnVuY3Rpb24gZXhlY3V0ZUF0b21Bc3luYyAoYXRvbSwgYXJncywgcmVzcG9uc2VVcmwpIHtcbiAgLy8gc2F2ZSB0aGUgcmVzb2x2ZSBhbmQgcmVqZWN0IG1ldGhvZHMgb2YgdGhlIHByb21pc2UgdG8gYmUgd2FpdGVkIGZvclxuICBsZXQgcHJvbWlzZSA9IG5ldyBCKChyZXNvbHZlLCByZWplY3QpID0+IHtcbiAgICB0aGlzLmFzeW5jUHJvbWlzZSA9IHtyZXNvbHZlLCByZWplY3R9O1xuICB9KTtcbiAgYXdhaXQgdGhpcy5yZW1vdGUuZXhlY3V0ZUF0b21Bc3luYyhhdG9tLCBhcmdzLCB0aGlzLmN1cldlYkZyYW1lcywgcmVzcG9uc2VVcmwpO1xuICByZXR1cm4gYXdhaXQgdGhpcy53YWl0Rm9yQXRvbShwcm9taXNlKTtcbn07XG5cbmhlbHBlcnMuZ2V0QXRvbXNFbGVtZW50ID0gZnVuY3Rpb24gZ2V0QXRvbXNFbGVtZW50IChlbE9ySWQpIHtcbiAgY29uc3QgZWxJZCA9IHV0aWwudW53cmFwRWxlbWVudChlbE9ySWQpO1xuICBpZiAoIXRoaXMud2ViRWxlbWVudHNDYWNoZS5oYXMoZWxJZCkpIHtcbiAgICB0aHJvdyBuZXcgZXJyb3JzLlN0YWxlRWxlbWVudFJlZmVyZW5jZUVycm9yKCk7XG4gIH1cbiAgcmV0dXJuIHtFTEVNRU5UOiB0aGlzLndlYkVsZW1lbnRzQ2FjaGUuZ2V0KGVsSWQpfTtcbn07XG5cbmhlbHBlcnMuY29udmVydEVsZW1lbnRzRm9yQXRvbXMgPSBmdW5jdGlvbiBjb252ZXJ0RWxlbWVudHNGb3JBdG9tcyAoYXJncyA9IFtdKSB7XG4gIHJldHVybiBhcmdzLm1hcCgoYXJnKSA9PiB7XG4gICAgaWYgKGhlbHBlcnMuaGFzRWxlbWVudElkKGFyZykpIHtcbiAgICAgIHRyeSB7XG4gICAgICAgIHJldHVybiB0aGlzLmdldEF0b21zRWxlbWVudChhcmcpO1xuICAgICAgfSBjYXRjaCAoZXJyKSB7XG4gICAgICAgIGlmICghaXNFcnJvclR5cGUoZXJyLCBlcnJvcnMuU3RhbGVFbGVtZW50UmVmZXJlbmNlRXJyb3IpKSB7XG4gICAgICAgICAgdGhyb3cgZXJyO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgICByZXR1cm4gYXJnO1xuICAgIH1cbiAgICByZXR1cm4gXy5pc0FycmF5KGFyZykgPyB0aGlzLmNvbnZlcnRFbGVtZW50c0ZvckF0b21zKGFyZykgOiBhcmc7XG4gIH0pO1xufTtcblxuaGVscGVycy5nZXRFbGVtZW50SWQgPSBmdW5jdGlvbiBnZXRFbGVtZW50SWQgKGVsZW1lbnQpIHtcbiAgcmV0dXJuIGVsZW1lbnQuRUxFTUVOVCB8fCBlbGVtZW50W1czQ19XRUJfRUxFTUVOVF9JREVOVElGSUVSXTtcbn07XG5cbmhlbHBlcnMuaGFzRWxlbWVudElkID0gZnVuY3Rpb24gaGFzRWxlbWVudElkIChlbGVtZW50KSB7XG4gIHJldHVybiB1dGlsLmhhc1ZhbHVlKGVsZW1lbnQpICYmICh1dGlsLmhhc1ZhbHVlKGVsZW1lbnQuRUxFTUVOVCkgfHwgdXRpbC5oYXNWYWx1ZShlbGVtZW50W1czQ19XRUJfRUxFTUVOVF9JREVOVElGSUVSXSkpO1xufTtcblxuZXh0ZW5zaW9ucy5nZXRTYWZhcmlJc0lwaG9uZSA9IGFzeW5jIGZ1bmN0aW9uIGdldFNhZmFyaUlzSXBob25lICgpIHtcbiAgaWYgKF8uaXNCb29sZWFuKHRoaXMuX2lzU2FmYXJpSXBob25lKSkge1xuICAgIHJldHVybiB0aGlzLl9pc1NhZmFyaUlwaG9uZTtcbiAgfVxuICB0cnkge1xuICAgIGNvbnN0IHVzZXJBZ2VudCA9IGF3YWl0IHRoaXMuZXhlY3V0ZSgncmV0dXJuIG5hdmlnYXRvci51c2VyQWdlbnQnKTtcbiAgICB0aGlzLl9pc1NhZmFyaUlwaG9uZSA9IHVzZXJBZ2VudC50b0xvd2VyQ2FzZSgpLmluY2x1ZGVzKCdpcGhvbmUnKTtcbiAgfSBjYXRjaCAoZXJyKSB7XG4gICAgdGhpcy5sb2cud2FybihgVW5hYmxlIHRvIGZpbmQgZGV2aWNlIHR5cGUgZnJvbSB1c2VyYWdlbnQuIEFzc3VtaW5nIGlQaG9uZWApO1xuICAgIHRoaXMubG9nLmRlYnVnKGBFcnJvcjogJHtlcnIubWVzc2FnZX1gKTtcbiAgfVxuICByZXR1cm4gdGhpcy5faXNTYWZhcmlJcGhvbmUgPz8gdHJ1ZTtcbn07XG5cbmV4dGVuc2lvbnMuZ2V0U2FmYXJpRGV2aWNlU2l6ZSA9IGFzeW5jIGZ1bmN0aW9uIGdldFNhZmFyaURldmljZVNpemUgKCkge1xuICBjb25zdCBzY3JpcHQgPSAncmV0dXJuIHtoZWlnaHQ6IHdpbmRvdy5zY3JlZW4uYXZhaWxIZWlnaHQgKiB3aW5kb3cuZGV2aWNlUGl4ZWxSYXRpbywgd2lkdGg6IHdpbmRvdy5zY3JlZW4uYXZhaWxXaWR0aCAqIHdpbmRvdy5kZXZpY2VQaXhlbFJhdGlvfTsnO1xuICBjb25zdCB7d2lkdGgsIGhlaWdodH0gPSBhd2FpdCB0aGlzLmV4ZWN1dGUoc2NyaXB0KTtcbiAgY29uc3QgW25vcm1IZWlnaHQsIG5vcm1XaWR0aF0gPSBoZWlnaHQgPiB3aWR0aCA/IFtoZWlnaHQsIHdpZHRoXSA6IFt3aWR0aCwgaGVpZ2h0XTtcbiAgcmV0dXJuIHtcbiAgICB3aWR0aDogbm9ybVdpZHRoLFxuICAgIGhlaWdodDogbm9ybUhlaWdodCxcbiAgfTtcbn07XG5cbmV4dGVuc2lvbnMuZ2V0U2FmYXJpSXNOb3RjaGVkID0gYXN5bmMgZnVuY3Rpb24gZ2V0U2FmYXJpSXNOb3RjaGVkICgpIHtcbiAgaWYgKF8uaXNCb29sZWFuKHRoaXMuX2lzU2FmYXJpTm90Y2hlZCkpIHtcbiAgICByZXR1cm4gdGhpcy5faXNTYWZhcmlOb3RjaGVkO1xuICB9XG5cbiAgdHJ5IHtcbiAgICBjb25zdCB7d2lkdGgsIGhlaWdodH0gPSBhd2FpdCB0aGlzLmdldFNhZmFyaURldmljZVNpemUoKTtcbiAgICBmb3IgKGNvbnN0IGRldmljZSBvZiBOT1RDSEVEX0RFVklDRV9TSVpFUykge1xuICAgICAgaWYgKGRldmljZS53ID09PSB3aWR0aCAmJiBkZXZpY2UuaCA9PT0gaGVpZ2h0KSB7XG4gICAgICAgIHRoaXMuX2lzU2FmYXJpTm90Y2hlZCA9IHRydWU7XG4gICAgICB9XG4gICAgfVxuICB9IGNhdGNoIChlcnIpIHtcbiAgICB0aGlzLmxvZy53YXJuKGBVbmFibGUgdG8gZmluZCBkZXZpY2UgdHlwZSBmcm9tIGRpbWVuc2lvbnMuIEFzc3VtaW5nIHRoZSBkZXZpY2UgaXMgbm90IG5vdGNoZWRgKTtcbiAgICB0aGlzLmxvZy5kZWJ1ZyhgRXJyb3I6ICR7ZXJyLm1lc3NhZ2V9YCk7XG4gIH1cbiAgcmV0dXJuIHRoaXMuX2lzU2FmYXJpTm90Y2hlZCA/PyBmYWxzZTtcbn07XG5cbmV4dGVuc2lvbnMuZ2V0RXh0cmFUcmFuc2xhdGVXZWJDb29yZHNPZmZzZXQgPSBhc3luYyBmdW5jdGlvbiBnZXRFeHRyYVRyYW5zbGF0ZVdlYkNvb3Jkc09mZnNldCAod3ZQb3MsIHJlYWxEaW1zKSB7XG4gIGxldCB0b3BPZmZzZXQgPSAwO1xuICBsZXQgYm90dG9tT2Zmc2V0ID0gMDtcblxuICBjb25zdCBpc0lwaG9uZSA9IGF3YWl0IHRoaXMuZ2V0U2FmYXJpSXNJcGhvbmUoKTtcblxuICAvLyBObyBuZWVkIHRvIGNoZWNrIHdoZXRoZXIgdGhlIFNtYXJ0IEFwcCBCYW5uZXIgb3IgVGFiIEJhciBpcyB2aXNpYmxlIG9yIG5vdFxuICAvLyBpZiBhbHJlYWR5IGRlZmluZWQgYnkgbmF0aXZlV2ViVGFwVGFiQmFyVmlzaWJpbGl0eSBvciBuYXRpdmVXZWJUYXBTbWFydEFwcEJhbm5lclZpc2liaWxpdHkgaW4gc2V0dGluZ3MuXG4gIGNvbnN0IHtcbiAgICBuYXRpdmVXZWJUYXBUYWJCYXJWaXNpYmlsaXR5LFxuICAgIG5hdGl2ZVdlYlRhcFNtYXJ0QXBwQmFubmVyVmlzaWJpbGl0eSxcbiAgICBzYWZhcmlUYWJCYXJQb3NpdGlvbiA9IHV0aWwuY29tcGFyZVZlcnNpb25zKHRoaXMub3B0cy5wbGF0Zm9ybVZlcnNpb24sICc+PScsICcxNS4wJykgJiYgaXNJcGhvbmVcbiAgICAgID8gVEFCX0JBUl9QT1NJVElPTl9CT1RUT00gOiBUQUJfQkFSX1BPU0lUSU9OX1RPUCxcbiAgfSA9IGF3YWl0IHRoaXMuc2V0dGluZ3MuZ2V0U2V0dGluZ3MoKTtcbiAgbGV0IHRhYkJhclZpc2liaWxpdHkgPSBfLmxvd2VyQ2FzZShuYXRpdmVXZWJUYXBUYWJCYXJWaXNpYmlsaXR5KTtcbiAgbGV0IGJhbm5lclZpc2liaWxpdHkgPSBfLmxvd2VyQ2FzZShuYXRpdmVXZWJUYXBTbWFydEFwcEJhbm5lclZpc2liaWxpdHkpO1xuICBjb25zdCB0YWJCYXJQb3NpdGlvbiA9IF8ubG93ZXJDYXNlKHNhZmFyaVRhYkJhclBvc2l0aW9uKTtcblxuICBpZiAoIVZJU0lCSUxJVElFUy5pbmNsdWRlcyh0YWJCYXJWaXNpYmlsaXR5KSkge1xuICAgIHRhYkJhclZpc2liaWxpdHkgPSBERVRFQ1Q7XG4gIH1cbiAgaWYgKCFWSVNJQklMSVRJRVMuaW5jbHVkZXMoYmFubmVyVmlzaWJpbGl0eSkpIHtcbiAgICBiYW5uZXJWaXNpYmlsaXR5ID0gREVURUNUO1xuICB9XG5cbiAgaWYgKCFUQUJfQkFSX1BPU1NJVElPTlMuaW5jbHVkZXModGFiQmFyUG9zaXRpb24pKSB7XG4gICAgdGhyb3cgbmV3IGVycm9ycy5JbnZhbGlkQXJndW1lbnRFcnJvcihcbiAgICAgIGAke3NhZmFyaVRhYkJhclBvc2l0aW9ufSBpcyBpbnZhbGlkIGFzIFNhZmFyaSB0YWIgYmFyIHBvc2l0aW9uLiBBdmFpbGFibGUgcG9zaXRpb25zIGFyZSAke1RBQl9CQVJfUE9TU0lUSU9OU30uYCk7XG4gIH1cblxuICBjb25zdCBpc05vdGNoZWQgPSBpc0lwaG9uZSAmJiBhd2FpdCB0aGlzLmdldFNhZmFyaUlzTm90Y2hlZCgpO1xuXG4gIGNvbnN0IG9yaWVudGF0aW9uID0gcmVhbERpbXMuaCA+IHJlYWxEaW1zLncgPyAnUE9SVFJBSVQnIDogJ0xBTkRTQ0FQRSc7XG5cbiAgY29uc3Qgbm90Y2hPZmZzZXQgPSBpc05vdGNoZWRcbiAgICA/IHV0aWwuY29tcGFyZVZlcnNpb25zKHRoaXMub3B0cy5wbGF0Zm9ybVZlcnNpb24sICc9JywgJzEzLjAnKVxuICAgICAgPyBJUEhPTkVfWF9OT1RDSF9PRkZTRVRfSU9TXzEzXG4gICAgICA6IElQSE9ORV9YX05PVENIX09GRlNFVF9JT1NcbiAgICA6IDA7XG5cbiAgY29uc3QgaXNTY3JvbGxlZCA9IGF3YWl0IHRoaXMuZXhlY3V0ZSgncmV0dXJuIGRvY3VtZW50LmRvY3VtZW50RWxlbWVudC5zY3JvbGxUb3AgPiAwJyk7XG4gIGlmIChpc1Njcm9sbGVkKSB7XG4gICAgdG9wT2Zmc2V0ID0gSVBIT05FX1NDUk9MTEVEX1RPUF9CQVJfSEVJR0hUICsgbm90Y2hPZmZzZXQ7XG5cbiAgICBpZiAoaXNOb3RjaGVkKSB7XG4gICAgICB0b3BPZmZzZXQgLT0gSVBIT05FX1hfU0NST0xMRURfT0ZGU0VUO1xuICAgIH1cblxuICAgIC8vIElmIHRoZSBpUGhvbmUgaXMgbGFuZHNjYXBlIHRoZW4gdGhlcmUgaXMgbm8gdG9wIGJhclxuICAgIGlmIChvcmllbnRhdGlvbiA9PT0gJ0xBTkRTQ0FQRScgJiYgaXNJcGhvbmUpIHtcbiAgICAgIHRvcE9mZnNldCA9IDA7XG4gICAgfVxuICB9IGVsc2Uge1xuICAgIHRvcE9mZnNldCA9IHRhYkJhclBvc2l0aW9uID09PSBUQUJfQkFSX1BPU0lUSU9OX0JPVFRPTSA/IDAgOiBJUEhPTkVfVE9QX0JBUl9IRUlHSFQ7XG4gICAgdG9wT2Zmc2V0ICs9IG5vdGNoT2Zmc2V0O1xuICAgIHRoaXMubG9nLmRlYnVnKGB0YWJCYXJQb3NpdGlvbiBhbmQgdG9wT2Zmc2V0OiAke3RhYkJhclBvc2l0aW9ufSwgJHt0b3BPZmZzZXR9YCk7XG5cbiAgICBpZiAoaXNJcGhvbmUpIHtcbiAgICAgIGlmIChvcmllbnRhdGlvbiA9PT0gJ1BPUlRSQUlUJykge1xuICAgICAgICAvLyBUaGUgYm90dG9tIGJhciBpcyBvbmx5IHZpc2libGUgd2hlbiBwb3J0cmFpdFxuICAgICAgICBib3R0b21PZmZzZXQgPSBJUEhPTkVfQk9UVE9NX0JBUl9PRkZTRVQ7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICB0b3BPZmZzZXQgPSBJUEhPTkVfTEFORFNDQVBFX1RPUF9CQVJfSEVJR0hUO1xuICAgICAgfVxuICAgIH1cblxuICAgIGlmIChvcmllbnRhdGlvbiA9PT0gJ0xBTkRTQ0FQRScgfHwgIWlzSXBob25lKSB7XG4gICAgICBpZiAodGFiQmFyVmlzaWJpbGl0eSA9PT0gVklTSUJMRSkge1xuICAgICAgICB0b3BPZmZzZXQgKz0gVEFCX0JBUl9PRkZTRVQ7XG4gICAgICB9IGVsc2UgaWYgKHRhYkJhclZpc2liaWxpdHkgPT09IERFVEVDVCkge1xuICAgICAgICAvLyBUYWJzIG9ubHkgYXBwZWFyIGlmIHRoZSBkZXZpY2UgaXMgbGFuZHNjYXBlIG9yIGlmIGl0J3MgYW4gaVBhZCBzbyB3ZSBvbmx5IGNoZWNrIHZpc2liaWxpdHkgaW4gdGhpcyBjYXNlXG4gICAgICAgIC8vIEFzc3VtZSB0aGF0IGVhY2ggdGFiIGJhciBpcyBhIFdlYlZpZXdcbiAgICAgICAgY29uc3QgY29udGV4dHNBbmRWaWV3cyA9IGF3YWl0IHRoaXMuZ2V0Q29udGV4dHNBbmRWaWV3cygpO1xuICAgICAgICBjb25zdCB0YWJzID0gY29udGV4dHNBbmRWaWV3cy5maWx0ZXIoKGN0eCkgPT4gY3R4LmlkLnN0YXJ0c1dpdGgoJ1dFQlZJRVdfJykpO1xuXG4gICAgICAgIGlmICh0YWJzLmxlbmd0aCA+IDEpIHtcbiAgICAgICAgICB0aGlzLmxvZy5kZWJ1ZyhgRm91bmQgJHt0YWJzLmxlbmd0aH0gdGFicy4gQXNzdW1pbmcgdGhlIHRhYiBiYXIgaXMgdmlzaWJsZWApO1xuICAgICAgICAgIHRvcE9mZnNldCArPSBUQUJfQkFSX09GRlNFVDtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIHRvcE9mZnNldCArPSBhd2FpdCB0aGlzLmdldEV4dHJhTmF0aXZlV2ViVGFwT2Zmc2V0KGlzSXBob25lLCBiYW5uZXJWaXNpYmlsaXR5KTtcblxuICB3dlBvcy55ICs9IHRvcE9mZnNldDtcbiAgcmVhbERpbXMuaCAtPSAodG9wT2Zmc2V0ICsgYm90dG9tT2Zmc2V0KTtcbn07XG5cbmV4dGVuc2lvbnMuZ2V0RXh0cmFOYXRpdmVXZWJUYXBPZmZzZXQgPSBhc3luYyBmdW5jdGlvbiBnZXRFeHRyYU5hdGl2ZVdlYlRhcE9mZnNldCAoaXNJcGhvbmUsIGJhbm5lclZpc2liaWxpdHkpIHtcbiAgbGV0IG9mZnNldCA9IDA7XG5cbiAgaWYgKGJhbm5lclZpc2liaWxpdHkgPT09IFZJU0lCTEUpIHtcbiAgICBvZmZzZXQgKz0gaXNJcGhvbmUgP1xuICAgICAgSVBIT05FX1dFQl9DT09SRF9TTUFSVF9BUFBfQkFOTkVSX09GRlNFVCA6XG4gICAgICBJUEFEX1dFQl9DT09SRF9TTUFSVF9BUFBfQkFOTkVSX09GRlNFVDtcbiAgfSBlbHNlIGlmIChiYW5uZXJWaXNpYmlsaXR5ID09PSBERVRFQ1QpIHtcbiAgICAvLyB0cnkgdG8gc2VlIGlmIHRoZXJlIGlzIGFuIFNtYXJ0IEFwcCBCYW5uZXJcbiAgICBjb25zdCBiYW5uZXJzID0gYXdhaXQgdGhpcy5maW5kTmF0aXZlRWxlbWVudE9yRWxlbWVudHMoJ2FjY2Vzc2liaWxpdHkgaWQnLCAnQ2xvc2UgYXBwIGRvd25sb2FkIG9mZmVyJywgdHJ1ZSk7XG4gICAgaWYgKGJhbm5lcnMubGVuZ3RoID4gMCkge1xuICAgICAgb2Zmc2V0ICs9IGlzSXBob25lID9cbiAgICAgICAgSVBIT05FX1dFQl9DT09SRF9TTUFSVF9BUFBfQkFOTkVSX09GRlNFVCA6XG4gICAgICAgIElQQURfV0VCX0NPT1JEX1NNQVJUX0FQUF9CQU5ORVJfT0ZGU0VUO1xuICAgIH1cbiAgfVxuXG4gIHRoaXMubG9nLmRlYnVnKGBBZGRpdGlvbmFsIG5hdGl2ZSB3ZWIgdGFwIG9mZnNldCBjb21wdXRlZDogJHtvZmZzZXR9YCk7XG4gIHJldHVybiBvZmZzZXQ7XG59O1xuXG5hc3luYyBmdW5jdGlvbiB0YXBXZWJFbGVtZW50TmF0aXZlbHkgKGRyaXZlciwgYXRvbXNFbGVtZW50KSB7XG4gIC8vIHRyeSB0byBnZXQgdGhlIHRleHQgb2YgdGhlIGVsZW1lbnQsIHdoaWNoIHdpbGwgYmUgYWNjZXNzaWJsZSBpbiB0aGVcbiAgLy8gbmF0aXZlIGNvbnRleHRcbiAgdHJ5IHtcbiAgICBsZXQgdGV4dCA9IGF3YWl0IGRyaXZlci5leGVjdXRlQXRvbSgnZ2V0X3RleHQnLCBbYXRvbXNFbGVtZW50XSk7XG4gICAgaWYgKCF0ZXh0KSB7XG4gICAgICB0ZXh0ID0gYXdhaXQgZHJpdmVyLmV4ZWN1dGVBdG9tKCdnZXRfYXR0cmlidXRlX3ZhbHVlJywgW2F0b21zRWxlbWVudCwgJ3ZhbHVlJ10pO1xuICAgIH1cblxuICAgIGlmICh0ZXh0KSB7XG4gICAgICBjb25zdCBlbHMgPSBhd2FpdCBkcml2ZXIuZmluZE5hdGl2ZUVsZW1lbnRPckVsZW1lbnRzKCdhY2Nlc3NpYmlsaXR5IGlkJywgdGV4dCwgdHJ1ZSk7XG4gICAgICBpZiAoZWxzLmxlbmd0aCA9PT0gMSB8fCBlbHMubGVuZ3RoID09PSAyKSB7XG4gICAgICAgIGNvbnN0IGVsID0gZWxzWzBdO1xuICAgICAgICAvLyB1c2UgdGFwIGJlY2F1c2Ugb24gaU9TIDExLjIgYW5kIGJlbG93IGBuYXRpdmVDbGlja2AgY3Jhc2hlcyBXREFcbiAgICAgICAgY29uc3QgcmVjdCA9IGF3YWl0IGRyaXZlci5wcm94eUNvbW1hbmQoYC9lbGVtZW50LyR7dXRpbC51bndyYXBFbGVtZW50KGVsKX0vcmVjdGAsICdHRVQnKTtcbiAgICAgICAgaWYgKGVscy5sZW5ndGggPT09IDIpIHtcbiAgICAgICAgICBjb25zdCBlbDIgPSBlbHNbMV07XG4gICAgICAgICAgY29uc3QgcmVjdDIgPSBhd2FpdCBkcml2ZXIucHJveHlDb21tYW5kKGAvZWxlbWVudC8ke3V0aWwudW53cmFwRWxlbWVudChlbDIpfS9yZWN0YCwgJ0dFVCcpO1xuXG4gICAgICAgICAgaWYgKChyZWN0LnggIT09IHJlY3QyLnggfHwgcmVjdC55ICE9PSByZWN0Mi55KSB8fFxuICAgICAgICAgIChyZWN0LndpZHRoICE9PSByZWN0Mi53aWR0aCB8fCByZWN0LmhlaWdodCAhPT0gcmVjdDIuaGVpZ2h0KSkge1xuICAgICAgICAgICAgLy8gVGhlc2UgMiBuYXRpdmUgZWxlbWVudHMgYXJlIG5vdCByZWZlcnJpbmcgdG8gdGhlIHNhbWUgd2ViIGVsZW1lbnRcbiAgICAgICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgY29uc3QgY29vcmRzID0ge1xuICAgICAgICAgIHg6IE1hdGgucm91bmQocmVjdC54ICsgcmVjdC53aWR0aCAvIDIpLFxuICAgICAgICAgIHk6IE1hdGgucm91bmQocmVjdC55ICsgcmVjdC5oZWlnaHQgLyAyKSxcbiAgICAgICAgfTtcbiAgICAgICAgYXdhaXQgZHJpdmVyLmNsaWNrQ29vcmRzKGNvb3Jkcyk7XG4gICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgfVxuICAgIH1cbiAgfSBjYXRjaCAoZXJyKSB7XG4gICAgLy8gYW55IGZhaWx1cmUgc2hvdWxkIGZhbGwgdGhyb3VnaCBhbmQgdHJpZ2dlciB0aGUgbW9yZSBlbGFib3JhdGVcbiAgICAvLyBtZXRob2Qgb2YgY2xpY2tpbmdcbiAgICBkcml2ZXIubG9nLndhcm4oYEVycm9yIGF0dGVtcHRpbmcgdG8gY2xpY2s6ICR7ZXJyLm1lc3NhZ2V9YCk7XG4gIH1cbiAgcmV0dXJuIGZhbHNlO1xufVxuXG5leHRlbnNpb25zLm5hdGl2ZVdlYlRhcCA9IGFzeW5jIGZ1bmN0aW9uIG5hdGl2ZVdlYlRhcCAoZWwpIHtcbiAgY29uc3QgYXRvbXNFbGVtZW50ID0gdGhpcy5nZXRBdG9tc0VsZW1lbnQoZWwpO1xuXG4gIC8vIGlmIHN0cmljdCBuYXRpdmUgdGFwLCBkbyBub3QgdHJ5IHRvIGRvIGl0IHdpdGggV0RBIGRpcmVjdGx5XG4gIGlmICghKGF3YWl0IHRoaXMuc2V0dGluZ3MuZ2V0U2V0dGluZ3MoKSkubmF0aXZlV2ViVGFwU3RyaWN0ICYmIGF3YWl0IHRhcFdlYkVsZW1lbnROYXRpdmVseSh0aGlzLCBhdG9tc0VsZW1lbnQpKSB7XG4gICAgcmV0dXJuO1xuICB9XG4gIHRoaXMubG9nLndhcm4oJ1VuYWJsZSB0byBkbyBzaW1wbGUgbmF0aXZlIHdlYiB0YXAuIEF0dGVtcHRpbmcgdG8gY29udmVydCBjb29yZGluYXRlcycpO1xuXG4gIC8vIGBnZXRfdG9wX2xlZnRfY29vcmRpbmF0ZXNgIHJldHVybnMgdGhlIHdyb25nIHZhbHVlIHNvbWV0aW1lcyxcbiAgLy8gdW5sZXNzIHdlIHByZS1jYWxsIGJvdGggb2YgdGhlc2UgZnVuY3Rpb25zIGJlZm9yZSB0aGUgYWN0dWFsIGNhbGxzXG4gIGF3YWl0IEIuUHJvbWlzZS5hbGwoW1xuICAgIHRoaXMuZXhlY3V0ZUF0b20oJ2dldF9zaXplJywgW2F0b21zRWxlbWVudF0pLFxuICAgIHRoaXMuZXhlY3V0ZUF0b20oJ2dldF90b3BfbGVmdF9jb29yZGluYXRlcycsIFthdG9tc0VsZW1lbnRdKSxcbiAgXSk7XG5cbiAgY29uc3QgW3NpemUsIGNvb3JkaW5hdGVzXSA9IGF3YWl0IEIuUHJvbWlzZS5hbGwoW1xuICAgIHRoaXMuZXhlY3V0ZUF0b20oJ2dldF9zaXplJywgW2F0b21zRWxlbWVudF0pLFxuICAgIHRoaXMuZXhlY3V0ZUF0b20oJ2dldF90b3BfbGVmdF9jb29yZGluYXRlcycsIFthdG9tc0VsZW1lbnRdKSxcbiAgXSk7XG4gIGNvbnN0IHt3aWR0aCwgaGVpZ2h0fSA9IHNpemU7XG4gIGxldCB7eCwgeX0gPSBjb29yZGluYXRlcztcbiAgeCArPSB3aWR0aCAvIDI7XG4gIHkgKz0gaGVpZ2h0IC8gMjtcblxuICB0aGlzLmN1cldlYkNvb3JkcyA9IHt4LCB5fTtcbiAgYXdhaXQgdGhpcy5jbGlja1dlYkNvb3JkcygpO1xufTtcblxuZXh0ZW5zaW9ucy5jbGlja0Nvb3JkcyA9IGFzeW5jIGZ1bmN0aW9uIGNsaWNrQ29vcmRzIChjb29yZHMpIHtcbiAgYXdhaXQgdGhpcy5wZXJmb3JtVG91Y2goW1xuICAgIHtcbiAgICAgIGFjdGlvbjogJ3RhcCcsXG4gICAgICBvcHRpb25zOiBjb29yZHMsXG4gICAgfSxcbiAgXSk7XG59O1xuXG5leHRlbnNpb25zLnRyYW5zbGF0ZVdlYkNvb3JkcyA9IGFzeW5jIGZ1bmN0aW9uIHRyYW5zbGF0ZVdlYkNvb3JkcyAoY29vcmRzKSB7XG4gIHRoaXMubG9nLmRlYnVnKGBUcmFuc2xhdGluZyBjb29yZGluYXRlcyAoJHtKU09OLnN0cmluZ2lmeShjb29yZHMpfSkgdG8gd2ViIGNvb3JkaW5hdGVzYCk7XG5cbiAgLy8gYWJzb2x1dGl6ZSB3ZWIgY29vcmRzXG4gIGxldCB3ZWJ2aWV3O1xuICB0cnkge1xuICAgIHdlYnZpZXcgPSBhd2FpdCByZXRyeUludGVydmFsKDUsIDEwMCwgYXN5bmMgKCkgPT4gYXdhaXQgdGhpcy5maW5kTmF0aXZlRWxlbWVudE9yRWxlbWVudHMoJ2NsYXNzIG5hbWUnLCAnWENVSUVsZW1lbnRUeXBlV2ViVmlldycsIGZhbHNlKSk7XG4gIH0gY2F0Y2ggKGlnbikge31cblxuICBpZiAoIXdlYnZpZXcpIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoYE5vIFdlYlZpZXcgZm91bmQuIFVuYWJsZSB0byB0cmFuc2xhdGUgd2ViIGNvb3JkaW5hdGVzIGZvciBuYXRpdmUgd2ViIHRhcC5gKTtcbiAgfVxuXG4gIHdlYnZpZXcgPSB1dGlsLnVud3JhcEVsZW1lbnQod2Vidmlldyk7XG5cbiAgY29uc3QgcmVjdCA9IGF3YWl0IHRoaXMucHJveHlDb21tYW5kKGAvZWxlbWVudC8ke3dlYnZpZXd9L3JlY3RgLCAnR0VUJyk7XG4gIGNvbnN0IHd2UG9zID0ge3g6IHJlY3QueCwgeTogcmVjdC55fTtcbiAgY29uc3QgcmVhbERpbXMgPSB7dzogcmVjdC53aWR0aCwgaDogcmVjdC5oZWlnaHR9O1xuXG4gIGNvbnN0IGNtZCA9ICcoZnVuY3Rpb24gKCkgeyByZXR1cm4ge3c6IHdpbmRvdy5pbm5lcldpZHRoLCBoOiB3aW5kb3cuaW5uZXJIZWlnaHR9OyB9KSgpJztcbiAgY29uc3Qgd3ZEaW1zID0gYXdhaXQgdGhpcy5yZW1vdGUuZXhlY3V0ZShjbWQpO1xuXG4gIC8vIGtlZXAgdHJhY2sgb2YgaW1wbGljaXQgd2FpdCwgYW5kIHNldCBsb2NhbGx5IHRvIDBcbiAgLy8gaHR0cHM6Ly9naXRodWIuY29tL2FwcGl1bS9hcHBpdW0vaXNzdWVzLzE0OTg4XG4gIGNvbnN0IGltcGxpY2l0V2FpdE1zID0gdGhpcy5pbXBsaWNpdFdhaXRNcztcbiAgYXdhaXQgdGhpcy5zZXRJbXBsaWNpdFdhaXQoMCk7XG4gIHRyeSB7XG4gICAgYXdhaXQgdGhpcy5nZXRFeHRyYVRyYW5zbGF0ZVdlYkNvb3Jkc09mZnNldCh3dlBvcywgcmVhbERpbXMpO1xuICB9IGZpbmFsbHkge1xuICAgIGF3YWl0IHRoaXMuc2V0SW1wbGljaXRXYWl0KGltcGxpY2l0V2FpdE1zKTtcbiAgfVxuXG4gIGlmICh3dkRpbXMgJiYgcmVhbERpbXMgJiYgd3ZQb3MpIHtcbiAgICBsZXQgeFJhdGlvID0gcmVhbERpbXMudyAvIHd2RGltcy53O1xuICAgIGxldCB5UmF0aW8gPSByZWFsRGltcy5oIC8gd3ZEaW1zLmg7XG4gICAgbGV0IG5ld0Nvb3JkcyA9IHtcbiAgICAgIHg6IHd2UG9zLnggKyBNYXRoLnJvdW5kKHhSYXRpbyAqIGNvb3Jkcy54KSxcbiAgICAgIHk6IHd2UG9zLnkgKyBNYXRoLnJvdW5kKHlSYXRpbyAqIGNvb3Jkcy55KSxcbiAgICB9O1xuXG4gICAgLy8gYWRkaXRpb25hbCBsb2dnaW5nIGZvciBjb29yZGluYXRlcywgc2luY2UgaXQgaXMgc29tZXRpbWVzIGJyb2tlblxuICAgIC8vICAgc2VlIGh0dHBzOi8vZ2l0aHViLmNvbS9hcHBpdW0vYXBwaXVtL2lzc3Vlcy85MTU5XG4gICAgdGhpcy5sb2cuZGVidWcoYENvbnZlcnRlZCBjb29yZGluYXRlczogJHtKU09OLnN0cmluZ2lmeShuZXdDb29yZHMpfWApO1xuICAgIHRoaXMubG9nLmRlYnVnKGAgICAgcmVjdDogJHtKU09OLnN0cmluZ2lmeShyZWN0KX1gKTtcbiAgICB0aGlzLmxvZy5kZWJ1ZyhgICAgIHd2UG9zOiAke0pTT04uc3RyaW5naWZ5KHd2UG9zKX1gKTtcbiAgICB0aGlzLmxvZy5kZWJ1ZyhgICAgIHJlYWxEaW1zOiAke0pTT04uc3RyaW5naWZ5KHJlYWxEaW1zKX1gKTtcbiAgICB0aGlzLmxvZy5kZWJ1ZyhgICAgIHd2RGltczogJHtKU09OLnN0cmluZ2lmeSh3dkRpbXMpfWApO1xuICAgIHRoaXMubG9nLmRlYnVnKGAgICAgeFJhdGlvOiAke0pTT04uc3RyaW5naWZ5KHhSYXRpbyl9YCk7XG4gICAgdGhpcy5sb2cuZGVidWcoYCAgICB5UmF0aW86ICR7SlNPTi5zdHJpbmdpZnkoeVJhdGlvKX1gKTtcblxuICAgIHRoaXMubG9nLmRlYnVnKGBDb252ZXJ0ZWQgd2ViIGNvb3JkcyAke0pTT04uc3RyaW5naWZ5KGNvb3Jkcyl9IGAgK1xuICAgICAgYGludG8gcmVhbCBjb29yZHMgJHtKU09OLnN0cmluZ2lmeShuZXdDb29yZHMpfWApO1xuICAgIHJldHVybiBuZXdDb29yZHM7XG4gIH1cbn07XG5cbmV4dGVuc2lvbnMuY2hlY2tGb3JBbGVydCA9IGFzeW5jIGZ1bmN0aW9uIGNoZWNrRm9yQWxlcnQgKCkge1xuICByZXR1cm4gXy5pc1N0cmluZyhhd2FpdCB0aGlzLmdldEFsZXJ0VGV4dCgpKTtcbn07XG5cbmV4dGVuc2lvbnMud2FpdEZvckF0b20gPSBhc3luYyBmdW5jdGlvbiB3YWl0Rm9yQXRvbSAocHJvbWlzZSkge1xuICBjb25zdCB0aW1lciA9IG5ldyB0aW1pbmcuVGltZXIoKS5zdGFydCgpO1xuXG4gIC8vIG5lZWQgdG8gY2hlY2sgZm9yIGFsZXJ0IHdoaWxlIHRoZSBhdG9tIGlzIGJlaW5nIGV4ZWN1dGVkLlxuICAvLyBzbyBub3RpZnkgb3Vyc2VsdmVzIHdoZW4gaXQgaGFwcGVuc1xuICBjb25zdCB0aW1lZEF0b21Qcm9taXNlID0gQi5yZXNvbHZlKHByb21pc2UpLnRpbWVvdXQoQVRPTV9XQUlUX1RJTUVPVVRfTVMpO1xuICBjb25zdCBoYW5kbGVQcm9taXNlRXJyb3IgPSBhc3luYyAocCkgPT4ge1xuICAgIHRyeSB7XG4gICAgICByZXR1cm4gYXdhaXQgcDtcbiAgICB9IGNhdGNoIChlcnIpIHtcbiAgICAgIGNvbnN0IG9yaWdpbmFsRXJyb3IgPSAoZXJyIGluc3RhbmNlb2YgQi5BZ2dyZWdhdGVFcnJvcikgPyBlcnJbMF0gOiBlcnI7XG4gICAgICB0aGlzLmxvZy5kZWJ1ZyhgRXJyb3IgcmVjZWl2ZWQgd2hpbGUgZXhlY3V0aW5nIGF0b206ICR7b3JpZ2luYWxFcnJvci5tZXNzYWdlfWApO1xuICAgICAgaWYgKG9yaWdpbmFsRXJyb3IgaW5zdGFuY2VvZiBCLlRpbWVvdXRFcnJvcikge1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoYERpZCBub3QgZ2V0IGFueSByZXNwb25zZSBmb3IgYXRvbSBleGVjdXRpb24gYWZ0ZXIgYCArXG4gICAgICAgICAgYCR7dGltZXIuZ2V0RHVyYXRpb24oKS5hc01pbGxpU2Vjb25kcy50b0ZpeGVkKDApfW1zYCk7XG4gICAgICB9XG4gICAgICB0aHJvdyBvcmlnaW5hbEVycm9yO1xuICAgIH1cbiAgfTtcbiAgLy8gaWYgdGhlIGF0b20gcHJvbWlzZSBpcyBmdWxmaWxsZWQgd2l0aGluIEFUT01fSU5JVElBTF9XQUlUX01TXG4gIC8vIHRoZW4gd2UgZG9uJ3QgbmVlZCB0byBjaGVjayBmb3IgYW4gYWxlcnQgcHJlc2VuY2VcbiAgYXdhaXQgaGFuZGxlUHJvbWlzZUVycm9yKEIuYW55KFtCLmRlbGF5KEFUT01fSU5JVElBTF9XQUlUX01TKSwgdGltZWRBdG9tUHJvbWlzZV0pKTtcbiAgaWYgKHRpbWVkQXRvbVByb21pc2UuaXNGdWxmaWxsZWQoKSkge1xuICAgIHJldHVybiBhd2FpdCB0aW1lZEF0b21Qcm9taXNlO1xuICB9XG5cbiAgLy8gLi4ub3RoZXJ3aXNlIG1ha2Ugc3VyZSB0aGVyZSBpcyBubyB1bmV4cGVjdGVkIGFsZXJ0IGNvdmVyaW5nIHRoZSBlbGVtZW50XG4gIGlmICghXy5pc1BsYWluT2JqZWN0KHRoaXMuX3dhaXRpbmdBdG9tcykpIHtcbiAgICB0aGlzLl93YWl0aW5nQXRvbXMgPSB7XG4gICAgICBjb3VudDogMCxcbiAgICAgIGFsZXJ0Tm90aWZpZXI6IG5ldyBFdmVudEVtaXR0ZXIoKSxcbiAgICAgIGFsZXJ0TW9uaXRvcjogQi5yZXNvbHZlKCksXG4gICAgfTtcbiAgfVxuICB0aGlzLl93YWl0aW5nQXRvbXMuY291bnQrKztcblxuICBsZXQgb25BbGVydENhbGxiYWNrO1xuICB0cnkge1xuICAgIC8vIG9ubHkgcmVzdGFydCB0aGUgbW9uaXRvciBpZiBpdCBpcyBub3QgcnVubmluZyBhbHJlYWR5XG4gICAgaWYgKHRoaXMuX3dhaXRpbmdBdG9tcy5hbGVydE1vbml0b3IuaXNSZXNvbHZlZCgpKSB7XG4gICAgICB0aGlzLl93YWl0aW5nQXRvbXMuYWxlcnRNb25pdG9yID0gQi5yZXNvbHZlKChhc3luYyAoKSA9PiB7XG4gICAgICAgIHdoaWxlICh0aGlzLl93YWl0aW5nQXRvbXMuY291bnQgPiAwKSB7XG4gICAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgIGlmIChhd2FpdCB0aGlzLmNoZWNrRm9yQWxlcnQoKSkge1xuICAgICAgICAgICAgICB0aGlzLl93YWl0aW5nQXRvbXMuYWxlcnROb3RpZmllci5lbWl0KE9OX09CU1RSVUNUSU5HX0FMRVJUX0VWRU5UKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9IGNhdGNoIChpZ24pIHt9XG4gICAgICAgICAgYXdhaXQgQi5kZWxheShBVE9NX0lOSVRJQUxfV0FJVF9NUyAvIDIpO1xuICAgICAgICB9XG4gICAgICB9KSgpKTtcbiAgICB9XG5cbiAgICByZXR1cm4gYXdhaXQgbmV3IEIoKHJlc29sdmUsIHJlamVjdCkgPT4ge1xuICAgICAgb25BbGVydENhbGxiYWNrID0gKCkgPT4gcmVqZWN0KG5ldyBlcnJvcnMuVW5leHBlY3RlZEFsZXJ0T3BlbkVycm9yKCkpO1xuICAgICAgdGhpcy5fd2FpdGluZ0F0b21zLmFsZXJ0Tm90aWZpZXIub25jZShPTl9PQlNUUlVDVElOR19BTEVSVF9FVkVOVCwgb25BbGVydENhbGxiYWNrKTtcbiAgICAgIGhhbmRsZVByb21pc2VFcnJvcih0aW1lZEF0b21Qcm9taXNlKVxuICAgICAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgcHJvbWlzZS9wcmVmZXItYXdhaXQtdG8tdGhlblxuICAgICAgICAudGhlbihyZXNvbHZlKVxuICAgICAgICAuY2F0Y2gocmVqZWN0KTtcbiAgICB9KTtcbiAgfSBmaW5hbGx5IHtcbiAgICBpZiAob25BbGVydENhbGxiYWNrKSB7XG4gICAgICB0aGlzLl93YWl0aW5nQXRvbXMuYWxlcnROb3RpZmllci5yZW1vdmVMaXN0ZW5lcihPTl9PQlNUUlVDVElOR19BTEVSVF9FVkVOVCwgb25BbGVydENhbGxiYWNrKTtcbiAgICB9XG4gICAgdGhpcy5fd2FpdGluZ0F0b21zLmNvdW50LS07XG4gIH1cbn07XG5cbmV4dGVuc2lvbnMubW9iaWxlV2ViTmF2ID0gYXN5bmMgZnVuY3Rpb24gbW9iaWxlV2ViTmF2IChuYXZUeXBlKSB7XG4gIHRoaXMucmVtb3RlLmFsbG93TmF2aWdhdGlvbldpdGhvdXRSZWxvYWQgPSB0cnVlO1xuICB0cnkge1xuICAgIGF3YWl0IHRoaXMuZXhlY3V0ZUF0b20oJ2V4ZWN1dGVfc2NyaXB0JywgW2BoaXN0b3J5LiR7bmF2VHlwZX0oKTtgLCBudWxsXSk7XG4gIH0gZmluYWxseSB7XG4gICAgdGhpcy5yZW1vdGUuYWxsb3dOYXZpZ2F0aW9uV2l0aG91dFJlbG9hZCA9IGZhbHNlO1xuICB9XG59O1xuXG5PYmplY3QuYXNzaWduKGNvbW1hbmRzLCBleHRlbnNpb25zLCBoZWxwZXJzKTtcblxuZXhwb3J0IGRlZmF1bHQgY29tbWFuZHM7XG4iXSwibWFwcGluZ3MiOiI7Ozs7Ozs7O0FBQUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFFQSxNQUFNQSxxQkFBcUIsR0FBRyxFQUFFO0FBQ2hDLE1BQU1DLDhCQUE4QixHQUFHLEVBQUU7QUFDekMsTUFBTUMsd0JBQXdCLEdBQUcsRUFBRTtBQUNuQyxNQUFNQyx5QkFBeUIsR0FBRyxFQUFFO0FBQ3BDLE1BQU1DLDRCQUE0QixHQUFHLEVBQUU7QUFFdkMsTUFBTUMsK0JBQStCLEdBQUcsRUFBRTtBQUMxQyxNQUFNQyx3QkFBd0IsR0FBRyxFQUFFO0FBQ25DLE1BQU1DLGNBQWMsR0FBRyxFQUFFO0FBQ3pCLE1BQU1DLHdDQUF3QyxH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
597
+ //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJJUEhPTkVfVE9QX0JBUl9IRUlHSFQiLCJJUEhPTkVfU0NST0xMRURfVE9QX0JBUl9IRUlHSFQiLCJJUEhPTkVfWF9TQ1JPTExFRF9PRkZTRVQiLCJJUEhPTkVfWF9OT1RDSF9PRkZTRVRfSU9TIiwiSVBIT05FX1hfTk9UQ0hfT0ZGU0VUX0lPU18xMyIsIklQSE9ORV9MQU5EU0NBUEVfVE9QX0JBUl9IRUlHSFQiLCJJUEhPTkVfQk9UVE9NX0JBUl9PRkZTRVQiLCJUQUJfQkFSX09GRlNFVCIsIklQSE9ORV9XRUJfQ09PUkRfU01BUlRfQVBQX0JBTk5FUl9PRkZTRVQiLCJJUEFEX1dFQl9DT09SRF9TTUFSVF9BUFBfQkFOTkVSX09GRlNFVCIsIk5PVENIRURfREVWSUNFX1NJWkVTIiwidyIsImgiLCJXM0NfV0VCX0VMRU1FTlRfSURFTlRJRklFUiIsInV0aWwiLCJBVE9NX1dBSVRfVElNRU9VVF9NUyIsIkFUT01fSU5JVElBTF9XQUlUX01TIiwiT05fT0JTVFJVQ1RJTkdfQUxFUlRfRVZFTlQiLCJWSVNJQkxFIiwiSU5WSVNJQkxFIiwiREVURUNUIiwiVklTSUJJTElUSUVTIiwiVEFCX0JBUl9QT1NJVElPTl9UT1AiLCJUQUJfQkFSX1BPU0lUSU9OX0JPVFRPTSIsIlRBQl9CQVJfUE9TU0lUSU9OUyIsImNvbW1hbmRzIiwiaGVscGVycyIsImV4dGVuc2lvbnMiLCJpc1ZhbGlkRWxlbWVudElkZW50aWZpZXIiLCJpZCIsIl8iLCJpc1N0cmluZyIsImlzTnVtYmVyIiwiaXNFbXB0eSIsImlzTmFOIiwic2V0RnJhbWUiLCJmcmFtZSIsImlzV2ViQ29udGV4dCIsImVycm9ycyIsIk5vdEltcGxlbWVudGVkRXJyb3IiLCJpc051bGwiLCJjdXJXZWJGcmFtZXMiLCJsb2ciLCJkZWJ1ZyIsImhhc0VsZW1lbnRJZCIsImF0b21zRWxlbWVudCIsImdldEF0b21zRWxlbWVudCIsInZhbHVlIiwiZXhlY3V0ZUF0b20iLCJXSU5ET1ciLCJ1bnNoaWZ0IiwiYXRvbSIsImlzVW5kZWZpbmVkIiwiTm9TdWNoRnJhbWVFcnJvciIsImdldENzc1Byb3BlcnR5IiwicHJvcGVydHlOYW1lIiwiZWwiLCJzdWJtaXQiLCJyZWZyZXNoIiwiZ2V0VXJsIiwicmVtb3RlIiwiZXhlY3V0ZSIsInRpdGxlIiwiZ2V0Q29va2llcyIsInNjcmlwdCIsImpzQ29va2llcyIsImNvb2tpZXMiLCJuYW1lIiwidG9QYWlycyIsImNvb2tpZVV0aWxzIiwiY3JlYXRlSldQQ29va2llIiwidW5kZWZpbmVkIiwicHVzaCIsImVyciIsImVycm9yIiwiVW5rbm93bkVycm9yIiwic2V0Q29va2llIiwiY29va2llIiwiY2xvbmUiLCJwYXRoIiwianNDb29raWUiLCJjcmVhdGVKU0Nvb2tpZSIsImV4cGlyZXMiLCJleHBpcnkiLCJEYXRlIiwidG9VVENTdHJpbmciLCJkb21haW4iLCJodHRwT25seSIsInNlY3VyZSIsIkpTT04iLCJzdHJpbmdpZnkiLCJkZWxldGVDb29raWUiLCJjb29raWVOYW1lIiwiaW5kZXhPZiIsIm1hcCIsIl9kZWxldGVDb29raWUiLCJkZWxldGVDb29raWVzIiwibGVuZ3RoIiwid2ViQ29va2llIiwiZXhwaXJlQ29va2llIiwiY2FjaGVXZWJFbGVtZW50IiwiaXNQbGFpbk9iamVjdCIsImVsSWQiLCJ1bndyYXBFbGVtZW50IiwiY2FjaGVJZCIsImluY2x1ZGVzIiwidXVpZFY0Iiwid2ViRWxlbWVudHNDYWNoZSIsInNldCIsIndyYXBFbGVtZW50IiwiY2FjaGVXZWJFbGVtZW50cyIsInJlc3BvbnNlIiwidG9DYWNoZWQiLCJ2IiwiaXNBcnJheSIsInJlc3VsdCIsInJlZHVjZSIsImFjYyIsImtleSIsImZpbmRXZWJFbGVtZW50T3JFbGVtZW50cyIsInN0cmF0ZWd5Iiwic2VsZWN0b3IiLCJtYW55IiwiY3R4IiwiY29udGV4dEVsZW1lbnQiLCJpc05pbCIsImVsZW1lbnQiLCJkb0ZpbmQiLCJpbXBsaWNpdFdhaXRGb3JDb25kaXRpb24iLCJtZXNzYWdlIiwiaXNGdW5jdGlvbiIsIm1hdGNoIiwiTm9TdWNoRWxlbWVudEVycm9yIiwiY2xpY2tXZWJDb29yZHMiLCJjb29yZHMiLCJ0cmFuc2xhdGVXZWJDb29yZHMiLCJjdXJXZWJDb29yZHMiLCJjbGlja0Nvb3JkcyIsImFyZ3MiLCJhbHdheXNEZWZhdWx0RnJhbWUiLCJmcmFtZXMiLCJwcm9taXNlIiwid2FpdEZvckF0b20iLCJleGVjdXRlQXRvbUFzeW5jIiwicmVzcG9uc2VVcmwiLCJCIiwicmVzb2x2ZSIsInJlamVjdCIsImFzeW5jUHJvbWlzZSIsImVsT3JJZCIsImhhcyIsIlN0YWxlRWxlbWVudFJlZmVyZW5jZUVycm9yIiwiRUxFTUVOVCIsImdldCIsImNvbnZlcnRFbGVtZW50c0ZvckF0b21zIiwiYXJnIiwiaXNFcnJvclR5cGUiLCJnZXRFbGVtZW50SWQiLCJoYXNWYWx1ZSIsImdldFNhZmFyaUlzSXBob25lIiwiaXNCb29sZWFuIiwiX2lzU2FmYXJpSXBob25lIiwidXNlckFnZW50IiwidG9Mb3dlckNhc2UiLCJ3YXJuIiwiZ2V0U2FmYXJpRGV2aWNlU2l6ZSIsIndpZHRoIiwiaGVpZ2h0Iiwibm9ybUhlaWdodCIsIm5vcm1XaWR0aCIsImdldFNhZmFyaUlzTm90Y2hlZCIsIl9pc1NhZmFyaU5vdGNoZWQiLCJkZXZpY2UiLCJnZXRFeHRyYVRyYW5zbGF0ZVdlYkNvb3Jkc09mZnNldCIsInd2UG9zIiwicmVhbERpbXMiLCJ0b3BPZmZzZXQiLCJib3R0b21PZmZzZXQiLCJpc0lwaG9uZSIsIm5hdGl2ZVdlYlRhcFRhYkJhclZpc2liaWxpdHkiLCJuYXRpdmVXZWJUYXBTbWFydEFwcEJhbm5lclZpc2liaWxpdHkiLCJzYWZhcmlUYWJCYXJQb3NpdGlvbiIsImNvbXBhcmVWZXJzaW9ucyIsIm9wdHMiLCJwbGF0Zm9ybVZlcnNpb24iLCJzZXR0aW5ncyIsImdldFNldHRpbmdzIiwidGFiQmFyVmlzaWJpbGl0eSIsImxvd2VyQ2FzZSIsImJhbm5lclZpc2liaWxpdHkiLCJ0YWJCYXJQb3NpdGlvbiIsIkludmFsaWRBcmd1bWVudEVycm9yIiwiaXNOb3RjaGVkIiwib3JpZW50YXRpb24iLCJub3RjaE9mZnNldCIsImlzU2Nyb2xsZWQiLCJjb250ZXh0c0FuZFZpZXdzIiwiZ2V0Q29udGV4dHNBbmRWaWV3cyIsInRhYnMiLCJmaWx0ZXIiLCJzdGFydHNXaXRoIiwiZ2V0RXh0cmFOYXRpdmVXZWJUYXBPZmZzZXQiLCJ5Iiwib2Zmc2V0IiwiYmFubmVycyIsImZpbmROYXRpdmVFbGVtZW50T3JFbGVtZW50cyIsInRhcFdlYkVsZW1lbnROYXRpdmVseSIsImRyaXZlciIsInRleHQiLCJlbHMiLCJyZWN0IiwicHJveHlDb21tYW5kIiwiZWwyIiwicmVjdDIiLCJ4IiwiTWF0aCIsInJvdW5kIiwibmF0aXZlV2ViVGFwIiwibmF0aXZlV2ViVGFwU3RyaWN0IiwiUHJvbWlzZSIsImFsbCIsInNpemUiLCJjb29yZGluYXRlcyIsInBlcmZvcm1Ub3VjaCIsImFjdGlvbiIsIm9wdGlvbnMiLCJ3ZWJ2aWV3IiwicmV0cnlJbnRlcnZhbCIsImlnbiIsIkVycm9yIiwiY21kIiwid3ZEaW1zIiwiaW1wbGljaXRXYWl0TXMiLCJzZXRJbXBsaWNpdFdhaXQiLCJ4UmF0aW8iLCJ5UmF0aW8iLCJuZXdDb29yZHMiLCJjaGVja0ZvckFsZXJ0IiwiZ2V0QWxlcnRUZXh0IiwidGltZXIiLCJ0aW1pbmciLCJUaW1lciIsInN0YXJ0IiwidGltZWRBdG9tUHJvbWlzZSIsInRpbWVvdXQiLCJoYW5kbGVQcm9taXNlRXJyb3IiLCJwIiwib3JpZ2luYWxFcnJvciIsIkFnZ3JlZ2F0ZUVycm9yIiwiVGltZW91dEVycm9yIiwiZ2V0RHVyYXRpb24iLCJhc01pbGxpU2Vjb25kcyIsInRvRml4ZWQiLCJhbnkiLCJkZWxheSIsImlzRnVsZmlsbGVkIiwiX3dhaXRpbmdBdG9tcyIsImNvdW50IiwiYWxlcnROb3RpZmllciIsIkV2ZW50RW1pdHRlciIsImFsZXJ0TW9uaXRvciIsIm9uQWxlcnRDYWxsYmFjayIsImlzUmVzb2x2ZWQiLCJlbWl0IiwiVW5leHBlY3RlZEFsZXJ0T3BlbkVycm9yIiwib25jZSIsInRoZW4iLCJjYXRjaCIsInJlbW92ZUxpc3RlbmVyIiwibW9iaWxlV2ViTmF2IiwibmF2VHlwZSIsImFsbG93TmF2aWdhdGlvbldpdGhvdXRSZWxvYWQiLCJtb2JpbGVVcGRhdGVTYWZhcmlQcmVmZXJlbmNlcyIsImlzU2ltdWxhdG9yIiwicHJlZmVyZW5jZXMiLCJ1cGRhdGVTYWZhcmlTZXR0aW5ncyIsIk9iamVjdCIsImFzc2lnbiJdLCJzb3VyY2VzIjpbIi4uLy4uLy4uL2xpYi9jb21tYW5kcy93ZWIuanMiXSwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgcmV0cnlJbnRlcnZhbCB9IGZyb20gJ2FzeW5jYm94JztcbmltcG9ydCB7IHV0aWwsIHRpbWluZyB9IGZyb20gJ2FwcGl1bS9zdXBwb3J0JztcbmltcG9ydCBfIGZyb20gJ2xvZGFzaCc7XG5pbXBvcnQgQiBmcm9tICdibHVlYmlyZCc7XG5pbXBvcnQgeyBlcnJvcnMsIGlzRXJyb3JUeXBlIH0gZnJvbSAnYXBwaXVtL2RyaXZlcic7XG5pbXBvcnQgY29va2llVXRpbHMgZnJvbSAnLi4vY29va2llcyc7XG5pbXBvcnQgeyBFdmVudEVtaXR0ZXIgfSBmcm9tICdldmVudHMnO1xuXG5jb25zdCBJUEhPTkVfVE9QX0JBUl9IRUlHSFQgPSA3MTtcbmNvbnN0IElQSE9ORV9TQ1JPTExFRF9UT1BfQkFSX0hFSUdIVCA9IDQxO1xuY29uc3QgSVBIT05FX1hfU0NST0xMRURfT0ZGU0VUID0gNTU7XG5jb25zdCBJUEhPTkVfWF9OT1RDSF9PRkZTRVRfSU9TID0gMjQ7XG5jb25zdCBJUEhPTkVfWF9OT1RDSF9PRkZTRVRfSU9TXzEzID0gMjA7XG5cbmNvbnN0IElQSE9ORV9MQU5EU0NBUEVfVE9QX0JBUl9IRUlHSFQgPSA1MTtcbmNvbnN0IElQSE9ORV9CT1RUT01fQkFSX09GRlNFVCA9IDQ5O1xuY29uc3QgVEFCX0JBUl9PRkZTRVQgPSAzMztcbmNvbnN0IElQSE9ORV9XRUJfQ09PUkRfU01BUlRfQVBQX0JBTk5FUl9PRkZTRVQgPSA4NDtcbmNvbnN0IElQQURfV0VCX0NPT1JEX1NNQVJUX0FQUF9CQU5ORVJfT0ZGU0VUID0gOTU7XG5cbmNvbnN0IE5PVENIRURfREVWSUNFX1NJWkVTID0gW1xuICB7dzogMTEyNSwgaDogMjQzNn0sIC8vIDExIFBybywgWCwgWHNcbiAge3c6IDgyOCwgaDogMTc5Mn0sIC8vIDExLCBYclxuICB7dzogMTI0MiwgaDogMjY4OH0sIC8vIDExIFBybyBNYXgsIFhzIE1heFxuXTtcblxuY29uc3QgeyBXM0NfV0VCX0VMRU1FTlRfSURFTlRJRklFUiB9ID0gdXRpbDtcblxuY29uc3QgQVRPTV9XQUlUX1RJTUVPVVRfTVMgPSAyICogNjAwMDA7XG5jb25zdCBBVE9NX0lOSVRJQUxfV0FJVF9NUyA9IDEwMDA7XG5cbmNvbnN0IE9OX09CU1RSVUNUSU5HX0FMRVJUX0VWRU5UID0gJ2FsZXJ0JztcblxuY29uc3QgVklTSUJMRSA9ICd2aXNpYmxlJztcbmNvbnN0IElOVklTSUJMRSA9ICdpbnZpc2libGUnO1xuY29uc3QgREVURUNUID0gJ2RldGVjdCc7XG5jb25zdCBWSVNJQklMSVRJRVMgPSBbVklTSUJMRSwgSU5WSVNJQkxFLCBERVRFQ1RdO1xuXG4vLyBUaGUgcG9zaXRpb24gb2YgU2FmYXJpJ3MgdGFiIChzZWFyY2ggYmFyKS5cbi8vIFNpbmNlIGlPUyAxNSwgdGhlIGJhciBpcyB0aGUgYm90dG9tIGJ5IGRlZmF1bHQuXG5jb25zdCBUQUJfQkFSX1BPU0lUSU9OX1RPUCA9ICd0b3AnO1xuY29uc3QgVEFCX0JBUl9QT1NJVElPTl9CT1RUT00gPSAnYm90dG9tJztcbmNvbnN0IFRBQl9CQVJfUE9TU0lUSU9OUyA9IFtUQUJfQkFSX1BPU0lUSU9OX1RPUCwgVEFCX0JBUl9QT1NJVElPTl9CT1RUT01dO1xuXG5jb25zdCBjb21tYW5kcyA9IHt9LCBoZWxwZXJzID0ge30sIGV4dGVuc2lvbnMgPSB7fTtcblxuZnVuY3Rpb24gaXNWYWxpZEVsZW1lbnRJZGVudGlmaWVyIChpZCkge1xuICBpZiAoIV8uaXNTdHJpbmcoaWQpICYmICFfLmlzTnVtYmVyKGlkKSkge1xuICAgIHJldHVybiBmYWxzZTtcbiAgfVxuICBpZiAoXy5pc1N0cmluZyhpZCkgJiYgXy5pc0VtcHR5KGlkKSkge1xuICAgIHJldHVybiBmYWxzZTtcbiAgfVxuICBpZiAoXy5pc051bWJlcihpZCkgJiYgaXNOYU4oaWQpKSB7XG4gICAgcmV0dXJuIGZhbHNlO1xuICB9XG4gIHJldHVybiB0cnVlO1xufVxuXG5jb21tYW5kcy5zZXRGcmFtZSA9IGFzeW5jIGZ1bmN0aW9uIHNldEZyYW1lIChmcmFtZSkge1xuICBpZiAoIXRoaXMuaXNXZWJDb250ZXh0KCkpIHtcbiAgICB0aHJvdyBuZXcgZXJyb3JzLk5vdEltcGxlbWVudGVkRXJyb3IoKTtcbiAgfVxuXG4gIGlmIChfLmlzTnVsbChmcmFtZSkpIHtcbiAgICB0aGlzLmN1cldlYkZyYW1lcyA9IFtdO1xuICAgIHRoaXMubG9nLmRlYnVnKCdMZWF2aW5nIHdlYiBmcmFtZSBhbmQgZ29pbmcgYmFjayB0byBkZWZhdWx0IGNvbnRlbnQnKTtcbiAgICByZXR1cm47XG4gIH1cblxuICBpZiAoaGVscGVycy5oYXNFbGVtZW50SWQoZnJhbWUpKSB7XG4gICAgY29uc3QgYXRvbXNFbGVtZW50ID0gdGhpcy5nZXRBdG9tc0VsZW1lbnQoZnJhbWUpO1xuICAgIGNvbnN0IHZhbHVlID0gYXdhaXQgdGhpcy5leGVjdXRlQXRvbSgnZ2V0X2ZyYW1lX3dpbmRvdycsIFthdG9tc0VsZW1lbnRdKTtcbiAgICB0aGlzLmxvZy5kZWJ1ZyhgRW50ZXJpbmcgbmV3IHdlYiBmcmFtZTogJyR7dmFsdWUuV0lORE9XfSdgKTtcbiAgICB0aGlzLmN1cldlYkZyYW1lcy51bnNoaWZ0KHZhbHVlLldJTkRPVyk7XG4gIH0gZWxzZSB7XG4gICAgY29uc3QgYXRvbSA9IF8uaXNOdW1iZXIoZnJhbWUpID8gJ2ZyYW1lX2J5X2luZGV4JyA6ICdmcmFtZV9ieV9pZF9vcl9uYW1lJztcbiAgICBjb25zdCB2YWx1ZSA9IGF3YWl0IHRoaXMuZXhlY3V0ZUF0b20oYXRvbSwgW2ZyYW1lXSk7XG4gICAgaWYgKF8uaXNOdWxsKHZhbHVlKSB8fCBfLmlzVW5kZWZpbmVkKHZhbHVlLldJTkRPVykpIHtcbiAgICAgIHRocm93IG5ldyBlcnJvcnMuTm9TdWNoRnJhbWVFcnJvcigpO1xuICAgIH1cbiAgICB0aGlzLmxvZy5kZWJ1ZyhgRW50ZXJpbmcgbmV3IHdlYiBmcmFtZTogJyR7dmFsdWUuV0lORE9XfSdgKTtcbiAgICB0aGlzLmN1cldlYkZyYW1lcy51bnNoaWZ0KHZhbHVlLldJTkRPVyk7XG4gIH1cbn07XG5cbmNvbW1hbmRzLmdldENzc1Byb3BlcnR5ID0gYXN5bmMgZnVuY3Rpb24gZ2V0Q3NzUHJvcGVydHkgKHByb3BlcnR5TmFtZSwgZWwpIHtcbiAgaWYgKCF0aGlzLmlzV2ViQ29udGV4dCgpKSB7XG4gICAgdGhyb3cgbmV3IGVycm9ycy5Ob3RJbXBsZW1lbnRlZEVycm9yKCk7XG4gIH1cblxuICBjb25zdCBhdG9tc0VsZW1lbnQgPSB0aGlzLmdldEF0b21zRWxlbWVudChlbCk7XG4gIHJldHVybiBhd2FpdCB0aGlzLmV4ZWN1dGVBdG9tKCdnZXRfdmFsdWVfb2ZfY3NzX3Byb3BlcnR5JywgW2F0b21zRWxlbWVudCwgcHJvcGVydHlOYW1lXSk7XG59O1xuXG5jb21tYW5kcy5zdWJtaXQgPSBhc3luYyBmdW5jdGlvbiBzdWJtaXQgKGVsKSB7XG4gIGlmICghdGhpcy5pc1dlYkNvbnRleHQoKSkge1xuICAgIHRocm93IG5ldyBlcnJvcnMuTm90SW1wbGVtZW50ZWRFcnJvcigpO1xuICB9XG5cbiAgY29uc3QgYXRvbXNFbGVtZW50ID0gdGhpcy5nZXRBdG9tc0VsZW1lbnQoZWwpO1xuICBhd2FpdCB0aGlzLmV4ZWN1dGVBdG9tKCdzdWJtaXQnLCBbYXRvbXNFbGVtZW50XSk7XG59O1xuXG5jb21tYW5kcy5yZWZyZXNoID0gYXN5bmMgZnVuY3Rpb24gcmVmcmVzaCAoKSB7XG4gIGlmICghdGhpcy5pc1dlYkNvbnRleHQoKSkge1xuICAgIHRocm93IG5ldyBlcnJvcnMuTm90SW1wbGVtZW50ZWRFcnJvcigpO1xuICB9XG5cbiAgYXdhaXQgdGhpcy5leGVjdXRlQXRvbSgncmVmcmVzaCcsIFtdKTtcbn07XG5cbmNvbW1hbmRzLmdldFVybCA9IGFzeW5jIGZ1bmN0aW9uIGdldFVybCAoKSB7XG4gIGlmICghdGhpcy5pc1dlYkNvbnRleHQoKSkge1xuICAgIHRocm93IG5ldyBlcnJvcnMuTm90SW1wbGVtZW50ZWRFcnJvcigpO1xuICB9XG5cbiAgcmV0dXJuIGF3YWl0IHRoaXMucmVtb3RlLmV4ZWN1dGUoJ3dpbmRvdy5sb2NhdGlvbi5ocmVmJyk7XG59O1xuXG5jb21tYW5kcy50aXRsZSA9IGFzeW5jIGZ1bmN0aW9uIHRpdGxlICgpIHtcbiAgaWYgKCF0aGlzLmlzV2ViQ29udGV4dCgpKSB7XG4gICAgdGhyb3cgbmV3IGVycm9ycy5Ob3RJbXBsZW1lbnRlZEVycm9yKCk7XG4gIH1cblxuICByZXR1cm4gYXdhaXQgdGhpcy5leGVjdXRlQXRvbSgndGl0bGUnLCBbXSwgdHJ1ZSk7XG59O1xuXG5jb21tYW5kcy5nZXRDb29raWVzID0gYXN5bmMgZnVuY3Rpb24gZ2V0Q29va2llcyAoKSB7XG4gIGlmICghdGhpcy5pc1dlYkNvbnRleHQoKSkge1xuICAgIHRocm93IG5ldyBlcnJvcnMuTm90SW1wbGVtZW50ZWRFcnJvcigpO1xuICB9XG5cbiAgdGhpcy5sb2cuZGVidWcoJ1JldHJpZXZpbmcgYWxsIGNvb2tpZXMnKTtcblxuICBsZXQgc2NyaXB0ID0gJ3JldHVybiBkb2N1bWVudC5jb29raWUnO1xuICBsZXQganNDb29raWVzID0gYXdhaXQgdGhpcy5leGVjdXRlQXRvbSgnZXhlY3V0ZV9zY3JpcHQnLCBbc2NyaXB0LCBbXV0pO1xuXG4gIGxldCBjb29raWVzID0gW107XG4gIHRyeSB7XG4gICAgZm9yIChsZXQgW25hbWUsIHZhbHVlXSBvZiBfLnRvUGFpcnMoY29va2llVXRpbHMuY3JlYXRlSldQQ29va2llKHVuZGVmaW5lZCwganNDb29raWVzKSkpIHtcbiAgICAgIGNvb2tpZXMucHVzaCh7bmFtZSwgdmFsdWV9KTtcbiAgICB9XG4gICAgcmV0dXJuIGNvb2tpZXM7XG4gIH0gY2F0Y2ggKGVycikge1xuICAgIHRoaXMubG9nLmVycm9yKGVycik7XG4gICAgdGhyb3cgbmV3IGVycm9ycy5Vbmtub3duRXJyb3IoYEVycm9yIHBhcnNpbmcgY29va2llcyBmcm9tIHJlc3VsdDogJyR7anNDb29raWVzfSdgKTtcbiAgfVxufTtcblxuY29tbWFuZHMuc2V0Q29va2llID0gYXN5bmMgZnVuY3Rpb24gc2V0Q29va2llIChjb29raWUpIHtcbiAgaWYgKCF0aGlzLmlzV2ViQ29udGV4dCgpKSB7XG4gICAgdGhyb3cgbmV3IGVycm9ycy5Ob3RJbXBsZW1lbnRlZEVycm9yKCk7XG4gIH1cblxuICBjb29raWUgPSBfLmNsb25lKGNvb2tpZSk7XG5cbiAgLy8gaWYgYHBhdGhgIGZpZWxkIGlzIG5vdCBzcGVjaWZpZWQsIFNhZmFyaSB3aWxsIG5vdCB1cGRhdGUgY29va2llcyBhcyBleHBlY3RlZDsgZWcgaXNzdWUgIzE3MDhcbiAgaWYgKCFjb29raWUucGF0aCkge1xuICAgIGNvb2tpZS5wYXRoID0gJy8nO1xuICB9XG5cbiAgY29uc3QganNDb29raWUgPSBjb29raWVVdGlscy5jcmVhdGVKU0Nvb2tpZShjb29raWUubmFtZSwgY29va2llLnZhbHVlLCB7XG4gICAgZXhwaXJlczogXy5pc051bWJlcihjb29raWUuZXhwaXJ5KSA/IChuZXcgRGF0ZShjb29raWUuZXhwaXJ5ICogMTAwMCkpLnRvVVRDU3RyaW5nKCkgOlxuICAgICAgY29va2llLmV4cGlyeSxcbiAgICBwYXRoOiBjb29raWUucGF0aCxcbiAgICBkb21haW46IGNvb2tpZS5kb21haW4sXG4gICAgaHR0cE9ubHk6IGNvb2tpZS5odHRwT25seSxcbiAgICBzZWN1cmU6IGNvb2tpZS5zZWN1cmVcbiAgfSk7XG4gIGxldCBzY3JpcHQgPSBgZG9jdW1lbnQuY29va2llID0gJHtKU09OLnN0cmluZ2lmeShqc0Nvb2tpZSl9YDtcbiAgYXdhaXQgdGhpcy5leGVjdXRlQXRvbSgnZXhlY3V0ZV9zY3JpcHQnLCBbc2NyaXB0LCBbXV0pO1xufTtcblxuY29tbWFuZHMuZGVsZXRlQ29va2llID0gYXN5bmMgZnVuY3Rpb24gZGVsZXRlQ29va2llIChjb29raWVOYW1lKSB7XG4gIGlmICghdGhpcy5pc1dlYkNvbnRleHQoKSkge1xuICAgIHRocm93IG5ldyBlcnJvcnMuTm90SW1wbGVtZW50ZWRFcnJvcigpO1xuICB9XG5cbiAgLy8gY2hlY2sgY29va2llIGV4aXN0ZW5jZVxuICBsZXQgY29va2llcyA9IGF3YWl0IHRoaXMuZ2V0Q29va2llcygpO1xuICBpZiAoXy5pbmRleE9mKF8ubWFwKGNvb2tpZXMsICduYW1lJyksIGNvb2tpZU5hbWUpID09PSAtMSkge1xuICAgIHRoaXMubG9nLmRlYnVnKGBDb29raWUgJyR7Y29va2llTmFtZX0nIG5vdCBmb3VuZC4gSWdub3JpbmcuYCk7XG4gICAgcmV0dXJuIHRydWU7XG4gIH1cblxuICByZXR1cm4gYXdhaXQgdGhpcy5fZGVsZXRlQ29va2llKGNvb2tpZU5hbWUpO1xufTtcblxuY29tbWFuZHMuZGVsZXRlQ29va2llcyA9IGFzeW5jIGZ1bmN0aW9uIGRlbGV0ZUNvb2tpZXMgKCkge1xuICBpZiAoIXRoaXMuaXNXZWJDb250ZXh0KCkpIHtcbiAgICB0aHJvdyBuZXcgZXJyb3JzLk5vdEltcGxlbWVudGVkRXJyb3IoKTtcbiAgfVxuXG4gIGxldCBjb29raWVzID0gYXdhaXQgdGhpcy5nZXRDb29raWVzKCk7XG4gIGlmIChjb29raWVzLmxlbmd0aCkge1xuICAgIGZvciAobGV0IGNvb2tpZSBvZiBjb29raWVzKSB7XG4gICAgICBhd2FpdCB0aGlzLl9kZWxldGVDb29raWUoY29va2llLm5hbWUpO1xuICAgIH1cbiAgfVxuICByZXR1cm4gdHJ1ZTtcbn07XG5cbmhlbHBlcnMuX2RlbGV0ZUNvb2tpZSA9IGFzeW5jIGZ1bmN0aW9uIF9kZWxldGVDb29raWUgKGNvb2tpZU5hbWUpIHtcbiAgdGhpcy5sb2cuZGVidWcoYERlbGV0aW5nIGNvb2tpZSAnJHtjb29raWVOYW1lfSdgKTtcbiAgbGV0IHdlYkNvb2tpZSA9IGNvb2tpZVV0aWxzLmV4cGlyZUNvb2tpZShjb29raWVOYW1lLCB7cGF0aDogJy8nfSk7XG4gIGxldCBzY3JpcHQgPSBgZG9jdW1lbnQuY29va2llID0gJHtKU09OLnN0cmluZ2lmeSh3ZWJDb29raWUpfWA7XG4gIGF3YWl0IHRoaXMuZXhlY3V0ZUF0b20oJ2V4ZWN1dGVfc2NyaXB0JywgW3NjcmlwdCwgW11dKTtcbn07XG5cbmhlbHBlcnMuY2FjaGVXZWJFbGVtZW50ID0gZnVuY3Rpb24gY2FjaGVXZWJFbGVtZW50IChlbCkge1xuICBpZiAoIV8uaXNQbGFpbk9iamVjdChlbCkpIHtcbiAgICByZXR1cm4gZWw7XG4gIH1cbiAgY29uc3QgZWxJZCA9IHV0aWwudW53cmFwRWxlbWVudChlbCk7XG4gIGlmICghaXNWYWxpZEVsZW1lbnRJZGVudGlmaWVyKGVsSWQpKSB7XG4gICAgcmV0dXJuIGVsO1xuICB9XG4gIC8vIEluIG5ld2VyIGRlYnVnZ2VyIHJlbGVhc2VzIGVsZW1lbnQgaWRlbnRpZmllcnMgbG9vayBsaWtlIGA6d2RjOjE2MjgxNTE2NDkzMjVgXG4gIC8vIFdlIGFzc3VtZSBpdCBpcyBzYWZlIHRvIHVzZSB0aGVzZSB0byBpZGVudGlmeSBjYWNoZWQgZWxlbWVudHNcbiAgY29uc3QgY2FjaGVJZCA9IF8uaW5jbHVkZXMoZWxJZCwgJzonKSA/IGVsSWQgOiB1dGlsLnV1aWRWNCgpO1xuICB0aGlzLndlYkVsZW1lbnRzQ2FjaGUuc2V0KGNhY2hlSWQsIGVsSWQpO1xuICByZXR1cm4gdXRpbC53cmFwRWxlbWVudChjYWNoZUlkKTtcbn07XG5cbmhlbHBlcnMuY2FjaGVXZWJFbGVtZW50cyA9IGZ1bmN0aW9uIGNhY2hlV2ViRWxlbWVudHMgKHJlc3BvbnNlKSB7XG4gIGNvbnN0IHRvQ2FjaGVkID0gKHYpID0+IF8uaXNBcnJheSh2KSB8fCBfLmlzUGxhaW5PYmplY3QodilcbiAgICA/IHRoaXMuY2FjaGVXZWJFbGVtZW50cyh2KVxuICAgIDogdjtcblxuICBpZiAoXy5pc0FycmF5KHJlc3BvbnNlKSkge1xuICAgIHJldHVybiByZXNwb25zZS5tYXAodG9DYWNoZWQpO1xuICB9IGVsc2UgaWYgKF8uaXNQbGFpbk9iamVjdChyZXNwb25zZSkpIHtcbiAgICBjb25zdCByZXN1bHQgPSB7Li4ucmVzcG9uc2UsIC4uLih0aGlzLmNhY2hlV2ViRWxlbWVudChyZXNwb25zZSkpfTtcbiAgICByZXR1cm4gXy50b1BhaXJzKHJlc3VsdCkucmVkdWNlKFxuICAgICAgKGFjYywgW2tleSwgdmFsdWVdKSA9PiB7XG4gICAgICAgIGFjY1trZXldID0gdG9DYWNoZWQodmFsdWUpO1xuICAgICAgICByZXR1cm4gYWNjO1xuICAgICAgfSwge31cbiAgICApO1xuICB9XG4gIHJldHVybiByZXNwb25zZTtcbn07XG5cbmV4dGVuc2lvbnMuZmluZFdlYkVsZW1lbnRPckVsZW1lbnRzID0gYXN5bmMgZnVuY3Rpb24gZmluZFdlYkVsZW1lbnRPckVsZW1lbnRzIChzdHJhdGVneSwgc2VsZWN0b3IsIG1hbnksIGN0eCkge1xuICBjb25zdCBjb250ZXh0RWxlbWVudCA9IF8uaXNOaWwoY3R4KSA/IG51bGwgOiB0aGlzLmdldEF0b21zRWxlbWVudChjdHgpO1xuICBsZXQgZWxlbWVudDtcbiAgbGV0IGRvRmluZCA9IGFzeW5jICgpID0+IHtcbiAgICBlbGVtZW50ID0gYXdhaXQgdGhpcy5leGVjdXRlQXRvbShgZmluZF9lbGVtZW50JHttYW55ID8gJ3MnIDogJyd9YCwgW3N0cmF0ZWd5LCBzZWxlY3RvciwgY29udGV4dEVsZW1lbnRdKTtcbiAgICByZXR1cm4gIV8uaXNOdWxsKGVsZW1lbnQpO1xuICB9O1xuICB0cnkge1xuICAgIGF3YWl0IHRoaXMuaW1wbGljaXRXYWl0Rm9yQ29uZGl0aW9uKGRvRmluZCk7XG4gIH0gY2F0Y2ggKGVycikge1xuICAgIGlmIChlcnIubWVzc2FnZSAmJiBfLmlzRnVuY3Rpb24oZXJyLm1lc3NhZ2UubWF0Y2gpICYmIGVyci5tZXNzYWdlLm1hdGNoKC9Db25kaXRpb24gdW5tZXQvKSkge1xuICAgICAgLy8gY29uZGl0aW9uIHdhcyBub3QgbWV0IHNldHRpbmcgcmVzIHRvIGVtcHR5IGFycmF5XG4gICAgICBlbGVtZW50ID0gW107XG4gICAgfSBlbHNlIHtcbiAgICAgIHRocm93IGVycjtcbiAgICB9XG4gIH1cblxuICBpZiAobWFueSkge1xuICAgIHJldHVybiB0aGlzLmNhY2hlV2ViRWxlbWVudHMoZWxlbWVudCk7XG4gIH1cbiAgaWYgKF8uaXNFbXB0eShlbGVtZW50KSkge1xuICAgIHRocm93IG5ldyBlcnJvcnMuTm9TdWNoRWxlbWVudEVycm9yKCk7XG4gIH1cbiAgcmV0dXJuIHRoaXMuY2FjaGVXZWJFbGVtZW50cyhlbGVtZW50KTtcbn07XG5cbmV4dGVuc2lvbnMuY2xpY2tXZWJDb29yZHMgPSBhc3luYyBmdW5jdGlvbiBjbGlja1dlYkNvb3JkcyAoKSB7XG4gIGxldCBjb29yZHMgPSBhd2FpdCB0aGlzLnRyYW5zbGF0ZVdlYkNvb3Jkcyh0aGlzLmN1cldlYkNvb3Jkcyk7XG4gIGF3YWl0IHRoaXMuY2xpY2tDb29yZHMoY29vcmRzKTtcbn07XG5cbmhlbHBlcnMuZXhlY3V0ZUF0b20gPSBhc3luYyBmdW5jdGlvbiBleGVjdXRlQXRvbSAoYXRvbSwgYXJncywgYWx3YXlzRGVmYXVsdEZyYW1lID0gZmFsc2UpIHtcbiAgbGV0IGZyYW1lcyA9IGFsd2F5c0RlZmF1bHRGcmFtZSA9PT0gdHJ1ZSA/IFtdIDogdGhpcy5jdXJXZWJGcmFtZXM7XG4gIGxldCBwcm9taXNlID0gdGhpcy5yZW1vdGUuZXhlY3V0ZUF0b20oYXRvbSwgYXJncywgZnJhbWVzKTtcbiAgcmV0dXJuIGF3YWl0IHRoaXMud2FpdEZvckF0b20ocHJvbWlzZSk7XG59O1xuXG5oZWxwZXJzLmV4ZWN1dGVBdG9tQXN5bmMgPSBhc3luYyBmdW5jdGlvbiBleGVjdXRlQXRvbUFzeW5jIChhdG9tLCBhcmdzLCByZXNwb25zZVVybCkge1xuICAvLyBzYXZlIHRoZSByZXNvbHZlIGFuZCByZWplY3QgbWV0aG9kcyBvZiB0aGUgcHJvbWlzZSB0byBiZSB3YWl0ZWQgZm9yXG4gIGxldCBwcm9taXNlID0gbmV3IEIoKHJlc29sdmUsIHJlamVjdCkgPT4ge1xuICAgIHRoaXMuYXN5bmNQcm9taXNlID0ge3Jlc29sdmUsIHJlamVjdH07XG4gIH0pO1xuICBhd2FpdCB0aGlzLnJlbW90ZS5leGVjdXRlQXRvbUFzeW5jKGF0b20sIGFyZ3MsIHRoaXMuY3VyV2ViRnJhbWVzLCByZXNwb25zZVVybCk7XG4gIHJldHVybiBhd2FpdCB0aGlzLndhaXRGb3JBdG9tKHByb21pc2UpO1xufTtcblxuaGVscGVycy5nZXRBdG9tc0VsZW1lbnQgPSBmdW5jdGlvbiBnZXRBdG9tc0VsZW1lbnQgKGVsT3JJZCkge1xuICBjb25zdCBlbElkID0gdXRpbC51bndyYXBFbGVtZW50KGVsT3JJZCk7XG4gIGlmICghdGhpcy53ZWJFbGVtZW50c0NhY2hlLmhhcyhlbElkKSkge1xuICAgIHRocm93IG5ldyBlcnJvcnMuU3RhbGVFbGVtZW50UmVmZXJlbmNlRXJyb3IoKTtcbiAgfVxuICByZXR1cm4ge0VMRU1FTlQ6IHRoaXMud2ViRWxlbWVudHNDYWNoZS5nZXQoZWxJZCl9O1xufTtcblxuaGVscGVycy5jb252ZXJ0RWxlbWVudHNGb3JBdG9tcyA9IGZ1bmN0aW9uIGNvbnZlcnRFbGVtZW50c0ZvckF0b21zIChhcmdzID0gW10pIHtcbiAgcmV0dXJuIGFyZ3MubWFwKChhcmcpID0+IHtcbiAgICBpZiAoaGVscGVycy5oYXNFbGVtZW50SWQoYXJnKSkge1xuICAgICAgdHJ5IHtcbiAgICAgICAgcmV0dXJuIHRoaXMuZ2V0QXRvbXNFbGVtZW50KGFyZyk7XG4gICAgICB9IGNhdGNoIChlcnIpIHtcbiAgICAgICAgaWYgKCFpc0Vycm9yVHlwZShlcnIsIGVycm9ycy5TdGFsZUVsZW1lbnRSZWZlcmVuY2VFcnJvcikpIHtcbiAgICAgICAgICB0aHJvdyBlcnI7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICAgIHJldHVybiBhcmc7XG4gICAgfVxuICAgIHJldHVybiBfLmlzQXJyYXkoYXJnKSA/IHRoaXMuY29udmVydEVsZW1lbnRzRm9yQXRvbXMoYXJnKSA6IGFyZztcbiAgfSk7XG59O1xuXG5oZWxwZXJzLmdldEVsZW1lbnRJZCA9IGZ1bmN0aW9uIGdldEVsZW1lbnRJZCAoZWxlbWVudCkge1xuICByZXR1cm4gZWxlbWVudC5FTEVNRU5UIHx8IGVsZW1lbnRbVzNDX1dFQl9FTEVNRU5UX0lERU5USUZJRVJdO1xufTtcblxuaGVscGVycy5oYXNFbGVtZW50SWQgPSBmdW5jdGlvbiBoYXNFbGVtZW50SWQgKGVsZW1lbnQpIHtcbiAgcmV0dXJuIHV0aWwuaGFzVmFsdWUoZWxlbWVudCkgJiYgKHV0aWwuaGFzVmFsdWUoZWxlbWVudC5FTEVNRU5UKSB8fCB1dGlsLmhhc1ZhbHVlKGVsZW1lbnRbVzNDX1dFQl9FTEVNRU5UX0lERU5USUZJRVJdKSk7XG59O1xuXG5leHRlbnNpb25zLmdldFNhZmFyaUlzSXBob25lID0gYXN5bmMgZnVuY3Rpb24gZ2V0U2FmYXJpSXNJcGhvbmUgKCkge1xuICBpZiAoXy5pc0Jvb2xlYW4odGhpcy5faXNTYWZhcmlJcGhvbmUpKSB7XG4gICAgcmV0dXJuIHRoaXMuX2lzU2FmYXJpSXBob25lO1xuICB9XG4gIHRyeSB7XG4gICAgY29uc3QgdXNlckFnZW50ID0gYXdhaXQgdGhpcy5leGVjdXRlKCdyZXR1cm4gbmF2aWdhdG9yLnVzZXJBZ2VudCcpO1xuICAgIHRoaXMuX2lzU2FmYXJpSXBob25lID0gdXNlckFnZW50LnRvTG93ZXJDYXNlKCkuaW5jbHVkZXMoJ2lwaG9uZScpO1xuICB9IGNhdGNoIChlcnIpIHtcbiAgICB0aGlzLmxvZy53YXJuKGBVbmFibGUgdG8gZmluZCBkZXZpY2UgdHlwZSBmcm9tIHVzZXJhZ2VudC4gQXNzdW1pbmcgaVBob25lYCk7XG4gICAgdGhpcy5sb2cuZGVidWcoYEVycm9yOiAke2Vyci5tZXNzYWdlfWApO1xuICB9XG4gIHJldHVybiB0aGlzLl9pc1NhZmFyaUlwaG9uZSA/PyB0cnVlO1xufTtcblxuZXh0ZW5zaW9ucy5nZXRTYWZhcmlEZXZpY2VTaXplID0gYXN5bmMgZnVuY3Rpb24gZ2V0U2FmYXJpRGV2aWNlU2l6ZSAoKSB7XG4gIGNvbnN0IHNjcmlwdCA9ICdyZXR1cm4ge2hlaWdodDogd2luZG93LnNjcmVlbi5hdmFpbEhlaWdodCAqIHdpbmRvdy5kZXZpY2VQaXhlbFJhdGlvLCB3aWR0aDogd2luZG93LnNjcmVlbi5hdmFpbFdpZHRoICogd2luZG93LmRldmljZVBpeGVsUmF0aW99Oyc7XG4gIGNvbnN0IHt3aWR0aCwgaGVpZ2h0fSA9IGF3YWl0IHRoaXMuZXhlY3V0ZShzY3JpcHQpO1xuICBjb25zdCBbbm9ybUhlaWdodCwgbm9ybVdpZHRoXSA9IGhlaWdodCA+IHdpZHRoID8gW2hlaWdodCwgd2lkdGhdIDogW3dpZHRoLCBoZWlnaHRdO1xuICByZXR1cm4ge1xuICAgIHdpZHRoOiBub3JtV2lkdGgsXG4gICAgaGVpZ2h0OiBub3JtSGVpZ2h0LFxuICB9O1xufTtcblxuZXh0ZW5zaW9ucy5nZXRTYWZhcmlJc05vdGNoZWQgPSBhc3luYyBmdW5jdGlvbiBnZXRTYWZhcmlJc05vdGNoZWQgKCkge1xuICBpZiAoXy5pc0Jvb2xlYW4odGhpcy5faXNTYWZhcmlOb3RjaGVkKSkge1xuICAgIHJldHVybiB0aGlzLl9pc1NhZmFyaU5vdGNoZWQ7XG4gIH1cblxuICB0cnkge1xuICAgIGNvbnN0IHt3aWR0aCwgaGVpZ2h0fSA9IGF3YWl0IHRoaXMuZ2V0U2FmYXJpRGV2aWNlU2l6ZSgpO1xuICAgIGZvciAoY29uc3QgZGV2aWNlIG9mIE5PVENIRURfREVWSUNFX1NJWkVTKSB7XG4gICAgICBpZiAoZGV2aWNlLncgPT09IHdpZHRoICYmIGRldmljZS5oID09PSBoZWlnaHQpIHtcbiAgICAgICAgdGhpcy5faXNTYWZhcmlOb3RjaGVkID0gdHJ1ZTtcbiAgICAgIH1cbiAgICB9XG4gIH0gY2F0Y2ggKGVycikge1xuICAgIHRoaXMubG9nLndhcm4oYFVuYWJsZSB0byBmaW5kIGRldmljZSB0eXBlIGZyb20gZGltZW5zaW9ucy4gQXNzdW1pbmcgdGhlIGRldmljZSBpcyBub3Qgbm90Y2hlZGApO1xuICAgIHRoaXMubG9nLmRlYnVnKGBFcnJvcjogJHtlcnIubWVzc2FnZX1gKTtcbiAgfVxuICByZXR1cm4gdGhpcy5faXNTYWZhcmlOb3RjaGVkID8/IGZhbHNlO1xufTtcblxuZXh0ZW5zaW9ucy5nZXRFeHRyYVRyYW5zbGF0ZVdlYkNvb3Jkc09mZnNldCA9IGFzeW5jIGZ1bmN0aW9uIGdldEV4dHJhVHJhbnNsYXRlV2ViQ29vcmRzT2Zmc2V0ICh3dlBvcywgcmVhbERpbXMpIHtcbiAgbGV0IHRvcE9mZnNldCA9IDA7XG4gIGxldCBib3R0b21PZmZzZXQgPSAwO1xuXG4gIGNvbnN0IGlzSXBob25lID0gYXdhaXQgdGhpcy5nZXRTYWZhcmlJc0lwaG9uZSgpO1xuXG4gIC8vIE5vIG5lZWQgdG8gY2hlY2sgd2hldGhlciB0aGUgU21hcnQgQXBwIEJhbm5lciBvciBUYWIgQmFyIGlzIHZpc2libGUgb3Igbm90XG4gIC8vIGlmIGFscmVhZHkgZGVmaW5lZCBieSBuYXRpdmVXZWJUYXBUYWJCYXJWaXNpYmlsaXR5IG9yIG5hdGl2ZVdlYlRhcFNtYXJ0QXBwQmFubmVyVmlzaWJpbGl0eSBpbiBzZXR0aW5ncy5cbiAgY29uc3Qge1xuICAgIG5hdGl2ZVdlYlRhcFRhYkJhclZpc2liaWxpdHksXG4gICAgbmF0aXZlV2ViVGFwU21hcnRBcHBCYW5uZXJWaXNpYmlsaXR5LFxuICAgIHNhZmFyaVRhYkJhclBvc2l0aW9uID0gdXRpbC5jb21wYXJlVmVyc2lvbnModGhpcy5vcHRzLnBsYXRmb3JtVmVyc2lvbiwgJz49JywgJzE1LjAnKSAmJiBpc0lwaG9uZVxuICAgICAgPyBUQUJfQkFSX1BPU0lUSU9OX0JPVFRPTSA6IFRBQl9CQVJfUE9TSVRJT05fVE9QLFxuICB9ID0gYXdhaXQgdGhpcy5zZXR0aW5ncy5nZXRTZXR0aW5ncygpO1xuICBsZXQgdGFiQmFyVmlzaWJpbGl0eSA9IF8ubG93ZXJDYXNlKG5hdGl2ZVdlYlRhcFRhYkJhclZpc2liaWxpdHkpO1xuICBsZXQgYmFubmVyVmlzaWJpbGl0eSA9IF8ubG93ZXJDYXNlKG5hdGl2ZVdlYlRhcFNtYXJ0QXBwQmFubmVyVmlzaWJpbGl0eSk7XG4gIGNvbnN0IHRhYkJhclBvc2l0aW9uID0gXy5sb3dlckNhc2Uoc2FmYXJpVGFiQmFyUG9zaXRpb24pO1xuXG4gIGlmICghVklTSUJJTElUSUVTLmluY2x1ZGVzKHRhYkJhclZpc2liaWxpdHkpKSB7XG4gICAgdGFiQmFyVmlzaWJpbGl0eSA9IERFVEVDVDtcbiAgfVxuICBpZiAoIVZJU0lCSUxJVElFUy5pbmNsdWRlcyhiYW5uZXJWaXNpYmlsaXR5KSkge1xuICAgIGJhbm5lclZpc2liaWxpdHkgPSBERVRFQ1Q7XG4gIH1cblxuICBpZiAoIVRBQl9CQVJfUE9TU0lUSU9OUy5pbmNsdWRlcyh0YWJCYXJQb3NpdGlvbikpIHtcbiAgICB0aHJvdyBuZXcgZXJyb3JzLkludmFsaWRBcmd1bWVudEVycm9yKFxuICAgICAgYCR7c2FmYXJpVGFiQmFyUG9zaXRpb259IGlzIGludmFsaWQgYXMgU2FmYXJpIHRhYiBiYXIgcG9zaXRpb24uIEF2YWlsYWJsZSBwb3NpdGlvbnMgYXJlICR7VEFCX0JBUl9QT1NTSVRJT05TfS5gKTtcbiAgfVxuXG4gIGNvbnN0IGlzTm90Y2hlZCA9IGlzSXBob25lICYmIGF3YWl0IHRoaXMuZ2V0U2FmYXJpSXNOb3RjaGVkKCk7XG5cbiAgY29uc3Qgb3JpZW50YXRpb24gPSByZWFsRGltcy5oID4gcmVhbERpbXMudyA/ICdQT1JUUkFJVCcgOiAnTEFORFNDQVBFJztcblxuICBjb25zdCBub3RjaE9mZnNldCA9IGlzTm90Y2hlZFxuICAgID8gdXRpbC5jb21wYXJlVmVyc2lvbnModGhpcy5vcHRzLnBsYXRmb3JtVmVyc2lvbiwgJz0nLCAnMTMuMCcpXG4gICAgICA/IElQSE9ORV9YX05PVENIX09GRlNFVF9JT1NfMTNcbiAgICAgIDogSVBIT05FX1hfTk9UQ0hfT0ZGU0VUX0lPU1xuICAgIDogMDtcblxuICBjb25zdCBpc1Njcm9sbGVkID0gYXdhaXQgdGhpcy5leGVjdXRlKCdyZXR1cm4gZG9jdW1lbnQuZG9jdW1lbnRFbGVtZW50LnNjcm9sbFRvcCA+IDAnKTtcbiAgaWYgKGlzU2Nyb2xsZWQpIHtcbiAgICB0b3BPZmZzZXQgPSBJUEhPTkVfU0NST0xMRURfVE9QX0JBUl9IRUlHSFQgKyBub3RjaE9mZnNldDtcblxuICAgIGlmIChpc05vdGNoZWQpIHtcbiAgICAgIHRvcE9mZnNldCAtPSBJUEhPTkVfWF9TQ1JPTExFRF9PRkZTRVQ7XG4gICAgfVxuXG4gICAgLy8gSWYgdGhlIGlQaG9uZSBpcyBsYW5kc2NhcGUgdGhlbiB0aGVyZSBpcyBubyB0b3AgYmFyXG4gICAgaWYgKG9yaWVudGF0aW9uID09PSAnTEFORFNDQVBFJyAmJiBpc0lwaG9uZSkge1xuICAgICAgdG9wT2Zmc2V0ID0gMDtcbiAgICB9XG4gIH0gZWxzZSB7XG4gICAgdG9wT2Zmc2V0ID0gdGFiQmFyUG9zaXRpb24gPT09IFRBQl9CQVJfUE9TSVRJT05fQk9UVE9NID8gMCA6IElQSE9ORV9UT1BfQkFSX0hFSUdIVDtcbiAgICB0b3BPZmZzZXQgKz0gbm90Y2hPZmZzZXQ7XG4gICAgdGhpcy5sb2cuZGVidWcoYHRhYkJhclBvc2l0aW9uIGFuZCB0b3BPZmZzZXQ6ICR7dGFiQmFyUG9zaXRpb259LCAke3RvcE9mZnNldH1gKTtcblxuICAgIGlmIChpc0lwaG9uZSkge1xuICAgICAgaWYgKG9yaWVudGF0aW9uID09PSAnUE9SVFJBSVQnKSB7XG4gICAgICAgIC8vIFRoZSBib3R0b20gYmFyIGlzIG9ubHkgdmlzaWJsZSB3aGVuIHBvcnRyYWl0XG4gICAgICAgIGJvdHRvbU9mZnNldCA9IElQSE9ORV9CT1RUT01fQkFSX09GRlNFVDtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHRvcE9mZnNldCA9IElQSE9ORV9MQU5EU0NBUEVfVE9QX0JBUl9IRUlHSFQ7XG4gICAgICB9XG4gICAgfVxuXG4gICAgaWYgKG9yaWVudGF0aW9uID09PSAnTEFORFNDQVBFJyB8fCAhaXNJcGhvbmUpIHtcbiAgICAgIGlmICh0YWJCYXJWaXNpYmlsaXR5ID09PSBWSVNJQkxFKSB7XG4gICAgICAgIHRvcE9mZnNldCArPSBUQUJfQkFSX09GRlNFVDtcbiAgICAgIH0gZWxzZSBpZiAodGFiQmFyVmlzaWJpbGl0eSA9PT0gREVURUNUKSB7XG4gICAgICAgIC8vIFRhYnMgb25seSBhcHBlYXIgaWYgdGhlIGRldmljZSBpcyBsYW5kc2NhcGUgb3IgaWYgaXQncyBhbiBpUGFkIHNvIHdlIG9ubHkgY2hlY2sgdmlzaWJpbGl0eSBpbiB0aGlzIGNhc2VcbiAgICAgICAgLy8gQXNzdW1lIHRoYXQgZWFjaCB0YWIgYmFyIGlzIGEgV2ViVmlld1xuICAgICAgICBjb25zdCBjb250ZXh0c0FuZFZpZXdzID0gYXdhaXQgdGhpcy5nZXRDb250ZXh0c0FuZFZpZXdzKCk7XG4gICAgICAgIGNvbnN0IHRhYnMgPSBjb250ZXh0c0FuZFZpZXdzLmZpbHRlcigoY3R4KSA9PiBjdHguaWQuc3RhcnRzV2l0aCgnV0VCVklFV18nKSk7XG5cbiAgICAgICAgaWYgKHRhYnMubGVuZ3RoID4gMSkge1xuICAgICAgICAgIHRoaXMubG9nLmRlYnVnKGBGb3VuZCAke3RhYnMubGVuZ3RofSB0YWJzLiBBc3N1bWluZyB0aGUgdGFiIGJhciBpcyB2aXNpYmxlYCk7XG4gICAgICAgICAgdG9wT2Zmc2V0ICs9IFRBQl9CQVJfT0ZGU0VUO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgdG9wT2Zmc2V0ICs9IGF3YWl0IHRoaXMuZ2V0RXh0cmFOYXRpdmVXZWJUYXBPZmZzZXQoaXNJcGhvbmUsIGJhbm5lclZpc2liaWxpdHkpO1xuXG4gIHd2UG9zLnkgKz0gdG9wT2Zmc2V0O1xuICByZWFsRGltcy5oIC09ICh0b3BPZmZzZXQgKyBib3R0b21PZmZzZXQpO1xufTtcblxuZXh0ZW5zaW9ucy5nZXRFeHRyYU5hdGl2ZVdlYlRhcE9mZnNldCA9IGFzeW5jIGZ1bmN0aW9uIGdldEV4dHJhTmF0aXZlV2ViVGFwT2Zmc2V0IChpc0lwaG9uZSwgYmFubmVyVmlzaWJpbGl0eSkge1xuICBsZXQgb2Zmc2V0ID0gMDtcblxuICBpZiAoYmFubmVyVmlzaWJpbGl0eSA9PT0gVklTSUJMRSkge1xuICAgIG9mZnNldCArPSBpc0lwaG9uZSA/XG4gICAgICBJUEhPTkVfV0VCX0NPT1JEX1NNQVJUX0FQUF9CQU5ORVJfT0ZGU0VUIDpcbiAgICAgIElQQURfV0VCX0NPT1JEX1NNQVJUX0FQUF9CQU5ORVJfT0ZGU0VUO1xuICB9IGVsc2UgaWYgKGJhbm5lclZpc2liaWxpdHkgPT09IERFVEVDVCkge1xuICAgIC8vIHRyeSB0byBzZWUgaWYgdGhlcmUgaXMgYW4gU21hcnQgQXBwIEJhbm5lclxuICAgIGNvbnN0IGJhbm5lcnMgPSBhd2FpdCB0aGlzLmZpbmROYXRpdmVFbGVtZW50T3JFbGVtZW50cygnYWNjZXNzaWJpbGl0eSBpZCcsICdDbG9zZSBhcHAgZG93bmxvYWQgb2ZmZXInLCB0cnVlKTtcbiAgICBpZiAoYmFubmVycy5sZW5ndGggPiAwKSB7XG4gICAgICBvZmZzZXQgKz0gaXNJcGhvbmUgP1xuICAgICAgICBJUEhPTkVfV0VCX0NPT1JEX1NNQVJUX0FQUF9CQU5ORVJfT0ZGU0VUIDpcbiAgICAgICAgSVBBRF9XRUJfQ09PUkRfU01BUlRfQVBQX0JBTk5FUl9PRkZTRVQ7XG4gICAgfVxuICB9XG5cbiAgdGhpcy5sb2cuZGVidWcoYEFkZGl0aW9uYWwgbmF0aXZlIHdlYiB0YXAgb2Zmc2V0IGNvbXB1dGVkOiAke29mZnNldH1gKTtcbiAgcmV0dXJuIG9mZnNldDtcbn07XG5cbmFzeW5jIGZ1bmN0aW9uIHRhcFdlYkVsZW1lbnROYXRpdmVseSAoZHJpdmVyLCBhdG9tc0VsZW1lbnQpIHtcbiAgLy8gdHJ5IHRvIGdldCB0aGUgdGV4dCBvZiB0aGUgZWxlbWVudCwgd2hpY2ggd2lsbCBiZSBhY2Nlc3NpYmxlIGluIHRoZVxuICAvLyBuYXRpdmUgY29udGV4dFxuICB0cnkge1xuICAgIGxldCB0ZXh0ID0gYXdhaXQgZHJpdmVyLmV4ZWN1dGVBdG9tKCdnZXRfdGV4dCcsIFthdG9tc0VsZW1lbnRdKTtcbiAgICBpZiAoIXRleHQpIHtcbiAgICAgIHRleHQgPSBhd2FpdCBkcml2ZXIuZXhlY3V0ZUF0b20oJ2dldF9hdHRyaWJ1dGVfdmFsdWUnLCBbYXRvbXNFbGVtZW50LCAndmFsdWUnXSk7XG4gICAgfVxuXG4gICAgaWYgKHRleHQpIHtcbiAgICAgIGNvbnN0IGVscyA9IGF3YWl0IGRyaXZlci5maW5kTmF0aXZlRWxlbWVudE9yRWxlbWVudHMoJ2FjY2Vzc2liaWxpdHkgaWQnLCB0ZXh0LCB0cnVlKTtcbiAgICAgIGlmIChlbHMubGVuZ3RoID09PSAxIHx8IGVscy5sZW5ndGggPT09IDIpIHtcbiAgICAgICAgY29uc3QgZWwgPSBlbHNbMF07XG4gICAgICAgIC8vIHVzZSB0YXAgYmVjYXVzZSBvbiBpT1MgMTEuMiBhbmQgYmVsb3cgYG5hdGl2ZUNsaWNrYCBjcmFzaGVzIFdEQVxuICAgICAgICBjb25zdCByZWN0ID0gYXdhaXQgZHJpdmVyLnByb3h5Q29tbWFuZChgL2VsZW1lbnQvJHt1dGlsLnVud3JhcEVsZW1lbnQoZWwpfS9yZWN0YCwgJ0dFVCcpO1xuICAgICAgICBpZiAoZWxzLmxlbmd0aCA9PT0gMikge1xuICAgICAgICAgIGNvbnN0IGVsMiA9IGVsc1sxXTtcbiAgICAgICAgICBjb25zdCByZWN0MiA9IGF3YWl0IGRyaXZlci5wcm94eUNvbW1hbmQoYC9lbGVtZW50LyR7dXRpbC51bndyYXBFbGVtZW50KGVsMil9L3JlY3RgLCAnR0VUJyk7XG5cbiAgICAgICAgICBpZiAoKHJlY3QueCAhPT0gcmVjdDIueCB8fCByZWN0LnkgIT09IHJlY3QyLnkpIHx8XG4gICAgICAgICAgKHJlY3Qud2lkdGggIT09IHJlY3QyLndpZHRoIHx8IHJlY3QuaGVpZ2h0ICE9PSByZWN0Mi5oZWlnaHQpKSB7XG4gICAgICAgICAgICAvLyBUaGVzZSAyIG5hdGl2ZSBlbGVtZW50cyBhcmUgbm90IHJlZmVycmluZyB0byB0aGUgc2FtZSB3ZWIgZWxlbWVudFxuICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICBjb25zdCBjb29yZHMgPSB7XG4gICAgICAgICAgeDogTWF0aC5yb3VuZChyZWN0LnggKyByZWN0LndpZHRoIC8gMiksXG4gICAgICAgICAgeTogTWF0aC5yb3VuZChyZWN0LnkgKyByZWN0LmhlaWdodCAvIDIpLFxuICAgICAgICB9O1xuICAgICAgICBhd2FpdCBkcml2ZXIuY2xpY2tDb29yZHMoY29vcmRzKTtcbiAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICB9XG4gICAgfVxuICB9IGNhdGNoIChlcnIpIHtcbiAgICAvLyBhbnkgZmFpbHVyZSBzaG91bGQgZmFsbCB0aHJvdWdoIGFuZCB0cmlnZ2VyIHRoZSBtb3JlIGVsYWJvcmF0ZVxuICAgIC8vIG1ldGhvZCBvZiBjbGlja2luZ1xuICAgIGRyaXZlci5sb2cud2FybihgRXJyb3IgYXR0ZW1wdGluZyB0byBjbGljazogJHtlcnIubWVzc2FnZX1gKTtcbiAgfVxuICByZXR1cm4gZmFsc2U7XG59XG5cbmV4dGVuc2lvbnMubmF0aXZlV2ViVGFwID0gYXN5bmMgZnVuY3Rpb24gbmF0aXZlV2ViVGFwIChlbCkge1xuICBjb25zdCBhdG9tc0VsZW1lbnQgPSB0aGlzLmdldEF0b21zRWxlbWVudChlbCk7XG5cbiAgLy8gaWYgc3RyaWN0IG5hdGl2ZSB0YXAsIGRvIG5vdCB0cnkgdG8gZG8gaXQgd2l0aCBXREEgZGlyZWN0bHlcbiAgaWYgKCEoYXdhaXQgdGhpcy5zZXR0aW5ncy5nZXRTZXR0aW5ncygpKS5uYXRpdmVXZWJUYXBTdHJpY3QgJiYgYXdhaXQgdGFwV2ViRWxlbWVudE5hdGl2ZWx5KHRoaXMsIGF0b21zRWxlbWVudCkpIHtcbiAgICByZXR1cm47XG4gIH1cbiAgdGhpcy5sb2cud2FybignVW5hYmxlIHRvIGRvIHNpbXBsZSBuYXRpdmUgd2ViIHRhcC4gQXR0ZW1wdGluZyB0byBjb252ZXJ0IGNvb3JkaW5hdGVzJyk7XG5cbiAgLy8gYGdldF90b3BfbGVmdF9jb29yZGluYXRlc2AgcmV0dXJucyB0aGUgd3JvbmcgdmFsdWUgc29tZXRpbWVzLFxuICAvLyB1bmxlc3Mgd2UgcHJlLWNhbGwgYm90aCBvZiB0aGVzZSBmdW5jdGlvbnMgYmVmb3JlIHRoZSBhY3R1YWwgY2FsbHNcbiAgYXdhaXQgQi5Qcm9taXNlLmFsbChbXG4gICAgdGhpcy5leGVjdXRlQXRvbSgnZ2V0X3NpemUnLCBbYXRvbXNFbGVtZW50XSksXG4gICAgdGhpcy5leGVjdXRlQXRvbSgnZ2V0X3RvcF9sZWZ0X2Nvb3JkaW5hdGVzJywgW2F0b21zRWxlbWVudF0pLFxuICBdKTtcblxuICBjb25zdCBbc2l6ZSwgY29vcmRpbmF0ZXNdID0gYXdhaXQgQi5Qcm9taXNlLmFsbChbXG4gICAgdGhpcy5leGVjdXRlQXRvbSgnZ2V0X3NpemUnLCBbYXRvbXNFbGVtZW50XSksXG4gICAgdGhpcy5leGVjdXRlQXRvbSgnZ2V0X3RvcF9sZWZ0X2Nvb3JkaW5hdGVzJywgW2F0b21zRWxlbWVudF0pLFxuICBdKTtcbiAgY29uc3Qge3dpZHRoLCBoZWlnaHR9ID0gc2l6ZTtcbiAgbGV0IHt4LCB5fSA9IGNvb3JkaW5hdGVzO1xuICB4ICs9IHdpZHRoIC8gMjtcbiAgeSArPSBoZWlnaHQgLyAyO1xuXG4gIHRoaXMuY3VyV2ViQ29vcmRzID0ge3gsIHl9O1xuICBhd2FpdCB0aGlzLmNsaWNrV2ViQ29vcmRzKCk7XG59O1xuXG5leHRlbnNpb25zLmNsaWNrQ29vcmRzID0gYXN5bmMgZnVuY3Rpb24gY2xpY2tDb29yZHMgKGNvb3Jkcykge1xuICBhd2FpdCB0aGlzLnBlcmZvcm1Ub3VjaChbXG4gICAge1xuICAgICAgYWN0aW9uOiAndGFwJyxcbiAgICAgIG9wdGlvbnM6IGNvb3JkcyxcbiAgICB9LFxuICBdKTtcbn07XG5cbmV4dGVuc2lvbnMudHJhbnNsYXRlV2ViQ29vcmRzID0gYXN5bmMgZnVuY3Rpb24gdHJhbnNsYXRlV2ViQ29vcmRzIChjb29yZHMpIHtcbiAgdGhpcy5sb2cuZGVidWcoYFRyYW5zbGF0aW5nIGNvb3JkaW5hdGVzICgke0pTT04uc3RyaW5naWZ5KGNvb3Jkcyl9KSB0byB3ZWIgY29vcmRpbmF0ZXNgKTtcblxuICAvLyBhYnNvbHV0aXplIHdlYiBjb29yZHNcbiAgbGV0IHdlYnZpZXc7XG4gIHRyeSB7XG4gICAgd2VidmlldyA9IGF3YWl0IHJldHJ5SW50ZXJ2YWwoNSwgMTAwLCBhc3luYyAoKSA9PiBhd2FpdCB0aGlzLmZpbmROYXRpdmVFbGVtZW50T3JFbGVtZW50cygnY2xhc3MgbmFtZScsICdYQ1VJRWxlbWVudFR5cGVXZWJWaWV3JywgZmFsc2UpKTtcbiAgfSBjYXRjaCAoaWduKSB7fVxuXG4gIGlmICghd2Vidmlldykge1xuICAgIHRocm93IG5ldyBFcnJvcihgTm8gV2ViVmlldyBmb3VuZC4gVW5hYmxlIHRvIHRyYW5zbGF0ZSB3ZWIgY29vcmRpbmF0ZXMgZm9yIG5hdGl2ZSB3ZWIgdGFwLmApO1xuICB9XG5cbiAgd2VidmlldyA9IHV0aWwudW53cmFwRWxlbWVudCh3ZWJ2aWV3KTtcblxuICBjb25zdCByZWN0ID0gYXdhaXQgdGhpcy5wcm94eUNvbW1hbmQoYC9lbGVtZW50LyR7d2Vidmlld30vcmVjdGAsICdHRVQnKTtcbiAgY29uc3Qgd3ZQb3MgPSB7eDogcmVjdC54LCB5OiByZWN0Lnl9O1xuICBjb25zdCByZWFsRGltcyA9IHt3OiByZWN0LndpZHRoLCBoOiByZWN0LmhlaWdodH07XG5cbiAgY29uc3QgY21kID0gJyhmdW5jdGlvbiAoKSB7IHJldHVybiB7dzogd2luZG93LmlubmVyV2lkdGgsIGg6IHdpbmRvdy5pbm5lckhlaWdodH07IH0pKCknO1xuICBjb25zdCB3dkRpbXMgPSBhd2FpdCB0aGlzLnJlbW90ZS5leGVjdXRlKGNtZCk7XG5cbiAgLy8ga2VlcCB0cmFjayBvZiBpbXBsaWNpdCB3YWl0LCBhbmQgc2V0IGxvY2FsbHkgdG8gMFxuICAvLyBodHRwczovL2dpdGh1Yi5jb20vYXBwaXVtL2FwcGl1bS9pc3N1ZXMvMTQ5ODhcbiAgY29uc3QgaW1wbGljaXRXYWl0TXMgPSB0aGlzLmltcGxpY2l0V2FpdE1zO1xuICBhd2FpdCB0aGlzLnNldEltcGxpY2l0V2FpdCgwKTtcbiAgdHJ5IHtcbiAgICBhd2FpdCB0aGlzLmdldEV4dHJhVHJhbnNsYXRlV2ViQ29vcmRzT2Zmc2V0KHd2UG9zLCByZWFsRGltcyk7XG4gIH0gZmluYWxseSB7XG4gICAgYXdhaXQgdGhpcy5zZXRJbXBsaWNpdFdhaXQoaW1wbGljaXRXYWl0TXMpO1xuICB9XG5cbiAgaWYgKHd2RGltcyAmJiByZWFsRGltcyAmJiB3dlBvcykge1xuICAgIGxldCB4UmF0aW8gPSByZWFsRGltcy53IC8gd3ZEaW1zLnc7XG4gICAgbGV0IHlSYXRpbyA9IHJlYWxEaW1zLmggLyB3dkRpbXMuaDtcbiAgICBsZXQgbmV3Q29vcmRzID0ge1xuICAgICAgeDogd3ZQb3MueCArIE1hdGgucm91bmQoeFJhdGlvICogY29vcmRzLngpLFxuICAgICAgeTogd3ZQb3MueSArIE1hdGgucm91bmQoeVJhdGlvICogY29vcmRzLnkpLFxuICAgIH07XG5cbiAgICAvLyBhZGRpdGlvbmFsIGxvZ2dpbmcgZm9yIGNvb3JkaW5hdGVzLCBzaW5jZSBpdCBpcyBzb21ldGltZXMgYnJva2VuXG4gICAgLy8gICBzZWUgaHR0cHM6Ly9naXRodWIuY29tL2FwcGl1bS9hcHBpdW0vaXNzdWVzLzkxNTlcbiAgICB0aGlzLmxvZy5kZWJ1ZyhgQ29udmVydGVkIGNvb3JkaW5hdGVzOiAke0pTT04uc3RyaW5naWZ5KG5ld0Nvb3Jkcyl9YCk7XG4gICAgdGhpcy5sb2cuZGVidWcoYCAgICByZWN0OiAke0pTT04uc3RyaW5naWZ5KHJlY3QpfWApO1xuICAgIHRoaXMubG9nLmRlYnVnKGAgICAgd3ZQb3M6ICR7SlNPTi5zdHJpbmdpZnkod3ZQb3MpfWApO1xuICAgIHRoaXMubG9nLmRlYnVnKGAgICAgcmVhbERpbXM6ICR7SlNPTi5zdHJpbmdpZnkocmVhbERpbXMpfWApO1xuICAgIHRoaXMubG9nLmRlYnVnKGAgICAgd3ZEaW1zOiAke0pTT04uc3RyaW5naWZ5KHd2RGltcyl9YCk7XG4gICAgdGhpcy5sb2cuZGVidWcoYCAgICB4UmF0aW86ICR7SlNPTi5zdHJpbmdpZnkoeFJhdGlvKX1gKTtcbiAgICB0aGlzLmxvZy5kZWJ1ZyhgICAgIHlSYXRpbzogJHtKU09OLnN0cmluZ2lmeSh5UmF0aW8pfWApO1xuXG4gICAgdGhpcy5sb2cuZGVidWcoYENvbnZlcnRlZCB3ZWIgY29vcmRzICR7SlNPTi5zdHJpbmdpZnkoY29vcmRzKX0gYCArXG4gICAgICBgaW50byByZWFsIGNvb3JkcyAke0pTT04uc3RyaW5naWZ5KG5ld0Nvb3Jkcyl9YCk7XG4gICAgcmV0dXJuIG5ld0Nvb3JkcztcbiAgfVxufTtcblxuZXh0ZW5zaW9ucy5jaGVja0ZvckFsZXJ0ID0gYXN5bmMgZnVuY3Rpb24gY2hlY2tGb3JBbGVydCAoKSB7XG4gIHJldHVybiBfLmlzU3RyaW5nKGF3YWl0IHRoaXMuZ2V0QWxlcnRUZXh0KCkpO1xufTtcblxuZXh0ZW5zaW9ucy53YWl0Rm9yQXRvbSA9IGFzeW5jIGZ1bmN0aW9uIHdhaXRGb3JBdG9tIChwcm9taXNlKSB7XG4gIGNvbnN0IHRpbWVyID0gbmV3IHRpbWluZy5UaW1lcigpLnN0YXJ0KCk7XG5cbiAgLy8gbmVlZCB0byBjaGVjayBmb3IgYWxlcnQgd2hpbGUgdGhlIGF0b20gaXMgYmVpbmcgZXhlY3V0ZWQuXG4gIC8vIHNvIG5vdGlmeSBvdXJzZWx2ZXMgd2hlbiBpdCBoYXBwZW5zXG4gIGNvbnN0IHRpbWVkQXRvbVByb21pc2UgPSBCLnJlc29sdmUocHJvbWlzZSkudGltZW91dChBVE9NX1dBSVRfVElNRU9VVF9NUyk7XG4gIGNvbnN0IGhhbmRsZVByb21pc2VFcnJvciA9IGFzeW5jIChwKSA9PiB7XG4gICAgdHJ5IHtcbiAgICAgIHJldHVybiBhd2FpdCBwO1xuICAgIH0gY2F0Y2ggKGVycikge1xuICAgICAgY29uc3Qgb3JpZ2luYWxFcnJvciA9IChlcnIgaW5zdGFuY2VvZiBCLkFnZ3JlZ2F0ZUVycm9yKSA/IGVyclswXSA6IGVycjtcbiAgICAgIHRoaXMubG9nLmRlYnVnKGBFcnJvciByZWNlaXZlZCB3aGlsZSBleGVjdXRpbmcgYXRvbTogJHtvcmlnaW5hbEVycm9yLm1lc3NhZ2V9YCk7XG4gICAgICBpZiAob3JpZ2luYWxFcnJvciBpbnN0YW5jZW9mIEIuVGltZW91dEVycm9yKSB7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcihgRGlkIG5vdCBnZXQgYW55IHJlc3BvbnNlIGZvciBhdG9tIGV4ZWN1dGlvbiBhZnRlciBgICtcbiAgICAgICAgICBgJHt0aW1lci5nZXREdXJhdGlvbigpLmFzTWlsbGlTZWNvbmRzLnRvRml4ZWQoMCl9bXNgKTtcbiAgICAgIH1cbiAgICAgIHRocm93IG9yaWdpbmFsRXJyb3I7XG4gICAgfVxuICB9O1xuICAvLyBpZiB0aGUgYXRvbSBwcm9taXNlIGlzIGZ1bGZpbGxlZCB3aXRoaW4gQVRPTV9JTklUSUFMX1dBSVRfTVNcbiAgLy8gdGhlbiB3ZSBkb24ndCBuZWVkIHRvIGNoZWNrIGZvciBhbiBhbGVydCBwcmVzZW5jZVxuICBhd2FpdCBoYW5kbGVQcm9taXNlRXJyb3IoQi5hbnkoW0IuZGVsYXkoQVRPTV9JTklUSUFMX1dBSVRfTVMpLCB0aW1lZEF0b21Qcm9taXNlXSkpO1xuICBpZiAodGltZWRBdG9tUHJvbWlzZS5pc0Z1bGZpbGxlZCgpKSB7XG4gICAgcmV0dXJuIGF3YWl0IHRpbWVkQXRvbVByb21pc2U7XG4gIH1cblxuICAvLyAuLi5vdGhlcndpc2UgbWFrZSBzdXJlIHRoZXJlIGlzIG5vIHVuZXhwZWN0ZWQgYWxlcnQgY292ZXJpbmcgdGhlIGVsZW1lbnRcbiAgaWYgKCFfLmlzUGxhaW5PYmplY3QodGhpcy5fd2FpdGluZ0F0b21zKSkge1xuICAgIHRoaXMuX3dhaXRpbmdBdG9tcyA9IHtcbiAgICAgIGNvdW50OiAwLFxuICAgICAgYWxlcnROb3RpZmllcjogbmV3IEV2ZW50RW1pdHRlcigpLFxuICAgICAgYWxlcnRNb25pdG9yOiBCLnJlc29sdmUoKSxcbiAgICB9O1xuICB9XG4gIHRoaXMuX3dhaXRpbmdBdG9tcy5jb3VudCsrO1xuXG4gIGxldCBvbkFsZXJ0Q2FsbGJhY2s7XG4gIHRyeSB7XG4gICAgLy8gb25seSByZXN0YXJ0IHRoZSBtb25pdG9yIGlmIGl0IGlzIG5vdCBydW5uaW5nIGFscmVhZHlcbiAgICBpZiAodGhpcy5fd2FpdGluZ0F0b21zLmFsZXJ0TW9uaXRvci5pc1Jlc29sdmVkKCkpIHtcbiAgICAgIHRoaXMuX3dhaXRpbmdBdG9tcy5hbGVydE1vbml0b3IgPSBCLnJlc29sdmUoKGFzeW5jICgpID0+IHtcbiAgICAgICAgd2hpbGUgKHRoaXMuX3dhaXRpbmdBdG9tcy5jb3VudCA+IDApIHtcbiAgICAgICAgICB0cnkge1xuICAgICAgICAgICAgaWYgKGF3YWl0IHRoaXMuY2hlY2tGb3JBbGVydCgpKSB7XG4gICAgICAgICAgICAgIHRoaXMuX3dhaXRpbmdBdG9tcy5hbGVydE5vdGlmaWVyLmVtaXQoT05fT0JTVFJVQ1RJTkdfQUxFUlRfRVZFTlQpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH0gY2F0Y2ggKGlnbikge31cbiAgICAgICAgICBhd2FpdCBCLmRlbGF5KEFUT01fSU5JVElBTF9XQUlUX01TIC8gMik7XG4gICAgICAgIH1cbiAgICAgIH0pKCkpO1xuICAgIH1cblxuICAgIHJldHVybiBhd2FpdCBuZXcgQigocmVzb2x2ZSwgcmVqZWN0KSA9PiB7XG4gICAgICBvbkFsZXJ0Q2FsbGJhY2sgPSAoKSA9PiByZWplY3QobmV3IGVycm9ycy5VbmV4cGVjdGVkQWxlcnRPcGVuRXJyb3IoKSk7XG4gICAgICB0aGlzLl93YWl0aW5nQXRvbXMuYWxlcnROb3RpZmllci5vbmNlKE9OX09CU1RSVUNUSU5HX0FMRVJUX0VWRU5ULCBvbkFsZXJ0Q2FsbGJhY2spO1xuICAgICAgaGFuZGxlUHJvbWlzZUVycm9yKHRpbWVkQXRvbVByb21pc2UpXG4gICAgICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBwcm9taXNlL3ByZWZlci1hd2FpdC10by10aGVuXG4gICAgICAgIC50aGVuKHJlc29sdmUpXG4gICAgICAgIC5jYXRjaChyZWplY3QpO1xuICAgIH0pO1xuICB9IGZpbmFsbHkge1xuICAgIGlmIChvbkFsZXJ0Q2FsbGJhY2spIHtcbiAgICAgIHRoaXMuX3dhaXRpbmdBdG9tcy5hbGVydE5vdGlmaWVyLnJlbW92ZUxpc3RlbmVyKE9OX09CU1RSVUNUSU5HX0FMRVJUX0VWRU5ULCBvbkFsZXJ0Q2FsbGJhY2spO1xuICAgIH1cbiAgICB0aGlzLl93YWl0aW5nQXRvbXMuY291bnQtLTtcbiAgfVxufTtcblxuZXh0ZW5zaW9ucy5tb2JpbGVXZWJOYXYgPSBhc3luYyBmdW5jdGlvbiBtb2JpbGVXZWJOYXYgKG5hdlR5cGUpIHtcbiAgdGhpcy5yZW1vdGUuYWxsb3dOYXZpZ2F0aW9uV2l0aG91dFJlbG9hZCA9IHRydWU7XG4gIHRyeSB7XG4gICAgYXdhaXQgdGhpcy5leGVjdXRlQXRvbSgnZXhlY3V0ZV9zY3JpcHQnLCBbYGhpc3RvcnkuJHtuYXZUeXBlfSgpO2AsIG51bGxdKTtcbiAgfSBmaW5hbGx5IHtcbiAgICB0aGlzLnJlbW90ZS5hbGxvd05hdmlnYXRpb25XaXRob3V0UmVsb2FkID0gZmFsc2U7XG4gIH1cbn07XG5cbi8qKlxuICogQHR5cGVkZWYge09iamVjdH0gU2FmYXJpT3B0c1xuICogQHByb3BlcnR5IHtvYmplY3R9IHByZWZlcmVuY2VzIEFuIG9iamVjdCBjb250YWluaW5nIFNhZmFyaSBzZXR0aW5ncyB0byBiZSB1cGRhdGVkLlxuICogVGhlIGxpc3Qgb2YgYXZhaWxhYmxlIHNldHRpbmcgbmFtZXMgYW5kIHRoZWlyIHZhbHVlcyBjb3VsZCBiZSByZXRyaWV2ZWQgYnlcbiAqIGNoYW5naW5nIHRoZSBjb3JyZXNwb25kaW5nIFNhZmFyaSBzZXR0aW5ncyBpbiB0aGUgVUkgYW5kIHRoZW4gaW5zcGVjdGluZ1xuICogJ0xpYnJhcnkvUHJlZmVyZW5jZXMvY29tLmFwcGxlLm1vYmlsZXNhZmFyaS5wbGlzdCcgZmlsZSBpbnNpZGUgb2ZcbiAqIGNvbS5hcHBsZS5tb2JpbGVzYWZhcmkgYXBwIGNvbnRhaW5lci5cbiAqIFRoZSBmdWxsIHBhdGggdG8gdGhlIE1vYmlsZSBTYWZhcmkncyBjb250YWluZXIgY291bGQgYmUgcmV0cmlldmVkIGZyb21cbiAqIGB4Y3J1biBzaW1jdGwgZ2V0X2FwcF9jb250YWluZXIgPHNpbV91ZGlkPiBjb20uYXBwbGUubW9iaWxlc2FmYXJpIGRhdGFgXG4gKiBjb21tYW5kIG91dHB1dC5cbiAqIFVzZSB0aGUgYHhjcnVuIHNpbWN0bCBzcGF3biA8c2ltX3VkaWQ+IGRlZmF1bHRzIHJlYWQgPHBhdGhfdG9fcGxpc3Q+YCBjb21tYW5kXG4gKiB0byBwcmludCB0aGUgcGxpc3QgY29udGVudCB0byB0aGUgVGVybWluYWwuXG4gKi9cblxuLyoqXG4gKiBVcGRhdGVzIHByZWZlcmVuY2VzIG9mIE1vYmlsZSBTYWZhcmkgb24gU2ltdWxhdG9yXG4gKlxuICogQHBhcmFtIHtTYWZhcmlPcHRzfSBvcHRzXG4gKi9cbmNvbW1hbmRzLm1vYmlsZVVwZGF0ZVNhZmFyaVByZWZlcmVuY2VzID0gYXN5bmMgZnVuY3Rpb24gbW9iaWxlVXBkYXRlU2FmYXJpUHJlZmVyZW5jZXMgKG9wdHMgPSB7fSkge1xuICBpZiAoIXRoaXMuaXNTaW11bGF0b3IoKSkge1xuICAgIHRocm93IG5ldyBFcnJvcignVGhpcyBleHRlbnNpb24gaXMgb25seSBhdmFpbGFibGUgZm9yIFNpbXVsYXRvcicpO1xuICB9XG4gIGNvbnN0IHsgcHJlZmVyZW5jZXMgfSA9IG9wdHM7XG4gIGlmICghXy5pc1BsYWluT2JqZWN0KHByZWZlcmVuY2VzKSkge1xuICAgIHRocm93IG5ldyBlcnJvcnMuSW52YWxpZEFyZ3VtZW50RXJyb3IoJ1wicHJlZmVyZW5jZXNcIiBhcmd1bWVudCBtdXN0IGJlIGEgdmFsaWQgb2JqZWN0Jyk7XG4gIH1cblxuICB0aGlzLmxvZy5kZWJ1ZyhgQWJvdXQgdG8gdXBkYXRlIFNhZmFyaSBwcmVmZXJlbmNlczogJHtKU09OLnN0cmluZ2lmeShwcmVmZXJlbmNlcyl9YCk7XG4gIGF3YWl0IHRoaXMub3B0cy5kZXZpY2UudXBkYXRlU2FmYXJpU2V0dGluZ3MocHJlZmVyZW5jZXMpO1xufTtcblxuT2JqZWN0LmFzc2lnbihjb21tYW5kcywgZXh0ZW5zaW9ucywgaGVscGVycyk7XG5cbmV4cG9ydCBkZWZhdWx0IGNvbW1hbmRzO1xuIl0sIm1hcHBpbmdzIjoiOzs7Ozs7OztBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBRUEsTUFBTUEscUJBQXFCLEdBQUcsRUFBRTtBQUNoQyxNQUFNQyw4QkFBOEIsR0FBRyxFQUFFO0FBQ3pDLE1BQU1DLHdCQUF3QixHQUFHLEVBQUU7QUFDbkMsTUFBTUMseUJBQXlCLEdBQUcsRUFBRTtBQUNwQyxNQUFNQyw0QkFBNEIsR0FBRyxFQUFFO0FBRXZDLE1BQU1DLCtCQUErQixHQUFHLEVBQUU7QUFDMUMsTUFBTUMsd0JBQXdCLEdBQUcsRUFBRTtBQUNuQyxNQUFNQyxjQUFjLEdBQUcsRUFBRTtBQUN6QixNQUFNQyx3Q0FBd0MsR0FBRyxFQUFFO0FBQ25ELE1BQU1DLHNDQUFzQyxHQUFHLEVBQUU7QUFFakQsTUFBTUMsb0JBQW9CLEdBQUcsQ0FDM0I7RUFBQ0MsQ0FBQyxFQUFFLElBQUk7RUFBRUMsQ0FBQyxFQUFFO0FBQUksQ0FBQyxFQUNsQjtFQUFDRCxDQUFDLEVBQUUsR0FBRztFQUFFQyxDQUFDLEVBQUU7QUFBSSxDQUFDLEVBQ2pCO0VBQUNELENBQUMsRUFBRSxJQUFJO0VBQUVDLENBQUMsRUFBRTtBQUFJLENBQUMsQ0FDbkI7QUFFRCxNQUFNO0VBQUVDO0FBQTJCLENBQUMsR0FBR0MsYUFBSTtBQUUzQyxNQUFNQyxvQkFBb0IsR0FBRyxDQUFDLEdBQUcsS0FBSztBQUN0QyxNQUFNQyxvQkFBb0IsR0FBRyxJQUFJO0FBRWpDLE1BQU1DLDBCQUEwQixHQUFHLE9BQU87QUFFMUMsTUFBTUMsT0FBTyxH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