appium-android-driver 5.8.8 → 5.8.10
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 +14 -0
- package/build/index.js +1 -1
- package/build/lib/android-helpers.js +8 -6
- package/build/lib/android-helpers.js.map +1 -1
- package/build/lib/bootstrap.js +1 -1
- package/build/lib/bootstrap.js.map +1 -1
- package/build/lib/commands/actions.js +1 -1
- package/build/lib/commands/actions.js.map +1 -1
- package/build/lib/commands/alert.js +1 -1
- package/build/lib/commands/alert.js.map +1 -1
- package/build/lib/commands/app-management.js +1 -1
- package/build/lib/commands/app-management.js.map +1 -1
- package/build/lib/commands/context.js +1 -1
- package/build/lib/commands/context.js.map +1 -1
- package/build/lib/commands/coverage.js +1 -1
- package/build/lib/commands/coverage.js.map +1 -1
- package/build/lib/commands/element.js +1 -1
- package/build/lib/commands/element.js.map +1 -1
- package/build/lib/commands/emu-console.js +1 -1
- package/build/lib/commands/emu-console.js.map +1 -1
- package/build/lib/commands/execute.js +1 -1
- package/build/lib/commands/execute.js.map +1 -1
- package/build/lib/commands/file-actions.js +1 -1
- package/build/lib/commands/file-actions.js.map +1 -1
- package/build/lib/commands/find.js +1 -1
- package/build/lib/commands/find.js.map +1 -1
- package/build/lib/commands/general.js +1 -1
- package/build/lib/commands/general.js.map +1 -1
- package/build/lib/commands/ime.js +1 -1
- package/build/lib/commands/ime.js.map +1 -1
- package/build/lib/commands/index.js +1 -1
- package/build/lib/commands/index.js.map +1 -1
- package/build/lib/commands/intent.js +1 -1
- package/build/lib/commands/intent.js.map +1 -1
- package/build/lib/commands/log.js +1 -1
- package/build/lib/commands/log.js.map +1 -1
- package/build/lib/commands/media-projection.js +1 -1
- package/build/lib/commands/media-projection.js.map +1 -1
- package/build/lib/commands/network.js +1 -1
- package/build/lib/commands/network.js.map +1 -1
- package/build/lib/commands/performance.js +1 -1
- package/build/lib/commands/performance.js.map +1 -1
- package/build/lib/commands/permissions.js +1 -1
- package/build/lib/commands/permissions.js.map +1 -1
- package/build/lib/commands/recordscreen.js +1 -1
- package/build/lib/commands/recordscreen.js.map +1 -1
- package/build/lib/commands/shell.js +1 -1
- package/build/lib/commands/shell.js.map +1 -1
- package/build/lib/commands/streamscreen.js +1 -1
- package/build/lib/commands/streamscreen.js.map +1 -1
- package/build/lib/commands/system-bars.js +1 -1
- package/build/lib/commands/system-bars.js.map +1 -1
- package/build/lib/commands/touch.js +1 -1
- package/build/lib/commands/touch.js.map +1 -1
- package/build/lib/desired-caps.js +1 -1
- package/build/lib/desired-caps.js.map +1 -1
- package/build/lib/driver.js +1 -1
- package/build/lib/driver.js.map +1 -1
- package/build/lib/logger.js +1 -1
- package/build/lib/logger.js.map +1 -1
- package/build/lib/method-map.js +1 -1
- package/build/lib/method-map.js.map +1 -1
- package/build/lib/uiautomator.js +1 -1
- package/build/lib/uiautomator.js.map +1 -1
- package/build/lib/unlock-helpers.js +1 -1
- package/build/lib/unlock-helpers.js.map +1 -1
- package/build/lib/utils.js +1 -1
- package/build/lib/utils.js.map +1 -1
- package/build/lib/webview-helpers.js +1 -1
- package/build/lib/webview-helpers.js.map +1 -1
- package/lib/android-helpers.js +12 -8
- package/lib/commands/performance.js +17 -0
- package/package.json +2 -2
|
@@ -299,4 +299,4 @@ commands.getScreenshot = async function getScreenshot() {
|
|
|
299
299
|
Object.assign(extensions, commands, helpers);
|
|
300
300
|
var _default = extensions;
|
|
301
301
|
exports.default = _default;
|
|
302
|
-
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJzd2lwZVN0ZXBzUGVyU2VjIiwiZHJhZ1N0ZXBzUGVyU2VjIiwiY29tbWFuZHMiLCJoZWxwZXJzIiwiZXh0ZW5zaW9ucyIsImtleWV2ZW50Iiwia2V5Y29kZSIsIm1ldGFzdGF0ZSIsImxvZyIsIndhcm4iLCJwcmVzc0tleUNvZGUiLCJib290c3RyYXAiLCJzZW5kQWN0aW9uIiwibG9uZ1ByZXNzS2V5Q29kZSIsImdldE9yaWVudGF0aW9uIiwicGFyYW1zIiwibmF0dXJhbE9yaWVudGF0aW9uIiwib3B0cyIsImFuZHJvaWROYXR1cmFsT3JpZW50YXRpb24iLCJvcmllbnRhdGlvbiIsInRvVXBwZXJDYXNlIiwic2V0T3JpZW50YXRpb24iLCJmYWtlRmxpY2siLCJ4U3BlZWQiLCJ5U3BlZWQiLCJmYWtlRmxpY2tFbGVtZW50IiwiZWxlbWVudElkIiwieG9mZnNldCIsInlvZmZzZXQiLCJzcGVlZCIsInN3aXBlIiwic3RhcnRYIiwic3RhcnRZIiwiZW5kWCIsImVuZFkiLCJkdXJhdGlvbiIsInRvdWNoQ291bnQiLCJlbElkIiwic3dpcGVPcHRzIiwic3RlcHMiLCJNYXRoIiwicm91bmQiLCJ1dGlsIiwiaGFzVmFsdWUiLCJkb1N3aXBlIiwicGluY2hDbG9zZSIsInBlcmNlbnQiLCJwaW5jaE9wdHMiLCJkaXJlY3Rpb24iLCJwaW5jaE9wZW4iLCJmbGljayIsImVsZW1lbnQiLCJ4T2Zmc2V0IiwieU9mZnNldCIsImRyYWciLCJkZXN0RWxJZCIsImRyYWdPcHRzIiwiZG9EcmFnIiwibG9jayIsInNlY29uZHMiLCJhZGIiLCJpc05hTiIsImZsb2F0U2Vjb25kcyIsInBhcnNlRmxvYXQiLCJCIiwiZGVsYXkiLCJ1bmxvY2siLCJpc0xvY2tlZCIsImlzU2NyZWVuTG9ja2VkIiwiYW5kcm9pZEhlbHBlcnMiLCJjYXBzIiwib3Blbk5vdGlmaWNhdGlvbnMiLCJzZXRMb2NhdGlvbiIsImxhdGl0dWRlIiwibG9uZ2l0dWRlIiwic2VuZFRlbG5ldENvbW1hbmQiLCJmaW5nZXJwcmludCIsImZpbmdlcnByaW50SWQiLCJpc0VtdWxhdG9yIiwiZXJyb3JBbmRUaHJvdyIsInNlbmRTTVMiLCJwaG9uZU51bWJlciIsIm1lc3NhZ2UiLCJnc21DYWxsIiwiYWN0aW9uIiwiZ3NtU2lnbmFsIiwic2lnbmFsU3RyZW5naCIsImdzbVZvaWNlIiwic3RhdGUiLCJwb3dlckFDIiwicG93ZXJDYXBhY2l0eSIsImJhdHRlcnlQZXJjZW50IiwibmV0d29ya1NwZWVkIiwic2Vuc29yU2V0Iiwic2Vuc29yIiwic2Vuc29yVHlwZSIsInZhbHVlIiwiZ2V0U2NyZWVuc2hvdERhdGFXaXRoQWRiU2hlbGwiLCJsb2NhbEZpbGUiLCJ0ZW1wRGlyIiwicGF0aCIsInByZWZpeCIsInN1ZmZpeCIsImZzIiwiZXhpc3RzIiwidW5saW5rIiwicG5nRGlyIiwiYW5kcm9pZFNjcmVlbnNob3RQYXRoIiwicG5nIiwicG9zaXgiLCJyZXNvbHZlIiwiY21kIiwic2hlbGwiLCJmaWxlU2l6ZSIsIkVycm9yIiwicHVsbCIsImppbXAiLCJyZWFkIiwiZ2V0U2NyZWVuc2hvdERhdGFXaXRoQWRiRXhlY091dCIsInN0ZG91dCIsInN0ZGVyciIsImNvZGUiLCJleGVjIiwiZXhlY3V0YWJsZSIsImRlZmF1bHRBcmdzIiwiY29uY2F0IiwiZW5jb2RpbmciLCJpc0J1ZmZlciIsImxlbmd0aCIsInRvU3RyaW5nIiwiZ2V0U2NyZWVuc2hvdCIsImFwaUxldmVsIiwiZ2V0QXBpTGV2ZWwiLCJpbWFnZSIsImUiLCJpbmZvIiwiZXJyIiwic2NyZWVuT3JpZW50YXRpb24iLCJnZXRTY3JlZW5PcmllbnRhdGlvbiIsInJvdGF0ZSIsImdldEJ1ZmZlciIsInByb21pc2lmeSIsImNvbnRleHQiLCJpbWdCdWZmZXIiLCJNSU1FX1BORyIsIk9iamVjdCIsImFzc2lnbiJdLCJzb3VyY2VzIjpbIi4uLy4uLy4uL2xpYi9jb21tYW5kcy9hY3Rpb25zLmpzIl0sInNvdXJjZXNDb250ZW50IjpbImltcG9ydCBhbmRyb2lkSGVscGVycyBmcm9tICcuLi9hbmRyb2lkLWhlbHBlcnMnO1xuaW1wb3J0IHsgZnMsIHV0aWwsIHRlbXBEaXJ9IGZyb20gJ0BhcHBpdW0vc3VwcG9ydCc7XG5pbXBvcnQgcGF0aCBmcm9tICdwYXRoJztcbmltcG9ydCBCIGZyb20gJ2JsdWViaXJkJztcbmltcG9ydCBqaW1wIGZyb20gJ2ppbXAnO1xuaW1wb3J0IHsgZXhlYyB9IGZyb20gJ3RlZW5fcHJvY2Vzcyc7XG5cbmNvbnN0IHN3aXBlU3RlcHNQZXJTZWMgPSAyODtcbmNvbnN0IGRyYWdTdGVwc1BlclNlYyA9IDQwO1xuXG5sZXQgY29tbWFuZHMgPSB7fSwgaGVscGVycyA9IHt9LCBleHRlbnNpb25zID0ge307XG5cbmNvbW1hbmRzLmtleWV2ZW50ID0gYXN5bmMgZnVuY3Rpb24ga2V5ZXZlbnQgKGtleWNvZGUsIG1ldGFzdGF0ZSA9IG51bGwpIHtcbiAgLy8gVE9ETyBkZXByZWNhdGUga2V5ZXZlbnQ7IGN1cnJlbnRseSB3ZCBvbmx5IGltcGxlbWVudHMga2V5ZXZlbnRcbiAgdGhpcy5sb2cud2Fybigna2V5ZXZlbnQgd2lsbCBiZSBkZXByZWNhdGVkIHVzZSBwcmVzc0tleUNvZGUnKTtcbiAgcmV0dXJuIGF3YWl0IHRoaXMucHJlc3NLZXlDb2RlKGtleWNvZGUsIG1ldGFzdGF0ZSk7XG59O1xuXG5jb21tYW5kcy5wcmVzc0tleUNvZGUgPSBhc3luYyBmdW5jdGlvbiBwcmVzc0tleUNvZGUgKGtleWNvZGUsIG1ldGFzdGF0ZSA9IG51bGwpIHtcbiAgcmV0dXJuIGF3YWl0IHRoaXMuYm9vdHN0cmFwLnNlbmRBY3Rpb24oJ3ByZXNzS2V5Q29kZScsIHtrZXljb2RlLCBtZXRhc3RhdGV9KTtcbn07XG5cbmNvbW1hbmRzLmxvbmdQcmVzc0tleUNvZGUgPSBhc3luYyBmdW5jdGlvbiBsb25nUHJlc3NLZXlDb2RlIChrZXljb2RlLCBtZXRhc3RhdGUgPSBudWxsKSB7XG4gIHJldHVybiBhd2FpdCB0aGlzLmJvb3RzdHJhcC5zZW5kQWN0aW9uKCdsb25nUHJlc3NLZXlDb2RlJywge2tleWNvZGUsIG1ldGFzdGF0ZX0pO1xufTtcblxuY29tbWFuZHMuZ2V0T3JpZW50YXRpb24gPSBhc3luYyBmdW5jdGlvbiBnZXRPcmllbnRhdGlvbiAoKSB7XG4gIGxldCBwYXJhbXMgPSB7XG4gICAgbmF0dXJhbE9yaWVudGF0aW9uOiAhIXRoaXMub3B0cy5hbmRyb2lkTmF0dXJhbE9yaWVudGF0aW9uLFxuICB9O1xuICBsZXQgb3JpZW50YXRpb24gPSBhd2FpdCB0aGlzLmJvb3RzdHJhcC5zZW5kQWN0aW9uKCdvcmllbnRhdGlvbicsIHBhcmFtcyk7XG4gIHJldHVybiBvcmllbnRhdGlvbi50b1VwcGVyQ2FzZSgpO1xufTtcblxuY29tbWFuZHMuc2V0T3JpZW50YXRpb24gPSBhc3luYyBmdW5jdGlvbiBzZXRPcmllbnRhdGlvbiAob3JpZW50YXRpb24pIHtcbiAgb3JpZW50YXRpb24gPSBvcmllbnRhdGlvbi50b1VwcGVyQ2FzZSgpO1xuICBsZXQgcGFyYW1zID0ge1xuICAgIG9yaWVudGF0aW9uLFxuICAgIG5hdHVyYWxPcmllbnRhdGlvbjogISF0aGlzLm9wdHMuYW5kcm9pZE5hdHVyYWxPcmllbnRhdGlvbixcbiAgfTtcbiAgcmV0dXJuIGF3YWl0IHRoaXMuYm9vdHN0cmFwLnNlbmRBY3Rpb24oJ29yaWVudGF0aW9uJywgcGFyYW1zKTtcbn07XG5cbmNvbW1hbmRzLmZha2VGbGljayA9IGFzeW5jIGZ1bmN0aW9uIGZha2VGbGljayAoeFNwZWVkLCB5U3BlZWQpIHtcbiAgcmV0dXJuIGF3YWl0IHRoaXMuYm9vdHN0cmFwLnNlbmRBY3Rpb24oJ2ZsaWNrJywge3hTcGVlZCwgeVNwZWVkfSk7XG59O1xuXG5jb21tYW5kcy5mYWtlRmxpY2tFbGVtZW50ID0gYXN5bmMgZnVuY3Rpb24gZmFrZUZsaWNrRWxlbWVudCAoZWxlbWVudElkLCB4b2Zmc2V0LCB5b2Zmc2V0LCBzcGVlZCkge1xuICBsZXQgcGFyYW1zID0ge3hvZmZzZXQsIHlvZmZzZXQsIHNwZWVkLCBlbGVtZW50SWR9O1xuICByZXR1cm4gYXdhaXQgdGhpcy5ib290c3RyYXAuc2VuZEFjdGlvbignZWxlbWVudDpmbGljaycsIHBhcmFtcyk7XG59O1xuXG5jb21tYW5kcy5zd2lwZSA9IGFzeW5jIGZ1bmN0aW9uIHN3aXBlIChzdGFydFgsIHN0YXJ0WSwgZW5kWCwgZW5kWSwgZHVyYXRpb24sIHRvdWNoQ291bnQsIGVsSWQpIHtcbiAgaWYgKHN0YXJ0WCA9PT0gJ251bGwnKSB7XG4gICAgc3RhcnRYID0gMC41O1xuICB9XG4gIGlmIChzdGFydFkgPT09ICdudWxsJykge1xuICAgIHN0YXJ0WSA9IDAuNTtcbiAgfVxuICBsZXQgc3dpcGVPcHRzID0ge3N0YXJ0WCwgc3RhcnRZLCBlbmRYLCBlbmRZLFxuICAgICAgICAgICAgICAgICAgIHN0ZXBzOiBNYXRoLnJvdW5kKGR1cmF0aW9uICogc3dpcGVTdGVwc1BlclNlYyl9O1xuICAvLyBnb2luZyB0aGUgbG9uZyB3YXkgYW5kIGNoZWNraW5nIGZvciB1bmRlZmluZWQgYW5kIG51bGwgc2luY2VcbiAgLy8gd2UgY2FuJ3QgYmUgYXNzdXJlZCBgZWxJZGAgaXMgYSBzdHJpbmcgYW5kIG5vdCBhbiBpbnRcbiAgaWYgKHV0aWwuaGFzVmFsdWUoZWxJZCkpIHtcbiAgICBzd2lwZU9wdHMuZWxlbWVudElkID0gZWxJZDtcbiAgfVxuICByZXR1cm4gYXdhaXQgdGhpcy5kb1N3aXBlKHN3aXBlT3B0cyk7XG59O1xuXG5jb21tYW5kcy5kb1N3aXBlID0gYXN5bmMgZnVuY3Rpb24gZG9Td2lwZSAoc3dpcGVPcHRzKSB7XG4gIGlmICh1dGlsLmhhc1ZhbHVlKHN3aXBlT3B0cy5lbGVtZW50SWQpKSB7XG4gICAgcmV0dXJuIGF3YWl0IHRoaXMuYm9vdHN0cmFwLnNlbmRBY3Rpb24oJ2VsZW1lbnQ6c3dpcGUnLCBzd2lwZU9wdHMpO1xuICB9IGVsc2Uge1xuICAgIHJldHVybiBhd2FpdCB0aGlzLmJvb3RzdHJhcC5zZW5kQWN0aW9uKCdzd2lwZScsIHN3aXBlT3B0cyk7XG4gIH1cbn07XG5cbmNvbW1hbmRzLnBpbmNoQ2xvc2UgPSBhc3luYyBmdW5jdGlvbiBwaW5jaENsb3NlIChzdGFydFgsIHN0YXJ0WSwgZW5kWCwgZW5kWSwgZHVyYXRpb24sIHBlcmNlbnQsIHN0ZXBzLCBlbElkKSB7XG4gIGxldCBwaW5jaE9wdHMgPSB7XG4gICAgZGlyZWN0aW9uOiAnaW4nLFxuICAgIGVsZW1lbnRJZDogZWxJZCxcbiAgICBwZXJjZW50LFxuICAgIHN0ZXBzXG4gIH07XG4gIHJldHVybiBhd2FpdCB0aGlzLmJvb3RzdHJhcC5zZW5kQWN0aW9uKCdlbGVtZW50OnBpbmNoJywgcGluY2hPcHRzKTtcbn07XG5cbmNvbW1hbmRzLnBpbmNoT3BlbiA9IGFzeW5jIGZ1bmN0aW9uIHBpbmNoT3BlbiAoc3RhcnRYLCBzdGFydFksIGVuZFgsIGVuZFksIGR1cmF0aW9uLCBwZXJjZW50LCBzdGVwcywgZWxJZCkge1xuICBsZXQgcGluY2hPcHRzID0ge2RpcmVjdGlvbjogJ291dCcsIGVsZW1lbnRJZDogZWxJZCwgcGVyY2VudCwgc3RlcHN9O1xuICByZXR1cm4gYXdhaXQgdGhpcy5ib290c3RyYXAuc2VuZEFjdGlvbignZWxlbWVudDpwaW5jaCcsIHBpbmNoT3B0cyk7XG59O1xuXG5jb21tYW5kcy5mbGljayA9IGFzeW5jIGZ1bmN0aW9uIGZsaWNrIChlbGVtZW50LCB4U3BlZWQsIHlTcGVlZCwgeE9mZnNldCwgeU9mZnNldCwgc3BlZWQpIHtcbiAgaWYgKGVsZW1lbnQpIHtcbiAgICBhd2FpdCB0aGlzLmZha2VGbGlja0VsZW1lbnQoZWxlbWVudCwgeE9mZnNldCwgeU9mZnNldCwgc3BlZWQpO1xuICB9IGVsc2Uge1xuICAgIGF3YWl0IHRoaXMuZmFrZUZsaWNrKHhTcGVlZCwgeVNwZWVkKTtcbiAgfVxufTtcblxuY29tbWFuZHMuZHJhZyA9IGFzeW5jIGZ1bmN0aW9uIGRyYWcgKHN0YXJ0WCwgc3RhcnRZLCBlbmRYLCBlbmRZLCBkdXJhdGlvbiwgdG91Y2hDb3VudCwgZWxlbWVudElkLCBkZXN0RWxJZCkge1xuICBsZXQgZHJhZ09wdHMgPSB7XG4gICAgZWxlbWVudElkLCBkZXN0RWxJZCwgc3RhcnRYLCBzdGFydFksIGVuZFgsIGVuZFksXG4gICAgc3RlcHM6IE1hdGgucm91bmQoZHVyYXRpb24gKiBkcmFnU3RlcHNQZXJTZWMpXG4gIH07XG4gIHJldHVybiBhd2FpdCB0aGlzLmRvRHJhZyhkcmFnT3B0cyk7XG5cbn07XG5cbmNvbW1hbmRzLmRvRHJhZyA9IGFzeW5jIGZ1bmN0aW9uIGRvRHJhZyAoZHJhZ09wdHMpIHtcbiAgaWYgKHV0aWwuaGFzVmFsdWUoZHJhZ09wdHMuZWxlbWVudElkKSkge1xuICAgIHJldHVybiBhd2FpdCB0aGlzLmJvb3RzdHJhcC5zZW5kQWN0aW9uKCdlbGVtZW50OmRyYWcnLCBkcmFnT3B0cyk7XG4gIH0gZWxzZSB7XG4gICAgcmV0dXJuIGF3YWl0IHRoaXMuYm9vdHN0cmFwLnNlbmRBY3Rpb24oJ2RyYWcnLCBkcmFnT3B0cyk7XG4gIH1cbn07XG5cbmNvbW1hbmRzLmxvY2sgPSBhc3luYyBmdW5jdGlvbiBsb2NrIChzZWNvbmRzKSB7XG4gIGF3YWl0IHRoaXMuYWRiLmxvY2soKTtcbiAgaWYgKGlzTmFOKHNlY29uZHMpKSB7XG4gICAgcmV0dXJuO1xuICB9XG5cbiAgY29uc3QgZmxvYXRTZWNvbmRzID0gcGFyc2VGbG9hdChzZWNvbmRzKTtcbiAgaWYgKGZsb2F0U2Vjb25kcyA8PSAwKSB7XG4gICAgcmV0dXJuO1xuICB9XG4gIGF3YWl0IEIuZGVsYXkoMTAwMCAqIGZsb2F0U2Vjb25kcyk7XG4gIGF3YWl0IHRoaXMudW5sb2NrKCk7XG59O1xuXG5jb21tYW5kcy5pc0xvY2tlZCA9IGFzeW5jIGZ1bmN0aW9uIGlzTG9ja2VkICgpIHtcbiAgcmV0dXJuIGF3YWl0IHRoaXMuYWRiLmlzU2NyZWVuTG9ja2VkKCk7XG59O1xuXG5jb21tYW5kcy51bmxvY2sgPSBhc3luYyBmdW5jdGlvbiB1bmxvY2sgKCkge1xuICByZXR1cm4gYXdhaXQgYW5kcm9pZEhlbHBlcnMudW5sb2NrKHRoaXMsIHRoaXMuYWRiLCB0aGlzLmNhcHMpO1xufTtcblxuY29tbWFuZHMub3Blbk5vdGlmaWNhdGlvbnMgPSBhc3luYyBmdW5jdGlvbiBvcGVuTm90aWZpY2F0aW9ucyAoKSB7XG4gIHJldHVybiBhd2FpdCB0aGlzLmJvb3RzdHJhcC5zZW5kQWN0aW9uKCdvcGVuTm90aWZpY2F0aW9uJyk7XG59O1xuXG5jb21tYW5kcy5zZXRMb2NhdGlvbiA9IGFzeW5jIGZ1bmN0aW9uIHNldExvY2F0aW9uIChsYXRpdHVkZSwgbG9uZ2l0dWRlKSB7XG4gIHJldHVybiBhd2FpdCB0aGlzLmFkYi5zZW5kVGVsbmV0Q29tbWFuZChgZ2VvIGZpeCAke2xvbmdpdHVkZX0gJHtsYXRpdHVkZX1gKTtcbn07XG5cbmNvbW1hbmRzLmZpbmdlcnByaW50ID0gYXN5bmMgZnVuY3Rpb24gZmluZ2VycHJpbnQgKGZpbmdlcnByaW50SWQpIHtcbiAgaWYgKCF0aGlzLmlzRW11bGF0b3IoKSkge1xuICAgIHRoaXMubG9nLmVycm9yQW5kVGhyb3coJ2ZpbmdlcnByaW50IG1ldGhvZCBpcyBvbmx5IGF2YWlsYWJsZSBmb3IgZW11bGF0b3JzJyk7XG4gIH1cbiAgYXdhaXQgdGhpcy5hZGIuZmluZ2VycHJpbnQoZmluZ2VycHJpbnRJZCk7XG59O1xuXG5jb21tYW5kcy5zZW5kU01TID0gYXN5bmMgZnVuY3Rpb24gc2VuZFNNUyAocGhvbmVOdW1iZXIsIG1lc3NhZ2UpIHtcbiAgaWYgKCF0aGlzLmlzRW11bGF0b3IoKSkge1xuICAgIHRoaXMubG9nLmVycm9yQW5kVGhyb3coJ3NlbmRTTVMgbWV0aG9kIGlzIG9ubHkgYXZhaWxhYmxlIGZvciBlbXVsYXRvcnMnKTtcbiAgfVxuICBhd2FpdCB0aGlzLmFkYi5zZW5kU01TKHBob25lTnVtYmVyLCBtZXNzYWdlKTtcbn07XG5cbmNvbW1hbmRzLmdzbUNhbGwgPSBhc3luYyBmdW5jdGlvbiBnc21DYWxsIChwaG9uZU51bWJlciwgYWN0aW9uKSB7XG4gIGlmICghdGhpcy5pc0VtdWxhdG9yKCkpIHtcbiAgICB0aGlzLmxvZy5lcnJvckFuZFRocm93KCdnc21DYWxsIG1ldGhvZCBpcyBvbmx5IGF2YWlsYWJsZSBmb3IgZW11bGF0b3JzJyk7XG4gIH1cbiAgYXdhaXQgdGhpcy5hZGIuZ3NtQ2FsbChwaG9uZU51bWJlciwgYWN0aW9uKTtcbn07XG5cbmNvbW1hbmRzLmdzbVNpZ25hbCA9IGFzeW5jIGZ1bmN0aW9uIGdzbVNpZ25hbCAoc2lnbmFsU3RyZW5naCkge1xuICBpZiAoIXRoaXMuaXNFbXVsYXRvcigpKSB7XG4gICAgdGhpcy5sb2cuZXJyb3JBbmRUaHJvdygnZ3NtU2lnbmFsIG1ldGhvZCBpcyBvbmx5IGF2YWlsYWJsZSBmb3IgZW11bGF0b3JzJyk7XG4gIH1cbiAgYXdhaXQgdGhpcy5hZGIuZ3NtU2lnbmFsKHNpZ25hbFN0cmVuZ2gpO1xufTtcblxuY29tbWFuZHMuZ3NtVm9pY2UgPSBhc3luYyBmdW5jdGlvbiBnc21Wb2ljZSAoc3RhdGUpIHtcbiAgaWYgKCF0aGlzLmlzRW11bGF0b3IoKSkge1xuICAgIHRoaXMubG9nLmVycm9yQW5kVGhyb3coJ2dzbVZvaWNlIG1ldGhvZCBpcyBvbmx5IGF2YWlsYWJsZSBmb3IgZW11bGF0b3JzJyk7XG4gIH1cbiAgYXdhaXQgdGhpcy5hZGIuZ3NtVm9pY2Uoc3RhdGUpO1xufTtcblxuY29tbWFuZHMucG93ZXJBQyA9IGFzeW5jIGZ1bmN0aW9uIHBvd2VyQUMgKHN0YXRlKSB7XG4gIGlmICghdGhpcy5pc0VtdWxhdG9yKCkpIHtcbiAgICB0aGlzLmxvZy5lcnJvckFuZFRocm93KCdwb3dlckFDIG1ldGhvZCBpcyBvbmx5IGF2YWlsYWJsZSBmb3IgZW11bGF0b3JzJyk7XG4gIH1cbiAgYXdhaXQgdGhpcy5hZGIucG93ZXJBQyhzdGF0ZSk7XG59O1xuXG5jb21tYW5kcy5wb3dlckNhcGFjaXR5ID0gYXN5bmMgZnVuY3Rpb24gcG93ZXJDYXBhY2l0eSAoYmF0dGVyeVBlcmNlbnQpIHtcbiAgaWYgKCF0aGlzLmlzRW11bGF0b3IoKSkge1xuICAgIHRoaXMubG9nLmVycm9yQW5kVGhyb3coJ3Bvd2VyQ2FwYWNpdHkgbWV0aG9kIGlzIG9ubHkgYXZhaWxhYmxlIGZvciBlbXVsYXRvcnMnKTtcbiAgfVxuICBhd2FpdCB0aGlzLmFkYi5wb3dlckNhcGFjaXR5KGJhdHRlcnlQZXJjZW50KTtcbn07XG5cbmNvbW1hbmRzLm5ldHdvcmtTcGVlZCA9IGFzeW5jIGZ1bmN0aW9uIG5ldHdvcmtTcGVlZCAobmV0d29ya1NwZWVkKSB7XG4gIGlmICghdGhpcy5pc0VtdWxhdG9yKCkpIHtcbiAgICB0aGlzLmxvZy5lcnJvckFuZFRocm93KCduZXR3b3JrU3BlZWQgbWV0aG9kIGlzIG9ubHkgYXZhaWxhYmxlIGZvciBlbXVsYXRvcnMnKTtcbiAgfVxuICBhd2FpdCB0aGlzLmFkYi5uZXR3b3JrU3BlZWQobmV0d29ya1NwZWVkKTtcbn07XG5cbi8qKlxuICogRW11bGF0ZSBzZW5zb3JzIHZhbHVlcyBvbiB0aGUgY29ubmVjdGVkIGVtdWxhdG9yLlxuICpcbiAqIEB0eXBlZGVmIHtPYmplY3R9IFNlbnNvclxuICogQHByb3BlcnR5IHtzdHJpbmd9IHNlbnNvclR5cGUgLSBzZW5zb3IgdHlwZSBkZWNsYXJlZCBpbiBhZGIuU0VOU09SU1xuICogQHByb3BlcnR5IHtzdHJpbmd9IHZhbHVlIC0gdmFsdWUgdG8gc2V0IHRvIHRoZSBzZW5zb3JcbiAqXG4gKiBAcGFyYW0ge09iamVjdH0gU2Vuc29yXG4gKiBAdGhyb3dzIHtFcnJvcn0gLSBJZiBzZW5zb3JUeXBlIGlzIG5vdCBkZWZpbmVkXG4gKiBAdGhyb3dzIHtFcnJvcn0gLSBJZiB2YWx1ZSBmb3IgdGhlIHNlIHNvciBpcyBub3QgZGVmaW5lZFxuICogQHRocm93cyB7RXJyb3J9IC0gSWYgZGV2aWNlVHlwZSBpcyBub3QgYW4gZW11bGF0b3JcbiAqL1xuY29tbWFuZHMuc2Vuc29yU2V0ID0gYXN5bmMgZnVuY3Rpb24gc2Vuc29yU2V0IChzZW5zb3IgPSB7fSkge1xuICBjb25zdCB7c2Vuc29yVHlwZSwgdmFsdWV9ID0gc2Vuc29yO1xuICBpZiAoIXV0aWwuaGFzVmFsdWUoc2Vuc29yVHlwZSkpIHtcbiAgICB0aGlzLmxvZy5lcnJvckFuZFRocm93KGAnc2Vuc29yVHlwZScgYXJndW1lbnQgaXMgcmVxdWlyZWRgKTtcbiAgfVxuICBpZiAoIXV0aWwuaGFzVmFsdWUodmFsdWUpKSB7XG4gICAgdGhpcy5sb2cuZXJyb3JBbmRUaHJvdyhgJ3ZhbHVlJyBhcmd1bWVudCBpcyByZXF1aXJlZGApO1xuICB9XG4gIGlmICghdGhpcy5pc0VtdWxhdG9yKCkpIHtcbiAgICB0aGlzLmxvZy5lcnJvckFuZFRocm93KCdzZW5zb3JTZXQgbWV0aG9kIGlzIG9ubHkgYXZhaWxhYmxlIGZvciBlbXVsYXRvcnMnKTtcbiAgfVxuICBhd2FpdCB0aGlzLmFkYi5zZW5zb3JTZXQoc2Vuc29yVHlwZSwgdmFsdWUpO1xufTtcblxuaGVscGVycy5nZXRTY3JlZW5zaG90RGF0YVdpdGhBZGJTaGVsbCA9IGFzeW5jIGZ1bmN0aW9uIGdldFNjcmVlbnNob3REYXRhV2l0aEFkYlNoZWxsIChhZGIsIG9wdHMpIHtcbiAgY29uc3QgbG9jYWxGaWxlID0gYXdhaXQgdGVtcERpci5wYXRoKHtwcmVmaXg6ICdhcHBpdW0nLCBzdWZmaXg6ICcucG5nJ30pO1xuICBpZiAoYXdhaXQgZnMuZXhpc3RzKGxvY2FsRmlsZSkpIHtcbiAgICBhd2FpdCBmcy51bmxpbmsobG9jYWxGaWxlKTtcbiAgfVxuICB0cnkge1xuICAgIGNvbnN0IHBuZ0RpciA9IG9wdHMuYW5kcm9pZFNjcmVlbnNob3RQYXRoIHx8ICcvZGF0YS9sb2NhbC90bXAvJztcbiAgICBjb25zdCBwbmcgPSBwYXRoLnBvc2l4LnJlc29sdmUocG5nRGlyLCAnc2NyZWVuc2hvdC5wbmcnKTtcbiAgICBjb25zdCBjbWQgPSBbJy9zeXN0ZW0vYmluL3JtJywgYCR7cG5nfTtgLCAnL3N5c3RlbS9iaW4vc2NyZWVuY2FwJywgJy1wJywgcG5nXTtcbiAgICBhd2FpdCBhZGIuc2hlbGwoY21kKTtcbiAgICBpZiAoIWF3YWl0IGFkYi5maWxlU2l6ZShwbmcpKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoJ1RoZSBzaXplIG9mIHRoZSB0YWtlbiBzY3JlZW5zaG90IGVxdWFscyB0byB6ZXJvLicpO1xuICAgIH1cbiAgICBhd2FpdCBhZGIucHVsbChwbmcsIGxvY2FsRmlsZSk7XG4gICAgcmV0dXJuIGF3YWl0IGppbXAucmVhZChsb2NhbEZpbGUpO1xuICB9IGZpbmFsbHkge1xuICAgIGlmIChhd2FpdCBmcy5leGlzdHMobG9jYWxGaWxlKSkge1xuICAgICAgYXdhaXQgZnMudW5saW5rKGxvY2FsRmlsZSk7XG4gICAgfVxuICB9XG59O1xuXG5oZWxwZXJzLmdldFNjcmVlbnNob3REYXRhV2l0aEFkYkV4ZWNPdXQgPSBhc3luYyBmdW5jdGlvbiBnZXRTY3JlZW5zaG90RGF0YVdpdGhBZGJFeGVjT3V0IChhZGIpIHtcbiAgbGV0IHtzdGRvdXQsIHN0ZGVyciwgY29kZX0gPSBhd2FpdCBleGVjKGFkYi5leGVjdXRhYmxlLnBhdGgsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhZGIuZXhlY3V0YWJsZS5kZWZhdWx0QXJnc1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAuY29uY2F0KFsnZXhlYy1vdXQnLCAnL3N5c3RlbS9iaW4vc2NyZWVuY2FwJywgJy1wJ10pLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAge2VuY29kaW5nOiAnYmluYXJ5JywgaXNCdWZmZXI6IHRydWV9KTtcbiAgLy8gaWYgdGhlcmUgaXMgYW4gZXJyb3IsIHRocm93XG4gIGlmIChjb2RlIHx8IHN0ZGVyci5sZW5ndGgpIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoYFNjcmVlbnNob3QgcmV0dXJuZWQgZXJyb3IsIGNvZGU6ICcke2NvZGV9Jywgc3RkZXJyOiAnJHtzdGRlcnIudG9TdHJpbmcoKX0nYCk7XG4gIH1cbiAgLy8gaWYgd2UgZG9uJ3QgZ2V0IGFueXRoaW5nIGF0IGFsbCwgdGhyb3dcbiAgaWYgKCFzdGRvdXQubGVuZ3RoKSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKCdTY3JlZW5zaG90IHJldHVybmVkIG5vIGRhdGEnKTtcbiAgfVxuXG4gIHJldHVybiBhd2FpdCBqaW1wLnJlYWQoc3Rkb3V0KTtcbn07XG5cbmNvbW1hbmRzLmdldFNjcmVlbnNob3QgPSBhc3luYyBmdW5jdGlvbiBnZXRTY3JlZW5zaG90ICgpIHtcbiAgY29uc3QgYXBpTGV2ZWwgPSBhd2FpdCB0aGlzLmFkYi5nZXRBcGlMZXZlbCgpO1xuICBsZXQgaW1hZ2UgPSBudWxsO1xuICBpZiAoYXBpTGV2ZWwgPiAyMCkge1xuICAgIHRyeSB7XG4gICAgICAvLyBUaGlzIHNjcmVlbnNob3RpbmcgYXBwcm9hY2ggaXMgd2F5IGZhc3Rlciwgc2luY2UgaXQgcmVxdWlyZXMgbGVzcyBleHRlcm5hbCBjb21tYW5kc1xuICAgICAgLy8gdG8gYmUgZXhlY3V0ZWQuIFVuZm9ydHVuYXRlbHksIGV4ZWMtb3V0IG9wdGlvbiBpcyBvbmx5IHN1cHBvcnRlZCBieSBuZXdlciBBbmRyb2lkL1NESyB2ZXJzaW9ucyAoNS4wIGFuZCBsYXRlcilcbiAgICAgIGltYWdlID0gYXdhaXQgdGhpcy5nZXRTY3JlZW5zaG90RGF0YVdpdGhBZGJFeGVjT3V0KHRoaXMuYWRiKTtcbiAgICB9IGNhdGNoIChlKSB7XG4gICAgICB0aGlzLmxvZy5pbmZvKGBDYW5ub3QgZ2V0IHNjcmVlbnNob3QgZGF0YSB3aXRoICdhZGIgZXhlYy1vdXQnIGJlY2F1c2Ugb2YgJyR7ZS5tZXNzYWdlfScuIGAgK1xuICAgICAgICBgRGVmYXVsdGluZyB0byAnYWRiIHNoZWxsJyBjYWxsYCk7XG4gICAgfVxuICB9XG4gIGlmICghaW1hZ2UpIHtcbiAgICB0cnkge1xuICAgICAgaW1hZ2UgPSBhd2FpdCB0aGlzLmdldFNjcmVlbnNob3REYXRhV2l0aEFkYlNoZWxsKHRoaXMuYWRiLCB0aGlzLm9wdHMpO1xuICAgIH0gY2F0Y2ggKGUpIHtcbiAgICAgIGNvbnN0IGVyciA9IGBDYW5ub3QgZ2V0IHNjcmVlbnNob3QgZGF0YSBiZWNhdXNlIG9mICcke2UubWVzc2FnZX0nLiBgICtcbiAgICAgICAgYE1ha2Ugc3VyZSB0aGUgJ0xheW91dFBhcmFtcy5GTEFHX1NFQ1VSRScgaXMgbm90IHNldCBmb3IgYCArXG4gICAgICAgIGB0aGUgY3VycmVudCB2aWV3YDtcbiAgICAgIHRoaXMubG9nLmVycm9yQW5kVGhyb3coZXJyKTtcbiAgICB9XG4gIH1cbiAgaWYgKGFwaUxldmVsIDwgMjMpIHtcbiAgICAvLyBBbmRyb2lkIGJ1ZyA4NDMzNzQyIC0gcm90YXRlIHNjcmVlbnNob3QgaWYgc2NyZWVuIGlzIHJvdGF0ZWRcbiAgICBsZXQgc2NyZWVuT3JpZW50YXRpb24gPSBhd2FpdCB0aGlzLmFkYi5nZXRTY3JlZW5PcmllbnRhdGlvbigpO1xuICAgIHRyeSB7XG4gICAgICBpbWFnZSA9IGF3YWl0IGltYWdlLnJvdGF0ZSgtOTAgKiBzY3JlZW5PcmllbnRhdGlvbik7XG4gICAgfSBjYXRjaCAoZXJyKSB7XG4gICAgICB0aGlzLmxvZy53YXJuKGBDb3VsZCBub3Qgcm90YXRlIHNjcmVlbnNob3QgZHVlIHRvIGVycm9yOiAke2Vycn1gKTtcbiAgICB9XG4gIH1cbiAgY29uc3QgZ2V0QnVmZmVyID0gQi5wcm9taXNpZnkoaW1hZ2UuZ2V0QnVmZmVyLCB7Y29udGV4dDogaW1hZ2V9KTtcbiAgY29uc3QgaW1nQnVmZmVyID0gYXdhaXQgZ2V0QnVmZmVyKGppbXAuTUlNRV9QTkcpO1xuICByZXR1cm4gaW1nQnVmZmVyLnRvU3RyaW5nKCdiYXNlNjQnKTtcbn07XG5cbk9iamVjdC5hc3NpZ24oZXh0ZW5zaW9ucywgY29tbWFuZHMsIGhlbHBlcnMpO1xuZXhwb3J0IHsgY29tbWFuZHMsIGhlbHBlcnMgfTtcbmV4cG9ydCBkZWZhdWx0IGV4dGVuc2lvbnM7XG4iXSwibWFwcGluZ3MiOiI7Ozs7Ozs7O0FBQUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBRUEsTUFBTUEsZ0JBQWdCLEdBQUcsRUFBRTtBQUMzQixNQUFNQyxlQUFlLEdBQUcsRUFBRTtB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
|
|
302
|
+
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJfYW5kcm9pZEhlbHBlcnMiLCJfaW50ZXJvcFJlcXVpcmVEZWZhdWx0IiwicmVxdWlyZSIsIl9zdXBwb3J0IiwiX3BhdGgiLCJfYmx1ZWJpcmQiLCJfamltcCIsIl90ZWVuX3Byb2Nlc3MiLCJzd2lwZVN0ZXBzUGVyU2VjIiwiZHJhZ1N0ZXBzUGVyU2VjIiwiY29tbWFuZHMiLCJoZWxwZXJzIiwiZXh0ZW5zaW9ucyIsImV4cG9ydHMiLCJrZXlldmVudCIsImtleWNvZGUiLCJtZXRhc3RhdGUiLCJsb2ciLCJ3YXJuIiwicHJlc3NLZXlDb2RlIiwiYm9vdHN0cmFwIiwic2VuZEFjdGlvbiIsImxvbmdQcmVzc0tleUNvZGUiLCJnZXRPcmllbnRhdGlvbiIsInBhcmFtcyIsIm5hdHVyYWxPcmllbnRhdGlvbiIsIm9wdHMiLCJhbmRyb2lkTmF0dXJhbE9yaWVudGF0aW9uIiwib3JpZW50YXRpb24iLCJ0b1VwcGVyQ2FzZSIsInNldE9yaWVudGF0aW9uIiwiZmFrZUZsaWNrIiwieFNwZWVkIiwieVNwZWVkIiwiZmFrZUZsaWNrRWxlbWVudCIsImVsZW1lbnRJZCIsInhvZmZzZXQiLCJ5b2Zmc2V0Iiwic3BlZWQiLCJzd2lwZSIsInN0YXJ0WCIsInN0YXJ0WSIsImVuZFgiLCJlbmRZIiwiZHVyYXRpb24iLCJ0b3VjaENvdW50IiwiZWxJZCIsInN3aXBlT3B0cyIsInN0ZXBzIiwiTWF0aCIsInJvdW5kIiwidXRpbCIsImhhc1ZhbHVlIiwiZG9Td2lwZSIsInBpbmNoQ2xvc2UiLCJwZXJjZW50IiwicGluY2hPcHRzIiwiZGlyZWN0aW9uIiwicGluY2hPcGVuIiwiZmxpY2siLCJlbGVtZW50IiwieE9mZnNldCIsInlPZmZzZXQiLCJkcmFnIiwiZGVzdEVsSWQiLCJkcmFnT3B0cyIsImRvRHJhZyIsImxvY2siLCJzZWNvbmRzIiwiYWRiIiwiaXNOYU4iLCJmbG9hdFNlY29uZHMiLCJwYXJzZUZsb2F0IiwiQiIsImRlbGF5IiwidW5sb2NrIiwiaXNMb2NrZWQiLCJpc1NjcmVlbkxvY2tlZCIsImFuZHJvaWRIZWxwZXJzIiwiY2FwcyIsIm9wZW5Ob3RpZmljYXRpb25zIiwic2V0TG9jYXRpb24iLCJsYXRpdHVkZSIsImxvbmdpdHVkZSIsInNlbmRUZWxuZXRDb21tYW5kIiwiZmluZ2VycHJpbnQiLCJmaW5nZXJwcmludElkIiwiaXNFbXVsYXRvciIsImVycm9yQW5kVGhyb3ciLCJzZW5kU01TIiwicGhvbmVOdW1iZXIiLCJtZXNzYWdlIiwiZ3NtQ2FsbCIsImFjdGlvbiIsImdzbVNpZ25hbCIsInNpZ25hbFN0cmVuZ2giLCJnc21Wb2ljZSIsInN0YXRlIiwicG93ZXJBQyIsInBvd2VyQ2FwYWNpdHkiLCJiYXR0ZXJ5UGVyY2VudCIsIm5ldHdvcmtTcGVlZCIsInNlbnNvclNldCIsInNlbnNvciIsInNlbnNvclR5cGUiLCJ2YWx1ZSIsImdldFNjcmVlbnNob3REYXRhV2l0aEFkYlNoZWxsIiwibG9jYWxGaWxlIiwidGVtcERpciIsInBhdGgiLCJwcmVmaXgiLCJzdWZmaXgiLCJmcyIsImV4aXN0cyIsInVubGluayIsInBuZ0RpciIsImFuZHJvaWRTY3JlZW5zaG90UGF0aCIsInBuZyIsInBvc2l4IiwicmVzb2x2ZSIsImNtZCIsInNoZWxsIiwiZmlsZVNpemUiLCJFcnJvciIsInB1bGwiLCJqaW1wIiwicmVhZCIsImdldFNjcmVlbnNob3REYXRhV2l0aEFkYkV4ZWNPdXQiLCJzdGRvdXQiLCJzdGRlcnIiLCJjb2RlIiwiZXhlYyIsImV4ZWN1dGFibGUiLCJkZWZhdWx0QXJncyIsImNvbmNhdCIsImVuY29kaW5nIiwiaXNCdWZmZXIiLCJsZW5ndGgiLCJ0b1N0cmluZyIsImdldFNjcmVlbnNob3QiLCJhcGlMZXZlbCIsImdldEFwaUxldmVsIiwiaW1hZ2UiLCJlIiwiaW5mbyIsImVyciIsInNjcmVlbk9yaWVudGF0aW9uIiwiZ2V0U2NyZWVuT3JpZW50YXRpb24iLCJyb3RhdGUiLCJnZXRCdWZmZXIiLCJwcm9taXNpZnkiLCJjb250ZXh0IiwiaW1nQnVmZmVyIiwiTUlNRV9QTkciLCJPYmplY3QiLCJhc3NpZ24iLCJfZGVmYXVsdCIsImRlZmF1bHQiXSwic291cmNlcyI6WyIuLi8uLi8uLi9saWIvY29tbWFuZHMvYWN0aW9ucy5qcyJdLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgYW5kcm9pZEhlbHBlcnMgZnJvbSAnLi4vYW5kcm9pZC1oZWxwZXJzJztcbmltcG9ydCB7IGZzLCB1dGlsLCB0ZW1wRGlyfSBmcm9tICdAYXBwaXVtL3N1cHBvcnQnO1xuaW1wb3J0IHBhdGggZnJvbSAncGF0aCc7XG5pbXBvcnQgQiBmcm9tICdibHVlYmlyZCc7XG5pbXBvcnQgamltcCBmcm9tICdqaW1wJztcbmltcG9ydCB7IGV4ZWMgfSBmcm9tICd0ZWVuX3Byb2Nlc3MnO1xuXG5jb25zdCBzd2lwZVN0ZXBzUGVyU2VjID0gMjg7XG5jb25zdCBkcmFnU3RlcHNQZXJTZWMgPSA0MDtcblxubGV0IGNvbW1hbmRzID0ge30sIGhlbHBlcnMgPSB7fSwgZXh0ZW5zaW9ucyA9IHt9O1xuXG5jb21tYW5kcy5rZXlldmVudCA9IGFzeW5jIGZ1bmN0aW9uIGtleWV2ZW50IChrZXljb2RlLCBtZXRhc3RhdGUgPSBudWxsKSB7XG4gIC8vIFRPRE8gZGVwcmVjYXRlIGtleWV2ZW50OyBjdXJyZW50bHkgd2Qgb25seSBpbXBsZW1lbnRzIGtleWV2ZW50XG4gIHRoaXMubG9nLndhcm4oJ2tleWV2ZW50IHdpbGwgYmUgZGVwcmVjYXRlZCB1c2UgcHJlc3NLZXlDb2RlJyk7XG4gIHJldHVybiBhd2FpdCB0aGlzLnByZXNzS2V5Q29kZShrZXljb2RlLCBtZXRhc3RhdGUpO1xufTtcblxuY29tbWFuZHMucHJlc3NLZXlDb2RlID0gYXN5bmMgZnVuY3Rpb24gcHJlc3NLZXlDb2RlIChrZXljb2RlLCBtZXRhc3RhdGUgPSBudWxsKSB7XG4gIHJldHVybiBhd2FpdCB0aGlzLmJvb3RzdHJhcC5zZW5kQWN0aW9uKCdwcmVzc0tleUNvZGUnLCB7a2V5Y29kZSwgbWV0YXN0YXRlfSk7XG59O1xuXG5jb21tYW5kcy5sb25nUHJlc3NLZXlDb2RlID0gYXN5bmMgZnVuY3Rpb24gbG9uZ1ByZXNzS2V5Q29kZSAoa2V5Y29kZSwgbWV0YXN0YXRlID0gbnVsbCkge1xuICByZXR1cm4gYXdhaXQgdGhpcy5ib290c3RyYXAuc2VuZEFjdGlvbignbG9uZ1ByZXNzS2V5Q29kZScsIHtrZXljb2RlLCBtZXRhc3RhdGV9KTtcbn07XG5cbmNvbW1hbmRzLmdldE9yaWVudGF0aW9uID0gYXN5bmMgZnVuY3Rpb24gZ2V0T3JpZW50YXRpb24gKCkge1xuICBsZXQgcGFyYW1zID0ge1xuICAgIG5hdHVyYWxPcmllbnRhdGlvbjogISF0aGlzLm9wdHMuYW5kcm9pZE5hdHVyYWxPcmllbnRhdGlvbixcbiAgfTtcbiAgbGV0IG9yaWVudGF0aW9uID0gYXdhaXQgdGhpcy5ib290c3RyYXAuc2VuZEFjdGlvbignb3JpZW50YXRpb24nLCBwYXJhbXMpO1xuICByZXR1cm4gb3JpZW50YXRpb24udG9VcHBlckNhc2UoKTtcbn07XG5cbmNvbW1hbmRzLnNldE9yaWVudGF0aW9uID0gYXN5bmMgZnVuY3Rpb24gc2V0T3JpZW50YXRpb24gKG9yaWVudGF0aW9uKSB7XG4gIG9yaWVudGF0aW9uID0gb3JpZW50YXRpb24udG9VcHBlckNhc2UoKTtcbiAgbGV0IHBhcmFtcyA9IHtcbiAgICBvcmllbnRhdGlvbixcbiAgICBuYXR1cmFsT3JpZW50YXRpb246ICEhdGhpcy5vcHRzLmFuZHJvaWROYXR1cmFsT3JpZW50YXRpb24sXG4gIH07XG4gIHJldHVybiBhd2FpdCB0aGlzLmJvb3RzdHJhcC5zZW5kQWN0aW9uKCdvcmllbnRhdGlvbicsIHBhcmFtcyk7XG59O1xuXG5jb21tYW5kcy5mYWtlRmxpY2sgPSBhc3luYyBmdW5jdGlvbiBmYWtlRmxpY2sgKHhTcGVlZCwgeVNwZWVkKSB7XG4gIHJldHVybiBhd2FpdCB0aGlzLmJvb3RzdHJhcC5zZW5kQWN0aW9uKCdmbGljaycsIHt4U3BlZWQsIHlTcGVlZH0pO1xufTtcblxuY29tbWFuZHMuZmFrZUZsaWNrRWxlbWVudCA9IGFzeW5jIGZ1bmN0aW9uIGZha2VGbGlja0VsZW1lbnQgKGVsZW1lbnRJZCwgeG9mZnNldCwgeW9mZnNldCwgc3BlZWQpIHtcbiAgbGV0IHBhcmFtcyA9IHt4b2Zmc2V0LCB5b2Zmc2V0LCBzcGVlZCwgZWxlbWVudElkfTtcbiAgcmV0dXJuIGF3YWl0IHRoaXMuYm9vdHN0cmFwLnNlbmRBY3Rpb24oJ2VsZW1lbnQ6ZmxpY2snLCBwYXJhbXMpO1xufTtcblxuY29tbWFuZHMuc3dpcGUgPSBhc3luYyBmdW5jdGlvbiBzd2lwZSAoc3RhcnRYLCBzdGFydFksIGVuZFgsIGVuZFksIGR1cmF0aW9uLCB0b3VjaENvdW50LCBlbElkKSB7XG4gIGlmIChzdGFydFggPT09ICdudWxsJykge1xuICAgIHN0YXJ0WCA9IDAuNTtcbiAgfVxuICBpZiAoc3RhcnRZID09PSAnbnVsbCcpIHtcbiAgICBzdGFydFkgPSAwLjU7XG4gIH1cbiAgbGV0IHN3aXBlT3B0cyA9IHtzdGFydFgsIHN0YXJ0WSwgZW5kWCwgZW5kWSxcbiAgICAgICAgICAgICAgICAgICBzdGVwczogTWF0aC5yb3VuZChkdXJhdGlvbiAqIHN3aXBlU3RlcHNQZXJTZWMpfTtcbiAgLy8gZ29pbmcgdGhlIGxvbmcgd2F5IGFuZCBjaGVja2luZyBmb3IgdW5kZWZpbmVkIGFuZCBudWxsIHNpbmNlXG4gIC8vIHdlIGNhbid0IGJlIGFzc3VyZWQgYGVsSWRgIGlzIGEgc3RyaW5nIGFuZCBub3QgYW4gaW50XG4gIGlmICh1dGlsLmhhc1ZhbHVlKGVsSWQpKSB7XG4gICAgc3dpcGVPcHRzLmVsZW1lbnRJZCA9IGVsSWQ7XG4gIH1cbiAgcmV0dXJuIGF3YWl0IHRoaXMuZG9Td2lwZShzd2lwZU9wdHMpO1xufTtcblxuY29tbWFuZHMuZG9Td2lwZSA9IGFzeW5jIGZ1bmN0aW9uIGRvU3dpcGUgKHN3aXBlT3B0cykge1xuICBpZiAodXRpbC5oYXNWYWx1ZShzd2lwZU9wdHMuZWxlbWVudElkKSkge1xuICAgIHJldHVybiBhd2FpdCB0aGlzLmJvb3RzdHJhcC5zZW5kQWN0aW9uKCdlbGVtZW50OnN3aXBlJywgc3dpcGVPcHRzKTtcbiAgfSBlbHNlIHtcbiAgICByZXR1cm4gYXdhaXQgdGhpcy5ib290c3RyYXAuc2VuZEFjdGlvbignc3dpcGUnLCBzd2lwZU9wdHMpO1xuICB9XG59O1xuXG5jb21tYW5kcy5waW5jaENsb3NlID0gYXN5bmMgZnVuY3Rpb24gcGluY2hDbG9zZSAoc3RhcnRYLCBzdGFydFksIGVuZFgsIGVuZFksIGR1cmF0aW9uLCBwZXJjZW50LCBzdGVwcywgZWxJZCkge1xuICBsZXQgcGluY2hPcHRzID0ge1xuICAgIGRpcmVjdGlvbjogJ2luJyxcbiAgICBlbGVtZW50SWQ6IGVsSWQsXG4gICAgcGVyY2VudCxcbiAgICBzdGVwc1xuICB9O1xuICByZXR1cm4gYXdhaXQgdGhpcy5ib290c3RyYXAuc2VuZEFjdGlvbignZWxlbWVudDpwaW5jaCcsIHBpbmNoT3B0cyk7XG59O1xuXG5jb21tYW5kcy5waW5jaE9wZW4gPSBhc3luYyBmdW5jdGlvbiBwaW5jaE9wZW4gKHN0YXJ0WCwgc3RhcnRZLCBlbmRYLCBlbmRZLCBkdXJhdGlvbiwgcGVyY2VudCwgc3RlcHMsIGVsSWQpIHtcbiAgbGV0IHBpbmNoT3B0cyA9IHtkaXJlY3Rpb246ICdvdXQnLCBlbGVtZW50SWQ6IGVsSWQsIHBlcmNlbnQsIHN0ZXBzfTtcbiAgcmV0dXJuIGF3YWl0IHRoaXMuYm9vdHN0cmFwLnNlbmRBY3Rpb24oJ2VsZW1lbnQ6cGluY2gnLCBwaW5jaE9wdHMpO1xufTtcblxuY29tbWFuZHMuZmxpY2sgPSBhc3luYyBmdW5jdGlvbiBmbGljayAoZWxlbWVudCwgeFNwZWVkLCB5U3BlZWQsIHhPZmZzZXQsIHlPZmZzZXQsIHNwZWVkKSB7XG4gIGlmIChlbGVtZW50KSB7XG4gICAgYXdhaXQgdGhpcy5mYWtlRmxpY2tFbGVtZW50KGVsZW1lbnQsIHhPZmZzZXQsIHlPZmZzZXQsIHNwZWVkKTtcbiAgfSBlbHNlIHtcbiAgICBhd2FpdCB0aGlzLmZha2VGbGljayh4U3BlZWQsIHlTcGVlZCk7XG4gIH1cbn07XG5cbmNvbW1hbmRzLmRyYWcgPSBhc3luYyBmdW5jdGlvbiBkcmFnIChzdGFydFgsIHN0YXJ0WSwgZW5kWCwgZW5kWSwgZHVyYXRpb24sIHRvdWNoQ291bnQsIGVsZW1lbnRJZCwgZGVzdEVsSWQpIHtcbiAgbGV0IGRyYWdPcHRzID0ge1xuICAgIGVsZW1lbnRJZCwgZGVzdEVsSWQsIHN0YXJ0WCwgc3RhcnRZLCBlbmRYLCBlbmRZLFxuICAgIHN0ZXBzOiBNYXRoLnJvdW5kKGR1cmF0aW9uICogZHJhZ1N0ZXBzUGVyU2VjKVxuICB9O1xuICByZXR1cm4gYXdhaXQgdGhpcy5kb0RyYWcoZHJhZ09wdHMpO1xuXG59O1xuXG5jb21tYW5kcy5kb0RyYWcgPSBhc3luYyBmdW5jdGlvbiBkb0RyYWcgKGRyYWdPcHRzKSB7XG4gIGlmICh1dGlsLmhhc1ZhbHVlKGRyYWdPcHRzLmVsZW1lbnRJZCkpIHtcbiAgICByZXR1cm4gYXdhaXQgdGhpcy5ib290c3RyYXAuc2VuZEFjdGlvbignZWxlbWVudDpkcmFnJywgZHJhZ09wdHMpO1xuICB9IGVsc2Uge1xuICAgIHJldHVybiBhd2FpdCB0aGlzLmJvb3RzdHJhcC5zZW5kQWN0aW9uKCdkcmFnJywgZHJhZ09wdHMpO1xuICB9XG59O1xuXG5jb21tYW5kcy5sb2NrID0gYXN5bmMgZnVuY3Rpb24gbG9jayAoc2Vjb25kcykge1xuICBhd2FpdCB0aGlzLmFkYi5sb2NrKCk7XG4gIGlmIChpc05hTihzZWNvbmRzKSkge1xuICAgIHJldHVybjtcbiAgfVxuXG4gIGNvbnN0IGZsb2F0U2Vjb25kcyA9IHBhcnNlRmxvYXQoc2Vjb25kcyk7XG4gIGlmIChmbG9hdFNlY29uZHMgPD0gMCkge1xuICAgIHJldHVybjtcbiAgfVxuICBhd2FpdCBCLmRlbGF5KDEwMDAgKiBmbG9hdFNlY29uZHMpO1xuICBhd2FpdCB0aGlzLnVubG9jaygpO1xufTtcblxuY29tbWFuZHMuaXNMb2NrZWQgPSBhc3luYyBmdW5jdGlvbiBpc0xvY2tlZCAoKSB7XG4gIHJldHVybiBhd2FpdCB0aGlzLmFkYi5pc1NjcmVlbkxvY2tlZCgpO1xufTtcblxuY29tbWFuZHMudW5sb2NrID0gYXN5bmMgZnVuY3Rpb24gdW5sb2NrICgpIHtcbiAgcmV0dXJuIGF3YWl0IGFuZHJvaWRIZWxwZXJzLnVubG9jayh0aGlzLCB0aGlzLmFkYiwgdGhpcy5jYXBzKTtcbn07XG5cbmNvbW1hbmRzLm9wZW5Ob3RpZmljYXRpb25zID0gYXN5bmMgZnVuY3Rpb24gb3Blbk5vdGlmaWNhdGlvbnMgKCkge1xuICByZXR1cm4gYXdhaXQgdGhpcy5ib290c3RyYXAuc2VuZEFjdGlvbignb3Blbk5vdGlmaWNhdGlvbicpO1xufTtcblxuY29tbWFuZHMuc2V0TG9jYXRpb24gPSBhc3luYyBmdW5jdGlvbiBzZXRMb2NhdGlvbiAobGF0aXR1ZGUsIGxvbmdpdHVkZSkge1xuICByZXR1cm4gYXdhaXQgdGhpcy5hZGIuc2VuZFRlbG5ldENvbW1hbmQoYGdlbyBmaXggJHtsb25naXR1ZGV9ICR7bGF0aXR1ZGV9YCk7XG59O1xuXG5jb21tYW5kcy5maW5nZXJwcmludCA9IGFzeW5jIGZ1bmN0aW9uIGZpbmdlcnByaW50IChmaW5nZXJwcmludElkKSB7XG4gIGlmICghdGhpcy5pc0VtdWxhdG9yKCkpIHtcbiAgICB0aGlzLmxvZy5lcnJvckFuZFRocm93KCdmaW5nZXJwcmludCBtZXRob2QgaXMgb25seSBhdmFpbGFibGUgZm9yIGVtdWxhdG9ycycpO1xuICB9XG4gIGF3YWl0IHRoaXMuYWRiLmZpbmdlcnByaW50KGZpbmdlcnByaW50SWQpO1xufTtcblxuY29tbWFuZHMuc2VuZFNNUyA9IGFzeW5jIGZ1bmN0aW9uIHNlbmRTTVMgKHBob25lTnVtYmVyLCBtZXNzYWdlKSB7XG4gIGlmICghdGhpcy5pc0VtdWxhdG9yKCkpIHtcbiAgICB0aGlzLmxvZy5lcnJvckFuZFRocm93KCdzZW5kU01TIG1ldGhvZCBpcyBvbmx5IGF2YWlsYWJsZSBmb3IgZW11bGF0b3JzJyk7XG4gIH1cbiAgYXdhaXQgdGhpcy5hZGIuc2VuZFNNUyhwaG9uZU51bWJlciwgbWVzc2FnZSk7XG59O1xuXG5jb21tYW5kcy5nc21DYWxsID0gYXN5bmMgZnVuY3Rpb24gZ3NtQ2FsbCAocGhvbmVOdW1iZXIsIGFjdGlvbikge1xuICBpZiAoIXRoaXMuaXNFbXVsYXRvcigpKSB7XG4gICAgdGhpcy5sb2cuZXJyb3JBbmRUaHJvdygnZ3NtQ2FsbCBtZXRob2QgaXMgb25seSBhdmFpbGFibGUgZm9yIGVtdWxhdG9ycycpO1xuICB9XG4gIGF3YWl0IHRoaXMuYWRiLmdzbUNhbGwocGhvbmVOdW1iZXIsIGFjdGlvbik7XG59O1xuXG5jb21tYW5kcy5nc21TaWduYWwgPSBhc3luYyBmdW5jdGlvbiBnc21TaWduYWwgKHNpZ25hbFN0cmVuZ2gpIHtcbiAgaWYgKCF0aGlzLmlzRW11bGF0b3IoKSkge1xuICAgIHRoaXMubG9nLmVycm9yQW5kVGhyb3coJ2dzbVNpZ25hbCBtZXRob2QgaXMgb25seSBhdmFpbGFibGUgZm9yIGVtdWxhdG9ycycpO1xuICB9XG4gIGF3YWl0IHRoaXMuYWRiLmdzbVNpZ25hbChzaWduYWxTdHJlbmdoKTtcbn07XG5cbmNvbW1hbmRzLmdzbVZvaWNlID0gYXN5bmMgZnVuY3Rpb24gZ3NtVm9pY2UgKHN0YXRlKSB7XG4gIGlmICghdGhpcy5pc0VtdWxhdG9yKCkpIHtcbiAgICB0aGlzLmxvZy5lcnJvckFuZFRocm93KCdnc21Wb2ljZSBtZXRob2QgaXMgb25seSBhdmFpbGFibGUgZm9yIGVtdWxhdG9ycycpO1xuICB9XG4gIGF3YWl0IHRoaXMuYWRiLmdzbVZvaWNlKHN0YXRlKTtcbn07XG5cbmNvbW1hbmRzLnBvd2VyQUMgPSBhc3luYyBmdW5jdGlvbiBwb3dlckFDIChzdGF0ZSkge1xuICBpZiAoIXRoaXMuaXNFbXVsYXRvcigpKSB7XG4gICAgdGhpcy5sb2cuZXJyb3JBbmRUaHJvdygncG93ZXJBQyBtZXRob2QgaXMgb25seSBhdmFpbGFibGUgZm9yIGVtdWxhdG9ycycpO1xuICB9XG4gIGF3YWl0IHRoaXMuYWRiLnBvd2VyQUMoc3RhdGUpO1xufTtcblxuY29tbWFuZHMucG93ZXJDYXBhY2l0eSA9IGFzeW5jIGZ1bmN0aW9uIHBvd2VyQ2FwYWNpdHkgKGJhdHRlcnlQZXJjZW50KSB7XG4gIGlmICghdGhpcy5pc0VtdWxhdG9yKCkpIHtcbiAgICB0aGlzLmxvZy5lcnJvckFuZFRocm93KCdwb3dlckNhcGFjaXR5IG1ldGhvZCBpcyBvbmx5IGF2YWlsYWJsZSBmb3IgZW11bGF0b3JzJyk7XG4gIH1cbiAgYXdhaXQgdGhpcy5hZGIucG93ZXJDYXBhY2l0eShiYXR0ZXJ5UGVyY2VudCk7XG59O1xuXG5jb21tYW5kcy5uZXR3b3JrU3BlZWQgPSBhc3luYyBmdW5jdGlvbiBuZXR3b3JrU3BlZWQgKG5ldHdvcmtTcGVlZCkge1xuICBpZiAoIXRoaXMuaXNFbXVsYXRvcigpKSB7XG4gICAgdGhpcy5sb2cuZXJyb3JBbmRUaHJvdygnbmV0d29ya1NwZWVkIG1ldGhvZCBpcyBvbmx5IGF2YWlsYWJsZSBmb3IgZW11bGF0b3JzJyk7XG4gIH1cbiAgYXdhaXQgdGhpcy5hZGIubmV0d29ya1NwZWVkKG5ldHdvcmtTcGVlZCk7XG59O1xuXG4vKipcbiAqIEVtdWxhdGUgc2Vuc29ycyB2YWx1ZXMgb24gdGhlIGNvbm5lY3RlZCBlbXVsYXRvci5cbiAqXG4gKiBAdHlwZWRlZiB7T2JqZWN0fSBTZW5zb3JcbiAqIEBwcm9wZXJ0eSB7c3RyaW5nfSBzZW5zb3JUeXBlIC0gc2Vuc29yIHR5cGUgZGVjbGFyZWQgaW4gYWRiLlNFTlNPUlNcbiAqIEBwcm9wZXJ0eSB7c3RyaW5nfSB2YWx1ZSAtIHZhbHVlIHRvIHNldCB0byB0aGUgc2Vuc29yXG4gKlxuICogQHBhcmFtIHtPYmplY3R9IFNlbnNvclxuICogQHRocm93cyB7RXJyb3J9IC0gSWYgc2Vuc29yVHlwZSBpcyBub3QgZGVmaW5lZFxuICogQHRocm93cyB7RXJyb3J9IC0gSWYgdmFsdWUgZm9yIHRoZSBzZSBzb3IgaXMgbm90IGRlZmluZWRcbiAqIEB0aHJvd3Mge0Vycm9yfSAtIElmIGRldmljZVR5cGUgaXMgbm90IGFuIGVtdWxhdG9yXG4gKi9cbmNvbW1hbmRzLnNlbnNvclNldCA9IGFzeW5jIGZ1bmN0aW9uIHNlbnNvclNldCAoc2Vuc29yID0ge30pIHtcbiAgY29uc3Qge3NlbnNvclR5cGUsIHZhbHVlfSA9IHNlbnNvcjtcbiAgaWYgKCF1dGlsLmhhc1ZhbHVlKHNlbnNvclR5cGUpKSB7XG4gICAgdGhpcy5sb2cuZXJyb3JBbmRUaHJvdyhgJ3NlbnNvclR5cGUnIGFyZ3VtZW50IGlzIHJlcXVpcmVkYCk7XG4gIH1cbiAgaWYgKCF1dGlsLmhhc1ZhbHVlKHZhbHVlKSkge1xuICAgIHRoaXMubG9nLmVycm9yQW5kVGhyb3coYCd2YWx1ZScgYXJndW1lbnQgaXMgcmVxdWlyZWRgKTtcbiAgfVxuICBpZiAoIXRoaXMuaXNFbXVsYXRvcigpKSB7XG4gICAgdGhpcy5sb2cuZXJyb3JBbmRUaHJvdygnc2Vuc29yU2V0IG1ldGhvZCBpcyBvbmx5IGF2YWlsYWJsZSBmb3IgZW11bGF0b3JzJyk7XG4gIH1cbiAgYXdhaXQgdGhpcy5hZGIuc2Vuc29yU2V0KHNlbnNvclR5cGUsIHZhbHVlKTtcbn07XG5cbmhlbHBlcnMuZ2V0U2NyZWVuc2hvdERhdGFXaXRoQWRiU2hlbGwgPSBhc3luYyBmdW5jdGlvbiBnZXRTY3JlZW5zaG90RGF0YVdpdGhBZGJTaGVsbCAoYWRiLCBvcHRzKSB7XG4gIGNvbnN0IGxvY2FsRmlsZSA9IGF3YWl0IHRlbXBEaXIucGF0aCh7cHJlZml4OiAnYXBwaXVtJywgc3VmZml4OiAnLnBuZyd9KTtcbiAgaWYgKGF3YWl0IGZzLmV4aXN0cyhsb2NhbEZpbGUpKSB7XG4gICAgYXdhaXQgZnMudW5saW5rKGxvY2FsRmlsZSk7XG4gIH1cbiAgdHJ5IHtcbiAgICBjb25zdCBwbmdEaXIgPSBvcHRzLmFuZHJvaWRTY3JlZW5zaG90UGF0aCB8fCAnL2RhdGEvbG9jYWwvdG1wLyc7XG4gICAgY29uc3QgcG5nID0gcGF0aC5wb3NpeC5yZXNvbHZlKHBuZ0RpciwgJ3NjcmVlbnNob3QucG5nJyk7XG4gICAgY29uc3QgY21kID0gWycvc3lzdGVtL2Jpbi9ybScsIGAke3BuZ307YCwgJy9zeXN0ZW0vYmluL3NjcmVlbmNhcCcsICctcCcsIHBuZ107XG4gICAgYXdhaXQgYWRiLnNoZWxsKGNtZCk7XG4gICAgaWYgKCFhd2FpdCBhZGIuZmlsZVNpemUocG5nKSkge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKCdUaGUgc2l6ZSBvZiB0aGUgdGFrZW4gc2NyZWVuc2hvdCBlcXVhbHMgdG8gemVyby4nKTtcbiAgICB9XG4gICAgYXdhaXQgYWRiLnB1bGwocG5nLCBsb2NhbEZpbGUpO1xuICAgIHJldHVybiBhd2FpdCBqaW1wLnJlYWQobG9jYWxGaWxlKTtcbiAgfSBmaW5hbGx5IHtcbiAgICBpZiAoYXdhaXQgZnMuZXhpc3RzKGxvY2FsRmlsZSkpIHtcbiAgICAgIGF3YWl0IGZzLnVubGluayhsb2NhbEZpbGUpO1xuICAgIH1cbiAgfVxufTtcblxuaGVscGVycy5nZXRTY3JlZW5zaG90RGF0YVdpdGhBZGJFeGVjT3V0ID0gYXN5bmMgZnVuY3Rpb24gZ2V0U2NyZWVuc2hvdERhdGFXaXRoQWRiRXhlY091dCAoYWRiKSB7XG4gIGxldCB7c3Rkb3V0LCBzdGRlcnIsIGNvZGV9ID0gYXdhaXQgZXhlYyhhZGIuZXhlY3V0YWJsZS5wYXRoLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYWRiLmV4ZWN1dGFibGUuZGVmYXVsdEFyZ3NcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLmNvbmNhdChbJ2V4ZWMtb3V0JywgJy9zeXN0ZW0vYmluL3NjcmVlbmNhcCcsICctcCddKSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHtlbmNvZGluZzogJ2JpbmFyeScsIGlzQnVmZmVyOiB0cnVlfSk7XG4gIC8vIGlmIHRoZXJlIGlzIGFuIGVycm9yLCB0aHJvd1xuICBpZiAoY29kZSB8fCBzdGRlcnIubGVuZ3RoKSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKGBTY3JlZW5zaG90IHJldHVybmVkIGVycm9yLCBjb2RlOiAnJHtjb2RlfScsIHN0ZGVycjogJyR7c3RkZXJyLnRvU3RyaW5nKCl9J2ApO1xuICB9XG4gIC8vIGlmIHdlIGRvbid0IGdldCBhbnl0aGluZyBhdCBhbGwsIHRocm93XG4gIGlmICghc3Rkb3V0Lmxlbmd0aCkge1xuICAgIHRocm93IG5ldyBFcnJvcignU2NyZWVuc2hvdCByZXR1cm5lZCBubyBkYXRhJyk7XG4gIH1cblxuICByZXR1cm4gYXdhaXQgamltcC5yZWFkKHN0ZG91dCk7XG59O1xuXG5jb21tYW5kcy5nZXRTY3JlZW5zaG90ID0gYXN5bmMgZnVuY3Rpb24gZ2V0U2NyZWVuc2hvdCAoKSB7XG4gIGNvbnN0IGFwaUxldmVsID0gYXdhaXQgdGhpcy5hZGIuZ2V0QXBpTGV2ZWwoKTtcbiAgbGV0IGltYWdlID0gbnVsbDtcbiAgaWYgKGFwaUxldmVsID4gMjApIHtcbiAgICB0cnkge1xuICAgICAgLy8gVGhpcyBzY3JlZW5zaG90aW5nIGFwcHJvYWNoIGlzIHdheSBmYXN0ZXIsIHNpbmNlIGl0IHJlcXVpcmVzIGxlc3MgZXh0ZXJuYWwgY29tbWFuZHNcbiAgICAgIC8vIHRvIGJlIGV4ZWN1dGVkLiBVbmZvcnR1bmF0ZWx5LCBleGVjLW91dCBvcHRpb24gaXMgb25seSBzdXBwb3J0ZWQgYnkgbmV3ZXIgQW5kcm9pZC9TREsgdmVyc2lvbnMgKDUuMCBhbmQgbGF0ZXIpXG4gICAgICBpbWFnZSA9IGF3YWl0IHRoaXMuZ2V0U2NyZWVuc2hvdERhdGFXaXRoQWRiRXhlY091dCh0aGlzLmFkYik7XG4gICAgfSBjYXRjaCAoZSkge1xuICAgICAgdGhpcy5sb2cuaW5mbyhgQ2Fubm90IGdldCBzY3JlZW5zaG90IGRhdGEgd2l0aCAnYWRiIGV4ZWMtb3V0JyBiZWNhdXNlIG9mICcke2UubWVzc2FnZX0nLiBgICtcbiAgICAgICAgYERlZmF1bHRpbmcgdG8gJ2FkYiBzaGVsbCcgY2FsbGApO1xuICAgIH1cbiAgfVxuICBpZiAoIWltYWdlKSB7XG4gICAgdHJ5IHtcbiAgICAgIGltYWdlID0gYXdhaXQgdGhpcy5nZXRTY3JlZW5zaG90RGF0YVdpdGhBZGJTaGVsbCh0aGlzLmFkYiwgdGhpcy5vcHRzKTtcbiAgICB9IGNhdGNoIChlKSB7XG4gICAgICBjb25zdCBlcnIgPSBgQ2Fubm90IGdldCBzY3JlZW5zaG90IGRhdGEgYmVjYXVzZSBvZiAnJHtlLm1lc3NhZ2V9Jy4gYCArXG4gICAgICAgIGBNYWtlIHN1cmUgdGhlICdMYXlvdXRQYXJhbXMuRkxBR19TRUNVUkUnIGlzIG5vdCBzZXQgZm9yIGAgK1xuICAgICAgICBgdGhlIGN1cnJlbnQgdmlld2A7XG4gICAgICB0aGlzLmxvZy5lcnJvckFuZFRocm93KGVycik7XG4gICAgfVxuICB9XG4gIGlmIChhcGlMZXZlbCA8IDIzKSB7XG4gICAgLy8gQW5kcm9pZCBidWcgODQzMzc0MiAtIHJvdGF0ZSBzY3JlZW5zaG90IGlmIHNjcmVlbiBpcyByb3RhdGVkXG4gICAgbGV0IHNjcmVlbk9yaWVudGF0aW9uID0gYXdhaXQgdGhpcy5hZGIuZ2V0U2NyZWVuT3JpZW50YXRpb24oKTtcbiAgICB0cnkge1xuICAgICAgaW1hZ2UgPSBhd2FpdCBpbWFnZS5yb3RhdGUoLTkwICogc2NyZWVuT3JpZW50YXRpb24pO1xuICAgIH0gY2F0Y2ggKGVycikge1xuICAgICAgdGhpcy5sb2cud2FybihgQ291bGQgbm90IHJvdGF0ZSBzY3JlZW5zaG90IGR1ZSB0byBlcnJvcjogJHtlcnJ9YCk7XG4gICAgfVxuICB9XG4gIGNvbnN0IGdldEJ1ZmZlciA9IEIucHJvbWlzaWZ5KGltYWdlLmdldEJ1ZmZlciwge2NvbnRleHQ6IGltYWdlfSk7XG4gIGNvbnN0IGltZ0J1ZmZlciA9IGF3YWl0IGdldEJ1ZmZlcihqaW1wLk1JTUVfUE5HKTtcbiAgcmV0dXJuIGltZ0J1ZmZlci50b1N0cmluZygnYmFzZTY0Jyk7XG59O1xuXG5PYmplY3QuYXNzaWduKGV4dGVuc2lvbnMsIGNvbW1hbmRzLCBoZWxwZXJzKTtcbmV4cG9ydCB7IGNvbW1hbmRzLCBoZWxwZXJzIH07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
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"actions.js","names":["swipeStepsPerSec","dragStepsPerSec","commands","helpers","extensions","keyevent","keycode","metastate","log","warn","pressKeyCode","bootstrap","sendAction","longPressKeyCode","getOrientation","params","naturalOrientation","opts","androidNaturalOrientation","orientation","toUpperCase","setOrientation","fakeFlick","xSpeed","ySpeed","fakeFlickElement","elementId","xoffset","yoffset","speed","swipe","startX","startY","endX","endY","duration","touchCount","elId","swipeOpts","steps","Math","round","util","hasValue","doSwipe","pinchClose","percent","pinchOpts","direction","pinchOpen","flick","element","xOffset","yOffset","drag","destElId","dragOpts","doDrag","lock","seconds","adb","isNaN","floatSeconds","parseFloat","B","delay","unlock","isLocked","isScreenLocked","androidHelpers","caps","openNotifications","setLocation","latitude","longitude","sendTelnetCommand","fingerprint","fingerprintId","isEmulator","errorAndThrow","sendSMS","phoneNumber","message","gsmCall","action","gsmSignal","signalStrengh","gsmVoice","state","powerAC","powerCapacity","batteryPercent","networkSpeed","sensorSet","sensor","sensorType","value","getScreenshotDataWithAdbShell","localFile","tempDir","path","prefix","suffix","fs","exists","unlink","pngDir","androidScreenshotPath","png","posix","resolve","cmd","shell","fileSize","Error","pull","jimp","read","getScreenshotDataWithAdbExecOut","stdout","stderr","code","exec","executable","defaultArgs","concat","encoding","isBuffer","length","toString","getScreenshot","apiLevel","getApiLevel","image","e","info","err","screenOrientation","getScreenOrientation","rotate","getBuffer","promisify","context","imgBuffer","MIME_PNG","Object","assign"],"sources":["../../../lib/commands/actions.js"],"sourcesContent":["import androidHelpers from '../android-helpers';\nimport { fs, util, tempDir} from '@appium/support';\nimport path from 'path';\nimport B from 'bluebird';\nimport jimp from 'jimp';\nimport { exec } from 'teen_process';\n\nconst swipeStepsPerSec = 28;\nconst dragStepsPerSec = 40;\n\nlet commands = {}, helpers = {}, extensions = {};\n\ncommands.keyevent = async function keyevent (keycode, metastate = null) {\n // TODO deprecate keyevent; currently wd only implements keyevent\n this.log.warn('keyevent will be deprecated use pressKeyCode');\n return await this.pressKeyCode(keycode, metastate);\n};\n\ncommands.pressKeyCode = async function pressKeyCode (keycode, metastate = null) {\n return await this.bootstrap.sendAction('pressKeyCode', {keycode, metastate});\n};\n\ncommands.longPressKeyCode = async function longPressKeyCode (keycode, metastate = null) {\n return await this.bootstrap.sendAction('longPressKeyCode', {keycode, metastate});\n};\n\ncommands.getOrientation = async function getOrientation () {\n let params = {\n naturalOrientation: !!this.opts.androidNaturalOrientation,\n };\n let orientation = await this.bootstrap.sendAction('orientation', params);\n return orientation.toUpperCase();\n};\n\ncommands.setOrientation = async function setOrientation (orientation) {\n orientation = orientation.toUpperCase();\n let params = {\n orientation,\n naturalOrientation: !!this.opts.androidNaturalOrientation,\n };\n return await this.bootstrap.sendAction('orientation', params);\n};\n\ncommands.fakeFlick = async function fakeFlick (xSpeed, ySpeed) {\n return await this.bootstrap.sendAction('flick', {xSpeed, ySpeed});\n};\n\ncommands.fakeFlickElement = async function fakeFlickElement (elementId, xoffset, yoffset, speed) {\n let params = {xoffset, yoffset, speed, elementId};\n return await this.bootstrap.sendAction('element:flick', params);\n};\n\ncommands.swipe = async function swipe (startX, startY, endX, endY, duration, touchCount, elId) {\n if (startX === 'null') {\n startX = 0.5;\n }\n if (startY === 'null') {\n startY = 0.5;\n }\n let swipeOpts = {startX, startY, endX, endY,\n steps: Math.round(duration * swipeStepsPerSec)};\n // going the long way and checking for undefined and null since\n // we can't be assured `elId` is a string and not an int\n if (util.hasValue(elId)) {\n swipeOpts.elementId = elId;\n }\n return await this.doSwipe(swipeOpts);\n};\n\ncommands.doSwipe = async function doSwipe (swipeOpts) {\n if (util.hasValue(swipeOpts.elementId)) {\n return await this.bootstrap.sendAction('element:swipe', swipeOpts);\n } else {\n return await this.bootstrap.sendAction('swipe', swipeOpts);\n }\n};\n\ncommands.pinchClose = async function pinchClose (startX, startY, endX, endY, duration, percent, steps, elId) {\n let pinchOpts = {\n direction: 'in',\n elementId: elId,\n percent,\n steps\n };\n return await this.bootstrap.sendAction('element:pinch', pinchOpts);\n};\n\ncommands.pinchOpen = async function pinchOpen (startX, startY, endX, endY, duration, percent, steps, elId) {\n let pinchOpts = {direction: 'out', elementId: elId, percent, steps};\n return await this.bootstrap.sendAction('element:pinch', pinchOpts);\n};\n\ncommands.flick = async function flick (element, xSpeed, ySpeed, xOffset, yOffset, speed) {\n if (element) {\n await this.fakeFlickElement(element, xOffset, yOffset, speed);\n } else {\n await this.fakeFlick(xSpeed, ySpeed);\n }\n};\n\ncommands.drag = async function drag (startX, startY, endX, endY, duration, touchCount, elementId, destElId) {\n let dragOpts = {\n elementId, destElId, startX, startY, endX, endY,\n steps: Math.round(duration * dragStepsPerSec)\n };\n return await this.doDrag(dragOpts);\n\n};\n\ncommands.doDrag = async function doDrag (dragOpts) {\n if (util.hasValue(dragOpts.elementId)) {\n return await this.bootstrap.sendAction('element:drag', dragOpts);\n } else {\n return await this.bootstrap.sendAction('drag', dragOpts);\n }\n};\n\ncommands.lock = async function lock (seconds) {\n await this.adb.lock();\n if (isNaN(seconds)) {\n return;\n }\n\n const floatSeconds = parseFloat(seconds);\n if (floatSeconds <= 0) {\n return;\n }\n await B.delay(1000 * floatSeconds);\n await this.unlock();\n};\n\ncommands.isLocked = async function isLocked () {\n return await this.adb.isScreenLocked();\n};\n\ncommands.unlock = async function unlock () {\n return await androidHelpers.unlock(this, this.adb, this.caps);\n};\n\ncommands.openNotifications = async function openNotifications () {\n return await this.bootstrap.sendAction('openNotification');\n};\n\ncommands.setLocation = async function setLocation (latitude, longitude) {\n return await this.adb.sendTelnetCommand(`geo fix ${longitude} ${latitude}`);\n};\n\ncommands.fingerprint = async function fingerprint (fingerprintId) {\n if (!this.isEmulator()) {\n this.log.errorAndThrow('fingerprint method is only available for emulators');\n }\n await this.adb.fingerprint(fingerprintId);\n};\n\ncommands.sendSMS = async function sendSMS (phoneNumber, message) {\n if (!this.isEmulator()) {\n this.log.errorAndThrow('sendSMS method is only available for emulators');\n }\n await this.adb.sendSMS(phoneNumber, message);\n};\n\ncommands.gsmCall = async function gsmCall (phoneNumber, action) {\n if (!this.isEmulator()) {\n this.log.errorAndThrow('gsmCall method is only available for emulators');\n }\n await this.adb.gsmCall(phoneNumber, action);\n};\n\ncommands.gsmSignal = async function gsmSignal (signalStrengh) {\n if (!this.isEmulator()) {\n this.log.errorAndThrow('gsmSignal method is only available for emulators');\n }\n await this.adb.gsmSignal(signalStrengh);\n};\n\ncommands.gsmVoice = async function gsmVoice (state) {\n if (!this.isEmulator()) {\n this.log.errorAndThrow('gsmVoice method is only available for emulators');\n }\n await this.adb.gsmVoice(state);\n};\n\ncommands.powerAC = async function powerAC (state) {\n if (!this.isEmulator()) {\n this.log.errorAndThrow('powerAC method is only available for emulators');\n }\n await this.adb.powerAC(state);\n};\n\ncommands.powerCapacity = async function powerCapacity (batteryPercent) {\n if (!this.isEmulator()) {\n this.log.errorAndThrow('powerCapacity method is only available for emulators');\n }\n await this.adb.powerCapacity(batteryPercent);\n};\n\ncommands.networkSpeed = async function networkSpeed (networkSpeed) {\n if (!this.isEmulator()) {\n this.log.errorAndThrow('networkSpeed method is only available for emulators');\n }\n await this.adb.networkSpeed(networkSpeed);\n};\n\n/**\n * Emulate sensors values on the connected emulator.\n *\n * @typedef {Object} Sensor\n * @property {string} sensorType - sensor type declared in adb.SENSORS\n * @property {string} value - value to set to the sensor\n *\n * @param {Object} Sensor\n * @throws {Error} - If sensorType is not defined\n * @throws {Error} - If value for the se sor is not defined\n * @throws {Error} - If deviceType is not an emulator\n */\ncommands.sensorSet = async function sensorSet (sensor = {}) {\n const {sensorType, value} = sensor;\n if (!util.hasValue(sensorType)) {\n this.log.errorAndThrow(`'sensorType' argument is required`);\n }\n if (!util.hasValue(value)) {\n this.log.errorAndThrow(`'value' argument is required`);\n }\n if (!this.isEmulator()) {\n this.log.errorAndThrow('sensorSet method is only available for emulators');\n }\n await this.adb.sensorSet(sensorType, value);\n};\n\nhelpers.getScreenshotDataWithAdbShell = async function getScreenshotDataWithAdbShell (adb, opts) {\n const localFile = await tempDir.path({prefix: 'appium', suffix: '.png'});\n if (await fs.exists(localFile)) {\n await fs.unlink(localFile);\n }\n try {\n const pngDir = opts.androidScreenshotPath || '/data/local/tmp/';\n const png = path.posix.resolve(pngDir, 'screenshot.png');\n const cmd = ['/system/bin/rm', `${png};`, '/system/bin/screencap', '-p', png];\n await adb.shell(cmd);\n if (!await adb.fileSize(png)) {\n throw new Error('The size of the taken screenshot equals to zero.');\n }\n await adb.pull(png, localFile);\n return await jimp.read(localFile);\n } finally {\n if (await fs.exists(localFile)) {\n await fs.unlink(localFile);\n }\n }\n};\n\nhelpers.getScreenshotDataWithAdbExecOut = async function getScreenshotDataWithAdbExecOut (adb) {\n let {stdout, stderr, code} = await exec(adb.executable.path,\n adb.executable.defaultArgs\n .concat(['exec-out', '/system/bin/screencap', '-p']),\n {encoding: 'binary', isBuffer: true});\n // if there is an error, throw\n if (code || stderr.length) {\n throw new Error(`Screenshot returned error, code: '${code}', stderr: '${stderr.toString()}'`);\n }\n // if we don't get anything at all, throw\n if (!stdout.length) {\n throw new Error('Screenshot returned no data');\n }\n\n return await jimp.read(stdout);\n};\n\ncommands.getScreenshot = async function getScreenshot () {\n const apiLevel = await this.adb.getApiLevel();\n let image = null;\n if (apiLevel > 20) {\n try {\n // This screenshoting approach is way faster, since it requires less external commands\n // to be executed. Unfortunately, exec-out option is only supported by newer Android/SDK versions (5.0 and later)\n image = await this.getScreenshotDataWithAdbExecOut(this.adb);\n } catch (e) {\n this.log.info(`Cannot get screenshot data with 'adb exec-out' because of '${e.message}'. ` +\n `Defaulting to 'adb shell' call`);\n }\n }\n if (!image) {\n try {\n image = await this.getScreenshotDataWithAdbShell(this.adb, this.opts);\n } catch (e) {\n const err = `Cannot get screenshot data because of '${e.message}'. ` +\n `Make sure the 'LayoutParams.FLAG_SECURE' is not set for ` +\n `the current view`;\n this.log.errorAndThrow(err);\n }\n }\n if (apiLevel < 23) {\n // Android bug 8433742 - rotate screenshot if screen is rotated\n let screenOrientation = await this.adb.getScreenOrientation();\n try {\n image = await image.rotate(-90 * screenOrientation);\n } catch (err) {\n this.log.warn(`Could not rotate screenshot due to error: ${err}`);\n }\n }\n const getBuffer = B.promisify(image.getBuffer, {context: image});\n const imgBuffer = await getBuffer(jimp.MIME_PNG);\n return imgBuffer.toString('base64');\n};\n\nObject.assign(extensions, commands, helpers);\nexport { commands, helpers };\nexport default extensions;\n"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"actions.js","names":["_androidHelpers","_interopRequireDefault","require","_support","_path","_bluebird","_jimp","_teen_process","swipeStepsPerSec","dragStepsPerSec","commands","helpers","extensions","exports","keyevent","keycode","metastate","log","warn","pressKeyCode","bootstrap","sendAction","longPressKeyCode","getOrientation","params","naturalOrientation","opts","androidNaturalOrientation","orientation","toUpperCase","setOrientation","fakeFlick","xSpeed","ySpeed","fakeFlickElement","elementId","xoffset","yoffset","speed","swipe","startX","startY","endX","endY","duration","touchCount","elId","swipeOpts","steps","Math","round","util","hasValue","doSwipe","pinchClose","percent","pinchOpts","direction","pinchOpen","flick","element","xOffset","yOffset","drag","destElId","dragOpts","doDrag","lock","seconds","adb","isNaN","floatSeconds","parseFloat","B","delay","unlock","isLocked","isScreenLocked","androidHelpers","caps","openNotifications","setLocation","latitude","longitude","sendTelnetCommand","fingerprint","fingerprintId","isEmulator","errorAndThrow","sendSMS","phoneNumber","message","gsmCall","action","gsmSignal","signalStrengh","gsmVoice","state","powerAC","powerCapacity","batteryPercent","networkSpeed","sensorSet","sensor","sensorType","value","getScreenshotDataWithAdbShell","localFile","tempDir","path","prefix","suffix","fs","exists","unlink","pngDir","androidScreenshotPath","png","posix","resolve","cmd","shell","fileSize","Error","pull","jimp","read","getScreenshotDataWithAdbExecOut","stdout","stderr","code","exec","executable","defaultArgs","concat","encoding","isBuffer","length","toString","getScreenshot","apiLevel","getApiLevel","image","e","info","err","screenOrientation","getScreenOrientation","rotate","getBuffer","promisify","context","imgBuffer","MIME_PNG","Object","assign","_default","default"],"sources":["../../../lib/commands/actions.js"],"sourcesContent":["import androidHelpers from '../android-helpers';\nimport { fs, util, tempDir} from '@appium/support';\nimport path from 'path';\nimport B from 'bluebird';\nimport jimp from 'jimp';\nimport { exec } from 'teen_process';\n\nconst swipeStepsPerSec = 28;\nconst dragStepsPerSec = 40;\n\nlet commands = {}, helpers = {}, extensions = {};\n\ncommands.keyevent = async function keyevent (keycode, metastate = null) {\n // TODO deprecate keyevent; currently wd only implements keyevent\n this.log.warn('keyevent will be deprecated use pressKeyCode');\n return await this.pressKeyCode(keycode, metastate);\n};\n\ncommands.pressKeyCode = async function pressKeyCode (keycode, metastate = null) {\n return await this.bootstrap.sendAction('pressKeyCode', {keycode, metastate});\n};\n\ncommands.longPressKeyCode = async function longPressKeyCode (keycode, metastate = null) {\n return await this.bootstrap.sendAction('longPressKeyCode', {keycode, metastate});\n};\n\ncommands.getOrientation = async function getOrientation () {\n let params = {\n naturalOrientation: !!this.opts.androidNaturalOrientation,\n };\n let orientation = await this.bootstrap.sendAction('orientation', params);\n return orientation.toUpperCase();\n};\n\ncommands.setOrientation = async function setOrientation (orientation) {\n orientation = orientation.toUpperCase();\n let params = {\n orientation,\n naturalOrientation: !!this.opts.androidNaturalOrientation,\n };\n return await this.bootstrap.sendAction('orientation', params);\n};\n\ncommands.fakeFlick = async function fakeFlick (xSpeed, ySpeed) {\n return await this.bootstrap.sendAction('flick', {xSpeed, ySpeed});\n};\n\ncommands.fakeFlickElement = async function fakeFlickElement (elementId, xoffset, yoffset, speed) {\n let params = {xoffset, yoffset, speed, elementId};\n return await this.bootstrap.sendAction('element:flick', params);\n};\n\ncommands.swipe = async function swipe (startX, startY, endX, endY, duration, touchCount, elId) {\n if (startX === 'null') {\n startX = 0.5;\n }\n if (startY === 'null') {\n startY = 0.5;\n }\n let swipeOpts = {startX, startY, endX, endY,\n steps: Math.round(duration * swipeStepsPerSec)};\n // going the long way and checking for undefined and null since\n // we can't be assured `elId` is a string and not an int\n if (util.hasValue(elId)) {\n swipeOpts.elementId = elId;\n }\n return await this.doSwipe(swipeOpts);\n};\n\ncommands.doSwipe = async function doSwipe (swipeOpts) {\n if (util.hasValue(swipeOpts.elementId)) {\n return await this.bootstrap.sendAction('element:swipe', swipeOpts);\n } else {\n return await this.bootstrap.sendAction('swipe', swipeOpts);\n }\n};\n\ncommands.pinchClose = async function pinchClose (startX, startY, endX, endY, duration, percent, steps, elId) {\n let pinchOpts = {\n direction: 'in',\n elementId: elId,\n percent,\n steps\n };\n return await this.bootstrap.sendAction('element:pinch', pinchOpts);\n};\n\ncommands.pinchOpen = async function pinchOpen (startX, startY, endX, endY, duration, percent, steps, elId) {\n let pinchOpts = {direction: 'out', elementId: elId, percent, steps};\n return await this.bootstrap.sendAction('element:pinch', pinchOpts);\n};\n\ncommands.flick = async function flick (element, xSpeed, ySpeed, xOffset, yOffset, speed) {\n if (element) {\n await this.fakeFlickElement(element, xOffset, yOffset, speed);\n } else {\n await this.fakeFlick(xSpeed, ySpeed);\n }\n};\n\ncommands.drag = async function drag (startX, startY, endX, endY, duration, touchCount, elementId, destElId) {\n let dragOpts = {\n elementId, destElId, startX, startY, endX, endY,\n steps: Math.round(duration * dragStepsPerSec)\n };\n return await this.doDrag(dragOpts);\n\n};\n\ncommands.doDrag = async function doDrag (dragOpts) {\n if (util.hasValue(dragOpts.elementId)) {\n return await this.bootstrap.sendAction('element:drag', dragOpts);\n } else {\n return await this.bootstrap.sendAction('drag', dragOpts);\n }\n};\n\ncommands.lock = async function lock (seconds) {\n await this.adb.lock();\n if (isNaN(seconds)) {\n return;\n }\n\n const floatSeconds = parseFloat(seconds);\n if (floatSeconds <= 0) {\n return;\n }\n await B.delay(1000 * floatSeconds);\n await this.unlock();\n};\n\ncommands.isLocked = async function isLocked () {\n return await this.adb.isScreenLocked();\n};\n\ncommands.unlock = async function unlock () {\n return await androidHelpers.unlock(this, this.adb, this.caps);\n};\n\ncommands.openNotifications = async function openNotifications () {\n return await this.bootstrap.sendAction('openNotification');\n};\n\ncommands.setLocation = async function setLocation (latitude, longitude) {\n return await this.adb.sendTelnetCommand(`geo fix ${longitude} ${latitude}`);\n};\n\ncommands.fingerprint = async function fingerprint (fingerprintId) {\n if (!this.isEmulator()) {\n this.log.errorAndThrow('fingerprint method is only available for emulators');\n }\n await this.adb.fingerprint(fingerprintId);\n};\n\ncommands.sendSMS = async function sendSMS (phoneNumber, message) {\n if (!this.isEmulator()) {\n this.log.errorAndThrow('sendSMS method is only available for emulators');\n }\n await this.adb.sendSMS(phoneNumber, message);\n};\n\ncommands.gsmCall = async function gsmCall (phoneNumber, action) {\n if (!this.isEmulator()) {\n this.log.errorAndThrow('gsmCall method is only available for emulators');\n }\n await this.adb.gsmCall(phoneNumber, action);\n};\n\ncommands.gsmSignal = async function gsmSignal (signalStrengh) {\n if (!this.isEmulator()) {\n this.log.errorAndThrow('gsmSignal method is only available for emulators');\n }\n await this.adb.gsmSignal(signalStrengh);\n};\n\ncommands.gsmVoice = async function gsmVoice (state) {\n if (!this.isEmulator()) {\n this.log.errorAndThrow('gsmVoice method is only available for emulators');\n }\n await this.adb.gsmVoice(state);\n};\n\ncommands.powerAC = async function powerAC (state) {\n if (!this.isEmulator()) {\n this.log.errorAndThrow('powerAC method is only available for emulators');\n }\n await this.adb.powerAC(state);\n};\n\ncommands.powerCapacity = async function powerCapacity (batteryPercent) {\n if (!this.isEmulator()) {\n this.log.errorAndThrow('powerCapacity method is only available for emulators');\n }\n await this.adb.powerCapacity(batteryPercent);\n};\n\ncommands.networkSpeed = async function networkSpeed (networkSpeed) {\n if (!this.isEmulator()) {\n this.log.errorAndThrow('networkSpeed method is only available for emulators');\n }\n await this.adb.networkSpeed(networkSpeed);\n};\n\n/**\n * Emulate sensors values on the connected emulator.\n *\n * @typedef {Object} Sensor\n * @property {string} sensorType - sensor type declared in adb.SENSORS\n * @property {string} value - value to set to the sensor\n *\n * @param {Object} Sensor\n * @throws {Error} - If sensorType is not defined\n * @throws {Error} - If value for the se sor is not defined\n * @throws {Error} - If deviceType is not an emulator\n */\ncommands.sensorSet = async function sensorSet (sensor = {}) {\n const {sensorType, value} = sensor;\n if (!util.hasValue(sensorType)) {\n this.log.errorAndThrow(`'sensorType' argument is required`);\n }\n if (!util.hasValue(value)) {\n this.log.errorAndThrow(`'value' argument is required`);\n }\n if (!this.isEmulator()) {\n this.log.errorAndThrow('sensorSet method is only available for emulators');\n }\n await this.adb.sensorSet(sensorType, value);\n};\n\nhelpers.getScreenshotDataWithAdbShell = async function getScreenshotDataWithAdbShell (adb, opts) {\n const localFile = await tempDir.path({prefix: 'appium', suffix: '.png'});\n if (await fs.exists(localFile)) {\n await fs.unlink(localFile);\n }\n try {\n const pngDir = opts.androidScreenshotPath || '/data/local/tmp/';\n const png = path.posix.resolve(pngDir, 'screenshot.png');\n const cmd = ['/system/bin/rm', `${png};`, '/system/bin/screencap', '-p', png];\n await adb.shell(cmd);\n if (!await adb.fileSize(png)) {\n throw new Error('The size of the taken screenshot equals to zero.');\n }\n await adb.pull(png, localFile);\n return await jimp.read(localFile);\n } finally {\n if (await fs.exists(localFile)) {\n await fs.unlink(localFile);\n }\n }\n};\n\nhelpers.getScreenshotDataWithAdbExecOut = async function getScreenshotDataWithAdbExecOut (adb) {\n let {stdout, stderr, code} = await exec(adb.executable.path,\n adb.executable.defaultArgs\n .concat(['exec-out', '/system/bin/screencap', '-p']),\n {encoding: 'binary', isBuffer: true});\n // if there is an error, throw\n if (code || stderr.length) {\n throw new Error(`Screenshot returned error, code: '${code}', stderr: '${stderr.toString()}'`);\n }\n // if we don't get anything at all, throw\n if (!stdout.length) {\n throw new Error('Screenshot returned no data');\n }\n\n return await jimp.read(stdout);\n};\n\ncommands.getScreenshot = async function getScreenshot () {\n const apiLevel = await this.adb.getApiLevel();\n let image = null;\n if (apiLevel > 20) {\n try {\n // This screenshoting approach is way faster, since it requires less external commands\n // to be executed. Unfortunately, exec-out option is only supported by newer Android/SDK versions (5.0 and later)\n image = await this.getScreenshotDataWithAdbExecOut(this.adb);\n } catch (e) {\n this.log.info(`Cannot get screenshot data with 'adb exec-out' because of '${e.message}'. ` +\n `Defaulting to 'adb shell' call`);\n }\n }\n if (!image) {\n try {\n image = await this.getScreenshotDataWithAdbShell(this.adb, this.opts);\n } catch (e) {\n const err = `Cannot get screenshot data because of '${e.message}'. ` +\n `Make sure the 'LayoutParams.FLAG_SECURE' is not set for ` +\n `the current view`;\n this.log.errorAndThrow(err);\n }\n }\n if (apiLevel < 23) {\n // Android bug 8433742 - rotate screenshot if screen is rotated\n let screenOrientation = await this.adb.getScreenOrientation();\n try {\n image = await image.rotate(-90 * screenOrientation);\n } catch (err) {\n this.log.warn(`Could not rotate screenshot due to error: ${err}`);\n }\n }\n const getBuffer = B.promisify(image.getBuffer, {context: image});\n const imgBuffer = await getBuffer(jimp.MIME_PNG);\n return imgBuffer.toString('base64');\n};\n\nObject.assign(extensions, commands, helpers);\nexport { commands, helpers };\nexport default extensions;\n"],"mappings":"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"}
|
|
@@ -26,4 +26,4 @@ commands.postDismissAlert = async function postDismissAlert() {
|
|
|
26
26
|
Object.assign(extensions, commands, helpers);
|
|
27
27
|
var _default = extensions;
|
|
28
28
|
exports.default = _default;
|
|
29
|
-
//# sourceMappingURL=data:application/json;charset=utf-8;base64,
|
|
29
|
+
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJfZHJpdmVyIiwicmVxdWlyZSIsImNvbW1hbmRzIiwiaGVscGVycyIsImV4dGVuc2lvbnMiLCJleHBvcnRzIiwiZ2V0QWxlcnRUZXh0IiwiZXJyb3JzIiwiTm90WWV0SW1wbGVtZW50ZWRFcnJvciIsInNldEFsZXJ0VGV4dCIsInBvc3RBY2NlcHRBbGVydCIsInBvc3REaXNtaXNzQWxlcnQiLCJPYmplY3QiLCJhc3NpZ24iLCJfZGVmYXVsdCIsImRlZmF1bHQiXSwic291cmNlcyI6WyIuLi8uLi8uLi9saWIvY29tbWFuZHMvYWxlcnQuanMiXSwic291cmNlc0NvbnRlbnQiOlsiLyogZXNsaW50LWRpc2FibGUgcmVxdWlyZS1hd2FpdCAqL1xuaW1wb3J0IHsgZXJyb3JzIH0gZnJvbSAnYXBwaXVtL2RyaXZlcic7XG5cbmxldCBjb21tYW5kcyA9IHt9LCBoZWxwZXJzID0ge30sIGV4dGVuc2lvbnMgPSB7fTtcblxuY29tbWFuZHMuZ2V0QWxlcnRUZXh0ID0gYXN5bmMgZnVuY3Rpb24gZ2V0QWxlcnRUZXh0ICgpIHtcbiAgdGhyb3cgbmV3IGVycm9ycy5Ob3RZZXRJbXBsZW1lbnRlZEVycm9yKCk7XG59O1xuXG5jb21tYW5kcy5zZXRBbGVydFRleHQgPSBhc3luYyBmdW5jdGlvbiBzZXRBbGVydFRleHQgKCkge1xuICB0aHJvdyBuZXcgZXJyb3JzLk5vdFlldEltcGxlbWVudGVkRXJyb3IoKTtcbn07XG5cbmNvbW1hbmRzLnBvc3RBY2NlcHRBbGVydCA9IGFzeW5jIGZ1bmN0aW9uIHBvc3RBY2NlcHRBbGVydCAoKSB7XG4gIHRocm93IG5ldyBlcnJvcnMuTm90WWV0SW1wbGVtZW50ZWRFcnJvcigpO1xufTtcblxuY29tbWFuZHMucG9zdERpc21pc3NBbGVydCA9IGFzeW5jIGZ1bmN0aW9uIHBvc3REaXNtaXNzQWxlcnQgKCkge1xuICB0aHJvdyBuZXcgZXJyb3JzLk5vdFlldEltcGxlbWVudGVkRXJyb3IoKTtcbn07XG5cbk9iamVjdC5hc3NpZ24oZXh0ZW5zaW9ucywgY29tbWFuZHMsIGhlbHBlcnMpO1xuZXhwb3J0IHsgY29tbWFuZHMsIGhlbHBlcnMgfTtcbmV4cG9ydCBkZWZhdWx0IGV4dGVuc2lvbnM7XG4iXSwibWFwcGluZ3MiOiI7Ozs7Ozs7QUFDQSxJQUFBQSxPQUFBLEdBQUFDLE9BQUE7QUFFQSxJQUFJQyxRQUFRLEdBQUcsQ0FBQyxDQUFDO0VBQUVDLE9BQU8sR0FBRyxDQUFDLENBQUM7RUFBRUMsVUFBVSxHQUFHLENBQUMsQ0FBQztBQUFDQyxPQUFBLENBQUFGLE9BQUEsR0FBQUEsT0FBQTtBQUFBRSxPQUFBLENBQUFILFFBQUEsR0FBQUEsUUFBQTtBQUVqREEsUUFBUSxDQUFDSSxZQUFZLEdBQUcsZUFBZUEsWUFBWUEsQ0FBQSxFQUFJO0VBQ3JELE1BQU0sSUFBSUMsY0FBTSxDQUFDQyxzQkFBc0IsRUFBRTtBQUMzQyxDQUFDO0FBRUROLFFBQVEsQ0FBQ08sWUFBWSxHQUFHLGVBQWVBLFlBQVlBLENBQUEsRUFBSTtFQUNyRCxNQUFNLElBQUlGLGNBQU0sQ0FBQ0Msc0JBQXNCLEVBQUU7QUFDM0MsQ0FBQztBQUVETixRQUFRLENBQUNRLGVBQWUsR0FBRyxlQUFlQSxlQUFlQSxDQUFBLEVBQUk7RUFDM0QsTUFBTSxJQUFJSCxjQUFNLENBQUNDLHNCQUFzQixFQUFFO0FBQzNDLENBQUM7QUFFRE4sUUFBUSxDQUFDUyxnQkFBZ0IsR0FBRyxlQUFlQSxnQkFBZ0JBLENBQUEsRUFBSTtFQUM3RCxNQUFNLElBQUlKLGNBQU0sQ0FBQ0Msc0JBQXNCLEVBQUU7QUFDM0MsQ0FBQztBQUVESSxNQUFNLENBQUNDLE1BQU0sQ0FBQ1QsVUFBVSxFQUFFRixRQUFRLEVBQUVDLE9BQU8sQ0FBQztBQUFDLElBQUFXLFFBQUEsR0FFOUJWLFVBQVU7QUFBQUMsT0FBQSxDQUFBVSxPQUFBLEdBQUFELFFBQUEifQ==
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"alert.js","names":["commands","helpers","extensions","getAlertText","errors","NotYetImplementedError","setAlertText","postAcceptAlert","postDismissAlert","Object","assign"],"sources":["../../../lib/commands/alert.js"],"sourcesContent":["/* eslint-disable require-await */\nimport { errors } from 'appium/driver';\n\nlet commands = {}, helpers = {}, extensions = {};\n\ncommands.getAlertText = async function getAlertText () {\n throw new errors.NotYetImplementedError();\n};\n\ncommands.setAlertText = async function setAlertText () {\n throw new errors.NotYetImplementedError();\n};\n\ncommands.postAcceptAlert = async function postAcceptAlert () {\n throw new errors.NotYetImplementedError();\n};\n\ncommands.postDismissAlert = async function postDismissAlert () {\n throw new errors.NotYetImplementedError();\n};\n\nObject.assign(extensions, commands, helpers);\nexport { commands, helpers };\nexport default extensions;\n"],"mappings":";;;;;;;AACA;AAEA,
|
|
1
|
+
{"version":3,"file":"alert.js","names":["_driver","require","commands","helpers","extensions","exports","getAlertText","errors","NotYetImplementedError","setAlertText","postAcceptAlert","postDismissAlert","Object","assign","_default","default"],"sources":["../../../lib/commands/alert.js"],"sourcesContent":["/* eslint-disable require-await */\nimport { errors } from 'appium/driver';\n\nlet commands = {}, helpers = {}, extensions = {};\n\ncommands.getAlertText = async function getAlertText () {\n throw new errors.NotYetImplementedError();\n};\n\ncommands.setAlertText = async function setAlertText () {\n throw new errors.NotYetImplementedError();\n};\n\ncommands.postAcceptAlert = async function postAcceptAlert () {\n throw new errors.NotYetImplementedError();\n};\n\ncommands.postDismissAlert = async function postDismissAlert () {\n throw new errors.NotYetImplementedError();\n};\n\nObject.assign(extensions, commands, helpers);\nexport { commands, helpers };\nexport default extensions;\n"],"mappings":";;;;;;;AACA,IAAAA,OAAA,GAAAC,OAAA;AAEA,IAAIC,QAAQ,GAAG,CAAC,CAAC;EAAEC,OAAO,GAAG,CAAC,CAAC;EAAEC,UAAU,GAAG,CAAC,CAAC;AAACC,OAAA,CAAAF,OAAA,GAAAA,OAAA;AAAAE,OAAA,CAAAH,QAAA,GAAAA,QAAA;AAEjDA,QAAQ,CAACI,YAAY,GAAG,eAAeA,YAAYA,CAAA,EAAI;EACrD,MAAM,IAAIC,cAAM,CAACC,sBAAsB,EAAE;AAC3C,CAAC;AAEDN,QAAQ,CAACO,YAAY,GAAG,eAAeA,YAAYA,CAAA,EAAI;EACrD,MAAM,IAAIF,cAAM,CAACC,sBAAsB,EAAE;AAC3C,CAAC;AAEDN,QAAQ,CAACQ,eAAe,GAAG,eAAeA,eAAeA,CAAA,EAAI;EAC3D,MAAM,IAAIH,cAAM,CAACC,sBAAsB,EAAE;AAC3C,CAAC;AAEDN,QAAQ,CAACS,gBAAgB,GAAG,eAAeA,gBAAgBA,CAAA,EAAI;EAC7D,MAAM,IAAIJ,cAAM,CAACC,sBAAsB,EAAE;AAC3C,CAAC;AAEDI,MAAM,CAACC,MAAM,CAACT,UAAU,EAAEF,QAAQ,EAAEC,OAAO,CAAC;AAAC,IAAAW,QAAA,GAE9BV,UAAU;AAAAC,OAAA,CAAAU,OAAA,GAAAD,QAAA"}
|
|
@@ -142,4 +142,4 @@ commands.mobileClearApp = async function mobileClearApp(opts = {}) {
|
|
|
142
142
|
};
|
|
143
143
|
var _default = commands;
|
|
144
144
|
exports.default = _default;
|
|
145
|
-
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJBUFBfRVhURU5TSU9OUyIsIlJFU09MVkVSX0FDVElWSVRZX05BTUUiLCJjb21tYW5kcyIsImlzQXBwSW5zdGFsbGVkIiwiYXBwSWQiLCJhZGIiLCJtb2JpbGVJc0FwcEluc3RhbGxlZCIsIm9wdHMiLCJyZXF1aXJlQXJncyIsInF1ZXJ5QXBwU3RhdGUiLCJsb2ciLCJpbmZvIiwiQVBQX1NUQVRFIiwiTk9UX0lOU1RBTExFRCIsInByb2Nlc3NFeGlzdHMiLCJOT1RfUlVOTklORyIsImFwcElkUmUiLCJSZWdFeHAiLCJfIiwiZXNjYXBlUmVnRXhwIiwibGluZSIsImR1bXBXaW5kb3dzIiwic3BsaXQiLCJ0ZXN0Iiwic29tZSIsIngiLCJpbmNsdWRlcyIsIlJVTk5JTkdfSU5fRk9SRUdST1VORCIsIlJVTk5JTkdfSU5fQkFDS0dST1VORCIsIm1vYmlsZVF1ZXJ5QXBwU3RhdGUiLCJhY3RpdmF0ZUFwcCIsImRlYnVnIiwiYXBpTGV2ZWwiLCJnZXRBcGlMZXZlbCIsImNtZCIsIm91dHB1dCIsInNoZWxsIiwiZSIsImVycm9yQW5kVGhyb3ciLCJtZXNzYWdlIiwiYWN0aXZpdHlOYW1lIiwicmVzb2x2ZUxhdW5jaGFibGVBY3Rpdml0eSIsInByZWZlckNtZCIsInN0ZG91dCIsIkVycm9yIiwibW9iaWxlQWN0aXZhdGVBcHAiLCJyZW1vdmVBcHAiLCJvcHRpb25zIiwidW5pbnN0YWxsQXBrIiwibW9iaWxlUmVtb3ZlQXBwIiwidGVybWluYXRlQXBwIiwiZm9yY2VTdG9wIiwidGltZW91dCIsInV0aWwiLCJoYXNWYWx1ZSIsImlzTmFOIiwicGFyc2VJbnQiLCJ3YWl0Rm9yQ29uZGl0aW9uIiwid2FpdE1zIiwiaW50ZXJ2YWxNcyIsIm1vYmlsZVRlcm1pbmF0ZUFwcCIsImluc3RhbGxBcHAiLCJhcHBQYXRoIiwibG9jYWxQYXRoIiwiaGVscGVycyIsImNvbmZpZ3VyZUFwcCIsImluc3RhbGwiLCJtb2JpbGVJbnN0YWxsQXBwIiwibW9iaWxlQ2xlYXJBcHAiLCJlcnJvcnMiLCJJbnZhbGlkQXJndW1lbnRFcnJvciIsImNsZWFyIl0sInNvdXJjZXMiOlsiLi4vLi4vLi4vbGliL2NvbW1hbmRzL2FwcC1tYW5hZ2VtZW50LmpzIl0sInNvdXJjZXNDb250ZW50IjpbImltcG9ydCBfIGZyb20gJ2xvZGFzaCc7XG5pbXBvcnQgeyB3YWl0Rm9yQ29uZGl0aW9uIH0gZnJvbSAnYXN5bmNib3gnO1xuaW1wb3J0IHsgdXRpbCB9IGZyb20gJ0BhcHBpdW0vc3VwcG9ydCc7XG5pbXBvcnQgeyBBUFBfU1RBVEUgfSBmcm9tICcuLi9hbmRyb2lkLWhlbHBlcnMnO1xuaW1wb3J0IHsgZXJyb3JzIH0gZnJvbSAnYXBwaXVtL2RyaXZlcic7XG5pbXBvcnQgeyByZXF1aXJlQXJncyB9IGZyb20gJy4uL3V0aWxzJztcblxuY29uc3QgQVBQX0VYVEVOU0lPTlMgPSBbJy5hcGsnLCAnLmFwa3MnXTtcbmNvbnN0IFJFU09MVkVSX0FDVElWSVRZX05BTUUgPSAnYW5kcm9pZC9jb20uYW5kcm9pZC5pbnRlcm5hbC5hcHAuUmVzb2x2ZXJBY3Rpdml0eSc7XG5cbmNvbnN0IGNvbW1hbmRzID0ge307XG5cbi8qKlxuICogVmVyaWZ5IHdoZXRoZXIgYW4gYXBwbGljYXRpb24gaXMgaW5zdGFsbGVkIG9yIG5vdFxuICpcbiAqIEBwYXJhbSB7c3RyaW5nfSBhcHBJZCAtIEFwcGxpY2F0aW9uIHBhY2thZ2UgaWRlbnRpZmllclxuICogQHJldHVybnMge2Jvb2xlYW59IHRydWUgaWYgdGhlIGFwcCBpcyBpbnN0YWxsZWRcbiAqL1xuY29tbWFuZHMuaXNBcHBJbnN0YWxsZWQgPSBhc3luYyBmdW5jdGlvbiBpc0FwcEluc3RhbGxlZCAoYXBwSWQpIHtcbiAgcmV0dXJuIGF3YWl0IHRoaXMuYWRiLmlzQXBwSW5zdGFsbGVkKGFwcElkKTtcbn07XG5cbi8qKlxuICogQHR5cGVkZWYge09iamVjdH0gTW9iaWxlQXBwSW5zdGFsbGVkT3B0aW9uc1xuICogQHByb3BlcnR5IHtzdHJpbmd9IGFwcElkIC0gQXBwbGljYXRpb24gcGFja2FnZSBpZGVudGlmaWVyLiBNdXN0IGJlIGFsd2F5cyBwcm92aWRlZC5cbiAqL1xuXG4vKipcbiAqIFZlcmlmeSB3aGV0aGVyIGFuIGFwcGxpY2F0aW9uIGlzIGluc3RhbGxlZCBvciBub3RcbiAqXG4gKiBAcGFyYW0ge01vYmlsZUFwcEluc3RhbGxlZE9wdGlvbnN9IG9wdHNcbiAqIEByZXR1cm5zIHtib29sZWFufSBTYW1lIGFzIGluIGBpc0FwcEluc3RhbGxlZGBcbiAqL1xuY29tbWFuZHMubW9iaWxlSXNBcHBJbnN0YWxsZWQgPSBhc3luYyBmdW5jdGlvbiBtb2JpbGVJc0FwcEluc3RhbGxlZCAob3B0cyA9IHt9KSB7XG4gIGNvbnN0IHsgYXBwSWQgfSA9IHJlcXVpcmVBcmdzKCdhcHBJZCcsIG9wdHMpO1xuICByZXR1cm4gYXdhaXQgdGhpcy5pc0FwcEluc3RhbGxlZChhcHBJZCk7XG59O1xuXG4vKipcbiAqIFF1ZXJpZXMgdGhlIGN1cnJlbnQgc3RhdGUgb2YgdGhlIGFwcC5cbiAqXG4gKiBAcGFyYW0ge3N0cmluZ30gYXBwSWQgLSBBcHBsaWNhdGlvbiBwYWNrYWdlIGlkZW50aWZpZXJcbiAqIEByZXR1cm5zIHtudW1iZXJ9IFRoZSBjb3JyZXNwb25kaW5nIGNvbnN0YW50LCB3aGljaCBkZXNjcmliZXNcbiAqICAgICAgICAgICAgICAgICAgIHRoZSBjdXJyZW50IGFwcGxpY2F0aW9uIHN0YXRlOlxuICogMCAtIGlzIHRoZSBhcHAgaXMgbm90IGluc3RhbGxlZFxuICogMSAtIGlmIHRoZSBhcHAgaXMgaW5zdGFsbGVkLCBidXQgaXMgbm90IHJ1bm5pbmdcbiAqIDMgLSBpZiB0aGUgYXBwIGlzIHJ1bm5pbmcgaW4gdGhlIGJhY2tncm91bmRcbiAqIDQgLSBpZiB0aGUgYXBwIGlzIHJ1bm5pbmcgaW4gdGhlIGZvcmVncm91bmRcbiAqL1xuY29tbWFuZHMucXVlcnlBcHBTdGF0ZSA9IGFzeW5jIGZ1bmN0aW9uIHF1ZXJ5QXBwU3RhdGUgKGFwcElkKSB7XG4gIHRoaXMubG9nLmluZm8oYFF1ZXJ5aW5nIHRoZSBzdGF0ZSBvZiAnJHthcHBJZH0nYCk7XG4gIGlmICghYXdhaXQgdGhpcy5hZGIuaXNBcHBJbnN0YWxsZWQoYXBwSWQpKSB7XG4gICAgcmV0dXJuIEFQUF9TVEFURS5OT1RfSU5TVEFMTEVEO1xuICB9XG4gIGlmICghYXdhaXQgdGhpcy5hZGIucHJvY2Vzc0V4aXN0cyhhcHBJZCkpIHtcbiAgICByZXR1cm4gQVBQX1NUQVRFLk5PVF9SVU5OSU5HO1xuICB9XG4gIGNvbnN0IGFwcElkUmUgPSBuZXcgUmVnRXhwKGBcXFxcYiR7Xy5lc2NhcGVSZWdFeHAoYXBwSWQpfS9gKTtcbiAgZm9yIChjb25zdCBsaW5lIG9mIChhd2FpdCB0aGlzLmFkYi5kdW1wV2luZG93cygpKS5zcGxpdCgnXFxuJykpIHtcbiAgICBpZiAoYXBwSWRSZS50ZXN0KGxpbmUpICYmIFsnbUN1cnJlbnRGb2N1cycsICdtRm9jdXNlZEFwcCddLnNvbWUoKHgpID0+IGxpbmUuaW5jbHVkZXMoeCkpKSB7XG4gICAgICByZXR1cm4gQVBQX1NUQVRFLlJVTk5JTkdfSU5fRk9SRUdST1VORDtcbiAgICB9XG4gIH1cbiAgcmV0dXJuIEFQUF9TVEFURS5SVU5OSU5HX0lOX0JBQ0tHUk9VTkQ7XG59O1xuXG4vKipcbiAqIEB0eXBlZGVmIHtPYmplY3R9IE1vYmlsZVF1ZXJ5QXBwU3RhdGVPcHRpb25zXG4gKiBAcHJvcGVydHkge3N0cmluZ30gYXBwSWQgLSBBcHBsaWNhdGlvbiBwYWNrYWdlIGlkZW50aWZpZXIuIE11c3QgYmUgYWx3YXlzIHByb3ZpZGVkLlxuICovXG5cbi8qKlxuICogUXVlcmllcyB0aGUgY3VycmVudCBzdGF0ZSBvZiB0aGUgYXBwLlxuICpcbiAqIEBwYXJhbSB7TW9iaWxlUXVlcnlBcHBTdGF0ZU9wdGlvbnN9IG9wdHNcbiAqIEByZXR1cm5zIHtudW1iZXJ9IFNhbWUgYXMgaW4gYHF1ZXJ5QXBwU3RhdGVgXG4gKi9cbmNvbW1hbmRzLm1vYmlsZVF1ZXJ5QXBwU3RhdGUgPSBhc3luYyBmdW5jdGlvbiBtb2JpbGVRdWVyeUFwcFN0YXRlIChvcHRzID0ge30pIHtcbiAgY29uc3QgeyBhcHBJZCB9ID0gcmVxdWlyZUFyZ3MoJ2FwcElkJywgb3B0cyk7XG4gIHJldHVybiBhd2FpdCB0aGlzLnF1ZXJ5QXBwU3RhdGUoYXBwSWQpO1xufTtcblxuLyoqXG4gKiBBY3RpdmF0ZXMgdGhlIGdpdmVuIGFwcGxpY2F0aW9uIG9yIGxhdW5jaGVzIGl0IGlmIG5lY2Vzc2FyeS5cbiAqIFRoZSBhY3Rpb24gbGl0ZXJhbGx5IHNpbXVsYXRlc1xuICogY2xpY2tpbmcgdGhlIGNvcnJlc3BvbmRpbmcgYXBwbGljYXRpb24gaWNvbiBvbiB0aGUgZGFzaGJvYXJkLlxuICpcbiAqIEBwYXJhbSB7c3RyaW5nfSBhcHBJZCAtIEFwcGxpY2F0aW9uIHBhY2thZ2UgaWRlbnRpZmllclxuICogQHRocm93cyB7RXJyb3J9IElmIHRoZSBhcHAgY2Fubm90IGJlIGFjdGl2YXRlZFxuICovXG5jb21tYW5kcy5hY3RpdmF0ZUFwcCA9IGFzeW5jIGZ1bmN0aW9uIGFjdGl2YXRlQXBwIChhcHBJZCkge1xuICB0aGlzLmxvZy5kZWJ1ZyhgQWN0aXZhdGluZyAnJHthcHBJZH0nYCk7XG4gIGNvbnN0IGFwaUxldmVsID0gYXdhaXQgdGhpcy5hZGIuZ2V0QXBpTGV2ZWwoKTtcbiAgLy8gRmFsbGJhY2sgdG8gTW9ua2V5IGluIG9sZGVyIEFQSXNcbiAgaWYgKGFwaUxldmVsIDwgMjQpIHtcbiAgICAvLyBUaGUgbW9ua2V5IGNvbW1hbmQgY291bGQgcmFpc2UgYW4gaXNzdWUgYXMgaHR0cHM6Ly9zdGFja292ZXJmbG93LmNvbS9xdWVzdGlvbnMvNDQ4NjA0NzUvaG93LXRvLXVzZS10aGUtbW9ua2V5LWNvbW1hbmQtd2l0aC1hbi1hbmRyb2lkLXN5c3RlbS10aGF0LWRvZXNudC1oYXZlLXBoeXNpY2FsXG4gICAgLy8gYnV0ICctLXBjdC1zeXNrZXlzIDAnIGNvdWxkIGNhdXNlIGFub3RoZXIgYmFja2dyb3VuZCBwcm9jZXNzIGlzc3VlLiBodHRwczovL2dpdGh1Yi5jb20vYXBwaXVtL2FwcGl1bS9pc3N1ZXMvMTY5NDEjaXNzdWVjb21tZW50LTExMjk4MzcyODVcbiAgICBjb25zdCBjbWQgPSBbJ21vbmtleScsXG4gICAgICAnLXAnLCBhcHBJZCxcbiAgICAgICctYycsICdhbmRyb2lkLmludGVudC5jYXRlZ29yeS5MQVVOQ0hFUicsXG4gICAgICAnMSddO1xuICAgIGxldCBvdXRwdXQgPSAnJztcbiAgICB0cnkge1xuICAgICAgb3V0cHV0ID0gYXdhaXQgdGhpcy5hZGIuc2hlbGwoY21kKTtcbiAgICAgIHRoaXMubG9nLmRlYnVnKGBDb21tYW5kIHN0ZG91dDogJHtvdXRwdXR9YCk7XG4gICAgfSBjYXRjaCAoZSkge1xuICAgICAgdGhpcy5sb2cuZXJyb3JBbmRUaHJvdyhgQ2Fubm90IGFjdGl2YXRlICcke2FwcElkfScuIE9yaWdpbmFsIGVycm9yOiAke2UubWVzc2FnZX1gKTtcbiAgICB9XG4gICAgaWYgKG91dHB1dC5pbmNsdWRlcygnbW9ua2V5IGFib3J0ZWQnKSkge1xuICAgICAgdGhpcy5sb2cuZXJyb3JBbmRUaHJvdyhgQ2Fubm90IGFjdGl2YXRlICcke2FwcElkfScuIEFyZSB5b3Ugc3VyZSBpdCBpcyBpbnN0YWxsZWQ/YCk7XG4gICAgfVxuICAgIHJldHVybjtcbiAgfVxuXG4gIGxldCBhY3Rpdml0eU5hbWUgPSBhd2FpdCB0aGlzLmFkYi5yZXNvbHZlTGF1bmNoYWJsZUFjdGl2aXR5KGFwcElkKTtcbiAgaWYgKGFjdGl2aXR5TmFtZSA9PT0gUkVTT0xWRVJfQUNUSVZJVFlfTkFNRSkge1xuICAgIC8vIGh0dHBzOi8vZ2l0aHViLmNvbS9hcHBpdW0vYXBwaXVtL2lzc3Vlcy8xNzEyOFxuICAgIHRoaXMubG9nLmRlYnVnKFxuICAgICAgYFRoZSBsYXVuY2hhYmxlIGFjdGl2aXR5IG5hbWUgb2YgJyR7YXBwSWR9JyB3YXMgcmVzb2x2ZWQgdG8gJyR7YWN0aXZpdHlOYW1lfScuIGAgK1xuICAgICAgYFN3aXRjaGluZyB0aGUgcmVzb2x2ZXIgdG8gbm90IHVzZSBjbWRgXG4gICAgKTtcbiAgICBhY3Rpdml0eU5hbWUgPSBhd2FpdCB0aGlzLmFkYi5yZXNvbHZlTGF1bmNoYWJsZUFjdGl2aXR5KGFwcElkLCB7cHJlZmVyQ21kOiBmYWxzZX0pO1xuICB9XG5cbiAgY29uc3Qgc3Rkb3V0ID0gYXdhaXQgdGhpcy5hZGIuc2hlbGwoW1xuICAgICdhbScsIChhcGlMZXZlbCA8IDI2KSA/ICdzdGFydCcgOiAnc3RhcnQtYWN0aXZpdHknLFxuICAgICctYScsICdhbmRyb2lkLmludGVudC5hY3Rpb24uTUFJTicsXG4gICAgJy1jJywgJ2FuZHJvaWQuaW50ZW50LmNhdGVnb3J5LkxBVU5DSEVSJyxcbiAgICAvLyBGTEFHX0FDVElWSVRZX05FV19UQVNLIHwgRkxBR19BQ1RJVklUWV9SRVNFVF9UQVNLX0lGX05FRURFRFxuICAgIC8vIGh0dHBzOi8vZGV2ZWxvcGVyLmFuZHJvaWQuY29tL3JlZmVyZW5jZS9hbmRyb2lkL2NvbnRlbnQvSW50ZW50I0ZMQUdfQUNUSVZJVFlfTkVXX1RBU0tcbiAgICAvLyBodHRwczovL2RldmVsb3Blci5hbmRyb2lkLmNvbS9yZWZlcmVuY2UvYW5kcm9pZC9jb250ZW50L0ludGVudCNGTEFHX0FDVElWSVRZX1JFU0VUX1RBU0tfSUZfTkVFREVEXG4gICAgJy1mJywgJzB4MTAyMDAwMDAnLFxuICAgICctbicsIGFjdGl2aXR5TmFtZSxcbiAgXSk7XG4gIHRoaXMubG9nLmRlYnVnKHN0ZG91dCk7XG4gIGlmICgvXmVycm9yOi9taS50ZXN0KHN0ZG91dCkpIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoYENhbm5vdCBhY3RpdmF0ZSAnJHthcHBJZH0nLiBPcmlnaW5hbCBlcnJvcjogJHtzdGRvdXR9YCk7XG4gIH1cbn07XG5cbi8qKlxuICogQHR5cGVkZWYge09iamVjdH0gTW9iaWxlQWN0aXZhdGVBcHBPcHRpb25zXG4gKiBAcHJvcGVydHkge3N0cmluZ30gYXBwSWQgLSBBcHBsaWNhdGlvbiBwYWNrYWdlIGlkZW50aWZpZXIuIE11c3QgYmUgYWx3YXlzIHByb3ZpZGVkLlxuICovXG5cbi8qKlxuICogQWN0aXZhdGVzIHRoZSBnaXZlbiBhcHBsaWNhdGlvbiBvciBsYXVuY2hlcyBpdCBpZiBuZWNlc3NhcnkuXG4gKiBUaGUgYWN0aW9uIGxpdGVyYWxseSBzaW11bGF0ZXNcbiAqIGNsaWNraW5nIHRoZSBjb3JyZXNwb25kaW5nIGFwcGxpY2F0aW9uIGljb24gb24gdGhlIGRhc2hib2FyZC5cbiAqXG4gKiBAcGFyYW0ge01vYmlsZUFjdGl2YXRlQXBwT3B0aW9uc30gb3B0c1xuICogQHRocm93cyB7RXJyb3J9IElmIHRoZSBhcHAgY2Fubm90IGJlIGFjdGl2YXRlZFxuICovXG5jb21tYW5kcy5tb2JpbGVBY3RpdmF0ZUFwcCA9IGFzeW5jIGZ1bmN0aW9uIG1vYmlsZUFjdGl2YXRlQXBwIChvcHRzID0ge30pIHtcbiAgY29uc3QgeyBhcHBJZCB9ID0gcmVxdWlyZUFyZ3MoJ2FwcElkJywgb3B0cyk7XG4gIHJldHVybiBhd2FpdCB0aGlzLmFjdGl2YXRlQXBwKGFwcElkKTtcbn07XG5cbi8qKlxuICogQHR5cGVkZWYge09iamVjdH0gVW5pbnN0YWxsT3B0aW9uc1xuICogQHByb3BlcnR5IHtudW1iZXJ9IHRpbWVvdXQgWzIwMDAwXSAtIFRoZSBjb3VudCBvZiBtaWxsaXNlY29uZHMgdG8gd2FpdCB1bnRpbCB0aGVcbiAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhcHAgaXMgdW5pbnN0YWxsZWQuXG4gKiBAcHJvcGVydHkge2Jvb2xlYW59IGtlZXBEYXRhIFtmYWxzZV0gLSBTZXQgdG8gdHJ1ZSBpbiBvcmRlciB0byBrZWVwIHRoZVxuICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYXBwbGljYXRpb24gZGF0YSBhbmQgY2FjaGUgZm9sZGVycyBhZnRlciB1bmluc3RhbGwuXG4gKi9cblxuLyoqXG4gKiBSZW1vdmUgdGhlIGNvcnJlc3BvbmRpbmcgYXBwbGljYXRpb24gaWYgaXMgaW5zdGFsbGVkLlxuICogVGhlIGNhbGwgaXMgaWdub3JlZCBpZiB0aGUgYXBwIGlzIG5vdCBpbnN0YWxsZWQuXG4gKlxuICogQHBhcmFtIHtzdHJpbmd9IGFwcElkIC0gQXBwbGljYXRpb24gcGFja2FnZSBpZGVudGlmaWVyXG4gKiBAcGFyYW0gez9Vbmluc3RhbGxPcHRpb25zfSBvcHRpb25zIC0gVGhlIHNldCBvZiByZW1vdmFsIG9wdGlvbnNcbiAqIEByZXR1cm5zIHtib29sZWFufSBUcnVlIGlmIHRoZSBwYWNrYWdlIHdhcyBmb3VuZCBvbiB0aGUgZGV2aWNlIGFuZFxuICogICAgICAgICAgICAgICAgICAgIHN1Y2Nlc3NmdWxseSB1bmluc3RhbGxlZC5cbiAqL1xuY29tbWFuZHMucmVtb3ZlQXBwID0gYXN5bmMgZnVuY3Rpb24gcmVtb3ZlQXBwIChhcHBJZCwgb3B0aW9ucyA9IHt9KSB7XG4gIHJldHVybiBhd2FpdCB0aGlzLmFkYi51bmluc3RhbGxBcGsoYXBwSWQsIG9wdGlvbnMpO1xufTtcblxuLyoqXG4gKiBAdHlwZWRlZiB7T2JqZWN0fSBNb2JpbGVSZW1vdmVBcHBPcHRpb25zXG4gKiBAcHJvcGVydHkge3N0cmluZ30gYXBwSWQgLSBBcHBsaWNhdGlvbiBwYWNrYWdlIGlkZW50aWZpZXIuIE11c3QgYmUgYWx3YXlzIHByb3ZpZGVkLlxuICovXG5cbi8qKlxuICogUmVtb3ZlIHRoZSBjb3JyZXNwb25kaW5nIGFwcGxpY2F0aW9uIGlmIGlzIGluc3RhbGxlZC5cbiAqIFRoZSBjYWxsIGlzIGlnbm9yZWQgaWYgdGhlIGFwcCBpcyBub3QgaW5zdGFsbGVkLlxuICpcbiAqIEBwYXJhbSB7TW9iaWxlUmVtb3ZlQXBwT3B0aW9uc30gb3B0c1xuICogQHJldHVybnMge2Jvb2xlYW59IFNhbWUgYXMgaW4gYHJlbW92ZUFwcGBcbiAqL1xuY29tbWFuZHMubW9iaWxlUmVtb3ZlQXBwID0gYXN5bmMgZnVuY3Rpb24gbW9iaWxlUmVtb3ZlQXBwIChvcHRzID0ge30pIHtcbiAgY29uc3QgeyBhcHBJZCB9ID0gcmVxdWlyZUFyZ3MoJ2FwcElkJywgb3B0cyk7XG4gIHJldHVybiBhd2FpdCB0aGlzLnJlbW92ZUFwcChhcHBJZCwgb3B0cyk7XG59O1xuXG4vKipcbiAqIEB0eXBlZGVmIHtPYmplY3R9IFRlcm1pbmF0ZU9wdGlvbnNcbiAqIEBwcm9wZXJ0eSB7bnVtYmVyfHN0cmluZ30gdGltZW91dCBbNTAwXSAtIFRoZSBjb3VudCBvZiBtaWxsaXNlY29uZHMgdG8gd2FpdCB1bnRpbCB0aGVcbiAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFwcCBpcyB0ZXJtaW5hdGVkLiBUaGUgbWV0aG9kIHdpbGwgc2tpcFxuICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2hlY2tpbmcgdGhlIGFwcCBzdGF0ZSBjaGVjayBpZiB0aGUgdGltZW91dFxuICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgd2FzIGxvd2VyIG9yIGVxdWFsIHRvIHplcm8uIFRoZW4sIHRoZSByZXR1cm5cbiAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhbHVlIHdpbGwgYmUgdHJ1ZS5cbiAqL1xuXG4vKipcbiAqIFRlcm1pbmF0ZXMgdGhlIGFwcCBpZiBpdCBpcyBydW5uaW5nLiBJZiB0aGUgZ2l2ZW4gdGltZW91dCB3YXMgbG93ZXIgb3IgZXF1YWwgdG8gemVybyxcbiAqIGl0IHJldHVybnMgdHJ1ZSBhZnRlciB0ZXJtaW5hdGluZyB0aGUgYXBwIHdpdGhvdXQgY2hlY2tpbmcgdGhlIGFwcCBzdGF0ZS5cbiAqXG4gKiBAcGFyYW0ge3N0cmluZ30gYXBwSWQgLSBBcHBsaWNhdGlvbiBwYWNrYWdlIGlkZW50aWZpZXJcbiAqIEBwYXJhbSB7P1Rlcm1pbmF0ZU9wdGlvbnN9IG9wdGlvbnMgLSBUaGUgc2V0IG9mIGFwcGxpY2F0aW9uIHRlcm1pbmF0aW9uIG9wdGlvbnNcbiAqIEByZXR1cm5zIHtib29sZWFufSBUcnVlIGlmIHRoZSBhcHAgaGFzIGJlZW4gc3VjY2Vzc2Z1bGx5IHRlcm1pbmF0ZWQuXG4gKiBAdGhyb3dzIHtFcnJvcn0gaWYgdGhlIGFwcCBoYXMgbm90IGJlZW4gdGVybWluYXRlZCB3aXRoaW4gdGhlIGdpdmVuIHRpbWVvdXQuXG4gKi9cbmNvbW1hbmRzLnRlcm1pbmF0ZUFwcCA9IGFzeW5jIGZ1bmN0aW9uIHRlcm1pbmF0ZUFwcCAoYXBwSWQsIG9wdGlvbnMgPSB7fSkge1xuICB0aGlzLmxvZy5pbmZvKGBUZXJtaW5hdGluZyAnJHthcHBJZH0nYCk7XG4gIGlmICghKGF3YWl0IHRoaXMuYWRiLnByb2Nlc3NFeGlzdHMoYXBwSWQpKSkge1xuICAgIHRoaXMubG9nLmluZm8oYFRoZSBhcHAgJyR7YXBwSWR9JyBpcyBub3QgcnVubmluZ2ApO1xuICAgIHJldHVybiBmYWxzZTtcbiAgfVxuICBhd2FpdCB0aGlzLmFkYi5mb3JjZVN0b3AoYXBwSWQpO1xuICBjb25zdCB0aW1lb3V0ID0gdXRpbC5oYXNWYWx1ZShvcHRpb25zLnRpbWVvdXQpICYmICFpc05hTihvcHRpb25zLnRpbWVvdXQpID8gcGFyc2VJbnQob3B0aW9ucy50aW1lb3V0LCAxMCkgOiA1MDA7XG5cbiAgaWYgKHRpbWVvdXQgPD0gMCkge1xuICAgIHRoaXMubG9nLmluZm8oYCcke2FwcElkfScgaGFzIGJlZW4gdGVybWluYXRlZC4gU2tpcCBjaGVja2luZyB0aGUgYXBwbGljYXRpb24gcHJvY2VzcyBzdGF0ZSBgICtcbiAgICAgIGBzaW5jZSB0aGUgdGltZW91dCB3YXMgc2V0IGFzICR7dGltZW91dH1tc2ApO1xuICAgIHJldHVybiB0cnVlO1xuICB9XG5cbiAgdHJ5IHtcbiAgICBhd2FpdCB3YWl0Rm9yQ29uZGl0aW9uKGFzeW5jICgpID0+IGF3YWl0IHRoaXMucXVlcnlBcHBTdGF0ZShhcHBJZCkgPD0gQVBQX1NUQVRFLk5PVF9SVU5OSU5HLFxuICAgICAge3dhaXRNczogdGltZW91dCwgaW50ZXJ2YWxNczogMTAwfSk7XG4gIH0gY2F0Y2ggKGUpIHtcbiAgICB0aGlzLmxvZy5lcnJvckFuZFRocm93KGAnJHthcHBJZH0nIGlzIHN0aWxsIHJ1bm5pbmcgYWZ0ZXIgJHt0aW1lb3V0fW1zIHRpbWVvdXRgKTtcbiAgfVxuICB0aGlzLmxvZy5pbmZvKGAnJHthcHBJZH0nIGhhcyBiZWVuIHN1Y2Nlc3NmdWxseSB0ZXJtaW5hdGVkYCk7XG4gIHJldHVybiB0cnVlO1xufTtcblxuLyoqXG4gKiBAdHlwZWRlZiB7T2JqZWN0fSBNb2JpbGVUZXJtaW5hdGVBcHBPcHRpb25zXG4gKiBAcHJvcGVydHkge3N0cmluZ30gYXBwSWQgLSBBcHBsaWNhdGlvbiBwYWNrYWdlIGlkZW50aWZpZXIuIE11c3QgYmUgYWx3YXlzIHByb3ZpZGVkLlxuICogQHByb3BlcnR5IHtudW1iZXJ8c3RyaW5nfSB0aW1lb3V0IFs1MDBdIC0gVGhlIGNvdW50IG9mIG1pbGxpc2Vjb25kcyB0byB3YWl0IHVudGlsIHRoZVxuICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYXBwIGlzIHRlcm1pbmF0ZWQuXG4gKi9cblxuLyoqXG4gKiBUZXJtaW5hdGVzIHRoZSBhcHAgaWYgaXQgaXMgcnVubmluZy5cbiAqXG4gKiBAcGFyYW0ge01vYmlsZVRlcm1pbmF0ZUFwcE9wdGlvbnN9IG9wdHNcbiAqIEByZXR1cm5zIHtib29sZWFufSBTYW1lIGFzIGluIGB0ZXJtaW5hdGVBcHBgXG4gKiBAdGhyb3dzIHtFcnJvcn0gaWYgdGhlIGFwcCBoYXMgbm90IGJlZW4gdGVybWluYXRlZCB3aXRoaW4gdGhlIGdpdmVuIHRpbWVvdXQuXG4gKi9cbmNvbW1hbmRzLm1vYmlsZVRlcm1pbmF0ZUFwcCA9IGFzeW5jIGZ1bmN0aW9uIG1vYmlsZVRlcm1pbmF0ZUFwcCAob3B0cyA9IHt9KSB7XG4gIGNvbnN0IHsgYXBwSWQgfSA9IHJlcXVpcmVBcmdzKCdhcHBJZCcsIG9wdHMpO1xuICByZXR1cm4gYXdhaXQgdGhpcy50ZXJtaW5hdGVBcHAoYXBwSWQsIG9wdHMpO1xufTtcblxuLyoqXG4gKiBAdHlwZWRlZiB7T2JqZWN0fSBJbnN0YWxsT3B0aW9uc1xuICogQHByb3BlcnR5IHtudW1iZXJ9IHRpbWVvdXQgWzYwMDAwXSAtIFRoZSBjb3VudCBvZiBtaWxsaXNlY29uZHMgdG8gd2FpdCB1bnRpbCB0aGVcbiAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhcHAgaXMgaW5zdGFsbGVkLlxuICogQHByb3BlcnR5IHtib29sZWFufSBhbGxvd1Rlc3RQYWNrYWdlcyBbZmFsc2VdIC0gU2V0IHRvIHRydWUgaW4gb3JkZXIgdG8gYWxsb3cgdGVzdFxuICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcGFja2FnZXMgaW5zdGFsbGF0aW9uLlxuICogQHByb3BlcnR5IHtib29sZWFufSB1c2VTZGNhcmQgW2ZhbHNlXSAtIFNldCB0byB0cnVlIHRvIGluc3RhbGwgdGhlIGFwcCBvbiBzZGNhcmRcbiAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnN0ZWFkIG9mIHRoZSBkZXZpY2UgbWVtb3J5LlxuICogQHByb3BlcnR5IHtib29sZWFufSBncmFudFBlcm1pc3Npb25zIFtmYWxzZV0gLSBTZXQgdG8gdHJ1ZSBpbiBvcmRlciB0byBncmFudCBhbGwgdGhlXG4gKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBlcm1pc3Npb25zIHJlcXVlc3RlZCBpbiB0aGUgYXBwbGljYXRpb24ncyBtYW5pZmVzdFxuICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhdXRvbWF0aWNhbGx5IGFmdGVyIHRoZSBpbnN0YWxsYXRpb24gaXMgY29tcGxldGVkXG4gKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVuZGVyIEFuZHJvaWQgNisuXG4gKiBAcHJvcGVydHkge2Jvb2xlYW59IHJlcGxhY2UgW3RydWVdIC0gU2V0IGl0IHRvIGZhbHNlIGlmIHlvdSBkb24ndCB3YW50XG4gKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhlIGFwcGxpY2F0aW9uIHRvIGJlIHVwZ3JhZGVkL3JlaW5zdGFsbGVkXG4gKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgaXQgaXMgYWxyZWFkeSBwcmVzZW50IG9uIHRoZSBkZXZpY2UuXG4gKi9cblxuLyoqXG4gKiBJbnN0YWxscyB0aGUgZ2l2ZW4gYXBwbGljYXRpb24gdG8gdGhlIGRldmljZSB1bmRlciB0ZXN0XG4gKlxuICogQHBhcmFtIHtzdHJpbmd9IGFwcFBhdGggLSBUaGUgbG9jYWwgYXBrIHBhdGggb3IgYSByZW1vdGUgdXJsXG4gKiBAcGFyYW0gez9JbnN0YWxsT3B0aW9uc30gb3B0aW9ucyAtIFRoZSBzZXQgb2YgaW5zdGFsbGF0aW9uIG9wdGlvbnNcbiAqIEB0aHJvd3Mge0Vycm9yfSBpZiB0aGUgZ2l2ZW4gYXBrIGRvZXMgbm90IGV4aXN0IG9yIGlzIG5vdCByZWFjaGFibGVcbiAqL1xuY29tbWFuZHMuaW5zdGFsbEFwcCA9IGFzeW5jIGZ1bmN0aW9uIGluc3RhbGxBcHAgKGFwcFBhdGgsIG9wdGlvbnMgPSB7fSkge1xuICBjb25zdCBsb2NhbFBhdGggPSBhd2FpdCB0aGlzLmhlbHBlcnMuY29uZmlndXJlQXBwKGFwcFBhdGgsIEFQUF9FWFRFTlNJT05TKTtcbiAgYXdhaXQgdGhpcy5hZGIuaW5zdGFsbChsb2NhbFBhdGgsIG9wdGlvbnMpO1xufTtcblxuLyoqXG4gKiBAdHlwZWRlZiB7T2JqZWN0fSBNb2JpbGVJbnN0YWxsQXBwT3B0aW9uc1xuICogQHByb3BlcnR5IHtzdHJpbmd9IGFwcFBhdGggLSBUaGUgbG9jYWwgYXBrIHBhdGggb3IgYSByZW1vdGUgdXJsLiBNdXN0IGJlIGFsd2F5cyBwcm92aWRlZC5cbiAqIEBwcm9wZXJ0eSB7bnVtYmVyfSB0aW1lb3V0IFs2MDAwMF0gLSBUaGUgY291bnQgb2YgbWlsbGlzZWNvbmRzIHRvIHdhaXQgdW50aWwgdGhlXG4gKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYXBwIGlzIGluc3RhbGxlZC5cbiAqIEBwcm9wZXJ0eSB7Ym9vbGVhbn0gYWxsb3dUZXN0UGFja2FnZXMgW2ZhbHNlXSAtIFNldCB0byB0cnVlIGluIG9yZGVyIHRvIGFsbG93IHRlc3RcbiAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBhY2thZ2VzIGluc3RhbGxhdGlvbi5cbiAqIEBwcm9wZXJ0eSB7Ym9vbGVhbn0gdXNlU2RjYXJkIFtmYWxzZV0gLSBTZXQgdG8gdHJ1ZSB0byBpbnN0YWxsIHRoZSBhcHAgb24gc2RjYXJkXG4gKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW5zdGVhZCBvZiB0aGUgZGV2aWNlIG1lbW9yeS5cbiAqIEBwcm9wZXJ0eSB7Ym9vbGVhbn0gZ3JhbnRQZXJtaXNzaW9ucyBbZmFsc2VdIC0gU2V0IHRvIHRydWUgaW4gb3JkZXIgdG8gZ3JhbnQgYWxsIHRoZVxuICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwZXJtaXNzaW9ucyByZXF1ZXN0ZWQgaW4gdGhlIGFwcGxpY2F0aW9uJ3MgbWFuaWZlc3RcbiAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYXV0b21hdGljYWxseSBhZnRlciB0aGUgaW5zdGFsbGF0aW9uIGlzIGNvbXBsZXRlZFxuICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1bmRlciBBbmRyb2lkIDYrLlxuICogQHByb3BlcnR5IHtib29sZWFufSByZXBsYWNlIFt0cnVlXSAtIFNldCBpdCB0byBmYWxzZSBpZiB5b3UgZG9uJ3Qgd2FudFxuICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoZSBhcHBsaWNhdGlvbiB0byBiZSB1cGdyYWRlZC9yZWluc3RhbGxlZFxuICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIGl0IGlzIGFscmVhZHkgcHJlc2VudCBvbiB0aGUgZGV2aWNlLlxuICovXG5cbi8qKlxuICogSW5zdGFsbHMgdGhlIGdpdmVuIGFwcGxpY2F0aW9uIHRvIHRoZSBkZXZpY2UgdW5kZXIgdGVzdFxuICpcbiAqIEBwYXJhbSB7TW9iaWxlSW5zdGFsbEFwcE9wdGlvbnN9IG9wdHNcbiAqIEB0aHJvd3Mge0Vycm9yfSBpZiB0aGUgZ2l2ZW4gYXBrIGRvZXMgbm90IGV4aXN0IG9yIGlzIG5vdCByZWFjaGFibGVcbiAqL1xuY29tbWFuZHMubW9iaWxlSW5zdGFsbEFwcCA9IGFzeW5jIGZ1bmN0aW9uIG1vYmlsZUluc3RhbGxBcHAgKG9wdHMgPSB7fSkge1xuICBjb25zdCB7IGFwcFBhdGggfSA9IHJlcXVpcmVBcmdzKCdhcHBQYXRoJywgb3B0cyk7XG4gIHJldHVybiBhd2FpdCB0aGlzLmluc3RhbGxBcHAoYXBwUGF0aCwgb3B0cyk7XG59O1xuXG4vKipcbiAqIEB0eXBlZGVmIHtPYmplY3R9IENsZWFyQXBwT3B0aW9uc1xuICogQHByb3BlcnR5IHshc3RyaW5nfSBhcHBJZCBUaGUgaWRlbnRpZmllciBvZiB0aGUgYXBwbGljYXRpb24gcGFja2FnZSB0byBiZSBjbGVhcmVkXG4gKi9cblxuLyoqXG4gKiBEZWxldGVzIGFsbCBkYXRhIGFzc29jaWF0ZWQgd2l0aCBhIHBhY2thZ2UuXG4gKlxuICogQHBhcmFtIHtDbGVhckFwcE9wdGlvbnN9IG9wdHNcbiAqIEB0aHJvd3Mge0Vycm9yfSBJZiBjbGVhbmluZyBvZiB0aGUgYXBwIGRhdGEgZmFpbHNcbiAqL1xuY29tbWFuZHMubW9iaWxlQ2xlYXJBcHAgPSBhc3luYyBmdW5jdGlvbiBtb2JpbGVDbGVhckFwcCAob3B0cyA9IHt9KSB7XG4gIGNvbnN0IHthcHBJZH0gPSBvcHRzO1xuICBpZiAoIWFwcElkKSB7XG4gICAgdGhyb3cgbmV3IGVycm9ycy5JbnZhbGlkQXJndW1lbnRFcnJvcihgVGhlICdhcHBJZCcgYXJndW1lbnQgaXMgcmVxdWlyZWRgKTtcbiAgfVxuICBhd2FpdCB0aGlzLmFkYi5jbGVhcihhcHBJZCk7XG59O1xuXG5leHBvcnQgeyBjb21tYW5kcyB9O1xuZXhwb3J0IGRlZmF1bHQgY29tbWFuZHM7XG4iXSwibWFwcGluZ3MiOiI7Ozs7Ozs7O0FBQUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBRUEsTUFBTUEsY0FBYyxHQUFHLENBQUMsTUFBTSxFQUFFLE9BQU8sQ0FBQztBQUN4QyxNQUFNQyxzQkFBc0IsR0FBRyxtREFBbUQ7QUFFbEYsTUFBTUMsUUFBUSxHQUFHLENBQUMsQ0FBQztBQUFDO0FBUXBCQSxRQUFRLENBQUNDLGNBQWMsR0FBRyxlQUFlQSxjQUFjLENBQUVDLEtBQUssRUFBRTtFQUM5RCxPQUFPLE1BQU0sSUFBSSxDQUFDQyxHQUFHLENBQUNGLGNBQWMsQ0FBQ0MsS0FBSyxDQUFDO0FBQzdDLENBQUM7QUFhREYsUUFBUSxDQUFDSSxvQkFBb0IsR0FBRyxlQUFlQSxvQkFBb0IsQ0FBRUMsSUFBSSxHQUFHLENBQUMsQ0FBQyxFQUFFO0VBQzlFLE1BQU07SUFBRUg7RUFBTSxDQUFDLEdBQUcsSUFBQUksa0JBQVcsRUFBQyxPQUFPLEVBQUVELElBQUksQ0FBQztFQUM1QyxPQUFPLE1BQU0sSUFBSSxDQUFDSixjQUFjLENBQUNDLEtBQUssQ0FBQztBQUN6QyxDQUFDO0FBYURGLFFBQVEsQ0FBQ08sYUFBYSxHQUFHLGVBQWVBLGFBQWEsQ0FBRUwsS0FBSyxFQUFFO0VBQzVELElBQUksQ0FBQ00sR0FBRyxDQUFDQyxJQUFJLENBQUUsMEJBQXlCUCxLQUFNLEdBQUUsQ0FBQztFQUNqRCxJQUFJLEVBQUMsTUFBTSxJQUFJLENBQUNDLEdBQUcsQ0FBQ0YsY0FBYyxDQUFDQyxLQUFLLENBQUMsR0FBRTtJQUN6QyxPQUFPUSx5QkFBUyxDQUFDQyxhQUFhO0VBQ2hDO0VBQ0EsSUFBSSxFQUFDLE1BQU0sSUFBSSxDQUFD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
|
|
145
|
+
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJfbG9kYXNoIiwiX2ludGVyb3BSZXF1aXJlRGVmYXVsdCIsInJlcXVpcmUiLCJfYXN5bmNib3giLCJfc3VwcG9ydCIsIl9hbmRyb2lkSGVscGVycyIsIl9kcml2ZXIiLCJfdXRpbHMiLCJBUFBfRVhURU5TSU9OUyIsIlJFU09MVkVSX0FDVElWSVRZX05BTUUiLCJjb21tYW5kcyIsImV4cG9ydHMiLCJpc0FwcEluc3RhbGxlZCIsImFwcElkIiwiYWRiIiwibW9iaWxlSXNBcHBJbnN0YWxsZWQiLCJvcHRzIiwicmVxdWlyZUFyZ3MiLCJxdWVyeUFwcFN0YXRlIiwibG9nIiwiaW5mbyIsIkFQUF9TVEFURSIsIk5PVF9JTlNUQUxMRUQiLCJwcm9jZXNzRXhpc3RzIiwiTk9UX1JVTk5JTkciLCJhcHBJZFJlIiwiUmVnRXhwIiwiXyIsImVzY2FwZVJlZ0V4cCIsImxpbmUiLCJkdW1wV2luZG93cyIsInNwbGl0IiwidGVzdCIsInNvbWUiLCJ4IiwiaW5jbHVkZXMiLCJSVU5OSU5HX0lOX0ZPUkVHUk9VTkQiLCJSVU5OSU5HX0lOX0JBQ0tHUk9VTkQiLCJtb2JpbGVRdWVyeUFwcFN0YXRlIiwiYWN0aXZhdGVBcHAiLCJkZWJ1ZyIsImFwaUxldmVsIiwiZ2V0QXBpTGV2ZWwiLCJjbWQiLCJvdXRwdXQiLCJzaGVsbCIsImUiLCJlcnJvckFuZFRocm93IiwibWVzc2FnZSIsImFjdGl2aXR5TmFtZSIsInJlc29sdmVMYXVuY2hhYmxlQWN0aXZpdHkiLCJwcmVmZXJDbWQiLCJzdGRvdXQiLCJFcnJvciIsIm1vYmlsZUFjdGl2YXRlQXBwIiwicmVtb3ZlQXBwIiwib3B0aW9ucyIsInVuaW5zdGFsbEFwayIsIm1vYmlsZVJlbW92ZUFwcCIsInRlcm1pbmF0ZUFwcCIsImZvcmNlU3RvcCIsInRpbWVvdXQiLCJ1dGlsIiwiaGFzVmFsdWUiLCJpc05hTiIsInBhcnNlSW50Iiwid2FpdEZvckNvbmRpdGlvbiIsIndhaXRNcyIsImludGVydmFsTXMiLCJtb2JpbGVUZXJtaW5hdGVBcHAiLCJpbnN0YWxsQXBwIiwiYXBwUGF0aCIsImxvY2FsUGF0aCIsImhlbHBlcnMiLCJjb25maWd1cmVBcHAiLCJpbnN0YWxsIiwibW9iaWxlSW5zdGFsbEFwcCIsIm1vYmlsZUNsZWFyQXBwIiwiZXJyb3JzIiwiSW52YWxpZEFyZ3VtZW50RXJyb3IiLCJjbGVhciIsIl9kZWZhdWx0IiwiZGVmYXVsdCJdLCJzb3VyY2VzIjpbIi4uLy4uLy4uL2xpYi9jb21tYW5kcy9hcHAtbWFuYWdlbWVudC5qcyJdLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgXyBmcm9tICdsb2Rhc2gnO1xuaW1wb3J0IHsgd2FpdEZvckNvbmRpdGlvbiB9IGZyb20gJ2FzeW5jYm94JztcbmltcG9ydCB7IHV0aWwgfSBmcm9tICdAYXBwaXVtL3N1cHBvcnQnO1xuaW1wb3J0IHsgQVBQX1NUQVRFIH0gZnJvbSAnLi4vYW5kcm9pZC1oZWxwZXJzJztcbmltcG9ydCB7IGVycm9ycyB9IGZyb20gJ2FwcGl1bS9kcml2ZXInO1xuaW1wb3J0IHsgcmVxdWlyZUFyZ3MgfSBmcm9tICcuLi91dGlscyc7XG5cbmNvbnN0IEFQUF9FWFRFTlNJT05TID0gWycuYXBrJywgJy5hcGtzJ107XG5jb25zdCBSRVNPTFZFUl9BQ1RJVklUWV9OQU1FID0gJ2FuZHJvaWQvY29tLmFuZHJvaWQuaW50ZXJuYWwuYXBwLlJlc29sdmVyQWN0aXZpdHknO1xuXG5jb25zdCBjb21tYW5kcyA9IHt9O1xuXG4vKipcbiAqIFZlcmlmeSB3aGV0aGVyIGFuIGFwcGxpY2F0aW9uIGlzIGluc3RhbGxlZCBvciBub3RcbiAqXG4gKiBAcGFyYW0ge3N0cmluZ30gYXBwSWQgLSBBcHBsaWNhdGlvbiBwYWNrYWdlIGlkZW50aWZpZXJcbiAqIEByZXR1cm5zIHtib29sZWFufSB0cnVlIGlmIHRoZSBhcHAgaXMgaW5zdGFsbGVkXG4gKi9cbmNvbW1hbmRzLmlzQXBwSW5zdGFsbGVkID0gYXN5bmMgZnVuY3Rpb24gaXNBcHBJbnN0YWxsZWQgKGFwcElkKSB7XG4gIHJldHVybiBhd2FpdCB0aGlzLmFkYi5pc0FwcEluc3RhbGxlZChhcHBJZCk7XG59O1xuXG4vKipcbiAqIEB0eXBlZGVmIHtPYmplY3R9IE1vYmlsZUFwcEluc3RhbGxlZE9wdGlvbnNcbiAqIEBwcm9wZXJ0eSB7c3RyaW5nfSBhcHBJZCAtIEFwcGxpY2F0aW9uIHBhY2thZ2UgaWRlbnRpZmllci4gTXVzdCBiZSBhbHdheXMgcHJvdmlkZWQuXG4gKi9cblxuLyoqXG4gKiBWZXJpZnkgd2hldGhlciBhbiBhcHBsaWNhdGlvbiBpcyBpbnN0YWxsZWQgb3Igbm90XG4gKlxuICogQHBhcmFtIHtNb2JpbGVBcHBJbnN0YWxsZWRPcHRpb25zfSBvcHRzXG4gKiBAcmV0dXJucyB7Ym9vbGVhbn0gU2FtZSBhcyBpbiBgaXNBcHBJbnN0YWxsZWRgXG4gKi9cbmNvbW1hbmRzLm1vYmlsZUlzQXBwSW5zdGFsbGVkID0gYXN5bmMgZnVuY3Rpb24gbW9iaWxlSXNBcHBJbnN0YWxsZWQgKG9wdHMgPSB7fSkge1xuICBjb25zdCB7IGFwcElkIH0gPSByZXF1aXJlQXJncygnYXBwSWQnLCBvcHRzKTtcbiAgcmV0dXJuIGF3YWl0IHRoaXMuaXNBcHBJbnN0YWxsZWQoYXBwSWQpO1xufTtcblxuLyoqXG4gKiBRdWVyaWVzIHRoZSBjdXJyZW50IHN0YXRlIG9mIHRoZSBhcHAuXG4gKlxuICogQHBhcmFtIHtzdHJpbmd9IGFwcElkIC0gQXBwbGljYXRpb24gcGFja2FnZSBpZGVudGlmaWVyXG4gKiBAcmV0dXJucyB7bnVtYmVyfSBUaGUgY29ycmVzcG9uZGluZyBjb25zdGFudCwgd2hpY2ggZGVzY3JpYmVzXG4gKiAgICAgICAgICAgICAgICAgICB0aGUgY3VycmVudCBhcHBsaWNhdGlvbiBzdGF0ZTpcbiAqIDAgLSBpcyB0aGUgYXBwIGlzIG5vdCBpbnN0YWxsZWRcbiAqIDEgLSBpZiB0aGUgYXBwIGlzIGluc3RhbGxlZCwgYnV0IGlzIG5vdCBydW5uaW5nXG4gKiAzIC0gaWYgdGhlIGFwcCBpcyBydW5uaW5nIGluIHRoZSBiYWNrZ3JvdW5kXG4gKiA0IC0gaWYgdGhlIGFwcCBpcyBydW5uaW5nIGluIHRoZSBmb3JlZ3JvdW5kXG4gKi9cbmNvbW1hbmRzLnF1ZXJ5QXBwU3RhdGUgPSBhc3luYyBmdW5jdGlvbiBxdWVyeUFwcFN0YXRlIChhcHBJZCkge1xuICB0aGlzLmxvZy5pbmZvKGBRdWVyeWluZyB0aGUgc3RhdGUgb2YgJyR7YXBwSWR9J2ApO1xuICBpZiAoIWF3YWl0IHRoaXMuYWRiLmlzQXBwSW5zdGFsbGVkKGFwcElkKSkge1xuICAgIHJldHVybiBBUFBfU1RBVEUuTk9UX0lOU1RBTExFRDtcbiAgfVxuICBpZiAoIWF3YWl0IHRoaXMuYWRiLnByb2Nlc3NFeGlzdHMoYXBwSWQpKSB7XG4gICAgcmV0dXJuIEFQUF9TVEFURS5OT1RfUlVOTklORztcbiAgfVxuICBjb25zdCBhcHBJZFJlID0gbmV3IFJlZ0V4cChgXFxcXGIke18uZXNjYXBlUmVnRXhwKGFwcElkKX0vYCk7XG4gIGZvciAoY29uc3QgbGluZSBvZiAoYXdhaXQgdGhpcy5hZGIuZHVtcFdpbmRvd3MoKSkuc3BsaXQoJ1xcbicpKSB7XG4gICAgaWYgKGFwcElkUmUudGVzdChsaW5lKSAmJiBbJ21DdXJyZW50Rm9jdXMnLCAnbUZvY3VzZWRBcHAnXS5zb21lKCh4KSA9PiBsaW5lLmluY2x1ZGVzKHgpKSkge1xuICAgICAgcmV0dXJuIEFQUF9TVEFURS5SVU5OSU5HX0lOX0ZPUkVHUk9VTkQ7XG4gICAgfVxuICB9XG4gIHJldHVybiBBUFBfU1RBVEUuUlVOTklOR19JTl9CQUNLR1JPVU5EO1xufTtcblxuLyoqXG4gKiBAdHlwZWRlZiB7T2JqZWN0fSBNb2JpbGVRdWVyeUFwcFN0YXRlT3B0aW9uc1xuICogQHByb3BlcnR5IHtzdHJpbmd9IGFwcElkIC0gQXBwbGljYXRpb24gcGFja2FnZSBpZGVudGlmaWVyLiBNdXN0IGJlIGFsd2F5cyBwcm92aWRlZC5cbiAqL1xuXG4vKipcbiAqIFF1ZXJpZXMgdGhlIGN1cnJlbnQgc3RhdGUgb2YgdGhlIGFwcC5cbiAqXG4gKiBAcGFyYW0ge01vYmlsZVF1ZXJ5QXBwU3RhdGVPcHRpb25zfSBvcHRzXG4gKiBAcmV0dXJucyB7bnVtYmVyfSBTYW1lIGFzIGluIGBxdWVyeUFwcFN0YXRlYFxuICovXG5jb21tYW5kcy5tb2JpbGVRdWVyeUFwcFN0YXRlID0gYXN5bmMgZnVuY3Rpb24gbW9iaWxlUXVlcnlBcHBTdGF0ZSAob3B0cyA9IHt9KSB7XG4gIGNvbnN0IHsgYXBwSWQgfSA9IHJlcXVpcmVBcmdzKCdhcHBJZCcsIG9wdHMpO1xuICByZXR1cm4gYXdhaXQgdGhpcy5xdWVyeUFwcFN0YXRlKGFwcElkKTtcbn07XG5cbi8qKlxuICogQWN0aXZhdGVzIHRoZSBnaXZlbiBhcHBsaWNhdGlvbiBvciBsYXVuY2hlcyBpdCBpZiBuZWNlc3NhcnkuXG4gKiBUaGUgYWN0aW9uIGxpdGVyYWxseSBzaW11bGF0ZXNcbiAqIGNsaWNraW5nIHRoZSBjb3JyZXNwb25kaW5nIGFwcGxpY2F0aW9uIGljb24gb24gdGhlIGRhc2hib2FyZC5cbiAqXG4gKiBAcGFyYW0ge3N0cmluZ30gYXBwSWQgLSBBcHBsaWNhdGlvbiBwYWNrYWdlIGlkZW50aWZpZXJcbiAqIEB0aHJvd3Mge0Vycm9yfSBJZiB0aGUgYXBwIGNhbm5vdCBiZSBhY3RpdmF0ZWRcbiAqL1xuY29tbWFuZHMuYWN0aXZhdGVBcHAgPSBhc3luYyBmdW5jdGlvbiBhY3RpdmF0ZUFwcCAoYXBwSWQpIHtcbiAgdGhpcy5sb2cuZGVidWcoYEFjdGl2YXRpbmcgJyR7YXBwSWR9J2ApO1xuICBjb25zdCBhcGlMZXZlbCA9IGF3YWl0IHRoaXMuYWRiLmdldEFwaUxldmVsKCk7XG4gIC8vIEZhbGxiYWNrIHRvIE1vbmtleSBpbiBvbGRlciBBUElzXG4gIGlmIChhcGlMZXZlbCA8IDI0KSB7XG4gICAgLy8gVGhlIG1vbmtleSBjb21tYW5kIGNvdWxkIHJhaXNlIGFuIGlzc3VlIGFzIGh0dHBzOi8vc3RhY2tvdmVyZmxvdy5jb20vcXVlc3Rpb25zLzQ0ODYwNDc1L2hvdy10by11c2UtdGhlLW1vbmtleS1jb21tYW5kLXdpdGgtYW4tYW5kcm9pZC1zeXN0ZW0tdGhhdC1kb2VzbnQtaGF2ZS1waHlzaWNhbFxuICAgIC8vIGJ1dCAnLS1wY3Qtc3lza2V5cyAwJyBjb3VsZCBjYXVzZSBhbm90aGVyIGJhY2tncm91bmQgcHJvY2VzcyBpc3N1ZS4gaHR0cHM6Ly9naXRodWIuY29tL2FwcGl1bS9hcHBpdW0vaXNzdWVzLzE2OTQxI2lzc3VlY29tbWVudC0xMTI5ODM3Mjg1XG4gICAgY29uc3QgY21kID0gWydtb25rZXknLFxuICAgICAgJy1wJywgYXBwSWQsXG4gICAgICAnLWMnLCAnYW5kcm9pZC5pbnRlbnQuY2F0ZWdvcnkuTEFVTkNIRVInLFxuICAgICAgJzEnXTtcbiAgICBsZXQgb3V0cHV0ID0gJyc7XG4gICAgdHJ5IHtcbiAgICAgIG91dHB1dCA9IGF3YWl0IHRoaXMuYWRiLnNoZWxsKGNtZCk7XG4gICAgICB0aGlzLmxvZy5kZWJ1ZyhgQ29tbWFuZCBzdGRvdXQ6ICR7b3V0cHV0fWApO1xuICAgIH0gY2F0Y2ggKGUpIHtcbiAgICAgIHRoaXMubG9nLmVycm9yQW5kVGhyb3coYENhbm5vdCBhY3RpdmF0ZSAnJHthcHBJZH0nLiBPcmlnaW5hbCBlcnJvcjogJHtlLm1lc3NhZ2V9YCk7XG4gICAgfVxuICAgIGlmIChvdXRwdXQuaW5jbHVkZXMoJ21vbmtleSBhYm9ydGVkJykpIHtcbiAgICAgIHRoaXMubG9nLmVycm9yQW5kVGhyb3coYENhbm5vdCBhY3RpdmF0ZSAnJHthcHBJZH0nLiBBcmUgeW91IHN1cmUgaXQgaXMgaW5zdGFsbGVkP2ApO1xuICAgIH1cbiAgICByZXR1cm47XG4gIH1cblxuICBsZXQgYWN0aXZpdHlOYW1lID0gYXdhaXQgdGhpcy5hZGIucmVzb2x2ZUxhdW5jaGFibGVBY3Rpdml0eShhcHBJZCk7XG4gIGlmIChhY3Rpdml0eU5hbWUgPT09IFJFU09MVkVSX0FDVElWSVRZX05BTUUpIHtcbiAgICAvLyBodHRwczovL2dpdGh1Yi5jb20vYXBwaXVtL2FwcGl1bS9pc3N1ZXMvMTcxMjhcbiAgICB0aGlzLmxvZy5kZWJ1ZyhcbiAgICAgIGBUaGUgbGF1bmNoYWJsZSBhY3Rpdml0eSBuYW1lIG9mICcke2FwcElkfScgd2FzIHJlc29sdmVkIHRvICcke2FjdGl2aXR5TmFtZX0nLiBgICtcbiAgICAgIGBTd2l0Y2hpbmcgdGhlIHJlc29sdmVyIHRvIG5vdCB1c2UgY21kYFxuICAgICk7XG4gICAgYWN0aXZpdHlOYW1lID0gYXdhaXQgdGhpcy5hZGIucmVzb2x2ZUxhdW5jaGFibGVBY3Rpdml0eShhcHBJZCwge3ByZWZlckNtZDogZmFsc2V9KTtcbiAgfVxuXG4gIGNvbnN0IHN0ZG91dCA9IGF3YWl0IHRoaXMuYWRiLnNoZWxsKFtcbiAgICAnYW0nLCAoYXBpTGV2ZWwgPCAyNikgPyAnc3RhcnQnIDogJ3N0YXJ0LWFjdGl2aXR5JyxcbiAgICAnLWEnLCAnYW5kcm9pZC5pbnRlbnQuYWN0aW9uLk1BSU4nLFxuICAgICctYycsICdhbmRyb2lkLmludGVudC5jYXRlZ29yeS5MQVVOQ0hFUicsXG4gICAgLy8gRkxBR19BQ1RJVklUWV9ORVdfVEFTSyB8IEZMQUdfQUNUSVZJVFlfUkVTRVRfVEFTS19JRl9ORUVERURcbiAgICAvLyBodHRwczovL2RldmVsb3Blci5hbmRyb2lkLmNvbS9yZWZlcmVuY2UvYW5kcm9pZC9jb250ZW50L0ludGVudCNGTEFHX0FDVElWSVRZX05FV19UQVNLXG4gICAgLy8gaHR0cHM6Ly9kZXZlbG9wZXIuYW5kcm9pZC5jb20vcmVmZXJlbmNlL2FuZHJvaWQvY29udGVudC9JbnRlbnQjRkxBR19BQ1RJVklUWV9SRVNFVF9UQVNLX0lGX05FRURFRFxuICAgICctZicsICcweDEwMjAwMDAwJyxcbiAgICAnLW4nLCBhY3Rpdml0eU5hbWUsXG4gIF0pO1xuICB0aGlzLmxvZy5kZWJ1ZyhzdGRvdXQpO1xuICBpZiAoL15lcnJvcjovbWkudGVzdChzdGRvdXQpKSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKGBDYW5ub3QgYWN0aXZhdGUgJyR7YXBwSWR9Jy4gT3JpZ2luYWwgZXJyb3I6ICR7c3Rkb3V0fWApO1xuICB9XG59O1xuXG4vKipcbiAqIEB0eXBlZGVmIHtPYmplY3R9IE1vYmlsZUFjdGl2YXRlQXBwT3B0aW9uc1xuICogQHByb3BlcnR5IHtzdHJpbmd9IGFwcElkIC0gQXBwbGljYXRpb24gcGFja2FnZSBpZGVudGlmaWVyLiBNdXN0IGJlIGFsd2F5cyBwcm92aWRlZC5cbiAqL1xuXG4vKipcbiAqIEFjdGl2YXRlcyB0aGUgZ2l2ZW4gYXBwbGljYXRpb24gb3IgbGF1bmNoZXMgaXQgaWYgbmVjZXNzYXJ5LlxuICogVGhlIGFjdGlvbiBsaXRlcmFsbHkgc2ltdWxhdGVzXG4gKiBjbGlja2luZyB0aGUgY29ycmVzcG9uZGluZyBhcHBsaWNhdGlvbiBpY29uIG9uIHRoZSBkYXNoYm9hcmQuXG4gKlxuICogQHBhcmFtIHtNb2JpbGVBY3RpdmF0ZUFwcE9wdGlvbnN9IG9wdHNcbiAqIEB0aHJvd3Mge0Vycm9yfSBJZiB0aGUgYXBwIGNhbm5vdCBiZSBhY3RpdmF0ZWRcbiAqL1xuY29tbWFuZHMubW9iaWxlQWN0aXZhdGVBcHAgPSBhc3luYyBmdW5jdGlvbiBtb2JpbGVBY3RpdmF0ZUFwcCAob3B0cyA9IHt9KSB7XG4gIGNvbnN0IHsgYXBwSWQgfSA9IHJlcXVpcmVBcmdzKCdhcHBJZCcsIG9wdHMpO1xuICByZXR1cm4gYXdhaXQgdGhpcy5hY3RpdmF0ZUFwcChhcHBJZCk7XG59O1xuXG4vKipcbiAqIEB0eXBlZGVmIHtPYmplY3R9IFVuaW5zdGFsbE9wdGlvbnNcbiAqIEBwcm9wZXJ0eSB7bnVtYmVyfSB0aW1lb3V0IFsyMDAwMF0gLSBUaGUgY291bnQgb2YgbWlsbGlzZWNvbmRzIHRvIHdhaXQgdW50aWwgdGhlXG4gKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYXBwIGlzIHVuaW5zdGFsbGVkLlxuICogQHByb3BlcnR5IHtib29sZWFufSBrZWVwRGF0YSBbZmFsc2VdIC0gU2V0IHRvIHRydWUgaW4gb3JkZXIgdG8ga2VlcCB0aGVcbiAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFwcGxpY2F0aW9uIGRhdGEgYW5kIGNhY2hlIGZvbGRlcnMgYWZ0ZXIgdW5pbnN0YWxsLlxuICovXG5cbi8qKlxuICogUmVtb3ZlIHRoZSBjb3JyZXNwb25kaW5nIGFwcGxpY2F0aW9uIGlmIGlzIGluc3RhbGxlZC5cbiAqIFRoZSBjYWxsIGlzIGlnbm9yZWQgaWYgdGhlIGFwcCBpcyBub3QgaW5zdGFsbGVkLlxuICpcbiAqIEBwYXJhbSB7c3RyaW5nfSBhcHBJZCAtIEFwcGxpY2F0aW9uIHBhY2thZ2UgaWRlbnRpZmllclxuICogQHBhcmFtIHs/VW5pbnN0YWxsT3B0aW9uc30gb3B0aW9ucyAtIFRoZSBzZXQgb2YgcmVtb3ZhbCBvcHRpb25zXG4gKiBAcmV0dXJucyB7Ym9vbGVhbn0gVHJ1ZSBpZiB0aGUgcGFja2FnZSB3YXMgZm91bmQgb24gdGhlIGRldmljZSBhbmRcbiAqICAgICAgICAgICAgICAgICAgICBzdWNjZXNzZnVsbHkgdW5pbnN0YWxsZWQuXG4gKi9cbmNvbW1hbmRzLnJlbW92ZUFwcCA9IGFzeW5jIGZ1bmN0aW9uIHJlbW92ZUFwcCAoYXBwSWQsIG9wdGlvbnMgPSB7fSkge1xuICByZXR1cm4gYXdhaXQgdGhpcy5hZGIudW5pbnN0YWxsQXBrKGFwcElkLCBvcHRpb25zKTtcbn07XG5cbi8qKlxuICogQHR5cGVkZWYge09iamVjdH0gTW9iaWxlUmVtb3ZlQXBwT3B0aW9uc1xuICogQHByb3BlcnR5IHtzdHJpbmd9IGFwcElkIC0gQXBwbGljYXRpb24gcGFja2FnZSBpZGVudGlmaWVyLiBNdXN0IGJlIGFsd2F5cyBwcm92aWRlZC5cbiAqL1xuXG4vKipcbiAqIFJlbW92ZSB0aGUgY29ycmVzcG9uZGluZyBhcHBsaWNhdGlvbiBpZiBpcyBpbnN0YWxsZWQuXG4gKiBUaGUgY2FsbCBpcyBpZ25vcmVkIGlmIHRoZSBhcHAgaXMgbm90IGluc3RhbGxlZC5cbiAqXG4gKiBAcGFyYW0ge01vYmlsZVJlbW92ZUFwcE9wdGlvbnN9IG9wdHNcbiAqIEByZXR1cm5zIHtib29sZWFufSBTYW1lIGFzIGluIGByZW1vdmVBcHBgXG4gKi9cbmNvbW1hbmRzLm1vYmlsZVJlbW92ZUFwcCA9IGFzeW5jIGZ1bmN0aW9uIG1vYmlsZVJlbW92ZUFwcCAob3B0cyA9IHt9KSB7XG4gIGNvbnN0IHsgYXBwSWQgfSA9IHJlcXVpcmVBcmdzKCdhcHBJZCcsIG9wdHMpO1xuICByZXR1cm4gYXdhaXQgdGhpcy5yZW1vdmVBcHAoYXBwSWQsIG9wdHMpO1xufTtcblxuLyoqXG4gKiBAdHlwZWRlZiB7T2JqZWN0fSBUZXJtaW5hdGVPcHRpb25zXG4gKiBAcHJvcGVydHkge251bWJlcnxzdHJpbmd9IHRpbWVvdXQgWzUwMF0gLSBUaGUgY291bnQgb2YgbWlsbGlzZWNvbmRzIHRvIHdhaXQgdW50aWwgdGhlXG4gKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhcHAgaXMgdGVybWluYXRlZC4gVGhlIG1ldGhvZCB3aWxsIHNraXBcbiAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNoZWNraW5nIHRoZSBhcHAgc3RhdGUgY2hlY2sgaWYgdGhlIHRpbWVvdXRcbiAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHdhcyBsb3dlciBvciBlcXVhbCB0byB6ZXJvLiBUaGVuLCB0aGUgcmV0dXJuXG4gKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YWx1ZSB3aWxsIGJlIHRydWUuXG4gKi9cblxuLyoqXG4gKiBUZXJtaW5hdGVzIHRoZSBhcHAgaWYgaXQgaXMgcnVubmluZy4gSWYgdGhlIGdpdmVuIHRpbWVvdXQgd2FzIGxvd2VyIG9yIGVxdWFsIHRvIHplcm8sXG4gKiBpdCByZXR1cm5zIHRydWUgYWZ0ZXIgdGVybWluYXRpbmcgdGhlIGFwcCB3aXRob3V0IGNoZWNraW5nIHRoZSBhcHAgc3RhdGUuXG4gKlxuICogQHBhcmFtIHtzdHJpbmd9IGFwcElkIC0gQXBwbGljYXRpb24gcGFja2FnZSBpZGVudGlmaWVyXG4gKiBAcGFyYW0gez9UZXJtaW5hdGVPcHRpb25zfSBvcHRpb25zIC0gVGhlIHNldCBvZiBhcHBsaWNhdGlvbiB0ZXJtaW5hdGlvbiBvcHRpb25zXG4gKiBAcmV0dXJucyB7Ym9vbGVhbn0gVHJ1ZSBpZiB0aGUgYXBwIGhhcyBiZWVuIHN1Y2Nlc3NmdWxseSB0ZXJtaW5hdGVkLlxuICogQHRocm93cyB7RXJyb3J9IGlmIHRoZSBhcHAgaGFzIG5vdCBiZWVuIHRlcm1pbmF0ZWQgd2l0aGluIHRoZSBnaXZlbiB0aW1lb3V0LlxuICovXG5jb21tYW5kcy50ZXJtaW5hdGVBcHAgPSBhc3luYyBmdW5jdGlvbiB0ZXJtaW5hdGVBcHAgKGFwcElkLCBvcHRpb25zID0ge30pIHtcbiAgdGhpcy5sb2cuaW5mbyhgVGVybWluYXRpbmcgJyR7YXBwSWR9J2ApO1xuICBpZiAoIShhd2FpdCB0aGlzLmFkYi5wcm9jZXNzRXhpc3RzKGFwcElkKSkpIHtcbiAgICB0aGlzLmxvZy5pbmZvKGBUaGUgYXBwICcke2FwcElkfScgaXMgbm90IHJ1bm5pbmdgKTtcbiAgICByZXR1cm4gZmFsc2U7XG4gIH1cbiAgYXdhaXQgdGhpcy5hZGIuZm9yY2VTdG9wKGFwcElkKTtcbiAgY29uc3QgdGltZW91dCA9IHV0aWwuaGFzVmFsdWUob3B0aW9ucy50aW1lb3V0KSAmJiAhaXNOYU4ob3B0aW9ucy50aW1lb3V0KSA/IHBhcnNlSW50KG9wdGlvbnMudGltZW91dCwgMTApIDogNTAwO1xuXG4gIGlmICh0aW1lb3V0IDw9IDApIHtcbiAgICB0aGlzLmxvZy5pbmZvKGAnJHthcHBJZH0nIGhhcyBiZWVuIHRlcm1pbmF0ZWQuIFNraXAgY2hlY2tpbmcgdGhlIGFwcGxpY2F0aW9uIHByb2Nlc3Mgc3RhdGUgYCArXG4gICAgICBgc2luY2UgdGhlIHRpbWVvdXQgd2FzIHNldCBhcyAke3RpbWVvdXR9bXNgKTtcbiAgICByZXR1cm4gdHJ1ZTtcbiAgfVxuXG4gIHRyeSB7XG4gICAgYXdhaXQgd2FpdEZvckNvbmRpdGlvbihhc3luYyAoKSA9PiBhd2FpdCB0aGlzLnF1ZXJ5QXBwU3RhdGUoYXBwSWQpIDw9IEFQUF9TVEFURS5OT1RfUlVOTklORyxcbiAgICAgIHt3YWl0TXM6IHRpbWVvdXQsIGludGVydmFsTXM6IDEwMH0pO1xuICB9IGNhdGNoIChlKSB7XG4gICAgdGhpcy5sb2cuZXJyb3JBbmRUaHJvdyhgJyR7YXBwSWR9JyBpcyBzdGlsbCBydW5uaW5nIGFmdGVyICR7dGltZW91dH1tcyB0aW1lb3V0YCk7XG4gIH1cbiAgdGhpcy5sb2cuaW5mbyhgJyR7YXBwSWR9JyBoYXMgYmVlbiBzdWNjZXNzZnVsbHkgdGVybWluYXRlZGApO1xuICByZXR1cm4gdHJ1ZTtcbn07XG5cbi8qKlxuICogQHR5cGVkZWYge09iamVjdH0gTW9iaWxlVGVybWluYXRlQXBwT3B0aW9uc1xuICogQHByb3BlcnR5IHtzdHJpbmd9IGFwcElkIC0gQXBwbGljYXRpb24gcGFja2FnZSBpZGVudGlmaWVyLiBNdXN0IGJlIGFsd2F5cyBwcm92aWRlZC5cbiAqIEBwcm9wZXJ0eSB7bnVtYmVyfHN0cmluZ30gdGltZW91dCBbNTAwXSAtIFRoZSBjb3VudCBvZiBtaWxsaXNlY29uZHMgdG8gd2FpdCB1bnRpbCB0aGVcbiAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFwcCBpcyB0ZXJtaW5hdGVkLlxuICovXG5cbi8qKlxuICogVGVybWluYXRlcyB0aGUgYXBwIGlmIGl0IGlzIHJ1bm5pbmcuXG4gKlxuICogQHBhcmFtIHtNb2JpbGVUZXJtaW5hdGVBcHBPcHRpb25zfSBvcHRzXG4gKiBAcmV0dXJucyB7Ym9vbGVhbn0gU2FtZSBhcyBpbiBgdGVybWluYXRlQXBwYFxuICogQHRocm93cyB7RXJyb3J9IGlmIHRoZSBhcHAgaGFzIG5vdCBiZWVuIHRlcm1pbmF0ZWQgd2l0aGluIHRoZSBnaXZlbiB0aW1lb3V0LlxuICovXG5jb21tYW5kcy5tb2JpbGVUZXJtaW5hdGVBcHAgPSBhc3luYyBmdW5jdGlvbiBtb2JpbGVUZXJtaW5hdGVBcHAgKG9wdHMgPSB7fSkge1xuICBjb25zdCB7IGFwcElkIH0gPSByZXF1aXJlQXJncygnYXBwSWQnLCBvcHRzKTtcbiAgcmV0dXJuIGF3YWl0IHRoaXMudGVybWluYXRlQXBwKGFwcElkLCBvcHRzKTtcbn07XG5cbi8qKlxuICogQHR5cGVkZWYge09iamVjdH0gSW5zdGFsbE9wdGlvbnNcbiAqIEBwcm9wZXJ0eSB7bnVtYmVyfSB0aW1lb3V0IFs2MDAwMF0gLSBUaGUgY291bnQgb2YgbWlsbGlzZWNvbmRzIHRvIHdhaXQgdW50aWwgdGhlXG4gKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYXBwIGlzIGluc3RhbGxlZC5cbiAqIEBwcm9wZXJ0eSB7Ym9vbGVhbn0gYWxsb3dUZXN0UGFja2FnZXMgW2ZhbHNlXSAtIFNldCB0byB0cnVlIGluIG9yZGVyIHRvIGFsbG93IHRlc3RcbiAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBhY2thZ2VzIGluc3RhbGxhdGlvbi5cbiAqIEBwcm9wZXJ0eSB7Ym9vbGVhbn0gdXNlU2RjYXJkIFtmYWxzZV0gLSBTZXQgdG8gdHJ1ZSB0byBpbnN0YWxsIHRoZSBhcHAgb24gc2RjYXJkXG4gKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW5zdGVhZCBvZiB0aGUgZGV2aWNlIG1lbW9yeS5cbiAqIEBwcm9wZXJ0eSB7Ym9vbGVhbn0gZ3JhbnRQZXJtaXNzaW9ucyBbZmFsc2VdIC0gU2V0IHRvIHRydWUgaW4gb3JkZXIgdG8gZ3JhbnQgYWxsIHRoZVxuICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwZXJtaXNzaW9ucyByZXF1ZXN0ZWQgaW4gdGhlIGFwcGxpY2F0aW9uJ3MgbWFuaWZlc3RcbiAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYXV0b21hdGljYWxseSBhZnRlciB0aGUgaW5zdGFsbGF0aW9uIGlzIGNvbXBsZXRlZFxuICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1bmRlciBBbmRyb2lkIDYrLlxuICogQHByb3BlcnR5IHtib29sZWFufSByZXBsYWNlIFt0cnVlXSAtIFNldCBpdCB0byBmYWxzZSBpZiB5b3UgZG9uJ3Qgd2FudFxuICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoZSBhcHBsaWNhdGlvbiB0byBiZSB1cGdyYWRlZC9yZWluc3RhbGxlZFxuICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIGl0IGlzIGFscmVhZHkgcHJlc2VudCBvbiB0aGUgZGV2aWNlLlxuICovXG5cbi8qKlxuICogSW5zdGFsbHMgdGhlIGdpdmVuIGFwcGxpY2F0aW9uIHRvIHRoZSBkZXZpY2UgdW5kZXIgdGVzdFxuICpcbiAqIEBwYXJhbSB7c3RyaW5nfSBhcHBQYXRoIC0gVGhlIGxvY2FsIGFwayBwYXRoIG9yIGEgcmVtb3RlIHVybFxuICogQHBhcmFtIHs/SW5zdGFsbE9wdGlvbnN9IG9wdGlvbnMgLSBUaGUgc2V0IG9mIGluc3RhbGxhdGlvbiBvcHRpb25zXG4gKiBAdGhyb3dzIHtFcnJvcn0gaWYgdGhlIGdpdmVuIGFwayBkb2VzIG5vdCBleGlzdCBvciBpcyBub3QgcmVhY2hhYmxlXG4gKi9cbmNvbW1hbmRzLmluc3RhbGxBcHAgPSBhc3luYyBmdW5jdGlvbiBpbnN0YWxsQXBwIChhcHBQYXRoLCBvcHRpb25zID0ge30pIHtcbiAgY29uc3QgbG9jYWxQYXRoID0gYXdhaXQgdGhpcy5oZWxwZXJzLmNvbmZpZ3VyZUFwcChhcHBQYXRoLCBBUFBfRVhURU5TSU9OUyk7XG4gIGF3YWl0IHRoaXMuYWRiLmluc3RhbGwobG9jYWxQYXRoLCBvcHRpb25zKTtcbn07XG5cbi8qKlxuICogQHR5cGVkZWYge09iamVjdH0gTW9iaWxlSW5zdGFsbEFwcE9wdGlvbnNcbiAqIEBwcm9wZXJ0eSB7c3RyaW5nfSBhcHBQYXRoIC0gVGhlIGxvY2FsIGFwayBwYXRoIG9yIGEgcmVtb3RlIHVybC4gTXVzdCBiZSBhbHdheXMgcHJvdmlkZWQuXG4gKiBAcHJvcGVydHkge251bWJlcn0gdGltZW91dCBbNjAwMDBdIC0gVGhlIGNvdW50IG9mIG1pbGxpc2Vjb25kcyB0byB3YWl0IHVudGlsIHRoZVxuICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFwcCBpcyBpbnN0YWxsZWQuXG4gKiBAcHJvcGVydHkge2Jvb2xlYW59IGFsbG93VGVzdFBhY2thZ2VzIFtmYWxzZV0gLSBTZXQgdG8gdHJ1ZSBpbiBvcmRlciB0byBhbGxvdyB0ZXN0XG4gKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwYWNrYWdlcyBpbnN0YWxsYXRpb24uXG4gKiBAcHJvcGVydHkge2Jvb2xlYW59IHVzZVNkY2FyZCBbZmFsc2VdIC0gU2V0IHRvIHRydWUgdG8gaW5zdGFsbCB0aGUgYXBwIG9uIHNkY2FyZFxuICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGluc3RlYWQgb2YgdGhlIGRldmljZSBtZW1vcnkuXG4gKiBAcHJvcGVydHkge2Jvb2xlYW59IGdyYW50UGVybWlzc2lvbnMgW2ZhbHNlXSAtIFNldCB0byB0cnVlIGluIG9yZGVyIHRvIGdyYW50IGFsbCB0aGVcbiAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcGVybWlzc2lvbnMgcmVxdWVzdGVkIGluIHRoZSBhcHBsaWNhdGlvbidzIG1hbmlmZXN0XG4gKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGF1dG9tYXRpY2FsbHkgYWZ0ZXIgdGhlIGluc3RhbGxhdGlvbiBpcyBjb21wbGV0ZWRcbiAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdW5kZXIgQW5kcm9pZCA2Ky5cbiAqIEBwcm9wZXJ0eSB7Ym9vbGVhbn0gcmVwbGFjZSBbdHJ1ZV0gLSBTZXQgaXQgdG8gZmFsc2UgaWYgeW91IGRvbid0IHdhbnRcbiAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGUgYXBwbGljYXRpb24gdG8gYmUgdXBncmFkZWQvcmVpbnN0YWxsZWRcbiAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiBpdCBpcyBhbHJlYWR5IHByZXNlbnQgb24gdGhlIGRldmljZS5cbiAqL1xuXG4vKipcbiAqIEluc3RhbGxzIHRoZSBnaXZlbiBhcHBsaWNhdGlvbiB0byB0aGUgZGV2aWNlIHVuZGVyIHRlc3RcbiAqXG4gKiBAcGFyYW0ge01vYmlsZUluc3RhbGxBcHBPcHRpb25zfSBvcHRzXG4gKiBAdGhyb3dzIHtFcnJvcn0gaWYgdGhlIGdpdmVuIGFwayBkb2VzIG5vdCBleGlzdCBvciBpcyBub3QgcmVhY2hhYmxlXG4gKi9cbmNvbW1hbmRzLm1vYmlsZUluc3RhbGxBcHAgPSBhc3luYyBmdW5jdGlvbiBtb2JpbGVJbnN0YWxsQXBwIChvcHRzID0ge30pIHtcbiAgY29uc3QgeyBhcHBQYXRoIH0gPSByZXF1aXJlQXJncygnYXBwUGF0aCcsIG9wdHMpO1xuICByZXR1cm4gYXdhaXQgdGhpcy5pbnN0YWxsQXBwKGFwcFBhdGgsIG9wdHMpO1xufTtcblxuLyoqXG4gKiBAdHlwZWRlZiB7T2JqZWN0fSBDbGVhckFwcE9wdGlvbnNcbiAqIEBwcm9wZXJ0eSB7IXN0cmluZ30gYXBwSWQgVGhlIGlkZW50aWZpZXIgb2YgdGhlIGFwcGxpY2F0aW9uIHBhY2thZ2UgdG8gYmUgY2xlYXJlZFxuICovXG5cbi8qKlxuICogRGVsZXRlcyBhbGwgZGF0YSBhc3NvY2lhdGVkIHdpdGggYSBwYWNrYWdlLlxuICpcbiAqIEBwYXJhbSB7Q2xlYXJBcHBPcHRpb25zfSBvcHRzXG4gKiBAdGhyb3dzIHtFcnJvcn0gSWYgY2xlYW5pbmcgb2YgdGhlIGFwcCBkYXRhIGZhaWxzXG4gKi9cbmNvbW1hbmRzLm1vYmlsZUNsZWFyQXBwID0gYXN5bmMgZnVuY3Rpb24gbW9iaWxlQ2xlYXJBcHAgKG9wdHMgPSB7fSkge1xuICBjb25zdCB7YXBwSWR9ID0gb3B0cztcbiAgaWYgKCFhcHBJZCkge1xuICAgIHRocm93IG5ldyBlcnJvcnMuSW52YWxpZEFyZ3VtZW50RXJyb3IoYFRoZSAnYXBwSWQnIGFyZ3VtZW50IGlzIHJlcXVpcmVkYCk7XG4gIH1cbiAgYXdhaXQgdGhpcy5hZGIuY2xlYXIoYXBwSWQpO1xufTtcblxuZXhwb3J0IHsgY29tbWFuZHMgfTtcbmV4cG9ydCBkZWZhdWx0IGNvbW1hbmRzO1xuIl0sIm1hcHBpbmdzIjoiOzs7Ozs7OztBQUFBLElBQUFBLE9BQUEsR0FBQUMsc0JBQUEsQ0FBQUMsT0FBQTtBQUNBLElBQUFDLFNBQUEsR0FBQUQsT0FBQTtBQUNBLElBQUFFLFFBQUEsR0FBQUYsT0FBQTtBQUNBLElBQUFHLGVBQUEsR0FBQUgsT0FBQTtBQUNBLElBQUFJLE9BQUEsR0FBQUosT0FBQTtBQUNBLElBQUFLLE1BQUEsR0FBQUwsT0FBQTtBQUVBLE1BQU1NLGNBQWMsR0FBRyxDQUFDLE1BQU0sRUFBRSxPQUFPLENBQUM7QUFDeEMsTUFBTUMsc0JBQXNCLEdBQUcsbURBQW1EO0FBRWxGLE1BQU1DLFFBQVEsR0FBRyxDQUFDLENBQUM7QUFBQ0MsT0FBQSxDQUFBRCxRQUFBLEdBQUFBLFFBQUE7QUFRcEJBLFFBQVEsQ0FBQ0UsY0FBYyxHQUFHLGVBQWVBLGNBQWNBLENBQUVDLEtBQUssRUFBRTtFQUM5RCxPQUFPLE1BQU0sSUFBSSxDQUFDQyxHQUFHLENBQUNGLGNBQWMsQ0FBQ0MsS0FBSyxDQUFDO0FBQzdDLENBQUM7QUFhREgsUUFBUSxDQUFDSyxvQkFBb0IsR0FBRyxlQUFlQSxvQkFBb0JBLENBQUVDLElBQUksR0FBRyxDQUFDLENBQUMsRUFBRTtFQUM5RSxNQUFNO0lBQUVIO0VBQU0sQ0FBQyxHQUFHLElBQUFJLGtCQUFXLEVBQUMsT0FBTyxFQUFFRCxJQUFJLENB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
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"app-management.js","names":["APP_EXTENSIONS","RESOLVER_ACTIVITY_NAME","commands","isAppInstalled","appId","adb","mobileIsAppInstalled","opts","requireArgs","queryAppState","log","info","APP_STATE","NOT_INSTALLED","processExists","NOT_RUNNING","appIdRe","RegExp","_","escapeRegExp","line","dumpWindows","split","test","some","x","includes","RUNNING_IN_FOREGROUND","RUNNING_IN_BACKGROUND","mobileQueryAppState","activateApp","debug","apiLevel","getApiLevel","cmd","output","shell","e","errorAndThrow","message","activityName","resolveLaunchableActivity","preferCmd","stdout","Error","mobileActivateApp","removeApp","options","uninstallApk","mobileRemoveApp","terminateApp","forceStop","timeout","util","hasValue","isNaN","parseInt","waitForCondition","waitMs","intervalMs","mobileTerminateApp","installApp","appPath","localPath","helpers","configureApp","install","mobileInstallApp","mobileClearApp","errors","InvalidArgumentError","clear"],"sources":["../../../lib/commands/app-management.js"],"sourcesContent":["import _ from 'lodash';\nimport { waitForCondition } from 'asyncbox';\nimport { util } from '@appium/support';\nimport { APP_STATE } from '../android-helpers';\nimport { errors } from 'appium/driver';\nimport { requireArgs } from '../utils';\n\nconst APP_EXTENSIONS = ['.apk', '.apks'];\nconst RESOLVER_ACTIVITY_NAME = 'android/com.android.internal.app.ResolverActivity';\n\nconst commands = {};\n\n/**\n * Verify whether an application is installed or not\n *\n * @param {string} appId - Application package identifier\n * @returns {boolean} true if the app is installed\n */\ncommands.isAppInstalled = async function isAppInstalled (appId) {\n return await this.adb.isAppInstalled(appId);\n};\n\n/**\n * @typedef {Object} MobileAppInstalledOptions\n * @property {string} appId - Application package identifier. Must be always provided.\n */\n\n/**\n * Verify whether an application is installed or not\n *\n * @param {MobileAppInstalledOptions} opts\n * @returns {boolean} Same as in `isAppInstalled`\n */\ncommands.mobileIsAppInstalled = async function mobileIsAppInstalled (opts = {}) {\n const { appId } = requireArgs('appId', opts);\n return await this.isAppInstalled(appId);\n};\n\n/**\n * Queries the current state of the app.\n *\n * @param {string} appId - Application package identifier\n * @returns {number} The corresponding constant, which describes\n * the current application state:\n * 0 - is the app is not installed\n * 1 - if the app is installed, but is not running\n * 3 - if the app is running in the background\n * 4 - if the app is running in the foreground\n */\ncommands.queryAppState = async function queryAppState (appId) {\n this.log.info(`Querying the state of '${appId}'`);\n if (!await this.adb.isAppInstalled(appId)) {\n return APP_STATE.NOT_INSTALLED;\n }\n if (!await this.adb.processExists(appId)) {\n return APP_STATE.NOT_RUNNING;\n }\n const appIdRe = new RegExp(`\\\\b${_.escapeRegExp(appId)}/`);\n for (const line of (await this.adb.dumpWindows()).split('\\n')) {\n if (appIdRe.test(line) && ['mCurrentFocus', 'mFocusedApp'].some((x) => line.includes(x))) {\n return APP_STATE.RUNNING_IN_FOREGROUND;\n }\n }\n return APP_STATE.RUNNING_IN_BACKGROUND;\n};\n\n/**\n * @typedef {Object} MobileQueryAppStateOptions\n * @property {string} appId - Application package identifier. Must be always provided.\n */\n\n/**\n * Queries the current state of the app.\n *\n * @param {MobileQueryAppStateOptions} opts\n * @returns {number} Same as in `queryAppState`\n */\ncommands.mobileQueryAppState = async function mobileQueryAppState (opts = {}) {\n const { appId } = requireArgs('appId', opts);\n return await this.queryAppState(appId);\n};\n\n/**\n * Activates the given application or launches it if necessary.\n * The action literally simulates\n * clicking the corresponding application icon on the dashboard.\n *\n * @param {string} appId - Application package identifier\n * @throws {Error} If the app cannot be activated\n */\ncommands.activateApp = async function activateApp (appId) {\n this.log.debug(`Activating '${appId}'`);\n const apiLevel = await this.adb.getApiLevel();\n // Fallback to Monkey in older APIs\n if (apiLevel < 24) {\n // The monkey command could raise an issue as https://stackoverflow.com/questions/44860475/how-to-use-the-monkey-command-with-an-android-system-that-doesnt-have-physical\n // but '--pct-syskeys 0' could cause another background process issue. https://github.com/appium/appium/issues/16941#issuecomment-1129837285\n const cmd = ['monkey',\n '-p', appId,\n '-c', 'android.intent.category.LAUNCHER',\n '1'];\n let output = '';\n try {\n output = await this.adb.shell(cmd);\n this.log.debug(`Command stdout: ${output}`);\n } catch (e) {\n this.log.errorAndThrow(`Cannot activate '${appId}'. Original error: ${e.message}`);\n }\n if (output.includes('monkey aborted')) {\n this.log.errorAndThrow(`Cannot activate '${appId}'. Are you sure it is installed?`);\n }\n return;\n }\n\n let activityName = await this.adb.resolveLaunchableActivity(appId);\n if (activityName === RESOLVER_ACTIVITY_NAME) {\n // https://github.com/appium/appium/issues/17128\n this.log.debug(\n `The launchable activity name of '${appId}' was resolved to '${activityName}'. ` +\n `Switching the resolver to not use cmd`\n );\n activityName = await this.adb.resolveLaunchableActivity(appId, {preferCmd: false});\n }\n\n const stdout = await this.adb.shell([\n 'am', (apiLevel < 26) ? 'start' : 'start-activity',\n '-a', 'android.intent.action.MAIN',\n '-c', 'android.intent.category.LAUNCHER',\n // FLAG_ACTIVITY_NEW_TASK | FLAG_ACTIVITY_RESET_TASK_IF_NEEDED\n // https://developer.android.com/reference/android/content/Intent#FLAG_ACTIVITY_NEW_TASK\n // https://developer.android.com/reference/android/content/Intent#FLAG_ACTIVITY_RESET_TASK_IF_NEEDED\n '-f', '0x10200000',\n '-n', activityName,\n ]);\n this.log.debug(stdout);\n if (/^error:/mi.test(stdout)) {\n throw new Error(`Cannot activate '${appId}'. Original error: ${stdout}`);\n }\n};\n\n/**\n * @typedef {Object} MobileActivateAppOptions\n * @property {string} appId - Application package identifier. Must be always provided.\n */\n\n/**\n * Activates the given application or launches it if necessary.\n * The action literally simulates\n * clicking the corresponding application icon on the dashboard.\n *\n * @param {MobileActivateAppOptions} opts\n * @throws {Error} If the app cannot be activated\n */\ncommands.mobileActivateApp = async function mobileActivateApp (opts = {}) {\n const { appId } = requireArgs('appId', opts);\n return await this.activateApp(appId);\n};\n\n/**\n * @typedef {Object} UninstallOptions\n * @property {number} timeout [20000] - The count of milliseconds to wait until the\n * app is uninstalled.\n * @property {boolean} keepData [false] - Set to true in order to keep the\n * application data and cache folders after uninstall.\n */\n\n/**\n * Remove the corresponding application if is installed.\n * The call is ignored if the app is not installed.\n *\n * @param {string} appId - Application package identifier\n * @param {?UninstallOptions} options - The set of removal options\n * @returns {boolean} True if the package was found on the device and\n * successfully uninstalled.\n */\ncommands.removeApp = async function removeApp (appId, options = {}) {\n return await this.adb.uninstallApk(appId, options);\n};\n\n/**\n * @typedef {Object} MobileRemoveAppOptions\n * @property {string} appId - Application package identifier. Must be always provided.\n */\n\n/**\n * Remove the corresponding application if is installed.\n * The call is ignored if the app is not installed.\n *\n * @param {MobileRemoveAppOptions} opts\n * @returns {boolean} Same as in `removeApp`\n */\ncommands.mobileRemoveApp = async function mobileRemoveApp (opts = {}) {\n const { appId } = requireArgs('appId', opts);\n return await this.removeApp(appId, opts);\n};\n\n/**\n * @typedef {Object} TerminateOptions\n * @property {number|string} timeout [500] - The count of milliseconds to wait until the\n * app is terminated. The method will skip\n * checking the app state check if the timeout\n * was lower or equal to zero. Then, the return\n * value will be true.\n */\n\n/**\n * Terminates the app if it is running. If the given timeout was lower or equal to zero,\n * it returns true after terminating the app without checking the app state.\n *\n * @param {string} appId - Application package identifier\n * @param {?TerminateOptions} options - The set of application termination options\n * @returns {boolean} True if the app has been successfully terminated.\n * @throws {Error} if the app has not been terminated within the given timeout.\n */\ncommands.terminateApp = async function terminateApp (appId, options = {}) {\n this.log.info(`Terminating '${appId}'`);\n if (!(await this.adb.processExists(appId))) {\n this.log.info(`The app '${appId}' is not running`);\n return false;\n }\n await this.adb.forceStop(appId);\n const timeout = util.hasValue(options.timeout) && !isNaN(options.timeout) ? parseInt(options.timeout, 10) : 500;\n\n if (timeout <= 0) {\n this.log.info(`'${appId}' has been terminated. Skip checking the application process state ` +\n `since the timeout was set as ${timeout}ms`);\n return true;\n }\n\n try {\n await waitForCondition(async () => await this.queryAppState(appId) <= APP_STATE.NOT_RUNNING,\n {waitMs: timeout, intervalMs: 100});\n } catch (e) {\n this.log.errorAndThrow(`'${appId}' is still running after ${timeout}ms timeout`);\n }\n this.log.info(`'${appId}' has been successfully terminated`);\n return true;\n};\n\n/**\n * @typedef {Object} MobileTerminateAppOptions\n * @property {string} appId - Application package identifier. Must be always provided.\n * @property {number|string} timeout [500] - The count of milliseconds to wait until the\n * app is terminated.\n */\n\n/**\n * Terminates the app if it is running.\n *\n * @param {MobileTerminateAppOptions} opts\n * @returns {boolean} Same as in `terminateApp`\n * @throws {Error} if the app has not been terminated within the given timeout.\n */\ncommands.mobileTerminateApp = async function mobileTerminateApp (opts = {}) {\n const { appId } = requireArgs('appId', opts);\n return await this.terminateApp(appId, opts);\n};\n\n/**\n * @typedef {Object} InstallOptions\n * @property {number} timeout [60000] - The count of milliseconds to wait until the\n * app is installed.\n * @property {boolean} allowTestPackages [false] - Set to true in order to allow test\n * packages installation.\n * @property {boolean} useSdcard [false] - Set to true to install the app on sdcard\n * instead of the device memory.\n * @property {boolean} grantPermissions [false] - Set to true in order to grant all the\n * permissions requested in the application's manifest\n * automatically after the installation is completed\n * under Android 6+.\n * @property {boolean} replace [true] - Set it to false if you don't want\n * the application to be upgraded/reinstalled\n * if it is already present on the device.\n */\n\n/**\n * Installs the given application to the device under test\n *\n * @param {string} appPath - The local apk path or a remote url\n * @param {?InstallOptions} options - The set of installation options\n * @throws {Error} if the given apk does not exist or is not reachable\n */\ncommands.installApp = async function installApp (appPath, options = {}) {\n const localPath = await this.helpers.configureApp(appPath, APP_EXTENSIONS);\n await this.adb.install(localPath, options);\n};\n\n/**\n * @typedef {Object} MobileInstallAppOptions\n * @property {string} appPath - The local apk path or a remote url. Must be always provided.\n * @property {number} timeout [60000] - The count of milliseconds to wait until the\n * app is installed.\n * @property {boolean} allowTestPackages [false] - Set to true in order to allow test\n * packages installation.\n * @property {boolean} useSdcard [false] - Set to true to install the app on sdcard\n * instead of the device memory.\n * @property {boolean} grantPermissions [false] - Set to true in order to grant all the\n * permissions requested in the application's manifest\n * automatically after the installation is completed\n * under Android 6+.\n * @property {boolean} replace [true] - Set it to false if you don't want\n * the application to be upgraded/reinstalled\n * if it is already present on the device.\n */\n\n/**\n * Installs the given application to the device under test\n *\n * @param {MobileInstallAppOptions} opts\n * @throws {Error} if the given apk does not exist or is not reachable\n */\ncommands.mobileInstallApp = async function mobileInstallApp (opts = {}) {\n const { appPath } = requireArgs('appPath', opts);\n return await this.installApp(appPath, opts);\n};\n\n/**\n * @typedef {Object} ClearAppOptions\n * @property {!string} appId The identifier of the application package to be cleared\n */\n\n/**\n * Deletes all data associated with a package.\n *\n * @param {ClearAppOptions} opts\n * @throws {Error} If cleaning of the app data fails\n */\ncommands.mobileClearApp = async function mobileClearApp (opts = {}) {\n const {appId} = opts;\n if (!appId) {\n throw new errors.InvalidArgumentError(`The 'appId' argument is required`);\n }\n await this.adb.clear(appId);\n};\n\nexport { commands };\nexport default commands;\n"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"app-management.js","names":["_lodash","_interopRequireDefault","require","_asyncbox","_support","_androidHelpers","_driver","_utils","APP_EXTENSIONS","RESOLVER_ACTIVITY_NAME","commands","exports","isAppInstalled","appId","adb","mobileIsAppInstalled","opts","requireArgs","queryAppState","log","info","APP_STATE","NOT_INSTALLED","processExists","NOT_RUNNING","appIdRe","RegExp","_","escapeRegExp","line","dumpWindows","split","test","some","x","includes","RUNNING_IN_FOREGROUND","RUNNING_IN_BACKGROUND","mobileQueryAppState","activateApp","debug","apiLevel","getApiLevel","cmd","output","shell","e","errorAndThrow","message","activityName","resolveLaunchableActivity","preferCmd","stdout","Error","mobileActivateApp","removeApp","options","uninstallApk","mobileRemoveApp","terminateApp","forceStop","timeout","util","hasValue","isNaN","parseInt","waitForCondition","waitMs","intervalMs","mobileTerminateApp","installApp","appPath","localPath","helpers","configureApp","install","mobileInstallApp","mobileClearApp","errors","InvalidArgumentError","clear","_default","default"],"sources":["../../../lib/commands/app-management.js"],"sourcesContent":["import _ from 'lodash';\nimport { waitForCondition } from 'asyncbox';\nimport { util } from '@appium/support';\nimport { APP_STATE } from '../android-helpers';\nimport { errors } from 'appium/driver';\nimport { requireArgs } from '../utils';\n\nconst APP_EXTENSIONS = ['.apk', '.apks'];\nconst RESOLVER_ACTIVITY_NAME = 'android/com.android.internal.app.ResolverActivity';\n\nconst commands = {};\n\n/**\n * Verify whether an application is installed or not\n *\n * @param {string} appId - Application package identifier\n * @returns {boolean} true if the app is installed\n */\ncommands.isAppInstalled = async function isAppInstalled (appId) {\n return await this.adb.isAppInstalled(appId);\n};\n\n/**\n * @typedef {Object} MobileAppInstalledOptions\n * @property {string} appId - Application package identifier. Must be always provided.\n */\n\n/**\n * Verify whether an application is installed or not\n *\n * @param {MobileAppInstalledOptions} opts\n * @returns {boolean} Same as in `isAppInstalled`\n */\ncommands.mobileIsAppInstalled = async function mobileIsAppInstalled (opts = {}) {\n const { appId } = requireArgs('appId', opts);\n return await this.isAppInstalled(appId);\n};\n\n/**\n * Queries the current state of the app.\n *\n * @param {string} appId - Application package identifier\n * @returns {number} The corresponding constant, which describes\n * the current application state:\n * 0 - is the app is not installed\n * 1 - if the app is installed, but is not running\n * 3 - if the app is running in the background\n * 4 - if the app is running in the foreground\n */\ncommands.queryAppState = async function queryAppState (appId) {\n this.log.info(`Querying the state of '${appId}'`);\n if (!await this.adb.isAppInstalled(appId)) {\n return APP_STATE.NOT_INSTALLED;\n }\n if (!await this.adb.processExists(appId)) {\n return APP_STATE.NOT_RUNNING;\n }\n const appIdRe = new RegExp(`\\\\b${_.escapeRegExp(appId)}/`);\n for (const line of (await this.adb.dumpWindows()).split('\\n')) {\n if (appIdRe.test(line) && ['mCurrentFocus', 'mFocusedApp'].some((x) => line.includes(x))) {\n return APP_STATE.RUNNING_IN_FOREGROUND;\n }\n }\n return APP_STATE.RUNNING_IN_BACKGROUND;\n};\n\n/**\n * @typedef {Object} MobileQueryAppStateOptions\n * @property {string} appId - Application package identifier. Must be always provided.\n */\n\n/**\n * Queries the current state of the app.\n *\n * @param {MobileQueryAppStateOptions} opts\n * @returns {number} Same as in `queryAppState`\n */\ncommands.mobileQueryAppState = async function mobileQueryAppState (opts = {}) {\n const { appId } = requireArgs('appId', opts);\n return await this.queryAppState(appId);\n};\n\n/**\n * Activates the given application or launches it if necessary.\n * The action literally simulates\n * clicking the corresponding application icon on the dashboard.\n *\n * @param {string} appId - Application package identifier\n * @throws {Error} If the app cannot be activated\n */\ncommands.activateApp = async function activateApp (appId) {\n this.log.debug(`Activating '${appId}'`);\n const apiLevel = await this.adb.getApiLevel();\n // Fallback to Monkey in older APIs\n if (apiLevel < 24) {\n // The monkey command could raise an issue as https://stackoverflow.com/questions/44860475/how-to-use-the-monkey-command-with-an-android-system-that-doesnt-have-physical\n // but '--pct-syskeys 0' could cause another background process issue. https://github.com/appium/appium/issues/16941#issuecomment-1129837285\n const cmd = ['monkey',\n '-p', appId,\n '-c', 'android.intent.category.LAUNCHER',\n '1'];\n let output = '';\n try {\n output = await this.adb.shell(cmd);\n this.log.debug(`Command stdout: ${output}`);\n } catch (e) {\n this.log.errorAndThrow(`Cannot activate '${appId}'. Original error: ${e.message}`);\n }\n if (output.includes('monkey aborted')) {\n this.log.errorAndThrow(`Cannot activate '${appId}'. Are you sure it is installed?`);\n }\n return;\n }\n\n let activityName = await this.adb.resolveLaunchableActivity(appId);\n if (activityName === RESOLVER_ACTIVITY_NAME) {\n // https://github.com/appium/appium/issues/17128\n this.log.debug(\n `The launchable activity name of '${appId}' was resolved to '${activityName}'. ` +\n `Switching the resolver to not use cmd`\n );\n activityName = await this.adb.resolveLaunchableActivity(appId, {preferCmd: false});\n }\n\n const stdout = await this.adb.shell([\n 'am', (apiLevel < 26) ? 'start' : 'start-activity',\n '-a', 'android.intent.action.MAIN',\n '-c', 'android.intent.category.LAUNCHER',\n // FLAG_ACTIVITY_NEW_TASK | FLAG_ACTIVITY_RESET_TASK_IF_NEEDED\n // https://developer.android.com/reference/android/content/Intent#FLAG_ACTIVITY_NEW_TASK\n // https://developer.android.com/reference/android/content/Intent#FLAG_ACTIVITY_RESET_TASK_IF_NEEDED\n '-f', '0x10200000',\n '-n', activityName,\n ]);\n this.log.debug(stdout);\n if (/^error:/mi.test(stdout)) {\n throw new Error(`Cannot activate '${appId}'. Original error: ${stdout}`);\n }\n};\n\n/**\n * @typedef {Object} MobileActivateAppOptions\n * @property {string} appId - Application package identifier. Must be always provided.\n */\n\n/**\n * Activates the given application or launches it if necessary.\n * The action literally simulates\n * clicking the corresponding application icon on the dashboard.\n *\n * @param {MobileActivateAppOptions} opts\n * @throws {Error} If the app cannot be activated\n */\ncommands.mobileActivateApp = async function mobileActivateApp (opts = {}) {\n const { appId } = requireArgs('appId', opts);\n return await this.activateApp(appId);\n};\n\n/**\n * @typedef {Object} UninstallOptions\n * @property {number} timeout [20000] - The count of milliseconds to wait until the\n * app is uninstalled.\n * @property {boolean} keepData [false] - Set to true in order to keep the\n * application data and cache folders after uninstall.\n */\n\n/**\n * Remove the corresponding application if is installed.\n * The call is ignored if the app is not installed.\n *\n * @param {string} appId - Application package identifier\n * @param {?UninstallOptions} options - The set of removal options\n * @returns {boolean} True if the package was found on the device and\n * successfully uninstalled.\n */\ncommands.removeApp = async function removeApp (appId, options = {}) {\n return await this.adb.uninstallApk(appId, options);\n};\n\n/**\n * @typedef {Object} MobileRemoveAppOptions\n * @property {string} appId - Application package identifier. Must be always provided.\n */\n\n/**\n * Remove the corresponding application if is installed.\n * The call is ignored if the app is not installed.\n *\n * @param {MobileRemoveAppOptions} opts\n * @returns {boolean} Same as in `removeApp`\n */\ncommands.mobileRemoveApp = async function mobileRemoveApp (opts = {}) {\n const { appId } = requireArgs('appId', opts);\n return await this.removeApp(appId, opts);\n};\n\n/**\n * @typedef {Object} TerminateOptions\n * @property {number|string} timeout [500] - The count of milliseconds to wait until the\n * app is terminated. The method will skip\n * checking the app state check if the timeout\n * was lower or equal to zero. Then, the return\n * value will be true.\n */\n\n/**\n * Terminates the app if it is running. If the given timeout was lower or equal to zero,\n * it returns true after terminating the app without checking the app state.\n *\n * @param {string} appId - Application package identifier\n * @param {?TerminateOptions} options - The set of application termination options\n * @returns {boolean} True if the app has been successfully terminated.\n * @throws {Error} if the app has not been terminated within the given timeout.\n */\ncommands.terminateApp = async function terminateApp (appId, options = {}) {\n this.log.info(`Terminating '${appId}'`);\n if (!(await this.adb.processExists(appId))) {\n this.log.info(`The app '${appId}' is not running`);\n return false;\n }\n await this.adb.forceStop(appId);\n const timeout = util.hasValue(options.timeout) && !isNaN(options.timeout) ? parseInt(options.timeout, 10) : 500;\n\n if (timeout <= 0) {\n this.log.info(`'${appId}' has been terminated. Skip checking the application process state ` +\n `since the timeout was set as ${timeout}ms`);\n return true;\n }\n\n try {\n await waitForCondition(async () => await this.queryAppState(appId) <= APP_STATE.NOT_RUNNING,\n {waitMs: timeout, intervalMs: 100});\n } catch (e) {\n this.log.errorAndThrow(`'${appId}' is still running after ${timeout}ms timeout`);\n }\n this.log.info(`'${appId}' has been successfully terminated`);\n return true;\n};\n\n/**\n * @typedef {Object} MobileTerminateAppOptions\n * @property {string} appId - Application package identifier. Must be always provided.\n * @property {number|string} timeout [500] - The count of milliseconds to wait until the\n * app is terminated.\n */\n\n/**\n * Terminates the app if it is running.\n *\n * @param {MobileTerminateAppOptions} opts\n * @returns {boolean} Same as in `terminateApp`\n * @throws {Error} if the app has not been terminated within the given timeout.\n */\ncommands.mobileTerminateApp = async function mobileTerminateApp (opts = {}) {\n const { appId } = requireArgs('appId', opts);\n return await this.terminateApp(appId, opts);\n};\n\n/**\n * @typedef {Object} InstallOptions\n * @property {number} timeout [60000] - The count of milliseconds to wait until the\n * app is installed.\n * @property {boolean} allowTestPackages [false] - Set to true in order to allow test\n * packages installation.\n * @property {boolean} useSdcard [false] - Set to true to install the app on sdcard\n * instead of the device memory.\n * @property {boolean} grantPermissions [false] - Set to true in order to grant all the\n * permissions requested in the application's manifest\n * automatically after the installation is completed\n * under Android 6+.\n * @property {boolean} replace [true] - Set it to false if you don't want\n * the application to be upgraded/reinstalled\n * if it is already present on the device.\n */\n\n/**\n * Installs the given application to the device under test\n *\n * @param {string} appPath - The local apk path or a remote url\n * @param {?InstallOptions} options - The set of installation options\n * @throws {Error} if the given apk does not exist or is not reachable\n */\ncommands.installApp = async function installApp (appPath, options = {}) {\n const localPath = await this.helpers.configureApp(appPath, APP_EXTENSIONS);\n await this.adb.install(localPath, options);\n};\n\n/**\n * @typedef {Object} MobileInstallAppOptions\n * @property {string} appPath - The local apk path or a remote url. Must be always provided.\n * @property {number} timeout [60000] - The count of milliseconds to wait until the\n * app is installed.\n * @property {boolean} allowTestPackages [false] - Set to true in order to allow test\n * packages installation.\n * @property {boolean} useSdcard [false] - Set to true to install the app on sdcard\n * instead of the device memory.\n * @property {boolean} grantPermissions [false] - Set to true in order to grant all the\n * permissions requested in the application's manifest\n * automatically after the installation is completed\n * under Android 6+.\n * @property {boolean} replace [true] - Set it to false if you don't want\n * the application to be upgraded/reinstalled\n * if it is already present on the device.\n */\n\n/**\n * Installs the given application to the device under test\n *\n * @param {MobileInstallAppOptions} opts\n * @throws {Error} if the given apk does not exist or is not reachable\n */\ncommands.mobileInstallApp = async function mobileInstallApp (opts = {}) {\n const { appPath } = requireArgs('appPath', opts);\n return await this.installApp(appPath, opts);\n};\n\n/**\n * @typedef {Object} ClearAppOptions\n * @property {!string} appId The identifier of the application package to be cleared\n */\n\n/**\n * Deletes all data associated with a package.\n *\n * @param {ClearAppOptions} opts\n * @throws {Error} If cleaning of the app data fails\n */\ncommands.mobileClearApp = async function mobileClearApp (opts = {}) {\n const {appId} = opts;\n if (!appId) {\n throw new errors.InvalidArgumentError(`The 'appId' argument is required`);\n }\n await this.adb.clear(appId);\n};\n\nexport { commands };\nexport default commands;\n"],"mappings":"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"}
|