appium-remote-debugger 9.1.2 → 9.1.4
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 +1 -0
- package/README.md +1 -13
- package/build/index.js +2 -9
- package/build/lib/atoms.js +2 -25
- package/build/lib/atoms.js.map +1 -0
- package/build/lib/logger.js +2 -8
- package/build/lib/logger.js.map +1 -0
- package/build/lib/mixins/connect.js +6 -72
- package/build/lib/mixins/connect.js.map +1 -0
- package/build/lib/mixins/events.js +2 -6
- package/build/lib/mixins/events.js.map +1 -0
- package/build/lib/mixins/execute.js +4 -37
- package/build/lib/mixins/execute.js.map +1 -0
- package/build/lib/mixins/index.js +2 -12
- package/build/lib/mixins/index.js.map +1 -0
- package/build/lib/mixins/message-handlers.js +2 -36
- package/build/lib/mixins/message-handlers.js.map +1 -0
- package/build/lib/mixins/navigate.js +5 -55
- package/build/lib/mixins/navigate.js.map +1 -0
- package/build/lib/protocol/index.js +21 -10
- package/build/lib/protocol/index.js.map +1 -0
- package/build/lib/remote-debugger-real-device.js +2 -12
- package/build/lib/remote-debugger-real-device.js.map +1 -0
- package/build/lib/remote-debugger.js +3 -64
- package/build/lib/remote-debugger.js.map +1 -0
- package/build/lib/rpc/index.js +2 -8
- package/build/lib/rpc/index.js.map +1 -0
- package/build/lib/rpc/remote-messages.js +6 -31
- package/build/lib/rpc/remote-messages.js.map +1 -0
- package/build/lib/rpc/rpc-client-real-device.js +2 -19
- package/build/lib/rpc/rpc-client-real-device.js.map +1 -0
- package/build/lib/rpc/rpc-client-simulator.js +5 -33
- package/build/lib/rpc/rpc-client-simulator.js.map +1 -0
- package/build/lib/rpc/rpc-client.js +14 -112
- package/build/lib/rpc/rpc-client.js.map +1 -0
- package/build/lib/rpc/rpc-message-handler.js +2 -55
- package/build/lib/rpc/rpc-message-handler.js.map +1 -0
- package/build/lib/utils.js +10 -47
- package/build/lib/utils.js.map +1 -0
- package/package.json +49 -25
- package/scripts/build-atoms.js +6 -0
- package/scripts/build-selenium.js +3 -0
- package/scripts/common.js +194 -0
- package/scripts/import-atoms.js +3 -0
package/CHANGELOG.md
ADDED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
## [9.1.4](https://github.com/appium/appium-remote-debugger/compare/v9.1.3...v9.1.4) (2022-11-06)
|
package/README.md
CHANGED
|
@@ -6,8 +6,6 @@
|
|
|
6
6
|
|
|
7
7
|
A Node.js frontend for the Remote Debugger protocol used by Appium to connect to iOS webviews and Safari. Written using ES6+.
|
|
8
8
|
|
|
9
|
-
Issues for this repo are disabled. Log any issues at the [main Appium repo's issue tracker](https://github.com/appium/appium/issues).
|
|
10
|
-
|
|
11
9
|
## Safari's version of the WebKit API
|
|
12
10
|
|
|
13
11
|
Safari implements a wonky version of the WebKit API. It is not documented. The
|
|
@@ -35,19 +33,9 @@ One caveat is that there are some changes that are needed for Appium, that are
|
|
|
35
33
|
not yet in the Selenium codebase. See the [atoms notes](./atoms-notes.md) for
|
|
36
34
|
details.
|
|
37
35
|
|
|
38
|
-
|
|
39
|
-
## Watch
|
|
40
|
-
|
|
41
|
-
```
|
|
42
|
-
npm run watch
|
|
43
|
-
```
|
|
44
|
-
|
|
45
|
-
```
|
|
46
|
-
gulp watch
|
|
47
|
-
```
|
|
48
|
-
|
|
49
36
|
## Test
|
|
50
37
|
|
|
51
38
|
```
|
|
52
39
|
npm test
|
|
40
|
+
npm e2e-test
|
|
53
41
|
```
|
package/build/index.js
CHANGED
|
@@ -1,7 +1,6 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
|
|
3
3
|
var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault");
|
|
4
|
-
|
|
5
4
|
Object.defineProperty(exports, "__esModule", {
|
|
6
5
|
value: true
|
|
7
6
|
});
|
|
@@ -24,20 +23,14 @@ Object.defineProperty(exports, "RemoteDebuggerRealDevice", {
|
|
|
24
23
|
}
|
|
25
24
|
});
|
|
26
25
|
exports.createRemoteDebugger = createRemoteDebugger;
|
|
27
|
-
|
|
28
26
|
require("source-map-support/register");
|
|
29
|
-
|
|
30
27
|
var _remoteDebugger = require("./lib/remote-debugger");
|
|
31
|
-
|
|
32
28
|
var _remoteDebuggerRealDevice = _interopRequireDefault(require("./lib/remote-debugger-real-device"));
|
|
33
|
-
|
|
34
29
|
function createRemoteDebugger(opts, realDevice = false) {
|
|
35
30
|
if (realDevice) {
|
|
36
31
|
return new _remoteDebuggerRealDevice.default(opts);
|
|
37
32
|
} else {
|
|
38
33
|
return new _remoteDebugger.RemoteDebugger(opts);
|
|
39
34
|
}
|
|
40
|
-
}
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
//# sourceMappingURL=data:application/json;charset=utf8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJuYW1lcyI6WyJjcmVhdGVSZW1vdGVEZWJ1Z2dlciIsIm9wdHMiLCJyZWFsRGV2aWNlIiwiUmVtb3RlRGVidWdnZXJSZWFsRGV2aWNlIiwiUmVtb3RlRGVidWdnZXIiXSwic291cmNlUm9vdCI6Ii4uIiwic291cmNlcyI6WyJpbmRleC5qcyJdLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBSZW1vdGVEZWJ1Z2dlciwgUkVNT1RFX0RFQlVHR0VSX1BPUlQgfSBmcm9tICcuL2xpYi9yZW1vdGUtZGVidWdnZXInO1xuaW1wb3J0IFJlbW90ZURlYnVnZ2VyUmVhbERldmljZSBmcm9tICcuL2xpYi9yZW1vdGUtZGVidWdnZXItcmVhbC1kZXZpY2UnO1xuXG5cbmZ1bmN0aW9uIGNyZWF0ZVJlbW90ZURlYnVnZ2VyIChvcHRzLCByZWFsRGV2aWNlID0gZmFsc2UpIHtcbiAgaWYgKHJlYWxEZXZpY2UpIHtcbiAgICByZXR1cm4gbmV3IFJlbW90ZURlYnVnZ2VyUmVhbERldmljZShvcHRzKTtcbiAgfSBlbHNlIHtcbiAgICByZXR1cm4gbmV3IFJlbW90ZURlYnVnZ2VyKG9wdHMpO1xuICB9XG59XG5cbmV4cG9ydCB7XG4gIGNyZWF0ZVJlbW90ZURlYnVnZ2VyLCBSZW1vdGVEZWJ1Z2dlciwgUmVtb3RlRGVidWdnZXJSZWFsRGV2aWNlLFxuICBSRU1PVEVfREVCVUdHRVJfUE9SVCxcbn07XG4iXSwibWFwcGluZ3MiOiI7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0FBQUE7O0FBQ0E7O0FBR0EsU0FBU0Esb0JBQVQsQ0FBK0JDLElBQS9CLEVBQXFDQyxVQUFVLEdBQUcsS0FBbEQsRUFBeUQ7RUFDdkQsSUFBSUEsVUFBSixFQUFnQjtJQUNkLE9BQU8sSUFBSUMsaUNBQUosQ0FBNkJGLElBQTdCLENBQVA7RUFDRCxDQUZELE1BRU87SUFDTCxPQUFPLElBQUlHLDhCQUFKLENBQW1CSCxJQUFuQixDQUFQO0VBQ0Q7QUFDRiJ9
|
|
35
|
+
}
|
|
36
|
+
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJjcmVhdGVSZW1vdGVEZWJ1Z2dlciIsIm9wdHMiLCJyZWFsRGV2aWNlIiwiUmVtb3RlRGVidWdnZXJSZWFsRGV2aWNlIiwiUmVtb3RlRGVidWdnZXIiXSwic291cmNlcyI6WyIuLi9pbmRleC5qcyJdLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBSZW1vdGVEZWJ1Z2dlciwgUkVNT1RFX0RFQlVHR0VSX1BPUlQgfSBmcm9tICcuL2xpYi9yZW1vdGUtZGVidWdnZXInO1xuaW1wb3J0IFJlbW90ZURlYnVnZ2VyUmVhbERldmljZSBmcm9tICcuL2xpYi9yZW1vdGUtZGVidWdnZXItcmVhbC1kZXZpY2UnO1xuXG5cbmZ1bmN0aW9uIGNyZWF0ZVJlbW90ZURlYnVnZ2VyIChvcHRzLCByZWFsRGV2aWNlID0gZmFsc2UpIHtcbiAgaWYgKHJlYWxEZXZpY2UpIHtcbiAgICByZXR1cm4gbmV3IFJlbW90ZURlYnVnZ2VyUmVhbERldmljZShvcHRzKTtcbiAgfSBlbHNlIHtcbiAgICByZXR1cm4gbmV3IFJlbW90ZURlYnVnZ2VyKG9wdHMpO1xuICB9XG59XG5cbmV4cG9ydCB7XG4gIGNyZWF0ZVJlbW90ZURlYnVnZ2VyLCBSZW1vdGVEZWJ1Z2dlciwgUmVtb3RlRGVidWdnZXJSZWFsRGV2aWNlLFxuICBSRU1PVEVfREVCVUdHRVJfUE9SVCxcbn07XG4iXSwibWFwcGluZ3MiOiI7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0FBQUE7QUFDQTtBQUdBLFNBQVNBLG9CQUFvQixDQUFFQyxJQUFJLEVBQUVDLFVBQVUsR0FBRyxLQUFLLEVBQUU7RUFDdkQsSUFBSUEsVUFBVSxFQUFFO0lBQ2QsT0FBTyxJQUFJQyxpQ0FBd0IsQ0FBQ0YsSUFBSSxDQUFDO0VBQzNDLENBQUMsTUFBTTtJQUNMLE9BQU8sSUFBSUcsOEJBQWMsQ0FBQ0gsSUFBSSxDQUFDO0VBQ2pDO0FBQ0YifQ==
|
package/build/lib/atoms.js
CHANGED
|
@@ -1,82 +1,59 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
|
|
3
3
|
var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault");
|
|
4
|
-
|
|
5
4
|
Object.defineProperty(exports, "__esModule", {
|
|
6
5
|
value: true
|
|
7
6
|
});
|
|
8
7
|
exports.default = void 0;
|
|
9
8
|
exports.getAtom = getAtom;
|
|
10
9
|
exports.getScriptForAtom = getScriptForAtom;
|
|
11
|
-
|
|
12
10
|
require("source-map-support/register");
|
|
13
|
-
|
|
14
11
|
var _support = require("appium/support");
|
|
15
|
-
|
|
16
12
|
var _path = _interopRequireDefault(require("path"));
|
|
17
|
-
|
|
18
13
|
var _lodash = _interopRequireDefault(require("lodash"));
|
|
19
|
-
|
|
20
14
|
var _logger = _interopRequireDefault(require("./logger"));
|
|
21
|
-
|
|
22
15
|
const atomsCache = {};
|
|
23
|
-
|
|
24
16
|
const inBuildDir = __filename.includes('build/lib/atoms');
|
|
25
|
-
|
|
26
17
|
function getAtomFileName(atomName) {
|
|
27
18
|
return inBuildDir ? _path.default.resolve(__dirname, '..', '..', 'atoms', `${atomName}.js`) : _path.default.resolve(__dirname, '..', 'atoms', `${atomName}.js`);
|
|
28
19
|
}
|
|
29
|
-
|
|
30
20
|
async function getAtom(atomName) {
|
|
31
21
|
if (!_lodash.default.has(atomsCache, atomName)) {
|
|
32
22
|
const atomFileName = getAtomFileName(atomName);
|
|
33
|
-
|
|
34
23
|
try {
|
|
35
24
|
atomsCache[atomName] = await _support.fs.readFile(atomFileName);
|
|
36
25
|
} catch (e) {
|
|
37
26
|
throw new Error(`Unable to load Atom '${atomName}' from file '${atomFileName}'`);
|
|
38
27
|
}
|
|
39
28
|
}
|
|
40
|
-
|
|
41
29
|
return atomsCache[atomName];
|
|
42
30
|
}
|
|
43
|
-
|
|
44
31
|
async function wrapScriptForFrame(script, frame) {
|
|
45
32
|
_logger.default.debug(`Wrapping script for frame '${frame}'`);
|
|
46
|
-
|
|
47
33
|
const elFromCache = await getAtom('get_element_from_cache');
|
|
48
34
|
return `(function (window) { var document = window.document; ` + `return (${script}); })((${elFromCache.toString('utf8')})(${JSON.stringify(frame)}))`;
|
|
49
35
|
}
|
|
50
|
-
|
|
51
36
|
async function getScriptForAtom(atom, args, frames = [], asyncCallBack = null) {
|
|
52
37
|
const atomSrc = await getAtom(atom);
|
|
53
38
|
let script;
|
|
54
|
-
|
|
55
39
|
if (frames.length > 0) {
|
|
56
40
|
script = atomSrc;
|
|
57
|
-
|
|
58
41
|
for (const frame of frames) {
|
|
59
42
|
script = await wrapScriptForFrame(script, frame);
|
|
60
43
|
}
|
|
61
44
|
} else {
|
|
62
45
|
_logger.default.debug(`Executing '${atom}' atom in default context`);
|
|
63
|
-
|
|
64
46
|
script = `(${atomSrc})`;
|
|
65
47
|
}
|
|
66
48
|
|
|
67
49
|
args = args.map(JSON.stringify);
|
|
68
|
-
|
|
69
50
|
if (asyncCallBack) {
|
|
70
51
|
script += `(${args.join(',')}, ${asyncCallBack}, true)`;
|
|
71
52
|
} else {
|
|
72
53
|
script += `(${args.join(',')})`;
|
|
73
54
|
}
|
|
74
|
-
|
|
75
55
|
return script;
|
|
76
56
|
}
|
|
77
|
-
|
|
78
57
|
var _default = getAtom;
|
|
79
|
-
exports.default = _default;
|
|
80
|
-
|
|
81
|
-
|
|
82
|
-
//# sourceMappingURL=data:application/json;charset=utf8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibGliL2F0b21zLmpzIiwibmFtZXMiOlsiYXRvbXNDYWNoZSIsImluQnVpbGREaXIiLCJfX2ZpbGVuYW1lIiwiaW5jbHVkZXMiLCJnZXRBdG9tRmlsZU5hbWUiLCJhdG9tTmFtZSIsInBhdGgiLCJyZXNvbHZlIiwiX19kaXJuYW1lIiwiZ2V0QXRvbSIsIl8iLCJoYXMiLCJhdG9tRmlsZU5hbWUiLCJmcyIsInJlYWRGaWxlIiwiZSIsIkVycm9yIiwid3JhcFNjcmlwdEZvckZyYW1lIiwic2NyaXB0IiwiZnJhbWUiLCJsb2ciLCJkZWJ1ZyIsImVsRnJvbUNhY2hlIiwidG9TdHJpbmciLCJKU09OIiwic3RyaW5naWZ5IiwiZ2V0U2NyaXB0Rm9yQXRvbSIsImF0b20iLCJhcmdzIiwiZnJhbWVzIiwiYXN5bmNDYWxsQmFjayIsImF0b21TcmMiLCJsZW5ndGgiLCJtYXAiLCJqb2luIl0sInNvdXJjZVJvb3QiOiIuLi8uLiIsInNvdXJjZXMiOlsibGliL2F0b21zLmpzIl0sInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IGZzIH0gZnJvbSAnYXBwaXVtL3N1cHBvcnQnO1xuaW1wb3J0IHBhdGggZnJvbSAncGF0aCc7XG5pbXBvcnQgXyBmcm9tICdsb2Rhc2gnO1xuaW1wb3J0IGxvZyBmcm9tICcuL2xvZ2dlcic7XG5cblxuY29uc3QgYXRvbXNDYWNoZSA9IHt9O1xuXG5jb25zdCBpbkJ1aWxkRGlyID0gX19maWxlbmFtZS5pbmNsdWRlcygnYnVpbGQvbGliL2F0b21zJyk7XG5cbmZ1bmN0aW9uIGdldEF0b21GaWxlTmFtZSAoYXRvbU5hbWUpIHtcbiAgcmV0dXJuIGluQnVpbGREaXJcbiAgICA/IHBhdGgucmVzb2x2ZShfX2Rpcm5hbWUsICcuLicsICcuLicsICdhdG9tcycsIGAke2F0b21OYW1lfS5qc2ApXG4gICAgOiBwYXRoLnJlc29sdmUoX19kaXJuYW1lLCAnLi4nLCAnYXRvbXMnLCBgJHthdG9tTmFtZX0uanNgKTtcbn1cblxuYXN5bmMgZnVuY3Rpb24gZ2V0QXRvbSAoYXRvbU5hbWUpIHtcbiAgLy8gY2hlY2sgaWYgd2UgaGF2ZSBhbHJlYWR5IGxvYWRlZCBhbiBjYWNoZWQgdGhpcyBhdG9tXG4gIGlmICghXy5oYXMoYXRvbXNDYWNoZSwgYXRvbU5hbWUpKSB7XG4gICAgY29uc3QgYXRvbUZpbGVOYW1lID0gZ2V0QXRvbUZpbGVOYW1lKGF0b21OYW1lKTtcbiAgICB0cnkge1xuICAgICAgYXRvbXNDYWNoZVthdG9tTmFtZV0gPSBhd2FpdCBmcy5yZWFkRmlsZShhdG9tRmlsZU5hbWUpO1xuICAgIH0gY2F0Y2ggKGUpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcihgVW5hYmxlIHRvIGxvYWQgQXRvbSAnJHthdG9tTmFtZX0nIGZyb20gZmlsZSAnJHthdG9tRmlsZU5hbWV9J2ApO1xuICAgIH1cbiAgfVxuXG4gIHJldHVybiBhdG9tc0NhY2hlW2F0b21OYW1lXTtcbn1cblxuYXN5bmMgZnVuY3Rpb24gd3JhcFNjcmlwdEZvckZyYW1lIChzY3JpcHQsIGZyYW1lKSB7XG4gIGxvZy5kZWJ1ZyhgV3JhcHBpbmcgc2NyaXB0IGZvciBmcmFtZSAnJHtmcmFtZX0nYCk7XG4gIGNvbnN0IGVsRnJvbUNhY2hlID0gYXdhaXQgZ2V0QXRvbSgnZ2V0X2VsZW1lbnRfZnJvbV9jYWNoZScpO1xuICByZXR1cm4gYChmdW5jdGlvbiAod2luZG93KSB7IHZhciBkb2N1bWVudCA9IHdpbmRvdy5kb2N1bWVudDsgYCArXG4gICAgICAgICBgcmV0dXJuICgke3NjcmlwdH0pOyB9KSgoJHtlbEZyb21DYWNoZS50b1N0cmluZygndXRmOCcpfSkoJHtKU09OLnN0cmluZ2lmeShmcmFtZSl9KSlgO1xufVxuXG5hc3luYyBmdW5jdGlvbiBnZXRTY3JpcHRGb3JBdG9tIChhdG9tLCBhcmdzLCBmcmFtZXMgPSBbXSwgYXN5bmNDYWxsQmFjayA9IG51bGwpIHtcbiAgY29uc3QgYXRvbVNyYyA9IGF3YWl0IGdldEF0b20oYXRvbSk7XG4gIGxldCBzY3JpcHQ7XG4gIGlmIChmcmFtZXMubGVuZ3RoID4gMCkge1xuICAgIHNjcmlwdCA9IGF0b21TcmM7XG4gICAgZm9yIChjb25zdCBmcmFtZSBvZiBmcmFtZXMpIHtcbiAgICAgIHNjcmlwdCA9IGF3YWl0IHdyYXBTY3JpcHRGb3JGcmFtZShzY3JpcHQsIGZyYW1lKTtcbiAgICB9XG4gIH0gZWxzZSB7XG4gICAgbG9nLmRlYnVnKGBFeGVjdXRpbmcgJyR7YXRvbX0nIGF0b20gaW4gZGVmYXVsdCBjb250ZXh0YCk7XG4gICAgc2NyaXB0ID0gYCgke2F0b21TcmN9KWA7XG4gIH1cblxuICAvLyBhZGQgdGhlIGFyZ3VtZW50cywgYXMgc3RyaW5nc1xuICBhcmdzID0gYXJncy5tYXAoSlNPTi5zdHJpbmdpZnkpO1xuICBpZiAoYXN5bmNDYWxsQmFjaykge1xuICAgIHNjcmlwdCArPSBgKCR7YXJncy5qb2luKCcsJyl9LCAke2FzeW5jQ2FsbEJhY2t9LCB0cnVlKWA7XG4gIH0gZWxzZSB7XG4gICAgc2NyaXB0ICs9IGAoJHthcmdzLmpvaW4oJywnKX0pYDtcbiAgfVxuXG4gIHJldHVybiBzY3JpcHQ7XG59XG5cbmV4cG9ydCB7IGdldEF0b20sIGdldFNjcmlwdEZvckF0b20gfTtcbmV4cG9ydCBkZWZhdWx0IGdldEF0b207XG4iXSwibWFwcGluZ3MiOiI7Ozs7Ozs7Ozs7Ozs7QUFBQTs7QUFDQTs7QUFDQTs7QUFDQTs7QUFHQSxNQUFNQSxVQUFVLEdBQUcsRUFBbkI7O0FBRUEsTUFBTUMsVUFBVSxHQUFHQyxVQUFVLENBQUNDLFFBQVgsQ0FBb0IsaUJBQXBCLENBQW5COztBQUVBLFNBQVNDLGVBQVQsQ0FBMEJDLFFBQTFCLEVBQW9DO0VBQ2xDLE9BQU9KLFVBQVUsR0FDYkssYUFBQSxDQUFLQyxPQUFMLENBQWFDLFNBQWIsRUFBd0IsSUFBeEIsRUFBOEIsSUFBOUIsRUFBb0MsT0FBcEMsRUFBOEMsR0FBRUgsUUFBUyxLQUF6RCxDQURhLEdBRWJDLGFBQUEsQ0FBS0MsT0FBTCxDQUFhQyxTQUFiLEVBQXdCLElBQXhCLEVBQThCLE9BQTlCLEVBQXdDLEdBQUVILFFBQVMsS0FBbkQsQ0FGSjtBQUdEOztBQUVELGVBQWVJLE9BQWYsQ0FBd0JKLFFBQXhCLEVBQWtDO0VBRWhDLElBQUksQ0FBQ0ssZUFBQSxDQUFFQyxHQUFGLENBQU1YLFVBQU4sRUFBa0JLLFFBQWxCLENBQUwsRUFBa0M7SUFDaEMsTUFBTU8sWUFBWSxHQUFHUixlQUFlLENBQUNDLFFBQUQsQ0FBcEM7O0lBQ0EsSUFBSTtNQUNGTCxVQUFVLENBQUNLLFFBQUQsQ0FBVixHQUF1QixNQUFNUSxXQUFBLENBQUdDLFFBQUgsQ0FBWUYsWUFBWixDQUE3QjtJQUNELENBRkQsQ0FFRSxPQUFPRyxDQUFQLEVBQVU7TUFDVixNQUFNLElBQUlDLEtBQUosQ0FBVyx3QkFBdUJYLFFBQVMsZ0JBQWVPLFlBQWEsR0FBdkUsQ0FBTjtJQUNEO0VBQ0Y7O0VBRUQsT0FBT1osVUFBVSxDQUFDSyxRQUFELENBQWpCO0FBQ0Q7O0FBRUQsZUFBZVksa0JBQWYsQ0FBbUNDLE1BQW5DLEVBQTJDQyxLQUEzQyxFQUFrRDtFQUNoREMsZUFBQSxDQUFJQyxLQUFKLENBQVcsOEJBQTZCRixLQUFNLEdBQTlDOztFQUNBLE1BQU1HLFdBQVcsR0FBRyxNQUFNYixPQUFPLENBQUMsd0JBQUQsQ0FBakM7RUFDQSxPQUFRLHVEQUFELEdBQ0MsV0FBVVMsTUFBTyxVQUFTSSxXQUFXLENBQUNDLFFBQVosQ0FBcUIsTUFBckIsQ0FBNkIsS0FBSUMsSUFBSSxDQUFDQyxTQUFMLENBQWVOLEtBQWYsQ0FBc0IsSUFEekY7QUFFRDs7QUFFRCxlQUFlTyxnQkFBZixDQUFpQ0MsSUFBakMsRUFBdUNDLElBQXZDLEVBQTZDQyxNQUFNLEdBQUcsRUFBdEQsRUFBMERDLGFBQWEsR0FBRyxJQUExRSxFQUFnRjtFQUM5RSxNQUFNQyxPQUFPLEdBQUcsTUFBTXRCLE9BQU8sQ0FBQ2tCLElBQUQsQ0FBN0I7RUFDQSxJQUFJVCxNQUFKOztFQUNBLElBQUlXLE1BQU0sQ0FBQ0csTUFBUCxHQUFnQixDQUFwQixFQUF1QjtJQUNyQmQsTUFBTSxHQUFHYSxPQUFUOztJQUNBLEtBQUssTUFBTVosS0FBWCxJQUFvQlUsTUFBcEIsRUFBNEI7TUFDMUJYLE1BQU0sR0FBRyxNQUFNRCxrQkFBa0IsQ0FBQ0MsTUFBRCxFQUFTQyxLQUFULENBQWpDO0lBQ0Q7RUFDRixDQUxELE1BS087SUFDTEMsZUFBQSxDQUFJQyxLQUFKLENBQVcsY0FBYU0sSUFBSywyQkFBN0I7O0lBQ0FULE1BQU0sR0FBSSxJQUFHYSxPQUFRLEdBQXJCO0VBQ0Q7O0VBR0RILElBQUksR0FBR0EsSUFBSSxDQUFDSyxHQUFMLENBQVNULElBQUksQ0FBQ0MsU0FBZCxDQUFQOztFQUNBLElBQUlLLGFBQUosRUFBbUI7SUFDakJaLE1BQU0sSUFBSyxJQUFHVSxJQUFJLENBQUNNLElBQUwsQ0FBVSxHQUFWLENBQWUsS0FBSUosYUFBYyxTQUEvQztFQUNELENBRkQsTUFFTztJQUNMWixNQUFNLElBQUssSUFBR1UsSUFBSSxDQUFDTSxJQUFMLENBQVUsR0FBVixDQUFlLEdBQTdCO0VBQ0Q7O0VBRUQsT0FBT2hCLE1BQVA7QUFDRDs7ZUFHY1QsTyJ9
|
|
58
|
+
exports.default = _default;
|
|
59
|
+
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJhdG9tc0NhY2hlIiwiaW5CdWlsZERpciIsIl9fZmlsZW5hbWUiLCJpbmNsdWRlcyIsImdldEF0b21GaWxlTmFtZSIsImF0b21OYW1lIiwicGF0aCIsInJlc29sdmUiLCJfX2Rpcm5hbWUiLCJnZXRBdG9tIiwiXyIsImhhcyIsImF0b21GaWxlTmFtZSIsImZzIiwicmVhZEZpbGUiLCJlIiwiRXJyb3IiLCJ3cmFwU2NyaXB0Rm9yRnJhbWUiLCJzY3JpcHQiLCJmcmFtZSIsImxvZyIsImRlYnVnIiwiZWxGcm9tQ2FjaGUiLCJ0b1N0cmluZyIsIkpTT04iLCJzdHJpbmdpZnkiLCJnZXRTY3JpcHRGb3JBdG9tIiwiYXRvbSIsImFyZ3MiLCJmcmFtZXMiLCJhc3luY0NhbGxCYWNrIiwiYXRvbVNyYyIsImxlbmd0aCIsIm1hcCIsImpvaW4iXSwic291cmNlcyI6WyIuLi8uLi9saWIvYXRvbXMuanMiXSwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgZnMgfSBmcm9tICdhcHBpdW0vc3VwcG9ydCc7XG5pbXBvcnQgcGF0aCBmcm9tICdwYXRoJztcbmltcG9ydCBfIGZyb20gJ2xvZGFzaCc7XG5pbXBvcnQgbG9nIGZyb20gJy4vbG9nZ2VyJztcblxuXG5jb25zdCBhdG9tc0NhY2hlID0ge307XG5cbmNvbnN0IGluQnVpbGREaXIgPSBfX2ZpbGVuYW1lLmluY2x1ZGVzKCdidWlsZC9saWIvYXRvbXMnKTtcblxuZnVuY3Rpb24gZ2V0QXRvbUZpbGVOYW1lIChhdG9tTmFtZSkge1xuICByZXR1cm4gaW5CdWlsZERpclxuICAgID8gcGF0aC5yZXNvbHZlKF9fZGlybmFtZSwgJy4uJywgJy4uJywgJ2F0b21zJywgYCR7YXRvbU5hbWV9LmpzYClcbiAgICA6IHBhdGgucmVzb2x2ZShfX2Rpcm5hbWUsICcuLicsICdhdG9tcycsIGAke2F0b21OYW1lfS5qc2ApO1xufVxuXG5hc3luYyBmdW5jdGlvbiBnZXRBdG9tIChhdG9tTmFtZSkge1xuICAvLyBjaGVjayBpZiB3ZSBoYXZlIGFscmVhZHkgbG9hZGVkIGFuIGNhY2hlZCB0aGlzIGF0b21cbiAgaWYgKCFfLmhhcyhhdG9tc0NhY2hlLCBhdG9tTmFtZSkpIHtcbiAgICBjb25zdCBhdG9tRmlsZU5hbWUgPSBnZXRBdG9tRmlsZU5hbWUoYXRvbU5hbWUpO1xuICAgIHRyeSB7XG4gICAgICBhdG9tc0NhY2hlW2F0b21OYW1lXSA9IGF3YWl0IGZzLnJlYWRGaWxlKGF0b21GaWxlTmFtZSk7XG4gICAgfSBjYXRjaCAoZSkge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKGBVbmFibGUgdG8gbG9hZCBBdG9tICcke2F0b21OYW1lfScgZnJvbSBmaWxlICcke2F0b21GaWxlTmFtZX0nYCk7XG4gICAgfVxuICB9XG5cbiAgcmV0dXJuIGF0b21zQ2FjaGVbYXRvbU5hbWVdO1xufVxuXG5hc3luYyBmdW5jdGlvbiB3cmFwU2NyaXB0Rm9yRnJhbWUgKHNjcmlwdCwgZnJhbWUpIHtcbiAgbG9nLmRlYnVnKGBXcmFwcGluZyBzY3JpcHQgZm9yIGZyYW1lICcke2ZyYW1lfSdgKTtcbiAgY29uc3QgZWxGcm9tQ2FjaGUgPSBhd2FpdCBnZXRBdG9tKCdnZXRfZWxlbWVudF9mcm9tX2NhY2hlJyk7XG4gIHJldHVybiBgKGZ1bmN0aW9uICh3aW5kb3cpIHsgdmFyIGRvY3VtZW50ID0gd2luZG93LmRvY3VtZW50OyBgICtcbiAgICAgICAgIGByZXR1cm4gKCR7c2NyaXB0fSk7IH0pKCgke2VsRnJvbUNhY2hlLnRvU3RyaW5nKCd1dGY4Jyl9KSgke0pTT04uc3RyaW5naWZ5KGZyYW1lKX0pKWA7XG59XG5cbmFzeW5jIGZ1bmN0aW9uIGdldFNjcmlwdEZvckF0b20gKGF0b20sIGFyZ3MsIGZyYW1lcyA9IFtdLCBhc3luY0NhbGxCYWNrID0gbnVsbCkge1xuICBjb25zdCBhdG9tU3JjID0gYXdhaXQgZ2V0QXRvbShhdG9tKTtcbiAgbGV0IHNjcmlwdDtcbiAgaWYgKGZyYW1lcy5sZW5ndGggPiAwKSB7XG4gICAgc2NyaXB0ID0gYXRvbVNyYztcbiAgICBmb3IgKGNvbnN0IGZyYW1lIG9mIGZyYW1lcykge1xuICAgICAgc2NyaXB0ID0gYXdhaXQgd3JhcFNjcmlwdEZvckZyYW1lKHNjcmlwdCwgZnJhbWUpO1xuICAgIH1cbiAgfSBlbHNlIHtcbiAgICBsb2cuZGVidWcoYEV4ZWN1dGluZyAnJHthdG9tfScgYXRvbSBpbiBkZWZhdWx0IGNvbnRleHRgKTtcbiAgICBzY3JpcHQgPSBgKCR7YXRvbVNyY30pYDtcbiAgfVxuXG4gIC8vIGFkZCB0aGUgYXJndW1lbnRzLCBhcyBzdHJpbmdzXG4gIGFyZ3MgPSBhcmdzLm1hcChKU09OLnN0cmluZ2lmeSk7XG4gIGlmIChhc3luY0NhbGxCYWNrKSB7XG4gICAgc2NyaXB0ICs9IGAoJHthcmdzLmpvaW4oJywnKX0sICR7YXN5bmNDYWxsQmFja30sIHRydWUpYDtcbiAgfSBlbHNlIHtcbiAgICBzY3JpcHQgKz0gYCgke2FyZ3Muam9pbignLCcpfSlgO1xuICB9XG5cbiAgcmV0dXJuIHNjcmlwdDtcbn1cblxuZXhwb3J0IHsgZ2V0QXRvbSwgZ2V0U2NyaXB0Rm9yQXRvbSB9O1xuZXhwb3J0IGRlZmF1bHQgZ2V0QXRvbTtcbiJdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7OztBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBR0EsTUFBTUEsVUFBVSxHQUFHLENBQUMsQ0FBQztBQUVyQixNQUFNQyxVQUFVLEdBQUdDLFVBQVUsQ0FBQ0MsUUFBUSxDQUFDLGlCQUFpQixDQUFDO0FBRXpELFNBQVNDLGVBQWUsQ0FBRUMsUUFBUSxFQUFFO0VBQ2xDLE9BQU9KLFVBQVUsR0FDYkssYUFBSSxDQUFDQyxPQUFPLENBQUNDLFNBQVMsRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLE9BQU8sRUFBRyxHQUFFSCxRQUFTLEtBQUksQ0FBQyxHQUM5REMsYUFBSSxDQUFDQyxPQUFPLENBQUNDLFNBQVMsRUFBRSxJQUFJLEVBQUUsT0FBTyxFQUFHLEdBQUVILFFBQVMsS0FBSSxDQUFDO0FBQzlEO0FBRUEsZUFBZUksT0FBTyxDQUFFSixRQUFRLEVBQUU7RUFFaEMsSUFBSSxDQUFDSyxlQUFDLENBQUNDLEdBQUcsQ0FBQ1gsVUFBVSxFQUFFSyxRQUFRLENBQUMsRUFBRTtJQUNoQyxNQUFNTyxZQUFZLEdBQUdSLGVBQWUsQ0FBQ0MsUUFBUSxDQUFDO0lBQzlDLElBQUk7TUFDRkwsVUFBVSxDQUFDSyxRQUFRLENBQUMsR0FBRyxNQUFNUSxXQUFFLENBQUNDLFFBQVEsQ0FBQ0YsWUFBWSxDQUFDO0lBQ3hELENBQUMsQ0FBQyxPQUFPRyxDQUFDLEVBQUU7TUFDVixNQUFNLElBQUlDLEtBQUssQ0FBRSx3QkFBdUJYLFFBQVMsZ0JBQWVPLFlBQWEsR0FBRSxDQUFDO0lBQ2xGO0VBQ0Y7RUFFQSxPQUFPWixVQUFVLENBQUNLLFFBQVEsQ0FBQztBQUM3QjtBQUVBLGVBQWVZLGtCQUFrQixDQUFFQyxNQUFNLEVBQUVDLEtBQUssRUFBRTtFQUNoREMsZUFBRyxDQUFDQyxLQUFLLENBQUUsOEJBQTZCRixLQUFNLEdBQUUsQ0FBQztFQUNqRCxNQUFNRyxXQUFXLEdBQUcsTUFBTWIsT0FBTyxDQUFDLHdCQUF3QixDQUFDO0VBQzNELE9BQVEsdURBQXNELEdBQ3RELFdBQVVTLE1BQU8sVUFBU0ksV0FBVyxDQUFDQyxRQUFRLENBQUMsTUFBTSxDQUFFLEtBQUlDLElBQUksQ0FBQ0MsU0FBUyxDQUFDTixLQUFLLENBQUUsSUFBRztBQUM5RjtBQUVBLGVBQWVPLGdCQUFnQixDQUFFQyxJQUFJLEVBQUVDLElBQUksRUFBRUMsTUFBTSxHQUFHLEVBQUUsRUFBRUMsYUFBYSxHQUFHLElBQUksRUFBRTtFQUM5RSxNQUFNQyxPQUFPLEdBQUcsTUFBTXRCLE9BQU8sQ0FBQ2tCLElBQUksQ0FBQztFQUNuQyxJQUFJVCxNQUFNO0VBQ1YsSUFBSVcsTUFBTSxDQUFDRyxNQUFNLEdBQUcsQ0FBQyxFQUFFO0lBQ3JCZCxNQUFNLEdBQUdhLE9BQU87SUFDaEIsS0FBSyxNQUFNWixLQUFLLElBQUlVLE1BQU0sRUFBRTtNQUMxQlgsTUFBTSxHQUFHLE1BQU1ELGtCQUFrQixDQUFDQyxNQUFNLEVBQUVDLEtBQUssQ0FBQztJQUNsRDtFQUNGLENBQUMsTUFBTTtJQUNMQyxlQUFHLENBQUNDLEtBQUssQ0FBRSxjQUFhTSxJQUFLLDJCQUEwQixDQUFDO0lBQ3hEVCxNQUFNLEdBQUksSUFBR2EsT0FBUSxHQUFFO0VBQ3pCOztFQUdBSCxJQUFJLEdBQUdBLElBQUksQ0FBQ0ssR0FBRyxDQUFDVCxJQUFJLENBQUNDLFNBQVMsQ0FBQztFQUMvQixJQUFJSyxhQUFhLEVBQUU7SUFDakJaLE1BQU0sSUFBSyxJQUFHVSxJQUFJLENBQUNNLElBQUksQ0FBQyxHQUFHLENBQUUsS0FBSUosYUFBYyxTQUFRO0VBQ3pELENBQUMsTUFBTTtJQUNMWixNQUFNLElBQUssSUFBR1UsSUFBSSxDQUFDTSxJQUFJLENBQUMsR0FBRyxDQUFFLEdBQUU7RUFDakM7RUFFQSxPQUFPaEIsTUFBTTtBQUNmO0FBQUMsZUFHY1QsT0FBTztBQUFBIn0=
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"atoms.js","names":["atomsCache","inBuildDir","__filename","includes","getAtomFileName","atomName","path","resolve","__dirname","getAtom","_","has","atomFileName","fs","readFile","e","Error","wrapScriptForFrame","script","frame","log","debug","elFromCache","toString","JSON","stringify","getScriptForAtom","atom","args","frames","asyncCallBack","atomSrc","length","map","join"],"sources":["../../lib/atoms.js"],"sourcesContent":["import { fs } from 'appium/support';\nimport path from 'path';\nimport _ from 'lodash';\nimport log from './logger';\n\n\nconst atomsCache = {};\n\nconst inBuildDir = __filename.includes('build/lib/atoms');\n\nfunction getAtomFileName (atomName) {\n return inBuildDir\n ? path.resolve(__dirname, '..', '..', 'atoms', `${atomName}.js`)\n : path.resolve(__dirname, '..', 'atoms', `${atomName}.js`);\n}\n\nasync function getAtom (atomName) {\n // check if we have already loaded an cached this atom\n if (!_.has(atomsCache, atomName)) {\n const atomFileName = getAtomFileName(atomName);\n try {\n atomsCache[atomName] = await fs.readFile(atomFileName);\n } catch (e) {\n throw new Error(`Unable to load Atom '${atomName}' from file '${atomFileName}'`);\n }\n }\n\n return atomsCache[atomName];\n}\n\nasync function wrapScriptForFrame (script, frame) {\n log.debug(`Wrapping script for frame '${frame}'`);\n const elFromCache = await getAtom('get_element_from_cache');\n return `(function (window) { var document = window.document; ` +\n `return (${script}); })((${elFromCache.toString('utf8')})(${JSON.stringify(frame)}))`;\n}\n\nasync function getScriptForAtom (atom, args, frames = [], asyncCallBack = null) {\n const atomSrc = await getAtom(atom);\n let script;\n if (frames.length > 0) {\n script = atomSrc;\n for (const frame of frames) {\n script = await wrapScriptForFrame(script, frame);\n }\n } else {\n log.debug(`Executing '${atom}' atom in default context`);\n script = `(${atomSrc})`;\n }\n\n // add the arguments, as strings\n args = args.map(JSON.stringify);\n if (asyncCallBack) {\n script += `(${args.join(',')}, ${asyncCallBack}, true)`;\n } else {\n script += `(${args.join(',')})`;\n }\n\n return script;\n}\n\nexport { getAtom, getScriptForAtom };\nexport default getAtom;\n"],"mappings":";;;;;;;;;;AAAA;AACA;AACA;AACA;AAGA,MAAMA,UAAU,GAAG,CAAC,CAAC;AAErB,MAAMC,UAAU,GAAGC,UAAU,CAACC,QAAQ,CAAC,iBAAiB,CAAC;AAEzD,SAASC,eAAe,CAAEC,QAAQ,EAAE;EAClC,OAAOJ,UAAU,GACbK,aAAI,CAACC,OAAO,CAACC,SAAS,EAAE,IAAI,EAAE,IAAI,EAAE,OAAO,EAAG,GAAEH,QAAS,KAAI,CAAC,GAC9DC,aAAI,CAACC,OAAO,CAACC,SAAS,EAAE,IAAI,EAAE,OAAO,EAAG,GAAEH,QAAS,KAAI,CAAC;AAC9D;AAEA,eAAeI,OAAO,CAAEJ,QAAQ,EAAE;EAEhC,IAAI,CAACK,eAAC,CAACC,GAAG,CAACX,UAAU,EAAEK,QAAQ,CAAC,EAAE;IAChC,MAAMO,YAAY,GAAGR,eAAe,CAACC,QAAQ,CAAC;IAC9C,IAAI;MACFL,UAAU,CAACK,QAAQ,CAAC,GAAG,MAAMQ,WAAE,CAACC,QAAQ,CAACF,YAAY,CAAC;IACxD,CAAC,CAAC,OAAOG,CAAC,EAAE;MACV,MAAM,IAAIC,KAAK,CAAE,wBAAuBX,QAAS,gBAAeO,YAAa,GAAE,CAAC;IAClF;EACF;EAEA,OAAOZ,UAAU,CAACK,QAAQ,CAAC;AAC7B;AAEA,eAAeY,kBAAkB,CAAEC,MAAM,EAAEC,KAAK,EAAE;EAChDC,eAAG,CAACC,KAAK,CAAE,8BAA6BF,KAAM,GAAE,CAAC;EACjD,MAAMG,WAAW,GAAG,MAAMb,OAAO,CAAC,wBAAwB,CAAC;EAC3D,OAAQ,uDAAsD,GACtD,WAAUS,MAAO,UAASI,WAAW,CAACC,QAAQ,CAAC,MAAM,CAAE,KAAIC,IAAI,CAACC,SAAS,CAACN,KAAK,CAAE,IAAG;AAC9F;AAEA,eAAeO,gBAAgB,CAAEC,IAAI,EAAEC,IAAI,EAAEC,MAAM,GAAG,EAAE,EAAEC,aAAa,GAAG,IAAI,EAAE;EAC9E,MAAMC,OAAO,GAAG,MAAMtB,OAAO,CAACkB,IAAI,CAAC;EACnC,IAAIT,MAAM;EACV,IAAIW,MAAM,CAACG,MAAM,GAAG,CAAC,EAAE;IACrBd,MAAM,GAAGa,OAAO;IAChB,KAAK,MAAMZ,KAAK,IAAIU,MAAM,EAAE;MAC1BX,MAAM,GAAG,MAAMD,kBAAkB,CAACC,MAAM,EAAEC,KAAK,CAAC;IAClD;EACF,CAAC,MAAM;IACLC,eAAG,CAACC,KAAK,CAAE,cAAaM,IAAK,2BAA0B,CAAC;IACxDT,MAAM,GAAI,IAAGa,OAAQ,GAAE;EACzB;;EAGAH,IAAI,GAAGA,IAAI,CAACK,GAAG,CAACT,IAAI,CAACC,SAAS,CAAC;EAC/B,IAAIK,aAAa,EAAE;IACjBZ,MAAM,IAAK,IAAGU,IAAI,CAACM,IAAI,CAAC,GAAG,CAAE,KAAIJ,aAAc,SAAQ;EACzD,CAAC,MAAM;IACLZ,MAAM,IAAK,IAAGU,IAAI,CAACM,IAAI,CAAC,GAAG,CAAE,GAAE;EACjC;EAEA,OAAOhB,MAAM;AACf;AAAC,eAGcT,OAAO;AAAA"}
|
package/build/lib/logger.js
CHANGED
|
@@ -4,15 +4,9 @@ Object.defineProperty(exports, "__esModule", {
|
|
|
4
4
|
value: true
|
|
5
5
|
});
|
|
6
6
|
exports.default = void 0;
|
|
7
|
-
|
|
8
7
|
require("source-map-support/register");
|
|
9
|
-
|
|
10
8
|
var _support = require("appium/support");
|
|
11
|
-
|
|
12
9
|
const log = _support.logger.getLogger('RemoteDebugger');
|
|
13
|
-
|
|
14
10
|
var _default = log;
|
|
15
|
-
exports.default = _default;
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
//# sourceMappingURL=data:application/json;charset=utf8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibGliL2xvZ2dlci5qcyIsIm5hbWVzIjpbImxvZyIsImxvZ2dlciIsImdldExvZ2dlciJdLCJzb3VyY2VSb290IjoiLi4vLi4iLCJzb3VyY2VzIjpbImxpYi9sb2dnZXIuanMiXSwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgbG9nZ2VyIH0gZnJvbSAnYXBwaXVtL3N1cHBvcnQnO1xuXG5cbmNvbnN0IGxvZyA9IGxvZ2dlci5nZXRMb2dnZXIoJ1JlbW90ZURlYnVnZ2VyJyk7XG5cbmV4cG9ydCBkZWZhdWx0IGxvZztcbiJdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7O0FBQUE7O0FBR0EsTUFBTUEsR0FBRyxHQUFHQyxlQUFBLENBQU9DLFNBQVAsQ0FBaUIsZ0JBQWpCLENBQVo7O2VBRWVGLEcifQ==
|
|
11
|
+
exports.default = _default;
|
|
12
|
+
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJsb2ciLCJsb2dnZXIiLCJnZXRMb2dnZXIiXSwic291cmNlcyI6WyIuLi8uLi9saWIvbG9nZ2VyLmpzIl0sInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IGxvZ2dlciB9IGZyb20gJ2FwcGl1bS9zdXBwb3J0JztcblxuXG5jb25zdCBsb2cgPSBsb2dnZXIuZ2V0TG9nZ2VyKCdSZW1vdGVEZWJ1Z2dlcicpO1xuXG5leHBvcnQgZGVmYXVsdCBsb2c7XG4iXSwibWFwcGluZ3MiOiI7Ozs7Ozs7QUFBQTtBQUdBLE1BQU1BLEdBQUcsR0FBR0MsZUFBTSxDQUFDQyxTQUFTLENBQUMsZ0JBQWdCLENBQUM7QUFBQyxlQUVoQ0YsR0FBRztBQUFBIn0=
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"logger.js","names":["log","logger","getLogger"],"sources":["../../lib/logger.js"],"sourcesContent":["import { logger } from 'appium/support';\n\n\nconst log = logger.getLogger('RemoteDebugger');\n\nexport default log;\n"],"mappings":";;;;;;;AAAA;AAGA,MAAMA,GAAG,GAAGC,eAAM,CAACC,SAAS,CAAC,gBAAgB,CAAC;AAAC,eAEhCF,GAAG;AAAA"}
|
|
@@ -1,42 +1,32 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
|
|
3
3
|
var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault");
|
|
4
|
-
|
|
5
4
|
Object.defineProperty(exports, "__esModule", {
|
|
6
5
|
value: true
|
|
7
6
|
});
|
|
8
7
|
exports.default = void 0;
|
|
9
|
-
|
|
10
8
|
require("source-map-support/register");
|
|
11
|
-
|
|
12
9
|
var _logger = _interopRequireDefault(require("../logger"));
|
|
13
|
-
|
|
14
10
|
var _utils = require("../utils");
|
|
15
|
-
|
|
16
11
|
var _events = _interopRequireDefault(require("./events"));
|
|
17
|
-
|
|
18
12
|
var _support = require("appium/support");
|
|
19
|
-
|
|
20
13
|
var _asyncbox = require("asyncbox");
|
|
21
|
-
|
|
22
14
|
var _lodash = _interopRequireDefault(require("lodash"));
|
|
23
|
-
|
|
24
15
|
const APP_CONNECT_TIMEOUT_MS = 0;
|
|
25
16
|
const APP_CONNECT_INTERVAL_MS = 100;
|
|
26
17
|
const SELECT_APP_RETRIES = 20;
|
|
27
18
|
const SELECT_APP_RETRY_SLEEP_MS = 500;
|
|
28
19
|
const SAFARI_BUNDLE_ID = 'com.apple.mobilesafari';
|
|
29
20
|
const BLANK_PAGE_URL = 'about:blank';
|
|
30
|
-
|
|
31
21
|
async function setConnectionKey() {
|
|
32
22
|
_logger.default.debug('Sending connection key request');
|
|
33
|
-
|
|
34
23
|
await this.rpcClient.send('setConnectionKey', {}, false);
|
|
35
24
|
}
|
|
36
|
-
|
|
37
25
|
async function connect(timeout = APP_CONNECT_TIMEOUT_MS) {
|
|
38
26
|
this.setup();
|
|
27
|
+
|
|
39
28
|
this.initRpcClient();
|
|
29
|
+
|
|
40
30
|
this.rpcClient.on('_rpc_reportSetup:', _lodash.default.noop);
|
|
41
31
|
this.rpcClient.on('_rpc_forwardGetListing:', this.onPageChange.bind(this));
|
|
42
32
|
this.rpcClient.on('_rpc_reportConnectedApplicationList:', this.onConnectedApplicationList.bind(this));
|
|
@@ -50,10 +40,8 @@ async function connect(timeout = APP_CONNECT_TIMEOUT_MS) {
|
|
|
50
40
|
|
|
51
41
|
try {
|
|
52
42
|
await this.setConnectionKey();
|
|
53
|
-
|
|
54
43
|
if (timeout) {
|
|
55
44
|
_logger.default.debug(`Waiting up to ${timeout}ms for applications to be reported`);
|
|
56
|
-
|
|
57
45
|
try {
|
|
58
46
|
await (0, _asyncbox.waitForCondition)(() => !_lodash.default.isEmpty(this.appDict), {
|
|
59
47
|
waitMs: timeout,
|
|
@@ -63,40 +51,30 @@ async function connect(timeout = APP_CONNECT_TIMEOUT_MS) {
|
|
|
63
51
|
_logger.default.debug(`Timed out waiting for applications to be reported`);
|
|
64
52
|
}
|
|
65
53
|
}
|
|
66
|
-
|
|
67
54
|
return this.appDict || {};
|
|
68
55
|
} catch (err) {
|
|
69
56
|
_logger.default.error(`Error setting connection key: ${err.message}`);
|
|
70
|
-
|
|
71
57
|
await this.disconnect();
|
|
72
58
|
throw err;
|
|
73
59
|
}
|
|
74
60
|
}
|
|
75
|
-
|
|
76
61
|
async function disconnect() {
|
|
77
62
|
if (this.rpcClient) {
|
|
78
63
|
await this.rpcClient.disconnect();
|
|
79
64
|
}
|
|
80
|
-
|
|
81
65
|
this.emit(_events.default.EVENT_DISCONNECT, true);
|
|
82
66
|
this.teardown();
|
|
83
67
|
}
|
|
84
|
-
|
|
85
68
|
async function selectApp(currentUrl = null, maxTries = SELECT_APP_RETRIES, ignoreAboutBlankUrl = false) {
|
|
86
69
|
const shouldCheckForTarget = this.rpcClient.shouldCheckForTarget;
|
|
87
70
|
this.rpcClient.shouldCheckForTarget = false;
|
|
88
|
-
|
|
89
71
|
try {
|
|
90
72
|
const timer = new _support.timing.Timer().start();
|
|
91
|
-
|
|
92
73
|
_logger.default.debug('Selecting application');
|
|
93
|
-
|
|
94
74
|
if (!this.appDict || _lodash.default.isEmpty(this.appDict)) {
|
|
95
75
|
_logger.default.debug('No applications currently connected.');
|
|
96
|
-
|
|
97
76
|
return [];
|
|
98
77
|
}
|
|
99
|
-
|
|
100
78
|
const {
|
|
101
79
|
appIdKey,
|
|
102
80
|
pageDict
|
|
@@ -105,81 +83,61 @@ async function selectApp(currentUrl = null, maxTries = SELECT_APP_RETRIES, ignor
|
|
|
105
83
|
if (!appIdKey || !pageDict) {
|
|
106
84
|
_logger.default.errorAndThrow(`Could not connect to a valid app after ${maxTries} tries.`);
|
|
107
85
|
}
|
|
108
|
-
|
|
109
86
|
if (this.appIdKey !== appIdKey) {
|
|
110
87
|
_logger.default.debug(`Received altered app id, updating from '${this.appIdKey}' to '${appIdKey}'`);
|
|
111
|
-
|
|
112
88
|
this.appIdKey = appIdKey;
|
|
113
89
|
}
|
|
114
|
-
|
|
115
90
|
logApplicationDictionary(this.appDict);
|
|
116
|
-
const pageArray = _lodash.default.isEmpty(this.appDict[appIdKey].pageArray) ? (0, _utils.pageArrayFromDict)(pageDict) : this.appDict[appIdKey].pageArray;
|
|
117
91
|
|
|
92
|
+
const pageArray = _lodash.default.isEmpty(this.appDict[appIdKey].pageArray) ? (0, _utils.pageArrayFromDict)(pageDict) : this.appDict[appIdKey].pageArray;
|
|
118
93
|
_logger.default.debug(`Finally selecting app ${this.appIdKey}: ${(0, _utils.simpleStringify)(pageArray)}`);
|
|
119
|
-
|
|
120
94
|
let fullPageArray = [];
|
|
121
|
-
|
|
122
95
|
for (const [app, info] of _lodash.default.toPairs(this.appDict)) {
|
|
123
96
|
if (!_lodash.default.isArray(info.pageArray) || !info.isActive) {
|
|
124
97
|
continue;
|
|
125
98
|
}
|
|
126
|
-
|
|
127
99
|
const id = app.replace('PID:', '');
|
|
128
|
-
|
|
129
100
|
for (const page of info.pageArray) {
|
|
130
101
|
if (!(ignoreAboutBlankUrl && page.url === BLANK_PAGE_URL)) {
|
|
131
102
|
let pageDict = _lodash.default.clone(page);
|
|
132
|
-
|
|
133
103
|
pageDict.id = `${id}.${pageDict.id}`;
|
|
134
104
|
pageDict.bundleId = info.bundleId;
|
|
135
105
|
fullPageArray.push(pageDict);
|
|
136
106
|
}
|
|
137
107
|
}
|
|
138
108
|
}
|
|
139
|
-
|
|
140
109
|
_logger.default.debug(`Selected app after ${timer.getDuration().asMilliSeconds.toFixed(0)}ms`);
|
|
141
|
-
|
|
142
110
|
return fullPageArray;
|
|
143
111
|
} finally {
|
|
144
112
|
this.rpcClient.shouldCheckForTarget = shouldCheckForTarget;
|
|
145
113
|
}
|
|
146
114
|
}
|
|
147
|
-
|
|
148
115
|
async function searchForApp(currentUrl, maxTries, ignoreAboutBlankUrl) {
|
|
149
116
|
const bundleIds = this.includeSafari && !this.isSafari ? [this.bundleId, ...this.additionalBundleIds, SAFARI_BUNDLE_ID] : [this.bundleId, ...this.additionalBundleIds];
|
|
150
|
-
|
|
151
117
|
try {
|
|
152
118
|
return await (0, _asyncbox.retryInterval)(maxTries, SELECT_APP_RETRY_SLEEP_MS, async retryCount => {
|
|
153
119
|
logApplicationDictionary(this.appDict);
|
|
154
120
|
const possibleAppIds = (0, _utils.getPossibleDebuggerAppKeys)(bundleIds, this.appDict);
|
|
155
|
-
|
|
156
121
|
_logger.default.debug(`Trying out the possible app ids: ${possibleAppIds.join(', ')} (try #${retryCount + 1} of ${maxTries})`);
|
|
157
|
-
|
|
158
122
|
for (const attemptedAppIdKey of possibleAppIds) {
|
|
159
123
|
try {
|
|
160
124
|
if (!this.appDict[attemptedAppIdKey].isActive) {
|
|
161
125
|
_logger.default.debug(`Skipping app '${attemptedAppIdKey}' because it is not active`);
|
|
162
|
-
|
|
163
126
|
continue;
|
|
164
127
|
}
|
|
165
|
-
|
|
166
128
|
_logger.default.debug(`Attempting app '${attemptedAppIdKey}'`);
|
|
167
|
-
|
|
168
129
|
const [appIdKey, pageDict] = await this.rpcClient.selectApp(attemptedAppIdKey, this.onAppConnect.bind(this));
|
|
169
|
-
|
|
170
130
|
if (_lodash.default.isEmpty(pageDict)) {
|
|
171
131
|
_logger.default.debug('Empty page dictionary received. Trying again.');
|
|
172
|
-
|
|
173
132
|
continue;
|
|
174
133
|
}
|
|
175
134
|
|
|
176
135
|
this.appDict[appIdKey].pageArray = (0, _utils.pageArrayFromDict)(pageDict);
|
|
177
|
-
const result = this.searchForPage(this.appDict, currentUrl, ignoreAboutBlankUrl);
|
|
178
136
|
|
|
137
|
+
const result = this.searchForPage(this.appDict, currentUrl, ignoreAboutBlankUrl);
|
|
179
138
|
if (result) {
|
|
180
139
|
return result;
|
|
181
140
|
}
|
|
182
|
-
|
|
183
141
|
if (currentUrl) {
|
|
184
142
|
_logger.default.debug(`Received app, but expected url ('${currentUrl}') was not found. Trying again.`);
|
|
185
143
|
} else {
|
|
@@ -189,7 +147,6 @@ async function searchForApp(currentUrl, maxTries, ignoreAboutBlankUrl) {
|
|
|
189
147
|
_logger.default.debug(`Error checking application: '${err.message}'. Retrying connection`);
|
|
190
148
|
}
|
|
191
149
|
}
|
|
192
|
-
|
|
193
150
|
retryCount++;
|
|
194
151
|
throw new Error('Failed to find an app to select');
|
|
195
152
|
}, 0);
|
|
@@ -197,13 +154,11 @@ async function searchForApp(currentUrl, maxTries, ignoreAboutBlankUrl) {
|
|
|
197
154
|
_logger.default.errorAndThrow(`Could not connect to a valid app after ${maxTries} tries.`);
|
|
198
155
|
}
|
|
199
156
|
}
|
|
200
|
-
|
|
201
157
|
function searchForPage(appsDict, currentUrl = null, ignoreAboutBlankUrl = false) {
|
|
202
158
|
for (const appDict of _lodash.default.values(appsDict)) {
|
|
203
159
|
if (!appDict || !appDict.isActive || !appDict.pageArray || appDict.pageArray.promise) {
|
|
204
160
|
continue;
|
|
205
161
|
}
|
|
206
|
-
|
|
207
162
|
for (const dict of appDict.pageArray) {
|
|
208
163
|
if ((!ignoreAboutBlankUrl || dict.url !== BLANK_PAGE_URL) && (!currentUrl || dict.url === currentUrl || dict.url === `${currentUrl}/`)) {
|
|
209
164
|
return {
|
|
@@ -213,74 +168,56 @@ function searchForPage(appsDict, currentUrl = null, ignoreAboutBlankUrl = false)
|
|
|
213
168
|
}
|
|
214
169
|
}
|
|
215
170
|
}
|
|
216
|
-
|
|
217
171
|
return null;
|
|
218
172
|
}
|
|
219
|
-
|
|
220
173
|
async function selectPage(appIdKey, pageIdKey, skipReadyCheck = false) {
|
|
221
174
|
this.appIdKey = `PID:${appIdKey}`;
|
|
222
175
|
this.pageIdKey = pageIdKey;
|
|
223
|
-
|
|
224
176
|
_logger.default.debug(`Selecting page '${pageIdKey}' on app '${this.appIdKey}' and forwarding socket setup`);
|
|
225
|
-
|
|
226
177
|
const timer = new _support.timing.Timer().start();
|
|
227
178
|
await this.rpcClient.selectPage(this.appIdKey, pageIdKey);
|
|
228
179
|
|
|
229
180
|
if (!skipReadyCheck && !(await this.checkPageIsReady())) {
|
|
230
181
|
await this.pageUnload();
|
|
231
182
|
}
|
|
232
|
-
|
|
233
183
|
_logger.default.debug(`Selected page after ${timer.getDuration().asMilliSeconds.toFixed(0)}ms`);
|
|
234
184
|
}
|
|
235
|
-
|
|
236
185
|
function logApplicationDictionary(apps) {
|
|
237
186
|
function getValueString(key, value) {
|
|
238
187
|
if (_lodash.default.isFunction(value)) {
|
|
239
188
|
return '[Function]';
|
|
240
189
|
}
|
|
241
|
-
|
|
242
190
|
if (key === 'pageArray' && !_lodash.default.isArray(value)) {
|
|
243
191
|
return `"Waiting for data"`;
|
|
244
192
|
}
|
|
245
|
-
|
|
246
193
|
return JSON.stringify(value);
|
|
247
194
|
}
|
|
248
|
-
|
|
249
195
|
_logger.default.debug('Current applications available:');
|
|
250
|
-
|
|
251
196
|
for (const [app, info] of _lodash.default.toPairs(apps)) {
|
|
252
197
|
_logger.default.debug(` Application: "${app}"`);
|
|
253
|
-
|
|
254
198
|
for (const [key, value] of _lodash.default.toPairs(info)) {
|
|
255
199
|
if (key === 'pageArray' && Array.isArray(value) && value.length) {
|
|
256
200
|
_logger.default.debug(` ${key}:`);
|
|
257
|
-
|
|
258
201
|
for (const page of value) {
|
|
259
202
|
let prefix = '- ';
|
|
260
|
-
|
|
261
203
|
for (const [k, v] of _lodash.default.toPairs(page)) {
|
|
262
204
|
_logger.default.debug(` ${prefix}${k}: ${JSON.stringify(v)}`);
|
|
263
|
-
|
|
264
205
|
prefix = ' ';
|
|
265
206
|
}
|
|
266
207
|
}
|
|
267
208
|
} else {
|
|
268
209
|
const valueString = getValueString(key, value);
|
|
269
|
-
|
|
270
210
|
_logger.default.debug(` ${key}: ${valueString}`);
|
|
271
211
|
}
|
|
272
212
|
}
|
|
273
213
|
}
|
|
274
214
|
}
|
|
275
|
-
|
|
276
215
|
function updateAppsWithDict(dict) {
|
|
277
216
|
this.appDict = this.appDict || {};
|
|
278
217
|
let [id, entry] = (0, _utils.appInfoFromDict)(dict);
|
|
279
|
-
|
|
280
218
|
if (this.appDict[id]) {
|
|
281
219
|
entry.pageArray = this.appDict[id].pageArray;
|
|
282
220
|
}
|
|
283
|
-
|
|
284
221
|
this.appDict[id] = entry;
|
|
285
222
|
|
|
286
223
|
if (_lodash.default.isUndefined(entry.pageArray)) {
|
|
@@ -291,7 +228,6 @@ function updateAppsWithDict(dict) {
|
|
|
291
228
|
this.appIdKey = (0, _utils.getDebuggerAppKey)(this.bundleId, this.appDict);
|
|
292
229
|
}
|
|
293
230
|
}
|
|
294
|
-
|
|
295
231
|
var _default = {
|
|
296
232
|
setConnectionKey,
|
|
297
233
|
connect,
|
|
@@ -302,7 +238,5 @@ var _default = {
|
|
|
302
238
|
selectPage,
|
|
303
239
|
updateAppsWithDict
|
|
304
240
|
};
|
|
305
|
-
exports.default = _default;
|
|
306
|
-
|
|
307
|
-
|
|
308
|
-
//# sourceMappingURL=data:application/json;charset=utf8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibGliL21peGlucy9jb25uZWN0LmpzIiwibmFtZXMiOlsiQVBQX0NPTk5FQ1RfVElNRU9VVF9NUyIsIkFQUF9DT05ORUNUX0lOVEVSVkFMX01TIiwiU0VMRUNUX0FQUF9SRVRSSUVTIiwiU0VMRUNUX0FQUF9SRVRSWV9TTEVFUF9NUyIsIlNBRkFSSV9CVU5ETEVfSUQiLCJCTEFOS19QQUdFX1VSTCIsInNldENvbm5lY3Rpb25LZXkiLCJsb2ciLCJkZWJ1ZyIsInJwY0NsaWVudCIsInNlbmQiLCJjb25uZWN0IiwidGltZW91dCIsInNldHVwIiwiaW5pdFJwY0NsaWVudCIsIm9uIiwiXyIsIm5vb3AiLCJvblBhZ2VDaGFuZ2UiLCJiaW5kIiwib25Db25uZWN0ZWRBcHBsaWNhdGlvbkxpc3QiLCJvbkFwcENvbm5lY3QiLCJvbkFwcERpc2Nvbm5lY3QiLCJvbkFwcFVwZGF0ZSIsIm9uQ29ubmVjdGVkRHJpdmVyTGlzdCIsIm9uQ3VycmVudFN0YXRlIiwiZnJhbWVEZXRhY2hlZCIsIndhaXRGb3JDb25kaXRpb24iLCJpc0VtcHR5IiwiYXBwRGljdCIsIndhaXRNcyIsImludGVydmFsIiwiZXJyIiwiZXJyb3IiLCJtZXNzYWdlIiwiZGlzY29ubmVjdCIsImVtaXQiLCJldmVudHMiLCJFVkVOVF9ESVNDT05ORUNUIiwidGVhcmRvd24iLCJzZWxlY3RBcHAiLCJjdXJyZW50VXJsIiwibWF4VHJpZXMiLCJpZ25vcmVBYm91dEJsYW5rVXJsIiwic2hvdWxkQ2hlY2tGb3JUYXJnZXQiLCJ0aW1lciIsInRpbWluZyIsIlRpbWVyIiwic3RhcnQiLCJhcHBJZEtleSIsInBhZ2VEaWN0Iiwic2VhcmNoRm9yQXBwIiwiZXJyb3JBbmRUaHJvdyIsImxvZ0FwcGxpY2F0aW9uRGljdGlvbmFyeSIsInBhZ2VBcnJheSIsInBhZ2VBcnJheUZyb21EaWN0Iiwic2ltcGxlU3RyaW5naWZ5IiwiZnVsbFBhZ2VBcnJheSIsImFwcCIsImluZm8iLCJ0b1BhaXJzIiwiaXNBcnJheSIsImlzQWN0aXZlIiwiaWQiLCJyZXBsYWNlIiwicGFnZSIsInVybCIsImNsb25lIiwiYnVuZGxlSWQiLCJwdXNoIiwiZ2V0RHVyYXRpb24iLCJhc01pbGxpU2Vjb25kcyIsInRvRml4ZWQiLCJidW5kbGVJZHMiLCJpbmNsdWRlU2FmYXJpIiwiaXNTYWZhcmkiLCJhZGRpdGlvbmFsQnVuZGxlSWRzIiwicmV0cnlJbnRlcnZhbCIsInJldHJ5Q291bnQiLCJwb3NzaWJsZUFwcElkcyIsImdldFBvc3NpYmxlRGVidWdnZXJBcHBLZXlzIiwiam9pbiIsImF0dGVtcHRlZEFwcElkS2V5IiwicmVzdWx0Iiwic2VhcmNoRm9yUGFnZSIsIkVycm9yIiwiaWduIiwiYXBwc0RpY3QiLCJ2YWx1ZXMiLCJwcm9taXNlIiwiZGljdCIsInNlbGVjdFBhZ2UiLCJwYWdlSWRLZXkiLCJza2lwUmVhZHlDaGVjayIsImNoZWNrUGFnZUlzUmVhZHkiLCJwYWdlVW5sb2FkIiwiYXBwcyIsImdldFZhbHVlU3RyaW5nIiwia2V5IiwidmFsdWUiLCJpc0Z1bmN0aW9uIiwiSlNPTiIsInN0cmluZ2lmeSIsIkFycmF5IiwibGVuZ3RoIiwicHJlZml4IiwiayIsInYiLCJ2YWx1ZVN0cmluZyIsInVwZGF0ZUFwcHNXaXRoRGljdCIsImVudHJ5IiwiYXBwSW5mb0Zyb21EaWN0IiwiaXNVbmRlZmluZWQiLCJkZWZlcnJlZFByb21pc2UiLCJnZXREZWJ1Z2dlckFwcEtleSJdLCJzb3VyY2VSb290IjoiLi4vLi4vLi4iLCJzb3VyY2VzIjpbImxpYi9taXhpbnMvY29ubmVjdC5qcyJdLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgbG9nIGZyb20gJy4uL2xvZ2dlcic7XG5pbXBvcnQgeyBhcHBJbmZvRnJvbURpY3QsIHBhZ2VBcnJheUZyb21EaWN0LCBnZXREZWJ1Z2dlckFwcEtleSxcbiAgICAgICAgIGdldFBvc3NpYmxlRGVidWdnZXJBcHBLZXlzLCBzaW1wbGVTdHJpbmdpZnksIGRlZmVycmVkUHJvbWlzZSB9IGZyb20gJy4uL3V0aWxzJztcbmltcG9ydCBldmVudHMgZnJvbSAnLi9ldmVudHMnO1xuaW1wb3J0IHsgdGltaW5nIH0gZnJvbSAnYXBwaXVtL3N1cHBvcnQnO1xuaW1wb3J0IHsgcmV0cnlJbnRlcnZhbCwgd2FpdEZvckNvbmRpdGlvbiB9IGZyb20gJ2FzeW5jYm94JztcbmltcG9ydCBfIGZyb20gJ2xvZGFzaCc7XG5cblxuY29uc3QgQVBQX0NPTk5FQ1RfVElNRU9VVF9NUyA9IDA7XG5jb25zdCBBUFBfQ09OTkVDVF9JTlRFUlZBTF9NUyA9IDEwMDtcbmNvbnN0IFNFTEVDVF9BUFBfUkVUUklFUyA9IDIwO1xuY29uc3QgU0VMRUNUX0FQUF9SRVRSWV9TTEVFUF9NUyA9IDUwMDtcbmNvbnN0IFNBRkFSSV9CVU5ETEVfSUQgPSAnY29tLmFwcGxlLm1vYmlsZXNhZmFyaSc7XG5jb25zdCBCTEFOS19QQUdFX1VSTCA9ICdhYm91dDpibGFuayc7XG5cblxuYXN5bmMgZnVuY3Rpb24gc2V0Q29ubmVjdGlvbktleSAoKSB7XG4gIGxvZy5kZWJ1ZygnU2VuZGluZyBjb25uZWN0aW9uIGtleSByZXF1ZXN0Jyk7XG4gIC8vIHNlbmQgYnV0IG9ubHkgd2FpdCB0byBtYWtlIHN1cmUgdGhlIHNvY2tldCB3b3JrZWRcbiAgLy8gYXMgcmVzcG9uc2UgZnJvbSBXZWIgSW5zcGVjdG9yIGNhbiB0YWtlIGEgbG9uZyB0aW1lXG4gIGF3YWl0IHRoaXMucnBjQ2xpZW50LnNlbmQoJ3NldENvbm5lY3Rpb25LZXknLCB7fSwgZmFsc2UpO1xufVxuXG5hc3luYyBmdW5jdGlvbiBjb25uZWN0ICh0aW1lb3V0ID0gQVBQX0NPTk5FQ1RfVElNRU9VVF9NUykge1xuICB0aGlzLnNldHVwKCk7XG5cbiAgLy8gaW5pdGlhbGl6ZSB0aGUgcnBjIGNsaWVudFxuICB0aGlzLmluaXRScGNDbGllbnQoKTtcblxuICAvLyBsaXN0ZW4gZm9yIGJhc2ljIGRlYnVnZ2VyLWxldmVsIGV2ZW50c1xuICB0aGlzLnJwY0NsaWVudC5vbignX3JwY19yZXBvcnRTZXR1cDonLCBfLm5vb3ApO1xuICB0aGlzLnJwY0NsaWVudC5vbignX3JwY19mb3J3YXJkR2V0TGlzdGluZzonLCB0aGlzLm9uUGFnZUNoYW5nZS5iaW5kKHRoaXMpKTtcbiAgdGhpcy5ycGNDbGllbnQub24oJ19ycGNfcmVwb3J0Q29ubmVjdGVkQXBwbGljYXRpb25MaXN0OicsIHRoaXMub25Db25uZWN0ZWRBcHBsaWNhdGlvbkxpc3QuYmluZCh0aGlzKSk7XG4gIHRoaXMucnBjQ2xpZW50Lm9uKCdfcnBjX2FwcGxpY2F0aW9uQ29ubmVjdGVkOicsIHRoaXMub25BcHBDb25uZWN0LmJpbmQodGhpcykpO1xuICB0aGlzLnJwY0NsaWVudC5vbignX3JwY19hcHBsaWNhdGlvbkRpc2Nvbm5lY3RlZDonLCB0aGlzLm9uQXBwRGlzY29ubmVjdC5iaW5kKHRoaXMpKTtcbiAgdGhpcy5ycGNDbGllbnQub24oJ19ycGNfYXBwbGljYXRpb25VcGRhdGVkOicsIHRoaXMub25BcHBVcGRhdGUuYmluZCh0aGlzKSk7XG4gIHRoaXMucnBjQ2xpZW50Lm9uKCdfcnBjX3JlcG9ydENvbm5lY3RlZERyaXZlckxpc3Q6JywgdGhpcy5vbkNvbm5lY3RlZERyaXZlckxpc3QuYmluZCh0aGlzKSk7XG4gIHRoaXMucnBjQ2xpZW50Lm9uKCdfcnBjX3JlcG9ydEN1cnJlbnRTdGF0ZTonLCB0aGlzLm9uQ3VycmVudFN0YXRlLmJpbmQodGhpcykpO1xuICB0aGlzLnJwY0NsaWVudC5vbignUGFnZS5mcmFtZURldGFjaGVkJywgdGhpcy5mcmFtZURldGFjaGVkLmJpbmQodGhpcykpO1xuXG4gIGF3YWl0IHRoaXMucnBjQ2xpZW50LmNvbm5lY3QoKTtcblxuICAvLyBnZXQgdGhlIGNvbm5lY3Rpb24gaW5mb3JtYXRpb24gYWJvdXQgdGhlIGFwcFxuICB0cnkge1xuICAgIGF3YWl0IHRoaXMuc2V0Q29ubmVjdGlvbktleSgpO1xuICAgIGlmICh0aW1lb3V0KSB7XG4gICAgICBsb2cuZGVidWcoYFdhaXRpbmcgdXAgdG8gJHt0aW1lb3V0fW1zIGZvciBhcHBsaWNhdGlvbnMgdG8gYmUgcmVwb3J0ZWRgKTtcbiAgICAgIHRyeSB7XG4gICAgICAgIGF3YWl0IHdhaXRGb3JDb25kaXRpb24oKCkgPT4gIV8uaXNFbXB0eSh0aGlzLmFwcERpY3QpLCB7XG4gICAgICAgICAgd2FpdE1zOiB0aW1lb3V0LFxuICAgICAgICAgIGludGVydmFsOiBBUFBfQ09OTkVDVF9JTlRFUlZBTF9NUyxcbiAgICAgICAgfSk7XG4gICAgICB9IGNhdGNoIChlcnIpIHtcbiAgICAgICAgbG9nLmRlYnVnKGBUaW1lZCBvdXQgd2FpdGluZyBmb3IgYXBwbGljYXRpb25zIHRvIGJlIHJlcG9ydGVkYCk7XG4gICAgICB9XG4gICAgfVxuICAgIHJldHVybiB0aGlzLmFwcERpY3QgfHwge307XG4gIH0gY2F0Y2ggKGVycikge1xuICAgIGxvZy5lcnJvcihgRXJyb3Igc2V0dGluZyBjb25uZWN0aW9uIGtleTogJHtlcnIubWVzc2FnZX1gKTtcbiAgICBhd2FpdCB0aGlzLmRpc2Nvbm5lY3QoKTtcbiAgICB0aHJvdyBlcnI7XG4gIH1cbn1cblxuYXN5bmMgZnVuY3Rpb24gZGlzY29ubmVjdCAoKSB7XG4gIGlmICh0aGlzLnJwY0NsaWVudCkge1xuICAgIGF3YWl0IHRoaXMucnBjQ2xpZW50LmRpc2Nvbm5lY3QoKTtcbiAgfVxuICB0aGlzLmVtaXQoZXZlbnRzLkVWRU5UX0RJU0NPTk5FQ1QsIHRydWUpO1xuICB0aGlzLnRlYXJkb3duKCk7XG59XG5cbmFzeW5jIGZ1bmN0aW9uIHNlbGVjdEFwcCAoY3VycmVudFVybCA9IG51bGwsIG1heFRyaWVzID0gU0VMRUNUX0FQUF9SRVRSSUVTLCBpZ25vcmVBYm91dEJsYW5rVXJsID0gZmFsc2UpIHtcbiAgY29uc3Qgc2hvdWxkQ2hlY2tGb3JUYXJnZXQgPSB0aGlzLnJwY0NsaWVudC5zaG91bGRDaGVja0ZvclRhcmdldDtcbiAgdGhpcy5ycGNDbGllbnQuc2hvdWxkQ2hlY2tGb3JUYXJnZXQgPSBmYWxzZTtcbiAgdHJ5IHtcbiAgICBjb25zdCB0aW1lciA9IG5ldyB0aW1pbmcuVGltZXIoKS5zdGFydCgpO1xuICAgIGxvZy5kZWJ1ZygnU2VsZWN0aW5nIGFwcGxpY2F0aW9uJyk7XG4gICAgaWYgKCF0aGlzLmFwcERpY3QgfHwgXy5pc0VtcHR5KHRoaXMuYXBwRGljdCkpIHtcbiAgICAgIGxvZy5kZWJ1ZygnTm8gYXBwbGljYXRpb25zIGN1cnJlbnRseSBjb25uZWN0ZWQuJyk7XG4gICAgICByZXR1cm4gW107XG4gICAgfVxuXG4gICAgY29uc3Qge2FwcElkS2V5LCBwYWdlRGljdH0gPSBhd2FpdCB0aGlzLnNlYXJjaEZvckFwcChjdXJyZW50VXJsLCBtYXhUcmllcywgaWdub3JlQWJvdXRCbGFua1VybCk7XG5cbiAgICAvLyBpZiwgYWZ0ZXIgYWxsIHRoaXMsIHdlIGhhdmUgbm8gZGljdGlvbmFyeSwgd2UgaGF2ZSBmYWlsZWRcbiAgICBpZiAoIWFwcElkS2V5IHx8ICFwYWdlRGljdCkge1xuICAgICAgbG9nLmVycm9yQW5kVGhyb3coYENvdWxkIG5vdCBjb25uZWN0IHRvIGEgdmFsaWQgYXBwIGFmdGVyICR7bWF4VHJpZXN9IHRyaWVzLmApO1xuICAgIH1cblxuICAgIGlmICh0aGlzLmFwcElkS2V5ICE9PSBhcHBJZEtleSkge1xuICAgICAgbG9nLmRlYnVnKGBSZWNlaXZlZCBhbHRlcmVkIGFwcCBpZCwgdXBkYXRpbmcgZnJvbSAnJHt0aGlzLmFwcElkS2V5fScgdG8gJyR7YXBwSWRLZXl9J2ApO1xuICAgICAgdGhpcy5hcHBJZEtleSA9IGFwcElkS2V5O1xuICAgIH1cblxuICAgIGxvZ0FwcGxpY2F0aW9uRGljdGlvbmFyeSh0aGlzLmFwcERpY3QpO1xuXG4gICAgLy8gdHJhbnNsYXRlIHRoZSBkaWN0aW9uYXJ5IGludG8gYSB1c2VmdWwgZm9ybSwgYW5kIHJldHVybiB0byBzZW5kZXJcbiAgICBjb25zdCBwYWdlQXJyYXkgPSBfLmlzRW1wdHkodGhpcy5hcHBEaWN0W2FwcElkS2V5XS5wYWdlQXJyYXkpXG4gICAgICA/IHBhZ2VBcnJheUZyb21EaWN0KHBhZ2VEaWN0KVxuICAgICAgOiB0aGlzLmFwcERpY3RbYXBwSWRLZXldLnBhZ2VBcnJheTtcbiAgICBsb2cuZGVidWcoYEZpbmFsbHkgc2VsZWN0aW5nIGFwcCAke3RoaXMuYXBwSWRLZXl9OiAke3NpbXBsZVN0cmluZ2lmeShwYWdlQXJyYXkpfWApO1xuXG4gICAgbGV0IGZ1bGxQYWdlQXJyYXkgPSBbXTtcbiAgICBmb3IgKGNvbnN0IFthcHAsIGluZm9dIG9mIF8udG9QYWlycyh0aGlzLmFwcERpY3QpKSB7XG4gICAgICBpZiAoIV8uaXNBcnJheShpbmZvLnBhZ2VBcnJheSkgfHwgIWluZm8uaXNBY3RpdmUpIHtcbiAgICAgICAgY29udGludWU7XG4gICAgICB9XG4gICAgICBjb25zdCBpZCA9IGFwcC5yZXBsYWNlKCdQSUQ6JywgJycpO1xuICAgICAgZm9yIChjb25zdCBwYWdlIG9mIGluZm8ucGFnZUFycmF5KSB7XG4gICAgICAgIGlmICghKGlnbm9yZUFib3V0QmxhbmtVcmwgJiYgcGFnZS51cmwgPT09IEJMQU5LX1BBR0VfVVJMKSkge1xuICAgICAgICAgIGxldCBwYWdlRGljdCA9IF8uY2xvbmUocGFnZSk7XG4gICAgICAgICAgcGFnZURpY3QuaWQgPSBgJHtpZH0uJHtwYWdlRGljdC5pZH1gO1xuICAgICAgICAgIHBhZ2VEaWN0LmJ1bmRsZUlkID0gaW5mby5idW5kbGVJZDtcbiAgICAgICAgICBmdWxsUGFnZUFycmF5LnB1c2gocGFnZURpY3QpO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuXG4gICAgbG9nLmRlYnVnKGBTZWxlY3RlZCBhcHAgYWZ0ZXIgJHt0aW1lci5nZXREdXJhdGlvbigpLmFzTWlsbGlTZWNvbmRzLnRvRml4ZWQoMCl9bXNgKTtcbiAgICByZXR1cm4gZnVsbFBhZ2VBcnJheTtcbiAgfSBmaW5hbGx5IHtcbiAgICB0aGlzLnJwY0NsaWVudC5zaG91bGRDaGVja0ZvclRhcmdldCA9IHNob3VsZENoZWNrRm9yVGFyZ2V0O1xuICB9XG59XG5cbmFzeW5jIGZ1bmN0aW9uIHNlYXJjaEZvckFwcCAoY3VycmVudFVybCwgbWF4VHJpZXMsIGlnbm9yZUFib3V0QmxhbmtVcmwpIHtcbiAgY29uc3QgYnVuZGxlSWRzID0gdGhpcy5pbmNsdWRlU2FmYXJpICYmICF0aGlzLmlzU2FmYXJpXG4gICAgPyBbdGhpcy5idW5kbGVJZCwgLi4udGhpcy5hZGRpdGlvbmFsQnVuZGxlSWRzLCBTQUZBUklfQlVORExFX0lEXVxuICAgIDogW3RoaXMuYnVuZGxlSWQsIC4uLnRoaXMuYWRkaXRpb25hbEJ1bmRsZUlkc107XG4gIHRyeSB7XG4gICAgcmV0dXJuIGF3YWl0IHJldHJ5SW50ZXJ2YWwobWF4VHJpZXMsIFNFTEVDVF9BUFBfUkVUUllfU0xFRVBfTVMsIGFzeW5jIChyZXRyeUNvdW50KSA9PiB7XG4gICAgICBsb2dBcHBsaWNhdGlvbkRpY3Rpb25hcnkodGhpcy5hcHBEaWN0KTtcbiAgICAgIGNvbnN0IHBvc3NpYmxlQXBwSWRzID0gZ2V0UG9zc2libGVEZWJ1Z2dlckFwcEtleXMoYnVuZGxlSWRzLCB0aGlzLmFwcERpY3QpO1xuICAgICAgbG9nLmRlYnVnKGBUcnlpbmcgb3V0IHRoZSBwb3NzaWJsZSBhcHAgaWRzOiAke3Bvc3NpYmxlQXBwSWRzLmpvaW4oJywgJyl9ICh0cnkgIyR7cmV0cnlDb3VudCArIDF9IG9mICR7bWF4VHJpZXN9KWApO1xuICAgICAgZm9yIChjb25zdCBhdHRlbXB0ZWRBcHBJZEtleSBvZiBwb3NzaWJsZUFwcElkcykge1xuICAgICAgICB0cnkge1xuICAgICAgICAgIGlmICghdGhpcy5hcHBEaWN0W2F0dGVtcHRlZEFwcElkS2V5XS5pc0FjdGl2ZSkge1xuICAgICAgICAgICAgbG9nLmRlYnVnKGBTa2lwcGluZyBhcHAgJyR7YXR0ZW1wdGVkQXBwSWRLZXl9JyBiZWNhdXNlIGl0IGlzIG5vdCBhY3RpdmVgKTtcbiAgICAgICAgICAgIGNvbnRpbnVlO1xuICAgICAgICAgIH1cbiAgICAgICAgICBsb2cuZGVidWcoYEF0dGVtcHRpbmcgYXBwICcke2F0dGVtcHRlZEFwcElkS2V5fSdgKTtcbiAgICAgICAgICBjb25zdCBbYXBwSWRLZXksIHBhZ2VEaWN0XSA9IGF3YWl0IHRoaXMucnBjQ2xpZW50LnNlbGVjdEFwcChhdHRlbXB0ZWRBcHBJZEtleSwgdGhpcy5vbkFwcENvbm5lY3QuYmluZCh0aGlzKSk7XG4gICAgICAgICAgLy8gaW4gaU9TIDguMiB0aGUgY29ubmVjdCBsb2dpYyBoYXBwZW5zLCBidXQgd2l0aCBhbiBlbXB0eSBkaWN0aW9uYXJ5XG4gICAgICAgICAgLy8gd2hpY2ggbGVhZHMgdG8gdGhlIHJlbW90ZSBkZWJ1Z2dlciBnZXR0aW5nIGRpc2Nvbm5lY3RlZCwgYW5kIGludG8gYSBsb29wXG4gICAgICAgICAgaWYgKF8uaXNFbXB0eShwYWdlRGljdCkpIHtcbiAgICAgICAgICAgIGxvZy5kZWJ1ZygnRW1wdHkgcGFnZSBkaWN0aW9uYXJ5IHJlY2VpdmVkLiBUcnlpbmcgYWdhaW4uJyk7XG4gICAgICAgICAgICBjb250aW51ZTtcbiAgICAgICAgICB9XG5cbiAgICAgICAgICAvLyBzYXZlIHRoZSBwYWdlIGFycmF5IGZvciB0aGlzIGFwcFxuICAgICAgICAgIHRoaXMuYXBwRGljdFthcHBJZEtleV0ucGFnZUFycmF5ID0gcGFnZUFycmF5RnJvbURpY3QocGFnZURpY3QpO1xuXG4gICAgICAgICAgLy8gaWYgd2UgYXJlIGxvb2tpbmcgZm9yIGEgcGFydGljdWxhciB1cmwsIG1ha2Ugc3VyZSB3ZVxuICAgICAgICAgIC8vIGhhdmUgdGhlIHJpZ2h0IHBhZ2UuIElnbm9yZSBlbXB0eSBvciB1bmRlZmluZWQgdXJscy5cbiAgICAgICAgICAvLyBJZ25vcmUgYWJvdXQ6YmxhbmsgaWYgcmVxdWVzdGVkLlxuICAgICAgICAgIGNvbnN0IHJlc3VsdCA9IHRoaXMuc2VhcmNoRm9yUGFnZSh0aGlzLmFwcERpY3QsIGN1cnJlbnRVcmwsIGlnbm9yZUFib3V0QmxhbmtVcmwpO1xuICAgICAgICAgIGlmIChyZXN1bHQpIHtcbiAgICAgICAgICAgIHJldHVybiByZXN1bHQ7XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgaWYgKGN1cnJlbnRVcmwpIHtcbiAgICAgICAgICAgIGxvZy5kZWJ1ZyhgUmVjZWl2ZWQgYXBwLCBidXQgZXhwZWN0ZWQgdXJsICgnJHtjdXJyZW50VXJsfScpIHdhcyBub3QgZm91bmQuIFRyeWluZyBhZ2Fpbi5gKTtcbiAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgbG9nLmRlYnVnKCdSZWNlaXZlZCBhcHAsIGJ1dCBubyBtYXRjaCB3YXMgZm91bmQuIFRyeWluZyBhZ2Fpbi4nKTtcbiAgICAgICAgICB9XG4gICAgICAgIH0gY2F0Y2ggKGVycikge1xuICAgICAgICAgIGxvZy5kZWJ1ZyhgRXJyb3IgY2hlY2tpbmcgYXBwbGljYXRpb246ICcke2Vyci5tZXNzYWdlfScuIFJldHJ5aW5nIGNvbm5lY3Rpb25gKTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgICAgcmV0cnlDb3VudCsrO1xuICAgICAgdGhyb3cgbmV3IEVycm9yKCdGYWlsZWQgdG8gZmluZCBhbiBhcHAgdG8gc2VsZWN0Jyk7XG4gICAgfSwgMCk7XG4gIH0gY2F0Y2ggKGlnbikge1xuICAgIGxvZy5lcnJvckFuZFRocm93KGBDb3VsZCBub3QgY29ubmVjdCB0byBhIHZhbGlkIGFwcCBhZnRlciAke21heFRyaWVzfSB0cmllcy5gKTtcbiAgfVxufVxuXG5mdW5jdGlvbiBzZWFyY2hGb3JQYWdlIChhcHBzRGljdCwgY3VycmVudFVybCA9IG51bGwsIGlnbm9yZUFib3V0QmxhbmtVcmwgPSBmYWxzZSkge1xuICBmb3IgKGNvbnN0IGFwcERpY3Qgb2YgXy52YWx1ZXMoYXBwc0RpY3QpKSB7XG4gICAgaWYgKCFhcHBEaWN0IHx8ICFhcHBEaWN0LmlzQWN0aXZlIHx8ICFhcHBEaWN0LnBhZ2VBcnJheSB8fCBhcHBEaWN0LnBhZ2VBcnJheS5wcm9taXNlKSB7XG4gICAgICBjb250aW51ZTtcbiAgICB9XG5cbiAgICBmb3IgKGNvbnN0IGRpY3Qgb2YgYXBwRGljdC5wYWdlQXJyYXkpIHtcbiAgICAgIGlmICgoIWlnbm9yZUFib3V0QmxhbmtVcmwgfHwgZGljdC51cmwgIT09IEJMQU5LX1BBR0VfVVJMKSAmJlxuICAgICAgICAgICghY3VycmVudFVybCB8fCBkaWN0LnVybCA9PT0gY3VycmVudFVybCB8fCBkaWN0LnVybCA9PT0gYCR7Y3VycmVudFVybH0vYCkpIHtcbiAgICAgICAgcmV0dXJuIHsgYXBwSWRLZXk6IGFwcERpY3QuaWQsIHBhZ2VEaWN0OiBkaWN0IH07XG4gICAgICB9XG4gICAgfVxuICB9XG4gIHJldHVybiBudWxsO1xufVxuXG5hc3luYyBmdW5jdGlvbiBzZWxlY3RQYWdlIChhcHBJZEtleSwgcGFnZUlkS2V5LCBza2lwUmVhZHlDaGVjayA9IGZhbHNlKSB7XG4gIHRoaXMuYXBwSWRLZXkgPSBgUElEOiR7YXBwSWRLZXl9YDtcbiAgdGhpcy5wYWdlSWRLZXkgPSBwYWdlSWRLZXk7XG5cbiAgbG9nLmRlYnVnKGBTZWxlY3RpbmcgcGFnZSAnJHtwYWdlSWRLZXl9JyBvbiBhcHAgJyR7dGhpcy5hcHBJZEtleX0nIGFuZCBmb3J3YXJkaW5nIHNvY2tldCBzZXR1cGApO1xuXG4gIGNvbnN0IHRpbWVyID0gbmV3IHRpbWluZy5UaW1lcigpLnN0YXJ0KCk7XG5cbiAgYXdhaXQgdGhpcy5ycGNDbGllbnQuc2VsZWN0UGFnZSh0aGlzLmFwcElkS2V5LCBwYWdlSWRLZXkpO1xuXG4gIC8vIG1ha2Ugc3VyZSBldmVyeXRoaW5nIGlzIHJlYWR5IHRvIGdvXG4gIGlmICghc2tpcFJlYWR5Q2hlY2sgJiYgIWF3YWl0IHRoaXMuY2hlY2tQYWdlSXNSZWFkeSgpKSB7XG4gICAgYXdhaXQgdGhpcy5wYWdlVW5sb2FkKCk7XG4gIH1cblxuICBsb2cuZGVidWcoYFNlbGVjdGVkIHBhZ2UgYWZ0ZXIgJHt0aW1lci5nZXREdXJhdGlvbigpLmFzTWlsbGlTZWNvbmRzLnRvRml4ZWQoMCl9bXNgKTtcbn1cblxuZnVuY3Rpb24gbG9nQXBwbGljYXRpb25EaWN0aW9uYXJ5IChhcHBzKSB7XG4gIGZ1bmN0aW9uIGdldFZhbHVlU3RyaW5nIChrZXksIHZhbHVlKSB7XG4gICAgaWYgKF8uaXNGdW5jdGlvbih2YWx1ZSkpIHtcbiAgICAgIHJldHVybiAnW0Z1bmN0aW9uXSc7XG4gICAgfVxuICAgIGlmIChrZXkgPT09ICdwYWdlQXJyYXknICYmICFfLmlzQXJyYXkodmFsdWUpKSB7XG4gICAgICByZXR1cm4gYFwiV2FpdGluZyBmb3IgZGF0YVwiYDtcbiAgICB9XG4gICAgcmV0dXJuIEpTT04uc3RyaW5naWZ5KHZhbHVlKTtcbiAgfVxuICBsb2cuZGVidWcoJ0N1cnJlbnQgYXBwbGljYXRpb25zIGF2YWlsYWJsZTonKTtcbiAgZm9yIChjb25zdCBbYXBwLCBpbmZvXSBvZiBfLnRvUGFpcnMoYXBwcykpIHtcbiAgICBsb2cuZGVidWcoYCAgICBBcHBsaWNhdGlvbjogXCIke2FwcH1cImApO1xuICAgIGZvciAoY29uc3QgW2tleSwgdmFsdWVdIG9mIF8udG9QYWlycyhpbmZvKSkge1xuICAgICAgaWYgKGtleSA9PT0gJ3BhZ2VBcnJheScgJiYgQXJyYXkuaXNBcnJheSh2YWx1ZSkgJiYgdmFsdWUubGVuZ3RoKSB7XG4gICAgICAgIGxvZy5kZWJ1ZyhgICAgICAgICAke2tleX06YCk7XG4gICAgICAgIGZvciAoY29uc3QgcGFnZSBvZiB2YWx1ZSkge1xuICAgICAgICAgIGxldCBwcmVmaXggPSAnLSAnO1xuICAgICAgICAgIGZvciAoY29uc3QgW2ssIHZdIG9mIF8udG9QYWlycyhwYWdlKSkge1xuICAgICAgICAgICAgbG9nLmRlYnVnKGAgICAgICAgICAgJHtwcmVmaXh9JHtrfTogJHtKU09OLnN0cmluZ2lmeSh2KX1gKTtcbiAgICAgICAgICAgIHByZWZpeCA9ICcgICc7XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBjb25zdCB2YWx1ZVN0cmluZyA9IGdldFZhbHVlU3RyaW5nKGtleSwgdmFsdWUpO1xuICAgICAgICBsb2cuZGVidWcoYCAgICAgICAgJHtrZXl9OiAke3ZhbHVlU3RyaW5nfWApO1xuICAgICAgfVxuICAgIH1cbiAgfVxufVxuXG5mdW5jdGlvbiB1cGRhdGVBcHBzV2l0aERpY3QgKGRpY3QpIHtcbiAgLy8gZ2V0IHRoZSBkaWN0aW9uYXJ5IGVudHJ5IGludG8gYSBuaWNlIGZvcm0sIGFuZCBhZGQgaXQgdG8gdGhlXG4gIC8vIGFwcGxpY2F0aW9uIGRpY3Rpb25hcnlcbiAgdGhpcy5hcHBEaWN0ID0gdGhpcy5hcHBEaWN0IHx8IHt9O1xuICBsZXQgW2lkLCBlbnRyeV0gPSBhcHBJbmZvRnJvbURpY3QoZGljdCk7XG4gIGlmICh0aGlzLmFwcERpY3RbaWRdKSB7XG4gICAgLy8gcHJlc2VydmUgdGhlIHBhZ2UgZGljdGlvbmFyeSBmb3IgdGhpcyBlbnRyeVxuICAgIGVudHJ5LnBhZ2VBcnJheSA9IHRoaXMuYXBwRGljdFtpZF0ucGFnZUFycmF5O1xuICB9XG4gIHRoaXMuYXBwRGljdFtpZF0gPSBlbnRyeTtcblxuICAvLyBhZGQgYSBwcm9taXNlIHRvIGdldCB0aGUgcGFnZSBkaWN0aW9uYXJ5XG4gIGlmIChfLmlzVW5kZWZpbmVkKGVudHJ5LnBhZ2VBcnJheSkpIHtcbiAgICBlbnRyeS5wYWdlQXJyYXkgPSBkZWZlcnJlZFByb21pc2UoKTtcbiAgfVxuXG4gIC8vIHRyeSB0byBnZXQgdGhlIGFwcCBpZCBmcm9tIG91ciBjb25uZWN0ZWQgYXBwc1xuICBpZiAoIXRoaXMuYXBwSWRLZXkpIHtcbiAgICB0aGlzLmFwcElkS2V5ID0gZ2V0RGVidWdnZXJBcHBLZXkodGhpcy5idW5kbGVJZCwgdGhpcy5hcHBEaWN0KTtcbiAgfVxufVxuXG5leHBvcnQgZGVmYXVsdCB7IHNldENvbm5lY3Rpb25LZXksIGNvbm5lY3QsIGRpc2Nvbm5lY3QsIHNlbGVjdEFwcCwgc2VhcmNoRm9yQXBwLCBzZWFyY2hGb3JQYWdlLCBzZWxlY3RQYWdlLCB1cGRhdGVBcHBzV2l0aERpY3QgfTtcbiJdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7Ozs7QUFBQTs7QUFDQTs7QUFFQTs7QUFDQTs7QUFD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
|
|
241
|
+
exports.default = _default;
|
|
242
|
+
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJBUFBfQ09OTkVDVF9USU1FT1VUX01TIiwiQVBQX0NPTk5FQ1RfSU5URVJWQUxfTVMiLCJTRUxFQ1RfQVBQX1JFVFJJRVMiLCJTRUxFQ1RfQVBQX1JFVFJZX1NMRUVQX01TIiwiU0FGQVJJX0JVTkRMRV9JRCIsIkJMQU5LX1BBR0VfVVJMIiwic2V0Q29ubmVjdGlvbktleSIsImxvZyIsImRlYnVnIiwicnBjQ2xpZW50Iiwic2VuZCIsImNvbm5lY3QiLCJ0aW1lb3V0Iiwic2V0dXAiLCJpbml0UnBjQ2xpZW50Iiwib24iLCJfIiwibm9vcCIsIm9uUGFnZUNoYW5nZSIsImJpbmQiLCJvbkNvbm5lY3RlZEFwcGxpY2F0aW9uTGlzdCIsIm9uQXBwQ29ubmVjdCIsIm9uQXBwRGlzY29ubmVjdCIsIm9uQXBwVXBkYXRlIiwib25Db25uZWN0ZWREcml2ZXJMaXN0Iiwib25DdXJyZW50U3RhdGUiLCJmcmFtZURldGFjaGVkIiwid2FpdEZvckNvbmRpdGlvbiIsImlzRW1wdHkiLCJhcHBEaWN0Iiwid2FpdE1zIiwiaW50ZXJ2YWwiLCJlcnIiLCJlcnJvciIsIm1lc3NhZ2UiLCJkaXNjb25uZWN0IiwiZW1pdCIsImV2ZW50cyIsIkVWRU5UX0RJU0NPTk5FQ1QiLCJ0ZWFyZG93biIsInNlbGVjdEFwcCIsImN1cnJlbnRVcmwiLCJtYXhUcmllcyIsImlnbm9yZUFib3V0QmxhbmtVcmwiLCJzaG91bGRDaGVja0ZvclRhcmdldCIsInRpbWVyIiwidGltaW5nIiwiVGltZXIiLCJzdGFydCIsImFwcElkS2V5IiwicGFnZURpY3QiLCJzZWFyY2hGb3JBcHAiLCJlcnJvckFuZFRocm93IiwibG9nQXBwbGljYXRpb25EaWN0aW9uYXJ5IiwicGFnZUFycmF5IiwicGFnZUFycmF5RnJvbURpY3QiLCJzaW1wbGVTdHJpbmdpZnkiLCJmdWxsUGFnZUFycmF5IiwiYXBwIiwiaW5mbyIsInRvUGFpcnMiLCJpc0FycmF5IiwiaXNBY3RpdmUiLCJpZCIsInJlcGxhY2UiLCJwYWdlIiwidXJsIiwiY2xvbmUiLCJidW5kbGVJZCIsInB1c2giLCJnZXREdXJhdGlvbiIsImFzTWlsbGlTZWNvbmRzIiwidG9GaXhlZCIsImJ1bmRsZUlkcyIsImluY2x1ZGVTYWZhcmkiLCJpc1NhZmFyaSIsImFkZGl0aW9uYWxCdW5kbGVJZHMiLCJyZXRyeUludGVydmFsIiwicmV0cnlDb3VudCIsInBvc3NpYmxlQXBwSWRzIiwiZ2V0UG9zc2libGVEZWJ1Z2dlckFwcEtleXMiLCJqb2luIiwiYXR0ZW1wdGVkQXBwSWRLZXkiLCJyZXN1bHQiLCJzZWFyY2hGb3JQYWdlIiwiRXJyb3IiLCJpZ24iLCJhcHBzRGljdCIsInZhbHVlcyIsInByb21pc2UiLCJkaWN0Iiwic2VsZWN0UGFnZSIsInBhZ2VJZEtleSIsInNraXBSZWFkeUNoZWNrIiwiY2hlY2tQYWdlSXNSZWFkeSIsInBhZ2VVbmxvYWQiLCJhcHBzIiwiZ2V0VmFsdWVTdHJpbmciLCJrZXkiLCJ2YWx1ZSIsImlzRnVuY3Rpb24iLCJKU09OIiwic3RyaW5naWZ5IiwiQXJyYXkiLCJsZW5ndGgiLCJwcmVmaXgiLCJrIiwidiIsInZhbHVlU3RyaW5nIiwidXBkYXRlQXBwc1dpdGhEaWN0IiwiZW50cnkiLCJhcHBJbmZvRnJvbURpY3QiLCJpc1VuZGVmaW5lZCIsImRlZmVycmVkUHJvbWlzZSIsImdldERlYnVnZ2VyQXBwS2V5Il0sInNvdXJjZXMiOlsiLi4vLi4vLi4vbGliL21peGlucy9jb25uZWN0LmpzIl0sInNvdXJjZXNDb250ZW50IjpbImltcG9ydCBsb2cgZnJvbSAnLi4vbG9nZ2VyJztcbmltcG9ydCB7IGFwcEluZm9Gcm9tRGljdCwgcGFnZUFycmF5RnJvbURpY3QsIGdldERlYnVnZ2VyQXBwS2V5LFxuICAgICAgICAgZ2V0UG9zc2libGVEZWJ1Z2dlckFwcEtleXMsIHNpbXBsZVN0cmluZ2lmeSwgZGVmZXJyZWRQcm9taXNlIH0gZnJvbSAnLi4vdXRpbHMnO1xuaW1wb3J0IGV2ZW50cyBmcm9tICcuL2V2ZW50cyc7XG5pbXBvcnQgeyB0aW1pbmcgfSBmcm9tICdhcHBpdW0vc3VwcG9ydCc7XG5pbXBvcnQgeyByZXRyeUludGVydmFsLCB3YWl0Rm9yQ29uZGl0aW9uIH0gZnJvbSAnYXN5bmNib3gnO1xuaW1wb3J0IF8gZnJvbSAnbG9kYXNoJztcblxuXG5jb25zdCBBUFBfQ09OTkVDVF9USU1FT1VUX01TID0gMDtcbmNvbnN0IEFQUF9DT05ORUNUX0lOVEVSVkFMX01TID0gMTAwO1xuY29uc3QgU0VMRUNUX0FQUF9SRVRSSUVTID0gMjA7XG5jb25zdCBTRUxFQ1RfQVBQX1JFVFJZX1NMRUVQX01TID0gNTAwO1xuY29uc3QgU0FGQVJJX0JVTkRMRV9JRCA9ICdjb20uYXBwbGUubW9iaWxlc2FmYXJpJztcbmNvbnN0IEJMQU5LX1BBR0VfVVJMID0gJ2Fib3V0OmJsYW5rJztcblxuXG5hc3luYyBmdW5jdGlvbiBzZXRDb25uZWN0aW9uS2V5ICgpIHtcbiAgbG9nLmRlYnVnKCdTZW5kaW5nIGNvbm5lY3Rpb24ga2V5IHJlcXVlc3QnKTtcbiAgLy8gc2VuZCBidXQgb25seSB3YWl0IHRvIG1ha2Ugc3VyZSB0aGUgc29ja2V0IHdvcmtlZFxuICAvLyBhcyByZXNwb25zZSBmcm9tIFdlYiBJbnNwZWN0b3IgY2FuIHRha2UgYSBsb25nIHRpbWVcbiAgYXdhaXQgdGhpcy5ycGNDbGllbnQuc2VuZCgnc2V0Q29ubmVjdGlvbktleScsIHt9LCBmYWxzZSk7XG59XG5cbmFzeW5jIGZ1bmN0aW9uIGNvbm5lY3QgKHRpbWVvdXQgPSBBUFBfQ09OTkVDVF9USU1FT1VUX01TKSB7XG4gIHRoaXMuc2V0dXAoKTtcblxuICAvLyBpbml0aWFsaXplIHRoZSBycGMgY2xpZW50XG4gIHRoaXMuaW5pdFJwY0NsaWVudCgpO1xuXG4gIC8vIGxpc3RlbiBmb3IgYmFzaWMgZGVidWdnZXItbGV2ZWwgZXZlbnRzXG4gIHRoaXMucnBjQ2xpZW50Lm9uKCdfcnBjX3JlcG9ydFNldHVwOicsIF8ubm9vcCk7XG4gIHRoaXMucnBjQ2xpZW50Lm9uKCdfcnBjX2ZvcndhcmRHZXRMaXN0aW5nOicsIHRoaXMub25QYWdlQ2hhbmdlLmJpbmQodGhpcykpO1xuICB0aGlzLnJwY0NsaWVudC5vbignX3JwY19yZXBvcnRDb25uZWN0ZWRBcHBsaWNhdGlvbkxpc3Q6JywgdGhpcy5vbkNvbm5lY3RlZEFwcGxpY2F0aW9uTGlzdC5iaW5kKHRoaXMpKTtcbiAgdGhpcy5ycGNDbGllbnQub24oJ19ycGNfYXBwbGljYXRpb25Db25uZWN0ZWQ6JywgdGhpcy5vbkFwcENvbm5lY3QuYmluZCh0aGlzKSk7XG4gIHRoaXMucnBjQ2xpZW50Lm9uKCdfcnBjX2FwcGxpY2F0aW9uRGlzY29ubmVjdGVkOicsIHRoaXMub25BcHBEaXNjb25uZWN0LmJpbmQodGhpcykpO1xuICB0aGlzLnJwY0NsaWVudC5vbignX3JwY19hcHBsaWNhdGlvblVwZGF0ZWQ6JywgdGhpcy5vbkFwcFVwZGF0ZS5iaW5kKHRoaXMpKTtcbiAgdGhpcy5ycGNDbGllbnQub24oJ19ycGNfcmVwb3J0Q29ubmVjdGVkRHJpdmVyTGlzdDonLCB0aGlzLm9uQ29ubmVjdGVkRHJpdmVyTGlzdC5iaW5kKHRoaXMpKTtcbiAgdGhpcy5ycGNDbGllbnQub24oJ19ycGNfcmVwb3J0Q3VycmVudFN0YXRlOicsIHRoaXMub25DdXJyZW50U3RhdGUuYmluZCh0aGlzKSk7XG4gIHRoaXMucnBjQ2xpZW50Lm9uKCdQYWdlLmZyYW1lRGV0YWNoZWQnLCB0aGlzLmZyYW1lRGV0YWNoZWQuYmluZCh0aGlzKSk7XG5cbiAgYXdhaXQgdGhpcy5ycGNDbGllbnQuY29ubmVjdCgpO1xuXG4gIC8vIGdldCB0aGUgY29ubmVjdGlvbiBpbmZvcm1hdGlvbiBhYm91dCB0aGUgYXBwXG4gIHRyeSB7XG4gICAgYXdhaXQgdGhpcy5zZXRDb25uZWN0aW9uS2V5KCk7XG4gICAgaWYgKHRpbWVvdXQpIHtcbiAgICAgIGxvZy5kZWJ1ZyhgV2FpdGluZyB1cCB0byAke3RpbWVvdXR9bXMgZm9yIGFwcGxpY2F0aW9ucyB0byBiZSByZXBvcnRlZGApO1xuICAgICAgdHJ5IHtcbiAgICAgICAgYXdhaXQgd2FpdEZvckNvbmRpdGlvbigoKSA9PiAhXy5pc0VtcHR5KHRoaXMuYXBwRGljdCksIHtcbiAgICAgICAgICB3YWl0TXM6IHRpbWVvdXQsXG4gICAgICAgICAgaW50ZXJ2YWw6IEFQUF9DT05ORUNUX0lOVEVSVkFMX01TLFxuICAgICAgICB9KTtcbiAgICAgIH0gY2F0Y2ggKGVycikge1xuICAgICAgICBsb2cuZGVidWcoYFRpbWVkIG91dCB3YWl0aW5nIGZvciBhcHBsaWNhdGlvbnMgdG8gYmUgcmVwb3J0ZWRgKTtcbiAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIHRoaXMuYXBwRGljdCB8fCB7fTtcbiAgfSBjYXRjaCAoZXJyKSB7XG4gICAgbG9nLmVycm9yKGBFcnJvciBzZXR0aW5nIGNvbm5lY3Rpb24ga2V5OiAke2Vyci5tZXNzYWdlfWApO1xuICAgIGF3YWl0IHRoaXMuZGlzY29ubmVjdCgpO1xuICAgIHRocm93IGVycjtcbiAgfVxufVxuXG5hc3luYyBmdW5jdGlvbiBkaXNjb25uZWN0ICgpIHtcbiAgaWYgKHRoaXMucnBjQ2xpZW50KSB7XG4gICAgYXdhaXQgdGhpcy5ycGNDbGllbnQuZGlzY29ubmVjdCgpO1xuICB9XG4gIHRoaXMuZW1pdChldmVudHMuRVZFTlRfRElTQ09OTkVDVCwgdHJ1ZSk7XG4gIHRoaXMudGVhcmRvd24oKTtcbn1cblxuYXN5bmMgZnVuY3Rpb24gc2VsZWN0QXBwIChjdXJyZW50VXJsID0gbnVsbCwgbWF4VHJpZXMgPSBTRUxFQ1RfQVBQX1JFVFJJRVMsIGlnbm9yZUFib3V0QmxhbmtVcmwgPSBmYWxzZSkge1xuICBjb25zdCBzaG91bGRDaGVja0ZvclRhcmdldCA9IHRoaXMucnBjQ2xpZW50LnNob3VsZENoZWNrRm9yVGFyZ2V0O1xuICB0aGlzLnJwY0NsaWVudC5zaG91bGRDaGVja0ZvclRhcmdldCA9IGZhbHNlO1xuICB0cnkge1xuICAgIGNvbnN0IHRpbWVyID0gbmV3IHRpbWluZy5UaW1lcigpLnN0YXJ0KCk7XG4gICAgbG9nLmRlYnVnKCdTZWxlY3RpbmcgYXBwbGljYXRpb24nKTtcbiAgICBpZiAoIXRoaXMuYXBwRGljdCB8fCBfLmlzRW1wdHkodGhpcy5hcHBEaWN0KSkge1xuICAgICAgbG9nLmRlYnVnKCdObyBhcHBsaWNhdGlvbnMgY3VycmVudGx5IGNvbm5lY3RlZC4nKTtcbiAgICAgIHJldHVybiBbXTtcbiAgICB9XG5cbiAgICBjb25zdCB7YXBwSWRLZXksIHBhZ2VEaWN0fSA9IGF3YWl0IHRoaXMuc2VhcmNoRm9yQXBwKGN1cnJlbnRVcmwsIG1heFRyaWVzLCBpZ25vcmVBYm91dEJsYW5rVXJsKTtcblxuICAgIC8vIGlmLCBhZnRlciBhbGwgdGhpcywgd2UgaGF2ZSBubyBkaWN0aW9uYXJ5LCB3ZSBoYXZlIGZhaWxlZFxuICAgIGlmICghYXBwSWRLZXkgfHwgIXBhZ2VEaWN0KSB7XG4gICAgICBsb2cuZXJyb3JBbmRUaHJvdyhgQ291bGQgbm90IGNvbm5lY3QgdG8gYSB2YWxpZCBhcHAgYWZ0ZXIgJHttYXhUcmllc30gdHJpZXMuYCk7XG4gICAgfVxuXG4gICAgaWYgKHRoaXMuYXBwSWRLZXkgIT09IGFwcElkS2V5KSB7XG4gICAgICBsb2cuZGVidWcoYFJlY2VpdmVkIGFsdGVyZWQgYXBwIGlkLCB1cGRhdGluZyBmcm9tICcke3RoaXMuYXBwSWRLZXl9JyB0byAnJHthcHBJZEtleX0nYCk7XG4gICAgICB0aGlzLmFwcElkS2V5ID0gYXBwSWRLZXk7XG4gICAgfVxuXG4gICAgbG9nQXBwbGljYXRpb25EaWN0aW9uYXJ5KHRoaXMuYXBwRGljdCk7XG5cbiAgICAvLyB0cmFuc2xhdGUgdGhlIGRpY3Rpb25hcnkgaW50byBhIHVzZWZ1bCBmb3JtLCBhbmQgcmV0dXJuIHRvIHNlbmRlclxuICAgIGNvbnN0IHBhZ2VBcnJheSA9IF8uaXNFbXB0eSh0aGlzLmFwcERpY3RbYXBwSWRLZXldLnBhZ2VBcnJheSlcbiAgICAgID8gcGFnZUFycmF5RnJvbURpY3QocGFnZURpY3QpXG4gICAgICA6IHRoaXMuYXBwRGljdFthcHBJZEtleV0ucGFnZUFycmF5O1xuICAgIGxvZy5kZWJ1ZyhgRmluYWxseSBzZWxlY3RpbmcgYXBwICR7dGhpcy5hcHBJZEtleX06ICR7c2ltcGxlU3RyaW5naWZ5KHBhZ2VBcnJheSl9YCk7XG5cbiAgICBsZXQgZnVsbFBhZ2VBcnJheSA9IFtdO1xuICAgIGZvciAoY29uc3QgW2FwcCwgaW5mb10gb2YgXy50b1BhaXJzKHRoaXMuYXBwRGljdCkpIHtcbiAgICAgIGlmICghXy5pc0FycmF5KGluZm8ucGFnZUFycmF5KSB8fCAhaW5mby5pc0FjdGl2ZSkge1xuICAgICAgICBjb250aW51ZTtcbiAgICAgIH1cbiAgICAgIGNvbnN0IGlkID0gYXBwLnJlcGxhY2UoJ1BJRDonLCAnJyk7XG4gICAgICBmb3IgKGNvbnN0IHBhZ2Ugb2YgaW5mby5wYWdlQXJyYXkpIHtcbiAgICAgICAgaWYgKCEoaWdub3JlQWJvdXRCbGFua1VybCAmJiBwYWdlLnVybCA9PT0gQkxBTktfUEFHRV9VUkwpKSB7XG4gICAgICAgICAgbGV0IHBhZ2VEaWN0ID0gXy5jbG9uZShwYWdlKTtcbiAgICAgICAgICBwYWdlRGljdC5pZCA9IGAke2lkfS4ke3BhZ2VEaWN0LmlkfWA7XG4gICAgICAgICAgcGFnZURpY3QuYnVuZGxlSWQgPSBpbmZvLmJ1bmRsZUlkO1xuICAgICAgICAgIGZ1bGxQYWdlQXJyYXkucHVzaChwYWdlRGljdCk7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG5cbiAgICBsb2cuZGVidWcoYFNlbGVjdGVkIGFwcCBhZnRlciAke3RpbWVyLmdldER1cmF0aW9uKCkuYXNNaWxsaVNlY29uZHMudG9GaXhlZCgwKX1tc2ApO1xuICAgIHJldHVybiBmdWxsUGFnZUFycmF5O1xuICB9IGZpbmFsbHkge1xuICAgIHRoaXMucnBjQ2xpZW50LnNob3VsZENoZWNrRm9yVGFyZ2V0ID0gc2hvdWxkQ2hlY2tGb3JUYXJnZXQ7XG4gIH1cbn1cblxuYXN5bmMgZnVuY3Rpb24gc2VhcmNoRm9yQXBwIChjdXJyZW50VXJsLCBtYXhUcmllcywgaWdub3JlQWJvdXRCbGFua1VybCkge1xuICBjb25zdCBidW5kbGVJZHMgPSB0aGlzLmluY2x1ZGVTYWZhcmkgJiYgIXRoaXMuaXNTYWZhcmlcbiAgICA/IFt0aGlzLmJ1bmRsZUlkLCAuLi50aGlzLmFkZGl0aW9uYWxCdW5kbGVJZHMsIFNBRkFSSV9CVU5ETEVfSURdXG4gICAgOiBbdGhpcy5idW5kbGVJZCwgLi4udGhpcy5hZGRpdGlvbmFsQnVuZGxlSWRzXTtcbiAgdHJ5IHtcbiAgICByZXR1cm4gYXdhaXQgcmV0cnlJbnRlcnZhbChtYXhUcmllcywgU0VMRUNUX0FQUF9SRVRSWV9TTEVFUF9NUywgYXN5bmMgKHJldHJ5Q291bnQpID0+IHtcbiAgICAgIGxvZ0FwcGxpY2F0aW9uRGljdGlvbmFyeSh0aGlzLmFwcERpY3QpO1xuICAgICAgY29uc3QgcG9zc2libGVBcHBJZHMgPSBnZXRQb3NzaWJsZURlYnVnZ2VyQXBwS2V5cyhidW5kbGVJZHMsIHRoaXMuYXBwRGljdCk7XG4gICAgICBsb2cuZGVidWcoYFRyeWluZyBvdXQgdGhlIHBvc3NpYmxlIGFwcCBpZHM6ICR7cG9zc2libGVBcHBJZHMuam9pbignLCAnKX0gKHRyeSAjJHtyZXRyeUNvdW50ICsgMX0gb2YgJHttYXhUcmllc30pYCk7XG4gICAgICBmb3IgKGNvbnN0IGF0dGVtcHRlZEFwcElkS2V5IG9mIHBvc3NpYmxlQXBwSWRzKSB7XG4gICAgICAgIHRyeSB7XG4gICAgICAgICAgaWYgKCF0aGlzLmFwcERpY3RbYXR0ZW1wdGVkQXBwSWRLZXldLmlzQWN0aXZlKSB7XG4gICAgICAgICAgICBsb2cuZGVidWcoYFNraXBwaW5nIGFwcCAnJHthdHRlbXB0ZWRBcHBJZEtleX0nIGJlY2F1c2UgaXQgaXMgbm90IGFjdGl2ZWApO1xuICAgICAgICAgICAgY29udGludWU7XG4gICAgICAgICAgfVxuICAgICAgICAgIGxvZy5kZWJ1ZyhgQXR0ZW1wdGluZyBhcHAgJyR7YXR0ZW1wdGVkQXBwSWRLZXl9J2ApO1xuICAgICAgICAgIGNvbnN0IFthcHBJZEtleSwgcGFnZURpY3RdID0gYXdhaXQgdGhpcy5ycGNDbGllbnQuc2VsZWN0QXBwKGF0dGVtcHRlZEFwcElkS2V5LCB0aGlzLm9uQXBwQ29ubmVjdC5iaW5kKHRoaXMpKTtcbiAgICAgICAgICAvLyBpbiBpT1MgOC4yIHRoZSBjb25uZWN0IGxvZ2ljIGhhcHBlbnMsIGJ1dCB3aXRoIGFuIGVtcHR5IGRpY3Rpb25hcnlcbiAgICAgICAgICAvLyB3aGljaCBsZWFkcyB0byB0aGUgcmVtb3RlIGRlYnVnZ2VyIGdldHRpbmcgZGlzY29ubmVjdGVkLCBhbmQgaW50byBhIGxvb3BcbiAgICAgICAgICBpZiAoXy5pc0VtcHR5KHBhZ2VEaWN0KSkge1xuICAgICAgICAgICAgbG9nLmRlYnVnKCdFbXB0eSBwYWdlIGRpY3Rpb25hcnkgcmVjZWl2ZWQuIFRyeWluZyBhZ2Fpbi4nKTtcbiAgICAgICAgICAgIGNvbnRpbnVlO1xuICAgICAgICAgIH1cblxuICAgICAgICAgIC8vIHNhdmUgdGhlIHBhZ2UgYXJyYXkgZm9yIHRoaXMgYXBwXG4gICAgICAgICAgdGhpcy5hcHBEaWN0W2FwcElkS2V5XS5wYWdlQXJyYXkgPSBwYWdlQXJyYXlGcm9tRGljdChwYWdlRGljdCk7XG5cbiAgICAgICAgICAvLyBpZiB3ZSBhcmUgbG9va2luZyBmb3IgYSBwYXJ0aWN1bGFyIHVybCwgbWFrZSBzdXJlIHdlXG4gICAgICAgICAgLy8gaGF2ZSB0aGUgcmlnaHQgcGFnZS4gSWdub3JlIGVtcHR5IG9yIHVuZGVmaW5lZCB1cmxzLlxuICAgICAgICAgIC8vIElnbm9yZSBhYm91dDpibGFuayBpZiByZXF1ZXN0ZWQuXG4gICAgICAgICAgY29uc3QgcmVzdWx0ID0gdGhpcy5zZWFyY2hGb3JQYWdlKHRoaXMuYXBwRGljdCwgY3VycmVudFVybCwgaWdub3JlQWJvdXRCbGFua1VybCk7XG4gICAgICAgICAgaWYgKHJlc3VsdCkge1xuICAgICAgICAgICAgcmV0dXJuIHJlc3VsdDtcbiAgICAgICAgICB9XG5cbiAgICAgICAgICBpZiAoY3VycmVudFVybCkge1xuICAgICAgICAgICAgbG9nLmRlYnVnKGBSZWNlaXZlZCBhcHAsIGJ1dCBleHBlY3RlZCB1cmwgKCcke2N1cnJlbnRVcmx9Jykgd2FzIG5vdCBmb3VuZC4gVHJ5aW5nIGFnYWluLmApO1xuICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBsb2cuZGVidWcoJ1JlY2VpdmVkIGFwcCwgYnV0IG5vIG1hdGNoIHdhcyBmb3VuZC4gVHJ5aW5nIGFnYWluLicpO1xuICAgICAgICAgIH1cbiAgICAgICAgfSBjYXRjaCAoZXJyKSB7XG4gICAgICAgICAgbG9nLmRlYnVnKGBFcnJvciBjaGVja2luZyBhcHBsaWNhdGlvbjogJyR7ZXJyLm1lc3NhZ2V9Jy4gUmV0cnlpbmcgY29ubmVjdGlvbmApO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgICByZXRyeUNvdW50Kys7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoJ0ZhaWxlZCB0byBmaW5kIGFuIGFwcCB0byBzZWxlY3QnKTtcbiAgICB9LCAwKTtcbiAgfSBjYXRjaCAoaWduKSB7XG4gICAgbG9nLmVycm9yQW5kVGhyb3coYENvdWxkIG5vdCBjb25uZWN0IHRvIGEgdmFsaWQgYXBwIGFmdGVyICR7bWF4VHJpZXN9IHRyaWVzLmApO1xuICB9XG59XG5cbmZ1bmN0aW9uIHNlYXJjaEZvclBhZ2UgKGFwcHNEaWN0LCBjdXJyZW50VXJsID0gbnVsbCwgaWdub3JlQWJvdXRCbGFua1VybCA9IGZhbHNlKSB7XG4gIGZvciAoY29uc3QgYXBwRGljdCBvZiBfLnZhbHVlcyhhcHBzRGljdCkpIHtcbiAgICBpZiAoIWFwcERpY3QgfHwgIWFwcERpY3QuaXNBY3RpdmUgfHwgIWFwcERpY3QucGFnZUFycmF5IHx8IGFwcERpY3QucGFnZUFycmF5LnByb21pc2UpIHtcbiAgICAgIGNvbnRpbnVlO1xuICAgIH1cblxuICAgIGZvciAoY29uc3QgZGljdCBvZiBhcHBEaWN0LnBhZ2VBcnJheSkge1xuICAgICAgaWYgKCghaWdub3JlQWJvdXRCbGFua1VybCB8fCBkaWN0LnVybCAhPT0gQkxBTktfUEFHRV9VUkwpICYmXG4gICAgICAgICAgKCFjdXJyZW50VXJsIHx8IGRpY3QudXJsID09PSBjdXJyZW50VXJsIHx8IGRpY3QudXJsID09PSBgJHtjdXJyZW50VXJsfS9gKSkge1xuICAgICAgICByZXR1cm4geyBhcHBJZEtleTogYXBwRGljdC5pZCwgcGFnZURpY3Q6IGRpY3QgfTtcbiAgICAgIH1cbiAgICB9XG4gIH1cbiAgcmV0dXJuIG51bGw7XG59XG5cbmFzeW5jIGZ1bmN0aW9uIHNlbGVjdFBhZ2UgKGFwcElkS2V5LCBwYWdlSWRLZXksIHNraXBSZWFkeUNoZWNrID0gZmFsc2UpIHtcbiAgdGhpcy5hcHBJZEtleSA9IGBQSUQ6JHthcHBJZEtleX1gO1xuICB0aGlzLnBhZ2VJZEtleSA9IHBhZ2VJZEtleTtcblxuICBsb2cuZGVidWcoYFNlbGVjdGluZyBwYWdlICcke3BhZ2VJZEtleX0nIG9uIGFwcCAnJHt0aGlzLmFwcElkS2V5fScgYW5kIGZvcndhcmRpbmcgc29ja2V0IHNldHVwYCk7XG5cbiAgY29uc3QgdGltZXIgPSBuZXcgdGltaW5nLlRpbWVyKCkuc3RhcnQoKTtcblxuICBhd2FpdCB0aGlzLnJwY0NsaWVudC5zZWxlY3RQYWdlKHRoaXMuYXBwSWRLZXksIHBhZ2VJZEtleSk7XG5cbiAgLy8gbWFrZSBzdXJlIGV2ZXJ5dGhpbmcgaXMgcmVhZHkgdG8gZ29cbiAgaWYgKCFza2lwUmVhZHlDaGVjayAmJiAhYXdhaXQgdGhpcy5jaGVja1BhZ2VJc1JlYWR5KCkpIHtcbiAgICBhd2FpdCB0aGlzLnBhZ2VVbmxvYWQoKTtcbiAgfVxuXG4gIGxvZy5kZWJ1ZyhgU2VsZWN0ZWQgcGFnZSBhZnRlciAke3RpbWVyLmdldER1cmF0aW9uKCkuYXNNaWxsaVNlY29uZHMudG9GaXhlZCgwKX1tc2ApO1xufVxuXG5mdW5jdGlvbiBsb2dBcHBsaWNhdGlvbkRpY3Rpb25hcnkgKGFwcHMpIHtcbiAgZnVuY3Rpb24gZ2V0VmFsdWVTdHJpbmcgKGtleSwgdmFsdWUpIHtcbiAgICBpZiAoXy5pc0Z1bmN0aW9uKHZhbHVlKSkge1xuICAgICAgcmV0dXJuICdbRnVuY3Rpb25dJztcbiAgICB9XG4gICAgaWYgKGtleSA9PT0gJ3BhZ2VBcnJheScgJiYgIV8uaXNBcnJheSh2YWx1ZSkpIHtcbiAgICAgIHJldHVybiBgXCJXYWl0aW5nIGZvciBkYXRhXCJgO1xuICAgIH1cbiAgICByZXR1cm4gSlNPTi5zdHJpbmdpZnkodmFsdWUpO1xuICB9XG4gIGxvZy5kZWJ1ZygnQ3VycmVudCBhcHBsaWNhdGlvbnMgYXZhaWxhYmxlOicpO1xuICBmb3IgKGNvbnN0IFthcHAsIGluZm9dIG9mIF8udG9QYWlycyhhcHBzKSkge1xuICAgIGxvZy5kZWJ1ZyhgICAgIEFwcGxpY2F0aW9uOiBcIiR7YXBwfVwiYCk7XG4gICAgZm9yIChjb25zdCBba2V5LCB2YWx1ZV0gb2YgXy50b1BhaXJzKGluZm8pKSB7XG4gICAgICBpZiAoa2V5ID09PSAncGFnZUFycmF5JyAmJiBBcnJheS5pc0FycmF5KHZhbHVlKSAmJiB2YWx1ZS5sZW5ndGgpIHtcbiAgICAgICAgbG9nLmRlYnVnKGAgICAgICAgICR7a2V5fTpgKTtcbiAgICAgICAgZm9yIChjb25zdCBwYWdlIG9mIHZhbHVlKSB7XG4gICAgICAgICAgbGV0IHByZWZpeCA9ICctICc7XG4gICAgICAgICAgZm9yIChjb25zdCBbaywgdl0gb2YgXy50b1BhaXJzKHBhZ2UpKSB7XG4gICAgICAgICAgICBsb2cuZGVidWcoYCAgICAgICAgICAke3ByZWZpeH0ke2t9OiAke0pTT04uc3RyaW5naWZ5KHYpfWApO1xuICAgICAgICAgICAgcHJlZml4ID0gJyAgJztcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGNvbnN0IHZhbHVlU3RyaW5nID0gZ2V0VmFsdWVTdHJpbmcoa2V5LCB2YWx1ZSk7XG4gICAgICAgIGxvZy5kZWJ1ZyhgICAgICAgICAke2tleX06ICR7dmFsdWVTdHJpbmd9YCk7XG4gICAgICB9XG4gICAgfVxuICB9XG59XG5cbmZ1bmN0aW9uIHVwZGF0ZUFwcHNXaXRoRGljdCAoZGljdCkge1xuICAvLyBnZXQgdGhlIGRpY3Rpb25hcnkgZW50cnkgaW50byBhIG5pY2UgZm9ybSwgYW5kIGFkZCBpdCB0byB0aGVcbiAgLy8gYXBwbGljYXRpb24gZGljdGlvbmFyeVxuICB0aGlzLmFwcERpY3QgPSB0aGlzLmFwcERpY3QgfHwge307XG4gIGxldCBbaWQsIGVudHJ5XSA9IGFwcEluZm9Gcm9tRGljdChkaWN0KTtcbiAgaWYgKHRoaXMuYXBwRGljdFtpZF0pIHtcbiAgICAvLyBwcmVzZXJ2ZSB0aGUgcGFnZSBkaWN0aW9uYXJ5IGZvciB0aGlzIGVudHJ5XG4gICAgZW50cnkucGFnZUFycmF5ID0gdGhpcy5hcHBEaWN0W2lkXS5wYWdlQXJyYXk7XG4gIH1cbiAgdGhpcy5hcHBEaWN0W2lkXSA9IGVudHJ5O1xuXG4gIC8vIGFkZCBhIHByb21pc2UgdG8gZ2V0IHRoZSBwYWdlIGRpY3Rpb25hcnlcbiAgaWYgKF8uaXNVbmRlZmluZWQoZW50cnkucGFnZUFycmF5KSkge1xuICAgIGVudHJ5LnBhZ2VBcnJheSA9IGRlZmVycmVkUHJvbWlzZSgpO1xuICB9XG5cbiAgLy8gdHJ5IHRvIGdldCB0aGUgYXBwIGlkIGZyb20gb3VyIGNvbm5lY3RlZCBhcHBzXG4gIGlmICghdGhpcy5hcHBJZEtleSkge1xuICAgIHRoaXMuYXBwSWRLZXkgPSBnZXREZWJ1Z2dlckFwcEtleSh0aGlzLmJ1bmRsZUlkLCB0aGlzLmFwcERpY3QpO1xuICB9XG59XG5cbmV4cG9ydCBkZWZhdWx0IHsgc2V0Q29ubmVjdGlvbktleSwgY29ubmVjdCwgZGlzY29ubmVjdCwgc2VsZWN0QXBwLCBzZWFyY2hGb3JBcHAsIHNlYXJjaEZvclBhZ2UsIHNlbGVjdFBhZ2UsIHVwZGF0ZUFwcHNXaXRoRGljdCB9O1xuIl0sIm1hcHBpbmdzIjoiOzs7Ozs7OztBQUFBO0FBQ0E7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUdBLE1BQU1BLHNCQUFzQixHQUFHLENBQUM7QUFDaEMsTUFBTUMsdUJBQXVC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
|