appium-ios-simulator 4.1.1 → 4.1.2
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/build/lib/geolocation.js +17 -4
- package/build/lib/utils.js +20 -23
- package/lib/geolocation.js +11 -8
- package/lib/utils.js +19 -21
- package/package.json +1 -1
package/build/lib/geolocation.js
CHANGED
|
@@ -19,9 +19,16 @@ var _teen_process = require("teen_process");
|
|
|
19
19
|
|
|
20
20
|
var _support = require("@appium/support");
|
|
21
21
|
|
|
22
|
-
var _utils = require("./utils");
|
|
23
|
-
|
|
24
22
|
const LYFT_SET_LOCATION = 'set-simulator-location';
|
|
23
|
+
const DECIMAL_SEPARATOR_SCRIPT = `
|
|
24
|
+
use framework "Foundation"
|
|
25
|
+
use framework "AppKit"
|
|
26
|
+
use scripting additions
|
|
27
|
+
|
|
28
|
+
set theFormatter to current application's NSNumberFormatter's new()
|
|
29
|
+
set result to theFormatter's decimalSeparator()
|
|
30
|
+
log result as string
|
|
31
|
+
`;
|
|
25
32
|
|
|
26
33
|
async function setLocationWithLyft(udid, latitude, longitude) {
|
|
27
34
|
try {
|
|
@@ -50,7 +57,13 @@ async function setLocationWithIdb(idb, latitude, longitude) {
|
|
|
50
57
|
}
|
|
51
58
|
|
|
52
59
|
async function setLocationWithAppleScript(sim, latitude, longitude, menu = 'Debug') {
|
|
53
|
-
const
|
|
60
|
+
const {
|
|
61
|
+
stdout,
|
|
62
|
+
stderr
|
|
63
|
+
} = await (0, _teen_process.exec)('osascript', ['-e', DECIMAL_SEPARATOR_SCRIPT]);
|
|
64
|
+
|
|
65
|
+
const decimalSeparator = _lodash.default.trim(stdout || stderr);
|
|
66
|
+
|
|
54
67
|
const [latitudeStr, longitudeStr] = [latitude, longitude].map(coord => `${coord}`.replace(/[.,]/, decimalSeparator));
|
|
55
68
|
const output = await sim.executeUIClientScript(`
|
|
56
69
|
tell application "System Events"
|
|
@@ -78,4 +91,4 @@ async function setLocationWithAppleScript(sim, latitude, longitude, menu = 'Debu
|
|
|
78
91
|
}require('source-map-support').install();
|
|
79
92
|
|
|
80
93
|
|
|
81
|
-
//# sourceMappingURL=data:application/json;charset=utf8;base64,
|
|
94
|
+
//# sourceMappingURL=data:application/json;charset=utf8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibGliL2dlb2xvY2F0aW9uLmpzIiwibmFtZXMiOlsiTFlGVF9TRVRfTE9DQVRJT04iLCJERUNJTUFMX1NFUEFSQVRPUl9TQ1JJUFQiLCJzZXRMb2NhdGlvbldpdGhMeWZ0IiwidWRpZCIsImxhdGl0dWRlIiwibG9uZ2l0dWRlIiwiZnMiLCJ3aGljaCIsImUiLCJFcnJvciIsImV4ZWMiLCJzdGRlcnIiLCJtZXNzYWdlIiwic2V0TG9jYXRpb25XaXRoSWRiIiwiaWRiIiwic2V0TG9jYXRpb24iLCJzZXRMb2NhdGlvbldpdGhBcHBsZVNjcmlwdCIsInNpbSIsIm1lbnUiLCJzdGRvdXQiLCJkZWNpbWFsU2VwYXJhdG9yIiwiXyIsInRyaW0iLCJsYXRpdHVkZVN0ciIsImxvbmdpdHVkZVN0ciIsIm1hcCIsImNvb3JkIiwicmVwbGFjZSIsIm91dHB1dCIsImV4ZWN1dGVVSUNsaWVudFNjcmlwdCIsImxvZyIsImRlYnVnIl0sInNvdXJjZVJvb3QiOiIuLi8uLiIsInNvdXJjZXMiOlsibGliL2dlb2xvY2F0aW9uLmpzIl0sInNvdXJjZXNDb250ZW50IjpbImltcG9ydCBfIGZyb20gJ2xvZGFzaCc7XG5pbXBvcnQgbG9nIGZyb20gJy4vbG9nZ2VyJztcbmltcG9ydCB7IGV4ZWMgfSBmcm9tICd0ZWVuX3Byb2Nlc3MnO1xuaW1wb3J0IHsgZnMgfSBmcm9tICdAYXBwaXVtL3N1cHBvcnQnO1xuXG5jb25zdCBMWUZUX1NFVF9MT0NBVElPTiA9ICdzZXQtc2ltdWxhdG9yLWxvY2F0aW9uJztcbmNvbnN0IERFQ0lNQUxfU0VQQVJBVE9SX1NDUklQVCA9IGBcbnVzZSBmcmFtZXdvcmsgXCJGb3VuZGF0aW9uXCJcbnVzZSBmcmFtZXdvcmsgXCJBcHBLaXRcIlxudXNlIHNjcmlwdGluZyBhZGRpdGlvbnNcblxuc2V0IHRoZUZvcm1hdHRlciB0byBjdXJyZW50IGFwcGxpY2F0aW9uJ3MgTlNOdW1iZXJGb3JtYXR0ZXIncyBuZXcoKVxuc2V0IHJlc3VsdCB0byB0aGVGb3JtYXR0ZXIncyBkZWNpbWFsU2VwYXJhdG9yKClcbmxvZyByZXN1bHQgYXMgc3RyaW5nXG5gO1xuXG4vKipcbiAqIFNldCBjdXN0b20gZ2VvbG9jYXRpb24gcGFyYW1ldGVycyBmb3IgdGhlIGdpdmVuIFNpbXVsYXRvciB1c2luZyBMWUZUX1NFVF9MT0NBVElPTi5cbiAqXG4gKiBAcGFyYW0ge3N0cmluZ30gdWRpZCAtIFRoZSB1ZGlkIHRvIHNldCB0aGUgZ2l2ZW4gZ2VvbG9jYXRpb25cbiAqIEBwYXJhbSB7c3RyaW5nfG51bWJlcn0gbGF0aXR1ZGUgLSBUaGUgbGF0aXR1ZGUgdmFsdWUsIHdoaWNoIGlzIGdvaW5nIHRvIGJlIGVudGVyZWRcbiAqICAgaW50byB0aGUgY29ycmVzcG9uZGluZyBlZGl0IGZpZWxkLCBmb3IgZXhhbXBsZSAnMzksMDAwNicuXG4gKiBAcGFyYW0ge3N0cmluZ3xudW1iZXJ9IGxvbmdpdHVkZSAtIFRoZSBsb25naXR1ZGUgdmFsdWUsIHdoaWNoIGlzIGdvaW5nIHRvIGJlIGVudGVyZWRcbiAqICAgaW50byB0aGUgY29ycmVzcG9uZGluZyBlZGl0IGZpZWxkLCBmb3IgZXhhbXBsZSAnMTksMDA2OCcuXG4gKiBAdGhyb3dzIHtFcnJvcn0gSWYgaXQgZmFpbGVkIHRvIHNldCB0aGUgbG9jYXRpb25cbiAqL1xuYXN5bmMgZnVuY3Rpb24gc2V0TG9jYXRpb25XaXRoTHlmdCAodWRpZCwgbGF0aXR1ZGUsIGxvbmdpdHVkZSkge1xuICB0cnkge1xuICAgIGF3YWl0IGZzLndoaWNoKExZRlRfU0VUX0xPQ0FUSU9OKTtcbiAgfSBjYXRjaCAoZSkge1xuICAgIHRocm93IG5ldyBFcnJvcihgJyR7TFlGVF9TRVRfTE9DQVRJT059JyBiaW5hcnkgaGFzIG5vdCBiZWVuIGZvdW5kIGluIHlvdXIgUEFUSC4gYCArXG4gICAgICAnUGxlYXNlIGluc3RhbGwgaXQgYXMgXCJicmV3IGluc3RhbGwgbHlmdC9mb3JtdWxhZS9zZXQtc2ltdWxhdG9yLWxvY2F0aW9uXCIgYnkgYnJldyBvciAnICtcbiAgICAgICdyZWFkIGh0dHBzOi8vZ2l0aHViLmNvbS9seWZ0L3NldC1zaW11bGF0b3ItbG9jYXRpb24gdG8gc2V0IHRoZSBiaW5hcnkgYnkgbWFudWFsIHRvICcgK1xuICAgICAgJ2JlIGFibGUgdG8gc2V0IGdlb2xvY2F0aW9uIGJ5IHRoZSBsaWJyYXJ5LicpO1xuICB9XG5cbiAgdHJ5IHtcbiAgICBhd2FpdCBleGVjKExZRlRfU0VUX0xPQ0FUSU9OLCBbXG4gICAgICAnLWMnLCBsYXRpdHVkZSwgbG9uZ2l0dWRlLFxuICAgICAgJy11JywgdWRpZFxuICAgIF0pO1xuICB9IGNhdGNoIChlKSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKGBGYWlsZWQgdG8gc2V0IGdlb2xvY2F0aW9uIHdpdGggJyR7TFlGVF9TRVRfTE9DQVRJT059Jy4gYCArXG4gICAgICBgT3JpZ2luYWwgZXJyb3I6ICR7ZS5zdGRlcnIgfHwgZS5tZXNzYWdlfWApO1xuICB9XG59XG5cbi8qKlxuICogU2V0IGN1c3RvbSBnZW9sb2NhdGlvbiBwYXJhbWV0ZXJzIGZvciB0aGUgZ2l2ZW4gU2ltdWxhdG9yIHVzaW5nIGlkYi5cbiAqXG4gKiBAcGFyYW0ge09iamVjdH0gaWRiIC0gVGhlIElEQiBpbnN0YW5jZVxuICogQHBhcmFtIHtzdHJpbmd8bnVtYmVyfSBsYXRpdHVkZSAtIFRoZSBsYXRpdHVkZSB2YWx1ZSwgd2hpY2ggaXMgZ29pbmcgdG8gYmUgZW50ZXJlZFxuICogICBpbnRvIHRoZSBjb3JyZXNwb25kaW5nIGVkaXQgZmllbGQsIGZvciBleGFtcGxlICczOSwwMDA2Jy5cbiAqIEBwYXJhbSB7c3RyaW5nfG51bWJlcn0gbG9uZ2l0dWRlIC0gVGhlIGxvbmdpdHVkZSB2YWx1ZSwgd2hpY2ggaXMgZ29pbmcgdG8gYmUgZW50ZXJlZFxuICogICBpbnRvIHRoZSBjb3JyZXNwb25kaW5nIGVkaXQgZmllbGQsIGZvciBleGFtcGxlICcxOSwwMDY4Jy5cbiAqIEB0aHJvd3Mge0Vycm9yfSBJZiBpdCBmYWlsZWQgdG8gc2V0IHRoZSBsb2NhdGlvblxuICovXG5hc3luYyBmdW5jdGlvbiBzZXRMb2NhdGlvbldpdGhJZGIgKGlkYiwgbGF0aXR1ZGUsIGxvbmdpdHVkZSkge1xuICBpZiAoIWlkYikge1xuICAgIHRocm93IG5ldyBFcnJvcignRmFpbGVkIHRvIHNldCBnZW9sb2NhdGlvbiB3aXRoIGlkYiBiZWNhdXNlIGl0IGlzIG5vdCBpbnN0YWxsZWQgb3IgdGhlIFwibGF1bmNoV2l0aElEQlwiIGNhcGFiaWxpdHkgd2FzIG5vdCBzZXQnKTtcbiAgfVxuXG4gIHRyeSB7XG4gICAgYXdhaXQgaWRiLnNldExvY2F0aW9uKGxhdGl0dWRlLCBsb25naXR1ZGUpO1xuICB9IGNhdGNoIChlKSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKGBGYWlsZWQgdG8gc2V0IGdlb2xvY2F0aW9uIHdpdGggaWRiLiBPcmlnaW5hbCBlcnJvcjogJHtlLnN0ZGVyciB8fCBlLm1lc3NhZ2V9YCk7XG4gIH1cbn1cblxuXG4vKipcbiAqIFNldCBjdXN0b20gZ2VvbG9jYXRpb24gcGFyYW1ldGVycyBmb3IgdGhlIGdpdmVuIFNpbXVsYXRvciB1c2luZyBBcHBsZVNjcmlwdFxuICpcbiAqIEBwYXJhbSB7T2JqZWN0fSBzaW0gLSBUaGUgU2ltdWxhdG9yWGNvZGUgb2JqZWN0XG4gKiBAcGFyYW0ge3N0cmluZ3xudW1iZXJ9IGxhdGl0dWRlIC0gVGhlIGxhdGl0dWRlIHZhbHVlLCB3aGljaCBpcyBnb2luZyB0byBiZSBlbnRlcmVkXG4gKiAgIGludG8gdGhlIGNvcnJlc3BvbmRpbmcgZWRpdCBmaWVsZCwgZm9yIGV4YW1wbGUgJzM5LDAwMDYnLlxuICogQHBhcmFtIHtzdHJpbmd8bnVtYmVyfSBsb25naXR1ZGUgLSBUaGUgbG9uZ2l0dWRlIHZhbHVlLCB3aGljaCBpcyBnb2luZyB0byBiZSBlbnRlcmVkXG4gKiAgIGludG8gdGhlIGNvcnJlc3BvbmRpbmcgZWRpdCBmaWVsZCwgZm9yIGV4YW1wbGUgJzE5LDAwNjgnLlxuICogQHBhcmFtIHtzdHJpbmd9IFttZW51PURlYnVnXSAtIFRoZSBtZW51IGZpZWxkIGluIHdoaWNoIHRoZSAnTG9jYXRpb24nIGZlYXR1cmUgaXMgZm91bmRcbiAqIEB0aHJvd3Mge0Vycm9yfSBJZiBpdCBmYWlsZWQgdG8gc2V0IHRoZSBsb2NhdGlvblxuICovXG5hc3luYyBmdW5jdGlvbiBzZXRMb2NhdGlvbldpdGhBcHBsZVNjcmlwdCAoc2ltLCBsYXRpdHVkZSwgbG9uZ2l0dWRlLCBtZW51ID0gJ0RlYnVnJykge1xuICAvLyBNYWtlIHN1cmUgc3lzdGVtLXdpZGUgZGVjaW1hbCBzZXBhcmF0b3IgaXMgdXNlZFxuICBjb25zdCB7c3Rkb3V0LCBzdGRlcnJ9ID0gYXdhaXQgZXhlYygnb3Nhc2NyaXB0JywgWyctZScsIERFQ0lNQUxfU0VQQVJBVE9SX1NDUklQVF0pO1xuICBjb25zdCBkZWNpbWFsU2VwYXJhdG9yID0gXy50cmltKHN0ZG91dCB8fCBzdGRlcnIpO1xuICBjb25zdCBbbGF0aXR1ZGVTdHIsIGxvbmdpdHVkZVN0cl0gPSBbbGF0aXR1ZGUsIGxvbmdpdHVkZV1cbiAgICAubWFwKChjb29yZCkgPT4gYCR7Y29vcmR9YC5yZXBsYWNlKC9bLixdLywgZGVjaW1hbFNlcGFyYXRvcikpO1xuXG4gIGNvbnN0IG91dHB1dCA9IGF3YWl0IHNpbS5leGVjdXRlVUlDbGllbnRTY3JpcHQoYFxuICAgIHRlbGwgYXBwbGljYXRpb24gXCJTeXN0ZW0gRXZlbnRzXCJcbiAgICAgIHRlbGwgcHJvY2VzcyBcIlNpbXVsYXRvclwiXG4gICAgICAgIHNldCBmZWF0dXJlTmFtZSB0byBcIkN1c3RvbSBMb2NhdGlvblwiXG4gICAgICAgIHNldCBkc3RNZW51SXRlbSB0byBtZW51IGl0ZW0gKGZlYXR1cmVOYW1lICYgXCLigKZcIikgb2YgbWVudSAxIG9mIG1lbnUgaXRlbSBcIkxvY2F0aW9uXCIgb2YgbWVudSAxIG9mIG1lbnUgYmFyIGl0ZW0gXCIke21lbnV9XCIgb2YgbWVudSBiYXIgMVxuICAgICAgICBjbGljayBkc3RNZW51SXRlbVxuICAgICAgICBkZWxheSAxXG4gICAgICAgIHNldCB2YWx1ZSBvZiB0ZXh0IGZpZWxkIDEgb2Ygd2luZG93IGZlYXR1cmVOYW1lIHRvIFwiJHtsYXRpdHVkZVN0cn1cIlxuICAgICAgICBkZWxheSAwLjVcbiAgICAgICAgc2V0IHZhbHVlIG9mIHRleHQgZmllbGQgMiBvZiB3aW5kb3cgZmVhdHVyZU5hbWUgdG8gXCIke2xvbmdpdHVkZVN0cn1cIlxuICAgICAgICBkZWxheSAwLjVcbiAgICAgICAgY2xpY2sgYnV0dG9uIFwiT0tcIiBvZiB3aW5kb3cgZmVhdHVyZU5hbWVcbiAgICAgICAgZGVsYXkgMC41XG4gICAgICAgIHNldCBpc0ludmlzaWJsZSB0byAobm90IChleGlzdHMgKHdpbmRvdyBmZWF0dXJlTmFtZSkpKVxuICAgICAgZW5kIHRlbGxcbiAgICBlbmQgdGVsbFxuICBgKTtcbiAgbG9nLmRlYnVnKGBHZW9sb2NhdGlvbiBwYXJhbWV0ZXJzIGRpYWxvZyBhY2NlcHRlZDogJHtvdXRwdXR9YCk7XG4gIGlmIChfLnRyaW0ob3V0cHV0KSAhPT0gJ3RydWUnKSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKGBGYWlsZWQgdG8gc2V0IGdlb2xvY2F0aW9uIHdpdGggQXBwbGVTY3JpcHQuIE9yaWdpbmFsIGVycm9yOiAke291dHB1dH1gKTtcbiAgfVxufVxuXG5leHBvcnQge1xuICBzZXRMb2NhdGlvbldpdGhMeWZ0LCBzZXRMb2NhdGlvbldpdGhJZGIsIHNldExvY2F0aW9uV2l0aEFwcGxlU2NyaXB0XG59O1xuIl0sIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7Ozs7O0FBQUE7O0FBQ0E7O0FBQ0E7O0FBQ0E7O0FBRUEsTUFBTUEsaUJBQWlCLEdBQUcsd0JBQTFCO0FBQ0EsTUFBTUMsd0JBQXdCLEdBQUk7QUFDbEM7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxDQVJBOztBQW9CQSxlQUFlQyxtQkFBZixDQUFvQ0MsSUFBcEMsRUFBMENDLFFBQTFDLEVBQW9EQyxTQUFwRCxFQUErRDtFQUM3RCxJQUFJO0lBQ0YsTUFBTUMsV0FBQSxDQUFHQyxLQUFILENBQVNQLGlCQUFULENBQU47RUFDRCxDQUZELENBRUUsT0FBT1EsQ0FBUCxFQUFVO0lBQ1YsTUFBTSxJQUFJQyxLQUFKLENBQVcsSUFBR1QsaUJBQWtCLDRDQUF0QixHQUNkLHNGQURjLEdBRWQscUZBRmMsR0FHZCw0Q0FISSxDQUFOO0VBSUQ7O0VBRUQsSUFBSTtJQUNGLE1BQU0sSUFBQVUsa0JBQUEsRUFBS1YsaUJBQUwsRUFBd0IsQ0FDNUIsSUFENEIsRUFDdEJJLFFBRHNCLEVBQ1pDLFNBRFksRUFFNUIsSUFGNEIsRUFFdEJGLElBRnNCLENBQXhCLENBQU47RUFJRCxDQUxELENBS0UsT0FBT0ssQ0FBUCxFQUFVO0lBQ1YsTUFBTSxJQUFJQyxLQUFKLENBQVcsbUNBQWtDVCxpQkFBa0IsS0FBckQsR0FDYixtQkFBa0JRLENBQUMsQ0FBQ0csTUFBRixJQUFZSCxDQUFDLENBQUNJLE9BQVEsRUFEckMsQ0FBTjtFQUVEO0FBQ0Y7O0FBWUQsZUFBZUMsa0JBQWYsQ0FBbUNDLEdBQW5DLEVBQXdDVixRQUF4QyxFQUFrREMsU0FBbEQsRUFBNkQ7RUFDM0QsSUFBSSxDQUFDUyxHQUFMLEVBQVU7SUFDUixNQUFNLElBQUlMLEtBQUosQ0FBVSw4R0FBVixDQUFOO0VBQ0Q7O0VBRUQsSUFBSTtJQUNGLE1BQU1LLEdBQUcsQ0FBQ0MsV0FBSixDQUFnQlgsUUFBaEIsRUFBMEJDLFNBQTFCLENBQU47RUFDRCxDQUZELENBRUUsT0FBT0csQ0FBUCxFQUFVO0lBQ1YsTUFBTSxJQUFJQyxLQUFKLENBQVcsdURBQXNERCxDQUFDLENBQUNHLE1BQUYsSUFBWUgsQ0FBQyxDQUFDSSxPQUFRLEVBQXZGLENBQU47RUFDRDtBQUNGOztBQWNELGVBQWVJLDBCQUFmLENBQTJDQyxHQUEzQyxFQUFnRGIsUUFBaEQsRUFBMERDLFNBQTFELEVBQXFFYSxJQUFJLEdBQUcsT0FBNUUsRUFBcUY7RUFFbkYsTUFBTTtJQUFDQyxNQUFEO0lBQVNSO0VBQVQsSUFBbUIsTUFBTSxJQUFBRCxrQkFBQSxFQUFLLFdBQUwsRUFBa0IsQ0FBQyxJQUFELEVBQU9ULHdCQUFQLENBQWxCLENBQS9COztFQUNBLE1BQU1tQixnQkFBZ0IsR0FBR0MsZUFBQSxDQUFFQyxJQUFGLENBQU9ILE1BQU0sSUFBSVIsTUFBakIsQ0FBekI7O0VBQ0EsTUFBTSxDQUFDWSxXQUFELEVBQWNDLFlBQWQsSUFBOEIsQ0FBQ3BCLFFBQUQsRUFBV0MsU0FBWCxFQUNqQ29CLEdBRGlDLENBQzVCQyxLQUFELElBQVksR0FBRUEsS0FBTSxFQUFULENBQVdDLE9BQVgsQ0FBbUIsTUFBbkIsRUFBMkJQLGdCQUEzQixDQURrQixDQUFwQztFQUdBLE1BQU1RLE1BQU0sR0FBRyxNQUFNWCxHQUFHLENBQUNZLHFCQUFKLENBQTJCO0FBQ2xEO0FBQ0E7QUFDQTtBQUNBLHlIQUF5SFgsSUFBSztBQUM5SDtBQUNBO0FBQ0EsOERBQThESyxXQUFZO0FBQzFFO0FBQ0EsOERBQThEQyxZQUFhO0FBQzNFO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEdBaEJ1QixDQUFyQjs7RUFpQkFNLGVBQUEsQ0FBSUMsS0FBSixDQUFXLDJDQUEwQ0gsTUFBTyxFQUE1RDs7RUFDQSxJQUFJUCxlQUFBLENBQUVDLElBQUYsQ0FBT00sTUFBUCxNQUFtQixNQUF2QixFQUErQjtJQUM3QixNQUFNLElBQUluQixLQUFKLENBQVcsK0RBQThEbUIsTUFBTyxFQUFoRixDQUFOO0VBQ0Q7QUFDRiJ9
|
package/build/lib/utils.js
CHANGED
|
@@ -5,7 +5,7 @@ var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefau
|
|
|
5
5
|
Object.defineProperty(exports, "__esModule", {
|
|
6
6
|
value: true
|
|
7
7
|
});
|
|
8
|
-
exports.
|
|
8
|
+
exports.SAFARI_STARTUP_TIMEOUT = exports.MOBILE_SAFARI_BUNDLE_ID = void 0;
|
|
9
9
|
exports.activateApp = activateApp;
|
|
10
10
|
exports.endAllSimulatorDaemons = endAllSimulatorDaemons;
|
|
11
11
|
exports.execSQLiteQuery = execSQLiteQuery;
|
|
@@ -47,21 +47,24 @@ const SAFARI_STARTUP_TIMEOUT = 25 * 1000;
|
|
|
47
47
|
exports.SAFARI_STARTUP_TIMEOUT = SAFARI_STARTUP_TIMEOUT;
|
|
48
48
|
const MOBILE_SAFARI_BUNDLE_ID = 'com.apple.mobilesafari';
|
|
49
49
|
exports.MOBILE_SAFARI_BUNDLE_ID = MOBILE_SAFARI_BUNDLE_ID;
|
|
50
|
-
const SYSTEM_PYTHON_PATH = '/usr/bin/python3';
|
|
51
|
-
exports.SYSTEM_PYTHON_PATH = SYSTEM_PYTHON_PATH;
|
|
52
50
|
|
|
53
51
|
const PROCESS_LAUNCH_OK_PATTERN = bundleId => new RegExp(`${bundleId.replace('.', '\\.')}:\\s+\\d+`);
|
|
54
52
|
|
|
55
|
-
const APP_ACTIVATION_SCRIPT = pid =>
|
|
56
|
-
|
|
57
|
-
|
|
58
|
-
|
|
59
|
-
|
|
60
|
-
|
|
61
|
-
if
|
|
62
|
-
|
|
63
|
-
|
|
64
|
-
|
|
53
|
+
const APP_ACTIVATION_SCRIPT = pid => `
|
|
54
|
+
use framework "Foundation"
|
|
55
|
+
use framework "AppKit"
|
|
56
|
+
use scripting additions
|
|
57
|
+
|
|
58
|
+
set theApp to current application's NSRunningApplication's runningApplicationWithProcessIdentifier:${pid}
|
|
59
|
+
if theApp = null then
|
|
60
|
+
log "Cannot find Simulator window under PID ${pid}. Is it running?"
|
|
61
|
+
error number 1
|
|
62
|
+
end if
|
|
63
|
+
set result to theApp's activateWithOptions:3
|
|
64
|
+
if not result then
|
|
65
|
+
log "Cannot activate Simulator window under PID ${pid}. Is it running?"
|
|
66
|
+
error number 1
|
|
67
|
+
end if
|
|
65
68
|
`;
|
|
66
69
|
|
|
67
70
|
const BIOMETRICS = {
|
|
@@ -346,16 +349,10 @@ async function getDeveloperRoot() {
|
|
|
346
349
|
}
|
|
347
350
|
|
|
348
351
|
async function activateApp(pid) {
|
|
349
|
-
const tmpScript = await _support.tempDir.path({
|
|
350
|
-
prefix: `activate_sim_${_support.util.uuidV4().substring(0, 8)}`,
|
|
351
|
-
suffix: '.py'
|
|
352
|
-
});
|
|
353
|
-
await _support.fs.writeFile(tmpScript, APP_ACTIVATION_SCRIPT(pid), 'utf8');
|
|
354
|
-
|
|
355
352
|
try {
|
|
356
|
-
await (0, _teen_process.exec)(
|
|
357
|
-
}
|
|
358
|
-
|
|
353
|
+
await (0, _teen_process.exec)('osascript', ['-e', APP_ACTIVATION_SCRIPT(pid)]);
|
|
354
|
+
} catch (e) {
|
|
355
|
+
throw new Error(`Simulator window cannot be activated. Original error: ${e.stderr || e.message}`);
|
|
359
356
|
}
|
|
360
357
|
}
|
|
361
358
|
|
|
@@ -388,4 +385,4 @@ async function launchApp(simctl, bundleId, timeoutMs = 25000) {
|
|
|
388
385
|
}require('source-map-support').install();
|
|
389
386
|
|
|
390
387
|
|
|
391
|
-
//# sourceMappingURL=data:application/json;charset=utf8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibGliL3V0aWxzLmpzIiwibmFtZXMiOlsiREVGQVVMVF9TSU1fU0hVVERPV05fVElNRU9VVCIsIlNBRkFSSV9TVEFSVFVQX1RJTUVPVVQiLCJNT0JJTEVfU0FGQVJJX0JVTkRMRV9JRCIsIlNZU1RFTV9QWVRIT05fUEFUSCIsIlBST0NFU1NfTEFVTkNIX09LX1BBVFRFUk4iLCJidW5kbGVJZCIsIlJlZ0V4cCIsInJlcGxhY2UiLCJBUFBfQUNUSVZBVElPTl9TQ1JJUFQiLCJwaWQiLCJCSU9NRVRSSUNTIiwidG91Y2hJZCIsImZhY2VJZCIsInRvQmlvbWV0cmljRG9tYWluQ29tcG9uZW50IiwibmFtZSIsIkVycm9yIiwiSlNPTiIsInN0cmluZ2lmeSIsIl8iLCJrZXlzIiwicGtpbGwiLCJhcHBOYW1lIiwiZm9yY2VLaWxsIiwiYXJncyIsInB1c2giLCJleGVjIiwiZXJyIiwiaXNVbmRlZmluZWQiLCJjb2RlIiwibG9nIiwiZXJyb3IiLCJtZXNzYWdlIiwia2lsbEFsbFNpbXVsYXRvcnMiLCJ0aW1lb3V0IiwiZGVidWciLCJ4Y29kZVZlcnNpb24iLCJnZXRWZXJzaW9uIiwibWFqb3IiLCJpZ24iLCJwaWRzIiwic3Rkb3V0IiwidHJpbSIsInNwbGl0IiwiZSIsImlzRW1wdHkiLCJ3YXJuIiwiam9pbiIsIm1hcCIsInJlbWFpbmluZ0RldmljZXMiLCJhbGxTaW1zQXJlRG93biIsImRldmljZXMiLCJTaW1jdGwiLCJnZXREZXZpY2VzIiwiZmxhdHRlbiIsInZhbHVlcyIsImV2ZXJ5Iiwic2ltIiwic3RhdGUiLCJ0b0xvd2VyQ2FzZSIsImRvbmUiLCJzZGsiLCJ1ZGlkIiwid2FpdEZvckNvbmRpdGlvbiIsIndhaXRNcyIsImludGVydmFsTXMiLCJsZW5ndGgiLCJkZXZpY2UiLCJlbmRBbGxTaW11bGF0b3JEYWVtb25zIiwic2VydmljZVBhdHRlcm4iLCJsYXVuY2hDdGxDb21tYW5kIiwic3RvcENtZCIsInJlbW92ZUNtZCIsImdldFNpbXVsYXRvckluZm8iLCJvcHRzIiwiZGV2aWNlc1NldFBhdGgiLCJ0b1BhaXJzIiwicGFpciIsInJlZHVjZSIsImEiLCJiIiwiY29uY2F0IiwiZmluZCIsInNpbUV4aXN0cyIsInNhZmVSaW1SYWYiLCJkZWxQYXRoIiwidHJ5TnVtIiwiZnMiLCJyaW1yYWYiLCJpbmRleE9mIiwiaW5zdGFsbFNTTENlcnQiLCJwZW1UZXh0Iiwid2hpY2giLCJlcnJvckFuZFRocm93IiwidGVtcEZpbGVOYW1lIiwicGF0aCIsInJlc29sdmUiLCJ0ZW1wRGlyIiwib3BlbkRpciIsInBhdGhUb0tleWNoYWluIiwiU2ltdWxhdG9yIiwiZ2V0RGlyIiwid3JpdGVGaWxlIiwic3RhdCIsImNlcnRpZmljYXRlIiwiQ2VydGlmaWNhdGUiLCJhZGQiLCJ1bmxpbmsiLCJ1bmluc3RhbGxTU0xDZXJ0IiwiX19kaXJuYW1lIiwicmVtb3ZlIiwiaGFzU1NMQ2VydCIsImhhcyIsImV4ZWNTUUxpdGVRdWVyeSIsImRiIiwicXVlcnkiLCJxdWVyeVBhcmFtcyIsInF1ZXJ5VG9rZW5zIiwiZm9ybWF0dGVkUXVlcnkiLCJwYXJhbSIsImZvckVhY2giLCJpIiwic3RkZXJyIiwiZ2V0RGV2ZWxvcGVyUm9vdCIsImFjdGl2YXRlQXBwIiwidG1wU2NyaXB0IiwicHJlZml4IiwidXRpbCIsInV1aWRWNCIsInN1YnN0cmluZyIsInN1ZmZpeCIsImxhdW5jaEFwcCIsInNpbWN0bCIsInRpbWVvdXRNcyIsImxhc3RFcnJvciIsInRlc3QiLCJtc2ciXSwic291cmNlUm9vdCI6Ii4uLy4uIiwic291cmNlcyI6WyJsaWIvdXRpbHMuanMiXSwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IGxvZyBmcm9tICcuL2xvZ2dlcic7XG5pbXBvcnQgXyBmcm9tICdsb2Rhc2gnO1xuaW1wb3J0IHsgZXhlYyB9IGZyb20gJ3RlZW5fcHJvY2Vzcyc7XG5pbXBvcnQgeyB3YWl0Rm9yQ29uZGl0aW9uIH0gZnJvbSAnYXN5bmNib3gnO1xuaW1wb3J0IHsgZ2V0VmVyc2lvbiB9IGZyb20gJ2FwcGl1bS14Y29kZSc7XG5pbXBvcnQgU2ltY3RsIGZyb20gJ25vZGUtc2ltY3RsJztcbmltcG9ydCB7IGZzLCB0ZW1wRGlyLCB1dGlsIH0gZnJvbSAnQGFwcGl1bS9zdXBwb3J0JztcbmltcG9ydCB7IENlcnRpZmljYXRlIH0gZnJvbSAnLi9jZXJ0aWZpY2F0ZSc7XG5pbXBvcnQgcGF0aCBmcm9tICdwYXRoJztcbmltcG9ydCBTaW11bGF0b3IgZnJvbSAnLi9zaW11bGF0b3IteGNvZGUtNic7XG5cblxuY29uc3QgREVGQVVMVF9TSU1fU0hVVERPV05fVElNRU9VVCA9IDMwMDAwO1xuY29uc3QgU0FGQVJJX1NUQVJUVVBfVElNRU9VVCA9IDI1ICogMTAwMDtcbmNvbnN0IE1PQklMRV9TQUZBUklfQlVORExFX0lEID0gJ2NvbS5hcHBsZS5tb2JpbGVzYWZhcmknO1xuY29uc3QgU1lTVEVNX1BZVEhPTl9QQVRIID0gJy91c3IvYmluL3B5dGhvbjMnO1xuY29uc3QgUFJPQ0VTU19MQVVOQ0hfT0tfUEFUVEVSTiA9IChidW5kbGVJZCkgPT4gbmV3IFJlZ0V4cChgJHtidW5kbGVJZC5yZXBsYWNlKCcuJywgJ1xcXFwuJyl9OlxcXFxzK1xcXFxkK2ApO1xuY29uc3QgQVBQX0FDVElWQVRJT05fU0NSSVBUID0gKHBpZCkgPT4gYCMhJHtTWVNURU1fUFlUSE9OX1BBVEh9XG5cbmZyb20gQXBwS2l0IGltcG9ydCBOU0FwcGxpY2F0aW9uQWN0aXZhdGVJZ25vcmluZ090aGVyQXBwcywgTlNBcHBsaWNhdGlvbkFjdGl2YXRlQWxsV2luZG93c1xuZnJvbSBDb2NvYSBpbXBvcnQgTlNSdW5uaW5nQXBwbGljYXRpb25cblxuYXBwID0gTlNSdW5uaW5nQXBwbGljYXRpb24ucnVubmluZ0FwcGxpY2F0aW9uV2l0aFByb2Nlc3NJZGVudGlmaWVyXygke3BpZH0pXG5pZiBub3QgYXBwOlxuICAgIHJhaXNlIFZhbHVlRXJyb3IoJ0FwcCB3aXRoIFBJRCAke3BpZH0gaXMgbm90IHJ1bm5pbmcnKVxuaWYgbm90IGFwcC5hY3RpdmF0ZVdpdGhPcHRpb25zXyhOU0FwcGxpY2F0aW9uQWN0aXZhdGVBbGxXaW5kb3dzIHwgTlNBcHBsaWNhdGlvbkFjdGl2YXRlSWdub3JpbmdPdGhlckFwcHMpOlxuICAgIHJhaXNlIFZhbHVlRXJyb3IoJ0FwcCB3aXRoIFBJRCAke3BpZH0gY2Fubm90IGJlIGFjdGl2YXRlZCcpXG5gO1xuXG5cbmNvbnN0IEJJT01FVFJJQ1MgPSB7XG4gIHRvdWNoSWQ6ICdmaW5nZXJUb3VjaCcsXG4gIGZhY2VJZDogJ3BlYXJsJyxcbn07XG5cbmZ1bmN0aW9uIHRvQmlvbWV0cmljRG9tYWluQ29tcG9uZW50IChuYW1lKSB7XG4gIGlmICghQklPTUVUUklDU1tuYW1lXSkge1xuICAgIHRocm93IG5ldyBFcnJvcihgJyR7bmFtZX0nIGlzIG5vdCBhIHZhbGlkIGJpb21ldHJpYy4gVXNlIG9uZSBvZjogJHtKU09OLnN0cmluZ2lmeShfLmtleXMoQklPTUVUUklDUykpfWApO1xuICB9XG4gIHJldHVybiBCSU9NRVRSSUNTW25hbWVdO1xufVxuXG4vLyBwZ3JlcC9wa2lsbCBleGl0IGNvZGVzOlxuLy8gMCAgICAgICBPbmUgb3IgbW9yZSBwcm9jZXNzZXMgd2VyZSBtYXRjaGVkLlxuLy8gMSAgICAgICBObyBwcm9jZXNzZXMgd2VyZSBtYXRjaGVkLlxuLy8gMiAgICAgICBJbnZhbGlkIG9wdGlvbnMgd2VyZSBzcGVjaWZpZWQgb24gdGhlIGNvbW1hbmQgbGluZS5cbi8vIDMgICAgICAgQW4gaW50ZXJuYWwgZXJyb3Igb2NjdXJyZWQuXG5cbmFzeW5jIGZ1bmN0aW9uIHBraWxsIChhcHBOYW1lLCBmb3JjZUtpbGwgPSBmYWxzZSkge1xuICBsZXQgYXJncyA9IGZvcmNlS2lsbCA/IFsnLTknXSA6IFtdO1xuICBhcmdzLnB1c2goJy14JywgYXBwTmFtZSk7XG4gIHRyeSB7XG4gICAgYXdhaXQgZXhlYygncGtpbGwnLCBhcmdzKTtcbiAgICByZXR1cm4gMDtcbiAgfSBjYXRjaCAoZXJyKSB7XG4gICAgaWYgKCFfLmlzVW5kZWZpbmVkKGVyci5jb2RlKSkge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKGBDYW5ub3QgZm9yY2VmdWxseSB0ZXJtaW5hdGUgJHthcHBOYW1lfS4gcGtpbGwgZXJyb3IgY29kZTogJHtlcnIuY29kZX1gKTtcbiAgICB9XG4gICAgbG9nLmVycm9yKGBSZWNlaXZlZCB1bmV4cGVjdGVkIGVycm9yIHdoaWxlIHRyeWluZyB0byBraWxsICR7YXBwTmFtZX06ICR7ZXJyLm1lc3NhZ2V9YCk7XG4gICAgdGhyb3cgZXJyO1xuICB9XG59XG5cbmFzeW5jIGZ1bmN0aW9uIGtpbGxBbGxTaW11bGF0b3JzICh0aW1lb3V0ID0gREVGQVVMVF9TSU1fU0hVVERPV05fVElNRU9VVCkge1xuICBsb2cuZGVidWcoJ0tpbGxpbmcgYWxsIGlPUyBTaW11bGF0b3JzJyk7XG4gIGNvbnN0IHhjb2RlVmVyc2lvbiA9IGF3YWl0IGdldFZlcnNpb24odHJ1ZSk7XG4gIGNvbnN0IGFwcE5hbWUgPSB4Y29kZVZlcnNpb24ubWFqb3IgPj0gNyA/ICdTaW11bGF0b3InIDogJ2lPUyBTaW11bGF0b3InO1xuXG4gIC8vIGxhdGVyIHZlcnNpb25zIGFyZSBzbG93ZXIgdG8gY2xvc2VcbiAgdGltZW91dCA9IHRpbWVvdXQgKiAoeGNvZGVWZXJzaW9uLm1ham9yID49IDggPyAyIDogMSk7XG5cbiAgdHJ5IHtcbiAgICBhd2FpdCBleGVjKCd4Y3J1bicsIFsnc2ltY3RsJywgJ3NodXRkb3duJywgeGNvZGVWZXJzaW9uLm1ham9yID4gOCA/ICdhbGwnIDogJ2Jvb3RlZCddLCB7dGltZW91dH0pO1xuICB9IGNhdGNoIChpZ24pIHt9XG5cbiAgY29uc3QgcGlkcyA9IFtdO1xuICB0cnkge1xuICAgIGNvbnN0IHtzdGRvdXR9ID0gYXdhaXQgZXhlYygncGdyZXAnLCBbJy1mJywgYCR7YXBwTmFtZX0uYXBwL0NvbnRlbnRzL01hY09TL2BdKTtcbiAgICBpZiAoc3Rkb3V0LnRyaW0oKSkge1xuICAgICAgcGlkcy5wdXNoKC4uLihzdGRvdXQudHJpbSgpLnNwbGl0KC9cXHMrLykpKTtcbiAgICB9XG4gIH0gY2F0Y2ggKGUpIHtcbiAgICBpZiAoZS5jb2RlID09PSAxKSB7XG4gICAgICBsb2cuZGVidWcoYCR7YXBwTmFtZX0gaXMgbm90IHJ1bm5pbmcuIENvbnRpbnVpbmcuLi5gKTtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgaWYgKF8uaXNFbXB0eShwaWRzKSkge1xuICAgICAgbG9nLndhcm4oYHBncmVwIGVycm9yICR7ZS5jb2RlfSB3aGlsZSBkZXRlY3Rpbmcgd2hldGhlciAke2FwcE5hbWV9IGlzIHJ1bm5pbmcuIFRyeWluZyB0byBraWxsIGFueXdheS5gKTtcbiAgICB9XG4gIH1cbiAgaWYgKCFfLmlzRW1wdHkocGlkcykpIHtcbiAgICBsb2cuZGVidWcoYEtpbGxpbmcgcHJvY2Vzc2VzOiAke3BpZHMuam9pbignLCAnKX1gKTtcbiAgICB0cnkge1xuICAgICAgYXdhaXQgZXhlYygna2lsbCcsIFsnLTknLCAuLi4ocGlkcy5tYXAoKHBpZCkgPT4gYCR7cGlkfWApKV0pO1xuICAgIH0gY2F0Y2ggKGlnbikge31cbiAgfVxuXG4gIGxvZy5kZWJ1ZyhgVXNpbmcgcGtpbGwgdG8ga2lsbCBhcHBsaWNhdGlvbjogJHthcHBOYW1lfWApO1xuICB0cnkge1xuICAgIGF3YWl0IHBraWxsKGFwcE5hbWUsIHRydWUpO1xuICB9IGNhdGNoIChpZ24pIHt9XG5cbiAgLy8gd2FpdCBmb3IgYWxsIHRoZSBkZXZpY2VzIHRvIGJlIHNodXRkb3duIGJlZm9yZSBDb250aW51aW5nXG4gIC8vIGJ1dCBvbmx5IHByaW50IG91dCB0aGUgZmFpbGVkIG9uZXMgd2hlbiB0aGV5IGFyZSBhY3R1YWxseSBmdWxseSBmYWlsZWRcbiAgbGV0IHJlbWFpbmluZ0RldmljZXMgPSBbXTtcbiAgYXN5bmMgZnVuY3Rpb24gYWxsU2ltc0FyZURvd24gKCkge1xuICAgIHJlbWFpbmluZ0RldmljZXMgPSBbXTtcbiAgICBsZXQgZGV2aWNlcyA9IGF3YWl0IG5ldyBTaW1jdGwoKS5nZXREZXZpY2VzKCk7XG4gICAgZGV2aWNlcyA9IF8uZmxhdHRlbihfLnZhbHVlcyhkZXZpY2VzKSk7XG4gICAgcmV0dXJuIF8uZXZlcnkoZGV2aWNlcywgKHNpbSkgPT4ge1xuICAgICAgbGV0IHN0YXRlID0gc2ltLnN0YXRlLnRvTG93ZXJDYXNlKCk7XG4gICAgICBsZXQgZG9uZSA9IHN0YXRlID09PSAnc2h1dGRvd24nIHx8XG4gICAgICAgICAgICAgICAgIHN0YXRlID09PSAndW5hdmFpbGFibGUnIHx8XG4gICAgICAgICAgICAgICAgIHN0YXRlID09PSAnZGlzY29ubmVjdGVkJztcbiAgICAgIGlmICghZG9uZSkge1xuICAgICAgICByZW1haW5pbmdEZXZpY2VzLnB1c2goYCR7c2ltLm5hbWV9ICgke3NpbS5zZGt9LCB1ZGlkOiAke3NpbS51ZGlkfSkgaXMgc3RpbGwgaW4gc3RhdGUgJyR7c3RhdGV9J2ApO1xuICAgICAgfVxuICAgICAgcmV0dXJuIGRvbmU7XG4gICAgfSk7XG4gIH1cbiAgdHJ5IHtcbiAgICBhd2FpdCB3YWl0Rm9yQ29uZGl0aW9uKGFsbFNpbXNBcmVEb3duLCB7XG4gICAgICB3YWl0TXM6IHRpbWVvdXQsXG4gICAgICBpbnRlcnZhbE1zOiAyMDBcbiAgICB9KTtcbiAgfSBjYXRjaCAoZXJyKSB7XG4gICAgaWYgKHJlbWFpbmluZ0RldmljZXMubGVuZ3RoID4gMCkge1xuICAgICAgbG9nLndhcm4oYFRoZSBmb2xsb3dpbmcgZGV2aWNlcyBhcmUgc3RpbGwgbm90IGluIHRoZSBjb3JyZWN0IHN0YXRlIGFmdGVyICR7dGltZW91dH0gbXM6YCk7XG4gICAgICBmb3IgKGxldCBkZXZpY2Ugb2YgcmVtYWluaW5nRGV2aWNlcykge1xuICAgICAgICBsb2cud2FybihgICAgICR7ZGV2aWNlfWApO1xuICAgICAgfVxuICAgIH1cbiAgICB0aHJvdyBlcnI7XG4gIH1cbn1cblxuYXN5bmMgZnVuY3Rpb24gZW5kQWxsU2ltdWxhdG9yRGFlbW9ucyAoKSB7XG4gIGxvZy5kZWJ1ZygnRW5kaW5nIGFsbCBzaW11bGF0b3IgZGFlbW9ucycpO1xuICBmb3IgKGxldCBzZXJ2aWNlUGF0dGVybiBvZiBbJ2NvbS5hcHBsZS5pcGhvbmVzaW11bGF0b3InLCAnY29tLmFwcGxlLkNvcmVTaW11bGF0b3InXSkge1xuICAgIGxvZy5kZWJ1ZyhgS2lsbGluZyBhbnkgb3RoZXIgJHtzZXJ2aWNlUGF0dGVybn0gZGFlbW9uc2ApO1xuICAgIGxldCBsYXVuY2hDdGxDb21tYW5kID0gYGxhdW5jaGN0bCBsaXN0IHwgZ3JlcCAke3NlcnZpY2VQYXR0ZXJufSB8IGN1dCAtZiAzIHwgeGFyZ3MgLW4gMSBsYXVuY2hjdGxgO1xuICAgIHRyeSB7XG4gICAgICBsZXQgc3RvcENtZCA9IGAke2xhdW5jaEN0bENvbW1hbmR9IHN0b3BgO1xuICAgICAgYXdhaXQgZXhlYygnYmFzaCcsIFsnLWMnLCBzdG9wQ21kXSk7XG4gICAgfSBjYXRjaCAoZXJyKSB7XG4gICAgICBsb2cud2FybihgQ291bGQgbm90IHN0b3AgJHtzZXJ2aWNlUGF0dGVybn0gZGFlbW9ucywgY2Fycnlpbmcgb24gYW55d2F5IWApO1xuICAgIH1cbiAgICB0cnkge1xuICAgICAgbGV0IHJlbW92ZUNtZCA9IGAke2xhdW5jaEN0bENvbW1hbmR9IHJlbW92ZWA7XG4gICAgICBhd2FpdCBleGVjKCdiYXNoJywgWyctYycsIHJlbW92ZUNtZF0pO1xuICAgIH0gY2F0Y2ggKGVycikge1xuICAgICAgbG9nLndhcm4oYENvdWxkIG5vdCByZW1vdmUgJHtzZXJ2aWNlUGF0dGVybn0gZGFlbW9ucywgY2Fycnlpbmcgb24gYW55d2F5IWApO1xuICAgIH1cbiAgfVxuICAvLyB3YWl0aW5nIHVudGlsIHRoZSBzaW11bGF0b3Igc2VydmljZSBoYXMgZGllZC5cbiAgdHJ5IHtcbiAgICBhd2FpdCB3YWl0Rm9yQ29uZGl0aW9uKGFzeW5jICgpID0+IHtcbiAgICAgIGxldCB7c3Rkb3V0fSA9IGF3YWl0IGV4ZWMoJ2Jhc2gnLCBbJy1jJyxcbiAgICAgICAgYHBzIC1lICB8IGdyZXAgbGF1bmNoZF9zaW0gfCBncmVwIC12IGJhc2ggfCBncmVwIC12IGdyZXAgfCBhd2sgeydwcmludCQxJ31gXSk7XG4gICAgICByZXR1cm4gc3Rkb3V0LnRyaW0oKS5sZW5ndGggPT09IDA7XG4gICAgfSwge3dhaXRNczogNTAwMCwgaW50ZXJ2YWxNczogNTAwfSk7XG4gIH0gY2F0Y2ggKGVycikge1xuICAgIGxvZy53YXJuKGBDb3VsZCBub3QgZW5kIGFsbCBzaW11bGF0b3IgZGFlbW9ucywgY2Fycnlpbmcgb24hYCk7XG4gIH1cbiAgbG9nLmRlYnVnKCdGaW5pc2hpbmcgZW5kaW5nIGFsbCBzaW11bGF0b3IgZGFlbW9ucycpO1xufVxuXG5hc3luYyBmdW5jdGlvbiBnZXRTaW11bGF0b3JJbmZvICh1ZGlkLCBvcHRzID0ge30pIHtcbiAgY29uc3Qge1xuICAgIGRldmljZXNTZXRQYXRoXG4gIH0gPSBvcHRzO1xuICAvLyBzZWUgdGhlIFJFQURNRSBmb3IgZ2l0aHViLmNvbS9hcHBpdW0vbm9kZS1zaW1jdGwgZm9yIGV4YW1wbGUgb3V0cHV0IG9mIGdldERldmljZXMoKVxuICBsZXQgZGV2aWNlcyA9IGF3YWl0IG5ldyBTaW1jdGwoe1xuICAgIGRldmljZXNTZXRQYXRoXG4gIH0pLmdldERldmljZXMoKTtcblxuICBkZXZpY2VzID0gXy50b1BhaXJzKGRldmljZXMpXG4gICAgLm1hcCgocGFpcikgPT4gcGFpclsxXSlcbiAgICAucmVkdWNlKChhLCBiKSA9PiBhLmNvbmNhdChiKSwgW10pO1xuICByZXR1cm4gXy5maW5kKGRldmljZXMsIChzaW0pID0+IHNpbS51ZGlkID09PSB1ZGlkKTtcbn1cblxuYXN5bmMgZnVuY3Rpb24gc2ltRXhpc3RzICh1ZGlkKSB7XG4gIHJldHVybiAhIShhd2FpdCBnZXRTaW11bGF0b3JJbmZvKHVkaWQpKTtcbn1cblxuYXN5bmMgZnVuY3Rpb24gc2FmZVJpbVJhZiAoZGVsUGF0aCwgdHJ5TnVtID0gMCkge1xuICB0cnkge1xuICAgIGF3YWl0IGZzLnJpbXJhZihkZWxQYXRoKTtcbiAgfSBjYXRjaCAoZXJyKSB7XG4gICAgaWYgKHRyeU51bSA8IDIwKSB7XG4gICAgICBpZiAoZXJyLm1lc3NhZ2UuaW5kZXhPZignRU5PVEVNUFRZJykgIT09IC0xKSB7XG4gICAgICAgIGxvZy5kZWJ1ZyhgUGF0aCAnJHtkZWxQYXRofScgd2FzIG5vdCBlbXB0eSBkdXJpbmcgZGVsZXRlOyByZXRyeWluZ2ApO1xuICAgICAgICByZXR1cm4gYXdhaXQgc2FmZVJpbVJhZihkZWxQYXRoLCB0cnlOdW0gKyAxKTtcbiAgICAgIH0gZWxzZSBpZiAoZXJyLm1lc3NhZ2UuaW5kZXhPZignRU5PRU5UJykgIT09IC0xKSB7XG4gICAgICAgIGxvZy5kZWJ1ZyhgUGF0aCAnJHtkZWxQYXRofScgZGlkIG5vdCBleGlzdCB3aGVuIHdlIHRyaWVkIHRvIGRlbGV0ZSwgaWdub3JpbmdgKTtcbiAgICAgICAgcmV0dXJuIGF3YWl0IHNhZmVSaW1SYWYoZGVsUGF0aCwgdHJ5TnVtICsgMSk7XG4gICAgICB9XG4gICAgfVxuICB9XG59XG5cbi8qKlxuICogSW5zdGFsbCBhbiBTU0wgY2VydGlmaWNhdGUgdG8gYSBkZXZpY2Ugd2l0aCBnaXZlbiB1ZGlkXG4gKiBAcGFyYW0ge3N0cmluZ30gcGVtVGV4dCBTU0wgcGVtIHRleHRcbiAqIEBwYXJhbSB7c3RyaW5nfSB1ZGlkIElkZW50aWZpZXIgb2YgdGhlIFNpbXVsYXRvclxuICovXG5hc3luYyBmdW5jdGlvbiBpbnN0YWxsU1NMQ2VydCAocGVtVGV4dCwgdWRpZCkge1xuICAvLyBDaGVjayB0aGF0IG9wZW5zc2wgaXMgaW5zdGFsbGVkIG9uIHRoZSBwYXRoXG4gIHRyeSB7XG4gICAgYXdhaXQgZnMud2hpY2goJ29wZW5zc2wnKTtcbiAgfSBjYXRjaCAoZSkge1xuICAgIGxvZy5kZWJ1ZyhgY3VzdG9tU1NMQ2VydCByZXF1aXJlcyBvcGVuc3NsIHRvIGJlIGF2YWlsYWJsZSBvbiBwYXRoYCk7XG4gICAgbG9nLmVycm9yQW5kVGhyb3coYENvbW1hbmQgJ29wZW5zc2wnIG5vdCBmb3VuZGApO1xuICB9XG5cbiAgLy8gQ2hlY2sgdGhhdCBzcWxpdGUzIGlzIGluc3RhbGxlZCBvbiB0aGUgcGF0aFxuICB0cnkge1xuICAgIGF3YWl0IGZzLndoaWNoKCdzcWxpdGUzJyk7XG4gIH0gY2F0Y2ggKGUpIHtcbiAgICBsb2cuZGVidWcoYGN1c3RvbVNTTENlcnQgcmVxdWlyZXMgc3FsaXRlMyB0byBiZSBhdmFpbGFibGUgb24gcGF0aGApO1xuICAgIGxvZy5lcnJvckFuZFRocm93KGBDb21tYW5kICdzcWxpdGUzJyBub3QgZm91bmRgKTtcbiAgfVxuXG4gIC8vIENyZWF0ZSBhIHRlbXBvcmFyeSBmaWxlIHRvIHN0b3JlIFBFTSB0ZXh0XG4gIC8vIChhIHRlbXAgZmlsZSBpcyBuZWNlc3NhcnkgdG8gcnVuIGBvcGVuc3NsYCBzaGVsbCBjb21tYW5kcywgY2FuJ3QgYmUgZG9uZSBpbiBtZW1vcnkpXG4gIGxldCB0ZW1wRmlsZU5hbWUgPSBwYXRoLnJlc29sdmUoYXdhaXQgdGVtcERpci5vcGVuRGlyKCksICd0ZW1wLXNzbC1jZXJ0LnBlbScpO1xuICBsZXQgcGF0aFRvS2V5Y2hhaW4gPSBuZXcgU2ltdWxhdG9yKHVkaWQpLmdldERpcigpO1xuICBhd2FpdCBmcy53cml0ZUZpbGUodGVtcEZpbGVOYW1lLCBwZW1UZXh0KTtcbiAgdHJ5IHtcbiAgICBhd2FpdCBmcy5zdGF0KHBhdGhUb0tleWNoYWluKTtcbiAgfSBjYXRjaCAoZSkge1xuICAgIGxvZy5kZWJ1ZyhgQ291bGQgbm90IGluc3RhbGwgU1NMIGNlcnRpZmljYXRlLiBObyBzaW11bGF0b3Igd2l0aCB1ZGlkICcke3VkaWR9J2ApO1xuICAgIGxvZy5lcnJvckFuZFRocm93KGUpO1xuICB9XG5cbiAgLy8gRG8gdGhlIGNlcnRpZmljYXRlIGluc3RhbGxhdGlvblxuICBsZXQgY2VydGlmaWNhdGUgPSBuZXcgQ2VydGlmaWNhdGUodGVtcEZpbGVOYW1lKTtcbiAgbG9nLmRlYnVnKGBJbnN0YWxsaW5nIGNlcnRpZmljYXRlIHRvICR7cGF0aFRvS2V5Y2hhaW59YCk7XG4gIGF3YWl0IGNlcnRpZmljYXRlLmFkZChwYXRoVG9LZXljaGFpbik7XG5cbiAgLy8gUmVtb3ZlIHRoZSB0ZW1wb3JhcnkgZmlsZVxuICBhd2FpdCBmcy51bmxpbmsodGVtcEZpbGVOYW1lKTtcblxuICByZXR1cm4gY2VydGlmaWNhdGU7XG59XG5cbmFzeW5jIGZ1bmN0aW9uIHVuaW5zdGFsbFNTTENlcnQgKHBlbVRleHQsIHVkaWQpIHtcbiAgdHJ5IHtcbiAgICBsZXQgdGVtcEZpbGVOYW1lID0gcGF0aC5yZXNvbHZlKF9fZGlybmFtZSwgJ3RlbXAtc3NsLWNlcnQucGVtJyk7XG4gICAgbGV0IHBhdGhUb0tleWNoYWluID0gcGF0aC5yZXNvbHZlKG5ldyBTaW11bGF0b3IodWRpZCkuZ2V0RGlyKCkpO1xuICAgIGF3YWl0IGZzLndyaXRlRmlsZSh0ZW1wRmlsZU5hbWUsIHBlbVRleHQpO1xuICAgIGxldCBjZXJ0aWZpY2F0ZSA9IG5ldyBDZXJ0aWZpY2F0ZSh0ZW1wRmlsZU5hbWUpO1xuICAgIGF3YWl0IGNlcnRpZmljYXRlLnJlbW92ZShwYXRoVG9LZXljaGFpbik7XG4gICAgYXdhaXQgZnMudW5saW5rKHRlbXBGaWxlTmFtZSk7XG4gICAgcmV0dXJuIGNlcnRpZmljYXRlO1xuICB9IGNhdGNoIChlKSB7XG4gICAgbG9nLmRlYnVnKGBDb3VsZCBub3QgdW5pbnN0YWxsIFNTTCBjZXJ0aWZpY2F0ZS4gTm8gc2ltdWxhdG9yIHdpdGggdWRpZCAnJHt1ZGlkfSdgKTtcbiAgICBsb2cuZXJyb3JBbmRUaHJvdyhlKTtcbiAgfVxufVxuXG4vKipcbiAqIENoZWNrIGlmIHRoZSBTaW11bGF0b3IgYWxyZWFkeSBoYXMgdGhpcyBTU0wgY2VydGlmaWNhdGVcbiAqIEBwYXJhbSB7c3RyaW5nfSBwZW1UZXh0IFBFTSB0ZXh0IG9mIFNTTCBjZXJ0XG4gKiBAcGFyYW0ge3N0cmluZ30gdWRpZCBJZGVudGlmaWVyIG9mIHRoZSBTaW11bGF0b3JcbiAqL1xuYXN5bmMgZnVuY3Rpb24gaGFzU1NMQ2VydCAocGVtVGV4dCwgdWRpZCkge1xuICBjb25zdCB0ZW1wRmlsZU5hbWUgPSBwYXRoLnJlc29sdmUoYXdhaXQgdGVtcERpci5vcGVuRGlyKCksICd0ZW1wLXNzbC1jZXJ0LnBlbScpO1xuICBjb25zdCBwYXRoVG9LZXljaGFpbiA9IG5ldyBTaW11bGF0b3IodWRpZCkuZ2V0RGlyKCk7XG4gIGF3YWl0IGZzLndyaXRlRmlsZSh0ZW1wRmlsZU5hbWUsIHBlbVRleHQpO1xuICBjb25zdCBjZXJ0aWZpY2F0ZSA9IG5ldyBDZXJ0aWZpY2F0ZSh0ZW1wRmlsZU5hbWUpO1xuICByZXR1cm4gY2VydGlmaWNhdGUuaGFzKHBhdGhUb0tleWNoYWluKTtcbn1cblxuLyoqXG4gKiBSdW5zIGEgY29tbWFuZCBsaW5lIHNxbGl0ZTMgcXVlcnlcbiAqXG4gKiBAcGFyYW0ge3N0cmluZ30gZGIgLSBGdWxsIHBhdGggdG8gc3FsaXRlIGRhdGFiYXNlXG4gKiBAcGFyYW0ge3N0cmluZ30gcXVlcnkgLSBUaGUgYWN0dWFsIHF1ZXJ5IHN0cmluZ1xuICogQHBhcmFtIHsuLi5zdHJpbmd9IHF1ZXJ5UGFyYW1zIC0gVGhlIGxpc3Qgb2YgcXVlcnkgcGFyYW1ldGVyc1xuICogQHJldHVybnMge3N0cmluZ30gc3FsaXRlIGNvbW1hbmQgc3Rkb3V0XG4gKi9cbmFzeW5jIGZ1bmN0aW9uIGV4ZWNTUUxpdGVRdWVyeSAoZGIsIHF1ZXJ5LCAuLi5xdWVyeVBhcmFtcykge1xuICBxdWVyeSA9IHF1ZXJ5LnJlcGxhY2UoL1xcbisvZywgJyAnKTtcbiAgbGV0IHF1ZXJ5VG9rZW5zID0gcXVlcnkuc3BsaXQoJz8nKTtcbiAgbGV0IGZvcm1hdHRlZFF1ZXJ5ID0gW107XG4gIHF1ZXJ5UGFyYW1zXG4gICAgLm1hcCgocGFyYW0pID0+IGAke3BhcmFtfWApXG4gICAgLmZvckVhY2goKHBhcmFtLCBpKSA9PiB7XG4gICAgICBmb3JtYXR0ZWRRdWVyeS5wdXNoKHF1ZXJ5VG9rZW5zW2ldKTtcbiAgICAgIGZvcm1hdHRlZFF1ZXJ5LnB1c2gocGFyYW0ucmVwbGFjZSgvJy9nLCBcIicnXCIpKTtcbiAgICB9KTtcbiAgZm9ybWF0dGVkUXVlcnkucHVzaChxdWVyeVRva2Vuc1txdWVyeVRva2Vucy5sZW5ndGggLSAxXSk7XG5cbiAgbG9nLmRlYnVnKGBFeGVjdXRpbmcgU1FMIHF1ZXJ5IFwiJHtmb3JtYXR0ZWRRdWVyeS5qb2luKCcnKX1cIiBvbiAnJHtkYn0nYCk7XG4gIHRyeSB7XG4gICAgcmV0dXJuIChhd2FpdCBleGVjKCdzcWxpdGUzJywgWyctbGluZScsIGRiLCBmb3JtYXR0ZWRRdWVyeS5qb2luKCcnKV0pKS5zdGRvdXQ7XG4gIH0gY2F0Y2ggKGVycikge1xuICAgIHRocm93IG5ldyBFcnJvcihgQ2Fubm90IGV4ZWN1dGUgU1FMaXRlIHF1ZXJ5IFwiJHtmb3JtYXR0ZWRRdWVyeS5qb2luKCcnKX1cIiB0byAnJHtkYn0nLiBgICtcbiAgICAgIGBPcmlnaW5hbCBlcnJvcjogJHtlcnIuc3RkZXJyfWApO1xuICB9XG59XG5cbmFzeW5jIGZ1bmN0aW9uIGdldERldmVsb3BlclJvb3QgKCkge1xuICBjb25zdCB7c3Rkb3V0fSA9IGF3YWl0IGV4ZWMoJ3hjb2RlLXNlbGVjdCcsIFsnLXAnXSk7XG4gIHJldHVybiBzdGRvdXQudHJpbSgpO1xufVxuXG4vKipcbiAqIEFjdGl2YXRlcyB0aGUgYXBwIGhhdmluZyB0aGUgZ2l2ZW4gcHJvY2VzcyBpZGVudGlmaWVyLlxuICogU2VlIGh0dHBzOi8vZGV2ZWxvcGVyLmFwcGxlLmNvbS9kb2N1bWVudGF0aW9uL2FwcGtpdC9uc3J1bm5pbmdhcHBsaWNhdGlvbi8xNTI4NzI1LWFjdGl2YXRld2l0aG9wdGlvbnM/bGFuZ3VhZ2U9b2JqY1xuICogZm9yIG1vcmUgZGV0YWlscy5cbiAqXG4gKiBAcGFyYW0ge251bWJlcnxzdHJpbmd9IHBpZCBBcHAgcHJvY2VzcyBpZGVudGlmaWVyXG4gKiBAdGhyb3dzIHtFcnJvcn0gSWYgdGhlIGdpdmVuIFBJRCBpcyBub3QgcnVubmluZyBvciB0aGVyZSB3YXMgYSBmYWlsdXJlXG4gKiB3aGlsZSBhY3RpdmF0aW5nIHRoZSBhcHBcbiAqL1xuYXN5bmMgZnVuY3Rpb24gYWN0aXZhdGVBcHAgKHBpZCkge1xuICBjb25zdCB0bXBTY3JpcHQgPSBhd2FpdCB0ZW1wRGlyLnBhdGgoe1xuICAgIHByZWZpeDogYGFjdGl2YXRlX3NpbV8ke3V0aWwudXVpZFY0KCkuc3Vic3RyaW5nKDAsIDgpfWAsXG4gICAgc3VmZml4OiAnLnB5JyxcbiAgfSk7XG4gIGF3YWl0IGZzLndyaXRlRmlsZSh0bXBTY3JpcHQsIEFQUF9BQ1RJVkFUSU9OX1NDUklQVChwaWQpLCAndXRmOCcpO1xuICB0cnkge1xuICAgIGF3YWl0IGV4ZWMoU1lTVEVNX1BZVEhPTl9QQVRILCBbdG1wU2NyaXB0XSk7XG4gIH0gZmluYWxseSB7XG4gICAgYXdhaXQgZnMucmltcmFmKHRtcFNjcmlwdCk7XG4gIH1cbn1cblxuLyoqXG4gKiBFeGVjdXRlcyBhbiBhcHAgYW5kIHZlcmlmaWVzIGlmIGl0IHdhcyBsYXVuY2hlZCBwcm9wZXJseVxuICpcbiAqIEBwYXJhbSB7U2ltY3RsfSBzaW1jdGwgU2ltY3RsIGluc3RhbmNlXG4gKiBAcGFyYW0ge3N0cmluZ30gYnVuZGxlSWQgYnVuZGxlIGlkZW50aWZpZXIgb2YgdGhlIGRlc3RpbmF0aW9uIGFwcFxuICogQHBhcmFtIHtudW1iZXJ9IHRpbWVvdXRNcyBbMjUwMDBdIFRoZSBtYXhpbXVtIHRpbWUgdG8gd2FpdCB1bnRpbFxuICogdGhlIGFwcCBpcyBydW5uaW5nXG4gKiBAdGhyb3dzIHtFcnJvcn0gSWYgdGhlIGFwcCBpcyBzdGlsbCBub3QgcnVubmluZyBhZnRlciB0aGUgZ2l2ZW4gdGltZW91dFxuICovXG5hc3luYyBmdW5jdGlvbiBsYXVuY2hBcHAgKHNpbWN0bCwgYnVuZGxlSWQsIHRpbWVvdXRNcyA9IDI1MDAwKSB7XG4gIGxldCBsYXN0RXJyb3I7XG4gIHRyeSB7XG4gICAgYXdhaXQgd2FpdEZvckNvbmRpdGlvbihhc3luYyAoKSA9PiB7XG4gICAgICB0cnkge1xuICAgICAgICBjb25zdCBzdGRvdXQgPSBhd2FpdCBzaW1jdGwubGF1bmNoQXBwKE1PQklMRV9TQUZBUklfQlVORExFX0lELCAxKTtcbiAgICAgICAgcmV0dXJuIFBST0NFU1NfTEFVTkNIX09LX1BBVFRFUk4oTU9CSUxFX1NBRkFSSV9CVU5ETEVfSUQpLnRlc3Qoc3Rkb3V0KTtcbiAgICAgIH0gY2F0Y2ggKGVycikge1xuICAgICAgICBsYXN0RXJyb3IgPSBlcnIuc3RkZXJyIHx8IGVyci5tZXNzYWdlO1xuICAgICAgfVxuICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH0sIHt3YWl0TXM6IHRpbWVvdXRNcywgaW50ZXJ2YWxNczogNTAwfSk7XG4gIH0gY2F0Y2ggKGUpIHtcbiAgICBsZXQgbXNnID0gYCcke2J1bmRsZUlkfScgZGlkIG5vdCBydW4gYWZ0ZXIgJHt0aW1lb3V0TXN9bXMgdGltZW91dC5gO1xuICAgIGlmIChsYXN0RXJyb3IpIHtcbiAgICAgIG1zZyArPSBgIE9yaWdpbmFsIGVycm9yOiAke2xhc3RFcnJvcn1gO1xuICAgIH1cbiAgICB0aHJvdyBuZXcgRXJyb3IobXNnKTtcbiAgfVxufVxuXG5leHBvcnQge1xuICBraWxsQWxsU2ltdWxhdG9ycyxcbiAgZW5kQWxsU2ltdWxhdG9yRGFlbW9ucyxcbiAgc2FmZVJpbVJhZixcbiAgc2ltRXhpc3RzLFxuICBnZXRTaW11bGF0b3JJbmZvLFxuICBpbnN0YWxsU1NMQ2VydCxcbiAgdW5pbnN0YWxsU1NMQ2VydCxcbiAgaGFzU1NMQ2VydCxcbiAgZXhlY1NRTGl0ZVF1ZXJ5LFxuICB0b0Jpb21ldHJpY0RvbWFpbkNvbXBvbmVudCxcbiAgZ2V0RGV2ZWxvcGVyUm9vdCxcbiAgYWN0aXZhdGVBcHAsXG4gIFNBRkFSSV9TVEFSVFVQX1RJTUVPVVQsXG4gIE1PQklMRV9TQUZBUklfQlVORExFX0lELFxuICBTWVNURU1fUFlUSE9OX1BBVEgsXG4gIGxhdW5jaEFwcCxcbn07XG4iXSwibWFwcGluZ3MiOiI7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztBQUFBOztBQUNBOztBQUNBOztBQUNBOztBQUNB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
|
|
388
|
+
//# sourceMappingURL=data:application/json;charset=utf8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibGliL3V0aWxzLmpzIiwibmFtZXMiOlsiREVGQVVMVF9TSU1fU0hVVERPV05fVElNRU9VVCIsIlNBRkFSSV9TVEFSVFVQX1RJTUVPVVQiLCJNT0JJTEVfU0FGQVJJX0JVTkRMRV9JRCIsIlBST0NFU1NfTEFVTkNIX09LX1BBVFRFUk4iLCJidW5kbGVJZCIsIlJlZ0V4cCIsInJlcGxhY2UiLCJBUFBfQUNUSVZBVElPTl9TQ1JJUFQiLCJwaWQiLCJCSU9NRVRSSUNTIiwidG91Y2hJZCIsImZhY2VJZCIsInRvQmlvbWV0cmljRG9tYWluQ29tcG9uZW50IiwibmFtZSIsIkVycm9yIiwiSlNPTiIsInN0cmluZ2lmeSIsIl8iLCJrZXlzIiwicGtpbGwiLCJhcHBOYW1lIiwiZm9yY2VLaWxsIiwiYXJncyIsInB1c2giLCJleGVjIiwiZXJyIiwiaXNVbmRlZmluZWQiLCJjb2RlIiwibG9nIiwiZXJyb3IiLCJtZXNzYWdlIiwia2lsbEFsbFNpbXVsYXRvcnMiLCJ0aW1lb3V0IiwiZGVidWciLCJ4Y29kZVZlcnNpb24iLCJnZXRWZXJzaW9uIiwibWFqb3IiLCJpZ24iLCJwaWRzIiwic3Rkb3V0IiwidHJpbSIsInNwbGl0IiwiZSIsImlzRW1wdHkiLCJ3YXJuIiwiam9pbiIsIm1hcCIsInJlbWFpbmluZ0RldmljZXMiLCJhbGxTaW1zQXJlRG93biIsImRldmljZXMiLCJTaW1jdGwiLCJnZXREZXZpY2VzIiwiZmxhdHRlbiIsInZhbHVlcyIsImV2ZXJ5Iiwic2ltIiwic3RhdGUiLCJ0b0xvd2VyQ2FzZSIsImRvbmUiLCJzZGsiLCJ1ZGlkIiwid2FpdEZvckNvbmRpdGlvbiIsIndhaXRNcyIsImludGVydmFsTXMiLCJsZW5ndGgiLCJkZXZpY2UiLCJlbmRBbGxTaW11bGF0b3JEYWVtb25zIiwic2VydmljZVBhdHRlcm4iLCJsYXVuY2hDdGxDb21tYW5kIiwic3RvcENtZCIsInJlbW92ZUNtZCIsImdldFNpbXVsYXRvckluZm8iLCJvcHRzIiwiZGV2aWNlc1NldFBhdGgiLCJ0b1BhaXJzIiwicGFpciIsInJlZHVjZSIsImEiLCJiIiwiY29uY2F0IiwiZmluZCIsInNpbUV4aXN0cyIsInNhZmVSaW1SYWYiLCJkZWxQYXRoIiwidHJ5TnVtIiwiZnMiLCJyaW1yYWYiLCJpbmRleE9mIiwiaW5zdGFsbFNTTENlcnQiLCJwZW1UZXh0Iiwid2hpY2giLCJlcnJvckFuZFRocm93IiwidGVtcEZpbGVOYW1lIiwicGF0aCIsInJlc29sdmUiLCJ0ZW1wRGlyIiwib3BlbkRpciIsInBhdGhUb0tleWNoYWluIiwiU2ltdWxhdG9yIiwiZ2V0RGlyIiwid3JpdGVGaWxlIiwic3RhdCIsImNlcnRpZmljYXRlIiwiQ2VydGlmaWNhdGUiLCJhZGQiLCJ1bmxpbmsiLCJ1bmluc3RhbGxTU0xDZXJ0IiwiX19kaXJuYW1lIiwicmVtb3ZlIiwiaGFzU1NMQ2VydCIsImhhcyIsImV4ZWNTUUxpdGVRdWVyeSIsImRiIiwicXVlcnkiLCJxdWVyeVBhcmFtcyIsInF1ZXJ5VG9rZW5zIiwiZm9ybWF0dGVkUXVlcnkiLCJwYXJhbSIsImZvckVhY2giLCJpIiwic3RkZXJyIiwiZ2V0RGV2ZWxvcGVyUm9vdCIsImFjdGl2YXRlQXBwIiwibGF1bmNoQXBwIiwic2ltY3RsIiwidGltZW91dE1zIiwibGFzdEVycm9yIiwidGVzdCIsIm1zZyJdLCJzb3VyY2VSb290IjoiLi4vLi4iLCJzb3VyY2VzIjpbImxpYi91dGlscy5qcyJdLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgbG9nIGZyb20gJy4vbG9nZ2VyJztcbmltcG9ydCBfIGZyb20gJ2xvZGFzaCc7XG5pbXBvcnQgeyBleGVjIH0gZnJvbSAndGVlbl9wcm9jZXNzJztcbmltcG9ydCB7IHdhaXRGb3JDb25kaXRpb24gfSBmcm9tICdhc3luY2JveCc7XG5pbXBvcnQgeyBnZXRWZXJzaW9uIH0gZnJvbSAnYXBwaXVtLXhjb2RlJztcbmltcG9ydCBTaW1jdGwgZnJvbSAnbm9kZS1zaW1jdGwnO1xuaW1wb3J0IHsgZnMsIHRlbXBEaXIgfSBmcm9tICdAYXBwaXVtL3N1cHBvcnQnO1xuaW1wb3J0IHsgQ2VydGlmaWNhdGUgfSBmcm9tICcuL2NlcnRpZmljYXRlJztcbmltcG9ydCBwYXRoIGZyb20gJ3BhdGgnO1xuaW1wb3J0IFNpbXVsYXRvciBmcm9tICcuL3NpbXVsYXRvci14Y29kZS02JztcblxuXG5jb25zdCBERUZBVUxUX1NJTV9TSFVURE9XTl9USU1FT1VUID0gMzAwMDA7XG5jb25zdCBTQUZBUklfU1RBUlRVUF9USU1FT1VUID0gMjUgKiAxMDAwO1xuY29uc3QgTU9CSUxFX1NBRkFSSV9CVU5ETEVfSUQgPSAnY29tLmFwcGxlLm1vYmlsZXNhZmFyaSc7XG5jb25zdCBQUk9DRVNTX0xBVU5DSF9PS19QQVRURVJOID0gKGJ1bmRsZUlkKSA9PiBuZXcgUmVnRXhwKGAke2J1bmRsZUlkLnJlcGxhY2UoJy4nLCAnXFxcXC4nKX06XFxcXHMrXFxcXGQrYCk7XG5jb25zdCBBUFBfQUNUSVZBVElPTl9TQ1JJUFQgPSAocGlkKSA9PiBgXG51c2UgZnJhbWV3b3JrIFwiRm91bmRhdGlvblwiXG51c2UgZnJhbWV3b3JrIFwiQXBwS2l0XCJcbnVzZSBzY3JpcHRpbmcgYWRkaXRpb25zXG5cbnNldCB0aGVBcHAgdG8gY3VycmVudCBhcHBsaWNhdGlvbidzIE5TUnVubmluZ0FwcGxpY2F0aW9uJ3MgcnVubmluZ0FwcGxpY2F0aW9uV2l0aFByb2Nlc3NJZGVudGlmaWVyOiR7cGlkfVxuaWYgdGhlQXBwID0gbnVsbCB0aGVuXG5cdGxvZyBcIkNhbm5vdCBmaW5kIFNpbXVsYXRvciB3aW5kb3cgdW5kZXIgUElEICR7cGlkfS4gSXMgaXQgcnVubmluZz9cIlxuXHRlcnJvciBudW1iZXIgMVxuZW5kIGlmXG5zZXQgcmVzdWx0IHRvIHRoZUFwcCdzIGFjdGl2YXRlV2l0aE9wdGlvbnM6M1xuaWYgbm90IHJlc3VsdCB0aGVuXG5cdGxvZyBcIkNhbm5vdCBhY3RpdmF0ZSBTaW11bGF0b3Igd2luZG93IHVuZGVyIFBJRCAke3BpZH0uIElzIGl0IHJ1bm5pbmc/XCJcblx0ZXJyb3IgbnVtYmVyIDFcbmVuZCBpZlxuYDtcblxuXG5jb25zdCBCSU9NRVRSSUNTID0ge1xuICB0b3VjaElkOiAnZmluZ2VyVG91Y2gnLFxuICBmYWNlSWQ6ICdwZWFybCcsXG59O1xuXG5mdW5jdGlvbiB0b0Jpb21ldHJpY0RvbWFpbkNvbXBvbmVudCAobmFtZSkge1xuICBpZiAoIUJJT01FVFJJQ1NbbmFtZV0pIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoYCcke25hbWV9JyBpcyBub3QgYSB2YWxpZCBiaW9tZXRyaWMuIFVzZSBvbmUgb2Y6ICR7SlNPTi5zdHJpbmdpZnkoXy5rZXlzKEJJT01FVFJJQ1MpKX1gKTtcbiAgfVxuICByZXR1cm4gQklPTUVUUklDU1tuYW1lXTtcbn1cblxuLy8gcGdyZXAvcGtpbGwgZXhpdCBjb2Rlczpcbi8vIDAgICAgICAgT25lIG9yIG1vcmUgcHJvY2Vzc2VzIHdlcmUgbWF0Y2hlZC5cbi8vIDEgICAgICAgTm8gcHJvY2Vzc2VzIHdlcmUgbWF0Y2hlZC5cbi8vIDIgICAgICAgSW52YWxpZCBvcHRpb25zIHdlcmUgc3BlY2lmaWVkIG9uIHRoZSBjb21tYW5kIGxpbmUuXG4vLyAzICAgICAgIEFuIGludGVybmFsIGVycm9yIG9jY3VycmVkLlxuXG5hc3luYyBmdW5jdGlvbiBwa2lsbCAoYXBwTmFtZSwgZm9yY2VLaWxsID0gZmFsc2UpIHtcbiAgbGV0IGFyZ3MgPSBmb3JjZUtpbGwgPyBbJy05J10gOiBbXTtcbiAgYXJncy5wdXNoKCcteCcsIGFwcE5hbWUpO1xuICB0cnkge1xuICAgIGF3YWl0IGV4ZWMoJ3BraWxsJywgYXJncyk7XG4gICAgcmV0dXJuIDA7XG4gIH0gY2F0Y2ggKGVycikge1xuICAgIGlmICghXy5pc1VuZGVmaW5lZChlcnIuY29kZSkpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcihgQ2Fubm90IGZvcmNlZnVsbHkgdGVybWluYXRlICR7YXBwTmFtZX0uIHBraWxsIGVycm9yIGNvZGU6ICR7ZXJyLmNvZGV9YCk7XG4gICAgfVxuICAgIGxvZy5lcnJvcihgUmVjZWl2ZWQgdW5leHBlY3RlZCBlcnJvciB3aGlsZSB0cnlpbmcgdG8ga2lsbCAke2FwcE5hbWV9OiAke2Vyci5tZXNzYWdlfWApO1xuICAgIHRocm93IGVycjtcbiAgfVxufVxuXG5hc3luYyBmdW5jdGlvbiBraWxsQWxsU2ltdWxhdG9ycyAodGltZW91dCA9IERFRkFVTFRfU0lNX1NIVVRET1dOX1RJTUVPVVQpIHtcbiAgbG9nLmRlYnVnKCdLaWxsaW5nIGFsbCBpT1MgU2ltdWxhdG9ycycpO1xuICBjb25zdCB4Y29kZVZlcnNpb24gPSBhd2FpdCBnZXRWZXJzaW9uKHRydWUpO1xuICBjb25zdCBhcHBOYW1lID0geGNvZGVWZXJzaW9uLm1ham9yID49IDcgPyAnU2ltdWxhdG9yJyA6ICdpT1MgU2ltdWxhdG9yJztcblxuICAvLyBsYXRlciB2ZXJzaW9ucyBhcmUgc2xvd2VyIHRvIGNsb3NlXG4gIHRpbWVvdXQgPSB0aW1lb3V0ICogKHhjb2RlVmVyc2lvbi5tYWpvciA+PSA4ID8gMiA6IDEpO1xuXG4gIHRyeSB7XG4gICAgYXdhaXQgZXhlYygneGNydW4nLCBbJ3NpbWN0bCcsICdzaHV0ZG93bicsIHhjb2RlVmVyc2lvbi5tYWpvciA+IDggPyAnYWxsJyA6ICdib290ZWQnXSwge3RpbWVvdXR9KTtcbiAgfSBjYXRjaCAoaWduKSB7fVxuXG4gIGNvbnN0IHBpZHMgPSBbXTtcbiAgdHJ5IHtcbiAgICBjb25zdCB7c3Rkb3V0fSA9IGF3YWl0IGV4ZWMoJ3BncmVwJywgWyctZicsIGAke2FwcE5hbWV9LmFwcC9Db250ZW50cy9NYWNPUy9gXSk7XG4gICAgaWYgKHN0ZG91dC50cmltKCkpIHtcbiAgICAgIHBpZHMucHVzaCguLi4oc3Rkb3V0LnRyaW0oKS5zcGxpdCgvXFxzKy8pKSk7XG4gICAgfVxuICB9IGNhdGNoIChlKSB7XG4gICAgaWYgKGUuY29kZSA9PT0gMSkge1xuICAgICAgbG9nLmRlYnVnKGAke2FwcE5hbWV9IGlzIG5vdCBydW5uaW5nLiBDb250aW51aW5nLi4uYCk7XG4gICAgICByZXR1cm47XG4gICAgfVxuICAgIGlmIChfLmlzRW1wdHkocGlkcykpIHtcbiAgICAgIGxvZy53YXJuKGBwZ3JlcCBlcnJvciAke2UuY29kZX0gd2hpbGUgZGV0ZWN0aW5nIHdoZXRoZXIgJHthcHBOYW1lfSBpcyBydW5uaW5nLiBUcnlpbmcgdG8ga2lsbCBhbnl3YXkuYCk7XG4gICAgfVxuICB9XG4gIGlmICghXy5pc0VtcHR5KHBpZHMpKSB7XG4gICAgbG9nLmRlYnVnKGBLaWxsaW5nIHByb2Nlc3NlczogJHtwaWRzLmpvaW4oJywgJyl9YCk7XG4gICAgdHJ5IHtcbiAgICAgIGF3YWl0IGV4ZWMoJ2tpbGwnLCBbJy05JywgLi4uKHBpZHMubWFwKChwaWQpID0+IGAke3BpZH1gKSldKTtcbiAgICB9IGNhdGNoIChpZ24pIHt9XG4gIH1cblxuICBsb2cuZGVidWcoYFVzaW5nIHBraWxsIHRvIGtpbGwgYXBwbGljYXRpb246ICR7YXBwTmFtZX1gKTtcbiAgdHJ5IHtcbiAgICBhd2FpdCBwa2lsbChhcHBOYW1lLCB0cnVlKTtcbiAgfSBjYXRjaCAoaWduKSB7fVxuXG4gIC8vIHdhaXQgZm9yIGFsbCB0aGUgZGV2aWNlcyB0byBiZSBzaHV0ZG93biBiZWZvcmUgQ29udGludWluZ1xuICAvLyBidXQgb25seSBwcmludCBvdXQgdGhlIGZhaWxlZCBvbmVzIHdoZW4gdGhleSBhcmUgYWN0dWFsbHkgZnVsbHkgZmFpbGVkXG4gIGxldCByZW1haW5pbmdEZXZpY2VzID0gW107XG4gIGFzeW5jIGZ1bmN0aW9uIGFsbFNpbXNBcmVEb3duICgpIHtcbiAgICByZW1haW5pbmdEZXZpY2VzID0gW107XG4gICAgbGV0IGRldmljZXMgPSBhd2FpdCBuZXcgU2ltY3RsKCkuZ2V0RGV2aWNlcygpO1xuICAgIGRldmljZXMgPSBfLmZsYXR0ZW4oXy52YWx1ZXMoZGV2aWNlcykpO1xuICAgIHJldHVybiBfLmV2ZXJ5KGRldmljZXMsIChzaW0pID0+IHtcbiAgICAgIGxldCBzdGF0ZSA9IHNpbS5zdGF0ZS50b0xvd2VyQ2FzZSgpO1xuICAgICAgbGV0IGRvbmUgPSBzdGF0ZSA9PT0gJ3NodXRkb3duJyB8fFxuICAgICAgICAgICAgICAgICBzdGF0ZSA9PT0gJ3VuYXZhaWxhYmxlJyB8fFxuICAgICAgICAgICAgICAgICBzdGF0ZSA9PT0gJ2Rpc2Nvbm5lY3RlZCc7XG4gICAgICBpZiAoIWRvbmUpIHtcbiAgICAgICAgcmVtYWluaW5nRGV2aWNlcy5wdXNoKGAke3NpbS5uYW1lfSAoJHtzaW0uc2RrfSwgdWRpZDogJHtzaW0udWRpZH0pIGlzIHN0aWxsIGluIHN0YXRlICcke3N0YXRlfSdgKTtcbiAgICAgIH1cbiAgICAgIHJldHVybiBkb25lO1xuICAgIH0pO1xuICB9XG4gIHRyeSB7XG4gICAgYXdhaXQgd2FpdEZvckNvbmRpdGlvbihhbGxTaW1zQXJlRG93biwge1xuICAgICAgd2FpdE1zOiB0aW1lb3V0LFxuICAgICAgaW50ZXJ2YWxNczogMjAwXG4gICAgfSk7XG4gIH0gY2F0Y2ggKGVycikge1xuICAgIGlmIChyZW1haW5pbmdEZXZpY2VzLmxlbmd0aCA+IDApIHtcbiAgICAgIGxvZy53YXJuKGBUaGUgZm9sbG93aW5nIGRldmljZXMgYXJlIHN0aWxsIG5vdCBpbiB0aGUgY29ycmVjdCBzdGF0ZSBhZnRlciAke3RpbWVvdXR9IG1zOmApO1xuICAgICAgZm9yIChsZXQgZGV2aWNlIG9mIHJlbWFpbmluZ0RldmljZXMpIHtcbiAgICAgICAgbG9nLndhcm4oYCAgICAke2RldmljZX1gKTtcbiAgICAgIH1cbiAgICB9XG4gICAgdGhyb3cgZXJyO1xuICB9XG59XG5cbmFzeW5jIGZ1bmN0aW9uIGVuZEFsbFNpbXVsYXRvckRhZW1vbnMgKCkge1xuICBsb2cuZGVidWcoJ0VuZGluZyBhbGwgc2ltdWxhdG9yIGRhZW1vbnMnKTtcbiAgZm9yIChsZXQgc2VydmljZVBhdHRlcm4gb2YgWydjb20uYXBwbGUuaXBob25lc2ltdWxhdG9yJywgJ2NvbS5hcHBsZS5Db3JlU2ltdWxhdG9yJ10pIHtcbiAgICBsb2cuZGVidWcoYEtpbGxpbmcgYW55IG90aGVyICR7c2VydmljZVBhdHRlcm59IGRhZW1vbnNgKTtcbiAgICBsZXQgbGF1bmNoQ3RsQ29tbWFuZCA9IGBsYXVuY2hjdGwgbGlzdCB8IGdyZXAgJHtzZXJ2aWNlUGF0dGVybn0gfCBjdXQgLWYgMyB8IHhhcmdzIC1uIDEgbGF1bmNoY3RsYDtcbiAgICB0cnkge1xuICAgICAgbGV0IHN0b3BDbWQgPSBgJHtsYXVuY2hDdGxDb21tYW5kfSBzdG9wYDtcbiAgICAgIGF3YWl0IGV4ZWMoJ2Jhc2gnLCBbJy1jJywgc3RvcENtZF0pO1xuICAgIH0gY2F0Y2ggKGVycikge1xuICAgICAgbG9nLndhcm4oYENvdWxkIG5vdCBzdG9wICR7c2VydmljZVBhdHRlcm59IGRhZW1vbnMsIGNhcnJ5aW5nIG9uIGFueXdheSFgKTtcbiAgICB9XG4gICAgdHJ5IHtcbiAgICAgIGxldCByZW1vdmVDbWQgPSBgJHtsYXVuY2hDdGxDb21tYW5kfSByZW1vdmVgO1xuICAgICAgYXdhaXQgZXhlYygnYmFzaCcsIFsnLWMnLCByZW1vdmVDbWRdKTtcbiAgICB9IGNhdGNoIChlcnIpIHtcbiAgICAgIGxvZy53YXJuKGBDb3VsZCBub3QgcmVtb3ZlICR7c2VydmljZVBhdHRlcm59IGRhZW1vbnMsIGNhcnJ5aW5nIG9uIGFueXdheSFgKTtcbiAgICB9XG4gIH1cbiAgLy8gd2FpdGluZyB1bnRpbCB0aGUgc2ltdWxhdG9yIHNlcnZpY2UgaGFzIGRpZWQuXG4gIHRyeSB7XG4gICAgYXdhaXQgd2FpdEZvckNvbmRpdGlvbihhc3luYyAoKSA9PiB7XG4gICAgICBsZXQge3N0ZG91dH0gPSBhd2FpdCBleGVjKCdiYXNoJywgWyctYycsXG4gICAgICAgIGBwcyAtZSAgfCBncmVwIGxhdW5jaGRfc2ltIHwgZ3JlcCAtdiBiYXNoIHwgZ3JlcCAtdiBncmVwIHwgYXdrIHsncHJpbnQkMSd9YF0pO1xuICAgICAgcmV0dXJuIHN0ZG91dC50cmltKCkubGVuZ3RoID09PSAwO1xuICAgIH0sIHt3YWl0TXM6IDUwMDAsIGludGVydmFsTXM6IDUwMH0pO1xuICB9IGNhdGNoIChlcnIpIHtcbiAgICBsb2cud2FybihgQ291bGQgbm90IGVuZCBhbGwgc2ltdWxhdG9yIGRhZW1vbnMsIGNhcnJ5aW5nIG9uIWApO1xuICB9XG4gIGxvZy5kZWJ1ZygnRmluaXNoaW5nIGVuZGluZyBhbGwgc2ltdWxhdG9yIGRhZW1vbnMnKTtcbn1cblxuYXN5bmMgZnVuY3Rpb24gZ2V0U2ltdWxhdG9ySW5mbyAodWRpZCwgb3B0cyA9IHt9KSB7XG4gIGNvbnN0IHtcbiAgICBkZXZpY2VzU2V0UGF0aFxuICB9ID0gb3B0cztcbiAgLy8gc2VlIHRoZSBSRUFETUUgZm9yIGdpdGh1Yi5jb20vYXBwaXVtL25vZGUtc2ltY3RsIGZvciBleGFtcGxlIG91dHB1dCBvZiBnZXREZXZpY2VzKClcbiAgbGV0IGRldmljZXMgPSBhd2FpdCBuZXcgU2ltY3RsKHtcbiAgICBkZXZpY2VzU2V0UGF0aFxuICB9KS5nZXREZXZpY2VzKCk7XG5cbiAgZGV2aWNlcyA9IF8udG9QYWlycyhkZXZpY2VzKVxuICAgIC5tYXAoKHBhaXIpID0+IHBhaXJbMV0pXG4gICAgLnJlZHVjZSgoYSwgYikgPT4gYS5jb25jYXQoYiksIFtdKTtcbiAgcmV0dXJuIF8uZmluZChkZXZpY2VzLCAoc2ltKSA9PiBzaW0udWRpZCA9PT0gdWRpZCk7XG59XG5cbmFzeW5jIGZ1bmN0aW9uIHNpbUV4aXN0cyAodWRpZCkge1xuICByZXR1cm4gISEoYXdhaXQgZ2V0U2ltdWxhdG9ySW5mbyh1ZGlkKSk7XG59XG5cbmFzeW5jIGZ1bmN0aW9uIHNhZmVSaW1SYWYgKGRlbFBhdGgsIHRyeU51bSA9IDApIHtcbiAgdHJ5IHtcbiAgICBhd2FpdCBmcy5yaW1yYWYoZGVsUGF0aCk7XG4gIH0gY2F0Y2ggKGVycikge1xuICAgIGlmICh0cnlOdW0gPCAyMCkge1xuICAgICAgaWYgKGVyci5tZXNzYWdlLmluZGV4T2YoJ0VOT1RFTVBUWScpICE9PSAtMSkge1xuICAgICAgICBsb2cuZGVidWcoYFBhdGggJyR7ZGVsUGF0aH0nIHdhcyBub3QgZW1wdHkgZHVyaW5nIGRlbGV0ZTsgcmV0cnlpbmdgKTtcbiAgICAgICAgcmV0dXJuIGF3YWl0IHNhZmVSaW1SYWYoZGVsUGF0aCwgdHJ5TnVtICsgMSk7XG4gICAgICB9IGVsc2UgaWYgKGVyci5tZXNzYWdlLmluZGV4T2YoJ0VOT0VOVCcpICE9PSAtMSkge1xuICAgICAgICBsb2cuZGVidWcoYFBhdGggJyR7ZGVsUGF0aH0nIGRpZCBub3QgZXhpc3Qgd2hlbiB3ZSB0cmllZCB0byBkZWxldGUsIGlnbm9yaW5nYCk7XG4gICAgICAgIHJldHVybiBhd2FpdCBzYWZlUmltUmFmKGRlbFBhdGgsIHRyeU51bSArIDEpO1xuICAgICAgfVxuICAgIH1cbiAgfVxufVxuXG4vKipcbiAqIEluc3RhbGwgYW4gU1NMIGNlcnRpZmljYXRlIHRvIGEgZGV2aWNlIHdpdGggZ2l2ZW4gdWRpZFxuICogQHBhcmFtIHtzdHJpbmd9IHBlbVRleHQgU1NMIHBlbSB0ZXh0XG4gKiBAcGFyYW0ge3N0cmluZ30gdWRpZCBJZGVudGlmaWVyIG9mIHRoZSBTaW11bGF0b3JcbiAqL1xuYXN5bmMgZnVuY3Rpb24gaW5zdGFsbFNTTENlcnQgKHBlbVRleHQsIHVkaWQpIHtcbiAgLy8gQ2hlY2sgdGhhdCBvcGVuc3NsIGlzIGluc3RhbGxlZCBvbiB0aGUgcGF0aFxuICB0cnkge1xuICAgIGF3YWl0IGZzLndoaWNoKCdvcGVuc3NsJyk7XG4gIH0gY2F0Y2ggKGUpIHtcbiAgICBsb2cuZGVidWcoYGN1c3RvbVNTTENlcnQgcmVxdWlyZXMgb3BlbnNzbCB0byBiZSBhdmFpbGFibGUgb24gcGF0aGApO1xuICAgIGxvZy5lcnJvckFuZFRocm93KGBDb21tYW5kICdvcGVuc3NsJyBub3QgZm91bmRgKTtcbiAgfVxuXG4gIC8vIENoZWNrIHRoYXQgc3FsaXRlMyBpcyBpbnN0YWxsZWQgb24gdGhlIHBhdGhcbiAgdHJ5IHtcbiAgICBhd2FpdCBmcy53aGljaCgnc3FsaXRlMycpO1xuICB9IGNhdGNoIChlKSB7XG4gICAgbG9nLmRlYnVnKGBjdXN0b21TU0xDZXJ0IHJlcXVpcmVzIHNxbGl0ZTMgdG8gYmUgYXZhaWxhYmxlIG9uIHBhdGhgKTtcbiAgICBsb2cuZXJyb3JBbmRUaHJvdyhgQ29tbWFuZCAnc3FsaXRlMycgbm90IGZvdW5kYCk7XG4gIH1cblxuICAvLyBDcmVhdGUgYSB0ZW1wb3JhcnkgZmlsZSB0byBzdG9yZSBQRU0gdGV4dFxuICAvLyAoYSB0ZW1wIGZpbGUgaXMgbmVjZXNzYXJ5IHRvIHJ1biBgb3BlbnNzbGAgc2hlbGwgY29tbWFuZHMsIGNhbid0IGJlIGRvbmUgaW4gbWVtb3J5KVxuICBsZXQgdGVtcEZpbGVOYW1lID0gcGF0aC5yZXNvbHZlKGF3YWl0IHRlbXBEaXIub3BlbkRpcigpLCAndGVtcC1zc2wtY2VydC5wZW0nKTtcbiAgbGV0IHBhdGhUb0tleWNoYWluID0gbmV3IFNpbXVsYXRvcih1ZGlkKS5nZXREaXIoKTtcbiAgYXdhaXQgZnMud3JpdGVGaWxlKHRlbXBGaWxlTmFtZSwgcGVtVGV4dCk7XG4gIHRyeSB7XG4gICAgYXdhaXQgZnMuc3RhdChwYXRoVG9LZXljaGFpbik7XG4gIH0gY2F0Y2ggKGUpIHtcbiAgICBsb2cuZGVidWcoYENvdWxkIG5vdCBpbnN0YWxsIFNTTCBjZXJ0aWZpY2F0ZS4gTm8gc2ltdWxhdG9yIHdpdGggdWRpZCAnJHt1ZGlkfSdgKTtcbiAgICBsb2cuZXJyb3JBbmRUaHJvdyhlKTtcbiAgfVxuXG4gIC8vIERvIHRoZSBjZXJ0aWZpY2F0ZSBpbnN0YWxsYXRpb25cbiAgbGV0IGNlcnRpZmljYXRlID0gbmV3IENlcnRpZmljYXRlKHRlbXBGaWxlTmFtZSk7XG4gIGxvZy5kZWJ1ZyhgSW5zdGFsbGluZyBjZXJ0aWZpY2F0ZSB0byAke3BhdGhUb0tleWNoYWlufWApO1xuICBhd2FpdCBjZXJ0aWZpY2F0ZS5hZGQocGF0aFRvS2V5Y2hhaW4pO1xuXG4gIC8vIFJlbW92ZSB0aGUgdGVtcG9yYXJ5IGZpbGVcbiAgYXdhaXQgZnMudW5saW5rKHRlbXBGaWxlTmFtZSk7XG5cbiAgcmV0dXJuIGNlcnRpZmljYXRlO1xufVxuXG5hc3luYyBmdW5jdGlvbiB1bmluc3RhbGxTU0xDZXJ0IChwZW1UZXh0LCB1ZGlkKSB7XG4gIHRyeSB7XG4gICAgbGV0IHRlbXBGaWxlTmFtZSA9IHBhdGgucmVzb2x2ZShfX2Rpcm5hbWUsICd0ZW1wLXNzbC1jZXJ0LnBlbScpO1xuICAgIGxldCBwYXRoVG9LZXljaGFpbiA9IHBhdGgucmVzb2x2ZShuZXcgU2ltdWxhdG9yKHVkaWQpLmdldERpcigpKTtcbiAgICBhd2FpdCBmcy53cml0ZUZpbGUodGVtcEZpbGVOYW1lLCBwZW1UZXh0KTtcbiAgICBsZXQgY2VydGlmaWNhdGUgPSBuZXcgQ2VydGlmaWNhdGUodGVtcEZpbGVOYW1lKTtcbiAgICBhd2FpdCBjZXJ0aWZpY2F0ZS5yZW1vdmUocGF0aFRvS2V5Y2hhaW4pO1xuICAgIGF3YWl0IGZzLnVubGluayh0ZW1wRmlsZU5hbWUpO1xuICAgIHJldHVybiBjZXJ0aWZpY2F0ZTtcbiAgfSBjYXRjaCAoZSkge1xuICAgIGxvZy5kZWJ1ZyhgQ291bGQgbm90IHVuaW5zdGFsbCBTU0wgY2VydGlmaWNhdGUuIE5vIHNpbXVsYXRvciB3aXRoIHVkaWQgJyR7dWRpZH0nYCk7XG4gICAgbG9nLmVycm9yQW5kVGhyb3coZSk7XG4gIH1cbn1cblxuLyoqXG4gKiBDaGVjayBpZiB0aGUgU2ltdWxhdG9yIGFscmVhZHkgaGFzIHRoaXMgU1NMIGNlcnRpZmljYXRlXG4gKiBAcGFyYW0ge3N0cmluZ30gcGVtVGV4dCBQRU0gdGV4dCBvZiBTU0wgY2VydFxuICogQHBhcmFtIHtzdHJpbmd9IHVkaWQgSWRlbnRpZmllciBvZiB0aGUgU2ltdWxhdG9yXG4gKi9cbmFzeW5jIGZ1bmN0aW9uIGhhc1NTTENlcnQgKHBlbVRleHQsIHVkaWQpIHtcbiAgY29uc3QgdGVtcEZpbGVOYW1lID0gcGF0aC5yZXNvbHZlKGF3YWl0IHRlbXBEaXIub3BlbkRpcigpLCAndGVtcC1zc2wtY2VydC5wZW0nKTtcbiAgY29uc3QgcGF0aFRvS2V5Y2hhaW4gPSBuZXcgU2ltdWxhdG9yKHVkaWQpLmdldERpcigpO1xuICBhd2FpdCBmcy53cml0ZUZpbGUodGVtcEZpbGVOYW1lLCBwZW1UZXh0KTtcbiAgY29uc3QgY2VydGlmaWNhdGUgPSBuZXcgQ2VydGlmaWNhdGUodGVtcEZpbGVOYW1lKTtcbiAgcmV0dXJuIGNlcnRpZmljYXRlLmhhcyhwYXRoVG9LZXljaGFpbik7XG59XG5cbi8qKlxuICogUnVucyBhIGNvbW1hbmQgbGluZSBzcWxpdGUzIHF1ZXJ5XG4gKlxuICogQHBhcmFtIHtzdHJpbmd9IGRiIC0gRnVsbCBwYXRoIHRvIHNxbGl0ZSBkYXRhYmFzZVxuICogQHBhcmFtIHtzdHJpbmd9IHF1ZXJ5IC0gVGhlIGFjdHVhbCBxdWVyeSBzdHJpbmdcbiAqIEBwYXJhbSB7Li4uc3RyaW5nfSBxdWVyeVBhcmFtcyAtIFRoZSBsaXN0IG9mIHF1ZXJ5IHBhcmFtZXRlcnNcbiAqIEByZXR1cm5zIHtzdHJpbmd9IHNxbGl0ZSBjb21tYW5kIHN0ZG91dFxuICovXG5hc3luYyBmdW5jdGlvbiBleGVjU1FMaXRlUXVlcnkgKGRiLCBxdWVyeSwgLi4ucXVlcnlQYXJhbXMpIHtcbiAgcXVlcnkgPSBxdWVyeS5yZXBsYWNlKC9cXG4rL2csICcgJyk7XG4gIGxldCBxdWVyeVRva2VucyA9IHF1ZXJ5LnNwbGl0KCc/Jyk7XG4gIGxldCBmb3JtYXR0ZWRRdWVyeSA9IFtdO1xuICBxdWVyeVBhcmFtc1xuICAgIC5tYXAoKHBhcmFtKSA9PiBgJHtwYXJhbX1gKVxuICAgIC5mb3JFYWNoKChwYXJhbSwgaSkgPT4ge1xuICAgICAgZm9ybWF0dGVkUXVlcnkucHVzaChxdWVyeVRva2Vuc1tpXSk7XG4gICAgICBmb3JtYXR0ZWRRdWVyeS5wdXNoKHBhcmFtLnJlcGxhY2UoLycvZywgXCInJ1wiKSk7XG4gICAgfSk7XG4gIGZvcm1hdHRlZFF1ZXJ5LnB1c2gocXVlcnlUb2tlbnNbcXVlcnlUb2tlbnMubGVuZ3RoIC0gMV0pO1xuXG4gIGxvZy5kZWJ1ZyhgRXhlY3V0aW5nIFNRTCBxdWVyeSBcIiR7Zm9ybWF0dGVkUXVlcnkuam9pbignJyl9XCIgb24gJyR7ZGJ9J2ApO1xuICB0cnkge1xuICAgIHJldHVybiAoYXdhaXQgZXhlYygnc3FsaXRlMycsIFsnLWxpbmUnLCBkYiwgZm9ybWF0dGVkUXVlcnkuam9pbignJyldKSkuc3Rkb3V0O1xuICB9IGNhdGNoIChlcnIpIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoYENhbm5vdCBleGVjdXRlIFNRTGl0ZSBxdWVyeSBcIiR7Zm9ybWF0dGVkUXVlcnkuam9pbignJyl9XCIgdG8gJyR7ZGJ9Jy4gYCArXG4gICAgICBgT3JpZ2luYWwgZXJyb3I6ICR7ZXJyLnN0ZGVycn1gKTtcbiAgfVxufVxuXG5hc3luYyBmdW5jdGlvbiBnZXREZXZlbG9wZXJSb290ICgpIHtcbiAgY29uc3Qge3N0ZG91dH0gPSBhd2FpdCBleGVjKCd4Y29kZS1zZWxlY3QnLCBbJy1wJ10pO1xuICByZXR1cm4gc3Rkb3V0LnRyaW0oKTtcbn1cblxuLyoqXG4gKiBBY3RpdmF0ZXMgdGhlIGFwcCBoYXZpbmcgdGhlIGdpdmVuIHByb2Nlc3MgaWRlbnRpZmllci5cbiAqIFNlZSBodHRwczovL2RldmVsb3Blci5hcHBsZS5jb20vZG9jdW1lbnRhdGlvbi9hcHBraXQvbnNydW5uaW5nYXBwbGljYXRpb24vMTUyODcyNS1hY3RpdmF0ZXdpdGhvcHRpb25zP2xhbmd1YWdlPW9iamNcbiAqIGZvciBtb3JlIGRldGFpbHMuXG4gKlxuICogQHBhcmFtIHtudW1iZXJ8c3RyaW5nfSBwaWQgQXBwIHByb2Nlc3MgaWRlbnRpZmllclxuICogQHRocm93cyB7RXJyb3J9IElmIHRoZSBnaXZlbiBQSUQgaXMgbm90IHJ1bm5pbmcgb3IgdGhlcmUgd2FzIGEgZmFpbHVyZVxuICogd2hpbGUgYWN0aXZhdGluZyB0aGUgYXBwXG4gKi9cbmFzeW5jIGZ1bmN0aW9uIGFjdGl2YXRlQXBwIChwaWQpIHtcbiAgdHJ5IHtcbiAgICBhd2FpdCBleGVjKCdvc2FzY3JpcHQnLCBbJy1lJywgQVBQX0FDVElWQVRJT05fU0NSSVBUKHBpZCldKTtcbiAgfSBjYXRjaCAoZSkge1xuICAgIHRocm93IG5ldyBFcnJvcihgU2ltdWxhdG9yIHdpbmRvdyBjYW5ub3QgYmUgYWN0aXZhdGVkLiBPcmlnaW5hbCBlcnJvcjogJHtlLnN0ZGVyciB8fCBlLm1lc3NhZ2V9YCk7XG4gIH1cbn1cblxuLyoqXG4gKiBFeGVjdXRlcyBhbiBhcHAgYW5kIHZlcmlmaWVzIGlmIGl0IHdhcyBsYXVuY2hlZCBwcm9wZXJseVxuICpcbiAqIEBwYXJhbSB7U2ltY3RsfSBzaW1jdGwgU2ltY3RsIGluc3RhbmNlXG4gKiBAcGFyYW0ge3N0cmluZ30gYnVuZGxlSWQgYnVuZGxlIGlkZW50aWZpZXIgb2YgdGhlIGRlc3RpbmF0aW9uIGFwcFxuICogQHBhcmFtIHtudW1iZXJ9IHRpbWVvdXRNcyBbMjUwMDBdIFRoZSBtYXhpbXVtIHRpbWUgdG8gd2FpdCB1bnRpbFxuICogdGhlIGFwcCBpcyBydW5uaW5nXG4gKiBAdGhyb3dzIHtFcnJvcn0gSWYgdGhlIGFwcCBpcyBzdGlsbCBub3QgcnVubmluZyBhZnRlciB0aGUgZ2l2ZW4gdGltZW91dFxuICovXG5hc3luYyBmdW5jdGlvbiBsYXVuY2hBcHAgKHNpbWN0bCwgYnVuZGxlSWQsIHRpbWVvdXRNcyA9IDI1MDAwKSB7XG4gIGxldCBsYXN0RXJyb3I7XG4gIHRyeSB7XG4gICAgYXdhaXQgd2FpdEZvckNvbmRpdGlvbihhc3luYyAoKSA9PiB7XG4gICAgICB0cnkge1xuICAgICAgICBjb25zdCBzdGRvdXQgPSBhd2FpdCBzaW1jdGwubGF1bmNoQXBwKE1PQklMRV9TQUZBUklfQlVORExFX0lELCAxKTtcbiAgICAgICAgcmV0dXJuIFBST0NFU1NfTEFVTkNIX09LX1BBVFRFUk4oTU9CSUxFX1NBRkFSSV9CVU5ETEVfSUQpLnRlc3Qoc3Rkb3V0KTtcbiAgICAgIH0gY2F0Y2ggKGVycikge1xuICAgICAgICBsYXN0RXJyb3IgPSBlcnIuc3RkZXJyIHx8IGVyci5tZXNzYWdlO1xuICAgICAgfVxuICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH0sIHt3YWl0TXM6IHRpbWVvdXRNcywgaW50ZXJ2YWxNczogNTAwfSk7XG4gIH0gY2F0Y2ggKGUpIHtcbiAgICBsZXQgbXNnID0gYCcke2J1bmRsZUlkfScgZGlkIG5vdCBydW4gYWZ0ZXIgJHt0aW1lb3V0TXN9bXMgdGltZW91dC5gO1xuICAgIGlmIChsYXN0RXJyb3IpIHtcbiAgICAgIG1zZyArPSBgIE9yaWdpbmFsIGVycm9yOiAke2xhc3RFcnJvcn1gO1xuICAgIH1cbiAgICB0aHJvdyBuZXcgRXJyb3IobXNnKTtcbiAgfVxufVxuXG5leHBvcnQge1xuICBraWxsQWxsU2ltdWxhdG9ycyxcbiAgZW5kQWxsU2ltdWxhdG9yRGFlbW9ucyxcbiAgc2FmZVJpbVJhZixcbiAgc2ltRXhpc3RzLFxuICBnZXRTaW11bGF0b3JJbmZvLFxuICBpbnN0YWxsU1NMQ2VydCxcbiAgdW5pbnN0YWxsU1NMQ2VydCxcbiAgaGFzU1NMQ2VydCxcbiAgZXhlY1NRTGl0ZVF1ZXJ5LFxuICB0b0Jpb21ldHJpY0RvbWFpbkNvbXBvbmVudCxcbiAgZ2V0RGV2ZWxvcGVyUm9vdCxcbiAgYWN0aXZhdGVBcHAsXG4gIFNBRkFSSV9TVEFSVFVQX1RJTUVPVVQsXG4gIE1PQklMRV9TQUZBUklfQlVORExFX0lELFxuICBsYXVuY2hBcHAsXG59O1xuIl0sIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7QUFBQTs7QUFDQTs7QUFDQTs7QUFDQTs7QUFDQTs7QUFDQTs7QUFDQTs7QUFDQTs7QUFDQTs7QUFDQTs7QUFHQSxNQUFNQSw0QkFBNEIsR0FBRyxLQUFyQztBQUNBLE1BQU1DLHNCQUFzQixHQUFHLEtBQUssSUFBcEM7O0FBQ0EsTUFBTUMsdUJBQXVCLEdBQUcsd0JBQWhDOzs7QUFDQSxNQUFNQyx5QkFBeUIsR0FBSUMsUUFBRCxJQUFjLElBQUlDLE1BQUosQ0FBWSxHQUFFRCxRQUFRLENBQUNFLE9BQVQsQ0FBaUIsR0FBakIsRUFBc0IsS0FBdEIsQ0FBNkIsV0FBM0MsQ0FBaEQ7O0FBQ0EsTUFBTUMscUJBQXFCLEdBQUlDLEdB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
|
package/lib/geolocation.js
CHANGED
|
@@ -2,9 +2,17 @@ import _ from 'lodash';
|
|
|
2
2
|
import log from './logger';
|
|
3
3
|
import { exec } from 'teen_process';
|
|
4
4
|
import { fs } from '@appium/support';
|
|
5
|
-
import { SYSTEM_PYTHON_PATH } from './utils';
|
|
6
5
|
|
|
7
6
|
const LYFT_SET_LOCATION = 'set-simulator-location';
|
|
7
|
+
const DECIMAL_SEPARATOR_SCRIPT = `
|
|
8
|
+
use framework "Foundation"
|
|
9
|
+
use framework "AppKit"
|
|
10
|
+
use scripting additions
|
|
11
|
+
|
|
12
|
+
set theFormatter to current application's NSNumberFormatter's new()
|
|
13
|
+
set result to theFormatter's decimalSeparator()
|
|
14
|
+
log result as string
|
|
15
|
+
`;
|
|
8
16
|
|
|
9
17
|
/**
|
|
10
18
|
* Set custom geolocation parameters for the given Simulator using LYFT_SET_LOCATION.
|
|
@@ -73,13 +81,8 @@ async function setLocationWithIdb (idb, latitude, longitude) {
|
|
|
73
81
|
*/
|
|
74
82
|
async function setLocationWithAppleScript (sim, latitude, longitude, menu = 'Debug') {
|
|
75
83
|
// Make sure system-wide decimal separator is used
|
|
76
|
-
const
|
|
77
|
-
|
|
78
|
-
'from AppKit import NSNumberFormatter;' +
|
|
79
|
-
'import sys;' +
|
|
80
|
-
'sys.stdout.write(NSNumberFormatter.alloc().init().decimalSeparator())'
|
|
81
|
-
])).stdout;
|
|
82
|
-
|
|
84
|
+
const {stdout, stderr} = await exec('osascript', ['-e', DECIMAL_SEPARATOR_SCRIPT]);
|
|
85
|
+
const decimalSeparator = _.trim(stdout || stderr);
|
|
83
86
|
const [latitudeStr, longitudeStr] = [latitude, longitude]
|
|
84
87
|
.map((coord) => `${coord}`.replace(/[.,]/, decimalSeparator));
|
|
85
88
|
|
package/lib/utils.js
CHANGED
|
@@ -4,7 +4,7 @@ import { exec } from 'teen_process';
|
|
|
4
4
|
import { waitForCondition } from 'asyncbox';
|
|
5
5
|
import { getVersion } from 'appium-xcode';
|
|
6
6
|
import Simctl from 'node-simctl';
|
|
7
|
-
import { fs, tempDir
|
|
7
|
+
import { fs, tempDir } from '@appium/support';
|
|
8
8
|
import { Certificate } from './certificate';
|
|
9
9
|
import path from 'path';
|
|
10
10
|
import Simulator from './simulator-xcode-6';
|
|
@@ -13,18 +13,22 @@ import Simulator from './simulator-xcode-6';
|
|
|
13
13
|
const DEFAULT_SIM_SHUTDOWN_TIMEOUT = 30000;
|
|
14
14
|
const SAFARI_STARTUP_TIMEOUT = 25 * 1000;
|
|
15
15
|
const MOBILE_SAFARI_BUNDLE_ID = 'com.apple.mobilesafari';
|
|
16
|
-
const SYSTEM_PYTHON_PATH = '/usr/bin/python3';
|
|
17
16
|
const PROCESS_LAUNCH_OK_PATTERN = (bundleId) => new RegExp(`${bundleId.replace('.', '\\.')}:\\s+\\d+`);
|
|
18
|
-
const APP_ACTIVATION_SCRIPT = (pid) =>
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
if
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
17
|
+
const APP_ACTIVATION_SCRIPT = (pid) => `
|
|
18
|
+
use framework "Foundation"
|
|
19
|
+
use framework "AppKit"
|
|
20
|
+
use scripting additions
|
|
21
|
+
|
|
22
|
+
set theApp to current application's NSRunningApplication's runningApplicationWithProcessIdentifier:${pid}
|
|
23
|
+
if theApp = null then
|
|
24
|
+
log "Cannot find Simulator window under PID ${pid}. Is it running?"
|
|
25
|
+
error number 1
|
|
26
|
+
end if
|
|
27
|
+
set result to theApp's activateWithOptions:3
|
|
28
|
+
if not result then
|
|
29
|
+
log "Cannot activate Simulator window under PID ${pid}. Is it running?"
|
|
30
|
+
error number 1
|
|
31
|
+
end if
|
|
28
32
|
`;
|
|
29
33
|
|
|
30
34
|
|
|
@@ -317,15 +321,10 @@ async function getDeveloperRoot () {
|
|
|
317
321
|
* while activating the app
|
|
318
322
|
*/
|
|
319
323
|
async function activateApp (pid) {
|
|
320
|
-
const tmpScript = await tempDir.path({
|
|
321
|
-
prefix: `activate_sim_${util.uuidV4().substring(0, 8)}`,
|
|
322
|
-
suffix: '.py',
|
|
323
|
-
});
|
|
324
|
-
await fs.writeFile(tmpScript, APP_ACTIVATION_SCRIPT(pid), 'utf8');
|
|
325
324
|
try {
|
|
326
|
-
await exec(
|
|
327
|
-
}
|
|
328
|
-
|
|
325
|
+
await exec('osascript', ['-e', APP_ACTIVATION_SCRIPT(pid)]);
|
|
326
|
+
} catch (e) {
|
|
327
|
+
throw new Error(`Simulator window cannot be activated. Original error: ${e.stderr || e.message}`);
|
|
329
328
|
}
|
|
330
329
|
}
|
|
331
330
|
|
|
@@ -374,6 +373,5 @@ export {
|
|
|
374
373
|
activateApp,
|
|
375
374
|
SAFARI_STARTUP_TIMEOUT,
|
|
376
375
|
MOBILE_SAFARI_BUNDLE_ID,
|
|
377
|
-
SYSTEM_PYTHON_PATH,
|
|
378
376
|
launchApp,
|
|
379
377
|
};
|