appium-android-driver 4.54.0 → 5.0.3
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/README.md +1 -2
- package/build/index.js +6 -4
- package/build/lib/android-helpers.js +12 -9
- package/build/lib/bootstrap.js +7 -7
- package/build/lib/commands/actions.js +13 -13
- package/build/lib/commands/alert.js +7 -7
- package/build/lib/commands/app-management.js +6 -6
- package/build/lib/commands/context.js +10 -8
- package/build/lib/commands/element.js +5 -5
- package/build/lib/commands/execute.js +5 -5
- package/build/lib/commands/file-actions.js +12 -12
- package/build/lib/commands/find.js +6 -6
- package/build/lib/commands/general.js +7 -69
- package/build/lib/commands/ime.js +4 -4
- package/build/lib/commands/index.js +4 -2
- package/build/lib/commands/intent.js +7 -7
- package/build/lib/commands/log.js +6 -6
- package/build/lib/commands/network.js +4 -4
- package/build/lib/commands/performance.js +1 -1
- package/build/lib/commands/recordscreen.js +15 -15
- package/build/lib/commands/shell.js +3 -3
- package/build/lib/commands/streamscreen.js +7 -7
- package/build/lib/commands/system-bars.js +144 -0
- package/build/lib/commands/touch.js +8 -8
- package/build/lib/desired-caps.js +1 -1
- package/build/lib/driver.js +12 -12
- package/build/lib/logger.js +3 -3
- package/build/lib/server.js +4 -4
- package/build/lib/uiautomator.js +3 -3
- package/build/lib/unlock-helpers.js +8 -8
- package/build/lib/webview-helpers.js +7 -7
- package/lib/android-helpers.js +1 -1
- package/lib/bootstrap.js +2 -2
- package/lib/commands/actions.js +1 -1
- package/lib/commands/alert.js +1 -1
- package/lib/commands/app-management.js +4 -2
- package/lib/commands/context.js +2 -2
- package/lib/commands/element.js +1 -1
- package/lib/commands/execute.js +1 -1
- package/lib/commands/file-actions.js +1 -1
- package/lib/commands/find.js +2 -2
- package/lib/commands/general.js +1 -83
- package/lib/commands/ime.js +1 -1
- package/lib/commands/index.js +2 -0
- package/lib/commands/intent.js +1 -1
- package/lib/commands/log.js +1 -1
- package/lib/commands/network.js +1 -1
- package/lib/commands/recordscreen.js +1 -1
- package/lib/commands/shell.js +1 -1
- package/lib/commands/streamscreen.js +1 -1
- package/lib/commands/system-bars.js +131 -0
- package/lib/commands/touch.js +2 -2
- package/lib/driver.js +2 -2
- package/lib/logger.js +1 -1
- package/lib/server.js +1 -1
- package/lib/uiautomator.js +1 -1
- package/lib/unlock-helpers.js +1 -1
- package/lib/webview-helpers.js +1 -1
- package/package.json +14 -12
- package/lib/.DS_Store +0 -0
|
@@ -0,0 +1,144 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
|
|
3
|
+
var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault");
|
|
4
|
+
|
|
5
|
+
Object.defineProperty(exports, "__esModule", {
|
|
6
|
+
value: true
|
|
7
|
+
});
|
|
8
|
+
exports.default = void 0;
|
|
9
|
+
exports.parseWindowProperties = parseWindowProperties;
|
|
10
|
+
exports.parseWindows = parseWindows;
|
|
11
|
+
|
|
12
|
+
require("source-map-support/register");
|
|
13
|
+
|
|
14
|
+
var _lodash = _interopRequireDefault(require("lodash"));
|
|
15
|
+
|
|
16
|
+
var _logger = _interopRequireDefault(require("../logger"));
|
|
17
|
+
|
|
18
|
+
const WINDOW_TITLE_PATTERN = /^\s+Window\s#\d+\sWindow\{[0-9a-f]+\s\w+\s([\w-]+)\}:$/;
|
|
19
|
+
const FRAME_PATTERN = /^\s+mFrame=\[([0-9.-]+),([0-9.-]+)\]\[([0-9.-]+),([0-9.-]+)\]/m;
|
|
20
|
+
const SURFACE_PATTERN = /^\s+Surface:\sshown=(true|false)/m;
|
|
21
|
+
const STATUS_BAR_WINDOW_NAME_PREFIX = 'StatusBar';
|
|
22
|
+
const NAVIGATION_BAR_WINDOW_NAME_PREFIX = 'NavigationBar';
|
|
23
|
+
const DEFAULT_WINDOW_PROPERTIES = {
|
|
24
|
+
visible: false,
|
|
25
|
+
x: 0,
|
|
26
|
+
y: 0,
|
|
27
|
+
width: 0,
|
|
28
|
+
height: 0
|
|
29
|
+
};
|
|
30
|
+
const commands = {};
|
|
31
|
+
|
|
32
|
+
function parseWindowProperties(name, props) {
|
|
33
|
+
const result = _lodash.default.cloneDeep(DEFAULT_WINDOW_PROPERTIES);
|
|
34
|
+
|
|
35
|
+
const propLines = props.join('\n');
|
|
36
|
+
const frameMatch = FRAME_PATTERN.exec(propLines);
|
|
37
|
+
|
|
38
|
+
if (!frameMatch) {
|
|
39
|
+
_logger.default.debug(propLines);
|
|
40
|
+
|
|
41
|
+
throw new Error(`Cannot parse the frame size from '${name}' window properties`);
|
|
42
|
+
}
|
|
43
|
+
|
|
44
|
+
result.x = parseFloat(frameMatch[1]);
|
|
45
|
+
result.y = parseFloat(frameMatch[2]);
|
|
46
|
+
const left = parseFloat(frameMatch[3]);
|
|
47
|
+
const top = parseFloat(frameMatch[4]);
|
|
48
|
+
result.width = left - result.x;
|
|
49
|
+
result.height = top - result.y;
|
|
50
|
+
const visibilityMatch = SURFACE_PATTERN.exec(propLines);
|
|
51
|
+
|
|
52
|
+
if (!visibilityMatch) {
|
|
53
|
+
_logger.default.debug(propLines);
|
|
54
|
+
|
|
55
|
+
throw new Error(`Cannot parse the visibility value from '${name}' window properties`);
|
|
56
|
+
}
|
|
57
|
+
|
|
58
|
+
result.visible = visibilityMatch[1] === 'true';
|
|
59
|
+
return result;
|
|
60
|
+
}
|
|
61
|
+
|
|
62
|
+
function parseWindows(lines) {
|
|
63
|
+
const windows = {};
|
|
64
|
+
let currentWindowName = null;
|
|
65
|
+
let windowNameRowIndent = null;
|
|
66
|
+
|
|
67
|
+
for (const line of lines.split('\n').map(_lodash.default.trimEnd)) {
|
|
68
|
+
const currentIndent = line.length - _lodash.default.trimStart(line).length;
|
|
69
|
+
|
|
70
|
+
if (_lodash.default.isNil(windowNameRowIndent) || currentIndent <= windowNameRowIndent) {
|
|
71
|
+
const match = WINDOW_TITLE_PATTERN.exec(line);
|
|
72
|
+
|
|
73
|
+
if (!match) {
|
|
74
|
+
currentWindowName = null;
|
|
75
|
+
continue;
|
|
76
|
+
}
|
|
77
|
+
|
|
78
|
+
currentWindowName = match[1];
|
|
79
|
+
|
|
80
|
+
if (_lodash.default.isNil(windowNameRowIndent)) {
|
|
81
|
+
windowNameRowIndent = currentIndent;
|
|
82
|
+
}
|
|
83
|
+
|
|
84
|
+
continue;
|
|
85
|
+
}
|
|
86
|
+
|
|
87
|
+
if (!currentWindowName || currentIndent <= windowNameRowIndent) {
|
|
88
|
+
continue;
|
|
89
|
+
}
|
|
90
|
+
|
|
91
|
+
if (!_lodash.default.isArray(windows[currentWindowName])) {
|
|
92
|
+
windows[currentWindowName] = [];
|
|
93
|
+
}
|
|
94
|
+
|
|
95
|
+
windows[currentWindowName].push(line);
|
|
96
|
+
}
|
|
97
|
+
|
|
98
|
+
if (_lodash.default.isEmpty(windows)) {
|
|
99
|
+
_logger.default.debug(lines.join('\n'));
|
|
100
|
+
|
|
101
|
+
throw new Error('Cannot parse any window information from the dumpsys output');
|
|
102
|
+
}
|
|
103
|
+
|
|
104
|
+
const result = {
|
|
105
|
+
statusBar: null,
|
|
106
|
+
navigationBar: null
|
|
107
|
+
};
|
|
108
|
+
|
|
109
|
+
for (const [name, props] of _lodash.default.toPairs(windows)) {
|
|
110
|
+
if (name.startsWith(STATUS_BAR_WINDOW_NAME_PREFIX)) {
|
|
111
|
+
result.statusBar = parseWindowProperties(name, props);
|
|
112
|
+
} else if (name.startsWith(NAVIGATION_BAR_WINDOW_NAME_PREFIX)) {
|
|
113
|
+
result.navigationBar = parseWindowProperties(name, props);
|
|
114
|
+
}
|
|
115
|
+
}
|
|
116
|
+
|
|
117
|
+
const unmatchedWindows = [['statusBar', STATUS_BAR_WINDOW_NAME_PREFIX], ['navigationBar', NAVIGATION_BAR_WINDOW_NAME_PREFIX]].filter(([name]) => _lodash.default.isNil(result[name]));
|
|
118
|
+
|
|
119
|
+
for (const [window, namePrefix] of unmatchedWindows) {
|
|
120
|
+
_logger.default.info(`No windows have been found whose title matches to ` + `'${namePrefix}'. Assuming it is invisible. ` + `Only the following windows are available: ${_lodash.default.keys(windows)}`);
|
|
121
|
+
|
|
122
|
+
result[window] = _lodash.default.cloneDeep(DEFAULT_WINDOW_PROPERTIES);
|
|
123
|
+
}
|
|
124
|
+
|
|
125
|
+
return result;
|
|
126
|
+
}
|
|
127
|
+
|
|
128
|
+
commands.getSystemBars = async function getSystemBars() {
|
|
129
|
+
let stdout;
|
|
130
|
+
|
|
131
|
+
try {
|
|
132
|
+
stdout = await this.adb.shell(['dumpsys', 'window', 'windows']);
|
|
133
|
+
} catch (e) {
|
|
134
|
+
throw new Error(`Cannot retrieve system bars details. Original error: ${e.message}`);
|
|
135
|
+
}
|
|
136
|
+
|
|
137
|
+
return parseWindows(stdout);
|
|
138
|
+
};
|
|
139
|
+
|
|
140
|
+
var _default = commands;
|
|
141
|
+
exports.default = _default;require('source-map-support').install();
|
|
142
|
+
|
|
143
|
+
|
|
144
|
+
//# sourceMappingURL=data:application/json;charset=utf8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbImxpYi9jb21tYW5kcy9zeXN0ZW0tYmFycy5qcyJdLCJuYW1lcyI6WyJXSU5ET1dfVElUTEVfUEFUVEVSTiIsIkZSQU1FX1BBVFRFUk4iLCJTVVJGQUNFX1BBVFRFUk4iLCJTVEFUVVNfQkFSX1dJTkRPV19OQU1FX1BSRUZJWCIsIk5BVklHQVRJT05fQkFSX1dJTkRPV19OQU1FX1BSRUZJWCIsIkRFRkFVTFRfV0lORE9XX1BST1BFUlRJRVMiLCJ2aXNpYmxlIiwieCIsInkiLCJ3aWR0aCIsImhlaWdodCIsImNvbW1hbmRzIiwicGFyc2VXaW5kb3dQcm9wZXJ0aWVzIiwibmFtZSIsInByb3BzIiwicmVzdWx0IiwiXyIsImNsb25lRGVlcCIsInByb3BMaW5lcyIsImpvaW4iLCJmcmFtZU1hdGNoIiwiZXhlYyIsImxvZyIsImRlYnVnIiwiRXJyb3IiLCJwYXJzZUZsb2F0IiwibGVmdCIsInRvcCIsInZpc2liaWxpdHlNYXRjaCIsInBhcnNlV2luZG93cyIsImxpbmVzIiwid2luZG93cyIsImN1cnJlbnRXaW5kb3dOYW1lIiwid2luZG93TmFtZVJvd0luZGVudCIsImxpbmUiLCJzcGxpdCIsIm1hcCIsInRyaW1FbmQiLCJjdXJyZW50SW5kZW50IiwibGVuZ3RoIiwidHJpbVN0YXJ0IiwiaXNOaWwiLCJtYXRjaCIsImlzQXJyYXkiLCJwdXNoIiwiaXNFbXB0eSIsInN0YXR1c0JhciIsIm5hdmlnYXRpb25CYXIiLCJ0b1BhaXJzIiwic3RhcnRzV2l0aCIsInVubWF0Y2hlZFdpbmRvd3MiLCJmaWx0ZXIiLCJ3aW5kb3ciLCJuYW1lUHJlZml4IiwiaW5mbyIsImtleXMiLCJnZXRTeXN0ZW1CYXJzIiwic3Rkb3V0IiwiYWRiIiwic2hlbGwiLCJlIiwibWVzc2FnZSJdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7Ozs7OztBQUFBOztBQUNBOztBQUVBLE1BQU1BLG9CQUFvQixHQUFHLHdEQUE3QjtBQUNBLE1BQU1DLGFBQWEsR0FBRyxnRUFBdEI7QUFDQSxNQUFNQyxlQUFlLEdB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cm9tICcuLi9sb2dnZXInO1xuXG5jb25zdCBXSU5ET1dfVElUTEVfUEFUVEVSTiA9IC9eXFxzK1dpbmRvd1xccyNcXGQrXFxzV2luZG93XFx7WzAtOWEtZl0rXFxzXFx3K1xccyhbXFx3LV0rKVxcfTokLztcbmNvbnN0IEZSQU1FX1BBVFRFUk4gPSAvXlxccyttRnJhbWU9XFxbKFswLTkuLV0rKSwoWzAtOS4tXSspXFxdXFxbKFswLTkuLV0rKSwoWzAtOS4tXSspXFxdL207XG5jb25zdCBTVVJGQUNFX1BBVFRFUk4gPSAvXlxccytTdXJmYWNlOlxcc3Nob3duPSh0cnVlfGZhbHNlKS9tO1xuY29uc3QgU1RBVFVTX0JBUl9XSU5ET1dfTkFNRV9QUkVGSVggPSAnU3RhdHVzQmFyJztcbmNvbnN0IE5BVklHQVRJT05fQkFSX1dJTkRPV19OQU1FX1BSRUZJWCA9ICdOYXZpZ2F0aW9uQmFyJztcbmNvbnN0IERFRkFVTFRfV0lORE9XX1BST1BFUlRJRVMgPSB7XG4gIHZpc2libGU6IGZhbHNlLFxuICB4OiAwLCB5OiAwLCB3aWR0aDogMCwgaGVpZ2h0OiAwLFxufTtcblxuY29uc3QgY29tbWFuZHMgPSB7fTtcblxuLyoqXG4gKiBAdHlwZWRlZiB7T2JqZWN0fSBXaW5kb3dQcm9wZXJ0aWVzXG4gKiBAcHJvcGVydHkge2Jvb2xlYW59IHZpc2libGUgV2hldGhlciB0aGUgd2luZG93IGlzIHZpc2libGVcbiAqIEBwcm9wZXJ0eSB7bnVtYmVyfSB4IFdpbmRvdyB4IGNvb3JkaW5hdGVcbiAqIEBwcm9wZXJ0eSB7bnVtYmVyfSB5IFdpbmRvdyB5IGNvb3JkaW5hdGVcbiAqIEBwcm9wZXJ0eSB7bnVtYmVyfSB3aWR0aCBXaW5kb3cgd2lkdGhcbiAqIEBwcm9wZXJ0eSB7bnVtYmVyfSBoZWlnaHQgV2luZG93IGhlaWdodFxuICovXG5cbi8qKlxuICogUGFyc2VzIHdpbmRvdyBwcm9wZXJ0aWVzIGZyb20gYWRiIGR1bXBzeXMgb3V0cHV0XG4gKlxuICogQHBhcmFtIHtzdHJpbmd9IG5hbWUgVGhlIG5hbWUgb2YgdGhlIHdpbmRvdyB3aG9zZSBwcm9wZXJ0aWVzIGFyZSBiZWluZyBwYXJzZWRcbiAqIEBwYXJhbSB7QXJyYXk8c3RyaW5nPn0gcHJvcHMgVGhlIGxpc3Qgb2YgcGFydGljdWxhciB3aW5kb3cgcHJvcGVydHkgbGluZXMuXG4gKiBDaGVjayB0aGUgY29ycmVzcG9uZGluZyB1bml0IHRlc3RzIGZvciBtb3JlIGRldGFpbHMgb24gdGhlIGlucHV0IGZvcm1hdC5cbiAqIEByZXR1cm5zIHtXaW5kb3dQcm9wZXJ0aWVzfSBQYXJzZWQgcHJvcGVydGllcyBvYmplY3RcbiAqIEB0aHJvd3Mge0Vycm9yfSBJZiB0aGVyZSB3YXMgYW4gaXNzdWUgd2hpbGUgcGFyc2luZyB0aGUgcHJvcGVydGllcyBzdHJpbmdcbiAqL1xuZnVuY3Rpb24gcGFyc2VXaW5kb3dQcm9wZXJ0aWVzIChuYW1lLCBwcm9wcykge1xuICBjb25zdCByZXN1bHQgPSBfLmNsb25lRGVlcChERUZBVUxUX1dJTkRPV19QUk9QRVJUSUVTKTtcbiAgY29uc3QgcHJvcExpbmVzID0gcHJvcHMuam9pbignXFxuJyk7XG4gIGNvbnN0IGZyYW1lTWF0Y2ggPSBGUkFNRV9QQVRURVJOLmV4ZWMocHJvcExpbmVzKTtcbiAgaWYgKCFmcmFtZU1hdGNoKSB7XG4gICAgbG9nLmRlYnVnKHByb3BMaW5lcyk7XG4gICAgdGhyb3cgbmV3IEVycm9yKGBDYW5ub3QgcGFyc2UgdGhlIGZyYW1lIHNpemUgZnJvbSAnJHtuYW1lfScgd2luZG93IHByb3BlcnRpZXNgKTtcbiAgfVxuICByZXN1bHQueCA9IHBhcnNlRmxvYXQoZnJhbWVNYXRjaFsxXSk7XG4gIHJlc3VsdC55ID0gcGFyc2VGbG9hdChmcmFtZU1hdGNoWzJdKTtcbiAgY29uc3QgbGVmdCA9IHBhcnNlRmxvYXQoZnJhbWVNYXRjaFszXSk7XG4gIGNvbnN0IHRvcCA9IHBhcnNlRmxvYXQoZnJhbWVNYXRjaFs0XSk7XG4gIHJlc3VsdC53aWR0aCA9IGxlZnQgLSByZXN1bHQueDtcbiAgcmVzdWx0LmhlaWdodCA9IHRvcCAtIHJlc3VsdC55O1xuICBjb25zdCB2aXNpYmlsaXR5TWF0Y2ggPSBTVVJGQUNFX1BBVFRFUk4uZXhlYyhwcm9wTGluZXMpO1xuICBpZiAoIXZpc2liaWxpdHlNYXRjaCkge1xuICAgIGxvZy5kZWJ1Zyhwcm9wTGluZXMpO1xuICAgIHRocm93IG5ldyBFcnJvcihgQ2Fubm90IHBhcnNlIHRoZSB2aXNpYmlsaXR5IHZhbHVlIGZyb20gJyR7bmFtZX0nIHdpbmRvdyBwcm9wZXJ0aWVzYCk7XG4gIH1cbiAgcmVzdWx0LnZpc2libGUgPSB2aXNpYmlsaXR5TWF0Y2hbMV0gPT09ICd0cnVlJztcbiAgcmV0dXJuIHJlc3VsdDtcbn1cblxuLyoqXG4gKiBFeHRyYWN0cyBzdGF0dXMgYW5kIG5hdmlnYXRpb24gYmFyIGluZm9ybWF0aW9uIGZyb20gdGhlIHdpbmRvdyBtYW5hZ2VyIG91dHB1dC5cbiAqXG4gKiBAcGFyYW0ge0FycmF5PHN0cmluZz59IGxpbmVzIE91dHB1dCBmcm9tIGR1bXBzeXMgY29tbWFuZC5cbiAqIENoZWNrIHRoZSBjb3JyZXNwb25kaW5nIHVuaXQgdGVzdHMgZm9yIG1vcmUgZGV0YWlscyBvbiB0aGUgaW5wdXQgZm9ybWF0LlxuICogQHJldHVybiB7T2JqZWN0fSBBbiBvYmplY3QgY29udGFpbmluZyB0d28gaXRlbXMgd2hlcmUga2V5cyBhcmUgc3RhdHVzQmFyIGFuZCBuYXZpZ2F0aW9uQmFyLFxuICogYW5kIHZhbHVlcyBhcmUgY29ycmVzcG9uZGluZyBXaW5kb3dQcm9wZXJ0aWVzIG9iamVjdHNcbiAqIEB0aHJvd3Mge0Vycm9yfSBJZiBubyB3aW5kb3cgcHJvcGVydGllcyBjb3VsZCBiZSBwYXJzZWRcbiAqL1xuZnVuY3Rpb24gcGFyc2VXaW5kb3dzIChsaW5lcykge1xuICBjb25zdCB3aW5kb3dzID0ge307XG4gIGxldCBjdXJyZW50V2luZG93TmFtZSA9IG51bGw7XG4gIGxldCB3aW5kb3dOYW1lUm93SW5kZW50ID0gbnVsbDtcbiAgZm9yIChjb25zdCBsaW5lIG9mIGxpbmVzLnNwbGl0KCdcXG4nKS5tYXAoXy50cmltRW5kKSkge1xuICAgIGNvbnN0IGN1cnJlbnRJbmRlbnQgPSBsaW5lLmxlbmd0aCAtIF8udHJpbVN0YXJ0KGxpbmUpLmxlbmd0aDtcbiAgICBpZiAoXy5pc05pbCh3aW5kb3dOYW1lUm93SW5kZW50KSB8fCBjdXJyZW50SW5kZW50IDw9IHdpbmRvd05hbWVSb3dJbmRlbnQpIHtcbiAgICAgIGNvbnN0IG1hdGNoID0gV0lORE9XX1RJVExFX1BBVFRFUk4uZXhlYyhsaW5lKTtcbiAgICAgIGlmICghbWF0Y2gpIHtcbiAgICAgICAgY3VycmVudFdpbmRvd05hbWUgPSBudWxsO1xuICAgICAgICBjb250aW51ZTtcbiAgICAgIH1cbiAgICAgIGN1cnJlbnRXaW5kb3dOYW1lID0gbWF0Y2hbMV07XG4gICAgICBpZiAoXy5pc05pbCh3aW5kb3dOYW1lUm93SW5kZW50KSkge1xuICAgICAgICB3aW5kb3dOYW1lUm93SW5kZW50ID0gY3VycmVudEluZGVudDtcbiAgICAgIH1cbiAgICAgIGNvbnRpbnVlO1xuICAgIH1cbiAgICBpZiAoIWN1cnJlbnRXaW5kb3dOYW1lIHx8IGN1cnJlbnRJbmRlbnQgPD0gd2luZG93TmFtZVJvd0luZGVudCkge1xuICAgICAgY29udGludWU7XG4gICAgfVxuXG4gICAgaWYgKCFfLmlzQXJyYXkod2luZG93c1tjdXJyZW50V2luZG93TmFtZV0pKSB7XG4gICAgICB3aW5kb3dzW2N1cnJlbnRXaW5kb3dOYW1lXSA9IFtdO1xuICAgIH1cbiAgICB3aW5kb3dzW2N1cnJlbnRXaW5kb3dOYW1lXS5wdXNoKGxpbmUpO1xuICB9XG4gIGlmIChfLmlzRW1wdHkod2luZG93cykpIHtcbiAgICBsb2cuZGVidWcobGluZXMuam9pbignXFxuJykpO1xuICAgIHRocm93IG5ldyBFcnJvcignQ2Fubm90IHBhcnNlIGFueSB3aW5kb3cgaW5mb3JtYXRpb24gZnJvbSB0aGUgZHVtcHN5cyBvdXRwdXQnKTtcbiAgfVxuXG4gIGNvbnN0IHJlc3VsdCA9IHtzdGF0dXNCYXI6IG51bGwsIG5hdmlnYXRpb25CYXI6IG51bGx9O1xuICBmb3IgKGNvbnN0IFtuYW1lLCBwcm9wc10gb2YgXy50b1BhaXJzKHdpbmRvd3MpKSB7XG4gICAgaWYgKG5hbWUuc3RhcnRzV2l0aChTVEFUVVNfQkFSX1dJTkRPV19OQU1FX1BSRUZJWCkpIHtcbiAgICAgIHJlc3VsdC5zdGF0dXNCYXIgPSBwYXJzZVdpbmRvd1Byb3BlcnRpZXMobmFtZSwgcHJvcHMpO1xuICAgIH0gZWxzZSBpZiAobmFtZS5zdGFydHNXaXRoKE5BVklHQVRJT05fQkFSX1dJTkRPV19OQU1FX1BSRUZJWCkpIHtcbiAgICAgIHJlc3VsdC5uYXZpZ2F0aW9uQmFyID0gcGFyc2VXaW5kb3dQcm9wZXJ0aWVzKG5hbWUsIHByb3BzKTtcbiAgICB9XG4gIH1cbiAgY29uc3QgdW5tYXRjaGVkV2luZG93cyA9IFtcbiAgICBbJ3N0YXR1c0JhcicsIFNUQVRVU19CQVJfV0lORE9XX05BTUVfUFJFRklYXSxcbiAgICBbJ25hdmlnYXRpb25CYXInLCBOQVZJR0FUSU9OX0JBUl9XSU5ET1dfTkFNRV9QUkVGSVhdXG4gIF0uZmlsdGVyKChbbmFtZV0pID0+IF8uaXNOaWwocmVzdWx0W25hbWVdKSk7XG4gIGZvciAoY29uc3QgW3dpbmRvdywgbmFtZVByZWZpeF0gb2YgdW5tYXRjaGVkV2luZG93cykge1xuICAgIGxvZy5pbmZvKGBObyB3aW5kb3dzIGhhdmUgYmVlbiBmb3VuZCB3aG9zZSB0aXRsZSBtYXRjaGVzIHRvIGAgK1xuICAgICAgYCcke25hbWVQcmVmaXh9Jy4gQXNzdW1pbmcgaXQgaXMgaW52aXNpYmxlLiBgICtcbiAgICAgIGBPbmx5IHRoZSBmb2xsb3dpbmcgd2luZG93cyBhcmUgYXZhaWxhYmxlOiAke18ua2V5cyh3aW5kb3dzKX1gKTtcbiAgICByZXN1bHRbd2luZG93XSA9IF8uY2xvbmVEZWVwKERFRkFVTFRfV0lORE9XX1BST1BFUlRJRVMpO1xuICB9XG4gIHJldHVybiByZXN1bHQ7XG59XG5cbmNvbW1hbmRzLmdldFN5c3RlbUJhcnMgPSBhc3luYyBmdW5jdGlvbiBnZXRTeXN0ZW1CYXJzICgpIHtcbiAgbGV0IHN0ZG91dDtcbiAgdHJ5IHtcbiAgICBzdGRvdXQgPSBhd2FpdCB0aGlzLmFkYi5zaGVsbChbJ2R1bXBzeXMnLCAnd2luZG93JywgJ3dpbmRvd3MnXSk7XG4gIH0gY2F0Y2ggKGUpIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoYENhbm5vdCByZXRyaWV2ZSBzeXN0ZW0gYmFycyBkZXRhaWxzLiBPcmlnaW5hbCBlcnJvcjogJHtlLm1lc3NhZ2V9YCk7XG4gIH1cbiAgcmV0dXJuIHBhcnNlV2luZG93cyhzdGRvdXQpO1xufTtcblxuLy8gZm9yIHVuaXQgdGVzdHNcbmV4cG9ydCB7IHBhcnNlV2luZG93cywgcGFyc2VXaW5kb3dQcm9wZXJ0aWVzIH07XG5leHBvcnQgZGVmYXVsdCBjb21tYW5kcztcbiJdLCJmaWxlIjoibGliL2NvbW1hbmRzL3N5c3RlbS1iYXJzLmpzIiwic291cmNlUm9vdCI6Ii4uLy4uLy4uIn0=
|
|
@@ -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.helpers = exports.default = exports.commands = void 0;
|
|
9
9
|
|
|
10
10
|
require("source-map-support/register");
|
|
11
11
|
|
|
@@ -17,11 +17,11 @@ var _androidHelpers = _interopRequireDefault(require("../android-helpers"));
|
|
|
17
17
|
|
|
18
18
|
var _bluebird = _interopRequireDefault(require("bluebird"));
|
|
19
19
|
|
|
20
|
-
var
|
|
20
|
+
var _baseDriver = require("@appium/base-driver");
|
|
21
21
|
|
|
22
22
|
var _asyncbox = require("asyncbox");
|
|
23
23
|
|
|
24
|
-
var
|
|
24
|
+
var _support = require("@appium/support");
|
|
25
25
|
|
|
26
26
|
let commands = {},
|
|
27
27
|
helpers = {},
|
|
@@ -30,7 +30,7 @@ exports.helpers = helpers;
|
|
|
30
30
|
exports.commands = commands;
|
|
31
31
|
|
|
32
32
|
function getCoordDefault(val) {
|
|
33
|
-
return
|
|
33
|
+
return _support.util.hasValue(val) ? val : 0.5;
|
|
34
34
|
}
|
|
35
35
|
|
|
36
36
|
function getSwipeTouchDuration(waitGesture) {
|
|
@@ -174,7 +174,7 @@ helpers.performGesture = async function performGesture(gesture) {
|
|
|
174
174
|
try {
|
|
175
175
|
return await this.doTouchAction(gesture.action, gesture.options || {});
|
|
176
176
|
} catch (e) {
|
|
177
|
-
if ((0,
|
|
177
|
+
if ((0, _baseDriver.isErrorType)(e, _baseDriver.errors.NoSuchElementError) && gesture.action === 'release' && gesture.options.element) {
|
|
178
178
|
delete gesture.options.element;
|
|
179
179
|
|
|
180
180
|
_logger.default.debug(`retrying release without element opts: ${gesture.options}.`);
|
|
@@ -195,7 +195,7 @@ commands.getSwipeOptions = async function getSwipeOptions(gestures, touchCount =
|
|
|
195
195
|
element = gestures[0].options.element,
|
|
196
196
|
destElement = gestures[2].options.element || gestures[0].options.element;
|
|
197
197
|
|
|
198
|
-
if (
|
|
198
|
+
if (_support.util.hasValue(destElement)) {
|
|
199
199
|
let locResult = await this.getLocationInView(destElement);
|
|
200
200
|
let sizeResult = await this.getSize(destElement);
|
|
201
201
|
let offsetX = Math.abs(endX) < 1 && Math.abs(endX) > 0 ? sizeResult.width * endX : endX;
|
|
@@ -203,7 +203,7 @@ commands.getSwipeOptions = async function getSwipeOptions(gestures, touchCount =
|
|
|
203
203
|
endX = locResult.x + offsetX;
|
|
204
204
|
endY = locResult.y + offsetY;
|
|
205
205
|
|
|
206
|
-
if (
|
|
206
|
+
if (_support.util.hasValue(element)) {
|
|
207
207
|
let firstElLocation = await this.getLocationInView(element);
|
|
208
208
|
endX -= firstElLocation.x;
|
|
209
209
|
endY -= firstElLocation.y;
|
|
@@ -401,4 +401,4 @@ var _default = extensions;
|
|
|
401
401
|
exports.default = _default;require('source-map-support').install();
|
|
402
402
|
|
|
403
403
|
|
|
404
|
-
//# sourceMappingURL=data:application/json;charset=utf8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbImxpYi9jb21tYW5kcy90b3VjaC5qcyJdLCJuYW1lcyI6WyJjb21tYW5kcyIsImhlbHBlcnMiLCJleHRlbnNpb25zIiwiZ2V0Q29vcmREZWZhdWx0IiwidmFsIiwidXRpbCIsImhhc1ZhbHVlIiwiZ2V0U3dpcGVUb3VjaER1cmF0aW9uIiwid2FpdEdlc3R1cmUiLCJkdXJhdGlvbiIsIm9wdGlvbnMiLCJtcyIsImRvVG91Y2hBY3Rpb24iLCJhY3Rpb24iLCJvcHRzIiwiZWxlbWVudCIsIngiLCJ5IiwiY291bnQiLCJ0YXAiLCJ0b3VjaERvd24iLCJ0b3VjaFVwIiwidG91Y2hNb3ZlIiwiQiIsImRlbGF5IiwidG91Y2hMb25nQ2xpY2siLCJsb2ciLCJ3YXJuIiwiZXJyb3JBbmRUaHJvdyIsImRvVG91Y2hEcmFnIiwiZ2VzdHVyZXMiLCJsb25nUHJlc3MiLCJtb3ZlVG8iLCJzdGFydFgiLCJzdGFydFkiLCJlbmRYIiwiZW5kWSIsImdldExvY2F0aW9uSW5WaWV3IiwiYXBpTGV2ZWwiLCJhZGIiLCJnZXRBcGlMZXZlbCIsIk1hdGgiLCJtYXgiLCJkcmFnIiwiZml4UmVsZWFzZSIsInJlbGVhc2UiLCJfIiwibGFzdCIsImNsb25lIiwicmVmIiwiZ2VzdHVyZSIsInJldmVyc2UiLCJsb2MiLCJzaXplIiwiZ2V0U2l6ZSIsIndpZHRoIiwiaGVpZ2h0IiwicGljayIsInBlcmZvcm1HZXN0dXJlIiwiZSIsImVycm9ycyIsIk5vU3VjaEVsZW1lbnRFcnJvciIsImRlYnVnIiwiZ2V0U3dpcGVPcHRpb25zIiwidG91Y2hDb3VudCIsImRlc3RFbGVtZW50IiwibG9jUmVzdWx0Iiwic2l6ZVJlc3VsdCIsIm9mZnNldFgiLCJhYnMiLCJvZmZzZXRZIiwiZmlyc3RFbExvY2F0aW9uIiwicGVyZm9ybVRvdWNoIiwibGVuZ3RoIiwic3dpcGVPcHRzIiwic3dpcGUiLCJhY3Rpb25zIiwibWFwIiwiaGVhZCIsInBvcCIsInNsaWNlIiwicHJlc3MiLCJzaGlmdCIsIndhaXQiLCJmaXhlZEdlc3R1cmVzIiwicGFyc2VUb3VjaCIsImciLCJtdWx0aSIsInRvdWNoU3RhdGVPYmplY3RzIiwiaW5jbHVkZXMiLCJvZmZzZXQiLCJlbGVtZW50SWQiLCJwb3MiLCJ0b3VjaFN0YXRlT2JqZWN0IiwidGltZU9mZnNldCIsInBhcnNlSW50IiwicHJldlBvcyIsInRpbWUiLCJzdGF0ZSIsImlzVW5kZWZpbmVkIiwiYW5kcm9pZEhlbHBlcnMiLCJ0cnVuY2F0ZURlY2ltYWxzIiwidG91Y2giLCJwZXJmb3JtTXVsdGlBY3Rpb24iLCJFcnJvciIsInN0YXRlcyIsImRvUGVyZm9ybU11bHRpQWN0aW9uIiwiYm9vdHN0cmFwIiwic2VuZEFjdGlvbiIsIk9iamVjdCIsImFzc2lnbiJdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7Ozs7QUFBQTs7QUFDQTs7QUFDQTs7QUFDQTs7QUFDQTs7QUFDQTs7QUFDQTs7QUFFQSxJQUFJQSxRQUFRLEdBQUcsRUFBZjtBQUFBLElBQW1CQyxPQUFPLEdBQUcsRUFBN0I7QUFBQSxJQUFpQ0MsVUFBVSxHQUFHLEVBQTlDOzs7O0FBRUEsU0FBU0MsZUFBVCxDQUEwQkMsR0FBMUIsRUFBK0I7QUFJN0IsU0FBT0Msb0JBQUtDLFFBQUwsQ0FBY0YsR0FBZCxJQUFxQkEsR0FBckIsR0FBMkIsR0FBbEM7QUFDRDs7QUFFRCxTQUFTRyxxQkFBVCxDQUFnQ0MsV0FBaEMsRUFBNkM7QUFHM0MsTUFBSUMsUUFBUSxHQUFHLEdBQWY7O0FBQ0EsTUFBSSxPQUFPRCxXQUFXLENBQUNFLE9BQVosQ0FBb0JDLEVBQTNCLEtBQWtDLFdBQWxDLElBQWlESCxXQUFXLENBQUNFLE9BQVosQ0FBb0JDLEVBQXpFLEVBQTZFO0FBQzNFRixJQUFBQSxRQUFRLEdBQUdELFdBQVcsQ0FBQ0UsT0FBWixDQUFvQkMsRUFBcEIsR0FBeUIsSUFBcEM7O0FBQ0EsUUFBSUYsUUFBUSxLQUFLLENBQWpCLEVBQW9CO0FBR2xCQSxNQUFBQSxRQUFRLEdBQUcsR0FBWDtBQUNEO0FBQ0Y7O0FBQ0QsU0FBT0EsUUFBUDtBQUNEOztB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TSxLQUFLd0UsVUFBTCxDQUFnQnhFLE1BQWhCLEVBQXdCLElBQXhCLENBQTFDLEVBQXlFLEtBQXpFLENBQXJCO0FBRUEsU0FBTyxNQUFNLEtBQUs2RixvQkFBTCxDQUEwQmYsU0FBMUIsRUFBcUNjLE1BQXJDLENBQWI7QUFDRCxDQVZEOztBQWtCQXpHLFFBQVEsQ0FBQzBHLG9CQUFULEdBQWdDLGVBQWVBLG9CQUFmLENBQXFDZixTQUFyQyxFQUFnRGMsTUFBaEQsRUFBd0Q7QUFDdEYsTUFBSTNGLElBQUo7O0FBQ0EsTUFBSTZFLFNBQUosRUFBZTtBQUNiN0UsSUFBQUEsSUFBSSxHQUFHO0FBQ0w2RSxNQUFBQSxTQURLO0FBRUxmLE1BQUFBLE9BQU8sRUFBRTZCO0FBRkosS0FBUDtBQUlBLFdBQU8sTUFBTSxLQUFLRSxTQUFMLENBQWVDLFVBQWYsQ0FBMEIsb0NBQTFCLEVBQWdFOUYsSUFBaEUsQ0FBYjtBQUNELEdBTkQsTUFNTztBQUNMQSxJQUFBQSxJQUFJLEdBQUc7QUFDTDhELE1BQUFBLE9BQU8sRUFBRTZCO0FBREosS0FBUDtBQUdBLFdBQU8sTUFBTSxLQUFLRSxTQUFMLENBQWVDLFVBQWYsQ0FBMEIsNEJBQTFCLEVBQXdEOUYsSUFBeEQsQ0FBYjtBQUNEO0FBQ0YsQ0FkRDs7QUFnQkErRixNQUFNLENBQUNDLE1BQVAsQ0FBYzVHLFVBQWQsRUFBMEJGLFFBQTFCLEVBQW9DQyxPQUFwQztlQUVlQyxVIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IGxvZyBmcm9tICcuLi9sb2dnZXInO1xuaW1wb3J0IF8gZnJvbSAnbG9kYXNoJztcbmltcG9ydCBhbmRyb2lkSGVscGVycyBmcm9tICcuLi9hbmRyb2lkLWhlbHBlcnMnO1xuaW1wb3J0IEIgZnJvbSAnYmx1ZWJpcmQnO1xuaW1wb3J0IHsgZXJyb3JzLCBpc0Vycm9yVHlwZSB9IGZyb20gJ2FwcGl1bS1iYXNlLWRyaXZlcic7XG5pbXBvcnQgeyBhc3luY21hcCB9IGZyb20gJ2FzeW5jYm94JztcbmltcG9ydCB7IHV0aWwgfSBmcm9tICdhcHBpdW0tc3VwcG9ydCc7XG5cbmxldCBjb21tYW5kcyA9IHt9LCBoZWxwZXJzID0ge30sIGV4dGVuc2lvbnMgPSB7fTtcblxuZnVuY3Rpb24gZ2V0Q29vcmREZWZhdWx0ICh2YWwpIHtcbiAgLy8gZ29pbmcgdGhlIGxvbmcgd2F5IGFuZCBjaGVja2luZyBmb3IgdW5kZWZpbmVkIGFuZCBudWxsIHNpbmNlXG4gIC8vIHdlIGNhbid0IGJlIGFzc3VyZWQgYGVsSWRgIGlzIGEgc3RyaW5nIGFuZCBub3QgYW4gaW50LiBTYW1lXG4gIC8vIHRoaW5nIHdpdGggZGVzdEVsZW1lbnQgYmVsb3cuXG4gIHJldHVybiB1dGlsLmhhc1ZhbHVlKHZhbCkgPyB2YWwgOiAwLjU7XG59XG5cbmZ1bmN0aW9uIGdldFN3aXBlVG91Y2hEdXJhdGlvbiAod2FpdEdlc3R1cmUpIHtcbiAgLy8gdGhlIHRvdWNoIGFjdGlvbiBhcGkgdXNlcyBtcywgd2Ugd2FudCBzZWNvbmRzXG4gIC8vIDAuOCBpcyB0aGUgZGVmYXVsdCB0aW1lIGZvciB0aGUgb3BlcmF0aW9uXG4gIGxldCBkdXJhdGlvbiA9IDAuODtcbiAgaWYgKHR5cGVvZiB3YWl0R2VzdHVyZS5vcHRpb25zLm1zICE9PSAndW5kZWZpbmVkJyAmJiB3YWl0R2VzdHVyZS5vcHRpb25zLm1zKSB7XG4gICAgZHVyYXRpb24gPSB3YWl0R2VzdHVyZS5vcHRpb25zLm1zIC8gMTAwMDtcbiAgICBpZiAoZHVyYXRpb24gPT09IDApIHtcbiAgICAgIC8vIHNldCB0byBhIHZlcnkgbG93IG51bWJlciwgc2luY2UgdGhleSB3YW50ZWQgaXQgZmFzdFxuICAgICAgLy8gYnV0IGJlbG93IDAuMSBiZWNvbWVzIDAgc3RlcHMsIHdoaWNoIGNhdXNlcyBlcnJvcnNcbiAgICAgIGR1cmF0aW9uID0gMC4xO1xuICAgIH1cbiAgfVxuICByZXR1cm4gZHVyYXRpb247XG59XG5cbmNvbW1hbmRzLmRvVG91Y2hBY3Rpb24gPSBhc3luYyBmdW5jdGlvbiBkb1RvdWNoQWN0aW9uIChhY3Rpb24sIG9wdHMgPSB7fSkge1xuICBjb25zdCB7IGVsZW1lbnQsIHgsIHksIGNvdW50LCBtcywgZHVyYXRpb24gfSA9IG9wdHM7XG4gIC8vIHBhcnNlVG91Y2ggcHJlY2FsY3VsYXRlcyBhYnNvbHV0ZSBlbGVtZW50IHBvc2l0aW9uc1xuICAvLyBzbyB0aGVyZSBpcyBubyBuZWVkIHRvIHBhc3MgYGVsZW1lbnRgIHRvIHRoZSBhZmZlY3RlZCBnZXN0dXJlc1xuICBzd2l0Y2ggKGFjdGlvbikge1xuICAgIGNhc2UgJ3RhcCc6XG4gICAgICByZXR1cm4gYXdhaXQgdGhpcy50YXAobnVsbCwgeCwgeSwgY291bnQpO1xuICAgIGNhc2UgJ3ByZXNzJzpcbiAgICAgIHJldHVybiBhd2FpdCB0aGlzLnRvdWNoRG93bihudWxsLCB4LCB5KTtcbiAgICBjYXNlICdyZWxlYXNlJzpcbiAgICAgIHJldHVybiBhd2FpdCB0aGlzLnRvdWNoVXAoZWxlbWVudCwgeCwgeSk7XG4gICAgY2FzZSAnbW92ZVRvJzpcbiAgICAgIHJldHVybiBhd2FpdCB0aGlzLnRvdWNoTW92ZShudWxsLCB4LCB5KTtcbiAgICBjYXNlICd3YWl0JzpcbiAgICAgIHJldHVybiBhd2FpdCBCLmRlbGF5KG1zKTtcbiAgICBjYXNlICdsb25nUHJlc3MnOlxuICAgICAgcmV0dXJuIGF3YWl0IHRoaXMudG91Y2hMb25nQ2xpY2sobnVsbCwgeCwgeSwgZHVyYXRpb24gfHwgMTAwMCk7XG4gICAgY2FzZSAnY2FuY2VsJzpcbiAgICAgIC8vIFRPRE86IGNsYXJpZnkgYmVoYXZpb3Igb2YgJ2NhbmNlbCcgYWN0aW9uIGFuZCBmaXggdGhpc1xuICAgICAgbG9nLndhcm4oJ0NhbmNlbCBhY3Rpb24gY3VycmVudGx5IGhhcyBubyBlZmZlY3QnKTtcbiAgICAgIGJyZWFrO1xuICAgIGRlZmF1bHQ6XG4gICAgICBsb2cuZXJyb3JBbmRUaHJvdyhgdW5rbm93biBhY3Rpb24gJHthY3Rpb259YCk7XG4gIH1cbn07XG5cbi8vIGRyYWcgaXMgKm5vdCogcHJlc3MtbW92ZS1yZWxlYXNlLCBzbyB3ZSBuZWVkIHRvIHRyYW5zbGF0ZVxuLy8gZHJhZyB3b3JrcyBmaW5lIGZvciBzY3JvbGwsIGFzIHdlbGxcbmhlbHBlcnMuZG9Ub3VjaERyYWcgPSBhc3luYyBmdW5jdGlvbiBkb1RvdWNoRHJhZyAoZ2VzdHVyZXMpIHtcbiAgbGV0IGxvbmdQcmVzcyA9IGdlc3R1cmVzWzBdO1xuICBsZXQgbW92ZVRvID0gZ2VzdHVyZXNbMV07XG4gIGxldCBzdGFydFggPSBsb25nUHJlc3Mub3B0aW9ucy54IHx8IDAsXG4gICAgICBzdGFydFkgPSBsb25nUHJlc3Mub3B0aW9ucy55IHx8IDAsXG4gICAgICBlbmRYID0gbW92ZVRvLm9wdGlvbnMueCB8fCAwLFxuICAgICAgZW5kWSA9IG1vdmVUby5vcHRpb25zLnkgfHwgMDtcbiAgaWYgKGxvbmdQcmVzcy5vcHRpb25zLmVsZW1lbnQpIHtcbiAgICBsZXQge3gsIHl9ID0gYXdhaXQgdGhpcy5nZXRMb2NhdGlvbkluVmlldyhsb25nUHJlc3Mub3B0aW9ucy5lbGVtZW50KTtcbiAgICBzdGFydFggKz0geCB8fCAwO1xuICAgIHN0YXJ0WSArPSB5IHx8IDA7XG4gIH1cbiAgaWYgKG1vdmVUby5vcHRpb25zLmVsZW1lbnQpIHtcbiAgICBsZXQge3gsIHl9ID0gYXdhaXQgdGhpcy5nZXRMb2NhdGlvbkluVmlldyhtb3ZlVG8ub3B0aW9ucy5lbGVtZW50KTtcbiAgICBlbmRYICs9IHggfHwgMDtcbiAgICBlbmRZICs9IHkgfHwgMDtcbiAgfVxuXG4gIGxldCBhcGlMZXZlbCA9IGF3YWl0IHRoaXMuYWRiLmdldEFwaUxldmVsKCk7XG4gIC8vIGxvbGxpcG9wIHRha2VzIGEgbGl0dGxlIGxvbmdlciB0byBnZXQgdGhpbmdzIHJvbGxpbmdcbiAgbGV0IGR1cmF0aW9uID0gYXBpTGV2ZWwgPj0gNSA/IDIgOiAxO1xuICAvLyBtYWtlIHN1cmUgdGhhdCBpZiB0aGUgbG9uZyBwcmVzcyBoYXMgYSBkdXJhdGlvbiwgd2UgdXNlIGl0LlxuICBpZiAobG9uZ1ByZXNzLm9wdGlvbnMgJiYgbG9uZ1ByZXNzLm9wdGlvbnMuZHVyYXRpb24pIHtcbiAgICBkdXJhdGlvbiA9IE1hdGgubWF4KGxvbmdQcmVzcy5vcHRpb25zLmR1cmF0aW9uIC8gMTAwMCwgZHVyYXRpb24pO1xuICB9XG5cbiAgLy8gYGRyYWdgIHdpbGwgdGFrZSBjYXJlIG9mIHdoZXRoZXIgdGhlcmUgaXMgYW4gZWxlbWVudCBvciBub3QgYXQgdGhhdCBsZXZlbFxuICByZXR1cm4gYXdhaXQgdGhpcy5kcmFnKHN0YXJ0WCwgc3RhcnRZLCBlbmRYLCBlbmRZLCBkdXJhdGlvbiwgMSwgbG9uZ1ByZXNzLm9wdGlvbnMuZWxlbWVudCwgbW92ZVRvLm9wdGlvbnMuZWxlbWVudCk7XG59O1xuXG4vLyBSZWxlYXNlIGdlc3R1cmUgbmVlZHMgZWxlbWVudCBvciBjby1vcmRpbmF0ZXMgdG8gcmVsZWFzZSBpdCBmcm9tIHRoYXQgcG9zaXRpb25cbi8vIG9yIGVsc2UgcmVsZWFzZSBnZXN0dXJlIGlzIHBlcmZvcm1lZCBmcm9tIGNlbnRlciBvZiB0aGUgc2NyZWVuLCBzbyB0byBmaXggaXRcbi8vIFRoaXMgbWV0aG9kIHNldHMgY28tb3JkaW5hdGVzL2VsZW1lbnQgdG8gcmVsZWFzZSBnZXN0dXJlIGlmIGl0IGhhcyBubyBvcHRpb25zIHNldCBhbHJlYWR5LlxuaGVscGVycy5maXhSZWxlYXNlID0gYXN5bmMgZnVuY3Rpb24gZml4UmVsZWFzZSAoZ2VzdHVyZXMpIHtcbiAgbGV0IHJlbGVhc2UgPSBfLmxhc3QoZ2VzdHVyZXMpO1xuICAvLyBzb21ldGltZXMgdGhlcmUgYXJlIG5vIG9wdGlvbnNcbiAgcmVsZWFzZS5vcHRpb25zID0gcmVsZWFzZS5vcHRpb25zIHx8IHt9O1xuICAvLyBub3RoaW5nIHRvIGRvIGlmIHJlbGVhc2Ugb3B0aW9ucyBhcmUgYWxyZWFkeSBzZXRcbiAgaWYgKHJlbGVhc2Uub3B0aW9ucy5lbGVtZW50IHx8IChyZWxlYXNlLm9wdGlvbnMueCAmJiByZWxlYXNlLm9wdGlvbnMueSkpIHtcbiAgICByZXR1cm47XG4gIH1cbiAgLy8gd2l0aG91dCBjb29yZGluYXRlcywgYHJlbGVhc2VgIHVzZXMgdGhlIGNlbnRlciBvZiB0aGUgc2NyZWVuLCB3aGljaCxcbiAgLy8gZ2VuZXJhbGx5IHNwZWFraW5nLCBpcyBub3Qgd2hhdCB3ZSB3YW50XG4gIC8vIHRoZXJlZm9yZTogbG9vcCBiYWNrd2FyZHMgYW5kIHVzZSB0aGUgbGFzdCBjb21tYW5kIHdpdGggYW4gZWxlbWVudCBhbmQvb3JcbiAgLy8gb2Zmc2V0IGNvb3JkaW5hdGVzXG4gIGdlc3R1cmVzID0gXy5jbG9uZShnZXN0dXJlcyk7XG4gIGxldCByZWYgPSBudWxsO1xuICBmb3IgKGxldCBnZXN0dXJlIG9mIGdlc3R1cmVzLnJldmVyc2UoKSkge1xuICAgIGxldCBvcHRzID0gZ2VzdHVyZS5vcHRpb25zO1xuICAgIGlmIChvcHRzLmVsZW1lbnQgfHwgKG9wdHMueCAmJiBvcHRzLnkpKSB7XG4gICAgICByZWYgPSBnZXN0dXJlO1xuICAgICAgYnJlYWs7XG4gICAgfVxuICB9XG4gIGlmIChyZWYpIHtcbiAgICBsZXQgb3B0cyA9IHJlZi5vcHRpb25zO1xuICAgIGlmIChvcHRzLmVsZW1lbnQpIHtcbiAgICAgIGxldCBsb2MgPSBhd2FpdCB0aGlzLmdldExvY2F0aW9uSW5WaWV3KG9wdHMuZWxlbWVudCk7XG4gICAgICBpZiAob3B0cy54ICYmIG9wdHMueSkge1xuICAgICAgICAvLyB0aGlzIGlzIGFuIG9mZnNldCBmcm9tIHRoZSBlbGVtZW50XG4gICAgICAgIHJlbGVhc2Uub3B0aW9ucyA9IHtcbiAgICAgICAgICB4OiBsb2MueCArIG9wdHMueCxcbiAgICAgICAgICB5OiBsb2MueSArIG9wdHMueVxuICAgICAgICB9O1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgLy8gdGhpcyBpcyB0aGUgY2VudGVyIG9mIHRoZSBlbGVtZW50XG4gICAgICAgIGxldCBzaXplID0gYXdhaXQgdGhpcy5nZXRTaXplKG9wdHMuZWxlbWVudCk7XG4gICAgICAgIHJlbGVhc2Uub3B0aW9ucyA9IHtcbiAgICAgICAgICB4OiBsb2MueCArIHNpemUud2lkdGggLyAyLFxuICAgICAgICAgIHk6IGxvYy55ICsgc2l6ZS5oZWlnaHQgLyAyXG4gICAgICAgIH07XG4gICAgICB9XG4gICAgfSBlbHNlIHtcbiAgICAgIHJlbGVhc2Uub3B0aW9ucyA9IF8ucGljayhvcHRzLCAneCcsICd5Jyk7XG4gICAgfVxuICB9XG4gIHJldHVybiByZWxlYXNlO1xufTtcblxuLy8gUGVyZm9ybSBvbmUgZ2VzdHVyZVxuaGVscGVycy5wZXJmb3JtR2VzdHVyZSA9IGFzeW5jIGZ1bmN0aW9uIHBlcmZvcm1HZXN0dXJlIChnZXN0dXJlKSB7XG4gIHRyeSB7XG4gICAgcmV0dXJuIGF3YWl0IHRoaXMuZG9Ub3VjaEFjdGlvbihnZXN0dXJlLmFjdGlvbiwgZ2VzdHVyZS5vcHRpb25zIHx8IHt9KTtcbiAgfSBjYXRjaCAoZSkge1xuICAgIC8vIHNvbWV0aW1lIHRoZSBlbGVtZW50IGlzIG5vdCBhdmFpbGFibGUgd2hlbiByZWxlYXNpbmcsIHJldHJ5IHdpdGhvdXQgaXRcbiAgICBpZiAoaXNFcnJvclR5cGUoZSwgZXJyb3JzLk5vU3VjaEVsZW1lbnRFcnJvcikgJiYgZ2VzdHVyZS5hY3Rpb24gPT09ICdyZWxlYXNlJyAmJlxuICAgICAgICBnZXN0dXJlLm9wdGlvbnMuZWxlbWVudCkge1xuICAgICAgZGVsZXRlIGdlc3R1cmUub3B0aW9ucy5lbGVtZW50O1xuICAgICAgbG9nLmRlYnVnKGByZXRyeWluZyByZWxlYXNlIHdpdGhvdXQgZWxlbWVudCBvcHRzOiAke2dlc3R1cmUub3B0aW9uc30uYCk7XG4gICAgICByZXR1cm4gYXdhaXQgdGhpcy5kb1RvdWNoQWN0aW9uKGdlc3R1cmUuYWN0aW9uLCBnZXN0dXJlLm9wdGlvbnMgfHwge30pO1xuICAgIH1cbiAgICB0aHJvdyBlO1xuICB9XG59O1xuXG5jb21tYW5kcy5nZXRTd2lwZU9wdGlvbnMgPSBhc3luYyBmdW5jdGlvbiBnZXRTd2lwZU9wdGlvbnMgKGdlc3R1cmVzLCB0b3VjaENvdW50ID0gMSkge1xuICBsZXQgc3RhcnRYID0gZ2V0Q29vcmREZWZhdWx0KGdlc3R1cmVzWzBdLm9wdGlvbnMueCksXG4gICAgICBzdGFydFkgPSBnZXRDb29yZERlZmF1bHQoZ2VzdHVyZXNbMF0ub3B0aW9ucy55KSxcbiAgICAgIGVuZFggPSBnZXRDb29yZERlZmF1bHQoZ2VzdHVyZXNbMl0ub3B0aW9ucy54KSxcbiAgICAgIGVuZFkgPSBnZXRDb29yZERlZmF1bHQoZ2VzdHVyZXNbMl0ub3B0aW9ucy55KSxcbiAgICAgIGR1cmF0aW9uID0gZ2V0U3dpcGVUb3VjaER1cmF0aW9uKGdlc3R1cmVzWzFdKSxcbiAgICAgIGVsZW1lbnQgPSBnZXN0dXJlc1swXS5vcHRpb25zLmVsZW1lbnQsXG4gICAgICBkZXN0RWxlbWVudCA9IGdlc3R1cmVzWzJdLm9wdGlvbnMuZWxlbWVudCB8fCBnZXN0dXJlc1swXS5vcHRpb25zLmVsZW1lbnQ7XG5cbiAgLy8gdGhlcmUncyBubyBkZXN0aW5hdGlvbiBlbGVtZW50IGhhbmRsaW5nIGluIGJvb3RzdHJhcCBhbmQgc2luY2UgaXQgYXBwbGllcyB0byBhbGwgcGxhdGZvcm1zLCB3ZSBoYW5kbGUgaXQgaGVyZVxuICBpZiAodXRpbC5oYXNWYWx1ZShkZXN0RWxlbWVudCkpIHtcbiAgICBsZXQgbG9jUmVzdWx0ID0gYXdhaXQgdGhpcy5nZXRMb2NhdGlvbkluVmlldyhkZXN0RWxlbWVudCk7XG4gICAgbGV0IHNpemVSZXN1bHQgPSBhd2FpdCB0aGlzLmdldFNpemUoZGVzdEVsZW1lbnQpO1xuICAgIGxldCBvZmZzZXRYID0gKE1hdGguYWJzKGVuZFgpIDwgMSAmJiBNYXRoLmFicyhlbmRYKSA+IDApID8gc2l6ZVJlc3VsdC53aWR0aCAqIGVuZFggOiBlbmRYO1xuICAgIGxldCBvZmZzZXRZID0gKE1hdGguYWJzKGVuZFkpIDwgMSAmJiBNYXRoLmFicyhlbmRZKSA+IDApID8gc2l6ZVJlc3VsdC5oZWlnaHQgKiBlbmRZIDogZW5kWTtcbiAgICBlbmRYID0gbG9jUmVzdWx0LnggKyBvZmZzZXRYO1xuICAgIGVuZFkgPSBsb2NSZXN1bHQueSArIG9mZnNldFk7XG4gICAgLy8gaWYgdGhlIHRhcmdldCBlbGVtZW50IHdhcyBwcm92aWRlZCwgdGhlIGNvb3JkaW5hdGVzIGZvciB0aGUgZGVzdGluYXRpb24gbmVlZCB0byBiZSByZWxhdGl2ZSB0byBpdC5cbiAgICBpZiAodXRpbC5oYXNWYWx1ZShlbGVtZW50KSkge1xuICAgICAgbGV0IGZpcnN0RWxMb2NhdGlvbiA9IGF3YWl0IHRoaXMuZ2V0TG9jYXRpb25JblZpZXcoZWxlbWVudCk7XG4gICAgICBlbmRYIC09IGZpcnN0RWxMb2NhdGlvbi54O1xuICAgICAgZW5kWSAtPSBmaXJzdEVsTG9jYXRpb24ueTtcbiAgICB9XG4gIH1cbiAgLy8gY2xpZW50cyBhcmUgcmVzcG9uc2libGUgdG8gdXNlIHRoZXNlIG9wdGlvbnMgY29ycmVjdGx5XG4gIHJldHVybiB7c3RhcnRYLCBzdGFydFksIGVuZFgsIGVuZFksIGR1cmF0aW9uLCB0b3VjaENvdW50LCBlbGVtZW50fTtcbn07XG5cbmNvbW1hbmRzLnBlcmZvcm1Ub3VjaCA9IGFzeW5jIGZ1bmN0aW9uIHBlcmZvcm1Ub3VjaCAoZ2VzdHVyZXMpIHtcbiAgLy8gcHJlc3Mtd2FpdC1tb3ZlVG8tcmVsZWFzZSBpcyBgc3dpcGVgLCBzbyB1c2UgbmF0aXZlIG1ldGhvZFxuICBpZiAoZ2VzdHVyZXMubGVuZ3RoID09PSA0ICYmXG4gICAgICBnZXN0dXJlc1swXS5hY3Rpb24gPT09ICdwcmVzcycgJiZcbiAgICAgIGdlc3R1cmVzWzFdLmFjdGlvbiA9PT0gJ3dhaXQnICYmXG4gICAgICBnZXN0dXJlc1syXS5hY3Rpb24gPT09ICdtb3ZlVG8nICYmXG4gICAgICBnZXN0dXJlc1szXS5hY3Rpb24gPT09ICdyZWxlYXNlJykge1xuXG4gICAgbGV0IHN3aXBlT3B0cyA9IGF3YWl0IHRoaXMuZ2V0U3dpcGVPcHRpb25zKGdlc3R1cmVzKTtcbiAgICByZXR1cm4gYXdhaXQgdGhpcy5zd2lwZShzd2lwZU9wdHMuc3RhcnRYLCBzd2lwZU9wdHMuc3RhcnRZLCBzd2lwZU9wdHMuZW5kWCxcbiAgICAgICAgc3dpcGVPcHRzLmVuZFksIHN3aXBlT3B0cy5kdXJhdGlvbiwgc3dpcGVPcHRzLnRvdWNoQ291bnQsXG4gICAgICAgIHN3aXBlT3B0cy5lbGVtZW50KTtcbiAgfVxuICBsZXQgYWN0aW9ucyA9IF8ubWFwKGdlc3R1cmVzLCAnYWN0aW9uJyk7XG5cbiAgaWYgKGFjdGlvbnNbMF0gPT09ICdsb25nUHJlc3MnICYmIGFjdGlvbnNbMV0gPT09ICdtb3ZlVG8nICYmIGFjdGlvbnNbMl0gPT09ICdyZWxlYXNlJykge1xuICAgIC8vIHNvbWUgdGhpbmdzIGFyZSBzcGVjaWFsXG4gICAgcmV0dXJuIGF3YWl0IHRoaXMuZG9Ub3VjaERyYWcoZ2VzdHVyZXMpO1xuICB9IGVsc2Uge1xuICAgIGlmIChhY3Rpb25zLmxlbmd0aCA9PT0gMikge1xuICAgICAgLy8gYHByZXNzYCB3aXRob3V0IGEgd2FpdCBpcyB0b28gc2xvdyBhbmQgZ2V0cyBpbnRlcnByZXR0ZWQgYXMgYSBgbG9uZ1ByZXNzYFxuICAgICAgaWYgKF8uaGVhZChhY3Rpb25zKSA9PT0gJ3ByZXNzJyAmJiBfLmxhc3QoYWN0aW9ucykgPT09ICdyZWxlYXNlJykge1xuICAgICAgICBhY3Rpb25zWzBdID0gJ3RhcCc7XG4gICAgICAgIGdlc3R1cmVzWzBdLmFjdGlvbiA9ICd0YXAnO1xuICAgICAgfVxuXG4gICAgICAvLyB0aGUgYGxvbmdQcmVzc2AgYW5kIGB0YXBgIG1ldGhvZHMgcmVsZWFzZSBvbiB0aGVpciBvd25cbiAgICAgIGlmICgoXy5oZWFkKGFjdGlvbnMpID09PSAndGFwJyB8fCBfLmhlYWQoYWN0aW9ucykgPT09ICdsb25nUHJlc3MnKSAmJiBfLmxhc3QoYWN0aW9ucykgPT09ICdyZWxlYXNlJykge1xuICAgICAgICBnZXN0dXJlcy5wb3AoKTtcbiAgICAgICAgYWN0aW9ucy5wb3AoKTtcbiAgICAgIH1cbiAgICB9IGVsc2Uge1xuICAgICAgLy8gbG9uZ3ByZXNzIGZvbGxvd2VkIGJ5IGFueXRoaW5nIG90aGVyIHRoYW4gcmVsZWFzZSBzaG91bGQgYmVjb21lIGEgcHJlc3MgYW5kIHdhaXRcbiAgICAgIGlmIChhY3Rpb25zWzBdID09PSAnbG9uZ1ByZXNzJykge1xuICAgICAgICBhY3Rpb25zID0gWydwcmVzcycsICd3YWl0JywgLi4uYWN0aW9ucy5zbGljZSgxKV07XG5cbiAgICAgICAgbGV0IHByZXNzID0gZ2VzdHVyZXMuc2hpZnQoKTtcbiAgICAgICAgcHJlc3MuYWN0aW9uID0gJ3ByZXNzJztcbiAgICAgICAgbGV0IHdhaXQgPSB7XG4gICAgICAgICAgYWN0aW9uOiAnd2FpdCcsXG4gICAgICAgICAgb3B0aW9uczoge21zOiBwcmVzcy5vcHRpb25zLmR1cmF0aW9uIHx8IDEwMDB9XG4gICAgICAgIH07XG4gICAgICAgIGRlbGV0ZSBwcmVzcy5vcHRpb25zLmR1cmF0aW9uO1xuICAgICAgICBnZXN0dXJlcyA9IFtwcmVzcywgd2FpdCwgLi4uZ2VzdHVyZXNdO1xuICAgICAgfVxuICAgIH1cblxuICAgIGxldCBmaXhlZEdlc3R1cmVzID0gYXdhaXQgdGhpcy5wYXJzZVRvdWNoKGdlc3R1cmVzLCBmYWxzZSk7XG4gICAgLy8gZml4IHJlbGVhc2UgYWN0aW9uIHRoZW4gcGVyZm9ybSBhbGwgYWN0aW9uc1xuICAgIGlmIChhY3Rpb25zW2FjdGlvbnMubGVuZ3RoIC0gMV0gPT09ICdyZWxlYXNlJykge1xuICAgICAgYWN0aW9uc1thY3Rpb25zLmxlbmd0aCAtIDFdID0gYXdhaXQgdGhpcy5maXhSZWxlYXNlKGdlc3R1cmVzKTtcbiAgICB9XG4gICAgZm9yIChsZXQgZyBvZiBmaXhlZEdlc3R1cmVzKSB7XG4gICAgICBhd2FpdCB0aGlzLnBlcmZvcm1HZXN0dXJlKGcpO1xuICAgIH1cbiAgfVxufTtcblxuaGVscGVycy5wYXJzZVRvdWNoID0gYXN5bmMgZnVuY3Rpb24gcGFyc2VUb3VjaCAoZ2VzdHVyZXMsIG11bHRpKSB7XG4gIC8vIGJlY2F1c2UgbXVsdGktdG91Y2ggcmVsZWFzZXMgYXQgdGhlIGVuZCBieSBkZWZhdWx0XG4gIGlmIChtdWx0aSAmJiBfLmxhc3QoZ2VzdHVyZXMpLmFjdGlvbiA9PT0gJ3JlbGVhc2UnKSB7XG4gICAgZ2VzdHVyZXMucG9wKCk7XG4gIH1cblxuICBsZXQgdG91Y2hTdGF0ZU9iamVjdHMgPSBhd2FpdCBhc3luY21hcChnZXN0dXJlcywgYXN5bmMgKGdlc3R1cmUpID0+IHtcbiAgICBsZXQgb3B0aW9ucyA9IGdlc3R1cmUub3B0aW9ucyB8fCB7fTtcbiAgICBpZiAoXy5pbmNsdWRlcyhbJ3ByZXNzJywgJ21vdmVUbycsICd0YXAnLCAnbG9uZ1ByZXNzJ10sIGdlc3R1cmUuYWN0aW9uKSkge1xuICAgICAgb3B0aW9ucy5vZmZzZXQgPSBmYWxzZTtcbiAgICAgIGxldCBlbGVtZW50SWQgPSBnZXN0dXJlLm9wdGlvbnMuZWxlbWVudDtcbiAgICAgIGlmIChlbGVtZW50SWQpIHtcbiAgICAgICAgbGV0IHBvcyA9IGF3YWl0IHRoaXMuZ2V0TG9jYXRpb25JblZpZXcoZWxlbWVudElkKTtcbiAgICAgICAgaWYgKGdlc3R1cmUub3B0aW9ucy54IHx8IGdlc3R1cmUub3B0aW9ucy55KSB7XG4gICAgICAgICAgb3B0aW9ucy54ID0gcG9zLnggKyAoZ2VzdHVyZS5vcHRpb25zLnggfHwgMCk7XG4gICAgICAgICAgb3B0aW9ucy55ID0gcG9zLnkgKyAoZ2VzdHVyZS5vcHRpb25zLnkgfHwgMCk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgY29uc3Qge3dpZHRoLCBoZWlnaHR9ID0gYXdhaXQgdGhpcy5nZXRTaXplKGVsZW1lbnRJZCk7XG4gICAgICAgICAgb3B0aW9ucy54ID0gcG9zLnggKyAod2lkdGggLyAyKTtcbiAgICAgICAgICBvcHRpb25zLnkgPSBwb3MueSArIChoZWlnaHQgLyAyKTtcbiAgICAgICAgfVxuICAgICAgICBsZXQgdG91Y2hTdGF0ZU9iamVjdCA9IHtcbiAgICAgICAgICBhY3Rpb246IGdlc3R1cmUuYWN0aW9uLFxuICAgICAgICAgIG9wdGlvbnMsXG4gICAgICAgICAgdGltZU9mZnNldDogMC4wMDUsXG4gICAgICAgIH07XG4gICAgICAgIHJldHVybiB0b3VjaFN0YXRlT2JqZWN0O1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgb3B0aW9ucy54ID0gKGdlc3R1cmUub3B0aW9ucy54IHx8IDApO1xuICAgICAgICBvcHRpb25zLnkgPSAoZ2VzdHVyZS5vcHRpb25zLnkgfHwgMCk7XG5cbiAgICAgICAgbGV0IHRvdWNoU3RhdGVPYmplY3QgPSB7XG4gICAgICAgICAgYWN0aW9uOiBnZXN0dXJlLmFjdGlvbixcbiAgICAgICAgICBvcHRpb25zLFxuICAgICAgICAgIHRpbWVPZmZzZXQ6IDAuMDA1LFxuICAgICAgICB9O1xuICAgICAgICByZXR1cm4gdG91Y2hTdGF0ZU9iamVjdDtcbiAgICAgIH1cbiAgICB9IGVsc2Uge1xuICAgICAgbGV0IG9mZnNldCA9IDAuMDA1O1xuICAgICAgaWYgKGdlc3R1cmUuYWN0aW9uID09PSAnd2FpdCcpIHtcbiAgICAgICAgb3B0aW9ucyA9IGdlc3R1cmUub3B0aW9ucztcbiAgICAgICAgb2Zmc2V0ID0gKHBhcnNlSW50KGdlc3R1cmUub3B0aW9ucy5tcywgMTApIC8gMTAwMCk7XG4gICAgICB9XG4gICAgICBsZXQgdG91Y2hTdGF0ZU9iamVjdCA9IHtcbiAgICAgICAgYWN0aW9uOiBnZXN0dXJlLmFjdGlvbixcbiAgICAgICAgb3B0aW9ucyxcbiAgICAgICAgdGltZU9mZnNldDogb2Zmc2V0LFxuICAgICAgfTtcbiAgICAgIHJldHVybiB0b3VjaFN0YXRlT2JqZWN0O1xuICAgIH1cbiAgfSwgZmFsc2UpO1xuICAvLyB3ZSBuZWVkIHRvIGNoYW5nZSB0aGUgdGltZSAod2hpY2ggaXMgbm93IGFuIG9mZnNldClcbiAgLy8gYW5kIHRoZSBwb3NpdGlvbiAod2hpY2ggbWF5IGJlIGFuIG9mZnNldClcbiAgbGV0IHByZXZQb3MgPSBudWxsLFxuICAgICAgdGltZSA9IDA7XG4gIGZvciAobGV0IHN0YXRlIG9mIHRvdWNoU3RhdGVPYmplY3RzKSB7XG4gICAgaWYgKF8uaXNVbmRlZmluZWQoc3RhdGUub3B0aW9ucy54KSAmJiBfLmlzVW5kZWZpbmVkKHN0YXRlLm9wdGlvbnMueSkgJiYgcHJldlBvcyAhPT0gbnVsbCkge1xuICAgICAgLy8gdGhpcyBoYXBwZW5zIHdpdGggd2FpdFxuICAgICAgc3RhdGUub3B0aW9ucy54ID0gcHJldlBvcy54O1xuICAgICAgc3RhdGUub3B0aW9ucy55ID0gcHJldlBvcy55O1xuICAgIH1cbiAgICBpZiAoc3RhdGUub3B0aW9ucy5vZmZzZXQgJiYgcHJldlBvcykge1xuICAgICAgLy8gdGhlIGN1cnJlbnQgcG9zaXRpb24gaXMgYW4gb2Zmc2V0XG4gICAgICBzdGF0ZS5vcHRpb25zLnggKz0gcHJldlBvcy54O1xuICAgICAgc3RhdGUub3B0aW9ucy55ICs9IHByZXZQb3MueTtcbiAgICB9XG4gICAgZGVsZXRlIHN0YXRlLm9wdGlvbnMub2Zmc2V0O1xuICAgIGlmICghXy5pc1VuZGVmaW5lZChzdGF0ZS5vcHRpb25zLngpICYmICFfLmlzVW5kZWZpbmVkKHN0YXRlLm9wdGlvbnMueSkpIHtcbiAgICAgIHByZXZQb3MgPSBzdGF0ZS5vcHRpb25zO1xuICAgIH1cblxuICAgIGlmIChtdWx0aSkge1xuICAgICAgbGV0IHRpbWVPZmZzZXQgPSBzdGF0ZS50aW1lT2Zmc2V0O1xuICAgICAgdGltZSArPSB0aW1lT2Zmc2V0O1xuICAgICAgc3RhdGUudGltZSA9IGFuZHJvaWRIZWxwZXJzLnRydW5jYXRlRGVjaW1hbHModGltZSwgMyk7XG5cbiAgICAgIC8vIG11bHRpIGdlc3R1cmVzIHJlcXVpcmUgJ3RvdWNoJyByYXRoZXIgdGhhbiAnb3B0aW9ucydcbiAgICAgIGlmICghXy5pc1VuZGVmaW5lZChzdGF0ZS5vcHRpb25zLngpICYmICFfLmlzVW5kZWZpbmVkKHN0YXRlLm9wdGlvbnMueSkpIHtcbiAgICAgICAgc3RhdGUudG91Y2ggPSB7XG4gICAgICAgICAgeDogc3RhdGUub3B0aW9ucy54LFxuICAgICAgICAgIHk6IHN0YXRlLm9wdGlvbnMueVxuICAgICAgICB9O1xuICAgICAgfVxuICAgICAgZGVsZXRlIHN0YXRlLm9wdGlvbnM7XG4gICAgfVxuICAgIGRlbGV0ZSBzdGF0ZS50aW1lT2Zmc2V0O1xuICB9XG4gIHJldHVybiB0b3VjaFN0YXRlT2JqZWN0cztcbn07XG5cblxuY29tbWFuZHMucGVyZm9ybU11bHRpQWN0aW9uID0gYXN5bmMgZnVuY3Rpb24gcGVyZm9ybU11bHRpQWN0aW9uIChhY3Rpb25zLCBlbGVtZW50SWQpIHtcbiAgLy8gQW5kcm9pZCBuZWVkcyBhdCBsZWFzdCB0d28gYWN0aW9ucyB0byBiZSBhYmxlIHRvIHBlcmZvcm0gYSBtdWx0aSBwb2ludGVyIGdlc3R1cmVcbiAgaWYgKGFjdGlvbnMubGVuZ3RoID09PSAxKSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKCdNdWx0aSBQb2ludGVyIEdlc3R1cmVzIG5lZWQgYXQgbGVhc3QgdHdvIGFjdGlvbnMuICcgK1xuICAgICAgICAnVXNlIFRvdWNoIEFjdGlvbnMgZm9yIGEgc2luZ2xlIGFjdGlvbi4nKTtcbiAgfVxuXG4gIGNvbnN0IHN0YXRlcyA9IGF3YWl0IGFzeW5jbWFwKGFjdGlvbnMsIGFzeW5jIChhY3Rpb24pID0+IGF3YWl0IHRoaXMucGFyc2VUb3VjaChhY3Rpb24sIHRydWUpLCBmYWxzZSk7XG5cbiAgcmV0dXJuIGF3YWl0IHRoaXMuZG9QZXJmb3JtTXVsdGlBY3Rpb24oZWxlbWVudElkLCBzdGF0ZXMpO1xufTtcblxuLyoqXG4gKiBSZWFzb24gZm9yIGlzb2xhdGluZyBkb1BlcmZvcm1NdWx0aUFjdGlvbiBmcm9tIHBlcmZvcm1NdWx0aUFjdGlvbiBpcyBmb3IgcmV1c2luZyBwZXJmb3JtTXVsdGlBY3Rpb25cbiAqIGFjcm9zcyBhbmRyb2lkLWRyaXZlcnMgKGxpa2UgYXBwaXVtLXVpYXV0b21hdG9yMi1kcml2ZXIpIGFuZCB0byBhdm9pZCBjb2RlIGR1cGxpY2F0aW9uLlxuICogT3RoZXIgYW5kcm9pZC1kcml2ZXJzIChsaWtlIGFwcGl1bS11aWF1dG9tYXRvcjItZHJpdmVyKSBuZWVkIHRvIG92ZXJyaWRlIGRvUGVyZm9ybU11bHRpQWN0aW9uXG4gKiB0byBmYWNpbGl0YXRlIHBlcmZvcm1NdWx0aUFjdGlvbi5cbiAqL1xuY29tbWFuZHMuZG9QZXJmb3JtTXVsdGlBY3Rpb24gPSBhc3luYyBmdW5jdGlvbiBkb1BlcmZvcm1NdWx0aUFjdGlvbiAoZWxlbWVudElkLCBzdGF0ZXMpIHtcbiAgbGV0IG9wdHM7XG4gIGlmIChlbGVtZW50SWQpIHtcbiAgICBvcHRzID0ge1xuICAgICAgZWxlbWVudElkLFxuICAgICAgYWN0aW9uczogc3RhdGVzXG4gICAgfTtcbiAgICByZXR1cm4gYXdhaXQgdGhpcy5ib290c3RyYXAuc2VuZEFjdGlvbignZWxlbWVudDpwZXJmb3JtTXVsdGlQb2ludGVyR2VzdHVyZScsIG9wdHMpO1xuICB9IGVsc2Uge1xuICAgIG9wdHMgPSB7XG4gICAgICBhY3Rpb25zOiBzdGF0ZXNcbiAgICB9O1xuICAgIHJldHVybiBhd2FpdCB0aGlzLmJvb3RzdHJhcC5zZW5kQWN0aW9uKCdwZXJmb3JtTXVsdGlQb2ludGVyR2VzdHVyZScsIG9wdHMpO1xuICB9XG59O1xuXG5PYmplY3QuYXNzaWduKGV4dGVuc2lvbnMsIGNvbW1hbmRzLCBoZWxwZXJzKTtcbmV4cG9ydCB7IGNvbW1hbmRzLCBoZWxwZXJzIH07XG5leHBvcnQgZGVmYXVsdCBleHRlbnNpb25zO1xuIl0sImZpbGUiOiJsaWIvY29tbWFuZHMvdG91Y2guanMiLCJzb3VyY2VSb290IjoiLi4vLi4vLi4ifQ==
|
|
404
|
+
//# sourceMappingURL=data:application/json;charset=utf8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbImxpYi9jb21tYW5kcy90b3VjaC5qcyJdLCJuYW1lcyI6WyJjb21tYW5kcyIsImhlbHBlcnMiLCJleHRlbnNpb25zIiwiZ2V0Q29vcmREZWZhdWx0IiwidmFsIiwidXRpbCIsImhhc1ZhbHVlIiwiZ2V0U3dpcGVUb3VjaER1cmF0aW9uIiwid2FpdEdlc3R1cmUiLCJkdXJhdGlvbiIsIm9wdGlvbnMiLCJtcyIsImRvVG91Y2hBY3Rpb24iLCJhY3Rpb24iLCJvcHRzIiwiZWxlbWVudCIsIngiLCJ5IiwiY291bnQiLCJ0YXAiLCJ0b3VjaERvd24iLCJ0b3VjaFVwIiwidG91Y2hNb3ZlIiwiQiIsImRlbGF5IiwidG91Y2hMb25nQ2xpY2siLCJsb2ciLCJ3YXJuIiwiZXJyb3JBbmRUaHJvdyIsImRvVG91Y2hEcmFnIiwiZ2VzdHVyZXMiLCJsb25nUHJlc3MiLCJtb3ZlVG8iLCJzdGFydFgiLCJzdGFydFkiLCJlbmRYIiwiZW5kWSIsImdldExvY2F0aW9uSW5WaWV3IiwiYXBpTGV2ZWwiLCJhZGIiLCJnZXRBcGlMZXZlbCIsIk1hdGgiLCJtYXgiLCJkcmFnIiwiZml4UmVsZWFzZSIsInJlbGVhc2UiLCJfIiwibGFzdCIsImNsb25lIiwicmVmIiwiZ2VzdHVyZSIsInJldmVyc2UiLCJsb2MiLCJzaXplIiwiZ2V0U2l6ZSIsIndpZHRoIiwiaGVpZ2h0IiwicGljayIsInBlcmZvcm1HZXN0dXJlIiwiZSIsImVycm9ycyIsIk5vU3VjaEVsZW1lbnRFcnJvciIsImRlYnVnIiwiZ2V0U3dpcGVPcHRpb25zIiwidG91Y2hDb3VudCIsImRlc3RFbGVtZW50IiwibG9jUmVzdWx0Iiwic2l6ZVJlc3VsdCIsIm9mZnNldFgiLCJhYnMiLCJvZmZzZXRZIiwiZmlyc3RFbExvY2F0aW9uIiwicGVyZm9ybVRvdWNoIiwibGVuZ3RoIiwic3dpcGVPcHRzIiwic3dpcGUiLCJhY3Rpb25zIiwibWFwIiwiaGVhZCIsInBvcCIsInNsaWNlIiwicHJlc3MiLCJzaGlmdCIsIndhaXQiLCJmaXhlZEdlc3R1cmVzIiwicGFyc2VUb3VjaCIsImciLCJtdWx0aSIsInRvdWNoU3RhdGVPYmplY3RzIiwiaW5jbHVkZXMiLCJvZmZzZXQiLCJlbGVtZW50SWQiLCJwb3MiLCJ0b3VjaFN0YXRlT2JqZWN0IiwidGltZU9mZnNldCIsInBhcnNlSW50IiwicHJldlBvcyIsInRpbWUiLCJzdGF0ZSIsImlzVW5kZWZpbmVkIiwiYW5kcm9pZEhlbHBlcnMiLCJ0cnVuY2F0ZURlY2ltYWxzIiwidG91Y2giLCJwZXJmb3JtTXVsdGlBY3Rpb24iLCJFcnJvciIsInN0YXRlcyIsImRvUGVyZm9ybU11bHRpQWN0aW9uIiwiYm9vdHN0cmFwIiwic2VuZEFjdGlvbiIsIk9iamVjdCIsImFzc2lnbiJdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7Ozs7QUFBQTs7QUFDQTs7QUFDQTs7QUFDQTs7QUFDQTs7QUFDQTs7QUFDQTs7QUFFQSxJQUFJQSxRQUFRLEdBQUcsRUFBZjtBQUFBLElBQW1CQyxPQUFPLEdBQUcsRUFBN0I7QUFBQSxJQUFpQ0MsVUFBVSxHQUFHLEVBQTlDOzs7O0FBRUEsU0FBU0MsZUFBVCxDQUEwQkMsR0FBMUIsRUFBK0I7QUFJN0IsU0FBT0MsY0FBS0MsUUFBTCxDQUFjRixHQUFkLElBQXFCQSxHQUFyQixHQUEyQixHQUFsQztBQUNEOztBQUVELFNBQVNHLHFCQUFULENBQWdDQyxXQUFoQyxFQUE2QztBQUczQyxNQUFJQyxRQUFRLEdBQUcsR0FBZjs7QUFDQSxNQUFJLE9BQU9ELFdBQVcsQ0FBQ0UsT0FBWixDQUFvQkMsRUFBM0IsS0FBa0MsV0FBbEMsSUFBaURILFdBQVcsQ0FBQ0UsT0FBWixDQUFvQkMsRUFBekUsRUFBNkU7QUFDM0VGLElBQUFBLFFBQVEsR0FBR0QsV0FBVyxDQUFDRSxPQUFaLENBQW9CQyxFQUFwQixHQUF5QixJQUFwQzs7QUFDQSxRQUFJRixRQUFRLEtBQUssQ0FBakIsRUFBb0I7QUFHbEJBLE1BQUFBLFFBQVEsR0FBRyxHQUFYO0FBQ0Q7QUFDRjs7QUFDRCxTQUFPQSxRQUFQO0FBQ0Q7O0FB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QUFLd0UsVUFBTCxDQUFnQnhFLE1BQWhCLEVBQXdCLElBQXhCLENBQTFDLEVBQXlFLEtBQXpFLENBQXJCO0FBRUEsU0FBTyxNQUFNLEtBQUs2RixvQkFBTCxDQUEwQmYsU0FBMUIsRUFBcUNjLE1BQXJDLENBQWI7QUFDRCxDQVZEOztBQWtCQXpHLFFBQVEsQ0FBQzBHLG9CQUFULEdBQWdDLGVBQWVBLG9CQUFmLENBQXFDZixTQUFyQyxFQUFnRGMsTUFBaEQsRUFBd0Q7QUFDdEYsTUFBSTNGLElBQUo7O0FBQ0EsTUFBSTZFLFNBQUosRUFBZTtBQUNiN0UsSUFBQUEsSUFBSSxHQUFHO0FBQ0w2RSxNQUFBQSxTQURLO0FBRUxmLE1BQUFBLE9BQU8sRUFBRTZCO0FBRkosS0FBUDtBQUlBLFdBQU8sTUFBTSxLQUFLRSxTQUFMLENBQWVDLFVBQWYsQ0FBMEIsb0NBQTFCLEVBQWdFOUYsSUFBaEUsQ0FBYjtBQUNELEdBTkQsTUFNTztBQUNMQSxJQUFBQSxJQUFJLEdBQUc7QUFDTDhELE1BQUFBLE9BQU8sRUFBRTZCO0FBREosS0FBUDtBQUdBLFdBQU8sTUFBTSxLQUFLRSxTQUFMLENBQWVDLFVBQWYsQ0FBMEIsNEJBQTFCLEVBQXdEOUYsSUFBeEQsQ0FBYjtBQUNEO0FBQ0YsQ0FkRDs7QUFnQkErRixNQUFNLENBQUNDLE1BQVAsQ0FBYzVHLFVBQWQsRUFBMEJGLFFBQTFCLEVBQW9DQyxPQUFwQztlQUVlQyxVIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IGxvZyBmcm9tICcuLi9sb2dnZXInO1xuaW1wb3J0IF8gZnJvbSAnbG9kYXNoJztcbmltcG9ydCBhbmRyb2lkSGVscGVycyBmcm9tICcuLi9hbmRyb2lkLWhlbHBlcnMnO1xuaW1wb3J0IEIgZnJvbSAnYmx1ZWJpcmQnO1xuaW1wb3J0IHsgZXJyb3JzLCBpc0Vycm9yVHlwZSB9IGZyb20gJ0BhcHBpdW0vYmFzZS1kcml2ZXInO1xuaW1wb3J0IHsgYXN5bmNtYXAgfSBmcm9tICdhc3luY2JveCc7XG5pbXBvcnQgeyB1dGlsIH0gZnJvbSAnQGFwcGl1bS9zdXBwb3J0JztcblxubGV0IGNvbW1hbmRzID0ge30sIGhlbHBlcnMgPSB7fSwgZXh0ZW5zaW9ucyA9IHt9O1xuXG5mdW5jdGlvbiBnZXRDb29yZERlZmF1bHQgKHZhbCkge1xuICAvLyBnb2luZyB0aGUgbG9uZyB3YXkgYW5kIGNoZWNraW5nIGZvciB1bmRlZmluZWQgYW5kIG51bGwgc2luY2VcbiAgLy8gd2UgY2FuJ3QgYmUgYXNzdXJlZCBgZWxJZGAgaXMgYSBzdHJpbmcgYW5kIG5vdCBhbiBpbnQuIFNhbWVcbiAgLy8gdGhpbmcgd2l0aCBkZXN0RWxlbWVudCBiZWxvdy5cbiAgcmV0dXJuIHV0aWwuaGFzVmFsdWUodmFsKSA/IHZhbCA6IDAuNTtcbn1cblxuZnVuY3Rpb24gZ2V0U3dpcGVUb3VjaER1cmF0aW9uICh3YWl0R2VzdHVyZSkge1xuICAvLyB0aGUgdG91Y2ggYWN0aW9uIGFwaSB1c2VzIG1zLCB3ZSB3YW50IHNlY29uZHNcbiAgLy8gMC44IGlzIHRoZSBkZWZhdWx0IHRpbWUgZm9yIHRoZSBvcGVyYXRpb25cbiAgbGV0IGR1cmF0aW9uID0gMC44O1xuICBpZiAodHlwZW9mIHdhaXRHZXN0dXJlLm9wdGlvbnMubXMgIT09ICd1bmRlZmluZWQnICYmIHdhaXRHZXN0dXJlLm9wdGlvbnMubXMpIHtcbiAgICBkdXJhdGlvbiA9IHdhaXRHZXN0dXJlLm9wdGlvbnMubXMgLyAxMDAwO1xuICAgIGlmIChkdXJhdGlvbiA9PT0gMCkge1xuICAgICAgLy8gc2V0IHRvIGEgdmVyeSBsb3cgbnVtYmVyLCBzaW5jZSB0aGV5IHdhbnRlZCBpdCBmYXN0XG4gICAgICAvLyBidXQgYmVsb3cgMC4xIGJlY29tZXMgMCBzdGVwcywgd2hpY2ggY2F1c2VzIGVycm9yc1xuICAgICAgZHVyYXRpb24gPSAwLjE7XG4gICAgfVxuICB9XG4gIHJldHVybiBkdXJhdGlvbjtcbn1cblxuY29tbWFuZHMuZG9Ub3VjaEFjdGlvbiA9IGFzeW5jIGZ1bmN0aW9uIGRvVG91Y2hBY3Rpb24gKGFjdGlvbiwgb3B0cyA9IHt9KSB7XG4gIGNvbnN0IHsgZWxlbWVudCwgeCwgeSwgY291bnQsIG1zLCBkdXJhdGlvbiB9ID0gb3B0cztcbiAgLy8gcGFyc2VUb3VjaCBwcmVjYWxjdWxhdGVzIGFic29sdXRlIGVsZW1lbnQgcG9zaXRpb25zXG4gIC8vIHNvIHRoZXJlIGlzIG5vIG5lZWQgdG8gcGFzcyBgZWxlbWVudGAgdG8gdGhlIGFmZmVjdGVkIGdlc3R1cmVzXG4gIHN3aXRjaCAoYWN0aW9uKSB7XG4gICAgY2FzZSAndGFwJzpcbiAgICAgIHJldHVybiBhd2FpdCB0aGlzLnRhcChudWxsLCB4LCB5LCBjb3VudCk7XG4gICAgY2FzZSAncHJlc3MnOlxuICAgICAgcmV0dXJuIGF3YWl0IHRoaXMudG91Y2hEb3duKG51bGwsIHgsIHkpO1xuICAgIGNhc2UgJ3JlbGVhc2UnOlxuICAgICAgcmV0dXJuIGF3YWl0IHRoaXMudG91Y2hVcChlbGVtZW50LCB4LCB5KTtcbiAgICBjYXNlICdtb3ZlVG8nOlxuICAgICAgcmV0dXJuIGF3YWl0IHRoaXMudG91Y2hNb3ZlKG51bGwsIHgsIHkpO1xuICAgIGNhc2UgJ3dhaXQnOlxuICAgICAgcmV0dXJuIGF3YWl0IEIuZGVsYXkobXMpO1xuICAgIGNhc2UgJ2xvbmdQcmVzcyc6XG4gICAgICByZXR1cm4gYXdhaXQgdGhpcy50b3VjaExvbmdDbGljayhudWxsLCB4LCB5LCBkdXJhdGlvbiB8fCAxMDAwKTtcbiAgICBjYXNlICdjYW5jZWwnOlxuICAgICAgLy8gVE9ETzogY2xhcmlmeSBiZWhhdmlvciBvZiAnY2FuY2VsJyBhY3Rpb24gYW5kIGZpeCB0aGlzXG4gICAgICBsb2cud2FybignQ2FuY2VsIGFjdGlvbiBjdXJyZW50bHkgaGFzIG5vIGVmZmVjdCcpO1xuICAgICAgYnJlYWs7XG4gICAgZGVmYXVsdDpcbiAgICAgIGxvZy5lcnJvckFuZFRocm93KGB1bmtub3duIGFjdGlvbiAke2FjdGlvbn1gKTtcbiAgfVxufTtcblxuLy8gZHJhZyBpcyAqbm90KiBwcmVzcy1tb3ZlLXJlbGVhc2UsIHNvIHdlIG5lZWQgdG8gdHJhbnNsYXRlXG4vLyBkcmFnIHdvcmtzIGZpbmUgZm9yIHNjcm9sbCwgYXMgd2VsbFxuaGVscGVycy5kb1RvdWNoRHJhZyA9IGFzeW5jIGZ1bmN0aW9uIGRvVG91Y2hEcmFnIChnZXN0dXJlcykge1xuICBsZXQgbG9uZ1ByZXNzID0gZ2VzdHVyZXNbMF07XG4gIGxldCBtb3ZlVG8gPSBnZXN0dXJlc1sxXTtcbiAgbGV0IHN0YXJ0WCA9IGxvbmdQcmVzcy5vcHRpb25zLnggfHwgMCxcbiAgICAgIHN0YXJ0WSA9IGxvbmdQcmVzcy5vcHRpb25zLnkgfHwgMCxcbiAgICAgIGVuZFggPSBtb3ZlVG8ub3B0aW9ucy54IHx8IDAsXG4gICAgICBlbmRZID0gbW92ZVRvLm9wdGlvbnMueSB8fCAwO1xuICBpZiAobG9uZ1ByZXNzLm9wdGlvbnMuZWxlbWVudCkge1xuICAgIGxldCB7eCwgeX0gPSBhd2FpdCB0aGlzLmdldExvY2F0aW9uSW5WaWV3KGxvbmdQcmVzcy5vcHRpb25zLmVsZW1lbnQpO1xuICAgIHN0YXJ0WCArPSB4IHx8IDA7XG4gICAgc3RhcnRZICs9IHkgfHwgMDtcbiAgfVxuICBpZiAobW92ZVRvLm9wdGlvbnMuZWxlbWVudCkge1xuICAgIGxldCB7eCwgeX0gPSBhd2FpdCB0aGlzLmdldExvY2F0aW9uSW5WaWV3KG1vdmVUby5vcHRpb25zLmVsZW1lbnQpO1xuICAgIGVuZFggKz0geCB8fCAwO1xuICAgIGVuZFkgKz0geSB8fCAwO1xuICB9XG5cbiAgbGV0IGFwaUxldmVsID0gYXdhaXQgdGhpcy5hZGIuZ2V0QXBpTGV2ZWwoKTtcbiAgLy8gbG9sbGlwb3AgdGFrZXMgYSBsaXR0bGUgbG9uZ2VyIHRvIGdldCB0aGluZ3Mgcm9sbGluZ1xuICBsZXQgZHVyYXRpb24gPSBhcGlMZXZlbCA+PSA1ID8gMiA6IDE7XG4gIC8vIG1ha2Ugc3VyZSB0aGF0IGlmIHRoZSBsb25nIHByZXNzIGhhcyBhIGR1cmF0aW9uLCB3ZSB1c2UgaXQuXG4gIGlmIChsb25nUHJlc3Mub3B0aW9ucyAmJiBsb25nUHJlc3Mub3B0aW9ucy5kdXJhdGlvbikge1xuICAgIGR1cmF0aW9uID0gTWF0aC5tYXgobG9uZ1ByZXNzLm9wdGlvbnMuZHVyYXRpb24gLyAxMDAwLCBkdXJhdGlvbik7XG4gIH1cblxuICAvLyBgZHJhZ2Agd2lsbCB0YWtlIGNhcmUgb2Ygd2hldGhlciB0aGVyZSBpcyBhbiBlbGVtZW50IG9yIG5vdCBhdCB0aGF0IGxldmVsXG4gIHJldHVybiBhd2FpdCB0aGlzLmRyYWcoc3RhcnRYLCBzdGFydFksIGVuZFgsIGVuZFksIGR1cmF0aW9uLCAxLCBsb25nUHJlc3Mub3B0aW9ucy5lbGVtZW50LCBtb3ZlVG8ub3B0aW9ucy5lbGVtZW50KTtcbn07XG5cbi8vIFJlbGVhc2UgZ2VzdHVyZSBuZWVkcyBlbGVtZW50IG9yIGNvLW9yZGluYXRlcyB0byByZWxlYXNlIGl0IGZyb20gdGhhdCBwb3NpdGlvblxuLy8gb3IgZWxzZSByZWxlYXNlIGdlc3R1cmUgaXMgcGVyZm9ybWVkIGZyb20gY2VudGVyIG9mIHRoZSBzY3JlZW4sIHNvIHRvIGZpeCBpdFxuLy8gVGhpcyBtZXRob2Qgc2V0cyBjby1vcmRpbmF0ZXMvZWxlbWVudCB0byByZWxlYXNlIGdlc3R1cmUgaWYgaXQgaGFzIG5vIG9wdGlvbnMgc2V0IGFscmVhZHkuXG5oZWxwZXJzLmZpeFJlbGVhc2UgPSBhc3luYyBmdW5jdGlvbiBmaXhSZWxlYXNlIChnZXN0dXJlcykge1xuICBsZXQgcmVsZWFzZSA9IF8ubGFzdChnZXN0dXJlcyk7XG4gIC8vIHNvbWV0aW1lcyB0aGVyZSBhcmUgbm8gb3B0aW9uc1xuICByZWxlYXNlLm9wdGlvbnMgPSByZWxlYXNlLm9wdGlvbnMgfHwge307XG4gIC8vIG5vdGhpbmcgdG8gZG8gaWYgcmVsZWFzZSBvcHRpb25zIGFyZSBhbHJlYWR5IHNldFxuICBpZiAocmVsZWFzZS5vcHRpb25zLmVsZW1lbnQgfHwgKHJlbGVhc2Uub3B0aW9ucy54ICYmIHJlbGVhc2Uub3B0aW9ucy55KSkge1xuICAgIHJldHVybjtcbiAgfVxuICAvLyB3aXRob3V0IGNvb3JkaW5hdGVzLCBgcmVsZWFzZWAgdXNlcyB0aGUgY2VudGVyIG9mIHRoZSBzY3JlZW4sIHdoaWNoLFxuICAvLyBnZW5lcmFsbHkgc3BlYWtpbmcsIGlzIG5vdCB3aGF0IHdlIHdhbnRcbiAgLy8gdGhlcmVmb3JlOiBsb29wIGJhY2t3YXJkcyBhbmQgdXNlIHRoZSBsYXN0IGNvbW1hbmQgd2l0aCBhbiBlbGVtZW50IGFuZC9vclxuICAvLyBvZmZzZXQgY29vcmRpbmF0ZXNcbiAgZ2VzdHVyZXMgPSBfLmNsb25lKGdlc3R1cmVzKTtcbiAgbGV0IHJlZiA9IG51bGw7XG4gIGZvciAobGV0IGdlc3R1cmUgb2YgZ2VzdHVyZXMucmV2ZXJzZSgpKSB7XG4gICAgbGV0IG9wdHMgPSBnZXN0dXJlLm9wdGlvbnM7XG4gICAgaWYgKG9wdHMuZWxlbWVudCB8fCAob3B0cy54ICYmIG9wdHMueSkpIHtcbiAgICAgIHJlZiA9IGdlc3R1cmU7XG4gICAgICBicmVhaztcbiAgICB9XG4gIH1cbiAgaWYgKHJlZikge1xuICAgIGxldCBvcHRzID0gcmVmLm9wdGlvbnM7XG4gICAgaWYgKG9wdHMuZWxlbWVudCkge1xuICAgICAgbGV0IGxvYyA9IGF3YWl0IHRoaXMuZ2V0TG9jYXRpb25JblZpZXcob3B0cy5lbGVtZW50KTtcbiAgICAgIGlmIChvcHRzLnggJiYgb3B0cy55KSB7XG4gICAgICAgIC8vIHRoaXMgaXMgYW4gb2Zmc2V0IGZyb20gdGhlIGVsZW1lbnRcbiAgICAgICAgcmVsZWFzZS5vcHRpb25zID0ge1xuICAgICAgICAgIHg6IGxvYy54ICsgb3B0cy54LFxuICAgICAgICAgIHk6IGxvYy55ICsgb3B0cy55XG4gICAgICAgIH07XG4gICAgICB9IGVsc2Uge1xuICAgICAgICAvLyB0aGlzIGlzIHRoZSBjZW50ZXIgb2YgdGhlIGVsZW1lbnRcbiAgICAgICAgbGV0IHNpemUgPSBhd2FpdCB0aGlzLmdldFNpemUob3B0cy5lbGVtZW50KTtcbiAgICAgICAgcmVsZWFzZS5vcHRpb25zID0ge1xuICAgICAgICAgIHg6IGxvYy54ICsgc2l6ZS53aWR0aCAvIDIsXG4gICAgICAgICAgeTogbG9jLnkgKyBzaXplLmhlaWdodCAvIDJcbiAgICAgICAgfTtcbiAgICAgIH1cbiAgICB9IGVsc2Uge1xuICAgICAgcmVsZWFzZS5vcHRpb25zID0gXy5waWNrKG9wdHMsICd4JywgJ3knKTtcbiAgICB9XG4gIH1cbiAgcmV0dXJuIHJlbGVhc2U7XG59O1xuXG4vLyBQZXJmb3JtIG9uZSBnZXN0dXJlXG5oZWxwZXJzLnBlcmZvcm1HZXN0dXJlID0gYXN5bmMgZnVuY3Rpb24gcGVyZm9ybUdlc3R1cmUgKGdlc3R1cmUpIHtcbiAgdHJ5IHtcbiAgICByZXR1cm4gYXdhaXQgdGhpcy5kb1RvdWNoQWN0aW9uKGdlc3R1cmUuYWN0aW9uLCBnZXN0dXJlLm9wdGlvbnMgfHwge30pO1xuICB9IGNhdGNoIChlKSB7XG4gICAgLy8gc29tZXRpbWUgdGhlIGVsZW1lbnQgaXMgbm90IGF2YWlsYWJsZSB3aGVuIHJlbGVhc2luZywgcmV0cnkgd2l0aG91dCBpdFxuICAgIGlmIChpc0Vycm9yVHlwZShlLCBlcnJvcnMuTm9TdWNoRWxlbWVudEVycm9yKSAmJiBnZXN0dXJlLmFjdGlvbiA9PT0gJ3JlbGVhc2UnICYmXG4gICAgICAgIGdlc3R1cmUub3B0aW9ucy5lbGVtZW50KSB7XG4gICAgICBkZWxldGUgZ2VzdHVyZS5vcHRpb25zLmVsZW1lbnQ7XG4gICAgICBsb2cuZGVidWcoYHJldHJ5aW5nIHJlbGVhc2Ugd2l0aG91dCBlbGVtZW50IG9wdHM6ICR7Z2VzdHVyZS5vcHRpb25zfS5gKTtcbiAgICAgIHJldHVybiBhd2FpdCB0aGlzLmRvVG91Y2hBY3Rpb24oZ2VzdHVyZS5hY3Rpb24sIGdlc3R1cmUub3B0aW9ucyB8fCB7fSk7XG4gICAgfVxuICAgIHRocm93IGU7XG4gIH1cbn07XG5cbmNvbW1hbmRzLmdldFN3aXBlT3B0aW9ucyA9IGFzeW5jIGZ1bmN0aW9uIGdldFN3aXBlT3B0aW9ucyAoZ2VzdHVyZXMsIHRvdWNoQ291bnQgPSAxKSB7XG4gIGxldCBzdGFydFggPSBnZXRDb29yZERlZmF1bHQoZ2VzdHVyZXNbMF0ub3B0aW9ucy54KSxcbiAgICAgIHN0YXJ0WSA9IGdldENvb3JkRGVmYXVsdChnZXN0dXJlc1swXS5vcHRpb25zLnkpLFxuICAgICAgZW5kWCA9IGdldENvb3JkRGVmYXVsdChnZXN0dXJlc1syXS5vcHRpb25zLngpLFxuICAgICAgZW5kWSA9IGdldENvb3JkRGVmYXVsdChnZXN0dXJlc1syXS5vcHRpb25zLnkpLFxuICAgICAgZHVyYXRpb24gPSBnZXRTd2lwZVRvdWNoRHVyYXRpb24oZ2VzdHVyZXNbMV0pLFxuICAgICAgZWxlbWVudCA9IGdlc3R1cmVzWzBdLm9wdGlvbnMuZWxlbWVudCxcbiAgICAgIGRlc3RFbGVtZW50ID0gZ2VzdHVyZXNbMl0ub3B0aW9ucy5lbGVtZW50IHx8IGdlc3R1cmVzWzBdLm9wdGlvbnMuZWxlbWVudDtcblxuICAvLyB0aGVyZSdzIG5vIGRlc3RpbmF0aW9uIGVsZW1lbnQgaGFuZGxpbmcgaW4gYm9vdHN0cmFwIGFuZCBzaW5jZSBpdCBhcHBsaWVzIHRvIGFsbCBwbGF0Zm9ybXMsIHdlIGhhbmRsZSBpdCBoZXJlXG4gIGlmICh1dGlsLmhhc1ZhbHVlKGRlc3RFbGVtZW50KSkge1xuICAgIGxldCBsb2NSZXN1bHQgPSBhd2FpdCB0aGlzLmdldExvY2F0aW9uSW5WaWV3KGRlc3RFbGVtZW50KTtcbiAgICBsZXQgc2l6ZVJlc3VsdCA9IGF3YWl0IHRoaXMuZ2V0U2l6ZShkZXN0RWxlbWVudCk7XG4gICAgbGV0IG9mZnNldFggPSAoTWF0aC5hYnMoZW5kWCkgPCAxICYmIE1hdGguYWJzKGVuZFgpID4gMCkgPyBzaXplUmVzdWx0LndpZHRoICogZW5kWCA6IGVuZFg7XG4gICAgbGV0IG9mZnNldFkgPSAoTWF0aC5hYnMoZW5kWSkgPCAxICYmIE1hdGguYWJzKGVuZFkpID4gMCkgPyBzaXplUmVzdWx0LmhlaWdodCAqIGVuZFkgOiBlbmRZO1xuICAgIGVuZFggPSBsb2NSZXN1bHQueCArIG9mZnNldFg7XG4gICAgZW5kWSA9IGxvY1Jlc3VsdC55ICsgb2Zmc2V0WTtcbiAgICAvLyBpZiB0aGUgdGFyZ2V0IGVsZW1lbnQgd2FzIHByb3ZpZGVkLCB0aGUgY29vcmRpbmF0ZXMgZm9yIHRoZSBkZXN0aW5hdGlvbiBuZWVkIHRvIGJlIHJlbGF0aXZlIHRvIGl0LlxuICAgIGlmICh1dGlsLmhhc1ZhbHVlKGVsZW1lbnQpKSB7XG4gICAgICBsZXQgZmlyc3RFbExvY2F0aW9uID0gYXdhaXQgdGhpcy5nZXRMb2NhdGlvbkluVmlldyhlbGVtZW50KTtcbiAgICAgIGVuZFggLT0gZmlyc3RFbExvY2F0aW9uLng7XG4gICAgICBlbmRZIC09IGZpcnN0RWxMb2NhdGlvbi55O1xuICAgIH1cbiAgfVxuICAvLyBjbGllbnRzIGFyZSByZXNwb25zaWJsZSB0byB1c2UgdGhlc2Ugb3B0aW9ucyBjb3JyZWN0bHlcbiAgcmV0dXJuIHtzdGFydFgsIHN0YXJ0WSwgZW5kWCwgZW5kWSwgZHVyYXRpb24sIHRvdWNoQ291bnQsIGVsZW1lbnR9O1xufTtcblxuY29tbWFuZHMucGVyZm9ybVRvdWNoID0gYXN5bmMgZnVuY3Rpb24gcGVyZm9ybVRvdWNoIChnZXN0dXJlcykge1xuICAvLyBwcmVzcy13YWl0LW1vdmVUby1yZWxlYXNlIGlzIGBzd2lwZWAsIHNvIHVzZSBuYXRpdmUgbWV0aG9kXG4gIGlmIChnZXN0dXJlcy5sZW5ndGggPT09IDQgJiZcbiAgICAgIGdlc3R1cmVzWzBdLmFjdGlvbiA9PT0gJ3ByZXNzJyAmJlxuICAgICAgZ2VzdHVyZXNbMV0uYWN0aW9uID09PSAnd2FpdCcgJiZcbiAgICAgIGdlc3R1cmVzWzJdLmFjdGlvbiA9PT0gJ21vdmVUbycgJiZcbiAgICAgIGdlc3R1cmVzWzNdLmFjdGlvbiA9PT0gJ3JlbGVhc2UnKSB7XG5cbiAgICBsZXQgc3dpcGVPcHRzID0gYXdhaXQgdGhpcy5nZXRTd2lwZU9wdGlvbnMoZ2VzdHVyZXMpO1xuICAgIHJldHVybiBhd2FpdCB0aGlzLnN3aXBlKHN3aXBlT3B0cy5zdGFydFgsIHN3aXBlT3B0cy5zdGFydFksIHN3aXBlT3B0cy5lbmRYLFxuICAgICAgICBzd2lwZU9wdHMuZW5kWSwgc3dpcGVPcHRzLmR1cmF0aW9uLCBzd2lwZU9wdHMudG91Y2hDb3VudCxcbiAgICAgICAgc3dpcGVPcHRzLmVsZW1lbnQpO1xuICB9XG4gIGxldCBhY3Rpb25zID0gXy5tYXAoZ2VzdHVyZXMsICdhY3Rpb24nKTtcblxuICBpZiAoYWN0aW9uc1swXSA9PT0gJ2xvbmdQcmVzcycgJiYgYWN0aW9uc1sxXSA9PT0gJ21vdmVUbycgJiYgYWN0aW9uc1syXSA9PT0gJ3JlbGVhc2UnKSB7XG4gICAgLy8gc29tZSB0aGluZ3MgYXJlIHNwZWNpYWxcbiAgICByZXR1cm4gYXdhaXQgdGhpcy5kb1RvdWNoRHJhZyhnZXN0dXJlcyk7XG4gIH0gZWxzZSB7XG4gICAgaWYgKGFjdGlvbnMubGVuZ3RoID09PSAyKSB7XG4gICAgICAvLyBgcHJlc3NgIHdpdGhvdXQgYSB3YWl0IGlzIHRvbyBzbG93IGFuZCBnZXRzIGludGVycHJldHRlZCBhcyBhIGBsb25nUHJlc3NgXG4gICAgICBpZiAoXy5oZWFkKGFjdGlvbnMpID09PSAncHJlc3MnICYmIF8ubGFzdChhY3Rpb25zKSA9PT0gJ3JlbGVhc2UnKSB7XG4gICAgICAgIGFjdGlvbnNbMF0gPSAndGFwJztcbiAgICAgICAgZ2VzdHVyZXNbMF0uYWN0aW9uID0gJ3RhcCc7XG4gICAgICB9XG5cbiAgICAgIC8vIHRoZSBgbG9uZ1ByZXNzYCBhbmQgYHRhcGAgbWV0aG9kcyByZWxlYXNlIG9uIHRoZWlyIG93blxuICAgICAgaWYgKChfLmhlYWQoYWN0aW9ucykgPT09ICd0YXAnIHx8IF8uaGVhZChhY3Rpb25zKSA9PT0gJ2xvbmdQcmVzcycpICYmIF8ubGFzdChhY3Rpb25zKSA9PT0gJ3JlbGVhc2UnKSB7XG4gICAgICAgIGdlc3R1cmVzLnBvcCgpO1xuICAgICAgICBhY3Rpb25zLnBvcCgpO1xuICAgICAgfVxuICAgIH0gZWxzZSB7XG4gICAgICAvLyBsb25ncHJlc3MgZm9sbG93ZWQgYnkgYW55dGhpbmcgb3RoZXIgdGhhbiByZWxlYXNlIHNob3VsZCBiZWNvbWUgYSBwcmVzcyBhbmQgd2FpdFxuICAgICAgaWYgKGFjdGlvbnNbMF0gPT09ICdsb25nUHJlc3MnKSB7XG4gICAgICAgIGFjdGlvbnMgPSBbJ3ByZXNzJywgJ3dhaXQnLCAuLi5hY3Rpb25zLnNsaWNlKDEpXTtcblxuICAgICAgICBsZXQgcHJlc3MgPSBnZXN0dXJlcy5zaGlmdCgpO1xuICAgICAgICBwcmVzcy5hY3Rpb24gPSAncHJlc3MnO1xuICAgICAgICBsZXQgd2FpdCA9IHtcbiAgICAgICAgICBhY3Rpb246ICd3YWl0JyxcbiAgICAgICAgICBvcHRpb25zOiB7bXM6IHByZXNzLm9wdGlvbnMuZHVyYXRpb24gfHwgMTAwMH1cbiAgICAgICAgfTtcbiAgICAgICAgZGVsZXRlIHByZXNzLm9wdGlvbnMuZHVyYXRpb247XG4gICAgICAgIGdlc3R1cmVzID0gW3ByZXNzLCB3YWl0LCAuLi5nZXN0dXJlc107XG4gICAgICB9XG4gICAgfVxuXG4gICAgbGV0IGZpeGVkR2VzdHVyZXMgPSBhd2FpdCB0aGlzLnBhcnNlVG91Y2goZ2VzdHVyZXMsIGZhbHNlKTtcbiAgICAvLyBmaXggcmVsZWFzZSBhY3Rpb24gdGhlbiBwZXJmb3JtIGFsbCBhY3Rpb25zXG4gICAgaWYgKGFjdGlvbnNbYWN0aW9ucy5sZW5ndGggLSAxXSA9PT0gJ3JlbGVhc2UnKSB7XG4gICAgICBhY3Rpb25zW2FjdGlvbnMubGVuZ3RoIC0gMV0gPSBhd2FpdCB0aGlzLmZpeFJlbGVhc2UoZ2VzdHVyZXMpO1xuICAgIH1cbiAgICBmb3IgKGxldCBnIG9mIGZpeGVkR2VzdHVyZXMpIHtcbiAgICAgIGF3YWl0IHRoaXMucGVyZm9ybUdlc3R1cmUoZyk7XG4gICAgfVxuICB9XG59O1xuXG5oZWxwZXJzLnBhcnNlVG91Y2ggPSBhc3luYyBmdW5jdGlvbiBwYXJzZVRvdWNoIChnZXN0dXJlcywgbXVsdGkpIHtcbiAgLy8gYmVjYXVzZSBtdWx0aS10b3VjaCByZWxlYXNlcyBhdCB0aGUgZW5kIGJ5IGRlZmF1bHRcbiAgaWYgKG11bHRpICYmIF8ubGFzdChnZXN0dXJlcykuYWN0aW9uID09PSAncmVsZWFzZScpIHtcbiAgICBnZXN0dXJlcy5wb3AoKTtcbiAgfVxuXG4gIGxldCB0b3VjaFN0YXRlT2JqZWN0cyA9IGF3YWl0IGFzeW5jbWFwKGdlc3R1cmVzLCBhc3luYyAoZ2VzdHVyZSkgPT4ge1xuICAgIGxldCBvcHRpb25zID0gZ2VzdHVyZS5vcHRpb25zIHx8IHt9O1xuICAgIGlmIChfLmluY2x1ZGVzKFsncHJlc3MnLCAnbW92ZVRvJywgJ3RhcCcsICdsb25nUHJlc3MnXSwgZ2VzdHVyZS5hY3Rpb24pKSB7XG4gICAgICBvcHRpb25zLm9mZnNldCA9IGZhbHNlO1xuICAgICAgbGV0IGVsZW1lbnRJZCA9IGdlc3R1cmUub3B0aW9ucy5lbGVtZW50O1xuICAgICAgaWYgKGVsZW1lbnRJZCkge1xuICAgICAgICBsZXQgcG9zID0gYXdhaXQgdGhpcy5nZXRMb2NhdGlvbkluVmlldyhlbGVtZW50SWQpO1xuICAgICAgICBpZiAoZ2VzdHVyZS5vcHRpb25zLnggfHwgZ2VzdHVyZS5vcHRpb25zLnkpIHtcbiAgICAgICAgICBvcHRpb25zLnggPSBwb3MueCArIChnZXN0dXJlLm9wdGlvbnMueCB8fCAwKTtcbiAgICAgICAgICBvcHRpb25zLnkgPSBwb3MueSArIChnZXN0dXJlLm9wdGlvbnMueSB8fCAwKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICBjb25zdCB7d2lkdGgsIGhlaWdodH0gPSBhd2FpdCB0aGlzLmdldFNpemUoZWxlbWVudElkKTtcbiAgICAgICAgICBvcHRpb25zLnggPSBwb3MueCArICh3aWR0aCAvIDIpO1xuICAgICAgICAgIG9wdGlvbnMueSA9IHBvcy55ICsgKGhlaWdodCAvIDIpO1xuICAgICAgICB9XG4gICAgICAgIGxldCB0b3VjaFN0YXRlT2JqZWN0ID0ge1xuICAgICAgICAgIGFjdGlvbjogZ2VzdHVyZS5hY3Rpb24sXG4gICAgICAgICAgb3B0aW9ucyxcbiAgICAgICAgICB0aW1lT2Zmc2V0OiAwLjAwNSxcbiAgICAgICAgfTtcbiAgICAgICAgcmV0dXJuIHRvdWNoU3RhdGVPYmplY3Q7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBvcHRpb25zLnggPSAoZ2VzdHVyZS5vcHRpb25zLnggfHwgMCk7XG4gICAgICAgIG9wdGlvbnMueSA9IChnZXN0dXJlLm9wdGlvbnMueSB8fCAwKTtcblxuICAgICAgICBsZXQgdG91Y2hTdGF0ZU9iamVjdCA9IHtcbiAgICAgICAgICBhY3Rpb246IGdlc3R1cmUuYWN0aW9uLFxuICAgICAgICAgIG9wdGlvbnMsXG4gICAgICAgICAgdGltZU9mZnNldDogMC4wMDUsXG4gICAgICAgIH07XG4gICAgICAgIHJldHVybiB0b3VjaFN0YXRlT2JqZWN0O1xuICAgICAgfVxuICAgIH0gZWxzZSB7XG4gICAgICBsZXQgb2Zmc2V0ID0gMC4wMDU7XG4gICAgICBpZiAoZ2VzdHVyZS5hY3Rpb24gPT09ICd3YWl0Jykge1xuICAgICAgICBvcHRpb25zID0gZ2VzdHVyZS5vcHRpb25zO1xuICAgICAgICBvZmZzZXQgPSAocGFyc2VJbnQoZ2VzdHVyZS5vcHRpb25zLm1zLCAxMCkgLyAxMDAwKTtcbiAgICAgIH1cbiAgICAgIGxldCB0b3VjaFN0YXRlT2JqZWN0ID0ge1xuICAgICAgICBhY3Rpb246IGdlc3R1cmUuYWN0aW9uLFxuICAgICAgICBvcHRpb25zLFxuICAgICAgICB0aW1lT2Zmc2V0OiBvZmZzZXQsXG4gICAgICB9O1xuICAgICAgcmV0dXJuIHRvdWNoU3RhdGVPYmplY3Q7XG4gICAgfVxuICB9LCBmYWxzZSk7XG4gIC8vIHdlIG5lZWQgdG8gY2hhbmdlIHRoZSB0aW1lICh3aGljaCBpcyBub3cgYW4gb2Zmc2V0KVxuICAvLyBhbmQgdGhlIHBvc2l0aW9uICh3aGljaCBtYXkgYmUgYW4gb2Zmc2V0KVxuICBsZXQgcHJldlBvcyA9IG51bGwsXG4gICAgICB0aW1lID0gMDtcbiAgZm9yIChsZXQgc3RhdGUgb2YgdG91Y2hTdGF0ZU9iamVjdHMpIHtcbiAgICBpZiAoXy5pc1VuZGVmaW5lZChzdGF0ZS5vcHRpb25zLngpICYmIF8uaXNVbmRlZmluZWQoc3RhdGUub3B0aW9ucy55KSAmJiBwcmV2UG9zICE9PSBudWxsKSB7XG4gICAgICAvLyB0aGlzIGhhcHBlbnMgd2l0aCB3YWl0XG4gICAgICBzdGF0ZS5vcHRpb25zLnggPSBwcmV2UG9zLng7XG4gICAgICBzdGF0ZS5vcHRpb25zLnkgPSBwcmV2UG9zLnk7XG4gICAgfVxuICAgIGlmIChzdGF0ZS5vcHRpb25zLm9mZnNldCAmJiBwcmV2UG9zKSB7XG4gICAgICAvLyB0aGUgY3VycmVudCBwb3NpdGlvbiBpcyBhbiBvZmZzZXRcbiAgICAgIHN0YXRlLm9wdGlvbnMueCArPSBwcmV2UG9zLng7XG4gICAgICBzdGF0ZS5vcHRpb25zLnkgKz0gcHJldlBvcy55O1xuICAgIH1cbiAgICBkZWxldGUgc3RhdGUub3B0aW9ucy5vZmZzZXQ7XG4gICAgaWYgKCFfLmlzVW5kZWZpbmVkKHN0YXRlLm9wdGlvbnMueCkgJiYgIV8uaXNVbmRlZmluZWQoc3RhdGUub3B0aW9ucy55KSkge1xuICAgICAgcHJldlBvcyA9IHN0YXRlLm9wdGlvbnM7XG4gICAgfVxuXG4gICAgaWYgKG11bHRpKSB7XG4gICAgICBsZXQgdGltZU9mZnNldCA9IHN0YXRlLnRpbWVPZmZzZXQ7XG4gICAgICB0aW1lICs9IHRpbWVPZmZzZXQ7XG4gICAgICBzdGF0ZS50aW1lID0gYW5kcm9pZEhlbHBlcnMudHJ1bmNhdGVEZWNpbWFscyh0aW1lLCAzKTtcblxuICAgICAgLy8gbXVsdGkgZ2VzdHVyZXMgcmVxdWlyZSAndG91Y2gnIHJhdGhlciB0aGFuICdvcHRpb25zJ1xuICAgICAgaWYgKCFfLmlzVW5kZWZpbmVkKHN0YXRlLm9wdGlvbnMueCkgJiYgIV8uaXNVbmRlZmluZWQoc3RhdGUub3B0aW9ucy55KSkge1xuICAgICAgICBzdGF0ZS50b3VjaCA9IHtcbiAgICAgICAgICB4OiBzdGF0ZS5vcHRpb25zLngsXG4gICAgICAgICAgeTogc3RhdGUub3B0aW9ucy55XG4gICAgICAgIH07XG4gICAgICB9XG4gICAgICBkZWxldGUgc3RhdGUub3B0aW9ucztcbiAgICB9XG4gICAgZGVsZXRlIHN0YXRlLnRpbWVPZmZzZXQ7XG4gIH1cbiAgcmV0dXJuIHRvdWNoU3RhdGVPYmplY3RzO1xufTtcblxuXG5jb21tYW5kcy5wZXJmb3JtTXVsdGlBY3Rpb24gPSBhc3luYyBmdW5jdGlvbiBwZXJmb3JtTXVsdGlBY3Rpb24gKGFjdGlvbnMsIGVsZW1lbnRJZCkge1xuICAvLyBBbmRyb2lkIG5lZWRzIGF0IGxlYXN0IHR3byBhY3Rpb25zIHRvIGJlIGFibGUgdG8gcGVyZm9ybSBhIG11bHRpIHBvaW50ZXIgZ2VzdHVyZVxuICBpZiAoYWN0aW9ucy5sZW5ndGggPT09IDEpIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoJ011bHRpIFBvaW50ZXIgR2VzdHVyZXMgbmVlZCBhdCBsZWFzdCB0d28gYWN0aW9ucy4gJyArXG4gICAgICAgICdVc2UgVG91Y2ggQWN0aW9ucyBmb3IgYSBzaW5nbGUgYWN0aW9uLicpO1xuICB9XG5cbiAgY29uc3Qgc3RhdGVzID0gYXdhaXQgYXN5bmNtYXAoYWN0aW9ucywgYXN5bmMgKGFjdGlvbikgPT4gYXdhaXQgdGhpcy5wYXJzZVRvdWNoKGFjdGlvbiwgdHJ1ZSksIGZhbHNlKTtcblxuICByZXR1cm4gYXdhaXQgdGhpcy5kb1BlcmZvcm1NdWx0aUFjdGlvbihlbGVtZW50SWQsIHN0YXRlcyk7XG59O1xuXG4vKipcbiAqIFJlYXNvbiBmb3IgaXNvbGF0aW5nIGRvUGVyZm9ybU11bHRpQWN0aW9uIGZyb20gcGVyZm9ybU11bHRpQWN0aW9uIGlzIGZvciByZXVzaW5nIHBlcmZvcm1NdWx0aUFjdGlvblxuICogYWNyb3NzIGFuZHJvaWQtZHJpdmVycyAobGlrZSBhcHBpdW0tdWlhdXRvbWF0b3IyLWRyaXZlcikgYW5kIHRvIGF2b2lkIGNvZGUgZHVwbGljYXRpb24uXG4gKiBPdGhlciBhbmRyb2lkLWRyaXZlcnMgKGxpa2UgYXBwaXVtLXVpYXV0b21hdG9yMi1kcml2ZXIpIG5lZWQgdG8gb3ZlcnJpZGUgZG9QZXJmb3JtTXVsdGlBY3Rpb25cbiAqIHRvIGZhY2lsaXRhdGUgcGVyZm9ybU11bHRpQWN0aW9uLlxuICovXG5jb21tYW5kcy5kb1BlcmZvcm1NdWx0aUFjdGlvbiA9IGFzeW5jIGZ1bmN0aW9uIGRvUGVyZm9ybU11bHRpQWN0aW9uIChlbGVtZW50SWQsIHN0YXRlcykge1xuICBsZXQgb3B0cztcbiAgaWYgKGVsZW1lbnRJZCkge1xuICAgIG9wdHMgPSB7XG4gICAgICBlbGVtZW50SWQsXG4gICAgICBhY3Rpb25zOiBzdGF0ZXNcbiAgICB9O1xuICAgIHJldHVybiBhd2FpdCB0aGlzLmJvb3RzdHJhcC5zZW5kQWN0aW9uKCdlbGVtZW50OnBlcmZvcm1NdWx0aVBvaW50ZXJHZXN0dXJlJywgb3B0cyk7XG4gIH0gZWxzZSB7XG4gICAgb3B0cyA9IHtcbiAgICAgIGFjdGlvbnM6IHN0YXRlc1xuICAgIH07XG4gICAgcmV0dXJuIGF3YWl0IHRoaXMuYm9vdHN0cmFwLnNlbmRBY3Rpb24oJ3BlcmZvcm1NdWx0aVBvaW50ZXJHZXN0dXJlJywgb3B0cyk7XG4gIH1cbn07XG5cbk9iamVjdC5hc3NpZ24oZXh0ZW5zaW9ucywgY29tbWFuZHMsIGhlbHBlcnMpO1xuZXhwb3J0IHsgY29tbWFuZHMsIGhlbHBlcnMgfTtcbmV4cG9ydCBkZWZhdWx0IGV4dGVuc2lvbnM7XG4iXSwiZmlsZSI6ImxpYi9jb21tYW5kcy90b3VjaC5qcyIsInNvdXJjZVJvb3QiOiIuLi8uLi8uLiJ9
|