obsidian-integration-testing 12.1.0 → 12.1.1

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 (43) hide show
  1. package/dist/lib/cjs/adb.cjs +61 -0
  2. package/dist/lib/cjs/adb.d.cts +61 -0
  3. package/dist/lib/cjs/device-screenshot.cjs +42 -0
  4. package/dist/lib/cjs/device-screenshot.d.cts +36 -0
  5. package/dist/lib/cjs/device-setting-restore.cjs +45 -0
  6. package/dist/lib/cjs/device-setting-restore.d.cts +60 -0
  7. package/dist/lib/cjs/device-settings-command.cjs +49 -0
  8. package/dist/lib/cjs/device-settings-command.d.cts +76 -0
  9. package/dist/lib/cjs/device-settings.cjs +88 -0
  10. package/dist/lib/cjs/device-settings.d.cts +94 -0
  11. package/dist/lib/cjs/emulator-device-id.cjs +32 -0
  12. package/dist/lib/cjs/emulator-device-id.d.cts +49 -0
  13. package/dist/lib/cjs/index.cjs +56 -3
  14. package/dist/lib/cjs/index.d.cts +18 -0
  15. package/dist/lib/cjs/library.cjs +1 -1
  16. package/dist/lib/cjs/resolve-emulator-device-id.cjs +54 -0
  17. package/dist/lib/cjs/resolve-emulator-device-id.d.cts +28 -0
  18. package/dist/lib/cjs/soft-keyboard-geometry.cjs +75 -0
  19. package/dist/lib/cjs/soft-keyboard-geometry.d.cts +156 -0
  20. package/dist/lib/cjs/soft-keyboard.cjs +118 -0
  21. package/dist/lib/cjs/soft-keyboard.d.cts +82 -0
  22. package/dist/lib/esm/adb.d.mts +61 -0
  23. package/dist/lib/esm/adb.mjs +35 -0
  24. package/dist/lib/esm/device-screenshot.d.mts +36 -0
  25. package/dist/lib/esm/device-screenshot.mjs +18 -0
  26. package/dist/lib/esm/device-setting-restore.d.mts +60 -0
  27. package/dist/lib/esm/device-setting-restore.mjs +20 -0
  28. package/dist/lib/esm/device-settings-command.d.mts +76 -0
  29. package/dist/lib/esm/device-settings-command.mjs +23 -0
  30. package/dist/lib/esm/device-settings.d.mts +94 -0
  31. package/dist/lib/esm/device-settings.mjs +67 -0
  32. package/dist/lib/esm/emulator-device-id.d.mts +49 -0
  33. package/dist/lib/esm/emulator-device-id.mjs +8 -0
  34. package/dist/lib/esm/index.d.mts +18 -0
  35. package/dist/lib/esm/index.mjs +58 -2
  36. package/dist/lib/esm/library.mjs +1 -1
  37. package/dist/lib/esm/resolve-emulator-device-id.d.mts +28 -0
  38. package/dist/lib/esm/resolve-emulator-device-id.mjs +33 -0
  39. package/dist/lib/esm/soft-keyboard-geometry.d.mts +156 -0
  40. package/dist/lib/esm/soft-keyboard-geometry.mjs +47 -0
  41. package/dist/lib/esm/soft-keyboard.d.mts +82 -0
  42. package/dist/lib/esm/soft-keyboard.mjs +91 -0
  43. package/package.json +4 -3
@@ -0,0 +1,94 @@
1
+ /**
2
+ * @file
3
+ *
4
+ * Reads and writes Android device settings — and wraps the one setting a
5
+ * screenshot suite has to change.
6
+ *
7
+ * The screenshot AVDs are built `hw.keyboard=yes`, so Android suppresses the
8
+ * on-screen keyboard even where the page asks for one. `show_ime_with_hard_keyboard`
9
+ * is what turns it back on. {@link withSoftKeyboardEnabled} flips it, runs the
10
+ * work, and puts the device back exactly as it found it — including restoring a
11
+ * setting that had never been written, which takes a delete rather than a write
12
+ * (see `device-setting-restore`).
13
+ *
14
+ * Every function here shells out, so the whole module is integration-time code;
15
+ * the restore decision and the argument list it depends on are unit-tested in
16
+ * their own modules.
17
+ */
18
+ import type { DeviceSettingNamespace } from './device-settings-command.cjs';
19
+ /**
20
+ * Parameters for {@link deleteDeviceSetting} and {@link readDeviceSetting}.
21
+ */
22
+ export interface DeviceSettingParams {
23
+ /**
24
+ * The device to address.
25
+ */
26
+ readonly deviceId: string;
27
+ /**
28
+ * The setting's name within {@link namespace}, e.g. `show_ime_with_hard_keyboard`.
29
+ */
30
+ readonly name: string;
31
+ /**
32
+ * The settings namespace the name lives in.
33
+ *
34
+ * @default {@link DeviceSettingNamespace.Secure}
35
+ */
36
+ readonly namespace?: DeviceSettingNamespace;
37
+ }
38
+ /**
39
+ * Parameters for {@link withSoftKeyboardEnabled}.
40
+ *
41
+ * @typeParam T - What the wrapped work returns.
42
+ */
43
+ export interface WithSoftKeyboardEnabledParams<T> {
44
+ /**
45
+ * The work to run while the on-screen keyboard is permitted.
46
+ */
47
+ readonly callback: (this: void) => Promise<T>;
48
+ /**
49
+ * The device to address.
50
+ */
51
+ readonly deviceId: string;
52
+ }
53
+ /**
54
+ * Parameters for {@link writeDeviceSetting}.
55
+ */
56
+ export interface WriteDeviceSettingParams extends DeviceSettingParams {
57
+ /**
58
+ * The value to write.
59
+ */
60
+ readonly value: string;
61
+ }
62
+ /**
63
+ * Clears a device setting, returning it to never-having-been-written.
64
+ *
65
+ * @param params - The device, the setting and its namespace.
66
+ * @returns A {@link Promise} that resolves once the setting is gone.
67
+ */
68
+ export declare function deleteDeviceSetting(params: DeviceSettingParams): Promise<void>;
69
+ /**
70
+ * Reads a device setting.
71
+ *
72
+ * @param params - The device, the setting and its namespace.
73
+ * @returns A {@link Promise} that resolves to the setting's value, or the literal `null` when it has never
74
+ * been written.
75
+ */
76
+ export declare function readDeviceSetting(params: DeviceSettingParams): Promise<string>;
77
+ /**
78
+ * Permits the on-screen keyboard for the duration of a callback, then restores the device exactly.
79
+ *
80
+ * The restore runs whether the callback succeeded or threw — a suite that dies mid-capture must not leave
81
+ * the device configured differently than it found it.
82
+ *
83
+ * @typeParam T - What the wrapped work returns.
84
+ * @param params - The device and the work to run.
85
+ * @returns A {@link Promise} that resolves to whatever the callback returned.
86
+ */
87
+ export declare function withSoftKeyboardEnabled<T>(params: WithSoftKeyboardEnabledParams<T>): Promise<T>;
88
+ /**
89
+ * Writes a device setting.
90
+ *
91
+ * @param params - The device, the setting, its namespace and the value to write.
92
+ * @returns A {@link Promise} that resolves once the setting is written.
93
+ */
94
+ export declare function writeDeviceSetting(params: WriteDeviceSettingParams): Promise<void>;
@@ -0,0 +1,32 @@
1
+ "use strict";
2
+ var __defProp = Object.defineProperty;
3
+ var __getOwnPropDesc = Object.getOwnPropertyDescriptor;
4
+ var __getOwnPropNames = Object.getOwnPropertyNames;
5
+ var __hasOwnProp = Object.prototype.hasOwnProperty;
6
+ var __export = (target, all) => {
7
+ for (var name in all)
8
+ __defProp(target, name, { get: all[name], enumerable: true });
9
+ };
10
+ var __copyProps = (to, from, except, desc) => {
11
+ if (from && typeof from === "object" || typeof from === "function") {
12
+ for (let key of __getOwnPropNames(from))
13
+ if (!__hasOwnProp.call(to, key) && key !== except)
14
+ __defProp(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable });
15
+ }
16
+ return to;
17
+ };
18
+ var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod);
19
+ var emulator_device_id_exports = {};
20
+ __export(emulator_device_id_exports, {
21
+ selectEmulatorDeviceId: () => selectEmulatorDeviceId
22
+ });
23
+ module.exports = __toCommonJS(emulator_device_id_exports);
24
+ function selectEmulatorDeviceId(params) {
25
+ const match = params.candidates.find((candidate) => candidate.avdName === params.avdName);
26
+ return match ? match.deviceId : null;
27
+ }
28
+ // Annotate the CommonJS export names for ESM import in node:
29
+ 0 && (module.exports = {
30
+ selectEmulatorDeviceId
31
+ });
32
+ //# sourceMappingURL=data:application/json;base64,ewogICJ2ZXJzaW9uIjogMywKICAic291cmNlcyI6IFsiLi4vLi4vLi4vc3JjL2VtdWxhdG9yLWRldmljZS1pZC50cyJdLAogICJzb3VyY2VzQ29udGVudCI6IFsiLyoqXG4gKiBAZmlsZVxuICpcbiAqIFBpY2tzIHRoZSBydW5uaW5nIGVtdWxhdG9yIHRoYXQgYmVsb25ncyB0byBhIG5hbWVkIEFWRC5cbiAqXG4gKiBBIGNhcHR1cmUgc3VpdGUgbXVzdCBuZXZlciB0YWtlIFwidGhlIGZpcnN0IGRldmljZSBgYWRiIGRldmljZXNgIGxpc3RzXCIuIFR3b1xuICogdGhpbmdzIHJvdXRpbmVseSBtYWtlIHRoYXQgdGhlIHdyb25nIGRldmljZSBvbiB0aGlzIGZsZWV0OiBhIHBoeXNpY2FsIHBob25lIGlzXG4gKiBvZnRlbiBwbHVnZ2VkIGludG8gdGhlIHNhbWUgbWFjaGluZSwgYW5kIHRoZSBoYXJuZXNzJ3Mgb3duIGBvYnNpZGlhbl90ZXN0YCBBVkRcbiAqIHJ1bnMgYXQgYSBkaWZmZXJlbnQgZ2VvbWV0cnkgdGhhbiB0aGUgYG9ic2lkaWFuX3NjcmVlbnNob3RzYCBBVkQgc2l6ZWQgdG8gdGhlXG4gKiBzdG9yZSdzIGZyYW1lLiBQaWNraW5nIGJ5IHBvc2l0aW9uIHNpbGVudGx5IHBob3RvZ3JhcGhzIHRoZSB3cm9uZyBzY3JlZW4gYXRcbiAqIHRoZSB3cm9uZyBzaXplLCBhbmQgdGhlIGRpbWVuc2lvbiBhc3NlcnRpb24gdGhhdCB3b3VsZCBoYXZlIGNhdWdodCBpdCBmaXJlc1xuICogc2V2ZXJhbCBtaW51dGVzIGxhdGVyLCBhZnRlciB0aGUgcnVuLlxuICpcbiAqIFB1cmUgYW5kIHVuaXQtdGVzdGVkOyB0aGUgYGFkYmAgcm91bmQtdHJpcHMgdGhhdCBnYXRoZXIgdGhlIEFWRCBuYW1lcyBsaXZlIGluXG4gKiBgcmVzb2x2ZS1lbXVsYXRvci1kZXZpY2UtaWRgLlxuICovXG5cbi8qKlxuICogT25lIHJ1bm5pbmcgZW11bGF0b3IsIHBhaXJlZCB3aXRoIHRoZSBBVkQgaXQgd2FzIHN0YXJ0ZWQgZnJvbS5cbiAqL1xuZXhwb3J0IGludGVyZmFjZSBFbXVsYXRvckRldmljZUNhbmRpZGF0ZSB7XG4gIC8qKlxuICAgKiBUaGUgQVZEIG5hbWUgdGhlIGVtdWxhdG9yIHJlcG9ydHMsIGUuZy4gYG9ic2lkaWFuX3NjcmVlbnNob3RzYC5cbiAgICovXG4gIHJlYWRvbmx5IGF2ZE5hbWU6IHN0cmluZztcblxuICAvKipcbiAgICogVGhlIGRldmljZSBVRElELCBlLmcuIGBlbXVsYXRvci01NTU0YC5cbiAgICovXG4gIHJlYWRvbmx5IGRldmljZUlkOiBzdHJpbmc7XG59XG5cbi8qKlxuICogUGFyYW1ldGVycyBmb3Ige0BsaW5rIHNlbGVjdEVtdWxhdG9yRGV2aWNlSWR9LlxuICovXG5leHBvcnQgaW50ZXJmYWNlIFNlbGVjdEVtdWxhdG9yRGV2aWNlSWRQYXJhbXMge1xuICAvKipcbiAgICogVGhlIEFWRCBuYW1lIHRvIG1hdGNoLlxuICAgKi9cbiAgcmVhZG9ubHkgYXZkTmFtZTogc3RyaW5nO1xuXG4gIC8qKlxuICAgKiBFdmVyeSBydW5uaW5nIGVtdWxhdG9yLCB3aXRoIHRoZSBBVkQgZWFjaCB3YXMgc3RhcnRlZCBmcm9tLlxuICAgKi9cbiAgcmVhZG9ubHkgY2FuZGlkYXRlczogcmVhZG9ubHkgRW11bGF0b3JEZXZpY2VDYW5kaWRhdGVbXTtcbn1cblxuLyoqXG4gKiBQaWNrcyB0aGUgZW11bGF0b3Igc3RhcnRlZCBmcm9tIGEgbmFtZWQgQVZELlxuICpcbiAqIEBwYXJhbSBwYXJhbXMgLSBUaGUgQVZEIHRvIG1hdGNoIGFuZCB0aGUgcnVubmluZyBlbXVsYXRvcnMgdG8gbWF0Y2ggYWdhaW5zdC5cbiAqIEByZXR1cm5zIFRoZSBtYXRjaGluZyBkZXZpY2UgVURJRCwgb3IgYG51bGxgIHdoZW4gbm8gcnVubmluZyBlbXVsYXRvciBjYXJyaWVzIHRoYXQgQVZEIG5hbWUuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBzZWxlY3RFbXVsYXRvckRldmljZUlkKHBhcmFtczogU2VsZWN0RW11bGF0b3JEZXZpY2VJZFBhcmFtcyk6IG51bGwgfCBzdHJpbmcge1xuICBjb25zdCBtYXRjaCA9IHBhcmFtcy5jYW5kaWRhdGVzLmZpbmQoKGNhbmRpZGF0ZSkgPT4gY2FuZGlkYXRlLmF2ZE5hbWUgPT09IHBhcmFtcy5hdmROYW1lKTtcbiAgcmV0dXJuIG1hdGNoID8gbWF0Y2guZGV2aWNlSWQgOiBudWxsO1xufVxuIl0sCiAgIm1hcHBpbmdzIjogIjs7Ozs7Ozs7Ozs7Ozs7Ozs7O0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQXFETyxTQUFTLHVCQUF1QixRQUFxRDtBQUMxRixRQUFNLFFBQVEsT0FBTyxXQUFXLEtBQUssQ0FBQyxjQUFjLFVBQVUsWUFBWSxPQUFPLE9BQU87QUFDeEYsU0FBTyxRQUFRLE1BQU0sV0FBVztBQUNsQzsiLAogICJuYW1lcyI6IFtdCn0K
@@ -0,0 +1,49 @@
1
+ /**
2
+ * @file
3
+ *
4
+ * Picks the running emulator that belongs to a named AVD.
5
+ *
6
+ * A capture suite must never take "the first device `adb devices` lists". Two
7
+ * things routinely make that the wrong device on this fleet: a physical phone is
8
+ * often plugged into the same machine, and the harness's own `obsidian_test` AVD
9
+ * runs at a different geometry than the `obsidian_screenshots` AVD sized to the
10
+ * store's frame. Picking by position silently photographs the wrong screen at
11
+ * the wrong size, and the dimension assertion that would have caught it fires
12
+ * several minutes later, after the run.
13
+ *
14
+ * Pure and unit-tested; the `adb` round-trips that gather the AVD names live in
15
+ * `resolve-emulator-device-id`.
16
+ */
17
+ /**
18
+ * One running emulator, paired with the AVD it was started from.
19
+ */
20
+ export interface EmulatorDeviceCandidate {
21
+ /**
22
+ * The AVD name the emulator reports, e.g. `obsidian_screenshots`.
23
+ */
24
+ readonly avdName: string;
25
+ /**
26
+ * The device UDID, e.g. `emulator-5554`.
27
+ */
28
+ readonly deviceId: string;
29
+ }
30
+ /**
31
+ * Parameters for {@link selectEmulatorDeviceId}.
32
+ */
33
+ export interface SelectEmulatorDeviceIdParams {
34
+ /**
35
+ * The AVD name to match.
36
+ */
37
+ readonly avdName: string;
38
+ /**
39
+ * Every running emulator, with the AVD each was started from.
40
+ */
41
+ readonly candidates: readonly EmulatorDeviceCandidate[];
42
+ }
43
+ /**
44
+ * Picks the emulator started from a named AVD.
45
+ *
46
+ * @param params - The AVD to match and the running emulators to match against.
47
+ * @returns The matching device UDID, or `null` when no running emulator carries that AVD name.
48
+ */
49
+ export declare function selectEmulatorDeviceId(params: SelectEmulatorDeviceIdParams): null | string;
@@ -23,9 +23,13 @@ __export(index_exports, {
23
23
  ConfigDirectoryFallbackError: () => import_config_directory_fallback_error.ConfigDirectoryFallbackError,
24
24
  ContextId: () => import_context_id.ContextId,
25
25
  DEFAULT_CONFIG_DIRECTORY: () => import_config_directory.DEFAULT_CONFIG_DIRECTORY,
26
+ DEFAULT_MINIMUM_KEYBOARD_HEIGHT_IN_PIXELS: () => import_soft_keyboard_geometry.DEFAULT_MINIMUM_KEYBOARD_HEIGHT_IN_PIXELS,
26
27
  DEFAULT_OBSIDIAN_VERSION_SPECS: () => import_version_matrix.DEFAULT_OBSIDIAN_VERSION_SPECS,
27
28
  DesktopCdpTransport: () => import_transport_desktop_cdp.DesktopCdpTransport,
28
29
  DesktopOnlyPluginSkipError: () => import_desktop_only_plugin_skip_error.DesktopOnlyPluginSkipError,
30
+ DeviceSettingNamespace: () => import_device_settings_command.DeviceSettingNamespace,
31
+ DeviceSettingRestoreKind: () => import_device_setting_restore.DeviceSettingRestoreKind,
32
+ DeviceSettingVerb: () => import_device_settings_command.DeviceSettingVerb,
29
33
  IncompatibleInstallerVersionError: () => import_incompatible_installer_version_error.IncompatibleInstallerVersionError,
30
34
  IntegrationSetupFailedError: () => import_integration_setup_failed_error.IntegrationSetupFailedError,
31
35
  OwnedInstanceExitedError: () => import_owned_instance_exited_error.OwnedInstanceExitedError,
@@ -38,14 +42,19 @@ __export(index_exports, {
38
42
  buildDemoVaultPopulate: () => import_demo_vault_populate.buildDemoVaultPopulate,
39
43
  buildDemoVaultPopulateAsync: () => import_demo_vault_bootstrap.buildDemoVaultPopulateAsync,
40
44
  buildDeviceMetricsOverride: () => import_capture_screenshot.buildDeviceMetricsOverride,
45
+ buildDeviceSettingsCommandArguments: () => import_device_settings_command.buildDeviceSettingsCommandArguments,
41
46
  buildLabelSvg: () => import_label_screenshot.buildLabelSvg,
47
+ buildSoftKeyboardDiagnosticMessage: () => import_soft_keyboard_geometry.buildSoftKeyboardDiagnosticMessage,
48
+ captureDeviceScreenshot: () => import_device_screenshot.captureDeviceScreenshot,
42
49
  captureObsidianScreenshot: () => import_capture_obsidian_screenshot.captureObsidianScreenshot,
43
50
  checkIsMobileTransport: () => import_transport_options.checkIsMobileTransport,
51
+ checkIsSoftKeyboardUp: () => import_soft_keyboard_geometry.checkIsSoftKeyboardUp,
44
52
  computeFitToCanvas: () => import_fit_screenshot.computeFitToCanvas,
45
53
  computeLabelBand: () => import_label_screenshot.computeLabelBand,
46
54
  connectToCdp: () => import_connect_to_cdp.connectToCdp,
47
55
  createTransportFromOptions: () => import_transport_factory.createTransportFromOptions,
48
56
  decodeBase64Png: () => import_capture_screenshot.decodeBase64Png,
57
+ deleteDeviceSetting: () => import_device_settings.deleteDeviceSetting,
49
58
  escapeSvgText: () => import_label_screenshot.escapeSvgText,
50
59
  evalInObsidian: () => import_eval_in_obsidian.evalInObsidian,
51
60
  fitScreenshotToCanvas: () => import_fit_screenshot.fitScreenshotToCanvas,
@@ -53,22 +62,36 @@ __export(index_exports, {
53
62
  isPng: () => import_capture_screenshot.isPng,
54
63
  labelScreenshot: () => import_label_screenshot.labelScreenshot,
55
64
  openObsidianSettingsTab: () => import_open_obsidian_settings_tab.openObsidianSettingsTab,
65
+ parseInputMethodState: () => import_soft_keyboard_geometry.parseInputMethodState,
56
66
  pollInObsidian: () => import_poll_in_obsidian.pollInObsidian,
67
+ raiseSoftKeyboard: () => import_soft_keyboard.raiseSoftKeyboard,
57
68
  readDemoVaultTree: () => import_demo_vault_tree.readDemoVaultTree,
69
+ readDeviceSetting: () => import_device_settings.readDeviceSetting,
58
70
  readPngDimensions: () => import_capture_screenshot.readPngDimensions,
59
71
  registerLibResolver: () => import_lib_registry.registerLibResolver,
60
72
  registerVault: () => import_vault_registry.registerVault,
61
73
  resolveAsarFallback: () => import_asar_fallback_detection.resolveAsarFallback,
74
+ resolveDeviceSettingRestore: () => import_device_setting_restore.resolveDeviceSettingRestore,
62
75
  resolveElectronCompatibility: () => import_electron_compatibility.resolveElectronCompatibility,
76
+ resolveEmulatorDeviceId: () => import_resolve_emulator_device_id.resolveEmulatorDeviceId,
63
77
  resolveInstallerCompatibility: () => import_installer_compatibility.resolveInstallerCompatibility,
64
78
  resolveMissingInjectedPlugins: () => import_demo_vault_populate.resolveMissingInjectedPlugins,
79
+ resolveSoftKeyboardTapPoints: () => import_soft_keyboard_geometry.resolveSoftKeyboardTapPoints,
80
+ runAdbBinary: () => import_adb.runAdbBinary,
81
+ runAdbText: () => import_adb.runAdbText,
82
+ runAdbTextWithoutDevice: () => import_adb.runAdbTextWithoutDevice,
65
83
  runObsidianVersionMatrix: () => import_run_version_matrix.runObsidianVersionMatrix,
84
+ selectEmulatorDeviceId: () => import_emulator_device_id.selectEmulatorDeviceId,
66
85
  setSetupErrorResolver: () => import_context_provider.setSetupErrorResolver,
67
86
  setTransportOptionsResolver: () => import_context_provider.setTransportOptionsResolver,
68
87
  setVaultPathResolver: () => import_context_provider.setVaultPathResolver,
69
- unregisterVault: () => import_vault_registry.unregisterVault
88
+ tapDevice: () => import_soft_keyboard.tapDevice,
89
+ unregisterVault: () => import_vault_registry.unregisterVault,
90
+ withSoftKeyboardEnabled: () => import_device_settings.withSoftKeyboardEnabled,
91
+ writeDeviceSetting: () => import_device_settings.writeDeviceSetting
70
92
  });
71
93
  module.exports = __toCommonJS(index_exports);
94
+ var import_adb = require("./adb.cjs");
72
95
  var import_asar_fallback_detection = require("./asar-fallback-detection.cjs");
73
96
  var import_capture_obsidian_screenshot = require("./capture-obsidian-screenshot.cjs");
74
97
  var import_capture_screenshot = require("./capture-screenshot.cjs");
@@ -81,7 +104,12 @@ var import_demo_vault_bootstrap = require("./demo-vault-bootstrap.cjs");
81
104
  var import_demo_vault_populate = require("./demo-vault-populate.cjs");
82
105
  var import_demo_vault_tree = require("./demo-vault-tree.cjs");
83
106
  var import_desktop_only_plugin_skip_error = require("./desktop-only-plugin-skip-error.cjs");
107
+ var import_device_screenshot = require("./device-screenshot.cjs");
108
+ var import_device_setting_restore = require("./device-setting-restore.cjs");
109
+ var import_device_settings_command = require("./device-settings-command.cjs");
110
+ var import_device_settings = require("./device-settings.cjs");
84
111
  var import_electron_compatibility = require("./electron-compatibility.cjs");
112
+ var import_emulator_device_id = require("./emulator-device-id.cjs");
85
113
  var import_eval_in_obsidian = require("./eval-in-obsidian.cjs");
86
114
  var import_fit_screenshot = require("./fit-screenshot.cjs");
87
115
  var import_incompatible_installer_version_error = require("./incompatible-installer-version-error.cjs");
@@ -95,8 +123,11 @@ var import_open_obsidian_settings_tab = require("./open-obsidian-settings-tab.cj
95
123
  var import_owned_instance_exited_error = require("./owned-instance-exited-error.cjs");
96
124
  var import_poll_in_obsidian = require("./poll-in-obsidian.cjs");
97
125
  var import_renderer_failed_to_initialize_error = require("./renderer-failed-to-initialize-error.cjs");
126
+ var import_resolve_emulator_device_id = require("./resolve-emulator-device-id.cjs");
98
127
  var import_run_version_matrix = require("./run-version-matrix.cjs");
99
128
  var import_silent_asar_fallback_error = require("./silent-asar-fallback-error.cjs");
129
+ var import_soft_keyboard_geometry = require("./soft-keyboard-geometry.cjs");
130
+ var import_soft_keyboard = require("./soft-keyboard.cjs");
100
131
  var import_temporary_vault = require("./temporary-vault.cjs");
101
132
  var import_transport_appium = require("./transport-appium.cjs");
102
133
  var import_transport_desktop_cdp = require("./transport-desktop-cdp.cjs");
@@ -111,9 +142,13 @@ var import_version_matrix = require("./version-matrix.cjs");
111
142
  ConfigDirectoryFallbackError,
112
143
  ContextId,
113
144
  DEFAULT_CONFIG_DIRECTORY,
145
+ DEFAULT_MINIMUM_KEYBOARD_HEIGHT_IN_PIXELS,
114
146
  DEFAULT_OBSIDIAN_VERSION_SPECS,
115
147
  DesktopCdpTransport,
116
148
  DesktopOnlyPluginSkipError,
149
+ DeviceSettingNamespace,
150
+ DeviceSettingRestoreKind,
151
+ DeviceSettingVerb,
117
152
  IncompatibleInstallerVersionError,
118
153
  IntegrationSetupFailedError,
119
154
  OwnedInstanceExitedError,
@@ -126,14 +161,19 @@ var import_version_matrix = require("./version-matrix.cjs");
126
161
  buildDemoVaultPopulate,
127
162
  buildDemoVaultPopulateAsync,
128
163
  buildDeviceMetricsOverride,
164
+ buildDeviceSettingsCommandArguments,
129
165
  buildLabelSvg,
166
+ buildSoftKeyboardDiagnosticMessage,
167
+ captureDeviceScreenshot,
130
168
  captureObsidianScreenshot,
131
169
  checkIsMobileTransport,
170
+ checkIsSoftKeyboardUp,
132
171
  computeFitToCanvas,
133
172
  computeLabelBand,
134
173
  connectToCdp,
135
174
  createTransportFromOptions,
136
175
  decodeBase64Png,
176
+ deleteDeviceSetting,
137
177
  escapeSvgText,
138
178
  evalInObsidian,
139
179
  fitScreenshotToCanvas,
@@ -141,19 +181,32 @@ var import_version_matrix = require("./version-matrix.cjs");
141
181
  isPng,
142
182
  labelScreenshot,
143
183
  openObsidianSettingsTab,
184
+ parseInputMethodState,
144
185
  pollInObsidian,
186
+ raiseSoftKeyboard,
145
187
  readDemoVaultTree,
188
+ readDeviceSetting,
146
189
  readPngDimensions,
147
190
  registerLibResolver,
148
191
  registerVault,
149
192
  resolveAsarFallback,
193
+ resolveDeviceSettingRestore,
150
194
  resolveElectronCompatibility,
195
+ resolveEmulatorDeviceId,
151
196
  resolveInstallerCompatibility,
152
197
  resolveMissingInjectedPlugins,
198
+ resolveSoftKeyboardTapPoints,
199
+ runAdbBinary,
200
+ runAdbText,
201
+ runAdbTextWithoutDevice,
153
202
  runObsidianVersionMatrix,
203
+ selectEmulatorDeviceId,
154
204
  setSetupErrorResolver,
155
205
  setTransportOptionsResolver,
156
206
  setVaultPathResolver,
157
- unregisterVault
207
+ tapDevice,
208
+ unregisterVault,
209
+ withSoftKeyboardEnabled,
210
+ writeDeviceSetting
158
211
  });
159
- //# sourceMappingURL=data:application/json;base64,ewogICJ2ZXJzaW9uIjogMywKICAic291cmNlcyI6IFsiLi4vLi4vLi4vc3JjL2luZGV4LnRzIl0sCiAgInNvdXJjZXNDb250ZW50IjogWyIvKipcbiAqIEBmaWxlXG4gKlxuICogQ29udGFpbnMgdGhlIGVudHJ5IHBvaW50IGZvciB0aGUgaW50ZWdyYXRpb24gdGVzdGluZyBtb2R1bGUuXG4gKi9cblxuZXhwb3J0IHR5cGUge1xuICBBc2FyRmFsbGJhY2ssXG4gIEFzYXJGYWxsYmFja1RpZXIsXG4gIFJlc29sdmVBc2FyRmFsbGJhY2tQYXJhbXNcbn0gZnJvbSAnLi9hc2FyLWZhbGxiYWNrLWRldGVjdGlvbi5janMnO1xuZXhwb3J0IHsgcmVzb2x2ZUFzYXJGYWxsYmFjayB9IGZyb20gJy4vYXNhci1mYWxsYmFjay1kZXRlY3Rpb24uY2pzJztcbmV4cG9ydCB0eXBlIHsgQ2FwdHVyZU9ic2lkaWFuU2NyZWVuc2hvdE9wdGlvbnMgfSBmcm9tICcuL2NhcHR1cmUtb2JzaWRpYW4tc2NyZWVuc2hvdC5janMnO1xuZXhwb3J0IHsgY2FwdHVyZU9ic2lkaWFuU2NyZWVuc2hvdCB9IGZyb20gJy4vY2FwdHVyZS1vYnNpZGlhbi1zY3JlZW5zaG90LmNqcyc7XG5leHBvcnQgdHlwZSB7XG4gIENhcHR1cmVTY3JlZW5zaG90UGFyYW1zLFxuICBQbmdEaW1lbnNpb25zXG59IGZyb20gJy4vY2FwdHVyZS1zY3JlZW5zaG90LmNqcyc7XG5leHBvcnQge1xuICBidWlsZERldmljZU1ldHJpY3NPdmVycmlkZSxcbiAgZGVjb2RlQmFzZTY0UG5nLFxuICBpc1BuZyxcbiAgcmVhZFBuZ0RpbWVuc2lvbnNcbn0gZnJvbSAnLi9jYXB0dXJlLXNjcmVlbnNob3QuY2pzJztcbmV4cG9ydCB0eXBlIHsgQ29uZmlnRGlyZWN0b3J5RmFsbGJhY2tFcnJvckNvbnN0cnVjdG9yUGFyYW1zIH0gZnJvbSAnLi9jb25maWctZGlyZWN0b3J5LWZhbGxiYWNrLWVycm9yLmNqcyc7XG5leHBvcnQgeyBDb25maWdEaXJlY3RvcnlGYWxsYmFja0Vycm9yIH0gZnJvbSAnLi9jb25maWctZGlyZWN0b3J5LWZhbGxiYWNrLWVycm9yLmNqcyc7XG5leHBvcnQge1xuICBhc3NlcnRWYWxpZENvbmZpZ0RpcmVjdG9yeSxcbiAgREVGQVVMVF9DT05GSUdfRElSRUNUT1JZXG59IGZyb20gJy4vY29uZmlnLWRpcmVjdG9yeS5janMnO1xuZXhwb3J0IHR5cGUge1xuICBDZHBDb25uZWN0aW9uLFxuICBDb25uZWN0VG9DZHBPcHRpb25zXG59IGZyb20gJy4vY29ubmVjdC10by1jZHAuY2pzJztcbmV4cG9ydCB7IGNvbm5lY3RUb0NkcCB9IGZyb20gJy4vY29ubmVjdC10by1jZHAuY2pzJztcbmV4cG9ydCB0eXBlIHtcbiAgQ29udGV4dEFyZ3VtZW50cyxcbiAgQ29udGV4dE9mXG59IGZyb20gJy4vY29udGV4dC1pZC5janMnO1xuZXhwb3J0IHsgQ29udGV4dElkIH0gZnJvbSAnLi9jb250ZXh0LWlkLmNqcyc7XG5leHBvcnQgdHlwZSB7XG4gIFNldHVwRXJyb3JSZXNvbHZlcixcbiAgVHJhbnNwb3J0T3B0aW9uc1Jlc29sdmVyLFxuICBWYXVsdFBhdGhSZXNvbHZlclxufSBmcm9tICcuL2NvbnRleHQtcHJvdmlkZXIuY2pzJztcbmV4cG9ydCB7XG4gIHNldFNldHVwRXJyb3JSZXNvbHZlcixcbiAgc2V0VHJhbnNwb3J0T3B0aW9uc1Jlc29sdmVyLFxuICBzZXRWYXVsdFBhdGhSZXNvbHZlclxufSBmcm9tICcuL2NvbnRleHQtcHJvdmlkZXIuY2pzJztcbmV4cG9ydCB0eXBlIHtcbiAgQm9vdHN0cmFwRGVtb1ZhdWx0UGx1Z2luc1BhcmFtcyxcbiAgQm9vdHN0cmFwRGVtb1ZhdWx0UGx1Z2luc1Jlc3VsdCxcbiAgSW5zdGFsbGVkUGx1Z2luSW5mb1xufSBmcm9tICcuL2RlbW8tdmF1bHQtYm9vdHN0cmFwLmNqcyc7XG5leHBvcnQge1xuICBib290c3RyYXBEZW1vVmF1bHRQbHVnaW5zLFxuICBidWlsZERlbW9WYXVsdFBvcHVsYXRlQXN5bmNcbn0gZnJvbSAnLi9kZW1vLXZhdWx0LWJvb3RzdHJhcC5janMnO1xuZXhwb3J0IHR5cGUge1xuICBCdWlsZERlbW9WYXVsdFBvcHVsYXRlUGFyYW1zLFxuICBJbmplY3RQbHVnaW5QYXJhbXMsXG4gIFJlc29sdmVNaXNzaW5nSW5qZWN0ZWRQbHVnaW5zUGFyYW1zXG59IGZyb20gJy4vZGVtby12YXVsdC1wb3B1bGF0ZS5janMnO1xuZXhwb3J0IHtcbiAgYnVpbGREZW1vVmF1bHRQb3B1bGF0ZSxcbiAgcmVzb2x2ZU1pc3NpbmdJbmplY3RlZFBsdWdpbnNcbn0gZnJvbSAnLi9kZW1vLXZhdWx0LXBvcHVsYXRlLmNqcyc7XG5leHBvcnQgdHlwZSB7IFJlYWREZW1vVmF1bHRUcmVlUGFyYW1zIH0gZnJvbSAnLi9kZW1vLXZhdWx0LXRyZWUuY2pzJztcbmV4cG9ydCB7IHJlYWREZW1vVmF1bHRUcmVlIH0gZnJvbSAnLi9kZW1vLXZhdWx0LXRyZWUuY2pzJztcbmV4cG9ydCB7IERlc2t0b3BPbmx5UGx1Z2luU2tpcEVycm9yIH0gZnJvbSAnLi9kZXNrdG9wLW9ubHktcGx1Z2luLXNraXAtZXJyb3IuY2pzJztcbmV4cG9ydCB0eXBlIHtcbiAgRWxlY3Ryb25Db21wYXRpYmlsaXR5LFxuICBFbGVjdHJvbkNvbXBhdGliaWxpdHlUaWVyLFxuICBSZXNvbHZlRWxlY3Ryb25Db21wYXRpYmlsaXR5UGFyYW1zXG59IGZyb20gJy4vZWxlY3Ryb24tY29tcGF0aWJpbGl0eS5janMnO1xuZXhwb3J0IHsgcmVzb2x2ZUVsZWN0cm9uQ29tcGF0aWJpbGl0eSB9IGZyb20gJy4vZWxlY3Ryb24tY29tcGF0aWJpbGl0eS5janMnO1xuZXhwb3J0IHR5cGUge1xuICBDbGlja0VsZW1lbnRQYXJhbXMsXG4gIENsaWNrTW91c2VQYXJhbXMsXG4gIENvbW1vbkFyZ3VtZW50cyxcbiAgQ3JlYXRlTm90ZVBhcmFtcyxcbiAgRXZhbEluT2JzaWRpYW5QYXJhbXMsXG4gIEdlbmVyaWNPYmplY3QsXG4gIEhvdmVyRWxlbWVudFBhcmFtcyxcbiAgTGliLFxuICBNb3VzZUJ1dHRvbixcbiAgTW92ZU1vdXNlUGFyYW1zLFxuICBPcGVuU2V0dGluZ3NUYWJQYXJhbXMsXG4gIFByZXNzS2V5UGFyYW1zLFxuICBUeXBlSW50b0VkaXRvclBhcmFtcyxcbiAgVW5ob3ZlckVsZW1lbnRQYXJhbXMsXG4gIFdhaXRVbnRpbFBhcmFtc1xufSBmcm9tICcuL2V2YWwtaW4tb2JzaWRpYW4uY2pzJztcbmV4cG9ydCB7IGV2YWxJbk9ic2lkaWFuIH0gZnJvbSAnLi9ldmFsLWluLW9ic2lkaWFuLmNqcyc7XG5leHBvcnQgdHlwZSB7XG4gIENvbXB1dGVGaXRUb0NhbnZhc1BhcmFtcyxcbiAgRml0U2NyZWVuc2hvdFRvQ2FudmFzT3B0aW9ucyxcbiAgRml0VG9DYW52YXNHZW9tZXRyeVxufSBmcm9tICcuL2ZpdC1zY3JlZW5zaG90LmNqcyc7XG5leHBvcnQge1xuICBjb21wdXRlRml0VG9DYW52YXMsXG4gIGZpdFNjcmVlbnNob3RUb0NhbnZhc1xufSBmcm9tICcuL2ZpdC1zY3JlZW5zaG90LmNqcyc7XG5leHBvcnQgdHlwZSB7IEluY29tcGF0aWJsZUluc3RhbGxlclZlcnNpb25FcnJvckNvbnN0cnVjdG9yUGFyYW1zIH0gZnJvbSAnLi9pbmNvbXBhdGlibGUtaW5zdGFsbGVyLXZlcnNpb24tZXJyb3IuY2pzJztcbmV4cG9ydCB7IEluY29tcGF0aWJsZUluc3RhbGxlclZlcnNpb25FcnJvciB9IGZyb20gJy4vaW5jb21wYXRpYmxlLWluc3RhbGxlci12ZXJzaW9uLWVycm9yLmNqcyc7XG5leHBvcnQgdHlwZSB7XG4gIEluc3RhbGxlckNvbXBhdGliaWxpdHksXG4gIEluc3RhbGxlckNvbXBhdGliaWxpdHlUaWVyLFxuICBSZXNvbHZlSW5zdGFsbGVyQ29tcGF0aWJpbGl0eVBhcmFtc1xufSBmcm9tICcuL2luc3RhbGxlci1jb21wYXRpYmlsaXR5LmNqcyc7XG5leHBvcnQgeyByZXNvbHZlSW5zdGFsbGVyQ29tcGF0aWJpbGl0eSB9IGZyb20gJy4vaW5zdGFsbGVyLWNvbXBhdGliaWxpdHkuY2pzJztcbmV4cG9ydCB0eXBlIHsgSW50ZWdyYXRpb25TZXR1cEZhaWxlZEVycm9yQ29uc3RydWN0b3JQYXJhbXMgfSBmcm9tICcuL2ludGVncmF0aW9uLXNldHVwLWZhaWxlZC1lcnJvci5janMnO1xuZXhwb3J0IHsgSW50ZWdyYXRpb25TZXR1cEZhaWxlZEVycm9yIH0gZnJvbSAnLi9pbnRlZ3JhdGlvbi1zZXR1cC1mYWlsZWQtZXJyb3IuY2pzJztcbmV4cG9ydCB0eXBlIHtcbiAgQ29tcHV0ZUxhYmVsQmFuZFBhcmFtcyxcbiAgTGFiZWxCYW5kR2VvbWV0cnksXG4gIExhYmVsU2NyZWVuc2hvdE9wdGlvbnNcbn0gZnJvbSAnLi9sYWJlbC1zY3JlZW5zaG90LmNqcyc7XG5leHBvcnQge1xuICBidWlsZExhYmVsU3ZnLFxuICBjb21wdXRlTGFiZWxCYW5kLFxuICBlc2NhcGVTdmdUZXh0LFxuICBsYWJlbFNjcmVlbnNob3Rcbn0gZnJvbSAnLi9sYWJlbC1zY3JlZW5zaG90LmNqcyc7XG5leHBvcnQgdHlwZSB7IExpYlJlc29sdmVyIH0gZnJvbSAnLi9saWItcmVnaXN0cnkuY2pzJztcbmV4cG9ydCB7IHJlZ2lzdGVyTGliUmVzb2x2ZXIgfSBmcm9tICcuL2xpYi1yZWdpc3RyeS5janMnO1xuZXhwb3J0IHR5cGUge1xuICBPYnNpZGlhblJ1bnRpbWVWZXJzaW9ucyxcbiAgT2JzaWRpYW5WZXJzaW9uQ2hhbmdlbG9nVXJscyxcbiAgT2JzaWRpYW5WZXJzaW9uRG93bmxvYWRzLFxuICBPYnNpZGlhblZlcnNpb25NZXRhZGF0YVxufSBmcm9tICcuL29ic2lkaWFuLW1ldGFkYXRhLmNqcyc7XG5leHBvcnQgeyBnZXRWZXJzaW9uTWV0YWRhdGEgfSBmcm9tICcuL29ic2lkaWFuLW1ldGFkYXRhLmNqcyc7XG5leHBvcnQge1xuICBDQVRBTFlTVF9MQVRFU1QsXG4gIFBVQkxJQ19MQVRFU1Rcbn0gZnJvbSAnLi9vYnNpZGlhbi12ZXJzaW9uLmNqcyc7XG5leHBvcnQgdHlwZSB7IE9wZW5PYnNpZGlhblNldHRpbmdzVGFiT3B0aW9ucyB9IGZyb20gJy4vb3Blbi1vYnNpZGlhbi1zZXR0aW5ncy10YWIuY2pzJztcbmV4cG9ydCB7IG9wZW5PYnNpZGlhblNldHRpbmdzVGFiIH0gZnJvbSAnLi9vcGVuLW9ic2lkaWFuLXNldHRpbmdzLXRhYi5janMnO1xuZXhwb3J0IHR5cGUgeyBPd25lZEluc3RhbmNlRXhpdGVkRXJyb3JDb25zdHJ1Y3RvclBhcmFtcyB9IGZyb20gJy4vb3duZWQtaW5zdGFuY2UtZXhpdGVkLWVycm9yLmNqcyc7XG5leHBvcnQgeyBPd25lZEluc3RhbmNlRXhpdGVkRXJyb3IgfSBmcm9tICcuL293bmVkLWluc3RhbmNlLWV4aXRlZC1lcnJvci5janMnO1xuZXhwb3J0IHR5cGUgeyBQb2xsSW5PYnNpZGlhblBhcmFtcyB9IGZyb20gJy4vcG9sbC1pbi1vYnNpZGlhbi5janMnO1xuZXhwb3J0IHsgcG9sbEluT2JzaWRpYW4gfSBmcm9tICcuL3BvbGwtaW4tb2JzaWRpYW4uY2pzJztcbmV4cG9ydCB7IFJlbmRlcmVyRmFpbGVkVG9Jbml0aWFsaXplRXJyb3IgfSBmcm9tICcuL3JlbmRlcmVyLWZhaWxlZC10by1pbml0aWFsaXplLWVycm9yLmNqcyc7XG5leHBvcnQgdHlwZSB7IFJ1bk9ic2lkaWFuVmVyc2lvbk1hdHJpeFBhcmFtcyB9IGZyb20gJy4vcnVuLXZlcnNpb24tbWF0cml4LmNqcyc7XG5leHBvcnQgeyBydW5PYnNpZGlhblZlcnNpb25NYXRyaXggfSBmcm9tICcuL3J1bi12ZXJzaW9uLW1hdHJpeC5janMnO1xuZXhwb3J0IHR5cGUgeyBTaWxlbnRBc2FyRmFsbGJhY2tFcnJvckNvbnN0cnVjdG9yUGFyYW1zIH0gZnJvbSAnLi9zaWxlbnQtYXNhci1mYWxsYmFjay1lcnJvci5janMnO1xuZXhwb3J0IHsgU2lsZW50QXNhckZhbGxiYWNrRXJyb3IgfSBmcm9tICcuL3NpbGVudC1hc2FyLWZhbGxiYWNrLWVycm9yLmNqcyc7XG5leHBvcnQgdHlwZSB7XG4gIFBvcHVsYXRlRmlsZUNvbnRlbnQsXG4gIFBvcHVsYXRlRmlsZXNQYXJhbXMsXG4gIFRlbXBvcmFyeVZhdWx0T3B0aW9uc1xufSBmcm9tICcuL3RlbXBvcmFyeS12YXVsdC5janMnO1xuZXhwb3J0IHsgVGVtcG9yYXJ5VmF1bHQgfSBmcm9tICcuL3RlbXBvcmFyeS12YXVsdC5janMnO1xuZXhwb3J0IHR5cGUge1xuICBBcHBpdW1TZXNzaW9uSW5mbyxcbiAgQXBwaXVtVHJhbnNwb3J0Q29uZmlnXG59IGZyb20gJy4vdHJhbnNwb3J0LWFwcGl1bS5janMnO1xuZXhwb3J0IHsgQXBwaXVtVHJhbnNwb3J0IH0gZnJvbSAnLi90cmFuc3BvcnQtYXBwaXVtLmNqcyc7XG5leHBvcnQgdHlwZSB7XG4gIERlc2t0b3BDZHBUcmFuc3BvcnRDb25maWcsXG4gIE93bmVkSW5zdGFuY2VBc2FyLFxuICBPd25lZEluc3RhbmNlQ29uZmlnLFxuICBPd25lZEluc3RhbmNlRW5kcG9pbnRcbn0gZnJvbSAnLi90cmFuc3BvcnQtZGVza3RvcC1jZHAuY2pzJztcbmV4cG9ydCB7IERlc2t0b3BDZHBUcmFuc3BvcnQgfSBmcm9tICcuL3RyYW5zcG9ydC1kZXNrdG9wLWNkcC5janMnO1xuZXhwb3J0IHsgY3JlYXRlVHJhbnNwb3J0RnJvbU9wdGlvbnMgfSBmcm9tICcuL3RyYW5zcG9ydC1mYWN0b3J5LmNqcyc7XG5leHBvcnQgdHlwZSB7XG4gIE9ic2lkaWFuQW5kcm9pZEFwcGl1bVRyYW5zcG9ydE9wdGlvbnMsXG4gIE9ic2lkaWFuQ2RwVHJhbnNwb3J0T3B0aW9ucyxcbiAgT2JzaWRpYW5UcmFuc3BvcnRPcHRpb25zXG59IGZyb20gJy4vdHJhbnNwb3J0LW9wdGlvbnMuY2pzJztcbmV4cG9ydCB7IGNoZWNrSXNNb2JpbGVUcmFuc3BvcnQgfSBmcm9tICcuL3RyYW5zcG9ydC1vcHRpb25zLmNqcyc7XG5leHBvcnQgdHlwZSB7XG4gIENvbnNvbGVDYXB0dXJlSGFuZGxlLFxuICBPYnNpZGlhblRyYW5zcG9ydCxcbiAgVHJhbnNwb3J0RXZhbE9wdGlvbnNcbn0gZnJvbSAnLi90cmFuc3BvcnQuY2pzJztcbmV4cG9ydCB7XG4gIHJlZ2lzdGVyVmF1bHQsXG4gIHVucmVnaXN0ZXJWYXVsdFxufSBmcm9tICcuL3ZhdWx0LXJlZ2lzdHJ5LmNqcyc7XG5leHBvcnQgdHlwZSB7IE9ic2lkaWFuVmVyc2lvbk1hdHJpeEVudHJ5IH0gZnJvbSAnLi92ZXJzaW9uLW1hdHJpeC5janMnO1xuZXhwb3J0IHsgREVGQVVMVF9PQlNJRElBTl9WRVJTSU9OX1NQRUNTIH0gZnJvbSAnLi92ZXJzaW9uLW1hdHJpeC5janMnO1xuIl0sCiAgIm1hcHBpbmdzIjogIjs7Ozs7Ozs7Ozs7Ozs7Ozs7O0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQVdBLHFDQUFvQztBQUVwQyx5Q0FBMEM7QUFLMUMsZ0NBS087QUFFUCw2Q0FBNkM7QUFDN0MsOEJBR087QUFLUCw0QkFBNkI7QUFLN0Isd0JBQTBCO0FBTTFCLDhCQUlPO0FBTVAsa0NBR087QUFNUCxpQ0FHTztBQUVQLDZCQUFrQztBQUNsQyw0Q0FBMkM7QUFNM0Msb0NBQTZDO0FBa0I3Qyw4QkFBK0I7QUFNL0IsNEJBR087QUFFUCxrREFBa0Q7QUFNbEQscUNBQThDO0FBRTlDLDRDQUE0QztBQU01Qyw4QkFLTztBQUVQLDBCQUFvQztBQU9wQywrQkFBbUM7QUFDbkMsOEJBR087QUFFUCx3Q0FBd0M7QUFFeEMseUNBQXlDO0FBRXpDLDhCQUErQjtBQUMvQixpREFBZ0Q7QUFFaEQsZ0NBQXlDO0FBRXpDLHdDQUF3QztBQU14Qyw2QkFBK0I7QUFLL0IsOEJBQWdDO0FBT2hDLG1DQUFvQztBQUNwQywrQkFBMkM7QUFNM0MsK0JBQXVDO0FBTXZDLDRCQUdPO0FBRVAsNEJBQStDOyIsCiAgIm5hbWVzIjogW10KfQo=
212
+ //# sourceMappingURL=data:application/json;base64,ewogICJ2ZXJzaW9uIjogMywKICAic291cmNlcyI6IFsiLi4vLi4vLi4vc3JjL2luZGV4LnRzIl0sCiAgInNvdXJjZXNDb250ZW50IjogWyIvKipcbiAqIEBmaWxlXG4gKlxuICogQ29udGFpbnMgdGhlIGVudHJ5IHBvaW50IGZvciB0aGUgaW50ZWdyYXRpb24gdGVzdGluZyBtb2R1bGUuXG4gKi9cblxuZXhwb3J0IHR5cGUgeyBSdW5BZGJQYXJhbXMgfSBmcm9tICcuL2FkYi5janMnO1xuZXhwb3J0IHtcbiAgcnVuQWRiQmluYXJ5LFxuICBydW5BZGJUZXh0LFxuICBydW5BZGJUZXh0V2l0aG91dERldmljZVxufSBmcm9tICcuL2FkYi5janMnO1xuZXhwb3J0IHR5cGUge1xuICBBc2FyRmFsbGJhY2ssXG4gIEFzYXJGYWxsYmFja1RpZXIsXG4gIFJlc29sdmVBc2FyRmFsbGJhY2tQYXJhbXNcbn0gZnJvbSAnLi9hc2FyLWZhbGxiYWNrLWRldGVjdGlvbi5janMnO1xuZXhwb3J0IHsgcmVzb2x2ZUFzYXJGYWxsYmFjayB9IGZyb20gJy4vYXNhci1mYWxsYmFjay1kZXRlY3Rpb24uY2pzJztcbmV4cG9ydCB0eXBlIHsgQ2FwdHVyZU9ic2lkaWFuU2NyZWVuc2hvdE9wdGlvbnMgfSBmcm9tICcuL2NhcHR1cmUtb2JzaWRpYW4tc2NyZWVuc2hvdC5janMnO1xuZXhwb3J0IHsgY2FwdHVyZU9ic2lkaWFuU2NyZWVuc2hvdCB9IGZyb20gJy4vY2FwdHVyZS1vYnNpZGlhbi1zY3JlZW5zaG90LmNqcyc7XG5leHBvcnQgdHlwZSB7XG4gIENhcHR1cmVTY3JlZW5zaG90UGFyYW1zLFxuICBQbmdEaW1lbnNpb25zXG59IGZyb20gJy4vY2FwdHVyZS1zY3JlZW5zaG90LmNqcyc7XG5leHBvcnQge1xuICBidWlsZERldmljZU1ldHJpY3NPdmVycmlkZSxcbiAgZGVjb2RlQmFzZTY0UG5nLFxuICBpc1BuZyxcbiAgcmVhZFBuZ0RpbWVuc2lvbnNcbn0gZnJvbSAnLi9jYXB0dXJlLXNjcmVlbnNob3QuY2pzJztcbmV4cG9ydCB0eXBlIHsgQ29uZmlnRGlyZWN0b3J5RmFsbGJhY2tFcnJvckNvbnN0cnVjdG9yUGFyYW1zIH0gZnJvbSAnLi9jb25maWctZGlyZWN0b3J5LWZhbGxiYWNrLWVycm9yLmNqcyc7XG5leHBvcnQgeyBDb25maWdEaXJlY3RvcnlGYWxsYmFja0Vycm9yIH0gZnJvbSAnLi9jb25maWctZGlyZWN0b3J5LWZhbGxiYWNrLWVycm9yLmNqcyc7XG5leHBvcnQge1xuICBhc3NlcnRWYWxpZENvbmZpZ0RpcmVjdG9yeSxcbiAgREVGQVVMVF9DT05GSUdfRElSRUNUT1JZXG59IGZyb20gJy4vY29uZmlnLWRpcmVjdG9yeS5janMnO1xuZXhwb3J0IHR5cGUge1xuICBDZHBDb25uZWN0aW9uLFxuICBDb25uZWN0VG9DZHBPcHRpb25zXG59IGZyb20gJy4vY29ubmVjdC10by1jZHAuY2pzJztcbmV4cG9ydCB7IGNvbm5lY3RUb0NkcCB9IGZyb20gJy4vY29ubmVjdC10by1jZHAuY2pzJztcbmV4cG9ydCB0eXBlIHtcbiAgQ29udGV4dEFyZ3VtZW50cyxcbiAgQ29udGV4dE9mXG59IGZyb20gJy4vY29udGV4dC1pZC5janMnO1xuZXhwb3J0IHsgQ29udGV4dElkIH0gZnJvbSAnLi9jb250ZXh0LWlkLmNqcyc7XG5leHBvcnQgdHlwZSB7XG4gIFNldHVwRXJyb3JSZXNvbHZlcixcbiAgVHJhbnNwb3J0T3B0aW9uc1Jlc29sdmVyLFxuICBWYXVsdFBhdGhSZXNvbHZlclxufSBmcm9tICcuL2NvbnRleHQtcHJvdmlkZXIuY2pzJztcbmV4cG9ydCB7XG4gIHNldFNldHVwRXJyb3JSZXNvbHZlcixcbiAgc2V0VHJhbnNwb3J0T3B0aW9uc1Jlc29sdmVyLFxuICBzZXRWYXVsdFBhdGhSZXNvbHZlclxufSBmcm9tICcuL2NvbnRleHQtcHJvdmlkZXIuY2pzJztcbmV4cG9ydCB0eXBlIHtcbiAgQm9vdHN0cmFwRGVtb1ZhdWx0UGx1Z2luc1BhcmFtcyxcbiAgQm9vdHN0cmFwRGVtb1ZhdWx0UGx1Z2luc1Jlc3VsdCxcbiAgSW5zdGFsbGVkUGx1Z2luSW5mb1xufSBmcm9tICcuL2RlbW8tdmF1bHQtYm9vdHN0cmFwLmNqcyc7XG5leHBvcnQge1xuICBib290c3RyYXBEZW1vVmF1bHRQbHVnaW5zLFxuICBidWlsZERlbW9WYXVsdFBvcHVsYXRlQXN5bmNcbn0gZnJvbSAnLi9kZW1vLXZhdWx0LWJvb3RzdHJhcC5janMnO1xuZXhwb3J0IHR5cGUge1xuICBCdWlsZERlbW9WYXVsdFBvcHVsYXRlUGFyYW1zLFxuICBJbmplY3RQbHVnaW5QYXJhbXMsXG4gIFJlc29sdmVNaXNzaW5nSW5qZWN0ZWRQbHVnaW5zUGFyYW1zXG59IGZyb20gJy4vZGVtby12YXVsdC1wb3B1bGF0ZS5janMnO1xuZXhwb3J0IHtcbiAgYnVpbGREZW1vVmF1bHRQb3B1bGF0ZSxcbiAgcmVzb2x2ZU1pc3NpbmdJbmplY3RlZFBsdWdpbnNcbn0gZnJvbSAnLi9kZW1vLXZhdWx0LXBvcHVsYXRlLmNqcyc7XG5leHBvcnQgdHlwZSB7IFJlYWREZW1vVmF1bHRUcmVlUGFyYW1zIH0gZnJvbSAnLi9kZW1vLXZhdWx0LXRyZWUuY2pzJztcbmV4cG9ydCB7IHJlYWREZW1vVmF1bHRUcmVlIH0gZnJvbSAnLi9kZW1vLXZhdWx0LXRyZWUuY2pzJztcbmV4cG9ydCB7IERlc2t0b3BPbmx5UGx1Z2luU2tpcEVycm9yIH0gZnJvbSAnLi9kZXNrdG9wLW9ubHktcGx1Z2luLXNraXAtZXJyb3IuY2pzJztcbmV4cG9ydCB0eXBlIHsgQ2FwdHVyZURldmljZVNjcmVlbnNob3RQYXJhbXMgfSBmcm9tICcuL2RldmljZS1zY3JlZW5zaG90LmNqcyc7XG5leHBvcnQgeyBjYXB0dXJlRGV2aWNlU2NyZWVuc2hvdCB9IGZyb20gJy4vZGV2aWNlLXNjcmVlbnNob3QuY2pzJztcbmV4cG9ydCB0eXBlIHtcbiAgRGV2aWNlU2V0dGluZ1Jlc3RvcmUsXG4gIERldmljZVNldHRpbmdSZXN0b3JlRGVsZXRlLFxuICBEZXZpY2VTZXR0aW5nUmVzdG9yZVdyaXRlXG59IGZyb20gJy4vZGV2aWNlLXNldHRpbmctcmVzdG9yZS5janMnO1xuZXhwb3J0IHtcbiAgRGV2aWNlU2V0dGluZ1Jlc3RvcmVLaW5kLFxuICByZXNvbHZlRGV2aWNlU2V0dGluZ1Jlc3RvcmVcbn0gZnJvbSAnLi9kZXZpY2Utc2V0dGluZy1yZXN0b3JlLmNqcyc7XG5leHBvcnQgdHlwZSB7IEJ1aWxkRGV2aWNlU2V0dGluZ3NDb21tYW5kQXJndW1lbnRzUGFyYW1zIH0gZnJvbSAnLi9kZXZpY2Utc2V0dGluZ3MtY29tbWFuZC5janMnO1xuZXhwb3J0IHtcbiAgYnVpbGREZXZpY2VTZXR0aW5nc0NvbW1hbmRBcmd1bWVudHMsXG4gIERldmljZVNldHRpbmdOYW1lc3BhY2UsXG4gIERldmljZVNldHRpbmdWZXJiXG59IGZyb20gJy4vZGV2aWNlLXNldHRpbmdzLWNvbW1hbmQuY2pzJztcbmV4cG9ydCB0eXBlIHtcbiAgRGV2aWNlU2V0dGluZ1BhcmFtcyxcbiAgV2l0aFNvZnRLZXlib2FyZEVuYWJsZWRQYXJhbXMsXG4gIFdyaXRlRGV2aWNlU2V0dGluZ1BhcmFtc1xufSBmcm9tICcuL2RldmljZS1zZXR0aW5ncy5janMnO1xuZXhwb3J0IHtcbiAgZGVsZXRlRGV2aWNlU2V0dGluZyxcbiAgcmVhZERldmljZVNldHRpbmcsXG4gIHdpdGhTb2Z0S2V5Ym9hcmRFbmFibGVkLFxuICB3cml0ZURldmljZVNldHRpbmdcbn0gZnJvbSAnLi9kZXZpY2Utc2V0dGluZ3MuY2pzJztcbmV4cG9ydCB0eXBlIHtcbiAgRWxlY3Ryb25Db21wYXRpYmlsaXR5LFxuICBFbGVjdHJvbkNvbXBhdGliaWxpdHlUaWVyLFxuICBSZXNvbHZlRWxlY3Ryb25Db21wYXRpYmlsaXR5UGFyYW1zXG59IGZyb20gJy4vZWxlY3Ryb24tY29tcGF0aWJpbGl0eS5janMnO1xuZXhwb3J0IHsgcmVzb2x2ZUVsZWN0cm9uQ29tcGF0aWJpbGl0eSB9IGZyb20gJy4vZWxlY3Ryb24tY29tcGF0aWJpbGl0eS5janMnO1xuZXhwb3J0IHR5cGUge1xuICBFbXVsYXRvckRldmljZUNhbmRpZGF0ZSxcbiAgU2VsZWN0RW11bGF0b3JEZXZpY2VJZFBhcmFtc1xufSBmcm9tICcuL2VtdWxhdG9yLWRldmljZS1pZC5janMnO1xuZXhwb3J0IHsgc2VsZWN0RW11bGF0b3JEZXZpY2VJZCB9IGZyb20gJy4vZW11bGF0b3ItZGV2aWNlLWlkLmNqcyc7XG5leHBvcnQgdHlwZSB7XG4gIENsaWNrRWxlbWVudFBhcmFtcyxcbiAgQ2xpY2tNb3VzZVBhcmFtcyxcbiAgQ29tbW9uQXJndW1lbnRzLFxuICBDcmVhdGVOb3RlUGFyYW1zLFxuICBFdmFsSW5PYnNpZGlhblBhcmFtcyxcbiAgR2VuZXJpY09iamVjdCxcbiAgSG92ZXJFbGVtZW50UGFyYW1zLFxuICBMaWIsXG4gIE1vdXNlQnV0dG9uLFxuICBNb3ZlTW91c2VQYXJhbXMsXG4gIE9wZW5TZXR0aW5nc1RhYlBhcmFtcyxcbiAgUHJlc3NLZXlQYXJhbXMsXG4gIFR5cGVJbnRvRWRpdG9yUGFyYW1zLFxuICBVbmhvdmVyRWxlbWVudFBhcmFtcyxcbiAgV2FpdFVudGlsUGFyYW1zXG59IGZyb20gJy4vZXZhbC1pbi1vYnNpZGlhbi5janMnO1xuZXhwb3J0IHsgZXZhbEluT2JzaWRpYW4gfSBmcm9tICcuL2V2YWwtaW4tb2JzaWRpYW4uY2pzJztcbmV4cG9ydCB0eXBlIHtcbiAgQ29tcHV0ZUZpdFRvQ2FudmFzUGFyYW1zLFxuICBGaXRTY3JlZW5zaG90VG9DYW52YXNPcHRpb25zLFxuICBGaXRUb0NhbnZhc0dlb21ldHJ5XG59IGZyb20gJy4vZml0LXNjcmVlbnNob3QuY2pzJztcbmV4cG9ydCB7XG4gIGNvbXB1dGVGaXRUb0NhbnZhcyxcbiAgZml0U2NyZWVuc2hvdFRvQ2FudmFzXG59IGZyb20gJy4vZml0LXNjcmVlbnNob3QuY2pzJztcbmV4cG9ydCB0eXBlIHsgSW5jb21wYXRpYmxlSW5zdGFsbGVyVmVyc2lvbkVycm9yQ29uc3RydWN0b3JQYXJhbXMgfSBmcm9tICcuL2luY29tcGF0aWJsZS1pbnN0YWxsZXItdmVyc2lvbi1lcnJvci5janMnO1xuZXhwb3J0IHsgSW5jb21wYXRpYmxlSW5zdGFsbGVyVmVyc2lvbkVycm9yIH0gZnJvbSAnLi9pbmNvbXBhdGlibGUtaW5zdGFsbGVyLXZlcnNpb24tZXJyb3IuY2pzJztcbmV4cG9ydCB0eXBlIHtcbiAgSW5zdGFsbGVyQ29tcGF0aWJpbGl0eSxcbiAgSW5zdGFsbGVyQ29tcGF0aWJpbGl0eVRpZXIsXG4gIFJlc29sdmVJbnN0YWxsZXJDb21wYXRpYmlsaXR5UGFyYW1zXG59IGZyb20gJy4vaW5zdGFsbGVyLWNvbXBhdGliaWxpdHkuY2pzJztcbmV4cG9ydCB7IHJlc29sdmVJbnN0YWxsZXJDb21wYXRpYmlsaXR5IH0gZnJvbSAnLi9pbnN0YWxsZXItY29tcGF0aWJpbGl0eS5janMnO1xuZXhwb3J0IHR5cGUgeyBJbnRlZ3JhdGlvblNldHVwRmFpbGVkRXJyb3JDb25zdHJ1Y3RvclBhcmFtcyB9IGZyb20gJy4vaW50ZWdyYXRpb24tc2V0dXAtZmFpbGVkLWVycm9yLmNqcyc7XG5leHBvcnQgeyBJbnRlZ3JhdGlvblNldHVwRmFpbGVkRXJyb3IgfSBmcm9tICcuL2ludGVncmF0aW9uLXNldHVwLWZhaWxlZC1lcnJvci5janMnO1xuZXhwb3J0IHR5cGUge1xuICBDb21wdXRlTGFiZWxCYW5kUGFyYW1zLFxuICBMYWJlbEJhbmRHZW9tZXRyeSxcbiAgTGFiZWxTY3JlZW5zaG90T3B0aW9uc1xufSBmcm9tICcuL2xhYmVsLXNjcmVlbnNob3QuY2pzJztcbmV4cG9ydCB7XG4gIGJ1aWxkTGFiZWxTdmcsXG4gIGNvbXB1dGVMYWJlbEJhbmQsXG4gIGVzY2FwZVN2Z1RleHQsXG4gIGxhYmVsU2NyZWVuc2hvdFxufSBmcm9tICcuL2xhYmVsLXNjcmVlbnNob3QuY2pzJztcbmV4cG9ydCB0eXBlIHsgTGliUmVzb2x2ZXIgfSBmcm9tICcuL2xpYi1yZWdpc3RyeS5janMnO1xuZXhwb3J0IHsgcmVnaXN0ZXJMaWJSZXNvbHZlciB9IGZyb20gJy4vbGliLXJlZ2lzdHJ5LmNqcyc7XG5leHBvcnQgdHlwZSB7XG4gIE9ic2lkaWFuUnVudGltZVZlcnNpb25zLFxuICBPYnNpZGlhblZlcnNpb25DaGFuZ2Vsb2dVcmxzLFxuICBPYnNpZGlhblZlcnNpb25Eb3dubG9hZHMsXG4gIE9ic2lkaWFuVmVyc2lvbk1ldGFkYXRhXG59IGZyb20gJy4vb2JzaWRpYW4tbWV0YWRhdGEuY2pzJztcbmV4cG9ydCB7IGdldFZlcnNpb25NZXRhZGF0YSB9IGZyb20gJy4vb2JzaWRpYW4tbWV0YWRhdGEuY2pzJztcbmV4cG9ydCB7XG4gIENBVEFMWVNUX0xBVEVTVCxcbiAgUFVCTElDX0xBVEVTVFxufSBmcm9tICcuL29ic2lkaWFuLXZlcnNpb24uY2pzJztcbmV4cG9ydCB0eXBlIHsgT3Blbk9ic2lkaWFuU2V0dGluZ3NUYWJPcHRpb25zIH0gZnJvbSAnLi9vcGVuLW9ic2lkaWFuLXNldHRpbmdzLXRhYi5janMnO1xuZXhwb3J0IHsgb3Blbk9ic2lkaWFuU2V0dGluZ3NUYWIgfSBmcm9tICcuL29wZW4tb2JzaWRpYW4tc2V0dGluZ3MtdGFiLmNqcyc7XG5leHBvcnQgdHlwZSB7IE93bmVkSW5zdGFuY2VFeGl0ZWRFcnJvckNvbnN0cnVjdG9yUGFyYW1zIH0gZnJvbSAnLi9vd25lZC1pbnN0YW5jZS1leGl0ZWQtZXJyb3IuY2pzJztcbmV4cG9ydCB7IE93bmVkSW5zdGFuY2VFeGl0ZWRFcnJvciB9IGZyb20gJy4vb3duZWQtaW5zdGFuY2UtZXhpdGVkLWVycm9yLmNqcyc7XG5leHBvcnQgdHlwZSB7IFBvbGxJbk9ic2lkaWFuUGFyYW1zIH0gZnJvbSAnLi9wb2xsLWluLW9ic2lkaWFuLmNqcyc7XG5leHBvcnQgeyBwb2xsSW5PYnNpZGlhbiB9IGZyb20gJy4vcG9sbC1pbi1vYnNpZGlhbi5janMnO1xuZXhwb3J0IHsgUmVuZGVyZXJGYWlsZWRUb0luaXRpYWxpemVFcnJvciB9IGZyb20gJy4vcmVuZGVyZXItZmFpbGVkLXRvLWluaXRpYWxpemUtZXJyb3IuY2pzJztcbmV4cG9ydCB0eXBlIHsgUmVzb2x2ZUVtdWxhdG9yRGV2aWNlSWRQYXJhbXMgfSBmcm9tICcuL3Jlc29sdmUtZW11bGF0b3ItZGV2aWNlLWlkLmNqcyc7XG5leHBvcnQgeyByZXNvbHZlRW11bGF0b3JEZXZpY2VJZCB9IGZyb20gJy4vcmVzb2x2ZS1lbXVsYXRvci1kZXZpY2UtaWQuY2pzJztcbmV4cG9ydCB0eXBlIHsgUnVuT2JzaWRpYW5WZXJzaW9uTWF0cml4UGFyYW1zIH0gZnJvbSAnLi9ydW4tdmVyc2lvbi1tYXRyaXguY2pzJztcbmV4cG9ydCB7IHJ1bk9ic2lkaWFuVmVyc2lvbk1hdHJpeCB9IGZyb20gJy4vcnVuLXZlcnNpb24tbWF0cml4LmNqcyc7XG5leHBvcnQgdHlwZSB7IFNpbGVudEFzYXJGYWxsYmFja0Vycm9yQ29uc3RydWN0b3JQYXJhbXMgfSBmcm9tICcuL3NpbGVudC1hc2FyLWZhbGxiYWNrLWVycm9yLmNqcyc7XG5leHBvcnQgeyBTaWxlbnRBc2FyRmFsbGJhY2tFcnJvciB9IGZyb20gJy4vc2lsZW50LWFzYXItZmFsbGJhY2stZXJyb3IuY2pzJztcbmV4cG9ydCB0eXBlIHtcbiAgQnVpbGRTb2Z0S2V5Ym9hcmREaWFnbm9zdGljTWVzc2FnZVBhcmFtcyxcbiAgQ2hlY2tJc1NvZnRLZXlib2FyZFVwUGFyYW1zLFxuICBFbGVtZW50UmVjdCxcbiAgUmVzb2x2ZVNvZnRLZXlib2FyZFRhcFBvaW50c1BhcmFtcyxcbiAgU29mdEtleWJvYXJkVGFwUG9pbnQsXG4gIFNvZnRLZXlib2FyZFZpZXdwb3J0U25hcHNob3Rcbn0gZnJvbSAnLi9zb2Z0LWtleWJvYXJkLWdlb21ldHJ5LmNqcyc7XG5leHBvcnQge1xuICBidWlsZFNvZnRLZXlib2FyZERpYWdub3N0aWNNZXNzYWdlLFxuICBjaGVja0lzU29mdEtleWJvYXJkVXAsXG4gIERFRkFVTFRfTUlOSU1VTV9LRVlCT0FSRF9IRUlHSFRfSU5fUElYRUxTLFxuICBwYXJzZUlucHV0TWV0aG9kU3RhdGUsXG4gIHJlc29sdmVTb2Z0S2V5Ym9hcmRUYXBQb2ludHNcbn0gZnJvbSAnLi9zb2Z0LWtleWJvYXJkLWdlb21ldHJ5LmNqcyc7XG5leHBvcnQgdHlwZSB7XG4gIFJhaXNlU29mdEtleWJvYXJkUGFyYW1zLFxuICBUYXBEZXZpY2VQYXJhbXNcbn0gZnJvbSAnLi9zb2Z0LWtleWJvYXJkLmNqcyc7XG5leHBvcnQge1xuICByYWlzZVNvZnRLZXlib2FyZCxcbiAgdGFwRGV2aWNlXG59IGZyb20gJy4vc29mdC1rZXlib2FyZC5janMnO1xuZXhwb3J0IHR5cGUge1xuICBQb3B1bGF0ZUZpbGVDb250ZW50LFxuICBQb3B1bGF0ZUZpbGVzUGFyYW1zLFxuICBUZW1wb3JhcnlWYXVsdE9wdGlvbnNcbn0gZnJvbSAnLi90ZW1wb3JhcnktdmF1bHQuY2pzJztcbmV4cG9ydCB7IFRlbXBvcmFyeVZhdWx0IH0gZnJvbSAnLi90ZW1wb3JhcnktdmF1bHQuY2pzJztcbmV4cG9ydCB0eXBlIHtcbiAgQXBwaXVtU2Vzc2lvbkluZm8sXG4gIEFwcGl1bVRyYW5zcG9ydENvbmZpZ1xufSBmcm9tICcuL3RyYW5zcG9ydC1hcHBpdW0uY2pzJztcbmV4cG9ydCB7IEFwcGl1bVRyYW5zcG9ydCB9IGZyb20gJy4vdHJhbnNwb3J0LWFwcGl1bS5janMnO1xuZXhwb3J0IHR5cGUge1xuICBEZXNrdG9wQ2RwVHJhbnNwb3J0Q29uZmlnLFxuICBPd25lZEluc3RhbmNlQXNhcixcbiAgT3duZWRJbnN0YW5jZUNvbmZpZyxcbiAgT3duZWRJbnN0YW5jZUVuZHBvaW50XG59IGZyb20gJy4vdHJhbnNwb3J0LWRlc2t0b3AtY2RwLmNqcyc7XG5leHBvcnQgeyBEZXNrdG9wQ2RwVHJhbnNwb3J0IH0gZnJvbSAnLi90cmFuc3BvcnQtZGVza3RvcC1jZHAuY2pzJztcbmV4cG9ydCB7IGNyZWF0ZVRyYW5zcG9ydEZyb21PcHRpb25zIH0gZnJvbSAnLi90cmFuc3BvcnQtZmFjdG9yeS5janMnO1xuZXhwb3J0IHR5cGUge1xuICBPYnNpZGlhbkFuZHJvaWRBcHBpdW1UcmFuc3BvcnRPcHRpb25zLFxuICBPYnNpZGlhbkNkcFRyYW5zcG9ydE9wdGlvbnMsXG4gIE9ic2lkaWFuVHJhbnNwb3J0T3B0aW9uc1xufSBmcm9tICcuL3RyYW5zcG9ydC1vcHRpb25zLmNqcyc7XG5leHBvcnQgeyBjaGVja0lzTW9iaWxlVHJhbnNwb3J0IH0gZnJvbSAnLi90cmFuc3BvcnQtb3B0aW9ucy5janMnO1xuZXhwb3J0IHR5cGUge1xuICBDb25zb2xlQ2FwdHVyZUhhbmRsZSxcbiAgT2JzaWRpYW5UcmFuc3BvcnQsXG4gIFRyYW5zcG9ydEV2YWxPcHRpb25zXG59IGZyb20gJy4vdHJhbnNwb3J0LmNqcyc7XG5leHBvcnQge1xuICByZWdpc3RlclZhdWx0LFxuICB1bnJlZ2lzdGVyVmF1bHRcbn0gZnJvbSAnLi92YXVsdC1yZWdpc3RyeS5janMnO1xuZXhwb3J0IHR5cGUgeyBPYnNpZGlhblZlcnNpb25NYXRyaXhFbnRyeSB9IGZyb20gJy4vdmVyc2lvbi1tYXRyaXguY2pzJztcbmV4cG9ydCB7IERFRkFVTFRfT0JTSURJQU5fVkVSU0lPTl9TUEVDUyB9IGZyb20gJy4vdmVyc2lvbi1tYXRyaXguY2pzJztcbiJdLAogICJtYXBwaW5ncyI6ICI7Ozs7Ozs7Ozs7Ozs7Ozs7OztBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQU9BLGlCQUlPO0FBTVAscUNBQW9DO0FBRXBDLHlDQUEwQztBQUsxQyxnQ0FLTztBQUVQLDZDQUE2QztBQUM3Qyw4QkFHTztBQUtQLDRCQUE2QjtBQUs3Qix3QkFBMEI7QUFNMUIsOEJBSU87QUFNUCxrQ0FHTztBQU1QLGlDQUdPO0FBRVAsNkJBQWtDO0FBQ2xDLDRDQUEyQztBQUUzQywrQkFBd0M7QUFNeEMsb0NBR087QUFFUCxxQ0FJTztBQU1QLDZCQUtPO0FBTVAsb0NBQTZDO0FBSzdDLGdDQUF1QztBQWtCdkMsOEJBQStCO0FBTS9CLDRCQUdPO0FBRVAsa0RBQWtEO0FBTWxELHFDQUE4QztBQUU5Qyw0Q0FBNEM7QUFNNUMsOEJBS087QUFFUCwwQkFBb0M7QUFPcEMsK0JBQW1DO0FBQ25DLDhCQUdPO0FBRVAsd0NBQXdDO0FBRXhDLHlDQUF5QztBQUV6Qyw4QkFBK0I7QUFDL0IsaURBQWdEO0FBRWhELHdDQUF3QztBQUV4QyxnQ0FBeUM7QUFFekMsd0NBQXdDO0FBU3hDLG9DQU1PO0FBS1AsMkJBR087QUFNUCw2QkFBK0I7QUFLL0IsOEJBQWdDO0FBT2hDLG1DQUFvQztBQUNwQywrQkFBMkM7QUFNM0MsK0JBQXVDO0FBTXZDLDRCQUdPO0FBRVAsNEJBQStDOyIsCiAgIm5hbWVzIjogW10KfQo=
@@ -3,6 +3,8 @@
3
3
  *
4
4
  * Contains the entry point for the integration testing module.
5
5
  */
6
+ export type { RunAdbParams } from './adb.cjs';
7
+ export { runAdbBinary, runAdbText, runAdbTextWithoutDevice } from './adb.cjs';
6
8
  export type { AsarFallback, AsarFallbackTier, ResolveAsarFallbackParams } from './asar-fallback-detection.cjs';
7
9
  export { resolveAsarFallback } from './asar-fallback-detection.cjs';
8
10
  export type { CaptureObsidianScreenshotOptions } from './capture-obsidian-screenshot.cjs';
@@ -25,8 +27,18 @@ export { buildDemoVaultPopulate, resolveMissingInjectedPlugins } from './demo-va
25
27
  export type { ReadDemoVaultTreeParams } from './demo-vault-tree.cjs';
26
28
  export { readDemoVaultTree } from './demo-vault-tree.cjs';
27
29
  export { DesktopOnlyPluginSkipError } from './desktop-only-plugin-skip-error.cjs';
30
+ export type { CaptureDeviceScreenshotParams } from './device-screenshot.cjs';
31
+ export { captureDeviceScreenshot } from './device-screenshot.cjs';
32
+ export type { DeviceSettingRestore, DeviceSettingRestoreDelete, DeviceSettingRestoreWrite } from './device-setting-restore.cjs';
33
+ export { DeviceSettingRestoreKind, resolveDeviceSettingRestore } from './device-setting-restore.cjs';
34
+ export type { BuildDeviceSettingsCommandArgumentsParams } from './device-settings-command.cjs';
35
+ export { buildDeviceSettingsCommandArguments, DeviceSettingNamespace, DeviceSettingVerb } from './device-settings-command.cjs';
36
+ export type { DeviceSettingParams, WithSoftKeyboardEnabledParams, WriteDeviceSettingParams } from './device-settings.cjs';
37
+ export { deleteDeviceSetting, readDeviceSetting, withSoftKeyboardEnabled, writeDeviceSetting } from './device-settings.cjs';
28
38
  export type { ElectronCompatibility, ElectronCompatibilityTier, ResolveElectronCompatibilityParams } from './electron-compatibility.cjs';
29
39
  export { resolveElectronCompatibility } from './electron-compatibility.cjs';
40
+ export type { EmulatorDeviceCandidate, SelectEmulatorDeviceIdParams } from './emulator-device-id.cjs';
41
+ export { selectEmulatorDeviceId } from './emulator-device-id.cjs';
30
42
  export type { ClickElementParams, ClickMouseParams, CommonArguments, CreateNoteParams, EvalInObsidianParams, GenericObject, HoverElementParams, Lib, MouseButton, MoveMouseParams, OpenSettingsTabParams, PressKeyParams, TypeIntoEditorParams, UnhoverElementParams, WaitUntilParams } from './eval-in-obsidian.cjs';
31
43
  export { evalInObsidian } from './eval-in-obsidian.cjs';
32
44
  export type { ComputeFitToCanvasParams, FitScreenshotToCanvasOptions, FitToCanvasGeometry } from './fit-screenshot.cjs';
@@ -51,10 +63,16 @@ export { OwnedInstanceExitedError } from './owned-instance-exited-error.cjs';
51
63
  export type { PollInObsidianParams } from './poll-in-obsidian.cjs';
52
64
  export { pollInObsidian } from './poll-in-obsidian.cjs';
53
65
  export { RendererFailedToInitializeError } from './renderer-failed-to-initialize-error.cjs';
66
+ export type { ResolveEmulatorDeviceIdParams } from './resolve-emulator-device-id.cjs';
67
+ export { resolveEmulatorDeviceId } from './resolve-emulator-device-id.cjs';
54
68
  export type { RunObsidianVersionMatrixParams } from './run-version-matrix.cjs';
55
69
  export { runObsidianVersionMatrix } from './run-version-matrix.cjs';
56
70
  export type { SilentAsarFallbackErrorConstructorParams } from './silent-asar-fallback-error.cjs';
57
71
  export { SilentAsarFallbackError } from './silent-asar-fallback-error.cjs';
72
+ export type { BuildSoftKeyboardDiagnosticMessageParams, CheckIsSoftKeyboardUpParams, ElementRect, ResolveSoftKeyboardTapPointsParams, SoftKeyboardTapPoint, SoftKeyboardViewportSnapshot } from './soft-keyboard-geometry.cjs';
73
+ export { buildSoftKeyboardDiagnosticMessage, checkIsSoftKeyboardUp, DEFAULT_MINIMUM_KEYBOARD_HEIGHT_IN_PIXELS, parseInputMethodState, resolveSoftKeyboardTapPoints } from './soft-keyboard-geometry.cjs';
74
+ export type { RaiseSoftKeyboardParams, TapDeviceParams } from './soft-keyboard.cjs';
75
+ export { raiseSoftKeyboard, tapDevice } from './soft-keyboard.cjs';
58
76
  export type { PopulateFileContent, PopulateFilesParams, TemporaryVaultOptions } from './temporary-vault.cjs';
59
77
  export { TemporaryVault } from './temporary-vault.cjs';
60
78
  export type { AppiumSessionInfo, AppiumTransportConfig } from './transport-appium.cjs';
@@ -21,7 +21,7 @@ __export(library_exports, {
21
21
  LIBRARY_VERSION: () => LIBRARY_VERSION
22
22
  });
23
23
  module.exports = __toCommonJS(library_exports);
24
- const LIBRARY_VERSION = false ? "dev" : "12.1.0";
24
+ const LIBRARY_VERSION = false ? "dev" : "12.1.1";
25
25
  // Annotate the CommonJS export names for ESM import in node:
26
26
  0 && (module.exports = {
27
27
  LIBRARY_VERSION
@@ -0,0 +1,54 @@
1
+ "use strict";
2
+ var __defProp = Object.defineProperty;
3
+ var __getOwnPropDesc = Object.getOwnPropertyDescriptor;
4
+ var __getOwnPropNames = Object.getOwnPropertyNames;
5
+ var __hasOwnProp = Object.prototype.hasOwnProperty;
6
+ var __export = (target, all) => {
7
+ for (var name in all)
8
+ __defProp(target, name, { get: all[name], enumerable: true });
9
+ };
10
+ var __copyProps = (to, from, except, desc) => {
11
+ if (from && typeof from === "object" || typeof from === "function") {
12
+ for (let key of __getOwnPropNames(from))
13
+ if (!__hasOwnProp.call(to, key) && key !== except)
14
+ __defProp(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable });
15
+ }
16
+ return to;
17
+ };
18
+ var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod);
19
+ var resolve_emulator_device_id_exports = {};
20
+ __export(resolve_emulator_device_id_exports, {
21
+ resolveEmulatorDeviceId: () => resolveEmulatorDeviceId
22
+ });
23
+ module.exports = __toCommonJS(resolve_emulator_device_id_exports);
24
+ var import_adb_device_list = require("./adb-device-list.cjs");
25
+ var import_adb = require("./adb.cjs");
26
+ var import_emulator_device_id = require("./emulator-device-id.cjs");
27
+ const EMULATOR_DEVICE_ID_PREFIX = "emulator-";
28
+ async function resolveEmulatorDeviceId(params) {
29
+ const candidates = await listEmulatorDeviceCandidates();
30
+ const deviceId = (0, import_emulator_device_id.selectEmulatorDeviceId)({ avdName: params.avdName, candidates });
31
+ if (!deviceId) {
32
+ const listed = candidates.map((candidate) => `${candidate.deviceId} (${candidate.avdName})`).join(", ") || "none";
33
+ throw new Error(
34
+ `resolveEmulatorDeviceId: no running emulator for AVD "${params.avdName}". Running emulators: ${listed}. Start it, or run this project once to have the harness start it.`
35
+ );
36
+ }
37
+ return deviceId;
38
+ }
39
+ async function listEmulatorDeviceCandidates() {
40
+ const devicesOutput = await (0, import_adb.runAdbTextWithoutDevice)(["devices"]);
41
+ const deviceIds = (0, import_adb_device_list.listOnlineDeviceIds)(devicesOutput).filter((deviceId) => deviceId.startsWith(EMULATOR_DEVICE_ID_PREFIX));
42
+ const candidates = [];
43
+ for (const deviceId of deviceIds) {
44
+ const output = await (0, import_adb.runAdbText)({ commandArguments: ["emu", "avd", "name"], deviceId });
45
+ const avdName = output.split("\n", 1)[0]?.trim() ?? "";
46
+ candidates.push({ avdName, deviceId });
47
+ }
48
+ return candidates;
49
+ }
50
+ // Annotate the CommonJS export names for ESM import in node:
51
+ 0 && (module.exports = {
52
+ resolveEmulatorDeviceId
53
+ });
54
+ //# sourceMappingURL=data:application/json;base64,ewogICJ2ZXJzaW9uIjogMywKICAic291cmNlcyI6IFsiLi4vLi4vLi4vc3JjL3Jlc29sdmUtZW11bGF0b3ItZGV2aWNlLWlkLnRzIl0sCiAgInNvdXJjZXNDb250ZW50IjogWyIvKipcbiAqIEBmaWxlXG4gKlxuICogQXNrcyB0aGUgcnVubmluZyBlbXVsYXRvcnMgd2hpY2ggQVZEIGVhY2ggd2FzIHN0YXJ0ZWQgZnJvbSwgYW5kIHJlc29sdmVzIG9uZVxuICogYnkgbmFtZSB0aHJvdWdoIHtAbGluayAuL2VtdWxhdG9yLWRldmljZS1pZC50c30ncyBzZWxlY3Rpb24uXG4gKlxuICogRXZlcnkgZnVuY3Rpb24gaGVyZSBzaGVsbHMgb3V0LCBzbyB0aGUgd2hvbGUgbW9kdWxlIGlzIGludGVncmF0aW9uLXRpbWUgY29kZVxuICogXHUyMDE0IHdoaWNoIGlzIGV4YWN0bHkgd2h5IHRoZSBzZWxlY3Rpb24gaXQgZGVsZWdhdGVzIHRvIGxpdmVzIGluIGl0cyBvd24gbW9kdWxlXG4gKiBhbmQgc3RheXMgdW5pdC10ZXN0ZWQuXG4gKi9cblxuLyogdjggaWdub3JlIHN0YXJ0IC0tIEludGVncmF0aW9uLXRpbWUgY29kZSAoc2hlbGxzIG91dCB0byBhIHJlYWwgZGV2aWNlKSBjb3ZlcmVkIGJ5IGludGVncmF0aW9uIHRlc3RzLCBub3QgdW5pdCB0ZXN0cy4gKi9cblxuaW1wb3J0IHR5cGUgeyBFbXVsYXRvckRldmljZUNhbmRpZGF0ZSB9IGZyb20gJy4vZW11bGF0b3ItZGV2aWNlLWlkLmNqcyc7XG5cbmltcG9ydCB7IGxpc3RPbmxpbmVEZXZpY2VJZHMgfSBmcm9tICcuL2FkYi1kZXZpY2UtbGlzdC5janMnO1xuaW1wb3J0IHtcbiAgcnVuQWRiVGV4dCxcbiAgcnVuQWRiVGV4dFdpdGhvdXREZXZpY2Vcbn0gZnJvbSAnLi9hZGIuY2pzJztcbmltcG9ydCB7IHNlbGVjdEVtdWxhdG9yRGV2aWNlSWQgfSBmcm9tICcuL2VtdWxhdG9yLWRldmljZS1pZC5janMnO1xuXG4vKipcbiAqIFBhcmFtZXRlcnMgZm9yIHtAbGluayByZXNvbHZlRW11bGF0b3JEZXZpY2VJZH0uXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgUmVzb2x2ZUVtdWxhdG9yRGV2aWNlSWRQYXJhbXMge1xuICAvKipcbiAgICogVGhlIEFWRCBuYW1lIHRvIG1hdGNoLCBlLmcuIGBvYnNpZGlhbl9zY3JlZW5zaG90c2AuXG4gICAqL1xuICByZWFkb25seSBhdmROYW1lOiBzdHJpbmc7XG59XG5cbi8qKlxuICogVGhlIHByZWZpeCBgYWRiIGRldmljZXNgIGdpdmVzIGFuIGVtdWxhdG9yLCBhcyBvcHBvc2VkIHRvIGEgcGh5c2ljYWxseSBhdHRhY2hlZCBkZXZpY2UuXG4gKi9cbmNvbnN0IEVNVUxBVE9SX0RFVklDRV9JRF9QUkVGSVggPSAnZW11bGF0b3ItJztcblxuLyoqXG4gKiBGaW5kcyB0aGUgcnVubmluZyBlbXVsYXRvciB3aG9zZSBBVkQgaXMgdGhlIG5hbWVkIG9uZS5cbiAqXG4gKiBAcGFyYW0gcGFyYW1zIC0gVGhlIEFWRCB0byBtYXRjaC5cbiAqIEByZXR1cm5zIEEge0BsaW5rIFByb21pc2V9IHRoYXQgcmVzb2x2ZXMgdG8gdGhlIGRldmljZSBVRElEIHRvIGFkZHJlc3MgaXQgYnkuXG4gKiBAdGhyb3dzIEVycm9yIGlmIG5vIHJ1bm5pbmcgZW11bGF0b3Igd2FzIHN0YXJ0ZWQgZnJvbSB0aGF0IEFWRC4gVGhlIG1lc3NhZ2UgbGlzdHMgd2hhdCBJUyBydW5uaW5nLCBzaW5jZVxuICogICBcInRoZSB3cm9uZyBlbXVsYXRvciBpcyB1cFwiIGFuZCBcIm5vIGVtdWxhdG9yIGlzIHVwXCIgbmVlZCBkaWZmZXJlbnQgYW5zd2Vycy5cbiAqL1xuZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIHJlc29sdmVFbXVsYXRvckRldmljZUlkKHBhcmFtczogUmVzb2x2ZUVtdWxhdG9yRGV2aWNlSWRQYXJhbXMpOiBQcm9taXNlPHN0cmluZz4ge1xuICBjb25zdCBjYW5kaWRhdGVzID0gYXdhaXQgbGlzdEVtdWxhdG9yRGV2aWNlQ2FuZGlkYXRlcygpO1xuICBjb25zdCBkZXZpY2VJZCA9IHNlbGVjdEVtdWxhdG9yRGV2aWNlSWQoeyBhdmROYW1lOiBwYXJhbXMuYXZkTmFtZSwgY2FuZGlkYXRlcyB9KTtcblxuICBpZiAoIWRldmljZUlkKSB7XG4gICAgY29uc3QgbGlzdGVkID0gY2FuZGlkYXRlcy5tYXAoKGNhbmRpZGF0ZSkgPT4gYCR7Y2FuZGlkYXRlLmRldmljZUlkfSAoJHtjYW5kaWRhdGUuYXZkTmFtZX0pYCkuam9pbignLCAnKSB8fCAnbm9uZSc7XG4gICAgdGhyb3cgbmV3IEVycm9yKFxuICAgICAgYHJlc29sdmVFbXVsYXRvckRldmljZUlkOiBubyBydW5uaW5nIGVtdWxhdG9yIGZvciBBVkQgXCIke3BhcmFtcy5hdmROYW1lfVwiLiBSdW5uaW5nIGVtdWxhdG9yczogJHtsaXN0ZWR9LiBgXG4gICAgICAgICsgJ1N0YXJ0IGl0LCBvciBydW4gdGhpcyBwcm9qZWN0IG9uY2UgdG8gaGF2ZSB0aGUgaGFybmVzcyBzdGFydCBpdC4nXG4gICAgKTtcbiAgfVxuXG4gIHJldHVybiBkZXZpY2VJZDtcbn1cblxuLyoqXG4gKiBBc2tzIGV2ZXJ5IG9ubGluZSBlbXVsYXRvciB3aGljaCBBVkQgaXQgd2FzIHN0YXJ0ZWQgZnJvbS5cbiAqXG4gKiBAcmV0dXJucyBBIHtAbGluayBQcm9taXNlfSB0aGF0IHJlc29sdmVzIHRvIG9uZSBlbnRyeSBwZXIgcnVubmluZyBlbXVsYXRvci5cbiAqL1xuYXN5bmMgZnVuY3Rpb24gbGlzdEVtdWxhdG9yRGV2aWNlQ2FuZGlkYXRlcygpOiBQcm9taXNlPEVtdWxhdG9yRGV2aWNlQ2FuZGlkYXRlW10+IHtcbiAgY29uc3QgZGV2aWNlc091dHB1dCA9IGF3YWl0IHJ1bkFkYlRleHRXaXRob3V0RGV2aWNlKFsnZGV2aWNlcyddKTtcbiAgY29uc3QgZGV2aWNlSWRzID0gbGlzdE9ubGluZURldmljZUlkcyhkZXZpY2VzT3V0cHV0KS5maWx0ZXIoKGRldmljZUlkKSA9PiBkZXZpY2VJZC5zdGFydHNXaXRoKEVNVUxBVE9SX0RFVklDRV9JRF9QUkVGSVgpKTtcblxuICBjb25zdCBjYW5kaWRhdGVzOiBFbXVsYXRvckRldmljZUNhbmRpZGF0ZVtdID0gW107XG4gIGZvciAoY29uc3QgZGV2aWNlSWQgb2YgZGV2aWNlSWRzKSB7XG4gICAgLy8gYGFkYiBlbXUgYXZkIG5hbWVgIGFuc3dlcnMgd2l0aCB0aGUgbmFtZSBhbmQgdGhlbiBgT0tgLCBlYWNoIG9uIGl0cyBvd24gbGluZS5cbiAgICBjb25zdCBvdXRwdXQgPSBhd2FpdCBydW5BZGJUZXh0KHsgY29tbWFuZEFyZ3VtZW50czogWydlbXUnLCAnYXZkJywgJ25hbWUnXSwgZGV2aWNlSWQgfSk7XG4gICAgY29uc3QgYXZkTmFtZSA9IG91dHB1dC5zcGxpdCgnXFxuJywgMSlbMF0/LnRyaW0oKSA/PyAnJztcbiAgICBjYW5kaWRhdGVzLnB1c2goeyBhdmROYW1lLCBkZXZpY2VJZCB9KTtcbiAgfVxuXG4gIHJldHVybiBjYW5kaWRhdGVzO1xufVxuXG4vKiB2OCBpZ25vcmUgc3RvcCAqL1xuIl0sCiAgIm1hcHBpbmdzIjogIjs7Ozs7Ozs7Ozs7Ozs7Ozs7O0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQWVBLDZCQUFvQztBQUNwQyxpQkFHTztBQUNQLGdDQUF1QztBQWV2QyxNQUFNLDRCQUE0QjtBQVVsQyxlQUFzQix3QkFBd0IsUUFBd0Q7QUFDcEcsUUFBTSxhQUFhLE1BQU0sNkJBQTZCO0FBQ3RELFFBQU0sZUFBVyxrREFBdUIsRUFBRSxTQUFTLE9BQU8sU0FBUyxXQUFXLENBQUM7QUFFL0UsTUFBSSxDQUFDLFVBQVU7QUFDYixVQUFNLFNBQVMsV0FBVyxJQUFJLENBQUMsY0FBYyxHQUFHLFVBQVUsUUFBUSxLQUFLLFVBQVUsT0FBTyxHQUFHLEVBQUUsS0FBSyxJQUFJLEtBQUs7QUFDM0csVUFBTSxJQUFJO0FBQUEsTUFDUix5REFBeUQsT0FBTyxPQUFPLHlCQUF5QixNQUFNO0FBQUEsSUFFeEc7QUFBQSxFQUNGO0FBRUEsU0FBTztBQUNUO0FBT0EsZUFBZSwrQkFBbUU7QUFDaEYsUUFBTSxnQkFBZ0IsVUFBTSxvQ0FBd0IsQ0FBQyxTQUFTLENBQUM7QUFDL0QsUUFBTSxnQkFBWSw0Q0FBb0IsYUFBYSxFQUFFLE9BQU8sQ0FBQyxhQUFhLFNBQVMsV0FBVyx5QkFBeUIsQ0FBQztBQUV4SCxRQUFNLGFBQXdDLENBQUM7QUFDL0MsYUFBVyxZQUFZLFdBQVc7QUFFaEMsVUFBTSxTQUFTLFVBQU0sdUJBQVcsRUFBRSxrQkFBa0IsQ0FBQyxPQUFPLE9BQU8sTUFBTSxHQUFHLFNBQVMsQ0FBQztBQUN0RixVQUFNLFVBQVUsT0FBTyxNQUFNLE1BQU0sQ0FBQyxFQUFFLENBQUMsR0FBRyxLQUFLLEtBQUs7QUFDcEQsZUFBVyxLQUFLLEVBQUUsU0FBUyxTQUFTLENBQUM7QUFBQSxFQUN2QztBQUVBLFNBQU87QUFDVDsiLAogICJuYW1lcyI6IFtdCn0K
@@ -0,0 +1,28 @@
1
+ /**
2
+ * @file
3
+ *
4
+ * Asks the running emulators which AVD each was started from, and resolves one
5
+ * by name through {@link ./emulator-device-id.ts}'s selection.
6
+ *
7
+ * Every function here shells out, so the whole module is integration-time code
8
+ * — which is exactly why the selection it delegates to lives in its own module
9
+ * and stays unit-tested.
10
+ */
11
+ /**
12
+ * Parameters for {@link resolveEmulatorDeviceId}.
13
+ */
14
+ export interface ResolveEmulatorDeviceIdParams {
15
+ /**
16
+ * The AVD name to match, e.g. `obsidian_screenshots`.
17
+ */
18
+ readonly avdName: string;
19
+ }
20
+ /**
21
+ * Finds the running emulator whose AVD is the named one.
22
+ *
23
+ * @param params - The AVD to match.
24
+ * @returns A {@link Promise} that resolves to the device UDID to address it by.
25
+ * @throws Error if no running emulator was started from that AVD. The message lists what IS running, since
26
+ * "the wrong emulator is up" and "no emulator is up" need different answers.
27
+ */
28
+ export declare function resolveEmulatorDeviceId(params: ResolveEmulatorDeviceIdParams): Promise<string>;
@@ -0,0 +1,75 @@
1
+ "use strict";
2
+ var __defProp = Object.defineProperty;
3
+ var __getOwnPropDesc = Object.getOwnPropertyDescriptor;
4
+ var __getOwnPropNames = Object.getOwnPropertyNames;
5
+ var __hasOwnProp = Object.prototype.hasOwnProperty;
6
+ var __export = (target, all) => {
7
+ for (var name in all)
8
+ __defProp(target, name, { get: all[name], enumerable: true });
9
+ };
10
+ var __copyProps = (to, from, except, desc) => {
11
+ if (from && typeof from === "object" || typeof from === "function") {
12
+ for (let key of __getOwnPropNames(from))
13
+ if (!__hasOwnProp.call(to, key) && key !== except)
14
+ __defProp(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable });
15
+ }
16
+ return to;
17
+ };
18
+ var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod);
19
+ var soft_keyboard_geometry_exports = {};
20
+ __export(soft_keyboard_geometry_exports, {
21
+ DEFAULT_MINIMUM_KEYBOARD_HEIGHT_IN_PIXELS: () => DEFAULT_MINIMUM_KEYBOARD_HEIGHT_IN_PIXELS,
22
+ buildSoftKeyboardDiagnosticMessage: () => buildSoftKeyboardDiagnosticMessage,
23
+ checkIsSoftKeyboardUp: () => checkIsSoftKeyboardUp,
24
+ parseInputMethodState: () => parseInputMethodState,
25
+ resolveSoftKeyboardTapPoints: () => resolveSoftKeyboardTapPoints
26
+ });
27
+ module.exports = __toCommonJS(soft_keyboard_geometry_exports);
28
+ const DEFAULT_MINIMUM_KEYBOARD_HEIGHT_IN_PIXELS = 100;
29
+ const INPUT_METHOD_STATE_REG_EXP = /mInputShown|mIsInputViewShown|mHaveConnection|mShowRequested/;
30
+ const CENTER_DIVISOR = 2;
31
+ function buildSoftKeyboardDiagnosticMessage(params) {
32
+ const { inputRect } = params.snapshot;
33
+ const inputBottom = inputRect ? inputRect.top + inputRect.height : null;
34
+ return [
35
+ `raiseSoftKeyboard: the keyboard did not come up. Device framebuffer written to ${params.screenshotPath}.`,
36
+ `page: innerHeight=${String(params.snapshot.innerHeight)} inputBottom=${inputBottom === null ? "(no input)" : String(inputBottom)}`,
37
+ `device: ${params.inputMethodState || "(no input_method state reported)"}`
38
+ ].join("\n");
39
+ }
40
+ function checkIsSoftKeyboardUp(params) {
41
+ const { inputRect } = params.snapshot;
42
+ if (!inputRect) {
43
+ return false;
44
+ }
45
+ const minimumKeyboardHeightInPixels = params.minimumKeyboardHeightInPixels ?? DEFAULT_MINIMUM_KEYBOARD_HEIGHT_IN_PIXELS;
46
+ return params.snapshot.innerHeight - (inputRect.top + inputRect.height) > minimumKeyboardHeightInPixels;
47
+ }
48
+ function parseInputMethodState(dumpsysOutput) {
49
+ return dumpsysOutput.split("\n").filter((line) => INPUT_METHOD_STATE_REG_EXP.test(line)).map((line) => line.trim()).join(" | ");
50
+ }
51
+ function resolveSoftKeyboardTapPoints(params) {
52
+ const { devicePixelRatio, inputRect, screenY } = params.snapshot;
53
+ if (!inputRect) {
54
+ return [];
55
+ }
56
+ const xInPixels = Math.round((inputRect.left + inputRect.width / CENTER_DIVISOR) * devicePixelRatio);
57
+ const centerYInPixels = Math.round((inputRect.top + inputRect.height / CENTER_DIVISOR) * devicePixelRatio);
58
+ const topOffsetInPixels = Math.round(screenY * devicePixelRatio);
59
+ if (topOffsetInPixels === 0) {
60
+ return [{ xInPixels, yInPixels: centerYInPixels }];
61
+ }
62
+ return [
63
+ { xInPixels, yInPixels: centerYInPixels + topOffsetInPixels },
64
+ { xInPixels, yInPixels: centerYInPixels }
65
+ ];
66
+ }
67
+ // Annotate the CommonJS export names for ESM import in node:
68
+ 0 && (module.exports = {
69
+ DEFAULT_MINIMUM_KEYBOARD_HEIGHT_IN_PIXELS,
70
+ buildSoftKeyboardDiagnosticMessage,
71
+ checkIsSoftKeyboardUp,
72
+ parseInputMethodState,
73
+ resolveSoftKeyboardTapPoints
74
+ });
75
+ //# sourceMappingURL=data:application/json;base64,ewogICJ2ZXJzaW9uIjogMywKICAic291cmNlcyI6IFsiLi4vLi4vLi4vc3JjL3NvZnQta2V5Ym9hcmQtZ2VvbWV0cnkudHMiXSwKICAic291cmNlc0NvbnRlbnQiOiBbIi8qKlxuICogQGZpbGVcbiAqXG4gKiBEZWNpZGVzIHdoZXRoZXIgdGhlIEFuZHJvaWQgc29mdCBrZXlib2FyZCBpcyB1cCwgYW5kIHdoZXJlIHRvIHRvdWNoIHRvIHJhaXNlXG4gKiBpdCBcdTIwMTQgZnJvbSBnZW9tZXRyeSBhbG9uZS5cbiAqXG4gKiAqKk5vdGhpbmcgaW4gdGhlIHBhZ2UgcmVwb3J0cyB0aGUga2V5Ym9hcmQuKiogYGlubmVySGVpZ2h0YCwgYHZpc3VhbFZpZXdwb3J0YFxuICogYW5kIHRoZSBtb2RhbCBjb250YWluZXIgYWxsIHN0YXkgYXQgdGhlaXIgZnVsbCBoZWlnaHQgd2l0aCB0aGUga2V5Ym9hcmQgc2hvd25cbiAqIGFuZCBgZHVtcHN5cyBpbnB1dF9tZXRob2RgIHJlcG9ydGluZyBgbUlucHV0U2hvd249dHJ1ZWAgXHUyMDE0IE9ic2lkaWFuIE1vYmlsZSBrZWVwc1xuICogYSBmdWxsLXNjcmVlbiBjb250YWluZXIgYW5kIGxpZnRzIGl0cyBjb250ZW50cyBpbnNpZGUgaXQuIFRoZSBvbmx5IHNpZ25hbCBpc1xuICogdGhlIGZpZWxkJ3Mgb3duIG9mZnNldCBmcm9tIHRoZSBib3R0b20sIHdoaWNoIGlzIHdoeSB0aGUgZGV0ZWN0aW9uIGhlcmUgaXNcbiAqIGdlb21ldHJpYyByYXRoZXIgdGhhbiBhbiBBUEkgY2FsbC4gVHdvIHJ1bnMgZmFpbGVkIG9uIHRoYXQgYmVmb3JlIGEgZnJhbWVidWZmZXJcbiAqIGR1bXAgc2FpZCBzbywgd2hpY2ggaXMgYWxzbyB3aHkgdGhlIGRpYWdub3N0aWMgYmVsb3cgZXhpc3RzLlxuICpcbiAqIFB1cmUgYW5kIHVuaXQtdGVzdGVkOyB0aGUgdG91Y2hpbmcgYW5kIHRoZSBjYXB0dXJlIGxpdmUgaW4gYHNvZnQta2V5Ym9hcmRgLlxuICovXG5cbi8qKlxuICogUGFyYW1ldGVycyBmb3Ige0BsaW5rIGJ1aWxkU29mdEtleWJvYXJkRGlhZ25vc3RpY01lc3NhZ2V9LlxuICovXG5leHBvcnQgaW50ZXJmYWNlIEJ1aWxkU29mdEtleWJvYXJkRGlhZ25vc3RpY01lc3NhZ2VQYXJhbXMge1xuICAvKipcbiAgICogVGhlIGxpbmVzIG9mIGBkdW1wc3lzIGlucHV0X21ldGhvZGAgd29ydGggcmVhZGluZywgYXMge0BsaW5rIHBhcnNlSW5wdXRNZXRob2RTdGF0ZX0gcmV0dXJuZWQgdGhlbS5cbiAgICovXG4gIHJlYWRvbmx5IGlucHV0TWV0aG9kU3RhdGU6IHN0cmluZztcblxuICAvKipcbiAgICogV2hlcmUgdGhlIGRldmljZSBmcmFtZWJ1ZmZlciB3YXMgd3JpdHRlbiwgc28gdGhlIHJlYWRlciBjYW4gbG9vayBhdCB3aGF0IHRoZSBkZXZpY2Ugd2FzIHNob3dpbmcuXG4gICAqL1xuICByZWFkb25seSBzY3JlZW5zaG90UGF0aDogc3RyaW5nO1xuXG4gIC8qKlxuICAgKiBUaGUgZ2VvbWV0cnkgcmVhZCBhZnRlciB0aGUgbGFzdCB0b3VjaC5cbiAgICovXG4gIHJlYWRvbmx5IHNuYXBzaG90OiBTb2Z0S2V5Ym9hcmRWaWV3cG9ydFNuYXBzaG90O1xufVxuXG4vKipcbiAqIFBhcmFtZXRlcnMgZm9yIHtAbGluayBjaGVja0lzU29mdEtleWJvYXJkVXB9LlxuICovXG5leHBvcnQgaW50ZXJmYWNlIENoZWNrSXNTb2Z0S2V5Ym9hcmRVcFBhcmFtcyB7XG4gIC8qKlxuICAgKiBUaGUgbGVhc3QgYSByYWlzZWQga2V5Ym9hcmQgbGlmdHMgdGhlIGZpZWxkIGJ5LCBzbyBhIHN0cmF5IHJvdW5kaW5nIHBpeGVsIGlzIG5vdCByZWFkIGFzIG9uZS5cbiAgICpcbiAgICogQGRlZmF1bHQge0BsaW5rIERFRkFVTFRfTUlOSU1VTV9LRVlCT0FSRF9IRUlHSFRfSU5fUElYRUxTfVxuICAgKi9cbiAgcmVhZG9ubHkgbWluaW11bUtleWJvYXJkSGVpZ2h0SW5QaXhlbHM/OiBudW1iZXI7XG5cbiAgLyoqXG4gICAqIFRoZSBnZW9tZXRyeSB0byBqdWRnZS5cbiAgICovXG4gIHJlYWRvbmx5IHNuYXBzaG90OiBTb2Z0S2V5Ym9hcmRWaWV3cG9ydFNuYXBzaG90O1xufVxuXG4vKipcbiAqIEEgcmVjdGFuZ2xlIGFzIHRoZSByZW5kZXJlciByZXBvcnRzIGl0LCBpbiBDU1MgcGl4ZWxzLlxuICovXG5leHBvcnQgaW50ZXJmYWNlIEVsZW1lbnRSZWN0IHtcbiAgLyoqXG4gICAqIFRoZSByZWN0YW5nbGUncyBoZWlnaHQuXG4gICAqL1xuICByZWFkb25seSBoZWlnaHQ6IG51bWJlcjtcblxuICAvKipcbiAgICogVGhlIGRpc3RhbmNlIGZyb20gdGhlIHZpZXdwb3J0J3MgbGVmdCBlZGdlLlxuICAgKi9cbiAgcmVhZG9ubHkgbGVmdDogbnVtYmVyO1xuXG4gIC8qKlxuICAgKiBUaGUgZGlzdGFuY2UgZnJvbSB0aGUgdmlld3BvcnQncyB0b3AgZWRnZS5cbiAgICovXG4gIHJlYWRvbmx5IHRvcDogbnVtYmVyO1xuXG4gIC8qKlxuICAgKiBUaGUgcmVjdGFuZ2xlJ3Mgd2lkdGguXG4gICAqL1xuICByZWFkb25seSB3aWR0aDogbnVtYmVyO1xufVxuXG4vKipcbiAqIFBhcmFtZXRlcnMgZm9yIHtAbGluayByZXNvbHZlU29mdEtleWJvYXJkVGFwUG9pbnRzfS5cbiAqL1xuZXhwb3J0IGludGVyZmFjZSBSZXNvbHZlU29mdEtleWJvYXJkVGFwUG9pbnRzUGFyYW1zIHtcbiAgLyoqXG4gICAqIFRoZSBnZW9tZXRyeSB0aGUgdGFwIGlzIGFpbWVkIGZyb20uXG4gICAqL1xuICByZWFkb25seSBzbmFwc2hvdDogU29mdEtleWJvYXJkVmlld3BvcnRTbmFwc2hvdDtcbn1cblxuLyoqXG4gKiBBIHBvaW50IG9uIHRoZSBkZXZpY2UncyBzY3JlZW4sIGluIGRldmljZSBwaXhlbHMuXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgU29mdEtleWJvYXJkVGFwUG9pbnQge1xuICAvKipcbiAgICogVGhlIGRpc3RhbmNlIGZyb20gdGhlIHNjcmVlbidzIGxlZnQgZWRnZS5cbiAgICovXG4gIHJlYWRvbmx5IHhJblBpeGVsczogbnVtYmVyO1xuXG4gIC8qKlxuICAgKiBUaGUgZGlzdGFuY2UgZnJvbSB0aGUgc2NyZWVuJ3MgdG9wIGVkZ2UuXG4gICAqL1xuICByZWFkb25seSB5SW5QaXhlbHM6IG51bWJlcjtcbn1cblxuLyoqXG4gKiBXaGF0IHRoZSByZW5kZXJlciBrbm93cyBhYm91dCBpdHMgb3duIGdlb21ldHJ5LlxuICovXG5leHBvcnQgaW50ZXJmYWNlIFNvZnRLZXlib2FyZFZpZXdwb3J0U25hcHNob3Qge1xuICAvKipcbiAgICogVGhlIHJhdGlvIGJldHdlZW4gQ1NTIHBpeGVscyBhbmQgdGhlIGRldmljZSBwaXhlbHMgYGFkYiBzaGVsbCBpbnB1dCB0YXBgIHNwZWFrcyBpbi5cbiAgICovXG4gIHJlYWRvbmx5IGRldmljZVBpeGVsUmF0aW86IG51bWJlcjtcblxuICAvKipcbiAgICogVGhlIHZpZXdwb3J0J3MgaGVpZ2h0IGluIENTUyBwaXhlbHMuXG4gICAqXG4gICAqIEtlcHQgZm9yIHRoZSBkaWFnbm9zdGljIGFzIG11Y2ggYXMgdGhlIGRlY2lzaW9uOiBpdCBkb2VzICoqbm90Kiogc2hyaW5rIHdoZW4gdGhlIGtleWJvYXJkIGNvbWVzIHVwLlxuICAgKi9cbiAgcmVhZG9ubHkgaW5uZXJIZWlnaHQ6IG51bWJlcjtcblxuICAvKipcbiAgICogVGhlIGZpZWxkJ3MgcmVjdCwgd2hpY2ggaXMgd2hhdCBzYXlzIHdoZXRoZXIgdGhlIGtleWJvYXJkIGlzIHVwLCBvciBgbnVsbGAgd2hlbiBpdCBpcyBub3Qgb24gc2NyZWVuLlxuICAgKi9cbiAgcmVhZG9ubHkgaW5wdXRSZWN0OiBFbGVtZW50UmVjdCB8IG51bGw7XG5cbiAgLyoqXG4gICAqIFRoZSB3aW5kb3cncyBvZmZzZXQgZnJvbSB0aGUgdG9wIG9mIHRoZSBzY3JlZW4sIGFzIHRoZSBwYWdlIHVuZGVyc3RhbmRzIGl0LlxuICAgKi9cbiAgcmVhZG9ubHkgc2NyZWVuWTogbnVtYmVyO1xufVxuXG4vKipcbiAqIFRoZSBsZWFzdCBhIHJhaXNlZCBrZXlib2FyZCBsaWZ0cyB0aGUgZmllbGQgYnksIHNvIGEgc3RyYXkgcm91bmRpbmcgcGl4ZWwgaXMgbm90IHJlYWQgYXMgb25lLlxuICpcbiAqIEV4cG9ydGVkIGJlY2F1c2UgaXQgaXMgdGhlIG51bWJlciBib3RoIHtAbGluayBjaGVja0lzU29mdEtleWJvYXJkVXB9IGFuZCBgcmFpc2VTb2Z0S2V5Ym9hcmRgIGRlZmF1bHQgdG8sXG4gKiBhbmQgYSBzdWl0ZSB0aWdodGVuaW5nIGl0IHdhbnRzIHRvIHNheSBzbyByZWxhdGl2ZSB0byB0aGlzIHJhdGhlciB0aGFuIGluIHRoZSBhYnN0cmFjdC5cbiAqL1xuZXhwb3J0IGNvbnN0IERFRkFVTFRfTUlOSU1VTV9LRVlCT0FSRF9IRUlHSFRfSU5fUElYRUxTID0gMTAwO1xuXG4vKipcbiAqIFRoZSBgZHVtcHN5cyBpbnB1dF9tZXRob2RgIGZpZWxkcyB0aGF0IHNheSB3aGV0aGVyIHRoZSBJTUUgaXMgYWN0dWFsbHkgc2hvd2luZy5cbiAqL1xuY29uc3QgSU5QVVRfTUVUSE9EX1NUQVRFX1JFR19FWFAgPSAvbUlucHV0U2hvd258bUlzSW5wdXRWaWV3U2hvd258bUhhdmVDb25uZWN0aW9ufG1TaG93UmVxdWVzdGVkLztcblxuLyoqXG4gKiBIb3cgbWFueSBlcXVhbCBwYXJ0cyB0aGUgZmllbGQgaXMgc3BsaXQgaW50byB0byBmaW5kIGl0cyBjZW50cmUuXG4gKi9cbmNvbnN0IENFTlRFUl9ESVZJU09SID0gMjtcblxuLyoqXG4gKiBCdWlsZHMgdGhlIG1lc3NhZ2UgYSBmYWlsZWQgcmFpc2UgcmVwb3J0cy5cbiAqXG4gKiBBIGJhcmUgXCJ0aGUga2V5Ym9hcmQgZGlkIG5vdCBjb21lIHVwXCIgaXMgdW5yZWFkYWJsZSBcdTIwMTQgd2hhdCB0aGUgcmVhZGVyIG5lZWRzIGlzIHdoYXQgdGhlIHBhZ2Ugc2F3IGFuZCB3aGF0XG4gKiB0aGUgZGV2aWNlIHRob3VnaHQsIHNpZGUgYnkgc2lkZSwgYmVjYXVzZSB0aGUgdHdvIGRpc2FncmVlaW5nIGlzIHRoZSB3aG9sZSBkaWFnbm9zaXMuXG4gKlxuICogQHBhcmFtIHBhcmFtcyAtIFRoZSBldmlkZW5jZSBnYXRoZXJlZCBhZnRlciB0aGUgbGFzdCB0b3VjaC5cbiAqIEByZXR1cm5zIFRoZSBtZXNzYWdlLCByZWFkeSB0byB0aHJvdy5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGJ1aWxkU29mdEtleWJvYXJkRGlhZ25vc3RpY01lc3NhZ2UocGFyYW1zOiBCdWlsZFNvZnRLZXlib2FyZERpYWdub3N0aWNNZXNzYWdlUGFyYW1zKTogc3RyaW5nIHtcbiAgY29uc3QgeyBpbnB1dFJlY3QgfSA9IHBhcmFtcy5zbmFwc2hvdDtcbiAgY29uc3QgaW5wdXRCb3R0b20gPSBpbnB1dFJlY3QgPyBpbnB1dFJlY3QudG9wICsgaW5wdXRSZWN0LmhlaWdodCA6IG51bGw7XG5cbiAgcmV0dXJuIFtcbiAgICBgcmFpc2VTb2Z0S2V5Ym9hcmQ6IHRoZSBrZXlib2FyZCBkaWQgbm90IGNvbWUgdXAuIERldmljZSBmcmFtZWJ1ZmZlciB3cml0dGVuIHRvICR7cGFyYW1zLnNjcmVlbnNob3RQYXRofS5gLFxuICAgIGBwYWdlOiBpbm5lckhlaWdodD0ke1N0cmluZyhwYXJhbXMuc25hcHNob3QuaW5uZXJIZWlnaHQpfSBpbnB1dEJvdHRvbT0ke2lucHV0Qm90dG9tID09PSBudWxsID8gJyhubyBpbnB1dCknIDogU3RyaW5nKGlucHV0Qm90dG9tKX1gLFxuICAgIGBkZXZpY2U6ICR7cGFyYW1zLmlucHV0TWV0aG9kU3RhdGUgfHwgJyhubyBpbnB1dF9tZXRob2Qgc3RhdGUgcmVwb3J0ZWQpJ31gXG4gIF0uam9pbignXFxuJyk7XG59XG5cbi8qKlxuICogRGVjaWRlcyB3aGV0aGVyIHRoZSBJTUUgaXMgdXAsIGZyb20gdGhlIHBhZ2UncyBvd24gZ2VvbWV0cnkuXG4gKlxuICogQHBhcmFtIHBhcmFtcyAtIFRoZSBnZW9tZXRyeSB0byBqdWRnZSwgYW5kIGhvdyBmYXIgdGhlIGZpZWxkIG11c3QgaGF2ZSBsaWZ0ZWQuXG4gKiBAcmV0dXJucyBXaGV0aGVyIHRoZSBmaWVsZCBoYXMgc3RvcHBlZCBzaG9ydCBvZiB0aGUgYm90dG9tIHRvIG1ha2Ugcm9vbSBmb3IgYSBrZXlib2FyZC5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGNoZWNrSXNTb2Z0S2V5Ym9hcmRVcChwYXJhbXM6IENoZWNrSXNTb2Z0S2V5Ym9hcmRVcFBhcmFtcyk6IGJvb2xlYW4ge1xuICBjb25zdCB7IGlucHV0UmVjdCB9ID0gcGFyYW1zLnNuYXBzaG90O1xuICBpZiAoIWlucHV0UmVjdCkge1xuICAgIHJldHVybiBmYWxzZTtcbiAgfVxuXG4gIGNvbnN0IG1pbmltdW1LZXlib2FyZEhlaWdodEluUGl4ZWxzID0gcGFyYW1zLm1pbmltdW1LZXlib2FyZEhlaWdodEluUGl4ZWxzID8/IERFRkFVTFRfTUlOSU1VTV9LRVlCT0FSRF9IRUlHSFRfSU5fUElYRUxTO1xuICByZXR1cm4gcGFyYW1zLnNuYXBzaG90LmlubmVySGVpZ2h0IC0gKGlucHV0UmVjdC50b3AgKyBpbnB1dFJlY3QuaGVpZ2h0KSA+IG1pbmltdW1LZXlib2FyZEhlaWdodEluUGl4ZWxzO1xufVxuXG4vKipcbiAqIFJlZHVjZXMgYGR1bXBzeXMgaW5wdXRfbWV0aG9kYCB0byB0aGUgaGFuZGZ1bCBvZiBmaWVsZHMgdGhhdCBzYXkgd2hldGhlciB0aGUgSU1FIGlzIHNob3dpbmcuXG4gKlxuICogQHBhcmFtIGR1bXBzeXNPdXRwdXQgLSBSYXcgc3Rkb3V0IG9mIGBhZGIgc2hlbGwgZHVtcHN5cyBpbnB1dF9tZXRob2RgLlxuICogQHJldHVybnMgVGhlIGludGVyZXN0aW5nIGZpZWxkcywgdHJpbW1lZCBhbmQgam9pbmVkLCBvciBhbiBlbXB0eSBzdHJpbmcgd2hlbiBub25lIHdlcmUgcmVwb3J0ZWQuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBwYXJzZUlucHV0TWV0aG9kU3RhdGUoZHVtcHN5c091dHB1dDogc3RyaW5nKTogc3RyaW5nIHtcbiAgcmV0dXJuIGR1bXBzeXNPdXRwdXRcbiAgICAuc3BsaXQoJ1xcbicpXG4gICAgLmZpbHRlcigobGluZSkgPT4gSU5QVVRfTUVUSE9EX1NUQVRFX1JFR19FWFAudGVzdChsaW5lKSlcbiAgICAubWFwKChsaW5lKSA9PiBsaW5lLnRyaW0oKSlcbiAgICAuam9pbignIHwgJyk7XG59XG5cbi8qKlxuICogV29ya3Mgb3V0IHdoZXJlIHRvIHRvdWNoLCBpbiB0aGUgZGV2aWNlIHBpeGVscyBgYWRiIHNoZWxsIGlucHV0IHRhcGAgc3BlYWtzLlxuICpcbiAqIFR3byBjYW5kaWRhdGVzLCBub3Qgb25lOiB0aGUgV2ViVmlldyBtYXkgb3IgbWF5IG5vdCBzdGFydCBhdCB0aGUgdG9wIG9mIHRoZSBzY3JlZW4sIGFuZCB0aGUgcGFnZSBjYW5ub3RcbiAqIHRlbGwgd2hpY2guIEJvdGggbGFuZCBpbnNpZGUgdGhlIGZpZWxkIFx1MjAxNCBpdCBpcyB0YWxsZXIgdGhhbiB0aGUgb2Zmc2V0IFx1MjAxNCBzbyBhIHdyb25nIGd1ZXNzIGNvc3RzIG9uZSB0b3VjaFxuICogcmF0aGVyIHRoYW4gYSBtaXMtdGFwIG9uIHdoYXRldmVyIHNpdHMgYmVsb3cuXG4gKlxuICogQHBhcmFtIHBhcmFtcyAtIFRoZSBnZW9tZXRyeSB0aGUgdGFwIGlzIGFpbWVkIGZyb20uXG4gKiBAcmV0dXJucyBUaGUgcG9pbnRzIHRvIHRyeSwgaW4gb3JkZXIsIG9yIGFuIGVtcHR5IGFycmF5IHdoZW4gdGhlIGZpZWxkIGlzIG5vdCBvbiBzY3JlZW4uXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiByZXNvbHZlU29mdEtleWJvYXJkVGFwUG9pbnRzKHBhcmFtczogUmVzb2x2ZVNvZnRLZXlib2FyZFRhcFBvaW50c1BhcmFtcyk6IFNvZnRLZXlib2FyZFRhcFBvaW50W10ge1xuICBjb25zdCB7IGRldmljZVBpeGVsUmF0aW8sIGlucHV0UmVjdCwgc2NyZWVuWSB9ID0gcGFyYW1zLnNuYXBzaG90O1xuICBpZiAoIWlucHV0UmVjdCkge1xuICAgIHJldHVybiBbXTtcbiAgfVxuXG4gIGNvbnN0IHhJblBpeGVscyA9IE1hdGgucm91bmQoKGlucHV0UmVjdC5sZWZ0ICsgaW5wdXRSZWN0LndpZHRoIC8gQ0VOVEVSX0RJVklTT1IpICogZGV2aWNlUGl4ZWxSYXRpbyk7XG4gIGNvbnN0IGNlbnRlcllJblBpeGVscyA9IE1hdGgucm91bmQoKGlucHV0UmVjdC50b3AgKyBpbnB1dFJlY3QuaGVpZ2h0IC8gQ0VOVEVSX0RJVklTT1IpICogZGV2aWNlUGl4ZWxSYXRpbyk7XG4gIGNvbnN0IHRvcE9mZnNldEluUGl4ZWxzID0gTWF0aC5yb3VuZChzY3JlZW5ZICogZGV2aWNlUGl4ZWxSYXRpbyk7XG5cbiAgaWYgKHRvcE9mZnNldEluUGl4ZWxzID09PSAwKSB7XG4gICAgcmV0dXJuIFt7IHhJblBpeGVscywgeUluUGl4ZWxzOiBjZW50ZXJZSW5QaXhlbHMgfV07XG4gIH1cblxuICByZXR1cm4gW1xuICAgIHsgeEluUGl4ZWxzLCB5SW5QaXhlbHM6IGNlbnRlcllJblBpeGVscyArIHRvcE9mZnNldEluUGl4ZWxzIH0sXG4gICAgeyB4SW5QaXhlbHMsIHlJblBpeGVsczogY2VudGVyWUluUGl4ZWxzIH1cbiAgXTtcbn1cbiJdLAogICJtYXBwaW5ncyI6ICI7Ozs7Ozs7Ozs7Ozs7Ozs7OztBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQXlJTyxNQUFNLDRDQUE0QztBQUt6RCxNQUFNLDZCQUE2QjtBQUtuQyxNQUFNLGlCQUFpQjtBQVdoQixTQUFTLG1DQUFtQyxRQUEwRDtBQUMzRyxRQUFNLEVBQUUsVUFBVSxJQUFJLE9BQU87QUFDN0IsUUFBTSxjQUFjLFlBQVksVUFBVSxNQUFNLFVBQVUsU0FBUztBQUVuRSxTQUFPO0FBQUEsSUFDTCxrRkFBa0YsT0FBTyxjQUFjO0FBQUEsSUFDdkcscUJBQXFCLE9BQU8sT0FBTyxTQUFTLFdBQVcsQ0FBQyxnQkFBZ0IsZ0JBQWdCLE9BQU8sZUFBZSxPQUFPLFdBQVcsQ0FBQztBQUFBLElBQ2pJLFdBQVcsT0FBTyxvQkFBb0Isa0NBQWtDO0FBQUEsRUFDMUUsRUFBRSxLQUFLLElBQUk7QUFDYjtBQVFPLFNBQVMsc0JBQXNCLFFBQThDO0FBQ2xGLFFBQU0sRUFBRSxVQUFVLElBQUksT0FBTztBQUM3QixNQUFJLENBQUMsV0FBVztBQUNkLFdBQU87QUFBQSxFQUNUO0FBRUEsUUFBTSxnQ0FBZ0MsT0FBTyxpQ0FBaUM7QUFDOUUsU0FBTyxPQUFPLFNBQVMsZUFBZSxVQUFVLE1BQU0sVUFBVSxVQUFVO0FBQzVFO0FBUU8sU0FBUyxzQkFBc0IsZUFBK0I7QUFDbkUsU0FBTyxjQUNKLE1BQU0sSUFBSSxFQUNWLE9BQU8sQ0FBQyxTQUFTLDJCQUEyQixLQUFLLElBQUksQ0FBQyxFQUN0RCxJQUFJLENBQUMsU0FBUyxLQUFLLEtBQUssQ0FBQyxFQUN6QixLQUFLLEtBQUs7QUFDZjtBQVlPLFNBQVMsNkJBQTZCLFFBQW9FO0FBQy9HLFFBQU0sRUFBRSxrQkFBa0IsV0FBVyxRQUFRLElBQUksT0FBTztBQUN4RCxNQUFJLENBQUMsV0FBVztBQUNkLFdBQU8sQ0FBQztBQUFBLEVBQ1Y7QUFFQSxRQUFNLFlBQVksS0FBSyxPQUFPLFVBQVUsT0FBTyxVQUFVLFFBQVEsa0JBQWtCLGdCQUFnQjtBQUNuRyxRQUFNLGtCQUFrQixLQUFLLE9BQU8sVUFBVSxNQUFNLFVBQVUsU0FBUyxrQkFBa0IsZ0JBQWdCO0FBQ3pHLFFBQU0sb0JBQW9CLEtBQUssTUFBTSxVQUFVLGdCQUFnQjtBQUUvRCxNQUFJLHNCQUFzQixHQUFHO0FBQzNCLFdBQU8sQ0FBQyxFQUFFLFdBQVcsV0FBVyxnQkFBZ0IsQ0FBQztBQUFBLEVBQ25EO0FBRUEsU0FBTztBQUFBLElBQ0wsRUFBRSxXQUFXLFdBQVcsa0JBQWtCLGtCQUFrQjtBQUFBLElBQzVELEVBQUUsV0FBVyxXQUFXLGdCQUFnQjtBQUFBLEVBQzFDO0FBQ0Y7IiwKICAibmFtZXMiOiBbXQp9Cg==