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.
Files changed (73) hide show
  1. package/CHANGELOG.md +14 -0
  2. package/build/index.js +1 -1
  3. package/build/lib/android-helpers.js +8 -6
  4. package/build/lib/android-helpers.js.map +1 -1
  5. package/build/lib/bootstrap.js +1 -1
  6. package/build/lib/bootstrap.js.map +1 -1
  7. package/build/lib/commands/actions.js +1 -1
  8. package/build/lib/commands/actions.js.map +1 -1
  9. package/build/lib/commands/alert.js +1 -1
  10. package/build/lib/commands/alert.js.map +1 -1
  11. package/build/lib/commands/app-management.js +1 -1
  12. package/build/lib/commands/app-management.js.map +1 -1
  13. package/build/lib/commands/context.js +1 -1
  14. package/build/lib/commands/context.js.map +1 -1
  15. package/build/lib/commands/coverage.js +1 -1
  16. package/build/lib/commands/coverage.js.map +1 -1
  17. package/build/lib/commands/element.js +1 -1
  18. package/build/lib/commands/element.js.map +1 -1
  19. package/build/lib/commands/emu-console.js +1 -1
  20. package/build/lib/commands/emu-console.js.map +1 -1
  21. package/build/lib/commands/execute.js +1 -1
  22. package/build/lib/commands/execute.js.map +1 -1
  23. package/build/lib/commands/file-actions.js +1 -1
  24. package/build/lib/commands/file-actions.js.map +1 -1
  25. package/build/lib/commands/find.js +1 -1
  26. package/build/lib/commands/find.js.map +1 -1
  27. package/build/lib/commands/general.js +1 -1
  28. package/build/lib/commands/general.js.map +1 -1
  29. package/build/lib/commands/ime.js +1 -1
  30. package/build/lib/commands/ime.js.map +1 -1
  31. package/build/lib/commands/index.js +1 -1
  32. package/build/lib/commands/index.js.map +1 -1
  33. package/build/lib/commands/intent.js +1 -1
  34. package/build/lib/commands/intent.js.map +1 -1
  35. package/build/lib/commands/log.js +1 -1
  36. package/build/lib/commands/log.js.map +1 -1
  37. package/build/lib/commands/media-projection.js +1 -1
  38. package/build/lib/commands/media-projection.js.map +1 -1
  39. package/build/lib/commands/network.js +1 -1
  40. package/build/lib/commands/network.js.map +1 -1
  41. package/build/lib/commands/performance.js +1 -1
  42. package/build/lib/commands/performance.js.map +1 -1
  43. package/build/lib/commands/permissions.js +1 -1
  44. package/build/lib/commands/permissions.js.map +1 -1
  45. package/build/lib/commands/recordscreen.js +1 -1
  46. package/build/lib/commands/recordscreen.js.map +1 -1
  47. package/build/lib/commands/shell.js +1 -1
  48. package/build/lib/commands/shell.js.map +1 -1
  49. package/build/lib/commands/streamscreen.js +1 -1
  50. package/build/lib/commands/streamscreen.js.map +1 -1
  51. package/build/lib/commands/system-bars.js +1 -1
  52. package/build/lib/commands/system-bars.js.map +1 -1
  53. package/build/lib/commands/touch.js +1 -1
  54. package/build/lib/commands/touch.js.map +1 -1
  55. package/build/lib/desired-caps.js +1 -1
  56. package/build/lib/desired-caps.js.map +1 -1
  57. package/build/lib/driver.js +1 -1
  58. package/build/lib/driver.js.map +1 -1
  59. package/build/lib/logger.js +1 -1
  60. package/build/lib/logger.js.map +1 -1
  61. package/build/lib/method-map.js +1 -1
  62. package/build/lib/method-map.js.map +1 -1
  63. package/build/lib/uiautomator.js +1 -1
  64. package/build/lib/uiautomator.js.map +1 -1
  65. package/build/lib/unlock-helpers.js +1 -1
  66. package/build/lib/unlock-helpers.js.map +1 -1
  67. package/build/lib/utils.js +1 -1
  68. package/build/lib/utils.js.map +1 -1
  69. package/build/lib/webview-helpers.js +1 -1
  70. package/build/lib/webview-helpers.js.map +1 -1
  71. package/lib/android-helpers.js +12 -8
  72. package/lib/commands/performance.js +17 -0
  73. package/package.json +2 -2
@@ -1 +1 @@
1
- {"version":3,"file":"method-map.js","names":["newMethodMap","POST","command","payloadParams","required","GET","optional","wrap"],"sources":["../../lib/method-map.js"],"sourcesContent":["export const newMethodMap = /** @type {const} */ ({\n '/session/:sessionId/timeouts/implicit_wait': {\n POST: { command: 'implicitWait', payloadParams: { required: ['ms'] } }\n },\n '/session/:sessionId/ime/available_engines': { GET: { command: 'availableIMEEngines' } },\n '/session/:sessionId/ime/active_engine': { GET: { command: 'getActiveIMEEngine' } },\n '/session/:sessionId/ime/activated': { GET: { command: 'isIMEActivated' } },\n '/session/:sessionId/ime/deactivate': { POST: { command: 'deactivateIMEEngine' } },\n '/session/:sessionId/ime/activate': {\n POST: {\n command: 'activateIMEEngine',\n payloadParams: { required: ['engine'] }\n }\n },\n '/session/:sessionId/window/:windowhandle/size': { GET: { command: 'getWindowSize' } },\n '/session/:sessionId/keys': {\n POST: { command: 'keys', payloadParams: { required: ['value'] } }\n },\n '/session/:sessionId/element/:elementId/location': { GET: { command: 'getLocation' } },\n '/session/:sessionId/element/:elementId/location_in_view': { GET: { command: 'getLocationInView' } },\n '/session/:sessionId/element/:elementId/size': { GET: { command: 'getSize' } },\n '/session/:sessionId/touch/click': {\n POST: { command: 'click', payloadParams: { required: ['element'] } }\n },\n '/session/:sessionId/touch/down': {\n POST: { command: 'touchDown', payloadParams: { required: ['x', 'y'] } }\n },\n '/session/:sessionId/touch/up': {\n POST: { command: 'touchUp', payloadParams: { required: ['x', 'y'] } }\n },\n '/session/:sessionId/touch/move': {\n POST: { command: 'touchMove', payloadParams: { required: ['x', 'y'] } }\n },\n '/session/:sessionId/touch/longclick': {\n POST: {\n command: 'touchLongClick',\n payloadParams: { required: ['elements'] }\n }\n },\n '/session/:sessionId/touch/flick': {\n POST: {\n command: 'flick',\n payloadParams: {\n optional: [\n 'element',\n 'xspeed',\n 'yspeed',\n 'xoffset',\n 'yoffset',\n 'speed'\n ]\n }\n }\n },\n '/session/:sessionId/touch/perform': {\n POST: {\n command: 'performTouch',\n payloadParams: { wrap: 'actions', required: ['actions'] }\n }\n },\n '/session/:sessionId/touch/multi/perform': {\n POST: {\n command: 'performMultiAction',\n payloadParams: { required: ['actions'], optional: ['elementId'] }\n }\n },\n '/session/:sessionId/appium/device/lock': {\n POST: { command: 'lock', payloadParams: { optional: ['seconds'] } }\n },\n '/session/:sessionId/appium/device/unlock': { POST: { command: 'unlock' } },\n '/session/:sessionId/appium/device/is_locked': { POST: { command: 'isLocked' } },\n '/session/:sessionId/appium/start_recording_screen': {\n POST: {\n command: 'startRecordingScreen',\n payloadParams: { optional: ['options'] }\n }\n },\n '/session/:sessionId/appium/stop_recording_screen': {\n POST: {\n command: 'stopRecordingScreen',\n payloadParams: { optional: ['options'] }\n }\n },\n '/session/:sessionId/appium/performanceData/types': { POST: { command: 'getPerformanceDataTypes' } },\n '/session/:sessionId/appium/getPerformanceData': {\n POST: {\n command: 'getPerformanceData',\n payloadParams: {\n required: ['packageName', 'dataType'],\n optional: ['dataReadTimeout']\n }\n }\n },\n '/session/:sessionId/appium/device/press_keycode': {\n POST: {\n command: 'pressKeyCode',\n payloadParams: { required: ['keycode'], optional: ['metastate', 'flags'] }\n }\n },\n '/session/:sessionId/appium/device/long_press_keycode': {\n POST: {\n command: 'longPressKeyCode',\n payloadParams: { required: ['keycode'], optional: ['metastate', 'flags'] }\n }\n },\n '/session/:sessionId/appium/device/finger_print': {\n POST: {\n command: 'fingerprint',\n payloadParams: { required: ['fingerprintId'] }\n }\n },\n '/session/:sessionId/appium/device/send_sms': {\n POST: {\n command: 'sendSMS',\n payloadParams: { required: ['phoneNumber', 'message'] }\n }\n },\n '/session/:sessionId/appium/device/gsm_call': {\n POST: {\n command: 'gsmCall',\n payloadParams: { required: ['phoneNumber', 'action'] }\n }\n },\n '/session/:sessionId/appium/device/gsm_signal': {\n POST: {\n command: 'gsmSignal',\n payloadParams: { required: ['signalStrength'] }\n }\n },\n '/session/:sessionId/appium/device/gsm_voice': {\n POST: { command: 'gsmVoice', payloadParams: { required: ['state'] } }\n },\n '/session/:sessionId/appium/device/power_capacity': {\n POST: {\n command: 'powerCapacity',\n payloadParams: { required: ['percent'] }\n }\n },\n '/session/:sessionId/appium/device/power_ac': {\n POST: { command: 'powerAC', payloadParams: { required: ['state'] } }\n },\n '/session/:sessionId/appium/device/network_speed': {\n POST: {\n command: 'networkSpeed',\n payloadParams: { required: ['netspeed'] }\n }\n },\n '/session/:sessionId/appium/device/keyevent': {\n POST: {\n command: 'keyevent',\n payloadParams: { required: ['keycode'], optional: ['metastate'] }\n }\n },\n '/session/:sessionId/appium/device/current_activity': { GET: { command: 'getCurrentActivity' } },\n '/session/:sessionId/appium/device/current_package': { GET: { command: 'getCurrentPackage' } },\n '/session/:sessionId/appium/device/app_state': {\n POST: {\n command: 'queryAppState',\n payloadParams: { required: [['appId'], ['bundleId']] }\n }\n },\n '/session/:sessionId/appium/device/toggle_airplane_mode': { POST: { command: 'toggleFlightMode' } },\n '/session/:sessionId/appium/device/toggle_data': { POST: { command: 'toggleData' } },\n '/session/:sessionId/appium/device/toggle_wifi': { POST: { command: 'toggleWiFi' } },\n '/session/:sessionId/appium/device/toggle_location_services': { POST: { command: 'toggleLocationServices' } },\n '/session/:sessionId/appium/device/open_notifications': { POST: { command: 'openNotifications' } },\n '/session/:sessionId/appium/device/start_activity': {\n POST: {\n command: 'startActivity',\n payloadParams: {\n required: ['appPackage', 'appActivity'],\n optional: [\n 'appWaitPackage',\n 'appWaitActivity',\n 'intentAction',\n 'intentCategory',\n 'intentFlags',\n 'optionalIntentArguments',\n 'dontStopAppOnReset'\n ]\n }\n }\n },\n '/session/:sessionId/appium/device/system_bars': { GET: { command: 'getSystemBars' } },\n '/session/:sessionId/appium/device/display_density': { GET: { command: 'getDisplayDensity' } },\n '/session/:sessionId/appium/app/launch': { POST: { command: 'launchApp' } },\n '/session/:sessionId/appium/app/close': { POST: { command: 'closeApp' } },\n '/session/:sessionId/appium/app/reset': { POST: { command: 'reset' } },\n '/session/:sessionId/appium/app/background': {\n POST: {\n command: 'background',\n payloadParams: { required: ['seconds'] }\n }\n },\n '/session/:sessionId/appium/app/end_test_coverage': {\n POST: {\n command: 'endCoverage',\n payloadParams: { required: ['intent', 'path'] }\n }\n },\n '/session/:sessionId/appium/app/strings': {\n POST: {\n command: 'getStrings',\n payloadParams: { optional: ['language', 'stringFile'] }\n }\n },\n '/session/:sessionId/appium/element/:elementId/value': {\n POST: {\n command: 'setValueImmediate',\n payloadParams: { required: ['text'] }\n }\n },\n '/session/:sessionId/appium/element/:elementId/replace_value': {\n POST: {\n command: 'replaceValue',\n payloadParams: { required: ['text'] }\n }\n }\n});\n"],"mappings":"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"}
1
+ {"version":3,"file":"method-map.js","names":["newMethodMap","POST","command","payloadParams","required","GET","optional","wrap","exports"],"sources":["../../lib/method-map.js"],"sourcesContent":["export const newMethodMap = /** @type {const} */ ({\n '/session/:sessionId/timeouts/implicit_wait': {\n POST: { command: 'implicitWait', payloadParams: { required: ['ms'] } }\n },\n '/session/:sessionId/ime/available_engines': { GET: { command: 'availableIMEEngines' } },\n '/session/:sessionId/ime/active_engine': { GET: { command: 'getActiveIMEEngine' } },\n '/session/:sessionId/ime/activated': { GET: { command: 'isIMEActivated' } },\n '/session/:sessionId/ime/deactivate': { POST: { command: 'deactivateIMEEngine' } },\n '/session/:sessionId/ime/activate': {\n POST: {\n command: 'activateIMEEngine',\n payloadParams: { required: ['engine'] }\n }\n },\n '/session/:sessionId/window/:windowhandle/size': { GET: { command: 'getWindowSize' } },\n '/session/:sessionId/keys': {\n POST: { command: 'keys', payloadParams: { required: ['value'] } }\n },\n '/session/:sessionId/element/:elementId/location': { GET: { command: 'getLocation' } },\n '/session/:sessionId/element/:elementId/location_in_view': { GET: { command: 'getLocationInView' } },\n '/session/:sessionId/element/:elementId/size': { GET: { command: 'getSize' } },\n '/session/:sessionId/touch/click': {\n POST: { command: 'click', payloadParams: { required: ['element'] } }\n },\n '/session/:sessionId/touch/down': {\n POST: { command: 'touchDown', payloadParams: { required: ['x', 'y'] } }\n },\n '/session/:sessionId/touch/up': {\n POST: { command: 'touchUp', payloadParams: { required: ['x', 'y'] } }\n },\n '/session/:sessionId/touch/move': {\n POST: { command: 'touchMove', payloadParams: { required: ['x', 'y'] } }\n },\n '/session/:sessionId/touch/longclick': {\n POST: {\n command: 'touchLongClick',\n payloadParams: { required: ['elements'] }\n }\n },\n '/session/:sessionId/touch/flick': {\n POST: {\n command: 'flick',\n payloadParams: {\n optional: [\n 'element',\n 'xspeed',\n 'yspeed',\n 'xoffset',\n 'yoffset',\n 'speed'\n ]\n }\n }\n },\n '/session/:sessionId/touch/perform': {\n POST: {\n command: 'performTouch',\n payloadParams: { wrap: 'actions', required: ['actions'] }\n }\n },\n '/session/:sessionId/touch/multi/perform': {\n POST: {\n command: 'performMultiAction',\n payloadParams: { required: ['actions'], optional: ['elementId'] }\n }\n },\n '/session/:sessionId/appium/device/lock': {\n POST: { command: 'lock', payloadParams: { optional: ['seconds'] } }\n },\n '/session/:sessionId/appium/device/unlock': { POST: { command: 'unlock' } },\n '/session/:sessionId/appium/device/is_locked': { POST: { command: 'isLocked' } },\n '/session/:sessionId/appium/start_recording_screen': {\n POST: {\n command: 'startRecordingScreen',\n payloadParams: { optional: ['options'] }\n }\n },\n '/session/:sessionId/appium/stop_recording_screen': {\n POST: {\n command: 'stopRecordingScreen',\n payloadParams: { optional: ['options'] }\n }\n },\n '/session/:sessionId/appium/performanceData/types': { POST: { command: 'getPerformanceDataTypes' } },\n '/session/:sessionId/appium/getPerformanceData': {\n POST: {\n command: 'getPerformanceData',\n payloadParams: {\n required: ['packageName', 'dataType'],\n optional: ['dataReadTimeout']\n }\n }\n },\n '/session/:sessionId/appium/device/press_keycode': {\n POST: {\n command: 'pressKeyCode',\n payloadParams: { required: ['keycode'], optional: ['metastate', 'flags'] }\n }\n },\n '/session/:sessionId/appium/device/long_press_keycode': {\n POST: {\n command: 'longPressKeyCode',\n payloadParams: { required: ['keycode'], optional: ['metastate', 'flags'] }\n }\n },\n '/session/:sessionId/appium/device/finger_print': {\n POST: {\n command: 'fingerprint',\n payloadParams: { required: ['fingerprintId'] }\n }\n },\n '/session/:sessionId/appium/device/send_sms': {\n POST: {\n command: 'sendSMS',\n payloadParams: { required: ['phoneNumber', 'message'] }\n }\n },\n '/session/:sessionId/appium/device/gsm_call': {\n POST: {\n command: 'gsmCall',\n payloadParams: { required: ['phoneNumber', 'action'] }\n }\n },\n '/session/:sessionId/appium/device/gsm_signal': {\n POST: {\n command: 'gsmSignal',\n payloadParams: { required: ['signalStrength'] }\n }\n },\n '/session/:sessionId/appium/device/gsm_voice': {\n POST: { command: 'gsmVoice', payloadParams: { required: ['state'] } }\n },\n '/session/:sessionId/appium/device/power_capacity': {\n POST: {\n command: 'powerCapacity',\n payloadParams: { required: ['percent'] }\n }\n },\n '/session/:sessionId/appium/device/power_ac': {\n POST: { command: 'powerAC', payloadParams: { required: ['state'] } }\n },\n '/session/:sessionId/appium/device/network_speed': {\n POST: {\n command: 'networkSpeed',\n payloadParams: { required: ['netspeed'] }\n }\n },\n '/session/:sessionId/appium/device/keyevent': {\n POST: {\n command: 'keyevent',\n payloadParams: { required: ['keycode'], optional: ['metastate'] }\n }\n },\n '/session/:sessionId/appium/device/current_activity': { GET: { command: 'getCurrentActivity' } },\n '/session/:sessionId/appium/device/current_package': { GET: { command: 'getCurrentPackage' } },\n '/session/:sessionId/appium/device/app_state': {\n POST: {\n command: 'queryAppState',\n payloadParams: { required: [['appId'], ['bundleId']] }\n }\n },\n '/session/:sessionId/appium/device/toggle_airplane_mode': { POST: { command: 'toggleFlightMode' } },\n '/session/:sessionId/appium/device/toggle_data': { POST: { command: 'toggleData' } },\n '/session/:sessionId/appium/device/toggle_wifi': { POST: { command: 'toggleWiFi' } },\n '/session/:sessionId/appium/device/toggle_location_services': { POST: { command: 'toggleLocationServices' } },\n '/session/:sessionId/appium/device/open_notifications': { POST: { command: 'openNotifications' } },\n '/session/:sessionId/appium/device/start_activity': {\n POST: {\n command: 'startActivity',\n payloadParams: {\n required: ['appPackage', 'appActivity'],\n optional: [\n 'appWaitPackage',\n 'appWaitActivity',\n 'intentAction',\n 'intentCategory',\n 'intentFlags',\n 'optionalIntentArguments',\n 'dontStopAppOnReset'\n ]\n }\n }\n },\n '/session/:sessionId/appium/device/system_bars': { GET: { command: 'getSystemBars' } },\n '/session/:sessionId/appium/device/display_density': { GET: { command: 'getDisplayDensity' } },\n '/session/:sessionId/appium/app/launch': { POST: { command: 'launchApp' } },\n '/session/:sessionId/appium/app/close': { POST: { command: 'closeApp' } },\n '/session/:sessionId/appium/app/reset': { POST: { command: 'reset' } },\n '/session/:sessionId/appium/app/background': {\n POST: {\n command: 'background',\n payloadParams: { required: ['seconds'] }\n }\n },\n '/session/:sessionId/appium/app/end_test_coverage': {\n POST: {\n command: 'endCoverage',\n payloadParams: { required: ['intent', 'path'] }\n }\n },\n '/session/:sessionId/appium/app/strings': {\n POST: {\n command: 'getStrings',\n payloadParams: { optional: ['language', 'stringFile'] }\n }\n },\n '/session/:sessionId/appium/element/:elementId/value': {\n POST: {\n command: 'setValueImmediate',\n payloadParams: { required: ['text'] }\n }\n },\n '/session/:sessionId/appium/element/:elementId/replace_value': {\n POST: {\n command: 'replaceValue',\n payloadParams: { required: ['text'] }\n }\n }\n});\n"],"mappings":"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"}
@@ -95,4 +95,4 @@ UiAutomator.STATE_STARTING = 'starting';
95
95
  UiAutomator.STATE_ONLINE = 'online';
96
96
  var _default = UiAutomator;
97
97
  exports.default = _default;
98
- //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJsb2ciLCJsb2dnZXIiLCJnZXRMb2dnZXIiLCJVaUF1dG9tYXRvciIsImV2ZW50cyIsIkV2ZW50RW1pdHRlciIsImNvbnN0cnVjdG9yIiwiYWRiIiwiZXJyb3JBbmRUaHJvdyIsInRlbXBQYXRoIiwic3RhcnQiLCJ1aUF1dG9tYXRvckJpbmFyeVBhdGgiLCJjbGFzc05hbWUiLCJzdGFydERldGVjdG9yIiwiZXh0cmFQYXJhbXMiLCJwcm9jZXNzSXNBbGl2ZSIsImRlYnVnIiwiY2hhbmdlU3RhdGUiLCJTVEFURV9TVEFSVElORyIsImphck5hbWUiLCJwYXJzZUphck5hbWVGcm9tUGF0aCIsInB1c2giLCJraWxsVWlBdXRvbWF0b3JPbkRldmljZSIsImFyZ3MiLCJwcm9jIiwiY3JlYXRlU3ViUHJvY2VzcyIsIm9uIiwiY29kZSIsInNpZ25hbCIsInN0YXRlIiwiU1RBVEVfU1RPUFBFRCIsIlNUQVRFX1NUT1BQSU5HIiwibXNnIiwiZXJyb3IiLCJTVEFURV9PTkxJTkUiLCJlIiwiZW1pdCIsIkVWRU5UX0VSUk9SIiwic3RvcCIsInNodXRkb3duIiwiYmluYXJ5UGF0aCIsInJlVGVzdCIsImV4ZWMiLCJFcnJvciIsIkVWRU5UX0NIQU5HRUQiLCJraWxsUHJvY2Vzc2VzQnlOYW1lIiwid2FybiJdLCJzb3VyY2VzIjpbIi4uLy4uL2xpYi91aWF1dG9tYXRvci5qcyJdLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgZXZlbnRzIGZyb20gJ2V2ZW50cyc7XG5pbXBvcnQgeyBsb2dnZXIgfSBmcm9tICdAYXBwaXVtL3N1cHBvcnQnO1xuXG5cbmNvbnN0IGxvZyA9IGxvZ2dlci5nZXRMb2dnZXIoJ1VpQXV0b21hdG9yJyk7XG5cbmNsYXNzIFVpQXV0b21hdG9yIGV4dGVuZHMgZXZlbnRzLkV2ZW50RW1pdHRlciB7XG4gIGNvbnN0cnVjdG9yIChhZGIpIHtcbiAgICBpZiAoIWFkYikge1xuICAgICAgbG9nLmVycm9yQW5kVGhyb3coJ2FkYiBpcyByZXF1aXJlZCB0byBpbnN0YW50aWF0ZSBVaUF1dG9tYXRvcicpO1xuICAgIH1cbiAgICBzdXBlcigpO1xuICAgIHRoaXMuYWRiID0gYWRiO1xuICAgIHRoaXMudGVtcFBhdGggPSAnL2RhdGEvbG9jYWwvdG1wLyc7XG4gIH1cblxuICBhc3luYyBzdGFydCAodWlBdXRvbWF0b3JCaW5hcnlQYXRoLCBjbGFzc05hbWUsIHN0YXJ0RGV0ZWN0b3IsIC4uLmV4dHJhUGFyYW1zKSB7XG4gICAgbGV0IHByb2Nlc3NJc0FsaXZlO1xuICAgIHRyeSB7XG4gICAgICBsb2cuZGVidWcoJ1N0YXJ0aW5nIFVpQXV0b21hdG9yJyk7XG4gICAgICB0aGlzLmNoYW5nZVN0YXRlKFVpQXV0b21hdG9yLlNUQVRFX1NUQVJUSU5HKTtcblxuICAgICAgbG9nLmRlYnVnKCdQYXJzaW5nIHVpYXV0b21hdG9yIGphcicpO1xuICAgICAgLy8gZXhwZWN0aW5nIGEgcGF0aCBsaWtlIC9hZHMvYWRzL2Zvby5qYXIgb3IgXFxhc2RcXGFzZFxcZm9vLmphclxuICAgICAgbGV0IGphck5hbWUgPSB0aGlzLnBhcnNlSmFyTmFtZUZyb21QYXRoKHVpQXV0b21hdG9yQmluYXJ5UGF0aCk7XG4gICAgICBhd2FpdCB0aGlzLmFkYi5wdXNoKHVpQXV0b21hdG9yQmluYXJ5UGF0aCwgdGhpcy50ZW1wUGF0aCk7XG5cbiAgICAgIC8vIGtpbGxpbmcgYW55IHVpYXV0b21hdG9yIGV4aXN0aW5nIHByb2Nlc3Nlc1xuICAgICAgYXdhaXQgdGhpcy5raWxsVWlBdXRvbWF0b3JPbkRldmljZSgpO1xuXG4gICAgICBsb2cuZGVidWcoJ1N0YXJ0aW5nIFVJQXV0b21hdG9yJyk7XG4gICAgICBsZXQgYXJncyA9IFsnc2hlbGwnLCAndWlhdXRvbWF0b3InLCAncnVudGVzdCcsIGphck5hbWUsICctYycsIGNsYXNzTmFtZSwgLi4uZXh0cmFQYXJhbXNdO1xuICAgICAgdGhpcy5wcm9jID0gdGhpcy5hZGIuY3JlYXRlU3ViUHJvY2VzcyhhcmdzKTtcblxuICAgICAgLy8gaGFuZGxlIG91dC1vZi1ib3VuZCBleGl0IGJ5IHNpbXBseSBlbWl0dGluZyBhIHN0b3BwZWQgc3RhdGVcbiAgICAgIHRoaXMucHJvYy5vbignZXhpdCcsIChjb2RlLCBzaWduYWwpID0+IHtcbiAgICAgICAgcHJvY2Vzc0lzQWxpdmUgPSBmYWxzZTtcbiAgICAgICAgLy8gY2xlYW51cFxuICAgICAgICBpZiAodGhpcy5zdGF0ZSAhPT0gVWlBdXRvbWF0b3IuU1RBVEVfU1RPUFBFRCAmJlxuICAgICAgICAgICAgdGhpcy5zdGF0ZSAhPT0gVWlBdXRvbWF0b3IuU1RBVEVfU1RPUFBJTkcpIHtcbiAgICAgICAgICBsZXQgbXNnID0gYFVpQXV0b21hdG9yIGV4aXRlZCB1bmV4cGVjdGVkbHkgd2l0aCBjb2RlICR7Y29kZX0sIGAgK1xuICAgICAgICAgICAgICAgICAgICBgc2lnbmFsICR7c2lnbmFsfWA7XG4gICAgICAgICAgbG9nLmVycm9yKG1zZyk7XG4gICAgICAgIH0gZWxzZSBpZiAodGhpcy5zdGF0ZSA9PT0gVWlBdXRvbWF0b3IuU1RBVEVfU1RPUFBJTkcpIHtcbiAgICAgICAgICBsb2cuZGVidWcoJ1VpQXV0b21hdG9yIHNodXQgZG93biBub3JtYWxseScpO1xuICAgICAgICB9XG4gICAgICAgIHRoaXMuY2hhbmdlU3RhdGUoVWlBdXRvbWF0b3IuU1RBVEVfU1RPUFBFRCk7XG4gICAgICB9KTtcblxuICAgICAgYXdhaXQgdGhpcy5wcm9jLnN0YXJ0KHN0YXJ0RGV0ZWN0b3IpO1xuICAgICAgcHJvY2Vzc0lzQWxpdmUgPSB0cnVlO1xuICAgICAgdGhpcy5jaGFuZ2VTdGF0ZShVaUF1dG9tYXRvci5TVEFURV9PTkxJTkUpO1xuICAgICAgcmV0dXJuIHRoaXMucHJvYztcbiAgICB9IGNhdGNoIChlKSB7XG4gICAgICB0aGlzLmVtaXQoVWlBdXRvbWF0b3IuRVZFTlRfRVJST1IsIGUpO1xuICAgICAgaWYgKHByb2Nlc3NJc0FsaXZlKSB7XG4gICAgICAgIGF3YWl0IHRoaXMua2lsbFVpQXV0b21hdG9yT25EZXZpY2UoKTtcbiAgICAgICAgYXdhaXQgdGhpcy5wcm9jLnN0b3AoKTtcbiAgICAgIH1cbiAgICAgIGxvZy5lcnJvckFuZFRocm93KGUpO1xuICAgIH1cbiAgfVxuXG4gIGFzeW5jIHNodXRkb3duICgpIHtcbiAgICBsb2cuZGVidWcoJ1NodXR0aW5nIGRvd24gVWlBdXRvbWF0b3InKTtcbiAgICBpZiAodGhpcy5zdGF0ZSAhPT0gVWlBdXRvbWF0b3IuU1RBVEVfU1RPUFBFRCkge1xuICAgICAgdGhpcy5jaGFuZ2VTdGF0ZShVaUF1dG9tYXRvci5TVEFURV9TVE9QUElORyk7XG4gICAgICBhd2FpdCB0aGlzLnByb2Muc3RvcCgpO1xuICAgIH1cbiAgICBhd2FpdCB0aGlzLmtpbGxVaUF1dG9tYXRvck9uRGV2aWNlKCk7XG4gICAgdGhpcy5jaGFuZ2VTdGF0ZShVaUF1dG9tYXRvci5TVEFURV9TVE9QUEVEKTtcbiAgfVxuXG4gIHBhcnNlSmFyTmFtZUZyb21QYXRoIChiaW5hcnlQYXRoKSB7XG4gICAgbGV0IHJlVGVzdCA9IC8uKihcXC98XFxcXCkoLipcXC5qYXIpLy5leGVjKGJpbmFyeVBhdGgpO1xuICAgIGlmICghcmVUZXN0KSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoYFVuYWJsZSB0byBwYXJzZSBqYXIgbmFtZSBmcm9tICR7YmluYXJ5UGF0aH1gKTtcbiAgICB9XG4gICAgbGV0IGphck5hbWUgPSByZVRlc3RbMl07XG4gICAgbG9nLmRlYnVnKGBGb3VuZCBqYXIgbmFtZTogJyR7amFyTmFtZX0nYCk7XG4gICAgcmV0dXJuIGphck5hbWU7XG4gIH1cblxuICBjaGFuZ2VTdGF0ZSAoc3RhdGUpIHtcbiAgICBsb2cuZGVidWcoYE1vdmluZyB0byBzdGF0ZSAnJHtzdGF0ZX0nYCk7XG4gICAgdGhpcy5zdGF0ZSA9IHN0YXRlO1xuICAgIHRoaXMuZW1pdChVaUF1dG9tYXRvci5FVkVOVF9DSEFOR0VELCB7c3RhdGV9KTtcbiAgfVxuXG4gIGFzeW5jIGtpbGxVaUF1dG9tYXRvck9uRGV2aWNlICgpIHtcbiAgICB0cnkge1xuICAgICAgYXdhaXQgdGhpcy5hZGIua2lsbFByb2Nlc3Nlc0J5TmFtZSgndWlhdXRvbWF0b3InKTtcbiAgICB9IGNhdGNoIChlKSB7XG4gICAgICBsb2cud2FybihgRXJyb3Igd2hpbGUga2lsbGluZyB1aUF1dG9tYXRvcjogJHtlfWApO1xuICAgIH1cbiAgfVxuXG59XG5cblVpQXV0b21hdG9yLkVWRU5UX0VSUk9SID0gJ3VpYXV0b21hdG9yX2Vycm9yJztcblVpQXV0b21hdG9yLkVWRU5UX0NIQU5HRUQgPSAnc3RhdGVDaGFuZ2VkJztcblVpQXV0b21hdG9yLlNUQVRFX1NUT1BQSU5HID0gJ3N0b3BwaW5nJztcblVpQXV0b21hdG9yLlNUQVRFX1NUT1BQRUQgPSAnc3RvcHBlZCc7XG5VaUF1dG9tYXRvci5TVEFURV9TVEFSVElORyA9ICdzdGFydGluZyc7XG5VaUF1dG9tYXRvci5TVEFURV9PTkxJTkUgPSAnb25saW5lJztcblxuXG5leHBvcnQgeyBVaUF1dG9tYXRvciB9O1xuZXhwb3J0IGRlZmF1bHQgVWlBdXRvbWF0b3I7XG4iXSwibWFwcGluZ3MiOiI7Ozs7Ozs7O0FBQUE7QUFDQTtBQUdBLE1BQU1BLEdBQUcsR0FBR0MsZUFBTSxDQUFDQyxTQUFTLENBQUMsYUFBYSxDQUFDO0FBRTNDLE1BQU1DLFdBQVcsU0FBU0MsZUFBTSxDQUFDQyxZQUFZLENBQUM7RUFDNUNDLFdBQVcsQ0FBRUMsR0FBRyxFQUFFO0lBQ2hCLElBQUksQ0FBQ0EsR0FBRyxFQUFFO01BQ1JQLEdBQUcsQ0FBQ1EsYUFBYSxDQUFDLDRDQUE0QyxDQUFDO0lBQ2pFO0lBQ0EsS0FBSyxFQUFFO0lBQ1AsSUFBSSxDQUFDRCxHQUFHLEdBQUdBLEdBQUc7SUFDZCxJQUFJLENBQUNFLFFBQVEsR0FBRyxrQkFBa0I7RUFDcEM7RUFFQSxNQUFNQyxLQUFLLENBQUVDLHFCQUFxQixFQUFFQyxTQUFTLEVBQUVDLGFBQWEsRUFBRSxHQUFHQyxXQUFXLEVBQUU7SUFDNUUsSUFBSUMsY0FBYztJQUNsQixJQUFJO01BQ0ZmLEdBQUcs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
98
+ //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJfZXZlbnRzIiwiX2ludGVyb3BSZXF1aXJlRGVmYXVsdCIsInJlcXVpcmUiLCJfc3VwcG9ydCIsImxvZyIsImxvZ2dlciIsImdldExvZ2dlciIsIlVpQXV0b21hdG9yIiwiZXZlbnRzIiwiRXZlbnRFbWl0dGVyIiwiY29uc3RydWN0b3IiLCJhZGIiLCJlcnJvckFuZFRocm93IiwidGVtcFBhdGgiLCJzdGFydCIsInVpQXV0b21hdG9yQmluYXJ5UGF0aCIsImNsYXNzTmFtZSIsInN0YXJ0RGV0ZWN0b3IiLCJleHRyYVBhcmFtcyIsInByb2Nlc3NJc0FsaXZlIiwiZGVidWciLCJjaGFuZ2VTdGF0ZSIsIlNUQVRFX1NUQVJUSU5HIiwiamFyTmFtZSIsInBhcnNlSmFyTmFtZUZyb21QYXRoIiwicHVzaCIsImtpbGxVaUF1dG9tYXRvck9uRGV2aWNlIiwiYXJncyIsInByb2MiLCJjcmVhdGVTdWJQcm9jZXNzIiwib24iLCJjb2RlIiwic2lnbmFsIiwic3RhdGUiLCJTVEFURV9TVE9QUEVEIiwiU1RBVEVfU1RPUFBJTkciLCJtc2ciLCJlcnJvciIsIlNUQVRFX09OTElORSIsImUiLCJlbWl0IiwiRVZFTlRfRVJST1IiLCJzdG9wIiwic2h1dGRvd24iLCJiaW5hcnlQYXRoIiwicmVUZXN0IiwiZXhlYyIsIkVycm9yIiwiRVZFTlRfQ0hBTkdFRCIsImtpbGxQcm9jZXNzZXNCeU5hbWUiLCJ3YXJuIiwiZXhwb3J0cyIsIl9kZWZhdWx0IiwiZGVmYXVsdCJdLCJzb3VyY2VzIjpbIi4uLy4uL2xpYi91aWF1dG9tYXRvci5qcyJdLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgZXZlbnRzIGZyb20gJ2V2ZW50cyc7XG5pbXBvcnQgeyBsb2dnZXIgfSBmcm9tICdAYXBwaXVtL3N1cHBvcnQnO1xuXG5cbmNvbnN0IGxvZyA9IGxvZ2dlci5nZXRMb2dnZXIoJ1VpQXV0b21hdG9yJyk7XG5cbmNsYXNzIFVpQXV0b21hdG9yIGV4dGVuZHMgZXZlbnRzLkV2ZW50RW1pdHRlciB7XG4gIGNvbnN0cnVjdG9yIChhZGIpIHtcbiAgICBpZiAoIWFkYikge1xuICAgICAgbG9nLmVycm9yQW5kVGhyb3coJ2FkYiBpcyByZXF1aXJlZCB0byBpbnN0YW50aWF0ZSBVaUF1dG9tYXRvcicpO1xuICAgIH1cbiAgICBzdXBlcigpO1xuICAgIHRoaXMuYWRiID0gYWRiO1xuICAgIHRoaXMudGVtcFBhdGggPSAnL2RhdGEvbG9jYWwvdG1wLyc7XG4gIH1cblxuICBhc3luYyBzdGFydCAodWlBdXRvbWF0b3JCaW5hcnlQYXRoLCBjbGFzc05hbWUsIHN0YXJ0RGV0ZWN0b3IsIC4uLmV4dHJhUGFyYW1zKSB7XG4gICAgbGV0IHByb2Nlc3NJc0FsaXZlO1xuICAgIHRyeSB7XG4gICAgICBsb2cuZGVidWcoJ1N0YXJ0aW5nIFVpQXV0b21hdG9yJyk7XG4gICAgICB0aGlzLmNoYW5nZVN0YXRlKFVpQXV0b21hdG9yLlNUQVRFX1NUQVJUSU5HKTtcblxuICAgICAgbG9nLmRlYnVnKCdQYXJzaW5nIHVpYXV0b21hdG9yIGphcicpO1xuICAgICAgLy8gZXhwZWN0aW5nIGEgcGF0aCBsaWtlIC9hZHMvYWRzL2Zvby5qYXIgb3IgXFxhc2RcXGFzZFxcZm9vLmphclxuICAgICAgbGV0IGphck5hbWUgPSB0aGlzLnBhcnNlSmFyTmFtZUZyb21QYXRoKHVpQXV0b21hdG9yQmluYXJ5UGF0aCk7XG4gICAgICBhd2FpdCB0aGlzLmFkYi5wdXNoKHVpQXV0b21hdG9yQmluYXJ5UGF0aCwgdGhpcy50ZW1wUGF0aCk7XG5cbiAgICAgIC8vIGtpbGxpbmcgYW55IHVpYXV0b21hdG9yIGV4aXN0aW5nIHByb2Nlc3Nlc1xuICAgICAgYXdhaXQgdGhpcy5raWxsVWlBdXRvbWF0b3JPbkRldmljZSgpO1xuXG4gICAgICBsb2cuZGVidWcoJ1N0YXJ0aW5nIFVJQXV0b21hdG9yJyk7XG4gICAgICBsZXQgYXJncyA9IFsnc2hlbGwnLCAndWlhdXRvbWF0b3InLCAncnVudGVzdCcsIGphck5hbWUsICctYycsIGNsYXNzTmFtZSwgLi4uZXh0cmFQYXJhbXNdO1xuICAgICAgdGhpcy5wcm9jID0gdGhpcy5hZGIuY3JlYXRlU3ViUHJvY2VzcyhhcmdzKTtcblxuICAgICAgLy8gaGFuZGxlIG91dC1vZi1ib3VuZCBleGl0IGJ5IHNpbXBseSBlbWl0dGluZyBhIHN0b3BwZWQgc3RhdGVcbiAgICAgIHRoaXMucHJvYy5vbignZXhpdCcsIChjb2RlLCBzaWduYWwpID0+IHtcbiAgICAgICAgcHJvY2Vzc0lzQWxpdmUgPSBmYWxzZTtcbiAgICAgICAgLy8gY2xlYW51cFxuICAgICAgICBpZiAodGhpcy5zdGF0ZSAhPT0gVWlBdXRvbWF0b3IuU1RBVEVfU1RPUFBFRCAmJlxuICAgICAgICAgICAgdGhpcy5zdGF0ZSAhPT0gVWlBdXRvbWF0b3IuU1RBVEVfU1RPUFBJTkcpIHtcbiAgICAgICAgICBsZXQgbXNnID0gYFVpQXV0b21hdG9yIGV4aXRlZCB1bmV4cGVjdGVkbHkgd2l0aCBjb2RlICR7Y29kZX0sIGAgK1xuICAgICAgICAgICAgICAgICAgICBgc2lnbmFsICR7c2lnbmFsfWA7XG4gICAgICAgICAgbG9nLmVycm9yKG1zZyk7XG4gICAgICAgIH0gZWxzZSBpZiAodGhpcy5zdGF0ZSA9PT0gVWlBdXRvbWF0b3IuU1RBVEVfU1RPUFBJTkcpIHtcbiAgICAgICAgICBsb2cuZGVidWcoJ1VpQXV0b21hdG9yIHNodXQgZG93biBub3JtYWxseScpO1xuICAgICAgICB9XG4gICAgICAgIHRoaXMuY2hhbmdlU3RhdGUoVWlBdXRvbWF0b3IuU1RBVEVfU1RPUFBFRCk7XG4gICAgICB9KTtcblxuICAgICAgYXdhaXQgdGhpcy5wcm9jLnN0YXJ0KHN0YXJ0RGV0ZWN0b3IpO1xuICAgICAgcHJvY2Vzc0lzQWxpdmUgPSB0cnVlO1xuICAgICAgdGhpcy5jaGFuZ2VTdGF0ZShVaUF1dG9tYXRvci5TVEFURV9PTkxJTkUpO1xuICAgICAgcmV0dXJuIHRoaXMucHJvYztcbiAgICB9IGNhdGNoIChlKSB7XG4gICAgICB0aGlzLmVtaXQoVWlBdXRvbWF0b3IuRVZFTlRfRVJST1IsIGUpO1xuICAgICAgaWYgKHByb2Nlc3NJc0FsaXZlKSB7XG4gICAgICAgIGF3YWl0IHRoaXMua2lsbFVpQXV0b21hdG9yT25EZXZpY2UoKTtcbiAgICAgICAgYXdhaXQgdGhpcy5wcm9jLnN0b3AoKTtcbiAgICAgIH1cbiAgICAgIGxvZy5lcnJvckFuZFRocm93KGUpO1xuICAgIH1cbiAgfVxuXG4gIGFzeW5jIHNodXRkb3duICgpIHtcbiAgICBsb2cuZGVidWcoJ1NodXR0aW5nIGRvd24gVWlBdXRvbWF0b3InKTtcbiAgICBpZiAodGhpcy5zdGF0ZSAhPT0gVWlBdXRvbWF0b3IuU1RBVEVfU1RPUFBFRCkge1xuICAgICAgdGhpcy5jaGFuZ2VTdGF0ZShVaUF1dG9tYXRvci5TVEFURV9TVE9QUElORyk7XG4gICAgICBhd2FpdCB0aGlzLnByb2Muc3RvcCgpO1xuICAgIH1cbiAgICBhd2FpdCB0aGlzLmtpbGxVaUF1dG9tYXRvck9uRGV2aWNlKCk7XG4gICAgdGhpcy5jaGFuZ2VTdGF0ZShVaUF1dG9tYXRvci5TVEFURV9TVE9QUEVEKTtcbiAgfVxuXG4gIHBhcnNlSmFyTmFtZUZyb21QYXRoIChiaW5hcnlQYXRoKSB7XG4gICAgbGV0IHJlVGVzdCA9IC8uKihcXC98XFxcXCkoLipcXC5qYXIpLy5leGVjKGJpbmFyeVBhdGgpO1xuICAgIGlmICghcmVUZXN0KSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoYFVuYWJsZSB0byBwYXJzZSBqYXIgbmFtZSBmcm9tICR7YmluYXJ5UGF0aH1gKTtcbiAgICB9XG4gICAgbGV0IGphck5hbWUgPSByZVRlc3RbMl07XG4gICAgbG9nLmRlYnVnKGBGb3VuZCBqYXIgbmFtZTogJyR7amFyTmFtZX0nYCk7XG4gICAgcmV0dXJuIGphck5hbWU7XG4gIH1cblxuICBjaGFuZ2VTdGF0ZSAoc3RhdGUpIHtcbiAgICBsb2cuZGVidWcoYE1vdmluZyB0byBzdGF0ZSAnJHtzdGF0ZX0nYCk7XG4gICAgdGhpcy5zdGF0ZSA9IHN0YXRlO1xuICAgIHRoaXMuZW1pdChVaUF1dG9tYXRvci5FVkVOVF9DSEFOR0VELCB7c3RhdGV9KTtcbiAgfVxuXG4gIGFzeW5jIGtpbGxVaUF1dG9tYXRvck9uRGV2aWNlICgpIHtcbiAgICB0cnkge1xuICAgICAgYXdhaXQgdGhpcy5hZGIua2lsbFByb2Nlc3Nlc0J5TmFtZSgndWlhdXRvbWF0b3InKTtcbiAgICB9IGNhdGNoIChlKSB7XG4gICAgICBsb2cud2FybihgRXJyb3Igd2hpbGUga2lsbGluZyB1aUF1dG9tYXRvcjogJHtlfWApO1xuICAgIH1cbiAgfVxuXG59XG5cblVpQXV0b21hdG9yLkVWRU5UX0VSUk9SID0gJ3VpYXV0b21hdG9yX2Vycm9yJztcblVpQXV0b21hdG9yLkVWRU5UX0NIQU5HRUQgPSAnc3RhdGVDaGFuZ2VkJztcblVpQXV0b21hdG9yLlNUQVRFX1NUT1BQSU5HID0gJ3N0b3BwaW5nJztcblVpQXV0b21hdG9yLlNUQVRFX1NUT1BQRUQgPSAnc3RvcHBlZCc7XG5VaUF1dG9tYXRvci5TVEFURV9TVEFSVElORyA9ICdzdGFydGluZyc7XG5VaUF1dG9tYXRvci5TVEFURV9PTkxJTkUgPSAnb25saW5lJztcblxuXG5leHBvcnQgeyBVaUF1dG9tYXRvciB9O1xuZXhwb3J0IGRlZmF1bHQgVWlBdXRvbWF0b3I7XG4iXSwibWFwcGluZ3MiOiI7Ozs7Ozs7O0FBQUEsSUFBQUEsT0FBQSxHQUFBQyxzQkFBQSxDQUFBQyxPQUFBO0FBQ0EsSUFBQUMsUUFBQSxHQUFBRCxPQUFBO0FBR0EsTUFBTUUsR0FBRyxHQUFHQyxlQUFNLENBQUNDLFNBQVMsQ0FBQyxhQUFhLENBQUM7QUFFM0MsTUFBTUMsV0FBVyxTQUFTQyxlQUFNLENBQUNDLFlBQVksQ0FBQztFQUM1Q0MsV0FBV0EsQ0FBRUMsR0FBRyxFQUFFO0lBQ2hCLElBQUksQ0FBQ0EsR0FBRyxFQUFFO01BQ1JQLEdBQUcsQ0FBQ1EsYUFBYSxDQUFDLDRDQUE0QyxDQUFDO0lBQ2pFO0lBQ0EsS0FBSyxFQUFFO0lBQ1AsSUFBSSxDQUFDRCxHQUFHLEdBQUdBLEdBQUc7SUFDZCxJ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
@@ -1 +1 @@
1
- {"version":3,"file":"uiautomator.js","names":["log","logger","getLogger","UiAutomator","events","EventEmitter","constructor","adb","errorAndThrow","tempPath","start","uiAutomatorBinaryPath","className","startDetector","extraParams","processIsAlive","debug","changeState","STATE_STARTING","jarName","parseJarNameFromPath","push","killUiAutomatorOnDevice","args","proc","createSubProcess","on","code","signal","state","STATE_STOPPED","STATE_STOPPING","msg","error","STATE_ONLINE","e","emit","EVENT_ERROR","stop","shutdown","binaryPath","reTest","exec","Error","EVENT_CHANGED","killProcessesByName","warn"],"sources":["../../lib/uiautomator.js"],"sourcesContent":["import events from 'events';\nimport { logger } from '@appium/support';\n\n\nconst log = logger.getLogger('UiAutomator');\n\nclass UiAutomator extends events.EventEmitter {\n constructor (adb) {\n if (!adb) {\n log.errorAndThrow('adb is required to instantiate UiAutomator');\n }\n super();\n this.adb = adb;\n this.tempPath = '/data/local/tmp/';\n }\n\n async start (uiAutomatorBinaryPath, className, startDetector, ...extraParams) {\n let processIsAlive;\n try {\n log.debug('Starting UiAutomator');\n this.changeState(UiAutomator.STATE_STARTING);\n\n log.debug('Parsing uiautomator jar');\n // expecting a path like /ads/ads/foo.jar or \\asd\\asd\\foo.jar\n let jarName = this.parseJarNameFromPath(uiAutomatorBinaryPath);\n await this.adb.push(uiAutomatorBinaryPath, this.tempPath);\n\n // killing any uiautomator existing processes\n await this.killUiAutomatorOnDevice();\n\n log.debug('Starting UIAutomator');\n let args = ['shell', 'uiautomator', 'runtest', jarName, '-c', className, ...extraParams];\n this.proc = this.adb.createSubProcess(args);\n\n // handle out-of-bound exit by simply emitting a stopped state\n this.proc.on('exit', (code, signal) => {\n processIsAlive = false;\n // cleanup\n if (this.state !== UiAutomator.STATE_STOPPED &&\n this.state !== UiAutomator.STATE_STOPPING) {\n let msg = `UiAutomator exited unexpectedly with code ${code}, ` +\n `signal ${signal}`;\n log.error(msg);\n } else if (this.state === UiAutomator.STATE_STOPPING) {\n log.debug('UiAutomator shut down normally');\n }\n this.changeState(UiAutomator.STATE_STOPPED);\n });\n\n await this.proc.start(startDetector);\n processIsAlive = true;\n this.changeState(UiAutomator.STATE_ONLINE);\n return this.proc;\n } catch (e) {\n this.emit(UiAutomator.EVENT_ERROR, e);\n if (processIsAlive) {\n await this.killUiAutomatorOnDevice();\n await this.proc.stop();\n }\n log.errorAndThrow(e);\n }\n }\n\n async shutdown () {\n log.debug('Shutting down UiAutomator');\n if (this.state !== UiAutomator.STATE_STOPPED) {\n this.changeState(UiAutomator.STATE_STOPPING);\n await this.proc.stop();\n }\n await this.killUiAutomatorOnDevice();\n this.changeState(UiAutomator.STATE_STOPPED);\n }\n\n parseJarNameFromPath (binaryPath) {\n let reTest = /.*(\\/|\\\\)(.*\\.jar)/.exec(binaryPath);\n if (!reTest) {\n throw new Error(`Unable to parse jar name from ${binaryPath}`);\n }\n let jarName = reTest[2];\n log.debug(`Found jar name: '${jarName}'`);\n return jarName;\n }\n\n changeState (state) {\n log.debug(`Moving to state '${state}'`);\n this.state = state;\n this.emit(UiAutomator.EVENT_CHANGED, {state});\n }\n\n async killUiAutomatorOnDevice () {\n try {\n await this.adb.killProcessesByName('uiautomator');\n } catch (e) {\n log.warn(`Error while killing uiAutomator: ${e}`);\n }\n }\n\n}\n\nUiAutomator.EVENT_ERROR = 'uiautomator_error';\nUiAutomator.EVENT_CHANGED = 'stateChanged';\nUiAutomator.STATE_STOPPING = 'stopping';\nUiAutomator.STATE_STOPPED = 'stopped';\nUiAutomator.STATE_STARTING = 'starting';\nUiAutomator.STATE_ONLINE = 'online';\n\n\nexport { UiAutomator };\nexport default UiAutomator;\n"],"mappings":"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"}
1
+ {"version":3,"file":"uiautomator.js","names":["_events","_interopRequireDefault","require","_support","log","logger","getLogger","UiAutomator","events","EventEmitter","constructor","adb","errorAndThrow","tempPath","start","uiAutomatorBinaryPath","className","startDetector","extraParams","processIsAlive","debug","changeState","STATE_STARTING","jarName","parseJarNameFromPath","push","killUiAutomatorOnDevice","args","proc","createSubProcess","on","code","signal","state","STATE_STOPPED","STATE_STOPPING","msg","error","STATE_ONLINE","e","emit","EVENT_ERROR","stop","shutdown","binaryPath","reTest","exec","Error","EVENT_CHANGED","killProcessesByName","warn","exports","_default","default"],"sources":["../../lib/uiautomator.js"],"sourcesContent":["import events from 'events';\nimport { logger } from '@appium/support';\n\n\nconst log = logger.getLogger('UiAutomator');\n\nclass UiAutomator extends events.EventEmitter {\n constructor (adb) {\n if (!adb) {\n log.errorAndThrow('adb is required to instantiate UiAutomator');\n }\n super();\n this.adb = adb;\n this.tempPath = '/data/local/tmp/';\n }\n\n async start (uiAutomatorBinaryPath, className, startDetector, ...extraParams) {\n let processIsAlive;\n try {\n log.debug('Starting UiAutomator');\n this.changeState(UiAutomator.STATE_STARTING);\n\n log.debug('Parsing uiautomator jar');\n // expecting a path like /ads/ads/foo.jar or \\asd\\asd\\foo.jar\n let jarName = this.parseJarNameFromPath(uiAutomatorBinaryPath);\n await this.adb.push(uiAutomatorBinaryPath, this.tempPath);\n\n // killing any uiautomator existing processes\n await this.killUiAutomatorOnDevice();\n\n log.debug('Starting UIAutomator');\n let args = ['shell', 'uiautomator', 'runtest', jarName, '-c', className, ...extraParams];\n this.proc = this.adb.createSubProcess(args);\n\n // handle out-of-bound exit by simply emitting a stopped state\n this.proc.on('exit', (code, signal) => {\n processIsAlive = false;\n // cleanup\n if (this.state !== UiAutomator.STATE_STOPPED &&\n this.state !== UiAutomator.STATE_STOPPING) {\n let msg = `UiAutomator exited unexpectedly with code ${code}, ` +\n `signal ${signal}`;\n log.error(msg);\n } else if (this.state === UiAutomator.STATE_STOPPING) {\n log.debug('UiAutomator shut down normally');\n }\n this.changeState(UiAutomator.STATE_STOPPED);\n });\n\n await this.proc.start(startDetector);\n processIsAlive = true;\n this.changeState(UiAutomator.STATE_ONLINE);\n return this.proc;\n } catch (e) {\n this.emit(UiAutomator.EVENT_ERROR, e);\n if (processIsAlive) {\n await this.killUiAutomatorOnDevice();\n await this.proc.stop();\n }\n log.errorAndThrow(e);\n }\n }\n\n async shutdown () {\n log.debug('Shutting down UiAutomator');\n if (this.state !== UiAutomator.STATE_STOPPED) {\n this.changeState(UiAutomator.STATE_STOPPING);\n await this.proc.stop();\n }\n await this.killUiAutomatorOnDevice();\n this.changeState(UiAutomator.STATE_STOPPED);\n }\n\n parseJarNameFromPath (binaryPath) {\n let reTest = /.*(\\/|\\\\)(.*\\.jar)/.exec(binaryPath);\n if (!reTest) {\n throw new Error(`Unable to parse jar name from ${binaryPath}`);\n }\n let jarName = reTest[2];\n log.debug(`Found jar name: '${jarName}'`);\n return jarName;\n }\n\n changeState (state) {\n log.debug(`Moving to state '${state}'`);\n this.state = state;\n this.emit(UiAutomator.EVENT_CHANGED, {state});\n }\n\n async killUiAutomatorOnDevice () {\n try {\n await this.adb.killProcessesByName('uiautomator');\n } catch (e) {\n log.warn(`Error while killing uiAutomator: ${e}`);\n }\n }\n\n}\n\nUiAutomator.EVENT_ERROR = 'uiautomator_error';\nUiAutomator.EVENT_CHANGED = 'stateChanged';\nUiAutomator.STATE_STOPPING = 'stopping';\nUiAutomator.STATE_STOPPED = 'stopped';\nUiAutomator.STATE_STARTING = 'starting';\nUiAutomator.STATE_ONLINE = 'online';\n\n\nexport { UiAutomator };\nexport default UiAutomator;\n"],"mappings":";;;;;;;;AAAA,IAAAA,OAAA,GAAAC,sBAAA,CAAAC,OAAA;AACA,IAAAC,QAAA,GAAAD,OAAA;AAGA,MAAME,GAAG,GAAGC,eAAM,CAACC,SAAS,CAAC,aAAa,CAAC;AAE3C,MAAMC,WAAW,SAASC,eAAM,CAACC,YAAY,CAAC;EAC5CC,WAAWA,CAAEC,GAAG,EAAE;IAChB,IAAI,CAACA,GAAG,EAAE;MACRP,GAAG,CAACQ,aAAa,CAAC,4CAA4C,CAAC;IACjE;IACA,KAAK,EAAE;IACP,IAAI,CAACD,GAAG,GAAGA,GAAG;IACd,IAAI,CAACE,QAAQ,GAAG,kBAAkB;EACpC;EAEA,MAAMC,KAAKA,CAAEC,qBAAqB,EAAEC,SAAS,EAAEC,aAAa,EAAE,GAAGC,WAAW,EAAE;IAC5E,IAAIC,cAAc;IAClB,IAAI;MACFf,GAAG,CAACgB,KAAK,CAAC,sBAAsB,CAAC;MACjC,IAAI,CAACC,WAAW,CAACd,WAAW,CAACe,cAAc,CAAC;MAE5ClB,GAAG,CAACgB,KAAK,CAAC,yBAAyB,CAAC;MAEpC,IAAIG,OAAO,GAAG,IAAI,CAACC,oBAAoB,CAACT,qBAAqB,CAAC;MAC9D,MAAM,IAAI,CAACJ,GAAG,CAACc,IAAI,CAACV,qBAAqB,EAAE,IAAI,CAACF,QAAQ,CAAC;MAGzD,MAAM,IAAI,CAACa,uBAAuB,EAAE;MAEpCtB,GAAG,CAACgB,KAAK,CAAC,sBAAsB,CAAC;MACjC,IAAIO,IAAI,GAAG,CAAC,OAAO,EAAE,aAAa,EAAE,SAAS,EAAEJ,OAAO,EAAE,IAAI,EAAEP,SAAS,EAAE,GAAGE,WAAW,CAAC;MACxF,IAAI,CAACU,IAAI,GAAG,IAAI,CAACjB,GAAG,CAACkB,gBAAgB,CAACF,IAAI,CAAC;MAG3C,IAAI,CAACC,IAAI,CAACE,EAAE,CAAC,MAAM,EAAE,CAACC,IAAI,EAAEC,MAAM,KAAK;QACrCb,cAAc,GAAG,KAAK;QAEtB,IAAI,IAAI,CAACc,KAAK,KAAK1B,WAAW,CAAC2B,aAAa,IACxC,IAAI,CAACD,KAAK,KAAK1B,WAAW,CAAC4B,cAAc,EAAE;UAC7C,IAAIC,GAAG,GAAI,6CAA4CL,IAAK,IAAG,GACpD,UAASC,MAAO,EAAC;UAC5B5B,GAAG,CAACiC,KAAK,CAACD,GAAG,CAAC;QAChB,CAAC,MAAM,IAAI,IAAI,CAACH,KAAK,KAAK1B,WAAW,CAAC4B,cAAc,EAAE;UACpD/B,GAAG,CAACgB,KAAK,CAAC,gCAAgC,CAAC;QAC7C;QACA,IAAI,CAACC,WAAW,CAACd,WAAW,CAAC2B,aAAa,CAAC;MAC7C,CAAC,CAAC;MAEF,MAAM,IAAI,CAACN,IAAI,CAACd,KAAK,CAACG,aAAa,CAAC;MACpCE,cAAc,GAAG,IAAI;MACrB,IAAI,CAACE,WAAW,CAACd,WAAW,CAAC+B,YAAY,CAAC;MAC1C,OAAO,IAAI,CAACV,IAAI;IAClB,CAAC,CAAC,OAAOW,CAAC,EAAE;MACV,IAAI,CAACC,IAAI,CAACjC,WAAW,CAACkC,WAAW,EAAEF,CAAC,CAAC;MACrC,IAAIpB,cAAc,EAAE;QAClB,MAAM,IAAI,CAACO,uBAAuB,EAAE;QACpC,MAAM,IAAI,CAACE,IAAI,CAACc,IAAI,EAAE;MACxB;MACAtC,GAAG,CAACQ,aAAa,CAAC2B,CAAC,CAAC;IACtB;EACF;EAEA,MAAMI,QAAQA,CAAA,EAAI;IAChBvC,GAAG,CAACgB,KAAK,CAAC,2BAA2B,CAAC;IACtC,IAAI,IAAI,CAACa,KAAK,KAAK1B,WAAW,CAAC2B,aAAa,EAAE;MAC5C,IAAI,CAACb,WAAW,CAACd,WAAW,CAAC4B,cAAc,CAAC;MAC5C,MAAM,IAAI,CAACP,IAAI,CAACc,IAAI,EAAE;IACxB;IACA,MAAM,IAAI,CAAChB,uBAAuB,EAAE;IACpC,IAAI,CAACL,WAAW,CAACd,WAAW,CAAC2B,aAAa,CAAC;EAC7C;EAEAV,oBAAoBA,CAAEoB,UAAU,EAAE;IAChC,IAAIC,MAAM,GAAG,oBAAoB,CAACC,IAAI,CAACF,UAAU,CAAC;IAClD,IAAI,CAACC,MAAM,EAAE;MACX,MAAM,IAAIE,KAAK,CAAE,iCAAgCH,UAAW,EAAC,CAAC;IAChE;IACA,IAAIrB,OAAO,GAAGsB,MAAM,CAAC,CAAC,CAAC;IACvBzC,GAAG,CAACgB,KAAK,CAAE,oBAAmBG,OAAQ,GAAE,CAAC;IACzC,OAAOA,OAAO;EAChB;EAEAF,WAAWA,CAAEY,KAAK,EAAE;IAClB7B,GAAG,CAACgB,KAAK,CAAE,oBAAmBa,KAAM,GAAE,CAAC;IACvC,IAAI,CAACA,KAAK,GAAGA,KAAK;IAClB,IAAI,CAACO,IAAI,CAACjC,WAAW,CAACyC,aAAa,EAAE;MAACf;IAAK,CAAC,CAAC;EAC/C;EAEA,MAAMP,uBAAuBA,CAAA,EAAI;IAC/B,IAAI;MACF,MAAM,IAAI,CAACf,GAAG,CAACsC,mBAAmB,CAAC,aAAa,CAAC;IACnD,CAAC,CAAC,OAAOV,CAAC,EAAE;MACVnC,GAAG,CAAC8C,IAAI,CAAE,oCAAmCX,CAAE,EAAC,CAAC;IACnD;EACF;AAEF;AAACY,OAAA,CAAA5C,WAAA,GAAAA,WAAA;AAEDA,WAAW,CAACkC,WAAW,GAAG,mBAAmB;AAC7ClC,WAAW,CAACyC,aAAa,GAAG,cAAc;AAC1CzC,WAAW,CAAC4B,cAAc,GAAG,UAAU;AACvC5B,WAAW,CAAC2B,aAAa,GAAG,SAAS;AACrC3B,WAAW,CAACe,cAAc,GAAG,UAAU;AACvCf,WAAW,CAAC+B,YAAY,GAAG,QAAQ;AAAC,IAAAc,QAAA,GAIrB7C,WAAW;AAAA4C,OAAA,CAAAE,OAAA,GAAAD,QAAA"}
@@ -239,4 +239,4 @@ helpers.PATTERN_UNLOCK = PATTERN_UNLOCK;
239
239
  helpers.FINGERPRINT_UNLOCK = FINGERPRINT_UNLOCK;
240
240
  var _default = helpers;
241
241
  exports.default = _default;
242
- //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJQSU5fVU5MT0NLIiwiUElOX1VOTE9DS19LRVlfRVZFTlQiLCJQQVNTV09SRF9VTkxPQ0siLCJQQVRURVJOX1VOTE9DSyIsIkZJTkdFUlBSSU5UX1VOTE9DSyIsIlVOTE9DS19UWVBFUyIsIktFWUNPREVfTlVNUEFEX0VOVEVSIiwiVU5MT0NLX1dBSVRfVElNRSIsIklOUFVUX0tFWVNfV0FJVF9USU1FIiwiTlVNQkVSX1pFUk9fS0VZQ09ERSIsImhlbHBlcnMiLCJ2YWxpZGF0ZVVubG9ja0NhcGFiaWxpdGllcyIsImNhcHMiLCJ1bmxvY2tLZXkiLCJ1bmxvY2tUeXBlIiwiXyIsImlzTmlsIiwiRXJyb3IiLCJpbmNsdWRlcyIsInRlc3QiLCJ0cmltIiwiZmFzdFVubG9jayIsImFkYiIsIm9wdHMiLCJjcmVkZW50aWFsIiwiY3JlZGVudGlhbFR5cGUiLCJsb2dnZXIiLCJpbmZvIiwid2FzTG9ja0VuYWJsZWQiLCJpc0xvY2tFbmFibGVkIiwiY2xlYXJMb2NrQ3JlZGVudGlhbCIsImN5Y2xlV2FrZVVwIiwiZGlzbWlzc0tleWd1YXJkIiwic2V0TG9ja0NyZWRlbnRpYWwiLCJlbmNvZGVQYXNzd29yZCIsImtleSIsInJlcGxhY2UiLCJzdHJpbmdLZXlUb0FyciIsInNwbGl0IiwiZmluZ2VycHJpbnRVbmxvY2siLCJkcml2ZXIiLCJjYXBhYmlsaXRpZXMiLCJnZXRBcGlMZXZlbCIsImZpbmdlcnByaW50Iiwic2xlZXAiLCJwaW5VbmxvY2siLCJrZXlzIiwiZWxzIiwiZmluZEVsT3JFbHMiLCJpc0VtcHR5IiwicGluVW5sb2NrV2l0aEtleUV2ZW50IiwicGlucyIsImVsIiwidGV4dCIsImdldEF0dHJpYnV0ZSIsInV0aWwiLCJ1bndyYXBFbGVtZW50IiwicGluIiwiY2xpY2siLCJ3YWl0Rm9yVW5sb2NrIiwiaXNTY3JlZW5Mb2NrZWQiLCJrZXlldmVudCIsInNoZWxsIiwicGFyc2VJbnQiLCJwYXNzd29yZFVubG9jayIsImdldFBhdHRlcm5LZXlQb3NpdGlvbiIsImluaXRQb3MiLCJwaWVjZSIsImNvbHMiLCJ4UG9zIiwieCIsIk1hdGgiLCJyb3VuZCIsInlQb3MiLCJ5IiwiY2VpbCIsImdldFBhdHRlcm5BY3Rpb25zIiwiYWN0aW9ucyIsImxhc3RQb3MiLCJrZXlQb3MiLCJwdXNoIiwiYWN0aW9uIiwib3B0aW9ucyIsImVsZW1lbnQiLCJtb3ZlVG8iLCJkaWZmWCIsImFicyIsImRpZmZZIiwicGF0dGVyblVubG9jayIsImFwaUxldmVsIiwiZ2V0TG9jYXRpb24iLCJzaXplIiwiZ2V0U2l6ZSIsIndpZHRoIiwicGVyZm9ybVRvdWNoIl0sInNvdXJjZXMiOlsiLi4vLi4vbGliL3VubG9jay1oZWxwZXJzLmpzIl0sInNvdXJjZXNDb250ZW50IjpbImltcG9ydCBsb2dnZXIgZnJvbSAnLi9sb2dnZXInO1xuaW1wb3J0IHsgc2xlZXAgfSBmcm9tICdhc3luY2JveCc7XG5pbXBvcnQgXyBmcm9tICdsb2Rhc2gnO1xuaW1wb3J0IHsgdXRpbCB9IGZyb20gJ0BhcHBpdW0vc3VwcG9ydCc7XG5cbmNvbnN0IFBJTl9VTkxPQ0sgPSAncGluJztcbmNvbnN0IFBJTl9VTkxPQ0tfS0VZX0VWRU5UID0gJ3BpbldpdGhLZXlFdmVudCc7XG5jb25zdCBQQVNTV09SRF9VTkxPQ0sgPSAncGFzc3dvcmQnO1xuY29uc3QgUEFUVEVSTl9VTkxPQ0sgPSAncGF0dGVybic7XG5jb25zdCBGSU5HRVJQUklOVF9VTkxPQ0sgPSAnZmluZ2VycHJpbnQnO1xuY29uc3QgVU5MT0NLX1RZUEVTID0gW1xuICBQSU5fVU5MT0NLLCBQSU5fVU5MT0NLX0tFWV9FVkVOVCwgUEFTU1dPUkRfVU5MT0NLLFxuICBQQVRURVJOX1VOTE9DSywgRklOR0VSUFJJTlRfVU5MT0NLXG5dO1xuY29uc3QgS0VZQ09ERV9OVU1QQURfRU5URVIgPSA2NjtcbmNvbnN0IFVOTE9DS19XQUlUX1RJTUUgPSAxMDA7XG5jb25zdCBJTlBVVF9LRVlTX1dBSVRfVElNRSA9IDEwMDtcbmNvbnN0IE5VTUJFUl9aRVJPX0tFWUNPREUgPSA3O1xuXG5jb25zdCBoZWxwZXJzID0ge307XG5cbmhlbHBlcnMudmFsaWRhdGVVbmxvY2tDYXBhYmlsaXRpZXMgPSBmdW5jdGlvbiB2YWxpZGF0ZVVubG9ja0NhcGFiaWxpdGllcyAoY2FwcyA9IHt9KSB7XG4gIGNvbnN0IHtcbiAgICB1bmxvY2tLZXksXG4gICAgdW5sb2NrVHlwZSxcbiAgfSA9IGNhcHM7XG4gIGlmIChfLmlzTmlsKHVubG9ja0tleSkgfHwgdW5sb2NrS2V5ID09PSAnJykge1xuICAgIHRocm93IG5ldyBFcnJvcignQSBub24tZW1wdHkgdW5sb2NrIGtleSB2YWx1ZSBtdXN0IGJlIHByb3ZpZGVkJyk7XG4gIH1cblxuICBpZiAoW1BJTl9VTkxPQ0ssIFBJTl9VTkxPQ0tfS0VZX0VWRU5ULCBGSU5HRVJQUklOVF9VTkxPQ0tdLmluY2x1ZGVzKHVubG9ja1R5cGUpKSB7XG4gICAgaWYgKCEvXlswLTldKyQvLnRlc3QoXy50cmltKHVubG9ja0tleSkpKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoYFVubG9jayBrZXkgdmFsdWUgJyR7dW5sb2NrS2V5fScgbXVzdCBvbmx5IGNvbnNpc3Qgb2YgZGlnaXRzYCk7XG4gICAgfVxuICB9IGVsc2UgaWYgKHVubG9ja1R5cGUgPT09IFBBVFRFUk5fVU5MT0NLKSB7XG4gICAgaWYgKCEvXlsxLTldezIsOX0kLy50ZXN0KF8udHJpbSh1bmxvY2tLZXkpKSkge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKGBVbmxvY2sga2V5IHZhbHVlICcke3VubG9ja0tleX0nIG11c3Qgb25seSBpbmNsdWRlIGZyb20gdHdvIHRvIG5pbmUgZGlnaXRzIGluIHJhbmdlIDEuLjlgKTtcbiAgICB9XG4gICAgaWYgKC8oWzEtOV0pLio/XFwxLy50ZXN0KF8udHJpbSh1bmxvY2tLZXkpKSkge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKGBVbmxvY2sga2V5IHZhbHVlICcke3VubG9ja0tleX0nIG11c3QgZGVmaW5lIGEgdmFsaWQgcGF0dGVybiB3aGVyZSByZXBlYXRzIGFyZSBub3QgYWxsb3dlZGApO1xuICAgIH1cbiAgfSBlbHNlIGlmICh1bmxvY2tUeXBlID09PSBQQVNTV09SRF9VTkxPQ0spIHtcbiAgICAvLyBEb250IHRyaW0gcGFzc3dvcmQga2V5LCB5b3UgY2FuIHVzZSBibGFuayBzcGFjZXMgaW4geW91ciBhbmRyb2lkIHBhc3N3b3JkXG4gICAgLy8gwq9cXF8o44OEKV8vwq9cbiAgICBpZiAoIS8uezQsfS9nLnRlc3QodW5sb2NrS2V5KSkge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKGBUaGUgbWluaW11bSBhbGxvd2VkIGxlbmd0aCBvZiB1bmxvY2sga2V5IHZhbHVlICcke3VubG9ja0tleX0nIGlzIDQgY2hhcmFjdGVyc2ApO1xuICAgIH1cbiAgfSBlbHNlIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoYEludmFsaWQgdW5sb2NrIHR5cGUgJyR7dW5sb2NrVHlwZX0nLiBgICtcbiAgICAgIGBPbmx5IHRoZSBmb2xsb3dpbmcgdW5sb2NrIHR5cGVzIGFyZSBzdXBwb3J0ZWQ6ICR7VU5MT0NLX1RZUEVTfWApO1xuICB9XG4gIHJldHVybiBjYXBzO1xufTtcblxuaGVscGVycy5mYXN0VW5sb2NrID0gYXN5bmMgZnVuY3Rpb24gZmFzdFVubG9jayAoYWRiLCBvcHRzID0ge30pIHtcbiAgY29uc3Qge1xuICAgIGNyZWRlbnRpYWwsXG4gICAgY3JlZGVudGlhbFR5cGUsXG4gIH0gPSBvcHRzO1xuICBsb2dnZXIuaW5mbyhgVW5sb2NraW5nIHRoZSBkZXZpY2UgdmlhIEFEQiB1c2luZyAke2NyZWRlbnRpYWxUeXBlfSBjcmVkZW50aWFsICcke2NyZWRlbnRpYWx9J2ApO1xuICBjb25zdCB3YXNMb2NrRW5hYmxlZCA9IGF3YWl0IGFkYi5pc0xvY2tFbmFibGVkKCk7XG4gIGlmICh3YXNMb2NrRW5hYmxlZCkge1xuICAgIGF3YWl0IGFkYi5jbGVhckxvY2tDcmVkZW50aWFsKGNyZWRlbnRpYWwpO1xuICAgIC8vIG5vdCBzdXJlIHdoeSwgYnV0IHRoZSBkZXZpY2UncyBzY3JlZW4gc3RpbGwgcmVtYWlucyBsb2NrZWRcbiAgICAvLyBpZiBhIHByZWxpbWluYXJ5IHdha2UgdXAgY3ljbGUgaGFzIG5vdCBiZWVuIHBlcmZvcm1lZFxuICAgIGF3YWl0IGFkYi5jeWNsZVdha2VVcCgpO1xuICB9IGVsc2Uge1xuICAgIGxvZ2dlci5pbmZvKCdObyBhY3RpdmUgbG9jayBoYXMgYmVlbiBkZXRlY3RlZC4gUHJvY2VlZGluZyB0byB0aGUga2V5Z3VhcmQgZGlzbWlzc2FsJyk7XG4gIH1cbiAgdHJ5IHtcbiAgICBhd2FpdCBhZGIuZGlzbWlzc0tleWd1YXJkKCk7XG4gIH0gZmluYWxseSB7XG4gICAgaWYgKHdhc0xvY2tFbmFibGVkKSB7XG4gICAgICBhd2FpdCBhZGIuc2V0TG9ja0NyZWRlbnRpYWwoY3JlZGVudGlhbFR5cGUsIGNyZWRlbnRpYWwpO1xuICAgIH1cbiAgfVxufTtcblxuaGVscGVycy5lbmNvZGVQYXNzd29yZCA9IGZ1bmN0aW9uIGVuY29kZVBhc3N3b3JkIChrZXkpIHtcbiAgcmV0dXJuIGAke2tleX1gLnJlcGxhY2UoL1xccy9pZywgJyVzJyk7XG59O1xuXG5oZWxwZXJzLnN0cmluZ0tleVRvQXJyID0gZnVuY3Rpb24gc3RyaW5nS2V5VG9BcnIgKGtleSkge1xuICByZXR1cm4gYCR7a2V5fWAudHJpbSgpLnJlcGxhY2UoL1xccysvZywgJycpLnNwbGl0KC9cXHMqLyk7XG59O1xuXG5oZWxwZXJzLmZpbmdlcnByaW50VW5sb2NrID0gYXN5bmMgZnVuY3Rpb24gZmluZ2VycHJpbnRVbmxvY2sgKGFkYiwgZHJpdmVyLCBjYXBhYmlsaXRpZXMpIHtcbiAgaWYgKGF3YWl0IGFkYi5nZXRBcGlMZXZlbCgpIDwgMjMpIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoJ0ZpbmdlcnByaW50IHVubG9jayBvbmx5IHdvcmtzIGZvciBBbmRyb2lkIDYrIGVtdWxhdG9ycycpO1xuICB9XG4gIGF3YWl0IGFkYi5maW5nZXJwcmludChjYXBhYmlsaXRpZXMudW5sb2NrS2V5KTtcbiAgYXdhaXQgc2xlZXAoVU5MT0NLX1dBSVRfVElNRSk7XG59O1xuXG5oZWxwZXJzLnBpblVubG9jayA9IGFzeW5jIGZ1bmN0aW9uIHBpblVubG9jayAoYWRiLCBkcml2ZXIsIGNhcGFiaWxpdGllcykge1xuICBsb2dnZXIuaW5mbyhgVHJ5aW5nIHRvIHVubG9jayBkZXZpY2UgdXNpbmcgcGluICR7Y2FwYWJpbGl0aWVzLnVubG9ja0tleX1gKTtcbiAgYXdhaXQgYWRiLmRpc21pc3NLZXlndWFyZCgpO1xuICBjb25zdCBrZXlzID0gaGVscGVycy5zdHJpbmdLZXlUb0FycihjYXBhYmlsaXRpZXMudW5sb2NrS2V5KTtcbiAgaWYgKGF3YWl0IGFkYi5nZXRBcGlMZXZlbCgpID49IDIxKSB7XG4gICAgY29uc3QgZWxzID0gYXdhaXQgZHJpdmVyLmZpbmRFbE9yRWxzKCdpZCcsICdjb20uYW5kcm9pZC5zeXN0ZW11aTppZC9kaWdpdF90ZXh0JywgdHJ1ZSk7XG4gICAgaWYgKF8uaXNFbXB0eShlbHMpKSB7XG4gICAgICAvLyBmYWxsYmFjayB0byBwaW4gd2l0aCBrZXkgZXZlbnRcbiAgICAgIHJldHVybiBhd2FpdCBoZWxwZXJzLnBpblVubG9ja1dpdGhLZXlFdmVudChhZGIsIGRyaXZlciwgY2FwYWJpbGl0aWVzKTtcbiAgICB9XG4gICAgY29uc3QgcGlucyA9IHt9O1xuICAgIGZvciAoY29uc3QgZWwgb2YgZWxzKSB7XG4gICAgICBjb25zdCB0ZXh0ID0gYXdhaXQgZHJpdmVyLmdldEF0dHJpYnV0ZSgndGV4dCcsIHV0aWwudW53cmFwRWxlbWVudChlbCkpO1xuICAgICAgcGluc1t0ZXh0XSA9IGVsO1xuICAgIH1cbiAgICBmb3IgKGNvbnN0IHBpbiBvZiBrZXlzKSB7XG4gICAgICBjb25zdCBlbCA9IHBpbnNbcGluXTtcbiAgICAgIGF3YWl0IGRyaXZlci5jbGljayh1dGlsLnVud3JhcEVsZW1lbnQoZWwpKTtcbiAgICB9XG4gIH0gZWxzZSB7XG4gICAgZm9yIChjb25zdCBwaW4gb2Yga2V5cykge1xuICAgICAgY29uc3QgZWwgPSBhd2FpdCBkcml2ZXIuZmluZEVsT3JFbHMoJ2lkJywgYGNvbS5hbmRyb2lkLmtleWd1YXJkOmlkL2tleSR7cGlufWAsIGZhbHNlKTtcbiAgICAgIGlmIChlbCA9PT0gbnVsbCkge1xuICAgICAgICAvLyBmYWxsYmFjayB0byBwaW4gd2l0aCBrZXkgZXZlbnRcbiAgICAgICAgcmV0dXJuIGF3YWl0IGhlbHBlcnMucGluVW5sb2NrV2l0aEtleUV2ZW50KGFkYiwgZHJpdmVyLCBjYXBhYmlsaXRpZXMpO1xuICAgICAgfVxuICAgICAgYXdhaXQgZHJpdmVyLmNsaWNrKHV0aWwudW53cmFwRWxlbWVudChlbCkpO1xuICAgIH1cbiAgfVxuICBhd2FpdCB3YWl0Rm9yVW5sb2NrKGFkYik7XG59O1xuXG4vKipcbiAqIFdhaXQgZm9yIHRoZSBkaXNwbGF5IHRvIGJlIHVubG9ja2VkLlxuICogU29tZSBkZXZpY2VzIGF1dG9tYXRpY2FsbHkgYWNjZXB0IHR5cGVkICdwaW4nIGFuZCAncGFzc3dvcmQnIGNvZGVcbiAqIHdpdGhvdXQgcHJlc3NpbmcgdGhlIEVudGVyIGtleS4gQnV0IHNvbWUgZGV2aWNlcyBuZWVkIGl0LlxuICogVGhpcyBtZXRob2Qgd2FpdHMgYSBmZXcgc2Vjb25kcyBmaXJzdCBmb3Igc3VjaCBhdXRvbWF0aWMgYWNjZXB0YW5jZSBjYXNlLlxuICogSWYgdGhlIGRldmljZSBpcyBzdGlsbCBsb2NrZWQsIHRoZW4gdGhpcyBtZXRob2Qgd2lsbCB0cnkgdG8gc2VuZFxuICogdGhlIGVudGVyIGtleSBjb2RlLlxuICpcbiAqIEBwYXJhbSB7QURCfSBhZGIgVGhlIGluc3RhbmNlIG9mIEFEQlxuICovXG5hc3luYyBmdW5jdGlvbiB3YWl0Rm9yVW5sb2NrIChhZGIpIHtcbiAgYXdhaXQgc2xlZXAoVU5MT0NLX1dBSVRfVElNRSk7XG4gIGlmICghYXdhaXQgYWRiLmlzU2NyZWVuTG9ja2VkKCkpIHtcbiAgICByZXR1cm47XG4gIH1cblxuICBhd2FpdCBhZGIua2V5ZXZlbnQoS0VZQ09ERV9OVU1QQURfRU5URVIpO1xuICBhd2FpdCBzbGVlcChVTkxPQ0tfV0FJVF9USU1FKTtcbn1cblxuaGVscGVycy5waW5VbmxvY2tXaXRoS2V5RXZlbnQgPSBhc3luYyBmdW5jdGlvbiBwaW5VbmxvY2tXaXRoS2V5RXZlbnQgKGFkYiwgZHJpdmVyLCBjYXBhYmlsaXRpZXMpIHtcbiAgbG9nZ2VyLmluZm8oYFRyeWluZyB0byB1bmxvY2sgZGV2aWNlIHVzaW5nIHBpbiB3aXRoIGtleWNvZGUgJHtjYXBhYmlsaXRpZXMudW5sb2NrS2V5fWApO1xuICBhd2FpdCBhZGIuZGlzbWlzc0tleWd1YXJkKCk7XG4gIGNvbnN0IGtleXMgPSBoZWxwZXJzLnN0cmluZ0tleVRvQXJyKGNhcGFiaWxpdGllcy51bmxvY2tLZXkpO1xuXG4gIC8vIFNvbWUgZGV2aWNlIGRvZXMgbm90IGhhdmUgc3lzdGVtIGtleSBpZHMgbGlrZSAnY29tLmFuZHJvaWQua2V5Z3VhcmQ6aWQva2V5J1xuICAvLyBUaGVuLCBzZW5kaW5nIGtleWV2ZW50cyBhcmUgbW9yZSByZWxpYWJsZSB0byB1bmxvY2sgdGhlIHNjcmVlbi5cbiAgZm9yIChjb25zdCBwaW4gb2Yga2V5cykge1xuICAgIC8vICdwaW4nIGlzIG51bWJlciAoMC05KSBpbiBzdHJpbmcuXG4gICAgLy8gTnVtYmVyICcwJyBpcyBrZXljb2RlICc3Jy4gbnVtYmVyICc5JyBpcyBrZXljb2RlICcxNicuXG4gICAgYXdhaXQgYWRiLnNoZWxsKFsnaW5wdXQnLCAna2V5ZXZlbnQnLCBwYXJzZUludChwaW4sIDEwKSArIE5VTUJFUl9aRVJPX0tFWUNPREVdKTtcbiAgfVxuICBhd2FpdCB3YWl0Rm9yVW5sb2NrKGFkYiwgZHJpdmVyKTtcbn07XG5cbmhlbHBlcnMucGFzc3dvcmRVbmxvY2sgPSBhc3luYyBmdW5jdGlvbiBwYXNzd29yZFVubG9jayAoYWRiLCBkcml2ZXIsIGNhcGFiaWxpdGllcykge1xuICBjb25zdCB7IHVubG9ja0tleSB9ID0gY2FwYWJpbGl0aWVzO1xuICBsb2dnZXIuaW5mbyhgVHJ5aW5nIHRvIHVubG9jayBkZXZpY2UgdXNpbmcgcGFzc3dvcmQgJHt1bmxvY2tLZXl9YCk7XG4gIGF3YWl0IGFkYi5kaXNtaXNzS2V5Z3VhcmQoKTtcbiAgLy8gUmVwbGFjZSBibGFuayBzcGFjZXMgd2l0aCAlc1xuICBjb25zdCBrZXkgPSBoZWxwZXJzLmVuY29kZVBhc3N3b3JkKHVubG9ja0tleSk7XG4gIC8vIFdoeSBhZGIgPyBJdCB3YXMgbGVzcyBmbGFreVxuICBhd2FpdCBhZGIuc2hlbGwoWydpbnB1dCcsICd0ZXh0Jywga2V5XSk7XG4gIC8vIFdoeSBzbGVlcHMgPyBBdm9pZCBzb21lIGZsYWt5bmVzcyB3YWl0aW5nIGZvciB0aGUgaW5wdXQgdG8gcmVjZWl2ZSB0aGUga2V5c1xuICBhd2FpdCBzbGVlcChJTlBVVF9LRVlTX1dBSVRfVElNRSk7XG4gIGF3YWl0IGFkYi5zaGVsbChbJ2lucHV0JywgJ2tleWV2ZW50JywgS0VZQ09ERV9OVU1QQURfRU5URVJdKTtcbiAgLy8gV2FpdHMgYSBiaXQgZm9yIHRoZSBkZXZpY2UgdG8gYmUgdW5sb2NrZWRcbiAgYXdhaXQgd2FpdEZvclVubG9jayhhZGIsIGRyaXZlcik7XG59O1xuXG5oZWxwZXJzLmdldFBhdHRlcm5LZXlQb3NpdGlvbiA9IGZ1bmN0aW9uIGdldFBhdHRlcm5LZXlQb3NpdGlvbiAoa2V5LCBpbml0UG9zLCBwaWVjZSkge1xuICAvKlxuICBIb3cgdGhlIG1hdGggd29ya3M6XG4gIFdlIGhhdmUgOSBidXR0b25zIGRpdmlkZWQgaW4gMyBjb2x1bW5zIGFuZCAzIHJvd3MgaW5zaWRlIHRoZSBsb2NrUGF0dGVyblZpZXcsXG4gIGV2ZXJ5IGJ1dHRvbiBoYXMgYSBwb3NpdGlvbiBvbiB0aGUgc2NyZWVuIGNvcnJlc3BvbmRpbmcgdG8gdGhlIGxvY2tQYXR0ZXJuVmlldyBzaW5jZVxuICBpdCBpcyB0aGUgcGFyZW50IHZpZXcgcmlnaHQgYXQgdGhlIG1pZGRsZSBvZiBlYWNoIGNvbHVtbiBvciByb3cuXG4gICovXG4gIGNvbnN0IGNvbHMgPSAzO1xuICBjb25zdCBwaW5zID0gOTtcbiAgY29uc3QgeFBvcyA9IChrZXksIHgsIHBpZWNlKSA9PiBNYXRoLnJvdW5kKHggKyAoKGtleSAlIGNvbHMpIHx8IGNvbHMpICogcGllY2UgLSBwaWVjZSAvIDIpO1xuICBjb25zdCB5UG9zID0gKGtleSwgeSwgcGllY2UpID0+IE1hdGgucm91bmQoeSArIChNYXRoLmNlaWwoKChrZXkgJSBwaW5zKSB8fCBwaW5zKSAvIGNvbHMpICogcGllY2UgLSBwaWVjZSAvIDIpKTtcbiAgcmV0dXJuIHtcbiAgICB4OiB4UG9zKGtleSwgaW5pdFBvcy54LCBwaWVjZSksXG4gICAgeTogeVBvcyhrZXksIGluaXRQb3MueSwgcGllY2UpXG4gIH07XG59O1xuXG5oZWxwZXJzLmdldFBhdHRlcm5BY3Rpb25zID0gZnVuY3Rpb24gZ2V0UGF0dGVybkFjdGlvbnMgKGtleXMsIGluaXRQb3MsIHBpZWNlKSB7XG4gIGNvbnN0IGFjdGlvbnMgPSBbXTtcbiAgbGV0IGxhc3RQb3M7XG4gIGZvciAobGV0IGtleSBvZiBrZXlzKSB7XG4gICAgY29uc3Qga2V5UG9zID0gaGVscGVycy5nZXRQYXR0ZXJuS2V5UG9zaXRpb24oa2V5LCBpbml0UG9zLCBwaWVjZSk7XG4gICAgaWYgKGtleSA9PT0ga2V5c1swXSkge1xuICAgICAgYWN0aW9ucy5wdXNoKHthY3Rpb246ICdwcmVzcycsIG9wdGlvbnM6IHtlbGVtZW50OiBudWxsLCB4OiBrZXlQb3MueCwgeToga2V5UG9zLnl9fSk7XG4gICAgICBsYXN0UG9zID0ga2V5UG9zO1xuICAgICAgY29udGludWU7XG4gICAgfVxuICAgIGNvbnN0IG1vdmVUbyA9IHt4OiAwLCB5OiAwfTtcbiAgICBjb25zdCBkaWZmWCA9IGtleVBvcy54IC0gbGFzdFBvcy54O1xuICAgIGlmIChkaWZmWCA+IDApIHtcbiAgICAgIG1vdmVUby54ID0gcGllY2U7XG4gICAgICBpZiAoTWF0aC5hYnMoZGlmZlgpID4gcGllY2UpIHtcbiAgICAgICAgbW92ZVRvLnggKz0gcGllY2U7XG4gICAgICB9XG4gICAgfSBlbHNlIGlmIChkaWZmWCA8IDApIHtcbiAgICAgIG1vdmVUby54ID0gLTEgKiBwaWVjZTtcbiAgICAgIGlmIChNYXRoLmFicyhkaWZmWCkgPiBwaWVjZSkge1xuICAgICAgICBtb3ZlVG8ueCAtPSBwaWVjZTtcbiAgICAgIH1cbiAgICB9XG4gICAgY29uc3QgZGlmZlkgPSBrZXlQb3MueSAtIGxhc3RQb3MueTtcbiAgICBpZiAoZGlmZlkgPiAwKSB7XG4gICAgICBtb3ZlVG8ueSA9IHBpZWNlO1xuICAgICAgaWYgKE1hdGguYWJzKGRpZmZZKSA+IHBpZWNlKSB7XG4gICAgICAgIG1vdmVUby55ICs9IHBpZWNlO1xuICAgICAgfVxuICAgIH0gZWxzZSBpZiAoZGlmZlkgPCAwKSB7XG4gICAgICBtb3ZlVG8ueSA9IC0xICogcGllY2U7XG4gICAgICBpZiAoTWF0aC5hYnMoZGlmZlkpID4gcGllY2UpIHtcbiAgICAgICAgbW92ZVRvLnkgLT0gcGllY2U7XG4gICAgICB9XG4gICAgfVxuICAgIGFjdGlvbnMucHVzaCh7XG4gICAgICBhY3Rpb246ICdtb3ZlVG8nLFxuICAgICAgb3B0aW9uczoge2VsZW1lbnQ6IG51bGwsIHg6IG1vdmVUby54ICsgbGFzdFBvcy54LCB5OiBtb3ZlVG8ueSArIGxhc3RQb3MueX1cbiAgICB9KTtcbiAgICBsYXN0UG9zID0ga2V5UG9zO1xuICB9XG4gIGFjdGlvbnMucHVzaCh7YWN0aW9uOiAncmVsZWFzZSd9KTtcbiAgcmV0dXJuIGFjdGlvbnM7XG59O1xuXG5oZWxwZXJzLnBhdHRlcm5VbmxvY2sgPSBhc3luYyBmdW5jdGlvbiBwYXR0ZXJuVW5sb2NrIChhZGIsIGRyaXZlciwgY2FwYWJpbGl0aWVzKSB7XG4gIGNvbnN0IHsgdW5sb2NrS2V5IH0gPSBjYXBhYmlsaXRpZXM7XG4gIGxvZ2dlci5pbmZvKGBUcnlpbmcgdG8gdW5sb2NrIGRldmljZSB1c2luZyBwYXR0ZXJuICR7dW5sb2NrS2V5fWApO1xuICBhd2FpdCBhZGIuZGlzbWlzc0tleWd1YXJkKCk7XG4gIGNvbnN0IGtleXMgPSBoZWxwZXJzLnN0cmluZ0tleVRvQXJyKHVubG9ja0tleSk7XG4gIC8qIFdlIHNldCB0aGUgZGV2aWNlIHBhdHRlcm4gYnV0dG9ucyBhcyBudW1iZXIgb2YgYSByZWd1bGFyIHBob25lXG4gICAqICB8IOKAoiDigKIg4oCiIHwgICAgIHwgMSAyIDMgfFxuICAgKiAgfCDigKIg4oCiIOKAoiB8IC0tPiB8IDQgNSA2IHxcbiAgICogIHwg4oCiIOKAoiDigKIgfCAgICAgfCA3IDggOSB8XG5cbiAgVGhlIHBhdHRlcm4gdmlldyBidXR0b25zIGFyZSBub3Qgc2VlaW5nIGJ5IHRoZSB1aWF1dG9tYXRvciBzaW5jZSB0aGV5IGFyZVxuICBpbmNsdWRlZCBpbnNpZGUgYSBGcmFtZUxheW91dCwgc28gd2UgYXJlIGdvaW5nIHRvIHRyeSBjbGlja2luZyBvbiB0aGUgYnV0dG9uc1xuICB1c2luZyB0aGUgcGFyZW50IHZpZXcgYm91bmRzIGFuZCBtYXRoLlxuICAqL1xuICBjb25zdCBhcGlMZXZlbCA9IGF3YWl0IGFkYi5nZXRBcGlMZXZlbCgpO1xuICBjb25zdCBlbCA9IGF3YWl0IGRyaXZlci5maW5kRWxPckVscygnaWQnLFxuICAgIGBjb20uYW5kcm9pZC4ke2FwaUxldmVsID49IDIxID8gJ3N5c3RlbXVpJyA6ICdrZXlndWFyZCd9OmlkL2xvY2tQYXR0ZXJuVmlld2AsXG4gICAgZmFsc2VcbiAgKTtcbiAgY29uc3QgaW5pdFBvcyA9IGF3YWl0IGRyaXZlci5nZXRMb2NhdGlvbih1dGlsLnVud3JhcEVsZW1lbnQoZWwpKTtcbiAgY29uc3Qgc2l6ZSA9IGF3YWl0IGRyaXZlci5nZXRTaXplKHV0aWwudW53cmFwRWxlbWVudChlbCkpO1xuICAvLyBHZXQgYWN0aW9ucyB0byBwZXJmb3JtXG4gIGNvbnN0IGFjdGlvbnMgPSBoZWxwZXJzLmdldFBhdHRlcm5BY3Rpb25zKGtleXMsIGluaXRQb3MsIHNpemUud2lkdGggLyAzKTtcbiAgLy8gUGVyZm9ybSBnZXN0dXJlXG4gIGF3YWl0IGRyaXZlci5wZXJmb3JtVG91Y2goYWN0aW9ucyk7XG4gIC8vIFdhaXRzIGEgYml0IGZvciB0aGUgZGV2aWNlIHRvIGJlIHVubG9ja2VkXG4gIGF3YWl0IHNsZWVwKFVOTE9DS19XQUlUX1RJTUUpO1xufTtcblxuaGVscGVycy5QSU5fVU5MT0NLID0gUElOX1VOTE9DSztcbmhlbHBlcnMuUElOX1VOTE9DS19LRVlfRVZFTlQgPSBQSU5fVU5MT0NLX0tFWV9FVkVOVDtcbmhlbHBlcnMuUEFTU1dPUkRfVU5MT0NLID0gUEFTU1dPUkRfVU5MT0NLO1xuaGVscGVycy5QQVRURVJOX1VOTE9DSyA9IFBBVFRFUk5fVU5MT0NLO1xuaGVscGVycy5GSU5HRVJQUklOVF9VTkxPQ0sgPSBGSU5HRVJQUklOVF9VTkxPQ0s7XG5cbmV4cG9ydCB7XG4gIFBJTl9VTkxPQ0ssIFBJTl9VTkxPQ0tfS0VZX0VWRU5ULCBQQVNTV09SRF9VTkxPQ0ssIFBBVFRFUk5fVU5MT0NLLFxuICBGSU5HRVJQUklOVF9VTkxPQ0ssIGhlbHBlcnNcbn07XG5leHBvcnQgZGVmYXVsdCBoZWxwZXJzO1xuIl0sIm1hcHBpbmdzIjoiOzs7Ozs7OztBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBRUEsTUFBTUEsVUFBVSxHQUFHLEtBQUs7QUFBQztBQUN6QixNQUFNQyxvQkFBb0IsR0FBRyxpQkFBaUI7QUFBQztBQUMvQyxNQUFNQyxlQUFlLEdBQUcsVUFBVTtBQUFDO0FBQ25DLE1BQU1DLGNBQWMsR0FBRyxTQUFTO0FBQUM7QUFDakMsTUFBTUMsa0JBQWtCLEdBQUcsYUFBYTtBQUFDO0FBQ3pDLE1BQU1DLFlBQVksR0FBRyxDQUNuQkwsVUFBVSxFQUFFQyxvQkFBb0IsRUFBRUMsZUFBZSxFQUNqREMsY0FBYyxFQUFFQyxrQkFBa0IsQ0FDbkM7QUFDRCxNQUFNRSxvQkFBb0IsR0FBRyxFQUFFO0FBQy9CLE1BQU1DLGdCQUFnQixHQUFHLEdBQUc7QUFDNUIsTUFBTUMsb0JBQW9CLEdBQUcsR0FBRztBQUNoQyxNQUFNQyxtQkFBbUIs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
242
+ //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJfbG9nZ2VyIiwiX2ludGVyb3BSZXF1aXJlRGVmYXVsdCIsInJlcXVpcmUiLCJfYXN5bmNib3giLCJfbG9kYXNoIiwiX3N1cHBvcnQiLCJQSU5fVU5MT0NLIiwiZXhwb3J0cyIsIlBJTl9VTkxPQ0tfS0VZX0VWRU5UIiwiUEFTU1dPUkRfVU5MT0NLIiwiUEFUVEVSTl9VTkxPQ0siLCJGSU5HRVJQUklOVF9VTkxPQ0siLCJVTkxPQ0tfVFlQRVMiLCJLRVlDT0RFX05VTVBBRF9FTlRFUiIsIlVOTE9DS19XQUlUX1RJTUUiLCJJTlBVVF9LRVlTX1dBSVRfVElNRSIsIk5VTUJFUl9aRVJPX0tFWUNPREUiLCJoZWxwZXJzIiwidmFsaWRhdGVVbmxvY2tDYXBhYmlsaXRpZXMiLCJjYXBzIiwidW5sb2NrS2V5IiwidW5sb2NrVHlwZSIsIl8iLCJpc05pbCIsIkVycm9yIiwiaW5jbHVkZXMiLCJ0ZXN0IiwidHJpbSIsImZhc3RVbmxvY2siLCJhZGIiLCJvcHRzIiwiY3JlZGVudGlhbCIsImNyZWRlbnRpYWxUeXBlIiwibG9nZ2VyIiwiaW5mbyIsIndhc0xvY2tFbmFibGVkIiwiaXNMb2NrRW5hYmxlZCIsImNsZWFyTG9ja0NyZWRlbnRpYWwiLCJjeWNsZVdha2VVcCIsImRpc21pc3NLZXlndWFyZCIsInNldExvY2tDcmVkZW50aWFsIiwiZW5jb2RlUGFzc3dvcmQiLCJrZXkiLCJyZXBsYWNlIiwic3RyaW5nS2V5VG9BcnIiLCJzcGxpdCIsImZpbmdlcnByaW50VW5sb2NrIiwiZHJpdmVyIiwiY2FwYWJpbGl0aWVzIiwiZ2V0QXBpTGV2ZWwiLCJmaW5nZXJwcmludCIsInNsZWVwIiwicGluVW5sb2NrIiwia2V5cyIsImVscyIsImZpbmRFbE9yRWxzIiwiaXNFbXB0eSIsInBpblVubG9ja1dpdGhLZXlFdmVudCIsInBpbnMiLCJlbCIsInRleHQiLCJnZXRBdHRyaWJ1dGUiLCJ1dGlsIiwidW53cmFwRWxlbWVudCIsInBpbiIsImNsaWNrIiwid2FpdEZvclVubG9jayIsImlzU2NyZWVuTG9ja2VkIiwia2V5ZXZlbnQiLCJzaGVsbCIsInBhcnNlSW50IiwicGFzc3dvcmRVbmxvY2siLCJnZXRQYXR0ZXJuS2V5UG9zaXRpb24iLCJpbml0UG9zIiwicGllY2UiLCJjb2xzIiwieFBvcyIsIngiLCJNYXRoIiwicm91bmQiLCJ5UG9zIiwieSIsImNlaWwiLCJnZXRQYXR0ZXJuQWN0aW9ucyIsImFjdGlvbnMiLCJsYXN0UG9zIiwia2V5UG9zIiwicHVzaCIsImFjdGlvbiIsIm9wdGlvbnMiLCJlbGVtZW50IiwibW92ZVRvIiwiZGlmZlgiLCJhYnMiLCJkaWZmWSIsInBhdHRlcm5VbmxvY2siLCJhcGlMZXZlbCIsImdldExvY2F0aW9uIiwic2l6ZSIsImdldFNpemUiLCJ3aWR0aCIsInBlcmZvcm1Ub3VjaCIsIl9kZWZhdWx0IiwiZGVmYXVsdCJdLCJzb3VyY2VzIjpbIi4uLy4uL2xpYi91bmxvY2staGVscGVycy5qcyJdLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgbG9nZ2VyIGZyb20gJy4vbG9nZ2VyJztcbmltcG9ydCB7IHNsZWVwIH0gZnJvbSAnYXN5bmNib3gnO1xuaW1wb3J0IF8gZnJvbSAnbG9kYXNoJztcbmltcG9ydCB7IHV0aWwgfSBmcm9tICdAYXBwaXVtL3N1cHBvcnQnO1xuXG5jb25zdCBQSU5fVU5MT0NLID0gJ3Bpbic7XG5jb25zdCBQSU5fVU5MT0NLX0tFWV9FVkVOVCA9ICdwaW5XaXRoS2V5RXZlbnQnO1xuY29uc3QgUEFTU1dPUkRfVU5MT0NLID0gJ3Bhc3N3b3JkJztcbmNvbnN0IFBBVFRFUk5fVU5MT0NLID0gJ3BhdHRlcm4nO1xuY29uc3QgRklOR0VSUFJJTlRfVU5MT0NLID0gJ2ZpbmdlcnByaW50JztcbmNvbnN0IFVOTE9DS19UWVBFUyA9IFtcbiAgUElOX1VOTE9DSywgUElOX1VOTE9DS19LRVlfRVZFTlQsIFBBU1NXT1JEX1VOTE9DSyxcbiAgUEFUVEVSTl9VTkxPQ0ssIEZJTkdFUlBSSU5UX1VOTE9DS1xuXTtcbmNvbnN0IEtFWUNPREVfTlVNUEFEX0VOVEVSID0gNjY7XG5jb25zdCBVTkxPQ0tfV0FJVF9USU1FID0gMTAwO1xuY29uc3QgSU5QVVRfS0VZU19XQUlUX1RJTUUgPSAxMDA7XG5jb25zdCBOVU1CRVJfWkVST19LRVlDT0RFID0gNztcblxuY29uc3QgaGVscGVycyA9IHt9O1xuXG5oZWxwZXJzLnZhbGlkYXRlVW5sb2NrQ2FwYWJpbGl0aWVzID0gZnVuY3Rpb24gdmFsaWRhdGVVbmxvY2tDYXBhYmlsaXRpZXMgKGNhcHMgPSB7fSkge1xuICBjb25zdCB7XG4gICAgdW5sb2NrS2V5LFxuICAgIHVubG9ja1R5cGUsXG4gIH0gPSBjYXBzO1xuICBpZiAoXy5pc05pbCh1bmxvY2tLZXkpIHx8IHVubG9ja0tleSA9PT0gJycpIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoJ0Egbm9uLWVtcHR5IHVubG9jayBrZXkgdmFsdWUgbXVzdCBiZSBwcm92aWRlZCcpO1xuICB9XG5cbiAgaWYgKFtQSU5fVU5MT0NLLCBQSU5fVU5MT0NLX0tFWV9FVkVOVCwgRklOR0VSUFJJTlRfVU5MT0NLXS5pbmNsdWRlcyh1bmxvY2tUeXBlKSkge1xuICAgIGlmICghL15bMC05XSskLy50ZXN0KF8udHJpbSh1bmxvY2tLZXkpKSkge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKGBVbmxvY2sga2V5IHZhbHVlICcke3VubG9ja0tleX0nIG11c3Qgb25seSBjb25zaXN0IG9mIGRpZ2l0c2ApO1xuICAgIH1cbiAgfSBlbHNlIGlmICh1bmxvY2tUeXBlID09PSBQQVRURVJOX1VOTE9DSykge1xuICAgIGlmICghL15bMS05XXsyLDl9JC8udGVzdChfLnRyaW0odW5sb2NrS2V5KSkpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcihgVW5sb2NrIGtleSB2YWx1ZSAnJHt1bmxvY2tLZXl9JyBtdXN0IG9ubHkgaW5jbHVkZSBmcm9tIHR3byB0byBuaW5lIGRpZ2l0cyBpbiByYW5nZSAxLi45YCk7XG4gICAgfVxuICAgIGlmICgvKFsxLTldKS4qP1xcMS8udGVzdChfLnRyaW0odW5sb2NrS2V5KSkpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcihgVW5sb2NrIGtleSB2YWx1ZSAnJHt1bmxvY2tLZXl9JyBtdXN0IGRlZmluZSBhIHZhbGlkIHBhdHRlcm4gd2hlcmUgcmVwZWF0cyBhcmUgbm90IGFsbG93ZWRgKTtcbiAgICB9XG4gIH0gZWxzZSBpZiAodW5sb2NrVHlwZSA9PT0gUEFTU1dPUkRfVU5MT0NLKSB7XG4gICAgLy8gRG9udCB0cmltIHBhc3N3b3JkIGtleSwgeW91IGNhbiB1c2UgYmxhbmsgc3BhY2VzIGluIHlvdXIgYW5kcm9pZCBwYXNzd29yZFxuICAgIC8vIMKvXFxfKOODhClfL8KvXG4gICAgaWYgKCEvLns0LH0vZy50ZXN0KHVubG9ja0tleSkpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcihgVGhlIG1pbmltdW0gYWxsb3dlZCBsZW5ndGggb2YgdW5sb2NrIGtleSB2YWx1ZSAnJHt1bmxvY2tLZXl9JyBpcyA0IGNoYXJhY3RlcnNgKTtcbiAgICB9XG4gIH0gZWxzZSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKGBJbnZhbGlkIHVubG9jayB0eXBlICcke3VubG9ja1R5cGV9Jy4gYCArXG4gICAgICBgT25seSB0aGUgZm9sbG93aW5nIHVubG9jayB0eXBlcyBhcmUgc3VwcG9ydGVkOiAke1VOTE9DS19UWVBFU31gKTtcbiAgfVxuICByZXR1cm4gY2Fwcztcbn07XG5cbmhlbHBlcnMuZmFzdFVubG9jayA9IGFzeW5jIGZ1bmN0aW9uIGZhc3RVbmxvY2sgKGFkYiwgb3B0cyA9IHt9KSB7XG4gIGNvbnN0IHtcbiAgICBjcmVkZW50aWFsLFxuICAgIGNyZWRlbnRpYWxUeXBlLFxuICB9ID0gb3B0cztcbiAgbG9nZ2VyLmluZm8oYFVubG9ja2luZyB0aGUgZGV2aWNlIHZpYSBBREIgdXNpbmcgJHtjcmVkZW50aWFsVHlwZX0gY3JlZGVudGlhbCAnJHtjcmVkZW50aWFsfSdgKTtcbiAgY29uc3Qgd2FzTG9ja0VuYWJsZWQgPSBhd2FpdCBhZGIuaXNMb2NrRW5hYmxlZCgpO1xuICBpZiAod2FzTG9ja0VuYWJsZWQpIHtcbiAgICBhd2FpdCBhZGIuY2xlYXJMb2NrQ3JlZGVudGlhbChjcmVkZW50aWFsKTtcbiAgICAvLyBub3Qgc3VyZSB3aHksIGJ1dCB0aGUgZGV2aWNlJ3Mgc2NyZWVuIHN0aWxsIHJlbWFpbnMgbG9ja2VkXG4gICAgLy8gaWYgYSBwcmVsaW1pbmFyeSB3YWtlIHVwIGN5Y2xlIGhhcyBub3QgYmVlbiBwZXJmb3JtZWRcbiAgICBhd2FpdCBhZGIuY3ljbGVXYWtlVXAoKTtcbiAgfSBlbHNlIHtcbiAgICBsb2dnZXIuaW5mbygnTm8gYWN0aXZlIGxvY2sgaGFzIGJlZW4gZGV0ZWN0ZWQuIFByb2NlZWRpbmcgdG8gdGhlIGtleWd1YXJkIGRpc21pc3NhbCcpO1xuICB9XG4gIHRyeSB7XG4gICAgYXdhaXQgYWRiLmRpc21pc3NLZXlndWFyZCgpO1xuICB9IGZpbmFsbHkge1xuICAgIGlmICh3YXNMb2NrRW5hYmxlZCkge1xuICAgICAgYXdhaXQgYWRiLnNldExvY2tDcmVkZW50aWFsKGNyZWRlbnRpYWxUeXBlLCBjcmVkZW50aWFsKTtcbiAgICB9XG4gIH1cbn07XG5cbmhlbHBlcnMuZW5jb2RlUGFzc3dvcmQgPSBmdW5jdGlvbiBlbmNvZGVQYXNzd29yZCAoa2V5KSB7XG4gIHJldHVybiBgJHtrZXl9YC5yZXBsYWNlKC9cXHMvaWcsICclcycpO1xufTtcblxuaGVscGVycy5zdHJpbmdLZXlUb0FyciA9IGZ1bmN0aW9uIHN0cmluZ0tleVRvQXJyIChrZXkpIHtcbiAgcmV0dXJuIGAke2tleX1gLnRyaW0oKS5yZXBsYWNlKC9cXHMrL2csICcnKS5zcGxpdCgvXFxzKi8pO1xufTtcblxuaGVscGVycy5maW5nZXJwcmludFVubG9jayA9IGFzeW5jIGZ1bmN0aW9uIGZpbmdlcnByaW50VW5sb2NrIChhZGIsIGRyaXZlciwgY2FwYWJpbGl0aWVzKSB7XG4gIGlmIChhd2FpdCBhZGIuZ2V0QXBpTGV2ZWwoKSA8IDIzKSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKCdGaW5nZXJwcmludCB1bmxvY2sgb25seSB3b3JrcyBmb3IgQW5kcm9pZCA2KyBlbXVsYXRvcnMnKTtcbiAgfVxuICBhd2FpdCBhZGIuZmluZ2VycHJpbnQoY2FwYWJpbGl0aWVzLnVubG9ja0tleSk7XG4gIGF3YWl0IHNsZWVwKFVOTE9DS19XQUlUX1RJTUUpO1xufTtcblxuaGVscGVycy5waW5VbmxvY2sgPSBhc3luYyBmdW5jdGlvbiBwaW5VbmxvY2sgKGFkYiwgZHJpdmVyLCBjYXBhYmlsaXRpZXMpIHtcbiAgbG9nZ2VyLmluZm8oYFRyeWluZyB0byB1bmxvY2sgZGV2aWNlIHVzaW5nIHBpbiAke2NhcGFiaWxpdGllcy51bmxvY2tLZXl9YCk7XG4gIGF3YWl0IGFkYi5kaXNtaXNzS2V5Z3VhcmQoKTtcbiAgY29uc3Qga2V5cyA9IGhlbHBlcnMuc3RyaW5nS2V5VG9BcnIoY2FwYWJpbGl0aWVzLnVubG9ja0tleSk7XG4gIGlmIChhd2FpdCBhZGIuZ2V0QXBpTGV2ZWwoKSA+PSAyMSkge1xuICAgIGNvbnN0IGVscyA9IGF3YWl0IGRyaXZlci5maW5kRWxPckVscygnaWQnLCAnY29tLmFuZHJvaWQuc3lzdGVtdWk6aWQvZGlnaXRfdGV4dCcsIHRydWUpO1xuICAgIGlmIChfLmlzRW1wdHkoZWxzKSkge1xuICAgICAgLy8gZmFsbGJhY2sgdG8gcGluIHdpdGgga2V5IGV2ZW50XG4gICAgICByZXR1cm4gYXdhaXQgaGVscGVycy5waW5VbmxvY2tXaXRoS2V5RXZlbnQoYWRiLCBkcml2ZXIsIGNhcGFiaWxpdGllcyk7XG4gICAgfVxuICAgIGNvbnN0IHBpbnMgPSB7fTtcbiAgICBmb3IgKGNvbnN0IGVsIG9mIGVscykge1xuICAgICAgY29uc3QgdGV4dCA9IGF3YWl0IGRyaXZlci5nZXRBdHRyaWJ1dGUoJ3RleHQnLCB1dGlsLnVud3JhcEVsZW1lbnQoZWwpKTtcbiAgICAgIHBpbnNbdGV4dF0gPSBlbDtcbiAgICB9XG4gICAgZm9yIChjb25zdCBwaW4gb2Yga2V5cykge1xuICAgICAgY29uc3QgZWwgPSBwaW5zW3Bpbl07XG4gICAgICBhd2FpdCBkcml2ZXIuY2xpY2sodXRpbC51bndyYXBFbGVtZW50KGVsKSk7XG4gICAgfVxuICB9IGVsc2Uge1xuICAgIGZvciAoY29uc3QgcGluIG9mIGtleXMpIHtcbiAgICAgIGNvbnN0IGVsID0gYXdhaXQgZHJpdmVyLmZpbmRFbE9yRWxzKCdpZCcsIGBjb20uYW5kcm9pZC5rZXlndWFyZDppZC9rZXkke3Bpbn1gLCBmYWxzZSk7XG4gICAgICBpZiAoZWwgPT09IG51bGwpIHtcbiAgICAgICAgLy8gZmFsbGJhY2sgdG8gcGluIHdpdGgga2V5IGV2ZW50XG4gICAgICAgIHJldHVybiBhd2FpdCBoZWxwZXJzLnBpblVubG9ja1dpdGhLZXlFdmVudChhZGIsIGRyaXZlciwgY2FwYWJpbGl0aWVzKTtcbiAgICAgIH1cbiAgICAgIGF3YWl0IGRyaXZlci5jbGljayh1dGlsLnVud3JhcEVsZW1lbnQoZWwpKTtcbiAgICB9XG4gIH1cbiAgYXdhaXQgd2FpdEZvclVubG9jayhhZGIpO1xufTtcblxuLyoqXG4gKiBXYWl0IGZvciB0aGUgZGlzcGxheSB0byBiZSB1bmxvY2tlZC5cbiAqIFNvbWUgZGV2aWNlcyBhdXRvbWF0aWNhbGx5IGFjY2VwdCB0eXBlZCAncGluJyBhbmQgJ3Bhc3N3b3JkJyBjb2RlXG4gKiB3aXRob3V0IHByZXNzaW5nIHRoZSBFbnRlciBrZXkuIEJ1dCBzb21lIGRldmljZXMgbmVlZCBpdC5cbiAqIFRoaXMgbWV0aG9kIHdhaXRzIGEgZmV3IHNlY29uZHMgZmlyc3QgZm9yIHN1Y2ggYXV0b21hdGljIGFjY2VwdGFuY2UgY2FzZS5cbiAqIElmIHRoZSBkZXZpY2UgaXMgc3RpbGwgbG9ja2VkLCB0aGVuIHRoaXMgbWV0aG9kIHdpbGwgdHJ5IHRvIHNlbmRcbiAqIHRoZSBlbnRlciBrZXkgY29kZS5cbiAqXG4gKiBAcGFyYW0ge0FEQn0gYWRiIFRoZSBpbnN0YW5jZSBvZiBBREJcbiAqL1xuYXN5bmMgZnVuY3Rpb24gd2FpdEZvclVubG9jayAoYWRiKSB7XG4gIGF3YWl0IHNsZWVwKFVOTE9DS19XQUlUX1RJTUUpO1xuICBpZiAoIWF3YWl0IGFkYi5pc1NjcmVlbkxvY2tlZCgpKSB7XG4gICAgcmV0dXJuO1xuICB9XG5cbiAgYXdhaXQgYWRiLmtleWV2ZW50KEtFWUNPREVfTlVNUEFEX0VOVEVSKTtcbiAgYXdhaXQgc2xlZXAoVU5MT0NLX1dBSVRfVElNRSk7XG59XG5cbmhlbHBlcnMucGluVW5sb2NrV2l0aEtleUV2ZW50ID0gYXN5bmMgZnVuY3Rpb24gcGluVW5sb2NrV2l0aEtleUV2ZW50IChhZGIsIGRyaXZlciwgY2FwYWJpbGl0aWVzKSB7XG4gIGxvZ2dlci5pbmZvKGBUcnlpbmcgdG8gdW5sb2NrIGRldmljZSB1c2luZyBwaW4gd2l0aCBrZXljb2RlICR7Y2FwYWJpbGl0aWVzLnVubG9ja0tleX1gKTtcbiAgYXdhaXQgYWRiLmRpc21pc3NLZXlndWFyZCgpO1xuICBjb25zdCBrZXlzID0gaGVscGVycy5zdHJpbmdLZXlUb0FycihjYXBhYmlsaXRpZXMudW5sb2NrS2V5KTtcblxuICAvLyBTb21lIGRldmljZSBkb2VzIG5vdCBoYXZlIHN5c3RlbSBrZXkgaWRzIGxpa2UgJ2NvbS5hbmRyb2lkLmtleWd1YXJkOmlkL2tleSdcbiAgLy8gVGhlbiwgc2VuZGluZyBrZXlldmVudHMgYXJlIG1vcmUgcmVsaWFibGUgdG8gdW5sb2NrIHRoZSBzY3JlZW4uXG4gIGZvciAoY29uc3QgcGluIG9mIGtleXMpIHtcbiAgICAvLyAncGluJyBpcyBudW1iZXIgKDAtOSkgaW4gc3RyaW5nLlxuICAgIC8vIE51bWJlciAnMCcgaXMga2V5Y29kZSAnNycuIG51bWJlciAnOScgaXMga2V5Y29kZSAnMTYnLlxuICAgIGF3YWl0IGFkYi5zaGVsbChbJ2lucHV0JywgJ2tleWV2ZW50JywgcGFyc2VJbnQocGluLCAxMCkgKyBOVU1CRVJfWkVST19LRVlDT0RFXSk7XG4gIH1cbiAgYXdhaXQgd2FpdEZvclVubG9jayhhZGIsIGRyaXZlcik7XG59O1xuXG5oZWxwZXJzLnBhc3N3b3JkVW5sb2NrID0gYXN5bmMgZnVuY3Rpb24gcGFzc3dvcmRVbmxvY2sgKGFkYiwgZHJpdmVyLCBjYXBhYmlsaXRpZXMpIHtcbiAgY29uc3QgeyB1bmxvY2tLZXkgfSA9IGNhcGFiaWxpdGllcztcbiAgbG9nZ2VyLmluZm8oYFRyeWluZyB0byB1bmxvY2sgZGV2aWNlIHVzaW5nIHBhc3N3b3JkICR7dW5sb2NrS2V5fWApO1xuICBhd2FpdCBhZGIuZGlzbWlzc0tleWd1YXJkKCk7XG4gIC8vIFJlcGxhY2UgYmxhbmsgc3BhY2VzIHdpdGggJXNcbiAgY29uc3Qga2V5ID0gaGVscGVycy5lbmNvZGVQYXNzd29yZCh1bmxvY2tLZXkpO1xuICAvLyBXaHkgYWRiID8gSXQgd2FzIGxlc3MgZmxha3lcbiAgYXdhaXQgYWRiLnNoZWxsKFsnaW5wdXQnLCAndGV4dCcsIGtleV0pO1xuICAvLyBXaHkgc2xlZXBzID8gQXZvaWQgc29tZSBmbGFreW5lc3Mgd2FpdGluZyBmb3IgdGhlIGlucHV0IHRvIHJlY2VpdmUgdGhlIGtleXNcbiAgYXdhaXQgc2xlZXAoSU5QVVRfS0VZU19XQUlUX1RJTUUpO1xuICBhd2FpdCBhZGIuc2hlbGwoWydpbnB1dCcsICdrZXlldmVudCcsIEtFWUNPREVfTlVNUEFEX0VOVEVSXSk7XG4gIC8vIFdhaXRzIGEgYml0IGZvciB0aGUgZGV2aWNlIHRvIGJlIHVubG9ja2VkXG4gIGF3YWl0IHdhaXRGb3JVbmxvY2soYWRiLCBkcml2ZXIpO1xufTtcblxuaGVscGVycy5nZXRQYXR0ZXJuS2V5UG9zaXRpb24gPSBmdW5jdGlvbiBnZXRQYXR0ZXJuS2V5UG9zaXRpb24gKGtleSwgaW5pdFBvcywgcGllY2UpIHtcbiAgLypcbiAgSG93IHRoZSBtYXRoIHdvcmtzOlxuICBXZSBoYXZlIDkgYnV0dG9ucyBkaXZpZGVkIGluIDMgY29sdW1ucyBhbmQgMyByb3dzIGluc2lkZSB0aGUgbG9ja1BhdHRlcm5WaWV3LFxuICBldmVyeSBidXR0b24gaGFzIGEgcG9zaXRpb24gb24gdGhlIHNjcmVlbiBjb3JyZXNwb25kaW5nIHRvIHRoZSBsb2NrUGF0dGVyblZpZXcgc2luY2VcbiAgaXQgaXMgdGhlIHBhcmVudCB2aWV3IHJpZ2h0IGF0IHRoZSBtaWRkbGUgb2YgZWFjaCBjb2x1bW4gb3Igcm93LlxuICAqL1xuICBjb25zdCBjb2xzID0gMztcbiAgY29uc3QgcGlucyA9IDk7XG4gIGNvbnN0IHhQb3MgPSAoa2V5LCB4LCBwaWVjZSkgPT4gTWF0aC5yb3VuZCh4ICsgKChrZXkgJSBjb2xzKSB8fCBjb2xzKSAqIHBpZWNlIC0gcGllY2UgLyAyKTtcbiAgY29uc3QgeVBvcyA9IChrZXksIHksIHBpZWNlKSA9PiBNYXRoLnJvdW5kKHkgKyAoTWF0aC5jZWlsKCgoa2V5ICUgcGlucykgfHwgcGlucykgLyBjb2xzKSAqIHBpZWNlIC0gcGllY2UgLyAyKSk7XG4gIHJldHVybiB7XG4gICAgeDogeFBvcyhrZXksIGluaXRQb3MueCwgcGllY2UpLFxuICAgIHk6IHlQb3Moa2V5LCBpbml0UG9zLnksIHBpZWNlKVxuICB9O1xufTtcblxuaGVscGVycy5nZXRQYXR0ZXJuQWN0aW9ucyA9IGZ1bmN0aW9uIGdldFBhdHRlcm5BY3Rpb25zIChrZXlzLCBpbml0UG9zLCBwaWVjZSkge1xuICBjb25zdCBhY3Rpb25zID0gW107XG4gIGxldCBsYXN0UG9zO1xuICBmb3IgKGxldCBrZXkgb2Yga2V5cykge1xuICAgIGNvbnN0IGtleVBvcyA9IGhlbHBlcnMuZ2V0UGF0dGVybktleVBvc2l0aW9uKGtleSwgaW5pdFBvcywgcGllY2UpO1xuICAgIGlmIChrZXkgPT09IGtleXNbMF0pIHtcbiAgICAgIGFjdGlvbnMucHVzaCh7YWN0aW9uOiAncHJlc3MnLCBvcHRpb25zOiB7ZWxlbWVudDogbnVsbCwgeDoga2V5UG9zLngsIHk6IGtleVBvcy55fX0pO1xuICAgICAgbGFzdFBvcyA9IGtleVBvcztcbiAgICAgIGNvbnRpbnVlO1xuICAgIH1cbiAgICBjb25zdCBtb3ZlVG8gPSB7eDogMCwgeTogMH07XG4gICAgY29uc3QgZGlmZlggPSBrZXlQb3MueCAtIGxhc3RQb3MueDtcbiAgICBpZiAoZGlmZlggPiAwKSB7XG4gICAgICBtb3ZlVG8ueCA9IHBpZWNlO1xuICAgICAgaWYgKE1hdGguYWJzKGRpZmZYKSA+IHBpZWNlKSB7XG4gICAgICAgIG1vdmVUby54ICs9IHBpZWNlO1xuICAgICAgfVxuICAgIH0gZWxzZSBpZiAoZGlmZlggPCAwKSB7XG4gICAgICBtb3ZlVG8ueCA9IC0xICogcGllY2U7XG4gICAgICBpZiAoTWF0aC5hYnMoZGlmZlgpID4gcGllY2UpIHtcbiAgICAgICAgbW92ZVRvLnggLT0gcGllY2U7XG4gICAgICB9XG4gICAgfVxuICAgIGNvbnN0IGRpZmZZID0ga2V5UG9zLnkgLSBsYXN0UG9zLnk7XG4gICAgaWYgKGRpZmZZID4gMCkge1xuICAgICAgbW92ZVRvLnkgPSBwaWVjZTtcbiAgICAgIGlmIChNYXRoLmFicyhkaWZmWSkgPiBwaWVjZSkge1xuICAgICAgICBtb3ZlVG8ueSArPSBwaWVjZTtcbiAgICAgIH1cbiAgICB9IGVsc2UgaWYgKGRpZmZZIDwgMCkge1xuICAgICAgbW92ZVRvLnkgPSAtMSAqIHBpZWNlO1xuICAgICAgaWYgKE1hdGguYWJzKGRpZmZZKSA+IHBpZWNlKSB7XG4gICAgICAgIG1vdmVUby55IC09IHBpZWNlO1xuICAgICAgfVxuICAgIH1cbiAgICBhY3Rpb25zLnB1c2goe1xuICAgICAgYWN0aW9uOiAnbW92ZVRvJyxcbiAgICAgIG9wdGlvbnM6IHtlbGVtZW50OiBudWxsLCB4OiBtb3ZlVG8ueCArIGxhc3RQb3MueCwgeTogbW92ZVRvLnkgKyBsYXN0UG9zLnl9XG4gICAgfSk7XG4gICAgbGFzdFBvcyA9IGtleVBvcztcbiAgfVxuICBhY3Rpb25zLnB1c2goe2FjdGlvbjogJ3JlbGVhc2UnfSk7XG4gIHJldHVybiBhY3Rpb25zO1xufTtcblxuaGVscGVycy5wYXR0ZXJuVW5sb2NrID0gYXN5bmMgZnVuY3Rpb24gcGF0dGVyblVubG9jayAoYWRiLCBkcml2ZXIsIGNhcGFiaWxpdGllcykge1xuICBjb25zdCB7IHVubG9ja0tleSB9ID0gY2FwYWJpbGl0aWVzO1xuICBsb2dnZXIuaW5mbyhgVHJ5aW5nIHRvIHVubG9jayBkZXZpY2UgdXNpbmcgcGF0dGVybiAke3VubG9ja0tleX1gKTtcbiAgYXdhaXQgYWRiLmRpc21pc3NLZXlndWFyZCgpO1xuICBjb25zdCBrZXlzID0gaGVscGVycy5zdHJpbmdLZXlUb0Fycih1bmxvY2tLZXkpO1xuICAvKiBXZSBzZXQgdGhlIGRldmljZSBwYXR0ZXJuIGJ1dHRvbnMgYXMgbnVtYmVyIG9mIGEgcmVndWxhciBwaG9uZVxuICAgKiAgfCDigKIg4oCiIOKAoiB8ICAgICB8IDEgMiAzIHxcbiAgICogIHwg4oCiIOKAoiDigKIgfCAtLT4gfCA0IDUgNiB8XG4gICAqICB8IOKAoiDigKIg4oCiIHwgICAgIHwgNyA4IDkgfFxuXG4gIFRoZSBwYXR0ZXJuIHZpZXcgYnV0dG9ucyBhcmUgbm90IHNlZWluZyBieSB0aGUgdWlhdXRvbWF0b3Igc2luY2UgdGhleSBhcmVcbiAgaW5jbHVkZWQgaW5zaWRlIGEgRnJhbWVMYXlvdXQsIHNvIHdlIGFyZSBnb2luZyB0byB0cnkgY2xpY2tpbmcgb24gdGhlIGJ1dHRvbnNcbiAgdXNpbmcgdGhlIHBhcmVudCB2aWV3IGJvdW5kcyBhbmQgbWF0aC5cbiAgKi9cbiAgY29uc3QgYXBpTGV2ZWwgPSBhd2FpdCBhZGIuZ2V0QXBpTGV2ZWwoKTtcbiAgY29uc3QgZWwgPSBhd2FpdCBkcml2ZXIuZmluZEVsT3JFbHMoJ2lkJyxcbiAgICBgY29tLmFuZHJvaWQuJHthcGlMZXZlbCA+PSAyMSA/ICdzeXN0ZW11aScgOiAna2V5Z3VhcmQnfTppZC9sb2NrUGF0dGVyblZpZXdgLFxuICAgIGZhbHNlXG4gICk7XG4gIGNvbnN0IGluaXRQb3MgPSBhd2FpdCBkcml2ZXIuZ2V0TG9jYXRpb24odXRpbC51bndyYXBFbGVtZW50KGVsKSk7XG4gIGNvbnN0IHNpemUgPSBhd2FpdCBkcml2ZXIuZ2V0U2l6ZSh1dGlsLnVud3JhcEVsZW1lbnQoZWwpKTtcbiAgLy8gR2V0IGFjdGlvbnMgdG8gcGVyZm9ybVxuICBjb25zdCBhY3Rpb25zID0gaGVscGVycy5nZXRQYXR0ZXJuQWN0aW9ucyhrZXlzLCBpbml0UG9zLCBzaXplLndpZHRoIC8gMyk7XG4gIC8vIFBlcmZvcm0gZ2VzdHVyZVxuICBhd2FpdCBkcml2ZXIucGVyZm9ybVRvdWNoKGFjdGlvbnMpO1xuICAvLyBXYWl0cyBhIGJpdCBmb3IgdGhlIGRldmljZSB0byBiZSB1bmxvY2tlZFxuICBhd2FpdCBzbGVlcChVTkxPQ0tfV0FJVF9USU1FKTtcbn07XG5cbmhlbHBlcnMuUElOX1VOTE9DSyA9IFBJTl9VTkxPQ0s7XG5oZWxwZXJzLlBJTl9VTkxPQ0tfS0VZX0VWRU5UID0gUElOX1VOTE9DS19LRVlfRVZFTlQ7XG5oZWxwZXJzLlBBU1NXT1JEX1VOTE9DSyA9IFBBU1NXT1JEX1VOTE9DSztcbmhlbHBlcnMuUEFUVEVSTl9VTkxPQ0sgPSBQQVRURVJOX1VOTE9DSztcbmhlbHBlcnMuRklOR0VSUFJJTlRfVU5MT0NLID0gRklOR0VSUFJJTlRfVU5MT0NLO1xuXG5leHBvcnQge1xuICBQSU5fVU5MT0NLLCBQSU5fVU5MT0NLX0tFWV9FVkVOVCwgUEFTU1dPUkRfVU5MT0NLLCBQQVRURVJOX1VOTE9DSyxcbiAgRklOR0VSUFJJTlRfVU5MT0NLLCBoZWxwZXJzXG59O1xuZXhwb3J0IGRlZmF1bHQgaGVscGVycztcbiJdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7QUFBQSxJQUFBQSxPQUFBLEdBQUFDLHNCQUFBLENBQUFDLE9BQUE7QUFDQSxJQUFBQyxTQUFBLEdBQUFELE9BQUE7QUFDQSxJQUFBRSxPQUFBLEdBQUFILHNCQUFBLENBQUFDLE9BQUE7QUFDQSxJQUFBRyxRQUFBLEdBQUFILE9BQUE7QUFFQSxNQUFNSSxVQUFVLEdBQUcsS0FBSztBQUFDQyxPQUFBLENBQUFELFVBQUEsR0FBQUEsVUFBQTtBQUN6QixNQUFNRSxvQkFBb0IsR0FBRyxpQkFBaUI7QUFBQ0QsT0FBQSxDQUFBQyxvQkFBQSxHQUFBQSxvQkFBQTtBQUMvQyxNQUFNQyxl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
@@ -1 +1 @@
1
- {"version":3,"file":"unlock-helpers.js","names":["PIN_UNLOCK","PIN_UNLOCK_KEY_EVENT","PASSWORD_UNLOCK","PATTERN_UNLOCK","FINGERPRINT_UNLOCK","UNLOCK_TYPES","KEYCODE_NUMPAD_ENTER","UNLOCK_WAIT_TIME","INPUT_KEYS_WAIT_TIME","NUMBER_ZERO_KEYCODE","helpers","validateUnlockCapabilities","caps","unlockKey","unlockType","_","isNil","Error","includes","test","trim","fastUnlock","adb","opts","credential","credentialType","logger","info","wasLockEnabled","isLockEnabled","clearLockCredential","cycleWakeUp","dismissKeyguard","setLockCredential","encodePassword","key","replace","stringKeyToArr","split","fingerprintUnlock","driver","capabilities","getApiLevel","fingerprint","sleep","pinUnlock","keys","els","findElOrEls","isEmpty","pinUnlockWithKeyEvent","pins","el","text","getAttribute","util","unwrapElement","pin","click","waitForUnlock","isScreenLocked","keyevent","shell","parseInt","passwordUnlock","getPatternKeyPosition","initPos","piece","cols","xPos","x","Math","round","yPos","y","ceil","getPatternActions","actions","lastPos","keyPos","push","action","options","element","moveTo","diffX","abs","diffY","patternUnlock","apiLevel","getLocation","size","getSize","width","performTouch"],"sources":["../../lib/unlock-helpers.js"],"sourcesContent":["import logger from './logger';\nimport { sleep } from 'asyncbox';\nimport _ from 'lodash';\nimport { util } from '@appium/support';\n\nconst PIN_UNLOCK = 'pin';\nconst PIN_UNLOCK_KEY_EVENT = 'pinWithKeyEvent';\nconst PASSWORD_UNLOCK = 'password';\nconst PATTERN_UNLOCK = 'pattern';\nconst FINGERPRINT_UNLOCK = 'fingerprint';\nconst UNLOCK_TYPES = [\n PIN_UNLOCK, PIN_UNLOCK_KEY_EVENT, PASSWORD_UNLOCK,\n PATTERN_UNLOCK, FINGERPRINT_UNLOCK\n];\nconst KEYCODE_NUMPAD_ENTER = 66;\nconst UNLOCK_WAIT_TIME = 100;\nconst INPUT_KEYS_WAIT_TIME = 100;\nconst NUMBER_ZERO_KEYCODE = 7;\n\nconst helpers = {};\n\nhelpers.validateUnlockCapabilities = function validateUnlockCapabilities (caps = {}) {\n const {\n unlockKey,\n unlockType,\n } = caps;\n if (_.isNil(unlockKey) || unlockKey === '') {\n throw new Error('A non-empty unlock key value must be provided');\n }\n\n if ([PIN_UNLOCK, PIN_UNLOCK_KEY_EVENT, FINGERPRINT_UNLOCK].includes(unlockType)) {\n if (!/^[0-9]+$/.test(_.trim(unlockKey))) {\n throw new Error(`Unlock key value '${unlockKey}' must only consist of digits`);\n }\n } else if (unlockType === PATTERN_UNLOCK) {\n if (!/^[1-9]{2,9}$/.test(_.trim(unlockKey))) {\n throw new Error(`Unlock key value '${unlockKey}' must only include from two to nine digits in range 1..9`);\n }\n if (/([1-9]).*?\\1/.test(_.trim(unlockKey))) {\n throw new Error(`Unlock key value '${unlockKey}' must define a valid pattern where repeats are not allowed`);\n }\n } else if (unlockType === PASSWORD_UNLOCK) {\n // Dont trim password key, you can use blank spaces in your android password\n // ¯\\_(ツ)_/¯\n if (!/.{4,}/g.test(unlockKey)) {\n throw new Error(`The minimum allowed length of unlock key value '${unlockKey}' is 4 characters`);\n }\n } else {\n throw new Error(`Invalid unlock type '${unlockType}'. ` +\n `Only the following unlock types are supported: ${UNLOCK_TYPES}`);\n }\n return caps;\n};\n\nhelpers.fastUnlock = async function fastUnlock (adb, opts = {}) {\n const {\n credential,\n credentialType,\n } = opts;\n logger.info(`Unlocking the device via ADB using ${credentialType} credential '${credential}'`);\n const wasLockEnabled = await adb.isLockEnabled();\n if (wasLockEnabled) {\n await adb.clearLockCredential(credential);\n // not sure why, but the device's screen still remains locked\n // if a preliminary wake up cycle has not been performed\n await adb.cycleWakeUp();\n } else {\n logger.info('No active lock has been detected. Proceeding to the keyguard dismissal');\n }\n try {\n await adb.dismissKeyguard();\n } finally {\n if (wasLockEnabled) {\n await adb.setLockCredential(credentialType, credential);\n }\n }\n};\n\nhelpers.encodePassword = function encodePassword (key) {\n return `${key}`.replace(/\\s/ig, '%s');\n};\n\nhelpers.stringKeyToArr = function stringKeyToArr (key) {\n return `${key}`.trim().replace(/\\s+/g, '').split(/\\s*/);\n};\n\nhelpers.fingerprintUnlock = async function fingerprintUnlock (adb, driver, capabilities) {\n if (await adb.getApiLevel() < 23) {\n throw new Error('Fingerprint unlock only works for Android 6+ emulators');\n }\n await adb.fingerprint(capabilities.unlockKey);\n await sleep(UNLOCK_WAIT_TIME);\n};\n\nhelpers.pinUnlock = async function pinUnlock (adb, driver, capabilities) {\n logger.info(`Trying to unlock device using pin ${capabilities.unlockKey}`);\n await adb.dismissKeyguard();\n const keys = helpers.stringKeyToArr(capabilities.unlockKey);\n if (await adb.getApiLevel() >= 21) {\n const els = await driver.findElOrEls('id', 'com.android.systemui:id/digit_text', true);\n if (_.isEmpty(els)) {\n // fallback to pin with key event\n return await helpers.pinUnlockWithKeyEvent(adb, driver, capabilities);\n }\n const pins = {};\n for (const el of els) {\n const text = await driver.getAttribute('text', util.unwrapElement(el));\n pins[text] = el;\n }\n for (const pin of keys) {\n const el = pins[pin];\n await driver.click(util.unwrapElement(el));\n }\n } else {\n for (const pin of keys) {\n const el = await driver.findElOrEls('id', `com.android.keyguard:id/key${pin}`, false);\n if (el === null) {\n // fallback to pin with key event\n return await helpers.pinUnlockWithKeyEvent(adb, driver, capabilities);\n }\n await driver.click(util.unwrapElement(el));\n }\n }\n await waitForUnlock(adb);\n};\n\n/**\n * Wait for the display to be unlocked.\n * Some devices automatically accept typed 'pin' and 'password' code\n * without pressing the Enter key. But some devices need it.\n * This method waits a few seconds first for such automatic acceptance case.\n * If the device is still locked, then this method will try to send\n * the enter key code.\n *\n * @param {ADB} adb The instance of ADB\n */\nasync function waitForUnlock (adb) {\n await sleep(UNLOCK_WAIT_TIME);\n if (!await adb.isScreenLocked()) {\n return;\n }\n\n await adb.keyevent(KEYCODE_NUMPAD_ENTER);\n await sleep(UNLOCK_WAIT_TIME);\n}\n\nhelpers.pinUnlockWithKeyEvent = async function pinUnlockWithKeyEvent (adb, driver, capabilities) {\n logger.info(`Trying to unlock device using pin with keycode ${capabilities.unlockKey}`);\n await adb.dismissKeyguard();\n const keys = helpers.stringKeyToArr(capabilities.unlockKey);\n\n // Some device does not have system key ids like 'com.android.keyguard:id/key'\n // Then, sending keyevents are more reliable to unlock the screen.\n for (const pin of keys) {\n // 'pin' is number (0-9) in string.\n // Number '0' is keycode '7'. number '9' is keycode '16'.\n await adb.shell(['input', 'keyevent', parseInt(pin, 10) + NUMBER_ZERO_KEYCODE]);\n }\n await waitForUnlock(adb, driver);\n};\n\nhelpers.passwordUnlock = async function passwordUnlock (adb, driver, capabilities) {\n const { unlockKey } = capabilities;\n logger.info(`Trying to unlock device using password ${unlockKey}`);\n await adb.dismissKeyguard();\n // Replace blank spaces with %s\n const key = helpers.encodePassword(unlockKey);\n // Why adb ? It was less flaky\n await adb.shell(['input', 'text', key]);\n // Why sleeps ? Avoid some flakyness waiting for the input to receive the keys\n await sleep(INPUT_KEYS_WAIT_TIME);\n await adb.shell(['input', 'keyevent', KEYCODE_NUMPAD_ENTER]);\n // Waits a bit for the device to be unlocked\n await waitForUnlock(adb, driver);\n};\n\nhelpers.getPatternKeyPosition = function getPatternKeyPosition (key, initPos, piece) {\n /*\n How the math works:\n We have 9 buttons divided in 3 columns and 3 rows inside the lockPatternView,\n every button has a position on the screen corresponding to the lockPatternView since\n it is the parent view right at the middle of each column or row.\n */\n const cols = 3;\n const pins = 9;\n const xPos = (key, x, piece) => Math.round(x + ((key % cols) || cols) * piece - piece / 2);\n const yPos = (key, y, piece) => Math.round(y + (Math.ceil(((key % pins) || pins) / cols) * piece - piece / 2));\n return {\n x: xPos(key, initPos.x, piece),\n y: yPos(key, initPos.y, piece)\n };\n};\n\nhelpers.getPatternActions = function getPatternActions (keys, initPos, piece) {\n const actions = [];\n let lastPos;\n for (let key of keys) {\n const keyPos = helpers.getPatternKeyPosition(key, initPos, piece);\n if (key === keys[0]) {\n actions.push({action: 'press', options: {element: null, x: keyPos.x, y: keyPos.y}});\n lastPos = keyPos;\n continue;\n }\n const moveTo = {x: 0, y: 0};\n const diffX = keyPos.x - lastPos.x;\n if (diffX > 0) {\n moveTo.x = piece;\n if (Math.abs(diffX) > piece) {\n moveTo.x += piece;\n }\n } else if (diffX < 0) {\n moveTo.x = -1 * piece;\n if (Math.abs(diffX) > piece) {\n moveTo.x -= piece;\n }\n }\n const diffY = keyPos.y - lastPos.y;\n if (diffY > 0) {\n moveTo.y = piece;\n if (Math.abs(diffY) > piece) {\n moveTo.y += piece;\n }\n } else if (diffY < 0) {\n moveTo.y = -1 * piece;\n if (Math.abs(diffY) > piece) {\n moveTo.y -= piece;\n }\n }\n actions.push({\n action: 'moveTo',\n options: {element: null, x: moveTo.x + lastPos.x, y: moveTo.y + lastPos.y}\n });\n lastPos = keyPos;\n }\n actions.push({action: 'release'});\n return actions;\n};\n\nhelpers.patternUnlock = async function patternUnlock (adb, driver, capabilities) {\n const { unlockKey } = capabilities;\n logger.info(`Trying to unlock device using pattern ${unlockKey}`);\n await adb.dismissKeyguard();\n const keys = helpers.stringKeyToArr(unlockKey);\n /* We set the device pattern buttons as number of a regular phone\n * | • • • | | 1 2 3 |\n * | • • • | --> | 4 5 6 |\n * | • • • | | 7 8 9 |\n\n The pattern view buttons are not seeing by the uiautomator since they are\n included inside a FrameLayout, so we are going to try clicking on the buttons\n using the parent view bounds and math.\n */\n const apiLevel = await adb.getApiLevel();\n const el = await driver.findElOrEls('id',\n `com.android.${apiLevel >= 21 ? 'systemui' : 'keyguard'}:id/lockPatternView`,\n false\n );\n const initPos = await driver.getLocation(util.unwrapElement(el));\n const size = await driver.getSize(util.unwrapElement(el));\n // Get actions to perform\n const actions = helpers.getPatternActions(keys, initPos, size.width / 3);\n // Perform gesture\n await driver.performTouch(actions);\n // Waits a bit for the device to be unlocked\n await sleep(UNLOCK_WAIT_TIME);\n};\n\nhelpers.PIN_UNLOCK = PIN_UNLOCK;\nhelpers.PIN_UNLOCK_KEY_EVENT = PIN_UNLOCK_KEY_EVENT;\nhelpers.PASSWORD_UNLOCK = PASSWORD_UNLOCK;\nhelpers.PATTERN_UNLOCK = PATTERN_UNLOCK;\nhelpers.FINGERPRINT_UNLOCK = FINGERPRINT_UNLOCK;\n\nexport {\n PIN_UNLOCK, PIN_UNLOCK_KEY_EVENT, PASSWORD_UNLOCK, PATTERN_UNLOCK,\n FINGERPRINT_UNLOCK, helpers\n};\nexport default helpers;\n"],"mappings":"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"}
1
+ {"version":3,"file":"unlock-helpers.js","names":["_logger","_interopRequireDefault","require","_asyncbox","_lodash","_support","PIN_UNLOCK","exports","PIN_UNLOCK_KEY_EVENT","PASSWORD_UNLOCK","PATTERN_UNLOCK","FINGERPRINT_UNLOCK","UNLOCK_TYPES","KEYCODE_NUMPAD_ENTER","UNLOCK_WAIT_TIME","INPUT_KEYS_WAIT_TIME","NUMBER_ZERO_KEYCODE","helpers","validateUnlockCapabilities","caps","unlockKey","unlockType","_","isNil","Error","includes","test","trim","fastUnlock","adb","opts","credential","credentialType","logger","info","wasLockEnabled","isLockEnabled","clearLockCredential","cycleWakeUp","dismissKeyguard","setLockCredential","encodePassword","key","replace","stringKeyToArr","split","fingerprintUnlock","driver","capabilities","getApiLevel","fingerprint","sleep","pinUnlock","keys","els","findElOrEls","isEmpty","pinUnlockWithKeyEvent","pins","el","text","getAttribute","util","unwrapElement","pin","click","waitForUnlock","isScreenLocked","keyevent","shell","parseInt","passwordUnlock","getPatternKeyPosition","initPos","piece","cols","xPos","x","Math","round","yPos","y","ceil","getPatternActions","actions","lastPos","keyPos","push","action","options","element","moveTo","diffX","abs","diffY","patternUnlock","apiLevel","getLocation","size","getSize","width","performTouch","_default","default"],"sources":["../../lib/unlock-helpers.js"],"sourcesContent":["import logger from './logger';\nimport { sleep } from 'asyncbox';\nimport _ from 'lodash';\nimport { util } from '@appium/support';\n\nconst PIN_UNLOCK = 'pin';\nconst PIN_UNLOCK_KEY_EVENT = 'pinWithKeyEvent';\nconst PASSWORD_UNLOCK = 'password';\nconst PATTERN_UNLOCK = 'pattern';\nconst FINGERPRINT_UNLOCK = 'fingerprint';\nconst UNLOCK_TYPES = [\n PIN_UNLOCK, PIN_UNLOCK_KEY_EVENT, PASSWORD_UNLOCK,\n PATTERN_UNLOCK, FINGERPRINT_UNLOCK\n];\nconst KEYCODE_NUMPAD_ENTER = 66;\nconst UNLOCK_WAIT_TIME = 100;\nconst INPUT_KEYS_WAIT_TIME = 100;\nconst NUMBER_ZERO_KEYCODE = 7;\n\nconst helpers = {};\n\nhelpers.validateUnlockCapabilities = function validateUnlockCapabilities (caps = {}) {\n const {\n unlockKey,\n unlockType,\n } = caps;\n if (_.isNil(unlockKey) || unlockKey === '') {\n throw new Error('A non-empty unlock key value must be provided');\n }\n\n if ([PIN_UNLOCK, PIN_UNLOCK_KEY_EVENT, FINGERPRINT_UNLOCK].includes(unlockType)) {\n if (!/^[0-9]+$/.test(_.trim(unlockKey))) {\n throw new Error(`Unlock key value '${unlockKey}' must only consist of digits`);\n }\n } else if (unlockType === PATTERN_UNLOCK) {\n if (!/^[1-9]{2,9}$/.test(_.trim(unlockKey))) {\n throw new Error(`Unlock key value '${unlockKey}' must only include from two to nine digits in range 1..9`);\n }\n if (/([1-9]).*?\\1/.test(_.trim(unlockKey))) {\n throw new Error(`Unlock key value '${unlockKey}' must define a valid pattern where repeats are not allowed`);\n }\n } else if (unlockType === PASSWORD_UNLOCK) {\n // Dont trim password key, you can use blank spaces in your android password\n // ¯\\_(ツ)_/¯\n if (!/.{4,}/g.test(unlockKey)) {\n throw new Error(`The minimum allowed length of unlock key value '${unlockKey}' is 4 characters`);\n }\n } else {\n throw new Error(`Invalid unlock type '${unlockType}'. ` +\n `Only the following unlock types are supported: ${UNLOCK_TYPES}`);\n }\n return caps;\n};\n\nhelpers.fastUnlock = async function fastUnlock (adb, opts = {}) {\n const {\n credential,\n credentialType,\n } = opts;\n logger.info(`Unlocking the device via ADB using ${credentialType} credential '${credential}'`);\n const wasLockEnabled = await adb.isLockEnabled();\n if (wasLockEnabled) {\n await adb.clearLockCredential(credential);\n // not sure why, but the device's screen still remains locked\n // if a preliminary wake up cycle has not been performed\n await adb.cycleWakeUp();\n } else {\n logger.info('No active lock has been detected. Proceeding to the keyguard dismissal');\n }\n try {\n await adb.dismissKeyguard();\n } finally {\n if (wasLockEnabled) {\n await adb.setLockCredential(credentialType, credential);\n }\n }\n};\n\nhelpers.encodePassword = function encodePassword (key) {\n return `${key}`.replace(/\\s/ig, '%s');\n};\n\nhelpers.stringKeyToArr = function stringKeyToArr (key) {\n return `${key}`.trim().replace(/\\s+/g, '').split(/\\s*/);\n};\n\nhelpers.fingerprintUnlock = async function fingerprintUnlock (adb, driver, capabilities) {\n if (await adb.getApiLevel() < 23) {\n throw new Error('Fingerprint unlock only works for Android 6+ emulators');\n }\n await adb.fingerprint(capabilities.unlockKey);\n await sleep(UNLOCK_WAIT_TIME);\n};\n\nhelpers.pinUnlock = async function pinUnlock (adb, driver, capabilities) {\n logger.info(`Trying to unlock device using pin ${capabilities.unlockKey}`);\n await adb.dismissKeyguard();\n const keys = helpers.stringKeyToArr(capabilities.unlockKey);\n if (await adb.getApiLevel() >= 21) {\n const els = await driver.findElOrEls('id', 'com.android.systemui:id/digit_text', true);\n if (_.isEmpty(els)) {\n // fallback to pin with key event\n return await helpers.pinUnlockWithKeyEvent(adb, driver, capabilities);\n }\n const pins = {};\n for (const el of els) {\n const text = await driver.getAttribute('text', util.unwrapElement(el));\n pins[text] = el;\n }\n for (const pin of keys) {\n const el = pins[pin];\n await driver.click(util.unwrapElement(el));\n }\n } else {\n for (const pin of keys) {\n const el = await driver.findElOrEls('id', `com.android.keyguard:id/key${pin}`, false);\n if (el === null) {\n // fallback to pin with key event\n return await helpers.pinUnlockWithKeyEvent(adb, driver, capabilities);\n }\n await driver.click(util.unwrapElement(el));\n }\n }\n await waitForUnlock(adb);\n};\n\n/**\n * Wait for the display to be unlocked.\n * Some devices automatically accept typed 'pin' and 'password' code\n * without pressing the Enter key. But some devices need it.\n * This method waits a few seconds first for such automatic acceptance case.\n * If the device is still locked, then this method will try to send\n * the enter key code.\n *\n * @param {ADB} adb The instance of ADB\n */\nasync function waitForUnlock (adb) {\n await sleep(UNLOCK_WAIT_TIME);\n if (!await adb.isScreenLocked()) {\n return;\n }\n\n await adb.keyevent(KEYCODE_NUMPAD_ENTER);\n await sleep(UNLOCK_WAIT_TIME);\n}\n\nhelpers.pinUnlockWithKeyEvent = async function pinUnlockWithKeyEvent (adb, driver, capabilities) {\n logger.info(`Trying to unlock device using pin with keycode ${capabilities.unlockKey}`);\n await adb.dismissKeyguard();\n const keys = helpers.stringKeyToArr(capabilities.unlockKey);\n\n // Some device does not have system key ids like 'com.android.keyguard:id/key'\n // Then, sending keyevents are more reliable to unlock the screen.\n for (const pin of keys) {\n // 'pin' is number (0-9) in string.\n // Number '0' is keycode '7'. number '9' is keycode '16'.\n await adb.shell(['input', 'keyevent', parseInt(pin, 10) + NUMBER_ZERO_KEYCODE]);\n }\n await waitForUnlock(adb, driver);\n};\n\nhelpers.passwordUnlock = async function passwordUnlock (adb, driver, capabilities) {\n const { unlockKey } = capabilities;\n logger.info(`Trying to unlock device using password ${unlockKey}`);\n await adb.dismissKeyguard();\n // Replace blank spaces with %s\n const key = helpers.encodePassword(unlockKey);\n // Why adb ? It was less flaky\n await adb.shell(['input', 'text', key]);\n // Why sleeps ? Avoid some flakyness waiting for the input to receive the keys\n await sleep(INPUT_KEYS_WAIT_TIME);\n await adb.shell(['input', 'keyevent', KEYCODE_NUMPAD_ENTER]);\n // Waits a bit for the device to be unlocked\n await waitForUnlock(adb, driver);\n};\n\nhelpers.getPatternKeyPosition = function getPatternKeyPosition (key, initPos, piece) {\n /*\n How the math works:\n We have 9 buttons divided in 3 columns and 3 rows inside the lockPatternView,\n every button has a position on the screen corresponding to the lockPatternView since\n it is the parent view right at the middle of each column or row.\n */\n const cols = 3;\n const pins = 9;\n const xPos = (key, x, piece) => Math.round(x + ((key % cols) || cols) * piece - piece / 2);\n const yPos = (key, y, piece) => Math.round(y + (Math.ceil(((key % pins) || pins) / cols) * piece - piece / 2));\n return {\n x: xPos(key, initPos.x, piece),\n y: yPos(key, initPos.y, piece)\n };\n};\n\nhelpers.getPatternActions = function getPatternActions (keys, initPos, piece) {\n const actions = [];\n let lastPos;\n for (let key of keys) {\n const keyPos = helpers.getPatternKeyPosition(key, initPos, piece);\n if (key === keys[0]) {\n actions.push({action: 'press', options: {element: null, x: keyPos.x, y: keyPos.y}});\n lastPos = keyPos;\n continue;\n }\n const moveTo = {x: 0, y: 0};\n const diffX = keyPos.x - lastPos.x;\n if (diffX > 0) {\n moveTo.x = piece;\n if (Math.abs(diffX) > piece) {\n moveTo.x += piece;\n }\n } else if (diffX < 0) {\n moveTo.x = -1 * piece;\n if (Math.abs(diffX) > piece) {\n moveTo.x -= piece;\n }\n }\n const diffY = keyPos.y - lastPos.y;\n if (diffY > 0) {\n moveTo.y = piece;\n if (Math.abs(diffY) > piece) {\n moveTo.y += piece;\n }\n } else if (diffY < 0) {\n moveTo.y = -1 * piece;\n if (Math.abs(diffY) > piece) {\n moveTo.y -= piece;\n }\n }\n actions.push({\n action: 'moveTo',\n options: {element: null, x: moveTo.x + lastPos.x, y: moveTo.y + lastPos.y}\n });\n lastPos = keyPos;\n }\n actions.push({action: 'release'});\n return actions;\n};\n\nhelpers.patternUnlock = async function patternUnlock (adb, driver, capabilities) {\n const { unlockKey } = capabilities;\n logger.info(`Trying to unlock device using pattern ${unlockKey}`);\n await adb.dismissKeyguard();\n const keys = helpers.stringKeyToArr(unlockKey);\n /* We set the device pattern buttons as number of a regular phone\n * | • • • | | 1 2 3 |\n * | • • • | --> | 4 5 6 |\n * | • • • | | 7 8 9 |\n\n The pattern view buttons are not seeing by the uiautomator since they are\n included inside a FrameLayout, so we are going to try clicking on the buttons\n using the parent view bounds and math.\n */\n const apiLevel = await adb.getApiLevel();\n const el = await driver.findElOrEls('id',\n `com.android.${apiLevel >= 21 ? 'systemui' : 'keyguard'}:id/lockPatternView`,\n false\n );\n const initPos = await driver.getLocation(util.unwrapElement(el));\n const size = await driver.getSize(util.unwrapElement(el));\n // Get actions to perform\n const actions = helpers.getPatternActions(keys, initPos, size.width / 3);\n // Perform gesture\n await driver.performTouch(actions);\n // Waits a bit for the device to be unlocked\n await sleep(UNLOCK_WAIT_TIME);\n};\n\nhelpers.PIN_UNLOCK = PIN_UNLOCK;\nhelpers.PIN_UNLOCK_KEY_EVENT = PIN_UNLOCK_KEY_EVENT;\nhelpers.PASSWORD_UNLOCK = PASSWORD_UNLOCK;\nhelpers.PATTERN_UNLOCK = PATTERN_UNLOCK;\nhelpers.FINGERPRINT_UNLOCK = FINGERPRINT_UNLOCK;\n\nexport {\n PIN_UNLOCK, PIN_UNLOCK_KEY_EVENT, PASSWORD_UNLOCK, PATTERN_UNLOCK,\n FINGERPRINT_UNLOCK, helpers\n};\nexport default helpers;\n"],"mappings":"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"}
@@ -19,4 +19,4 @@ function requireArgs(argNames, opts = {}) {
19
19
  }
20
20
  return opts;
21
21
  }
22
- //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJBREJfU0hFTExfRkVBVFVSRSIsInJlcXVpcmVBcmdzIiwiYXJnTmFtZXMiLCJvcHRzIiwiYXJnTmFtZSIsIl8iLCJpc0FycmF5IiwiaGFzIiwiZXJyb3JzIiwiSW52YWxpZEFyZ3VtZW50RXJyb3IiXSwic291cmNlcyI6WyIuLi8uLi9saWIvdXRpbHMuanMiXSwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IF8gZnJvbSAnbG9kYXNoJztcbmltcG9ydCB7IGVycm9ycyB9IGZyb20gJ2FwcGl1bS9kcml2ZXInO1xuXG5leHBvcnQgY29uc3QgQURCX1NIRUxMX0ZFQVRVUkUgPSAnYWRiX3NoZWxsJztcblxuLyoqXG4gKiBBc3NlcnQgdGhlIHByZXNlbmNlIG9mIHBhcnRpY3VsYXIga2V5cyBpbiB0aGUgZ2l2ZW4gb2JqZWN0XG4gKlxuICogQHBhcmFtIHtzdHJpbmd8QXJyYXk8c3RyaW5nPn0gYXJnTmFtZXMgb25lIG9yIG1vcmUga2V5IG5hbWVzXG4gKiBAcGFyYW0ge09iamVjdH0gb3B0cyB0aGUgb2JqZWN0IHRvIGNoZWNrXG4gKiBAcmV0dXJucyB7T2JqZWN0fSB0aGUgc2FtZSBnaXZlbiBvYmplY3RcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHJlcXVpcmVBcmdzIChhcmdOYW1lcywgb3B0cyA9IHt9KSB7XG4gIGZvciAoY29uc3QgYXJnTmFtZSBvZiAoXy5pc0FycmF5KGFyZ05hbWVzKSA/IGFyZ05hbWVzIDogW2FyZ05hbWVzXSkpIHtcbiAgICBpZiAoIV8uaGFzKG9wdHMsIGFyZ05hbWUpKSB7XG4gICAgICB0aHJvdyBuZXcgZXJyb3JzLkludmFsaWRBcmd1bWVudEVycm9yKGAnJHthcmdOYW1lfScgYXJndW1lbnQgbXVzdCBiZSBwcm92aWRlZGApO1xuICAgIH1cbiAgfVxuICByZXR1cm4gb3B0cztcbn0iXSwibWFwcGluZ3MiOiI7Ozs7Ozs7OztBQUFBO0FBQ0E7QUFFTyxNQUFNQSxpQkFBaUIsR0FBRyxXQUFXO0FBQUM7QUFTdEMsU0FBU0MsV0FBVyxDQUFFQyxRQUFRLEVBQUVDLElBQUksR0FBRyxDQUFDLENBQUMsRUFBRTtFQUNoRCxLQUFLLE1BQU1DLE9BQU8sSUFBS0MsZUFBQyxDQUFDQyxPQUFPLENBQUNKLFFBQVEsQ0FBQyxHQUFHQSxRQUFRLEdBQUcsQ0FBQ0EsUUFBUSxDQUFDLEVBQUc7SUFDbkUsSUFBSSxDQUFDRyxlQUFDLENBQUNFLEdBQUcsQ0FBQ0osSUFBSSxFQUFFQyxPQUFPLENBQUMsRUFBRTtNQUN6QixNQUFNLElBQUlJLGNBQU0sQ0FBQ0Msb0JBQW9CLENBQUUsSUFBR0wsT0FBUSw2QkFBNEIsQ0FBQztJQUNqRjtFQUNGO0VBQ0EsT0FBT0QsSUFBSTtBQUNiIn0=
22
+ //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJfbG9kYXNoIiwiX2ludGVyb3BSZXF1aXJlRGVmYXVsdCIsInJlcXVpcmUiLCJfZHJpdmVyIiwiQURCX1NIRUxMX0ZFQVRVUkUiLCJleHBvcnRzIiwicmVxdWlyZUFyZ3MiLCJhcmdOYW1lcyIsIm9wdHMiLCJhcmdOYW1lIiwiXyIsImlzQXJyYXkiLCJoYXMiLCJlcnJvcnMiLCJJbnZhbGlkQXJndW1lbnRFcnJvciJdLCJzb3VyY2VzIjpbIi4uLy4uL2xpYi91dGlscy5qcyJdLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgXyBmcm9tICdsb2Rhc2gnO1xuaW1wb3J0IHsgZXJyb3JzIH0gZnJvbSAnYXBwaXVtL2RyaXZlcic7XG5cbmV4cG9ydCBjb25zdCBBREJfU0hFTExfRkVBVFVSRSA9ICdhZGJfc2hlbGwnO1xuXG4vKipcbiAqIEFzc2VydCB0aGUgcHJlc2VuY2Ugb2YgcGFydGljdWxhciBrZXlzIGluIHRoZSBnaXZlbiBvYmplY3RcbiAqXG4gKiBAcGFyYW0ge3N0cmluZ3xBcnJheTxzdHJpbmc+fSBhcmdOYW1lcyBvbmUgb3IgbW9yZSBrZXkgbmFtZXNcbiAqIEBwYXJhbSB7T2JqZWN0fSBvcHRzIHRoZSBvYmplY3QgdG8gY2hlY2tcbiAqIEByZXR1cm5zIHtPYmplY3R9IHRoZSBzYW1lIGdpdmVuIG9iamVjdFxuICovXG5leHBvcnQgZnVuY3Rpb24gcmVxdWlyZUFyZ3MgKGFyZ05hbWVzLCBvcHRzID0ge30pIHtcbiAgZm9yIChjb25zdCBhcmdOYW1lIG9mIChfLmlzQXJyYXkoYXJnTmFtZXMpID8gYXJnTmFtZXMgOiBbYXJnTmFtZXNdKSkge1xuICAgIGlmICghXy5oYXMob3B0cywgYXJnTmFtZSkpIHtcbiAgICAgIHRocm93IG5ldyBlcnJvcnMuSW52YWxpZEFyZ3VtZW50RXJyb3IoYCcke2FyZ05hbWV9JyBhcmd1bWVudCBtdXN0IGJlIHByb3ZpZGVkYCk7XG4gICAgfVxuICB9XG4gIHJldHVybiBvcHRzO1xufSJdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7O0FBQUEsSUFBQUEsT0FBQSxHQUFBQyxzQkFBQSxDQUFBQyxPQUFBO0FBQ0EsSUFBQUMsT0FBQSxHQUFBRCxPQUFBO0FBRU8sTUFBTUUsaUJBQWlCLEdBQUcsV0FBVztBQUFDQyxPQUFBLENBQUFELGlCQUFBLEdBQUFBLGlCQUFBO0FBU3RDLFNBQVNFLFdBQVdBLENBQUVDLFFBQVEsRUFBRUMsSUFBSSxHQUFHLENBQUMsQ0FBQyxFQUFFO0VBQ2hELEtBQUssTUFBTUMsT0FBTyxJQUFLQyxlQUFDLENBQUNDLE9BQU8sQ0FBQ0osUUFBUSxDQUFDLEdBQUdBLFFBQVEsR0FBRyxDQUFDQSxRQUFRLENBQUMsRUFBRztJQUNuRSxJQUFJLENBQUNHLGVBQUMsQ0FBQ0UsR0FBRyxDQUFDSixJQUFJLEVBQUVDLE9BQU8sQ0FBQyxFQUFFO01BQ3pCLE1BQU0sSUFBSUksY0FBTSxDQUFDQyxvQkFBb0IsQ0FBRSxJQUFHTCxPQUFRLDZCQUE0QixDQUFDO0lBQ2pGO0VBQ0Y7RUFDQSxPQUFPRCxJQUFJO0FBQ2IifQ==
@@ -1 +1 @@
1
- {"version":3,"file":"utils.js","names":["ADB_SHELL_FEATURE","requireArgs","argNames","opts","argName","_","isArray","has","errors","InvalidArgumentError"],"sources":["../../lib/utils.js"],"sourcesContent":["import _ from 'lodash';\nimport { errors } from 'appium/driver';\n\nexport const ADB_SHELL_FEATURE = 'adb_shell';\n\n/**\n * Assert the presence of particular keys in the given object\n *\n * @param {string|Array<string>} argNames one or more key names\n * @param {Object} opts the object to check\n * @returns {Object} the same given object\n */\nexport function requireArgs (argNames, opts = {}) {\n for (const argName of (_.isArray(argNames) ? argNames : [argNames])) {\n if (!_.has(opts, argName)) {\n throw new errors.InvalidArgumentError(`'${argName}' argument must be provided`);\n }\n }\n return opts;\n}"],"mappings":";;;;;;;;;AAAA;AACA;AAEO,MAAMA,iBAAiB,GAAG,WAAW;AAAC;AAStC,SAASC,WAAW,CAAEC,QAAQ,EAAEC,IAAI,GAAG,CAAC,CAAC,EAAE;EAChD,KAAK,MAAMC,OAAO,IAAKC,eAAC,CAACC,OAAO,CAACJ,QAAQ,CAAC,GAAGA,QAAQ,GAAG,CAACA,QAAQ,CAAC,EAAG;IACnE,IAAI,CAACG,eAAC,CAACE,GAAG,CAACJ,IAAI,EAAEC,OAAO,CAAC,EAAE;MACzB,MAAM,IAAII,cAAM,CAACC,oBAAoB,CAAE,IAAGL,OAAQ,6BAA4B,CAAC;IACjF;EACF;EACA,OAAOD,IAAI;AACb"}
1
+ {"version":3,"file":"utils.js","names":["_lodash","_interopRequireDefault","require","_driver","ADB_SHELL_FEATURE","exports","requireArgs","argNames","opts","argName","_","isArray","has","errors","InvalidArgumentError"],"sources":["../../lib/utils.js"],"sourcesContent":["import _ from 'lodash';\nimport { errors } from 'appium/driver';\n\nexport const ADB_SHELL_FEATURE = 'adb_shell';\n\n/**\n * Assert the presence of particular keys in the given object\n *\n * @param {string|Array<string>} argNames one or more key names\n * @param {Object} opts the object to check\n * @returns {Object} the same given object\n */\nexport function requireArgs (argNames, opts = {}) {\n for (const argName of (_.isArray(argNames) ? argNames : [argNames])) {\n if (!_.has(opts, argName)) {\n throw new errors.InvalidArgumentError(`'${argName}' argument must be provided`);\n }\n }\n return opts;\n}"],"mappings":";;;;;;;;;AAAA,IAAAA,OAAA,GAAAC,sBAAA,CAAAC,OAAA;AACA,IAAAC,OAAA,GAAAD,OAAA;AAEO,MAAME,iBAAiB,GAAG,WAAW;AAACC,OAAA,CAAAD,iBAAA,GAAAA,iBAAA;AAStC,SAASE,WAAWA,CAAEC,QAAQ,EAAEC,IAAI,GAAG,CAAC,CAAC,EAAE;EAChD,KAAK,MAAMC,OAAO,IAAKC,eAAC,CAACC,OAAO,CAACJ,QAAQ,CAAC,GAAGA,QAAQ,GAAG,CAACA,QAAQ,CAAC,EAAG;IACnE,IAAI,CAACG,eAAC,CAACE,GAAG,CAACJ,IAAI,EAAEC,OAAO,CAAC,EAAE;MACzB,MAAM,IAAII,cAAM,CAACC,oBAAoB,CAAE,IAAGL,OAAQ,6BAA4B,CAAC;IACjF;EACF;EACA,OAAOD,IAAI;AACb"}