obsidian-integration-testing 16.0.0 → 17.0.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/lib/cjs/adb.cjs +2 -2
- package/dist/lib/cjs/adb.d.cts +10 -0
- package/dist/lib/cjs/avd-name-channel.cjs +74 -0
- package/dist/lib/cjs/avd-name-channel.d.cts +152 -0
- package/dist/lib/cjs/avd-probe-verdict.cjs +11 -4
- package/dist/lib/cjs/avd-probe-verdict.d.cts +7 -0
- package/dist/lib/cjs/device-screenshot.cjs +1 -1
- package/dist/lib/cjs/device-screenshot.d.cts +3 -1
- package/dist/lib/cjs/emulator-backend.cjs +22 -1
- package/dist/lib/cjs/emulator-backend.d.cts +81 -0
- package/dist/lib/cjs/emulator-reclaim.cjs +78 -34
- package/dist/lib/cjs/emulator-reclaim.d.cts +57 -9
- package/dist/lib/cjs/enable-plugin.cjs +17 -8
- package/dist/lib/cjs/enable-plugin.d.cts +3 -1
- package/dist/lib/cjs/host-process-query-verdict.cjs +103 -0
- package/dist/lib/cjs/host-process-query-verdict.d.cts +196 -0
- package/dist/lib/cjs/index.cjs +14 -1
- package/dist/lib/cjs/index.d.cts +3 -1
- package/dist/lib/cjs/launched-device-selection.cjs +46 -0
- package/dist/lib/cjs/launched-device-selection.d.cts +112 -0
- package/dist/lib/cjs/library.cjs +1 -1
- package/dist/lib/cjs/paint-out-status-bar.cjs +170 -0
- package/dist/lib/cjs/paint-out-status-bar.d.cts +236 -0
- package/dist/lib/cjs/port-owner-query-verdict.cjs +94 -0
- package/dist/lib/cjs/port-owner-query-verdict.d.cts +161 -0
- package/dist/lib/cjs/resolve-emulator-device-id.cjs +27 -4
- package/dist/lib/cjs/sharp-loader.cjs +1 -1
- package/dist/lib/cjs/sharp-loader.d.cts +67 -2
- package/dist/lib/cjs/soft-keyboard-geometry.cjs +12 -2
- package/dist/lib/cjs/soft-keyboard-geometry.d.cts +17 -2
- package/dist/lib/cjs/soft-keyboard.cjs +130 -28
- package/dist/lib/cjs/soft-keyboard.d.cts +65 -6
- package/dist/lib/cjs/transport-appium.cjs +74 -4
- package/dist/lib/cjs/transport-appium.d.cts +49 -2
- package/dist/lib/cjs/transport-factory.cjs +162 -42
- package/dist/lib/esm/adb.d.mts +10 -0
- package/dist/lib/esm/adb.mjs +2 -2
- package/dist/lib/esm/avd-name-channel.d.mts +152 -0
- package/dist/lib/esm/avd-name-channel.mjs +45 -0
- package/dist/lib/esm/avd-probe-verdict.d.mts +7 -0
- package/dist/lib/esm/avd-probe-verdict.mjs +15 -4
- package/dist/lib/esm/device-screenshot.d.mts +3 -1
- package/dist/lib/esm/device-screenshot.mjs +1 -1
- package/dist/lib/esm/emulator-backend.d.mts +81 -0
- package/dist/lib/esm/emulator-backend.mjs +19 -1
- package/dist/lib/esm/emulator-reclaim.d.mts +57 -9
- package/dist/lib/esm/emulator-reclaim.mjs +84 -36
- package/dist/lib/esm/enable-plugin.d.mts +3 -1
- package/dist/lib/esm/enable-plugin.mjs +17 -8
- package/dist/lib/esm/host-process-query-verdict.d.mts +196 -0
- package/dist/lib/esm/host-process-query-verdict.mjs +74 -0
- package/dist/lib/esm/index.d.mts +3 -1
- package/dist/lib/esm/index.mjs +15 -1
- package/dist/lib/esm/launched-device-selection.d.mts +112 -0
- package/dist/lib/esm/launched-device-selection.mjs +21 -0
- package/dist/lib/esm/library.mjs +1 -1
- package/dist/lib/esm/paint-out-status-bar.d.mts +236 -0
- package/dist/lib/esm/paint-out-status-bar.mjs +142 -0
- package/dist/lib/esm/port-owner-query-verdict.d.mts +161 -0
- package/dist/lib/esm/port-owner-query-verdict.mjs +73 -0
- package/dist/lib/esm/resolve-emulator-device-id.mjs +32 -4
- package/dist/lib/esm/sharp-loader.d.mts +67 -2
- package/dist/lib/esm/sharp-loader.mjs +1 -1
- package/dist/lib/esm/soft-keyboard-geometry.d.mts +17 -2
- package/dist/lib/esm/soft-keyboard-geometry.mjs +11 -2
- package/dist/lib/esm/soft-keyboard.d.mts +65 -6
- package/dist/lib/esm/soft-keyboard.mjs +131 -28
- package/dist/lib/esm/transport-appium.d.mts +49 -2
- package/dist/lib/esm/transport-appium.mjs +74 -4
- package/dist/lib/esm/transport-factory.mjs +176 -44
- package/package.json +1 -1
|
@@ -49,7 +49,9 @@ export interface EnablePluginResult {
|
|
|
49
49
|
*
|
|
50
50
|
* Monkey-patches `app.plugins.loadPlugin` to intercept errors before
|
|
51
51
|
* Obsidian's `enablePlugin` try-catch swallows them. The original method
|
|
52
|
-
* is
|
|
52
|
+
* is restored in a `finally` block — but only while the patch this function
|
|
53
|
+
* installed is still the one in place, so a plugin that patched the same slot
|
|
54
|
+
* during its own load keeps its patch.
|
|
53
55
|
*
|
|
54
56
|
* Designed to be passed as the `callback` argument to {@link evalInObsidian}.
|
|
55
57
|
*
|
|
@@ -0,0 +1,103 @@
|
|
|
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 host_process_query_verdict_exports = {};
|
|
20
|
+
__export(host_process_query_verdict_exports, {
|
|
21
|
+
buildHostProcessQueryMessage: () => buildHostProcessQueryMessage,
|
|
22
|
+
formatDuration: () => formatDuration,
|
|
23
|
+
formatExitCode: () => formatExitCode,
|
|
24
|
+
formatRefusal: () => formatRefusal,
|
|
25
|
+
resolveHostProcessQueryOutcome: () => resolveHostProcessQueryOutcome,
|
|
26
|
+
resolveHostQueryFailure: () => resolveHostQueryFailure
|
|
27
|
+
});
|
|
28
|
+
module.exports = __toCommonJS(host_process_query_verdict_exports);
|
|
29
|
+
var import_type_guards = require("./type-guards.cjs");
|
|
30
|
+
const NTSTATUS_FAILURE_FLOOR = 3221225472;
|
|
31
|
+
const HEXADECIMAL_RADIX = 16;
|
|
32
|
+
const MILLISECONDS_PER_SECOND = 1e3;
|
|
33
|
+
function buildHostProcessQueryMessage(params) {
|
|
34
|
+
const cost = `after ${formatDuration(params.elapsedInMilliseconds)}`;
|
|
35
|
+
const consequence = params.consequence ?? "Teardown falls back to `adb devices` alone and has no PID to escalate to.";
|
|
36
|
+
switch (params.outcome) {
|
|
37
|
+
case "crashed": {
|
|
38
|
+
return `Warning: \`${params.command}\` died ${cost} without explaining itself (exit ${formatExitCode(params.exitCode)}, nothing on stderr, ${String(params.partialRowCount)} process(es) listed) \u2014 it did not refuse the request, since it always explains a refusal on stderr. Suspect a crash or an interfering security product, and try the command by hand. ${consequence}`;
|
|
39
|
+
}
|
|
40
|
+
case "listed": {
|
|
41
|
+
return void 0;
|
|
42
|
+
}
|
|
43
|
+
case "not-found": {
|
|
44
|
+
return `Warning: \`${params.command}\` could not be run at all ${cost}: the executable was not found on PATH. ${consequence}`;
|
|
45
|
+
}
|
|
46
|
+
case "output-overran": {
|
|
47
|
+
return `Warning: \`${params.command}\` produced more output ${cost} than the listing's buffer allows, so none of it could be read. Raise the buffer. ${consequence}`;
|
|
48
|
+
}
|
|
49
|
+
case "refused": {
|
|
50
|
+
return `Warning: \`${params.command}\` refused the request ${cost} (exit ${formatExitCode(params.exitCode)}): ${formatRefusal(params.standardError)} ${consequence}`;
|
|
51
|
+
}
|
|
52
|
+
case "timed-out": {
|
|
53
|
+
return `Warning: \`${params.command}\` did not finish within its ${formatDuration(params.timeoutInMilliseconds)} budget and was killed ${cost}${params.signal === null ? "" : ` (${params.signal})`}, having listed ${String(params.partialRowCount)} process(es) by then \u2014 so it was working, not refusing, and the budget is what ran out. The partial listing is discarded rather than used: the owned set is a *difference* between two listings, and a truncated one on either side would both miss a process this run owns and claim one it does not. ${consequence}`;
|
|
54
|
+
}
|
|
55
|
+
case "zero-rows": {
|
|
56
|
+
return `Warning: \`${params.command}\` exited cleanly ${cost} but its output parsed to no processes and carried no no-match notice \u2014 a whole-host listing cannot be empty on a running host, and a filtered one says so when nothing matches. Treating it as a failed query. ${consequence}`;
|
|
57
|
+
}
|
|
58
|
+
default: {
|
|
59
|
+
return (0, import_type_guards.assertNever)(params.outcome);
|
|
60
|
+
}
|
|
61
|
+
}
|
|
62
|
+
}
|
|
63
|
+
function formatDuration(durationInMilliseconds) {
|
|
64
|
+
return durationInMilliseconds < MILLISECONDS_PER_SECOND ? `${String(durationInMilliseconds)}ms` : `${(durationInMilliseconds / MILLISECONDS_PER_SECOND).toFixed(1)}s`;
|
|
65
|
+
}
|
|
66
|
+
function formatExitCode(exitCode) {
|
|
67
|
+
if (exitCode === null) {
|
|
68
|
+
return "unknown";
|
|
69
|
+
}
|
|
70
|
+
return exitCode >= NTSTATUS_FAILURE_FLOOR ? `0x${exitCode.toString(HEXADECIMAL_RADIX).toUpperCase()}` : String(exitCode);
|
|
71
|
+
}
|
|
72
|
+
function formatRefusal(standardError) {
|
|
73
|
+
const refusal = standardError.trim();
|
|
74
|
+
return refusal.endsWith(".") ? refusal : `${refusal}.`;
|
|
75
|
+
}
|
|
76
|
+
function resolveHostProcessQueryOutcome(params) {
|
|
77
|
+
if (!params.hasFailed) {
|
|
78
|
+
return params.rowCount === 0 && !params.hasReportedNoMatch ? "zero-rows" : "listed";
|
|
79
|
+
}
|
|
80
|
+
return resolveHostQueryFailure(params);
|
|
81
|
+
}
|
|
82
|
+
function resolveHostQueryFailure(params) {
|
|
83
|
+
if (params.errorCode === "ENOENT") {
|
|
84
|
+
return "not-found";
|
|
85
|
+
}
|
|
86
|
+
if (params.errorCode === "ERR_CHILD_PROCESS_STDIO_MAXBUFFER") {
|
|
87
|
+
return "output-overran";
|
|
88
|
+
}
|
|
89
|
+
if (params.isKilled) {
|
|
90
|
+
return "timed-out";
|
|
91
|
+
}
|
|
92
|
+
return params.standardError.trim() === "" ? "crashed" : "refused";
|
|
93
|
+
}
|
|
94
|
+
// Annotate the CommonJS export names for ESM import in node:
|
|
95
|
+
0 && (module.exports = {
|
|
96
|
+
buildHostProcessQueryMessage,
|
|
97
|
+
formatDuration,
|
|
98
|
+
formatExitCode,
|
|
99
|
+
formatRefusal,
|
|
100
|
+
resolveHostProcessQueryOutcome,
|
|
101
|
+
resolveHostQueryFailure
|
|
102
|
+
});
|
|
103
|
+
//# sourceMappingURL=data:application/json;base64,ewogICJ2ZXJzaW9uIjogMywKICAic291cmNlcyI6IFsiLi4vLi4vLi4vc3JjL2hvc3QtcHJvY2Vzcy1xdWVyeS12ZXJkaWN0LnRzIl0sCiAgInNvdXJjZXNDb250ZW50IjogWyIvKipcbiAqIEBmaWxlXG4gKlxuICogUHVyZSBjbGFzc2lmaWNhdGlvbiBvZiB0aGUgaG9zdCBwcm9jZXNzIGxpc3RpbmcgXHUyMDE0IGRlY2lkaW5nLCBmcm9tIGhvd1xuICogYHRhc2tsaXN0YCAvIGBwc2AgZW5kZWQsICp3aGljaCogd2F5IGl0IGZhaWxlZCwgYW5kIHNheWluZyBzbyBpbiBvbmUgbGluZS5cbiAqXG4gKiBUaGUgbGlzdGluZyBpcyB3aGF0IG5hbWVzIHRoZSBlbXVsYXRvciBiYWNrZW5kIGEgcnVuIG93bnMsIGFuZCB0aGVyZWZvcmUgdGhlXG4gKiBvbmx5IFBJRCB0ZWFyZG93biBjYW4gZXNjYWxhdGUgdG8gKCoqTDU2KiopLiBJdCBpcyBiZXN0LWVmZm9ydCBieSBkZXNpZ246IGFcbiAqIGxpc3RpbmcgdGhhdCBjYW5ub3QgYmUgcHJvZHVjZWQgeWllbGRzIG5vIFBJRHMgcmF0aGVyIHRoYW4gZmFpbGluZyB0aGUgcnVuLlxuICogV2hhdCBpdCBtdXN0IG5ldmVyIGJlIGlzICoqdW5leHBsYWluZWQqKiwgYW5kIGZvciB0aHJlZSB3ZWVrcyBpdCB3YXM6XG4gKlxuICogYGBgdGV4dFxuICogV2FybmluZzogY291bGQgbm90IGxpc3QgaG9zdCBwcm9jZXNzZXMgKGB0YXNrbGlzdGApOiBDb21tYW5kIGZhaWxlZDogdGFza2xpc3QgL0ZPIENTViAvTkhcbiAqXG4gKiBXYXJuaW5nOiBgdGFza2xpc3RgIGxpc3RlZCBubyBwcm9jZXNzZXMuXG4gKiBgYGBcbiAqXG4gKiBUd28gZGVmZWN0cyBpbiBmb3VyIGxpbmVzLiBUaGUgcGFpciBpcyAqY29udHJhZGljdG9yeSogXHUyMDE0IHRoZSBmaXJzdCBzYXlzIHRoZVxuICogY29tbWFuZCBmYWlsZWQsIHRoZSBzZWNvbmQgc2F5cyBpdCByYW4gYW5kIGZvdW5kIG5vdGhpbmcgXHUyMDE0IGFuZCB0aGV5IHdlcmVcbiAqIGVtaXR0ZWQgdG9nZXRoZXIgZm9yIGEgc2luZ2xlIGZhaWx1cmUsIGJlY2F1c2UgYSBmYWlsZWQgY2FsbCByZXNvbHZlcyBgJydgXG4gKiBhbmQgYW4gZW1wdHkgc3RyaW5nIHBhcnNlcyB0byB6ZXJvIHJvd3MuIGB6ZXJvLXJvd3NgIGV4aXN0cyB0byBjYXRjaCBhXG4gKiBsaXN0aW5nIHRoYXQgc3VjY2VlZGVkIGFuZCB5ZXQgcmV0dXJuZWQgbm90aGluZywgd2hpY2ggb24gYSByZWFsIGhvc3QgY2FuXG4gKiBvbmx5IGJlIGEgZmFpbGVkIHF1ZXJ5OyBpdCBpcyBub3QgYSBzZWNvbmQgb3BpbmlvbiBvbiBhIGNhbGwgdGhhdCBhbHJlYWR5XG4gKiByZXBvcnRlZCBhbiBlcnJvci5cbiAqXG4gKiBBbmQgdGhlIHN1cnZpdmluZyBkaWFnbm9zdGljIGlzIGBlcnJvci5tZXNzYWdlYCBhbG9uZSwgd2hpY2ggZm9yIGBleGVjRmlsZWBcbiAqIGlzIGBDb21tYW5kIGZhaWxlZDogPGNtZD5cXG48c3RkZXJyPmAgXHUyMDE0IHNvIHRoZSBsb2cgY2FycmllZCB0aGUgY29tbWFuZCBiYWNrXG4gKiB0byB0aGUgcmVhZGVyIGFuZCB0aHJldyBhd2F5IGV2ZXJ5dGhpbmcgdGhhdCBpZGVudGlmaWVzIHRoZSBmYWlsdXJlOlxuICogYGVycm9yLmNvZGVgLCBgZXJyb3Iua2lsbGVkYCwgYGVycm9yLnNpZ25hbGAsIGFuZCBob3cgbG9uZyB0aGUgY2FsbCB0b29rLlxuICogTWVhc3VyZWQgMjAyNi0wOS0yMyBvbiB0aGlzIGhvc3QsIHRoYXQgZGlzY2FyZGVkIGV2aWRlbmNlIGlzIGRlY2lzaXZlOlxuICpcbiAqIC0gYHRhc2tsaXN0YCAqKmFsd2F5cyoqIHdyaXRlcyBgRVJST1I6IDxyZWFzb24+YCB0byBzdGRlcnIgd2hlbiBpdCBvYmplY3RzIFx1MjAxNFxuICogICBhIGJhZCBmaWx0ZXIsIGFuIHVucmVhY2hhYmxlIGhvc3QgXHUyMDE0IGFuZCBleGl0cyAxLiBTbyBhIG5vbi16ZXJvIGV4aXQgd2l0aFxuICogICAqKmVtcHR5Kiogc3RkZXJyIGlzIG5vdCBgdGFza2xpc3RgIHJlZnVzaW5nOyBpdCBpcyB0aGUgaG9zdCBraWxsaW5nIHRoZVxuICogICBjaGlsZCwgYW5kIGBjcmFzaGVkYCBzYXlzIHNvLlxuICogLSBUaGUgZXhhY3Qgc3Bhd24gdGhlIGhhcm5lc3MgbWFrZXMgc3VjY2VlZHMgMzkgdGltZXMgb3V0IG9mIDM5IGZyb20gYW4gaWRsZVxuICogICBOb2RlIHByb2Nlc3MgKDAuNi00LjNzLCAyNiBLQiwgfjUzMCByb3dzLCBhZ2FpbnN0IGEgMzBzIGJ1ZGdldCBhbmQgYW4gOCBNQlxuICogICBjZWlsaW5nKS4gU28gXCJ0aGUgc3Bhd24gaXMgd3JvbmdcIiBcdTIwMTQgYSBtaXNzaW5nIHNoZWxsLCBhIFBBVEggdGhlIGNoaWxkIGRpZFxuICogICBub3QgaW5oZXJpdCwgYW4gdW5kZXJzaXplZCBidWZmZXIgXHUyMDE0IGlzIHJ1bGVkIG91dDogZWFjaCBoYXMgaXRzICoqb3duKiogbWVzc2FnZVxuICogICAoYHNwYXduIHRhc2tsaXN0IEVOT0VOVGAsIGBzdGRvdXQgbWF4QnVmZmVyIGxlbmd0aCBleGNlZWRlZGApLCBhbmQgbm9uZSBvZlxuICogICB0aGVtIGlzIHRoZSBvbmUgb2JzZXJ2ZWQuXG4gKiAtIFVuZGVyIGFuIGVtdWxhdG9yIGJvb3QgdGhlIHNhbWUgY2FsbCBpbmZsYXRlcyB0byB+OXggaXRzIGlkbGUgY29zdCwgd2hpY2hcbiAqICAgaXMgdGhlIGNvbnRlbnRpb24gYEhPU1RfUFJPQ0VTU19RVUVSWV9USU1FT1VUX0lOX01JTExJU0VDT05EU2AgaXMgc2l6ZWRcbiAqICAgZm9yIGFuZCB0aGUgZmFpbHVyZSB0aGUgb2xkIGxpbmUgY291bGQgbm90IGRpc3Rpbmd1aXNoIGZyb20gYSBjcmFzaC5cbiAqXG4gKiBUaGlzIGlzIHRoZSBzYW1lIGZhdWx0IGBhdmQtcHJvYmUtdmVyZGljdC50c2Agd2FzIHdyaXR0ZW4gZm9yIFx1MjAxNCBhIHByb2JlIHRoYXRcbiAqIGRpc2NhcmRlZCBpdHMgZXJyb3IsIGxlYXZpbmcgXCJuZXZlciBhbnN3ZXJlZFwiIGluZGlzdGluZ3Vpc2hhYmxlIGZyb20gXCJ0aGVcbiAqIGFuc3dlciBpcyBub1wiIFx1MjAxNCBhbmQgaXQgaXMgZml4ZWQgdGhlIHNhbWUgd2F5OiBjbGFzc2lmeSwgbmFtZSB0aGVcbiAqIGNvbnNlcXVlbmNlLCBhbmQga2VlcCB0aGUgY2xhc3NpZmljYXRpb24gcHVyZSBzbyBpdCBpcyB1bml0LXRlc3RhYmxlIHdoaWxlXG4gKiB0aGUgYGV4ZWNGaWxlYCBnbHVlIHN0YXlzIGluIHRoZSBpbnRlZ3JhdGlvbi1vbmx5IGNhbGxlci5cbiAqL1xuXG5pbXBvcnQgeyBhc3NlcnROZXZlciB9IGZyb20gJy4vdHlwZS1ndWFyZHMuY2pzJztcblxuLyoqXG4gKiBUaGUgbG93ZXN0IGV4aXQgY29kZSBXaW5kb3dzIHJlc2VydmVzIGZvciBhbiBgTlRTVEFUVVNgIGZhaWx1cmUuXG4gKlxuICogQSBjaGlsZCBraWxsZWQgYnkgdGhlIE9TIFx1MjAxNCBhbiBhY2Nlc3MgdmlvbGF0aW9uLCBhIHN0YWNrIG92ZXJmbG93IFx1MjAxNCBleGl0cyB3aXRoXG4gKiBpdHMgYE5UU1RBVFVTYCBhcyB0aGUgY29kZSwgYW5kIGAweEMwMDAwMDA1YCBpcyB1bnJlYWRhYmxlIGluIGRlY2ltYWxcbiAqIChgMzIyMTIyNTQ3N2ApLiBDb2RlcyBhdCBvciBhYm92ZSB0aGlzIGFyZSB0aGVyZWZvcmUgcmVwb3J0ZWQgaW4gaGV4LCB3aGljaFxuICogaXMgdGhlIG9ubHkgZm9ybSBhIHJlYWRlciBjYW4gbG9vayB1cC5cbiAqL1xuY29uc3QgTlRTVEFUVVNfRkFJTFVSRV9GTE9PUiA9IDB4QzBfMDBfMDBfMDA7XG5cbi8qKlxuICogVGhlIGJhc2UgYW4gYE5UU1RBVFVTYCBleGl0IGNvZGUgaXMgcmVuZGVyZWQgaW4uXG4gKi9cbmNvbnN0IEhFWEFERUNJTUFMX1JBRElYID0gMTY7XG5cbi8qKlxuICogTWlsbGlzZWNvbmRzIGluIGEgc2Vjb25kLCBmb3IgcmVuZGVyaW5nIGEgZHVyYXRpb24uXG4gKi9cbmNvbnN0IE1JTExJU0VDT05EU19QRVJfU0VDT05EID0gMTAwMDtcblxuLyoqXG4gKiBQYXJhbWV0ZXJzIGZvciB7QGxpbmsgYnVpbGRIb3N0UHJvY2Vzc1F1ZXJ5TWVzc2FnZX0uXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgQnVpbGRIb3N0UHJvY2Vzc1F1ZXJ5TWVzc2FnZVBhcmFtcyB7XG4gIC8qKlxuICBUaGUgY29tbWFuZCB0aGF0IHdhcyBydW4sIGZvciB0aGUgcmVhZGVyIHRvIHRyeSBieSBoYW5kIFx1MjAxNCBlLmcuIGB0YXNrbGlzdCAvRk8gQ1NWIC9OSGAuXG4gICAqL1xuICByZWFkb25seSBjb21tYW5kOiBzdHJpbmc7XG5cbiAgLyoqXG4gIFdoYXQgdGhlIGZhaWx1cmUgY29zdHMgdGhlIGNhbGxlciwgY2xvc2luZyB0aGUgbGluZS4gRGVmYXVsdHMgdG8gdGhlIHRlYXJkb3duIGNvbnNlcXVlbmNlLCB3aGljaCBpcyB3aGF0IHRoZSBoYXJuZXNzJ3Mgb3duIGxpc3RpbmcgbG9zZXM7IHRoZSB3ZWRnZSBwcm9iZSBzdGF0ZXMgd2hhdCAqaXQqIGxvc2VzIGluc3RlYWQuXG4gICAqL1xuICByZWFkb25seSBjb25zZXF1ZW5jZT86IHN0cmluZyB8IHVuZGVmaW5lZDtcblxuICAvKipcbiAgSG93IGxvbmcgdGhlIGNhbGwgdG9vayBiZWZvcmUgaXQgZW5kZWQsIGluIG1pbGxpc2Vjb25kcy5cbiAgICovXG4gIHJlYWRvbmx5IGVsYXBzZWRJbk1pbGxpc2Vjb25kczogbnVtYmVyO1xuXG4gIC8qKlxuICBUaGUgY2hpbGQncyBleGl0IGNvZGUsIHdoZW4gaXQgZXhpdGVkIHJhdGhlciB0aGFuIGZhaWxpbmcgdG8gc3RhcnQgb3IgYmVpbmcga2lsbGVkLlxuICAgKi9cbiAgcmVhZG9ubHkgZXhpdENvZGU6IG51bGwgfCBudW1iZXI7XG5cbiAgLyoqXG4gIFRoZSB2ZXJkaWN0IGZyb20ge0BsaW5rIHJlc29sdmVIb3N0UHJvY2Vzc1F1ZXJ5T3V0Y29tZX0uXG4gICAqL1xuICByZWFkb25seSBvdXRjb21lOiBIb3N0UHJvY2Vzc1F1ZXJ5T3V0Y29tZTtcblxuICAvKipcbiAgSG93IG1hbnkgcHJvY2Vzc2VzIHRoZSBvdXRwdXQgcGFyc2VkIHRvIFx1MjAxNCB0aGUgKnBhcnRpYWwqIGxpc3Rpbmcgb24gYSBmYWlsdXJlLCB3aGljaCBpcyB0aGUgZXZpZGVuY2UgdGhhdCB0aGUgY29tbWFuZCB3YXMgd29ya2luZyB3aGVuIGl0IGRpZWQuXG4gICAqL1xuICByZWFkb25seSBwYXJ0aWFsUm93Q291bnQ6IG51bWJlcjtcblxuICAvKipcbiAgVGhlIHNpZ25hbCB0aGUgY2hpbGQgd2FzIGtpbGxlZCB3aXRoLCB3aGVuIGl0IHdhcyBraWxsZWQuXG4gICAqL1xuICByZWFkb25seSBzaWduYWw6IG51bGwgfCBzdHJpbmc7XG5cbiAgLyoqXG4gIFdoYXRldmVyIHRoZSBjaGlsZCB3cm90ZSB0byBzdGRlcnIgXHUyMDE0IHF1b3RlZCBmb3IgYHJlZnVzZWRgLCBhbmQgdGhlIGVtcHRpbmVzcyB0aGF0IGlkZW50aWZpZXMgYGNyYXNoZWRgLlxuICAgKi9cbiAgcmVhZG9ubHkgc3RhbmRhcmRFcnJvcjogc3RyaW5nO1xuXG4gIC8qKlxuICBUaGUgYnVkZ2V0IHRoZSBjYWxsIHdhcyBnaXZlbiwgaW4gbWlsbGlzZWNvbmRzLlxuICAgKi9cbiAgcmVhZG9ubHkgdGltZW91dEluTWlsbGlzZWNvbmRzOiBudW1iZXI7XG59XG5cbi8qKlxuICogSG93IHRoZSBob3N0IHByb2Nlc3MgbGlzdGluZyBlbmRlZC5cbiAqXG4gKiBgbGlzdGVkYCBpcyB0aGUgb25seSBzdWNjZXNzLiBUaGUgcmVzdCBhcmUgZGlzdGluY3QgZmFpbHVyZXMgb24gcHVycG9zZTogdGhleVxuICogbmVlZCBkaWZmZXJlbnQgZml4ZXMsIGFuZCB0aGUgbGluZSB0aGV5IHVzZWQgdG8gc2hhcmUgbmFtZWQgbm9uZSBvZiB0aGVtLlxuICovXG5leHBvcnQgdHlwZSBIb3N0UHJvY2Vzc1F1ZXJ5T3V0Y29tZSA9ICdsaXN0ZWQnIHwgJ3plcm8tcm93cycgfCBIb3N0UXVlcnlGYWlsdXJlO1xuXG4vKipcbiAqIFRoZSB3YXlzIGEgaG9zdCBxdWVyeSBjYW4gZmFpbCwgc2hhcmVkIGJ5IGV2ZXJ5IHF1ZXJ5IHRoYXQgY2xhc3NpZmllcyBpdHMgZW5kaW5nLlxuICovXG5leHBvcnQgdHlwZSBIb3N0UXVlcnlGYWlsdXJlID0gJ2NyYXNoZWQnIHwgJ25vdC1mb3VuZCcgfCAnb3V0cHV0LW92ZXJyYW4nIHwgJ3JlZnVzZWQnIHwgJ3RpbWVkLW91dCc7XG5cbi8qKlxuICogUGFyYW1ldGVycyBmb3Ige0BsaW5rIHJlc29sdmVIb3N0UHJvY2Vzc1F1ZXJ5T3V0Y29tZX0uXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgUmVzb2x2ZUhvc3RQcm9jZXNzUXVlcnlPdXRjb21lUGFyYW1zIHtcbiAgLyoqXG4gIGBleGVjRmlsZWAncyBgZXJyb3IuY29kZWA6IHRoZSBudW1lcmljIGV4aXQgY29kZSwgb3IgYSBzdHJpbmcgbGlrZSBgRU5PRU5UYCB3aGVuIHRoZSBjaGlsZCBuZXZlciByYW4uXG4gICAqL1xuICByZWFkb25seSBlcnJvckNvZGU6IG51bGwgfCBudW1iZXIgfCBzdHJpbmc7XG5cbiAgLyoqXG4gIFdoZXRoZXIgYGV4ZWNGaWxlYCByZXBvcnRlZCBhbiBlcnJvciBhdCBhbGwuXG4gICAqL1xuICByZWFkb25seSBoYXNGYWlsZWQ6IGJvb2xlYW47XG5cbiAgLyoqXG4gIFdoZXRoZXIgYSAqKmZpbHRlcmVkKiogcXVlcnkgYWZmaXJtYXRpdmVseSByZXBvcnRlZCB0aGF0IG5vdGhpbmcgbWF0Y2hlZCAoYGNoZWNrSXNOb01hdGNoUmVwb3J0ZWRgKSBcdTIwMTQgdGhlIG9uZSB3YXkgYW4gZW1wdHkgYW5zd2VyIGlzIGFuIGFuc3dlci5cbiAgICovXG4gIHJlYWRvbmx5IGhhc1JlcG9ydGVkTm9NYXRjaDogYm9vbGVhbjtcblxuICAvKipcbiAgYGV4ZWNGaWxlYCdzIGBlcnJvci5raWxsZWRgOiB3aGV0aGVyIHRoZSBidWRnZXQgZXhwaXJlZCBhbmQgdGhlIGNoaWxkIHdhcyBraWxsZWQuXG4gICAqL1xuICByZWFkb25seSBpc0tpbGxlZDogYm9vbGVhbjtcblxuICAvKipcbiAgSG93IG1hbnkgcHJvY2Vzc2VzIHRoZSBvdXRwdXQgcGFyc2VkIHRvLlxuICAgKi9cbiAgcmVhZG9ubHkgcm93Q291bnQ6IG51bWJlcjtcblxuICAvKipcbiAgV2hhdGV2ZXIgdGhlIGNoaWxkIHdyb3RlIHRvIHN0ZGVyci5cbiAgICovXG4gIHJlYWRvbmx5IHN0YW5kYXJkRXJyb3I6IHN0cmluZztcbn1cblxuLyoqXG4gKiBQYXJhbWV0ZXJzIGZvciB7QGxpbmsgcmVzb2x2ZUhvc3RRdWVyeUZhaWx1cmV9LlxuICovXG5leHBvcnQgdHlwZSBSZXNvbHZlSG9zdFF1ZXJ5RmFpbHVyZVBhcmFtcyA9IFBpY2s8UmVzb2x2ZUhvc3RQcm9jZXNzUXVlcnlPdXRjb21lUGFyYW1zLCAnZXJyb3JDb2RlJyB8ICdpc0tpbGxlZCcgfCAnc3RhbmRhcmRFcnJvcic+O1xuXG4vKipcbiAqIEJ1aWxkcyB0aGUgc2luZ2xlIGxpbmUgdGhlIGxpc3RpbmcgbG9ncyBmb3IgYW4gb3V0Y29tZS5cbiAqXG4gKiBPbmUgbGluZSwgbmV2ZXIgdHdvOiB0aGUgY29udHJhZGljdG9yeSBwYWlyIGluIHRoaXMgZmlsZSdzIGhlYWRlciBpcyB0aGVcbiAqIGRlZmVjdCB0aGlzIHJlcGxhY2VzLiBgbGlzdGVkYCBoYXMgbm90aGluZyB0byByZXBvcnQsIHNvIGl0IHJldHVybnNcbiAqIGB1bmRlZmluZWRgIHJhdGhlciB0aGFuIGEgY2hlZXJmdWwgbGluZSBvbiB0aGUgaG90IHBhdGguXG4gKlxuICogQHBhcmFtIHBhcmFtcyAtIFRoZSBvdXRjb21lIHBsdXMgdGhlIGNvbW1hbmQsIHRoZSBidWRnZXQgYW5kIHdoYXQgdGhlIGNoaWxkIGxlZnQgYmVoaW5kLlxuICogQHJldHVybnMgVGhlIHdhcm5pbmcgdG8gbG9nLCBvciBgdW5kZWZpbmVkYCB3aGVuIHRoZSBsaXN0aW5nIHN1Y2NlZWRlZC5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGJ1aWxkSG9zdFByb2Nlc3NRdWVyeU1lc3NhZ2UocGFyYW1zOiBCdWlsZEhvc3RQcm9jZXNzUXVlcnlNZXNzYWdlUGFyYW1zKTogc3RyaW5nIHwgdW5kZWZpbmVkIHtcbiAgY29uc3QgY29zdCA9IGBhZnRlciAke2Zvcm1hdER1cmF0aW9uKHBhcmFtcy5lbGFwc2VkSW5NaWxsaXNlY29uZHMpfWA7XG4gIGNvbnN0IGNvbnNlcXVlbmNlID0gcGFyYW1zLmNvbnNlcXVlbmNlID8/ICdUZWFyZG93biBmYWxscyBiYWNrIHRvIGBhZGIgZGV2aWNlc2AgYWxvbmUgYW5kIGhhcyBubyBQSUQgdG8gZXNjYWxhdGUgdG8uJztcblxuICBzd2l0Y2ggKHBhcmFtcy5vdXRjb21lKSB7XG4gICAgY2FzZSAnY3Jhc2hlZCc6IHtcbiAgICAgIHJldHVybiBgV2FybmluZzogXFxgJHtwYXJhbXMuY29tbWFuZH1cXGAgZGllZCAke2Nvc3R9IHdpdGhvdXQgZXhwbGFpbmluZyBpdHNlbGYgKGV4aXQgJHtmb3JtYXRFeGl0Q29kZShwYXJhbXMuZXhpdENvZGUpfSwgbm90aGluZyBvbiBzdGRlcnIsICR7U3RyaW5nKHBhcmFtcy5wYXJ0aWFsUm93Q291bnQpfSBwcm9jZXNzKGVzKSBsaXN0ZWQpIFx1MjAxNCBpdCBkaWQgbm90IHJlZnVzZSB0aGUgcmVxdWVzdCwgc2luY2UgaXQgYWx3YXlzIGV4cGxhaW5zIGEgcmVmdXNhbCBvbiBzdGRlcnIuIFN1c3BlY3QgYSBjcmFzaCBvciBhbiBpbnRlcmZlcmluZyBzZWN1cml0eSBwcm9kdWN0LCBhbmQgdHJ5IHRoZSBjb21tYW5kIGJ5IGhhbmQuICR7Y29uc2VxdWVuY2V9YDtcbiAgICB9XG4gICAgY2FzZSAnbGlzdGVkJzoge1xuICAgICAgcmV0dXJuIHVuZGVmaW5lZDtcbiAgICB9XG4gICAgY2FzZSAnbm90LWZvdW5kJzoge1xuICAgICAgcmV0dXJuIGBXYXJuaW5nOiBcXGAke3BhcmFtcy5jb21tYW5kfVxcYCBjb3VsZCBub3QgYmUgcnVuIGF0IGFsbCAke2Nvc3R9OiB0aGUgZXhlY3V0YWJsZSB3YXMgbm90IGZvdW5kIG9uIFBBVEguICR7Y29uc2VxdWVuY2V9YDtcbiAgICB9XG4gICAgY2FzZSAnb3V0cHV0LW92ZXJyYW4nOiB7XG4gICAgICByZXR1cm4gYFdhcm5pbmc6IFxcYCR7cGFyYW1zLmNvbW1hbmR9XFxgIHByb2R1Y2VkIG1vcmUgb3V0cHV0ICR7Y29zdH0gdGhhbiB0aGUgbGlzdGluZydzIGJ1ZmZlciBhbGxvd3MsIHNvIG5vbmUgb2YgaXQgY291bGQgYmUgcmVhZC4gUmFpc2UgdGhlIGJ1ZmZlci4gJHtjb25zZXF1ZW5jZX1gO1xuICAgIH1cbiAgICBjYXNlICdyZWZ1c2VkJzoge1xuICAgICAgcmV0dXJuIGBXYXJuaW5nOiBcXGAke3BhcmFtcy5jb21tYW5kfVxcYCByZWZ1c2VkIHRoZSByZXF1ZXN0ICR7Y29zdH0gKGV4aXQgJHtmb3JtYXRFeGl0Q29kZShwYXJhbXMuZXhpdENvZGUpfSk6ICR7Zm9ybWF0UmVmdXNhbChwYXJhbXMuc3RhbmRhcmRFcnJvcil9ICR7Y29uc2VxdWVuY2V9YDtcbiAgICB9XG4gICAgY2FzZSAndGltZWQtb3V0Jzoge1xuICAgICAgcmV0dXJuIGBXYXJuaW5nOiBcXGAke3BhcmFtcy5jb21tYW5kfVxcYCBkaWQgbm90IGZpbmlzaCB3aXRoaW4gaXRzICR7Zm9ybWF0RHVyYXRpb24ocGFyYW1zLnRpbWVvdXRJbk1pbGxpc2Vjb25kcyl9IGJ1ZGdldCBhbmQgd2FzIGtpbGxlZCAke2Nvc3R9JHtwYXJhbXMuc2lnbmFsID09PSBudWxsID8gJycgOiBgICgke3BhcmFtcy5zaWduYWx9KWB9LCBoYXZpbmcgbGlzdGVkICR7U3RyaW5nKHBhcmFtcy5wYXJ0aWFsUm93Q291bnQpfSBwcm9jZXNzKGVzKSBieSB0aGVuIFx1MjAxNCBzbyBpdCB3YXMgd29ya2luZywgbm90IHJlZnVzaW5nLCBhbmQgdGhlIGJ1ZGdldCBpcyB3aGF0IHJhbiBvdXQuIFRoZSBwYXJ0aWFsIGxpc3RpbmcgaXMgZGlzY2FyZGVkIHJhdGhlciB0aGFuIHVzZWQ6IHRoZSBvd25lZCBzZXQgaXMgYSAqZGlmZmVyZW5jZSogYmV0d2VlbiB0d28gbGlzdGluZ3MsIGFuZCBhIHRydW5jYXRlZCBvbmUgb24gZWl0aGVyIHNpZGUgd291bGQgYm90aCBtaXNzIGEgcHJvY2VzcyB0aGlzIHJ1biBvd25zIGFuZCBjbGFpbSBvbmUgaXQgZG9lcyBub3QuICR7Y29uc2VxdWVuY2V9YDtcbiAgICB9XG4gICAgY2FzZSAnemVyby1yb3dzJzoge1xuICAgICAgcmV0dXJuIGBXYXJuaW5nOiBcXGAke3BhcmFtcy5jb21tYW5kfVxcYCBleGl0ZWQgY2xlYW5seSAke2Nvc3R9IGJ1dCBpdHMgb3V0cHV0IHBhcnNlZCB0byBubyBwcm9jZXNzZXMgYW5kIGNhcnJpZWQgbm8gbm8tbWF0Y2ggbm90aWNlIFx1MjAxNCBhIHdob2xlLWhvc3QgbGlzdGluZyBjYW5ub3QgYmUgZW1wdHkgb24gYSBydW5uaW5nIGhvc3QsIGFuZCBhIGZpbHRlcmVkIG9uZSBzYXlzIHNvIHdoZW4gbm90aGluZyBtYXRjaGVzLiBUcmVhdGluZyBpdCBhcyBhIGZhaWxlZCBxdWVyeS4gJHtjb25zZXF1ZW5jZX1gO1xuICAgIH1cbiAgICBkZWZhdWx0OiB7XG4gICAgICByZXR1cm4gYXNzZXJ0TmV2ZXIocGFyYW1zLm91dGNvbWUpO1xuICAgIH1cbiAgfVxufVxuXG4vKipcbiAqIFJlbmRlcnMgYSBtaWxsaXNlY29uZCBkdXJhdGlvbiBmb3IgYSBsb2cgbGluZS5cbiAqXG4gKiBAcGFyYW0gZHVyYXRpb25Jbk1pbGxpc2Vjb25kcyAtIFRoZSBkdXJhdGlvbi5cbiAqIEByZXR1cm5zIFdob2xlIG1pbGxpc2Vjb25kcyB1bmRlciBhIHNlY29uZCwgYW5kIHNlY29uZHMgdG8gb25lIGRlY2ltYWwgYWJvdmUgaXQuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBmb3JtYXREdXJhdGlvbihkdXJhdGlvbkluTWlsbGlzZWNvbmRzOiBudW1iZXIpOiBzdHJpbmcge1xuICByZXR1cm4gZHVyYXRpb25Jbk1pbGxpc2Vjb25kcyA8IE1JTExJU0VDT05EU19QRVJfU0VDT05EXG4gICAgPyBgJHtTdHJpbmcoZHVyYXRpb25Jbk1pbGxpc2Vjb25kcyl9bXNgXG4gICAgOiBgJHsoZHVyYXRpb25Jbk1pbGxpc2Vjb25kcyAvIE1JTExJU0VDT05EU19QRVJfU0VDT05EKS50b0ZpeGVkKDEpfXNgO1xufVxuXG4vKipcbiAqIFJlbmRlcnMgYSBjaGlsZCdzIGV4aXQgY29kZSwgaW4gdGhlIGJhc2UgYSByZWFkZXIgY2FuIGxvb2sgaXQgdXAgaW4uXG4gKlxuICogQHBhcmFtIGV4aXRDb2RlIC0gVGhlIGV4aXQgY29kZSwgb3IgYG51bGxgIHdoZW4gdGhlIGNoaWxkIHdhcyBraWxsZWQgYmVmb3JlIGV4aXRpbmcuXG4gKiBAcmV0dXJucyBUaGUgY29kZSBpbiBoZXggd2hlbiBpdCBpcyBhbiBgTlRTVEFUVVNgIGZhaWx1cmUsIGluIGRlY2ltYWwgb3RoZXJ3aXNlLlxuICovXG5leHBvcnQgZnVuY3Rpb24gZm9ybWF0RXhpdENvZGUoZXhpdENvZGU6IG51bGwgfCBudW1iZXIpOiBzdHJpbmcge1xuICBpZiAoZXhpdENvZGUgPT09IG51bGwpIHtcbiAgICByZXR1cm4gJ3Vua25vd24nO1xuICB9XG5cbiAgcmV0dXJuIGV4aXRDb2RlID49IE5UU1RBVFVTX0ZBSUxVUkVfRkxPT1IgPyBgMHgke2V4aXRDb2RlLnRvU3RyaW5nKEhFWEFERUNJTUFMX1JBRElYKS50b1VwcGVyQ2FzZSgpfWAgOiBTdHJpbmcoZXhpdENvZGUpO1xufVxuXG4vKipcbiAqIFJlbmRlcnMgd2hhdCB0aGUgY29tbWFuZCBzYWlkIHdoZW4gaXQgcmVmdXNlZCwgYXMgb25lIHNlbnRlbmNlLlxuICpcbiAqIGB0YXNrbGlzdGAgZW5kcyBpdHMgb3duIGBFUlJPUjogXHUyMDI2YCB3aXRoIGEgcGVyaW9kIGFuZCBhIGBcXHJcXHJcXG5gLCBzbyBxdW90aW5nIGl0XG4gKiB2ZXJiYXRpbSBhbmQgYWRkaW5nIHRoZSBzZW50ZW5jZSBicmVhayB0aGlzIGxpbmUgbmVlZHMgcHJvZHVjZWQgYHJlY29nbml6ZWQuLmBcbiAqIFx1MjAxNCB0aGUgdGVybWluYXRvciBpcyBzdXBwbGllZCBvbmx5IHdoZW4gdGhlIHRvb2wgZGlkIG5vdCBzdXBwbHkgb25lLlxuICpcbiAqIEBwYXJhbSBzdGFuZGFyZEVycm9yIC0gV2hhdGV2ZXIgdGhlIGNoaWxkIHdyb3RlIHRvIHN0ZGVyci5cbiAqIEByZXR1cm5zIFRoZSByZWZ1c2FsLCB0cmltbWVkLCBlbmRpbmcgaW4gZXhhY3RseSBvbmUgcGVyaW9kLlxuICovXG5leHBvcnQgZnVuY3Rpb24gZm9ybWF0UmVmdXNhbChzdGFuZGFyZEVycm9yOiBzdHJpbmcpOiBzdHJpbmcge1xuICBjb25zdCByZWZ1c2FsID0gc3RhbmRhcmRFcnJvci50cmltKCk7XG5cbiAgcmV0dXJuIHJlZnVzYWwuZW5kc1dpdGgoJy4nKSA/IHJlZnVzYWwgOiBgJHtyZWZ1c2FsfS5gO1xufVxuXG4vKipcbiAqIERlY2lkZXMgaG93IHRoZSBsaXN0aW5nIGVuZGVkLCBmcm9tIHdoYXQgYGV4ZWNGaWxlYCByZXBvcnRlZC5cbiAqXG4gKiBUaGUgb3JkZXIgb2YgdGhlIGJyYW5jaGVzIGlzIHRoZSBvcmRlciBvZiBzcGVjaWZpY2l0eTogdGhlIHR3byBmYWlsdXJlcyBOb2RlXG4gKiBuYW1lcyBpdHNlbGYgKGBFTk9FTlRgLCB0aGUgYnVmZmVyIGNlaWxpbmcpIGFyZSByZWNvZ25pemVkIGJlZm9yZSB0aGUgb25lc1xuICogdGhhdCBoYXZlIHRvIGJlIGluZmVycmVkIGZyb20gdGhlIGNoaWxkJ3MgZXhpdCwgYW5kIGBjcmFzaGVkYCBpcyBsYXN0XG4gKiBiZWNhdXNlIGl0IGlzIGRlZmluZWQgYnkgdGhlICphYnNlbmNlKiBvZiBhbiBleHBsYW5hdGlvbiBvbiBzdGRlcnIuXG4gKlxuICogQHBhcmFtIHBhcmFtcyAtIFdoYXQgYGV4ZWNGaWxlYCByZXBvcnRlZCwgYW5kIGhvdyBtYW55IHJvd3MgdGhlIG91dHB1dCBwYXJzZWQgdG8uXG4gKiBAcmV0dXJucyBUaGUgb3V0Y29tZS5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHJlc29sdmVIb3N0UHJvY2Vzc1F1ZXJ5T3V0Y29tZShwYXJhbXM6IFJlc29sdmVIb3N0UHJvY2Vzc1F1ZXJ5T3V0Y29tZVBhcmFtcyk6IEhvc3RQcm9jZXNzUXVlcnlPdXRjb21lIHtcbiAgaWYgKCFwYXJhbXMuaGFzRmFpbGVkKSB7XG4gICAgLypcbiAgICAgKiBBIGhvc3QgYWx3YXlzIGhhcyBwcm9jZXNzZXMsIHNvIGEgd2hvbGUtaG9zdCBsaXN0aW5nIHRoYXQgcGFyc2VzIHRvIG5vdGhpbmcgaXMgYSBmYWlsZWQgcXVlcnkgaG93ZXZlciBpdFxuICAgICAqIGV4aXRlZC4gQSBmaWx0ZXJlZCBvbmUgbWF5IGxlZ2l0aW1hdGVseSBtYXRjaCBub3RoaW5nIFx1MjAxNCBidXQgb25seSB3aGVuIGl0IHNheXMgc287IHNpbGVuY2UgaXMgc3RpbGwgYSBmYWlsdXJlLlxuICAgICAqL1xuICAgIHJldHVybiBwYXJhbXMucm93Q291bnQgPT09IDAgJiYgIXBhcmFtcy5oYXNSZXBvcnRlZE5vTWF0Y2ggPyAnemVyby1yb3dzJyA6ICdsaXN0ZWQnO1xuICB9XG5cbiAgcmV0dXJuIHJlc29sdmVIb3N0UXVlcnlGYWlsdXJlKHBhcmFtcyk7XG59XG5cbi8qKlxuICogRGVjaWRlcyB3aGljaCB3YXkgYSBob3N0IHF1ZXJ5IHRoYXQgKipkaWQqKiBmYWlsIGZhaWxlZC5cbiAqXG4gKiBTcGxpdCBvdXQgb2Yge0BsaW5rIHJlc29sdmVIb3N0UHJvY2Vzc1F1ZXJ5T3V0Y29tZX0gc28gYSBzaWJsaW5nIHF1ZXJ5IHdob3NlXG4gKiBzdWNjZXNzIHJ1bGVzIGRpZmZlciBcdTIwMTQgdGhlIHBvcnQtb3duZXIgcXVlcnksIHdoZXJlIHplcm8gb3duZXJzIGlzIGFuIGFuc3dlciBcdTIwMTRcbiAqIGNhbiBzaGFyZSBvbmUgZGVmaW5pdGlvbiBvZiBlYWNoIGZhaWx1cmUgd2l0aG91dCBpbmhlcml0aW5nIGBsaXN0ZWRgIGFuZFxuICogYHplcm8tcm93c2AuXG4gKlxuICogQHBhcmFtIHBhcmFtcyAtIFdoYXQgYGV4ZWNGaWxlYCByZXBvcnRlZCBmb3IgdGhlIGZhaWxlZCBjYWxsLlxuICogQHJldHVybnMgVGhlIGZhaWx1cmUgb3V0Y29tZS5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHJlc29sdmVIb3N0UXVlcnlGYWlsdXJlKHBhcmFtczogUmVzb2x2ZUhvc3RRdWVyeUZhaWx1cmVQYXJhbXMpOiBIb3N0UXVlcnlGYWlsdXJlIHtcbiAgaWYgKHBhcmFtcy5lcnJvckNvZGUgPT09ICdFTk9FTlQnKSB7XG4gICAgcmV0dXJuICdub3QtZm91bmQnO1xuICB9XG5cbiAgaWYgKHBhcmFtcy5lcnJvckNvZGUgPT09ICdFUlJfQ0hJTERfUFJPQ0VTU19TVERJT19NQVhCVUZGRVInKSB7XG4gICAgcmV0dXJuICdvdXRwdXQtb3ZlcnJhbic7XG4gIH1cblxuICBpZiAocGFyYW1zLmlzS2lsbGVkKSB7XG4gICAgcmV0dXJuICd0aW1lZC1vdXQnO1xuICB9XG5cbiAgLy8gYHRhc2tsaXN0YCBhbmQgYHBzYCBib3RoIGV4cGxhaW4gYSByZWZ1c2FsIG9uIHN0ZGVyciwgc28gc2lsZW5jZSBtZWFucyB0aGUgY2hpbGQgbmV2ZXIgZ290IHRvIG9iamVjdC5cbiAgcmV0dXJuIHBhcmFtcy5zdGFuZGFyZEVycm9yLnRyaW0oKSA9PT0gJycgPyAnY3Jhc2hlZCcgOiAncmVmdXNlZCc7XG59XG4iXSwKICAibWFwcGluZ3MiOiAiOzs7Ozs7Ozs7Ozs7Ozs7Ozs7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQW9EQSx5QkFBNEI7QUFVNUIsTUFBTSx5QkFBeUI7QUFLL0IsTUFBTSxvQkFBb0I7QUFLMUIsTUFBTSwwQkFBMEI7QUFtSHpCLFNBQVMsNkJBQTZCLFFBQWdFO0FBQzNHLFFBQU0sT0FBTyxTQUFTLGVBQWUsT0FBTyxxQkFBcUIsQ0FBQztBQUNsRSxRQUFNLGNBQWMsT0FBTyxlQUFlO0FBRTFDLFVBQVEsT0FBTyxTQUFTO0FBQUEsSUFDdEIsS0FBSyxXQUFXO0FBQ2QsYUFBTyxjQUFjLE9BQU8sT0FBTyxXQUFXLElBQUksb0NBQW9DLGVBQWUsT0FBTyxRQUFRLENBQUMsd0JBQXdCLE9BQU8sT0FBTyxlQUFlLENBQUMsNkxBQXdMLFdBQVc7QUFBQSxJQUNoWDtBQUFBLElBQ0EsS0FBSyxVQUFVO0FBQ2IsYUFBTztBQUFBLElBQ1Q7QUFBQSxJQUNBLEtBQUssYUFBYTtBQUNoQixhQUFPLGNBQWMsT0FBTyxPQUFPLDhCQUE4QixJQUFJLDJDQUEyQyxXQUFXO0FBQUEsSUFDN0g7QUFBQSxJQUNBLEtBQUssa0JBQWtCO0FBQ3JCLGFBQU8sY0FBYyxPQUFPLE9BQU8sMkJBQTJCLElBQUkscUZBQXFGLFdBQVc7QUFBQSxJQUNwSztBQUFBLElBQ0EsS0FBSyxXQUFXO0FBQ2QsYUFBTyxjQUFjLE9BQU8sT0FBTywwQkFBMEIsSUFBSSxVQUFVLGVBQWUsT0FBTyxRQUFRLENBQUMsTUFBTSxjQUFjLE9BQU8sYUFBYSxDQUFDLElBQUksV0FBVztBQUFBLElBQ3BLO0FBQUEsSUFDQSxLQUFLLGFBQWE7QUFDaEIsYUFBTyxjQUFjLE9BQU8sT0FBTyxnQ0FBZ0MsZUFBZSxPQUFPLHFCQUFxQixDQUFDLDBCQUEwQixJQUFJLEdBQUcsT0FBTyxXQUFXLE9BQU8sS0FBSyxLQUFLLE9BQU8sTUFBTSxHQUFHLG1CQUFtQixPQUFPLE9BQU8sZUFBZSxDQUFDLCtTQUEwUyxXQUFXO0FBQUEsSUFDM2lCO0FBQUEsSUFDQSxLQUFLLGFBQWE7QUFDaEIsYUFBTyxjQUFjLE9BQU8sT0FBTyxxQkFBcUIsSUFBSSx3TkFBbU4sV0FBVztBQUFBLElBQzVSO0FBQUEsSUFDQSxTQUFTO0FBQ1AsaUJBQU8sZ0NBQVksT0FBTyxPQUFPO0FBQUEsSUFDbkM7QUFBQSxFQUNGO0FBQ0Y7QUFRTyxTQUFTLGVBQWUsd0JBQXdDO0FBQ3JFLFNBQU8seUJBQXlCLDBCQUM1QixHQUFHLE9BQU8sc0JBQXNCLENBQUMsT0FDakMsSUFBSSx5QkFBeUIseUJBQXlCLFFBQVEsQ0FBQyxDQUFDO0FBQ3RFO0FBUU8sU0FBUyxlQUFlLFVBQWlDO0FBQzlELE1BQUksYUFBYSxNQUFNO0FBQ3JCLFdBQU87QUFBQSxFQUNUO0FBRUEsU0FBTyxZQUFZLHlCQUF5QixLQUFLLFNBQVMsU0FBUyxpQkFBaUIsRUFBRSxZQUFZLENBQUMsS0FBSyxPQUFPLFFBQVE7QUFDekg7QUFZTyxTQUFTLGNBQWMsZUFBK0I7QUFDM0QsUUFBTSxVQUFVLGNBQWMsS0FBSztBQUVuQyxTQUFPLFFBQVEsU0FBUyxHQUFHLElBQUksVUFBVSxHQUFHLE9BQU87QUFDckQ7QUFhTyxTQUFTLCtCQUErQixRQUF1RTtBQUNwSCxNQUFJLENBQUMsT0FBTyxXQUFXO0FBS3JCLFdBQU8sT0FBTyxhQUFhLEtBQUssQ0FBQyxPQUFPLHFCQUFxQixjQUFjO0FBQUEsRUFDN0U7QUFFQSxTQUFPLHdCQUF3QixNQUFNO0FBQ3ZDO0FBYU8sU0FBUyx3QkFBd0IsUUFBeUQ7QUFDL0YsTUFBSSxPQUFPLGNBQWMsVUFBVTtBQUNqQyxXQUFPO0FBQUEsRUFDVDtBQUVBLE1BQUksT0FBTyxjQUFjLHFDQUFxQztBQUM1RCxXQUFPO0FBQUEsRUFDVDtBQUVBLE1BQUksT0FBTyxVQUFVO0FBQ25CLFdBQU87QUFBQSxFQUNUO0FBR0EsU0FBTyxPQUFPLGNBQWMsS0FBSyxNQUFNLEtBQUssWUFBWTtBQUMxRDsiLAogICJuYW1lcyI6IFtdCn0K
|
|
@@ -0,0 +1,196 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* @file
|
|
3
|
+
*
|
|
4
|
+
* Pure classification of the host process listing — deciding, from how
|
|
5
|
+
* `tasklist` / `ps` ended, *which* way it failed, and saying so in one line.
|
|
6
|
+
*
|
|
7
|
+
* The listing is what names the emulator backend a run owns, and therefore the
|
|
8
|
+
* only PID teardown can escalate to (**L56**). It is best-effort by design: a
|
|
9
|
+
* listing that cannot be produced yields no PIDs rather than failing the run.
|
|
10
|
+
* What it must never be is **unexplained**, and for three weeks it was:
|
|
11
|
+
*
|
|
12
|
+
* ```text
|
|
13
|
+
* Warning: could not list host processes (`tasklist`): Command failed: tasklist /FO CSV /NH
|
|
14
|
+
*
|
|
15
|
+
* Warning: `tasklist` listed no processes.
|
|
16
|
+
* ```
|
|
17
|
+
*
|
|
18
|
+
* Two defects in four lines. The pair is *contradictory* — the first says the
|
|
19
|
+
* command failed, the second says it ran and found nothing — and they were
|
|
20
|
+
* emitted together for a single failure, because a failed call resolves `''`
|
|
21
|
+
* and an empty string parses to zero rows. `zero-rows` exists to catch a
|
|
22
|
+
* listing that succeeded and yet returned nothing, which on a real host can
|
|
23
|
+
* only be a failed query; it is not a second opinion on a call that already
|
|
24
|
+
* reported an error.
|
|
25
|
+
*
|
|
26
|
+
* And the surviving diagnostic is `error.message` alone, which for `execFile`
|
|
27
|
+
* is `Command failed: <cmd>\n<stderr>` — so the log carried the command back
|
|
28
|
+
* to the reader and threw away everything that identifies the failure:
|
|
29
|
+
* `error.code`, `error.killed`, `error.signal`, and how long the call took.
|
|
30
|
+
* Measured 2026-09-23 on this host, that discarded evidence is decisive:
|
|
31
|
+
*
|
|
32
|
+
* - `tasklist` **always** writes `ERROR: <reason>` to stderr when it objects —
|
|
33
|
+
* a bad filter, an unreachable host — and exits 1. So a non-zero exit with
|
|
34
|
+
* **empty** stderr is not `tasklist` refusing; it is the host killing the
|
|
35
|
+
* child, and `crashed` says so.
|
|
36
|
+
* - The exact spawn the harness makes succeeds 39 times out of 39 from an idle
|
|
37
|
+
* Node process (0.6-4.3s, 26 KB, ~530 rows, against a 30s budget and an 8 MB
|
|
38
|
+
* ceiling). So "the spawn is wrong" — a missing shell, a PATH the child did
|
|
39
|
+
* not inherit, an undersized buffer — is ruled out: each has its **own** message
|
|
40
|
+
* (`spawn tasklist ENOENT`, `stdout maxBuffer length exceeded`), and none of
|
|
41
|
+
* them is the one observed.
|
|
42
|
+
* - Under an emulator boot the same call inflates to ~9x its idle cost, which
|
|
43
|
+
* is the contention `HOST_PROCESS_QUERY_TIMEOUT_IN_MILLISECONDS` is sized
|
|
44
|
+
* for and the failure the old line could not distinguish from a crash.
|
|
45
|
+
*
|
|
46
|
+
* This is the same fault `avd-probe-verdict.ts` was written for — a probe that
|
|
47
|
+
* discarded its error, leaving "never answered" indistinguishable from "the
|
|
48
|
+
* answer is no" — and it is fixed the same way: classify, name the
|
|
49
|
+
* consequence, and keep the classification pure so it is unit-testable while
|
|
50
|
+
* the `execFile` glue stays in the integration-only caller.
|
|
51
|
+
*/
|
|
52
|
+
/**
|
|
53
|
+
* Parameters for {@link buildHostProcessQueryMessage}.
|
|
54
|
+
*/
|
|
55
|
+
export interface BuildHostProcessQueryMessageParams {
|
|
56
|
+
/**
|
|
57
|
+
The command that was run, for the reader to try by hand — e.g. `tasklist /FO CSV /NH`.
|
|
58
|
+
*/
|
|
59
|
+
readonly command: string;
|
|
60
|
+
/**
|
|
61
|
+
What the failure costs the caller, closing the line. Defaults to the teardown consequence, which is what the harness's own listing loses; the wedge probe states what *it* loses instead.
|
|
62
|
+
*/
|
|
63
|
+
readonly consequence?: string | undefined;
|
|
64
|
+
/**
|
|
65
|
+
How long the call took before it ended, in milliseconds.
|
|
66
|
+
*/
|
|
67
|
+
readonly elapsedInMilliseconds: number;
|
|
68
|
+
/**
|
|
69
|
+
The child's exit code, when it exited rather than failing to start or being killed.
|
|
70
|
+
*/
|
|
71
|
+
readonly exitCode: null | number;
|
|
72
|
+
/**
|
|
73
|
+
The verdict from {@link resolveHostProcessQueryOutcome}.
|
|
74
|
+
*/
|
|
75
|
+
readonly outcome: HostProcessQueryOutcome;
|
|
76
|
+
/**
|
|
77
|
+
How many processes the output parsed to — the *partial* listing on a failure, which is the evidence that the command was working when it died.
|
|
78
|
+
*/
|
|
79
|
+
readonly partialRowCount: number;
|
|
80
|
+
/**
|
|
81
|
+
The signal the child was killed with, when it was killed.
|
|
82
|
+
*/
|
|
83
|
+
readonly signal: null | string;
|
|
84
|
+
/**
|
|
85
|
+
Whatever the child wrote to stderr — quoted for `refused`, and the emptiness that identifies `crashed`.
|
|
86
|
+
*/
|
|
87
|
+
readonly standardError: string;
|
|
88
|
+
/**
|
|
89
|
+
The budget the call was given, in milliseconds.
|
|
90
|
+
*/
|
|
91
|
+
readonly timeoutInMilliseconds: number;
|
|
92
|
+
}
|
|
93
|
+
/**
|
|
94
|
+
* How the host process listing ended.
|
|
95
|
+
*
|
|
96
|
+
* `listed` is the only success. The rest are distinct failures on purpose: they
|
|
97
|
+
* need different fixes, and the line they used to share named none of them.
|
|
98
|
+
*/
|
|
99
|
+
export type HostProcessQueryOutcome = 'listed' | 'zero-rows' | HostQueryFailure;
|
|
100
|
+
/**
|
|
101
|
+
* The ways a host query can fail, shared by every query that classifies its ending.
|
|
102
|
+
*/
|
|
103
|
+
export type HostQueryFailure = 'crashed' | 'not-found' | 'output-overran' | 'refused' | 'timed-out';
|
|
104
|
+
/**
|
|
105
|
+
* Parameters for {@link resolveHostProcessQueryOutcome}.
|
|
106
|
+
*/
|
|
107
|
+
export interface ResolveHostProcessQueryOutcomeParams {
|
|
108
|
+
/**
|
|
109
|
+
`execFile`'s `error.code`: the numeric exit code, or a string like `ENOENT` when the child never ran.
|
|
110
|
+
*/
|
|
111
|
+
readonly errorCode: null | number | string;
|
|
112
|
+
/**
|
|
113
|
+
Whether `execFile` reported an error at all.
|
|
114
|
+
*/
|
|
115
|
+
readonly hasFailed: boolean;
|
|
116
|
+
/**
|
|
117
|
+
Whether a **filtered** query affirmatively reported that nothing matched (`checkIsNoMatchReported`) — the one way an empty answer is an answer.
|
|
118
|
+
*/
|
|
119
|
+
readonly hasReportedNoMatch: boolean;
|
|
120
|
+
/**
|
|
121
|
+
`execFile`'s `error.killed`: whether the budget expired and the child was killed.
|
|
122
|
+
*/
|
|
123
|
+
readonly isKilled: boolean;
|
|
124
|
+
/**
|
|
125
|
+
How many processes the output parsed to.
|
|
126
|
+
*/
|
|
127
|
+
readonly rowCount: number;
|
|
128
|
+
/**
|
|
129
|
+
Whatever the child wrote to stderr.
|
|
130
|
+
*/
|
|
131
|
+
readonly standardError: string;
|
|
132
|
+
}
|
|
133
|
+
/**
|
|
134
|
+
* Parameters for {@link resolveHostQueryFailure}.
|
|
135
|
+
*/
|
|
136
|
+
export type ResolveHostQueryFailureParams = Pick<ResolveHostProcessQueryOutcomeParams, 'errorCode' | 'isKilled' | 'standardError'>;
|
|
137
|
+
/**
|
|
138
|
+
* Builds the single line the listing logs for an outcome.
|
|
139
|
+
*
|
|
140
|
+
* One line, never two: the contradictory pair in this file's header is the
|
|
141
|
+
* defect this replaces. `listed` has nothing to report, so it returns
|
|
142
|
+
* `undefined` rather than a cheerful line on the hot path.
|
|
143
|
+
*
|
|
144
|
+
* @param params - The outcome plus the command, the budget and what the child left behind.
|
|
145
|
+
* @returns The warning to log, or `undefined` when the listing succeeded.
|
|
146
|
+
*/
|
|
147
|
+
export declare function buildHostProcessQueryMessage(params: BuildHostProcessQueryMessageParams): string | undefined;
|
|
148
|
+
/**
|
|
149
|
+
* Renders a millisecond duration for a log line.
|
|
150
|
+
*
|
|
151
|
+
* @param durationInMilliseconds - The duration.
|
|
152
|
+
* @returns Whole milliseconds under a second, and seconds to one decimal above it.
|
|
153
|
+
*/
|
|
154
|
+
export declare function formatDuration(durationInMilliseconds: number): string;
|
|
155
|
+
/**
|
|
156
|
+
* Renders a child's exit code, in the base a reader can look it up in.
|
|
157
|
+
*
|
|
158
|
+
* @param exitCode - The exit code, or `null` when the child was killed before exiting.
|
|
159
|
+
* @returns The code in hex when it is an `NTSTATUS` failure, in decimal otherwise.
|
|
160
|
+
*/
|
|
161
|
+
export declare function formatExitCode(exitCode: null | number): string;
|
|
162
|
+
/**
|
|
163
|
+
* Renders what the command said when it refused, as one sentence.
|
|
164
|
+
*
|
|
165
|
+
* `tasklist` ends its own `ERROR: …` with a period and a `\r\r\n`, so quoting it
|
|
166
|
+
* verbatim and adding the sentence break this line needs produced `recognized..`
|
|
167
|
+
* — the terminator is supplied only when the tool did not supply one.
|
|
168
|
+
*
|
|
169
|
+
* @param standardError - Whatever the child wrote to stderr.
|
|
170
|
+
* @returns The refusal, trimmed, ending in exactly one period.
|
|
171
|
+
*/
|
|
172
|
+
export declare function formatRefusal(standardError: string): string;
|
|
173
|
+
/**
|
|
174
|
+
* Decides how the listing ended, from what `execFile` reported.
|
|
175
|
+
*
|
|
176
|
+
* The order of the branches is the order of specificity: the two failures Node
|
|
177
|
+
* names itself (`ENOENT`, the buffer ceiling) are recognized before the ones
|
|
178
|
+
* that have to be inferred from the child's exit, and `crashed` is last
|
|
179
|
+
* because it is defined by the *absence* of an explanation on stderr.
|
|
180
|
+
*
|
|
181
|
+
* @param params - What `execFile` reported, and how many rows the output parsed to.
|
|
182
|
+
* @returns The outcome.
|
|
183
|
+
*/
|
|
184
|
+
export declare function resolveHostProcessQueryOutcome(params: ResolveHostProcessQueryOutcomeParams): HostProcessQueryOutcome;
|
|
185
|
+
/**
|
|
186
|
+
* Decides which way a host query that **did** fail failed.
|
|
187
|
+
*
|
|
188
|
+
* Split out of {@link resolveHostProcessQueryOutcome} so a sibling query whose
|
|
189
|
+
* success rules differ — the port-owner query, where zero owners is an answer —
|
|
190
|
+
* can share one definition of each failure without inheriting `listed` and
|
|
191
|
+
* `zero-rows`.
|
|
192
|
+
*
|
|
193
|
+
* @param params - What `execFile` reported for the failed call.
|
|
194
|
+
* @returns The failure outcome.
|
|
195
|
+
*/
|
|
196
|
+
export declare function resolveHostQueryFailure(params: ResolveHostQueryFailureParams): HostQueryFailure;
|
package/dist/lib/cjs/index.cjs
CHANGED
|
@@ -27,6 +27,8 @@ __export(index_exports, {
|
|
|
27
27
|
DEFAULT_EVAL_CAP_IN_MILLISECONDS: () => import_eval_cap.DEFAULT_EVAL_CAP_IN_MILLISECONDS,
|
|
28
28
|
DEFAULT_MINIMUM_KEYBOARD_HEIGHT_IN_PIXELS: () => import_soft_keyboard_geometry.DEFAULT_MINIMUM_KEYBOARD_HEIGHT_IN_PIXELS,
|
|
29
29
|
DEFAULT_OBSIDIAN_VERSION_SPECS: () => import_version_matrix.DEFAULT_OBSIDIAN_VERSION_SPECS,
|
|
30
|
+
DEFAULT_STATUS_BAR_EDGE_MARGIN_IN_PIXELS: () => import_paint_out_status_bar.DEFAULT_STATUS_BAR_EDGE_MARGIN_IN_PIXELS,
|
|
31
|
+
DEFAULT_STATUS_BAR_SAMPLE_INSET_IN_PIXELS: () => import_paint_out_status_bar.DEFAULT_STATUS_BAR_SAMPLE_INSET_IN_PIXELS,
|
|
30
32
|
DesktopCdpTransport: () => import_transport_desktop_cdp.DesktopCdpTransport,
|
|
31
33
|
DesktopOnlyPluginSkipError: () => import_desktop_only_plugin_skip_error.DesktopOnlyPluginSkipError,
|
|
32
34
|
DeviceSettingNamespace: () => import_device_settings_command.DeviceSettingNamespace,
|
|
@@ -49,8 +51,10 @@ __export(index_exports, {
|
|
|
49
51
|
buildDeviceSettingsCommandArguments: () => import_device_settings_command.buildDeviceSettingsCommandArguments,
|
|
50
52
|
buildLabelSvg: () => import_label_screenshot.buildLabelSvg,
|
|
51
53
|
buildSoftKeyboardDiagnosticMessage: () => import_soft_keyboard_geometry.buildSoftKeyboardDiagnosticMessage,
|
|
54
|
+
buildStatusBarBandFailureMessage: () => import_paint_out_status_bar.buildStatusBarBandFailureMessage,
|
|
52
55
|
captureDeviceScreenshot: () => import_device_screenshot.captureDeviceScreenshot,
|
|
53
56
|
captureObsidianScreenshot: () => import_capture_obsidian_screenshot.captureObsidianScreenshot,
|
|
57
|
+
checkIsInputMethodShown: () => import_soft_keyboard_geometry.checkIsInputMethodShown,
|
|
54
58
|
checkIsMobileTransport: () => import_transport_options.checkIsMobileTransport,
|
|
55
59
|
checkIsSoftKeyboardUp: () => import_soft_keyboard_geometry.checkIsSoftKeyboardUp,
|
|
56
60
|
computeFitToCanvas: () => import_fit_screenshot.computeFitToCanvas,
|
|
@@ -70,6 +74,7 @@ __export(index_exports, {
|
|
|
70
74
|
labelScreenshot: () => import_label_screenshot.labelScreenshot,
|
|
71
75
|
measureLabelCaption: () => import_label_screenshot.measureLabelCaption,
|
|
72
76
|
openObsidianSettingsTab: () => import_open_obsidian_settings_tab.openObsidianSettingsTab,
|
|
77
|
+
paintOutStatusBar: () => import_paint_out_status_bar.paintOutStatusBar,
|
|
73
78
|
parseInputMethodState: () => import_soft_keyboard_geometry.parseInputMethodState,
|
|
74
79
|
pollInObsidian: () => import_poll_in_obsidian.pollInObsidian,
|
|
75
80
|
raiseSoftKeyboard: () => import_soft_keyboard.raiseSoftKeyboard,
|
|
@@ -85,6 +90,7 @@ __export(index_exports, {
|
|
|
85
90
|
resolveInstallerCompatibility: () => import_installer_compatibility.resolveInstallerCompatibility,
|
|
86
91
|
resolveMissingInjectedPlugins: () => import_demo_vault_populate.resolveMissingInjectedPlugins,
|
|
87
92
|
resolveSoftKeyboardTapPoints: () => import_soft_keyboard_geometry.resolveSoftKeyboardTapPoints,
|
|
93
|
+
resolveStatusBarBand: () => import_paint_out_status_bar.resolveStatusBarBand,
|
|
88
94
|
restoreAppConfig: () => import_app_config.restoreAppConfig,
|
|
89
95
|
runAdbBinary: () => import_adb.runAdbBinary,
|
|
90
96
|
runAdbText: () => import_adb.runAdbText,
|
|
@@ -137,6 +143,7 @@ var import_obsidian_metadata = require("./obsidian-metadata.cjs");
|
|
|
137
143
|
var import_obsidian_version = require("./obsidian-version.cjs");
|
|
138
144
|
var import_open_obsidian_settings_tab = require("./open-obsidian-settings-tab.cjs");
|
|
139
145
|
var import_owned_instance_exited_error = require("./owned-instance-exited-error.cjs");
|
|
146
|
+
var import_paint_out_status_bar = require("./paint-out-status-bar.cjs");
|
|
140
147
|
var import_poll_in_obsidian = require("./poll-in-obsidian.cjs");
|
|
141
148
|
var import_renderer_failed_to_initialize_error = require("./renderer-failed-to-initialize-error.cjs");
|
|
142
149
|
var import_resolve_emulator_device_id = require("./resolve-emulator-device-id.cjs");
|
|
@@ -163,6 +170,8 @@ var import_version_matrix = require("./version-matrix.cjs");
|
|
|
163
170
|
DEFAULT_EVAL_CAP_IN_MILLISECONDS,
|
|
164
171
|
DEFAULT_MINIMUM_KEYBOARD_HEIGHT_IN_PIXELS,
|
|
165
172
|
DEFAULT_OBSIDIAN_VERSION_SPECS,
|
|
173
|
+
DEFAULT_STATUS_BAR_EDGE_MARGIN_IN_PIXELS,
|
|
174
|
+
DEFAULT_STATUS_BAR_SAMPLE_INSET_IN_PIXELS,
|
|
166
175
|
DesktopCdpTransport,
|
|
167
176
|
DesktopOnlyPluginSkipError,
|
|
168
177
|
DeviceSettingNamespace,
|
|
@@ -185,8 +194,10 @@ var import_version_matrix = require("./version-matrix.cjs");
|
|
|
185
194
|
buildDeviceSettingsCommandArguments,
|
|
186
195
|
buildLabelSvg,
|
|
187
196
|
buildSoftKeyboardDiagnosticMessage,
|
|
197
|
+
buildStatusBarBandFailureMessage,
|
|
188
198
|
captureDeviceScreenshot,
|
|
189
199
|
captureObsidianScreenshot,
|
|
200
|
+
checkIsInputMethodShown,
|
|
190
201
|
checkIsMobileTransport,
|
|
191
202
|
checkIsSoftKeyboardUp,
|
|
192
203
|
computeFitToCanvas,
|
|
@@ -206,6 +217,7 @@ var import_version_matrix = require("./version-matrix.cjs");
|
|
|
206
217
|
labelScreenshot,
|
|
207
218
|
measureLabelCaption,
|
|
208
219
|
openObsidianSettingsTab,
|
|
220
|
+
paintOutStatusBar,
|
|
209
221
|
parseInputMethodState,
|
|
210
222
|
pollInObsidian,
|
|
211
223
|
raiseSoftKeyboard,
|
|
@@ -221,6 +233,7 @@ var import_version_matrix = require("./version-matrix.cjs");
|
|
|
221
233
|
resolveInstallerCompatibility,
|
|
222
234
|
resolveMissingInjectedPlugins,
|
|
223
235
|
resolveSoftKeyboardTapPoints,
|
|
236
|
+
resolveStatusBarBand,
|
|
224
237
|
restoreAppConfig,
|
|
225
238
|
runAdbBinary,
|
|
226
239
|
runAdbText,
|
|
@@ -237,4 +250,4 @@ var import_version_matrix = require("./version-matrix.cjs");
|
|
|
237
250
|
withSoftKeyboardEnabled,
|
|
238
251
|
writeDeviceSetting
|
|
239
252
|
});
|
|
240
|
-
//# sourceMappingURL=data:application/json;base64,ewogICJ2ZXJzaW9uIjogMywKICAic291cmNlcyI6IFsiLi4vLi4vLi4vc3JjL2luZGV4LnRzIl0sCiAgInNvdXJjZXNDb250ZW50IjogWyIvKipcbiAqIEBmaWxlXG4gKlxuICogQ29udGFpbnMgdGhlIGVudHJ5IHBvaW50IGZvciB0aGUgaW50ZWdyYXRpb24gdGVzdGluZyBtb2R1bGUuXG4gKi9cblxuZXhwb3J0IHR5cGUgeyBSdW5BZGJQYXJhbXMgfSBmcm9tICcuL2FkYi5janMnO1xuZXhwb3J0IHtcbiAgcnVuQWRiQmluYXJ5LFxuICBydW5BZGJUZXh0LFxuICBydW5BZGJUZXh0V2l0aG91dERldmljZVxufSBmcm9tICcuL2FkYi5janMnO1xuZXhwb3J0IHR5cGUge1xuICBBcHBDb25maWdSZXN0b3JlLFxuICBHZXRBcHBDb25maWdQYXJhbXMsXG4gIFNldEFwcENvbmZpZ1BhcmFtcyxcbiAgV2l0aEFwcENvbmZpZ1BhcmFtc1xufSBmcm9tICcuL2FwcC1jb25maWcuY2pzJztcbmV4cG9ydCB7XG4gIGdldEFwcENvbmZpZyxcbiAgcmVzdG9yZUFwcENvbmZpZyxcbiAgc2V0QXBwQ29uZmlnLFxuICB3aXRoQXBwQ29uZmlnXG59IGZyb20gJy4vYXBwLWNvbmZpZy5janMnO1xuZXhwb3J0IHR5cGUge1xuICBBc2FyRmFsbGJhY2ssXG4gIEFzYXJGYWxsYmFja1RpZXIsXG4gIFJlc29sdmVBc2FyRmFsbGJhY2tQYXJhbXNcbn0gZnJvbSAnLi9hc2FyLWZhbGxiYWNrLWRldGVjdGlvbi5janMnO1xuZXhwb3J0IHsgcmVzb2x2ZUFzYXJGYWxsYmFjayB9IGZyb20gJy4vYXNhci1mYWxsYmFjay1kZXRlY3Rpb24uY2pzJztcbmV4cG9ydCB0eXBlIHsgQ2FwdHVyZU9ic2lkaWFuU2NyZWVuc2hvdE9wdGlvbnMgfSBmcm9tICcuL2NhcHR1cmUtb2JzaWRpYW4tc2NyZWVuc2hvdC5janMnO1xuZXhwb3J0IHsgY2FwdHVyZU9ic2lkaWFuU2NyZWVuc2hvdCB9IGZyb20gJy4vY2FwdHVyZS1vYnNpZGlhbi1zY3JlZW5zaG90LmNqcyc7XG5leHBvcnQgdHlwZSB7XG4gIENhcHR1cmVTY3JlZW5zaG90UGFyYW1zLFxuICBQbmdEaW1lbnNpb25zXG59IGZyb20gJy4vY2FwdHVyZS1zY3JlZW5zaG90LmNqcyc7XG5leHBvcnQge1xuICBidWlsZERldmljZU1ldHJpY3NPdmVycmlkZSxcbiAgZGVjb2RlQmFzZTY0UG5nLFxuICBpc1BuZyxcbiAgcmVhZFBuZ0RpbWVuc2lvbnNcbn0gZnJvbSAnLi9jYXB0dXJlLXNjcmVlbnNob3QuY2pzJztcbmV4cG9ydCB0eXBlIHsgQ2RwQ29tbWFuZFRpbWVvdXRFcnJvckNvbnN0cnVjdG9yUGFyYW1zIH0gZnJvbSAnLi9jZHAtY29tbWFuZC10aW1lb3V0LWVycm9yLmNqcyc7XG5leHBvcnQgeyBDZHBDb21tYW5kVGltZW91dEVycm9yIH0gZnJvbSAnLi9jZHAtY29tbWFuZC10aW1lb3V0LWVycm9yLmNqcyc7XG5leHBvcnQgdHlwZSB7IENvbmZpZ0RpcmVjdG9yeUZhbGxiYWNrRXJyb3JDb25zdHJ1Y3RvclBhcmFtcyB9IGZyb20gJy4vY29uZmlnLWRpcmVjdG9yeS1mYWxsYmFjay1lcnJvci5janMnO1xuZXhwb3J0IHsgQ29uZmlnRGlyZWN0b3J5RmFsbGJhY2tFcnJvciB9IGZyb20gJy4vY29uZmlnLWRpcmVjdG9yeS1mYWxsYmFjay1lcnJvci5janMnO1xuZXhwb3J0IHtcbiAgYXNzZXJ0VmFsaWRDb25maWdEaXJlY3RvcnksXG4gIERFRkFVTFRfQ09ORklHX0RJUkVDVE9SWVxufSBmcm9tICcuL2NvbmZpZy1kaXJlY3RvcnkuY2pzJztcbmV4cG9ydCB0eXBlIHtcbiAgQ2RwQ29ubmVjdGlvbixcbiAgQ29ubmVjdFRvQ2RwT3B0aW9uc1xufSBmcm9tICcuL2Nvbm5lY3QtdG8tY2RwLmNqcyc7XG5leHBvcnQgeyBjb25uZWN0VG9DZHAgfSBmcm9tICcuL2Nvbm5lY3QtdG8tY2RwLmNqcyc7XG5leHBvcnQgdHlwZSB7XG4gIENvbnRleHRBcmd1bWVudHMsXG4gIENvbnRleHRPZlxufSBmcm9tICcuL2NvbnRleHQtaWQuY2pzJztcbmV4cG9ydCB7IENvbnRleHRJZCB9IGZyb20gJy4vY29udGV4dC1pZC5janMnO1xuZXhwb3J0IHR5cGUge1xuICBTZXR1cEVycm9yUmVzb2x2ZXIsXG4gIFRyYW5zcG9ydE9wdGlvbnNSZXNvbHZlcixcbiAgVmF1bHRQYXRoUmVzb2x2ZXJcbn0gZnJvbSAnLi9jb250ZXh0LXByb3ZpZGVyLmNqcyc7XG5leHBvcnQge1xuICBzZXRTZXR1cEVycm9yUmVzb2x2ZXIsXG4gIHNldFRyYW5zcG9ydE9wdGlvbnNSZXNvbHZlcixcbiAgc2V0VmF1bHRQYXRoUmVzb2x2ZXJcbn0gZnJvbSAnLi9jb250ZXh0LXByb3ZpZGVyLmNqcyc7XG5leHBvcnQgdHlwZSB7XG4gIEJvb3RzdHJhcERlbW9WYXVsdFBsdWdpbnNQYXJhbXMsXG4gIEJvb3RzdHJhcERlbW9WYXVsdFBsdWdpbnNSZXN1bHQsXG4gIEJ1aWxkRGVtb1ZhdWx0UG9wdWxhdGVBc3luY1BhcmFtcyxcbiAgSW5zdGFsbGVkUGx1Z2luSW5mb1xufSBmcm9tICcuL2RlbW8tdmF1bHQtYm9vdHN0cmFwLmNqcyc7XG5leHBvcnQge1xuICBib290c3RyYXBEZW1vVmF1bHRQbHVnaW5zLFxuICBidWlsZERlbW9WYXVsdFBvcHVsYXRlQXN5bmNcbn0gZnJvbSAnLi9kZW1vLXZhdWx0LWJvb3RzdHJhcC5janMnO1xuZXhwb3J0IHR5cGUge1xuICBCdWlsZERlbW9WYXVsdFBvcHVsYXRlUGFyYW1zLFxuICBJbmplY3RQbHVnaW5QYXJhbXMsXG4gIFJlc29sdmVNaXNzaW5nSW5qZWN0ZWRQbHVnaW5zUGFyYW1zXG59IGZyb20gJy4vZGVtby12YXVsdC1wb3B1bGF0ZS5janMnO1xuZXhwb3J0IHtcbiAgYnVpbGREZW1vVmF1bHRQb3B1bGF0ZSxcbiAgcmVzb2x2ZU1pc3NpbmdJbmplY3RlZFBsdWdpbnNcbn0gZnJvbSAnLi9kZW1vLXZhdWx0LXBvcHVsYXRlLmNqcyc7XG5leHBvcnQgdHlwZSB7IFJlYWREZW1vVmF1bHRUcmVlUGFyYW1zIH0gZnJvbSAnLi9kZW1vLXZhdWx0LXRyZWUuY2pzJztcbmV4cG9ydCB7IHJlYWREZW1vVmF1bHRUcmVlIH0gZnJvbSAnLi9kZW1vLXZhdWx0LXRyZWUuY2pzJztcbmV4cG9ydCB7IERlc2t0b3BPbmx5UGx1Z2luU2tpcEVycm9yIH0gZnJvbSAnLi9kZXNrdG9wLW9ubHktcGx1Z2luLXNraXAtZXJyb3IuY2pzJztcbmV4cG9ydCB0eXBlIHsgQ2FwdHVyZURldmljZVNjcmVlbnNob3RQYXJhbXMgfSBmcm9tICcuL2RldmljZS1zY3JlZW5zaG90LmNqcyc7XG5leHBvcnQgeyBjYXB0dXJlRGV2aWNlU2NyZWVuc2hvdCB9IGZyb20gJy4vZGV2aWNlLXNjcmVlbnNob3QuY2pzJztcbmV4cG9ydCB0eXBlIHtcbiAgRGV2aWNlU2V0dGluZ1Jlc3RvcmUsXG4gIERldmljZVNldHRpbmdSZXN0b3JlRGVsZXRlLFxuICBEZXZpY2VTZXR0aW5nUmVzdG9yZVdyaXRlXG59IGZyb20gJy4vZGV2aWNlLXNldHRpbmctcmVzdG9yZS5janMnO1xuZXhwb3J0IHtcbiAgRGV2aWNlU2V0dGluZ1Jlc3RvcmVLaW5kLFxuICByZXNvbHZlRGV2aWNlU2V0dGluZ1Jlc3RvcmVcbn0gZnJvbSAnLi9kZXZpY2Utc2V0dGluZy1yZXN0b3JlLmNqcyc7XG5leHBvcnQgdHlwZSB7IEJ1aWxkRGV2aWNlU2V0dGluZ3NDb21tYW5kQXJndW1lbnRzUGFyYW1zIH0gZnJvbSAnLi9kZXZpY2Utc2V0dGluZ3MtY29tbWFuZC5janMnO1xuZXhwb3J0IHtcbiAgYnVpbGREZXZpY2VTZXR0aW5nc0NvbW1hbmRBcmd1bWVudHMsXG4gIERldmljZVNldHRpbmdOYW1lc3BhY2UsXG4gIERldmljZVNldHRpbmdWZXJiXG59IGZyb20gJy4vZGV2aWNlLXNldHRpbmdzLWNvbW1hbmQuY2pzJztcbmV4cG9ydCB0eXBlIHtcbiAgRGV2aWNlU2V0dGluZ1BhcmFtcyxcbiAgV2l0aFNvZnRLZXlib2FyZEVuYWJsZWRQYXJhbXMsXG4gIFdyaXRlRGV2aWNlU2V0dGluZ1BhcmFtc1xufSBmcm9tICcuL2RldmljZS1zZXR0aW5ncy5janMnO1xuZXhwb3J0IHtcbiAgZGVsZXRlRGV2aWNlU2V0dGluZyxcbiAgcmVhZERldmljZVNldHRpbmcsXG4gIHdpdGhTb2Z0S2V5Ym9hcmRFbmFibGVkLFxuICB3cml0ZURldmljZVNldHRpbmdcbn0gZnJvbSAnLi9kZXZpY2Utc2V0dGluZ3MuY2pzJztcbmV4cG9ydCB0eXBlIHtcbiAgRWxlY3Ryb25Db21wYXRpYmlsaXR5LFxuICBFbGVjdHJvbkNvbXBhdGliaWxpdHlUaWVyLFxuICBSZXNvbHZlRWxlY3Ryb25Db21wYXRpYmlsaXR5UGFyYW1zXG59IGZyb20gJy4vZWxlY3Ryb24tY29tcGF0aWJpbGl0eS5janMnO1xuZXhwb3J0IHsgcmVzb2x2ZUVsZWN0cm9uQ29tcGF0aWJpbGl0eSB9IGZyb20gJy4vZWxlY3Ryb24tY29tcGF0aWJpbGl0eS5janMnO1xuZXhwb3J0IHR5cGUge1xuICBFbXVsYXRvckRldmljZUNhbmRpZGF0ZSxcbiAgU2VsZWN0RW11bGF0b3JEZXZpY2VJZFBhcmFtc1xufSBmcm9tICcuL2VtdWxhdG9yLWRldmljZS1pZC5janMnO1xuZXhwb3J0IHsgc2VsZWN0RW11bGF0b3JEZXZpY2VJZCB9IGZyb20gJy4vZW11bGF0b3ItZGV2aWNlLWlkLmNqcyc7XG5leHBvcnQgdHlwZSB7IEV2YWxDYXBFeGNlZWRlZEVycm9yQ29uc3RydWN0b3JQYXJhbXMgfSBmcm9tICcuL2V2YWwtY2FwLWV4Y2VlZGVkLWVycm9yLmNqcyc7XG5leHBvcnQge1xuICBFdmFsQ2FwRXhjZWVkZWRFcnJvcixcbiAgaXNTY3JpcHRUaW1lb3V0RXJyb3Jcbn0gZnJvbSAnLi9ldmFsLWNhcC1leGNlZWRlZC1lcnJvci5janMnO1xuZXhwb3J0IHsgREVGQVVMVF9FVkFMX0NBUF9JTl9NSUxMSVNFQ09ORFMgfSBmcm9tICcuL2V2YWwtY2FwLmNqcyc7XG5leHBvcnQgdHlwZSB7XG4gIENsaWNrRWxlbWVudFBhcmFtcyxcbiAgQ2xpY2tNb3VzZVBhcmFtcyxcbiAgQ29tbW9uQXJndW1lbnRzLFxuICBDcmVhdGVOb3RlUGFyYW1zLFxuICBFdmFsSW5PYnNpZGlhblBhcmFtcyxcbiAgR2VuZXJpY09iamVjdCxcbiAgSG92ZXJFbGVtZW50UGFyYW1zLFxuICBMaWIsXG4gIE1vdXNlQnV0dG9uLFxuICBNb3ZlTW91c2VQYXJhbXMsXG4gIE9wZW5TZXR0aW5nc1RhYlBhcmFtcyxcbiAgUHJlc3NLZXlQYXJhbXMsXG4gIFR5cGVJbnRvRWRpdG9yUGFyYW1zLFxuICBVbmhvdmVyRWxlbWVudFBhcmFtcyxcbiAgV2FpdFVudGlsUGFyYW1zXG59IGZyb20gJy4vZXZhbC1pbi1vYnNpZGlhbi5janMnO1xuZXhwb3J0IHsgZXZhbEluT2JzaWRpYW4gfSBmcm9tICcuL2V2YWwtaW4tb2JzaWRpYW4uY2pzJztcbmV4cG9ydCB0eXBlIHtcbiAgQ29tcHV0ZUZpdFRvQ2FudmFzUGFyYW1zLFxuICBGaXRTY3JlZW5zaG90VG9DYW52YXNPcHRpb25zLFxuICBGaXRUb0NhbnZhc0dlb21ldHJ5XG59IGZyb20gJy4vZml0LXNjcmVlbnNob3QuY2pzJztcbmV4cG9ydCB7XG4gIGNvbXB1dGVGaXRUb0NhbnZhcyxcbiAgZml0U2NyZWVuc2hvdFRvQ2FudmFzXG59IGZyb20gJy4vZml0LXNjcmVlbnNob3QuY2pzJztcbmV4cG9ydCB0eXBlIHsgSGlkZVZhdWx0TmFtZU9wdGlvbnMgfSBmcm9tICcuL2hpZGUtdmF1bHQtbmFtZS5janMnO1xuZXhwb3J0IHsgaGlkZVZhdWx0TmFtZSB9IGZyb20gJy4vaGlkZS12YXVsdC1uYW1lLmNqcyc7XG5leHBvcnQgdHlwZSB7IEluY29tcGF0aWJsZUluc3RhbGxlclZlcnNpb25FcnJvckNvbnN0cnVjdG9yUGFyYW1zIH0gZnJvbSAnLi9pbmNvbXBhdGlibGUtaW5zdGFsbGVyLXZlcnNpb24tZXJyb3IuY2pzJztcbmV4cG9ydCB7IEluY29tcGF0aWJsZUluc3RhbGxlclZlcnNpb25FcnJvciB9IGZyb20gJy4vaW5jb21wYXRpYmxlLWluc3RhbGxlci12ZXJzaW9uLWVycm9yLmNqcyc7XG5leHBvcnQgdHlwZSB7XG4gIEluc3RhbGxlckNvbXBhdGliaWxpdHksXG4gIEluc3RhbGxlckNvbXBhdGliaWxpdHlUaWVyLFxuICBSZXNvbHZlSW5zdGFsbGVyQ29tcGF0aWJpbGl0eVBhcmFtc1xufSBmcm9tICcuL2luc3RhbGxlci1jb21wYXRpYmlsaXR5LmNqcyc7XG5leHBvcnQgeyByZXNvbHZlSW5zdGFsbGVyQ29tcGF0aWJpbGl0eSB9IGZyb20gJy4vaW5zdGFsbGVyLWNvbXBhdGliaWxpdHkuY2pzJztcbmV4cG9ydCB0eXBlIHsgSW50ZWdyYXRpb25TZXR1cEZhaWxlZEVycm9yQ29uc3RydWN0b3JQYXJhbXMgfSBmcm9tICcuL2ludGVncmF0aW9uLXNldHVwLWZhaWxlZC1lcnJvci5janMnO1xuZXhwb3J0IHsgSW50ZWdyYXRpb25TZXR1cEZhaWxlZEVycm9yIH0gZnJvbSAnLi9pbnRlZ3JhdGlvbi1zZXR1cC1mYWlsZWQtZXJyb3IuY2pzJztcbmV4cG9ydCB0eXBlIHtcbiAgQ29tcHV0ZUxhYmVsQmFuZFBhcmFtcyxcbiAgTGFiZWxCYW5kR2VvbWV0cnksXG4gIExhYmVsQ2FwdGlvbk1lYXN1cmVtZW50LFxuICBMYWJlbFNjcmVlbnNob3RPcHRpb25zLFxuICBNZWFzdXJlTGFiZWxDYXB0aW9uUGFyYW1zXG59IGZyb20gJy4vbGFiZWwtc2NyZWVuc2hvdC5janMnO1xuZXhwb3J0IHtcbiAgYnVpbGRMYWJlbFN2ZyxcbiAgY29tcHV0ZUxhYmVsQmFuZCxcbiAgZXNjYXBlU3ZnVGV4dCxcbiAgbGFiZWxTY3JlZW5zaG90LFxuICBtZWFzdXJlTGFiZWxDYXB0aW9uXG59IGZyb20gJy4vbGFiZWwtc2NyZWVuc2hvdC5janMnO1xuZXhwb3J0IHR5cGUgeyBMaWJSZXNvbHZlciB9IGZyb20gJy4vbGliLXJlZ2lzdHJ5LmNqcyc7XG5leHBvcnQgeyByZWdpc3RlckxpYlJlc29sdmVyIH0gZnJvbSAnLi9saWItcmVnaXN0cnkuY2pzJztcbmV4cG9ydCB0eXBlIHtcbiAgT2JzaWRpYW5SdW50aW1lVmVyc2lvbnMsXG4gIE9ic2lkaWFuVmVyc2lvbkNoYW5nZWxvZ1VybHMsXG4gIE9ic2lkaWFuVmVyc2lvbkRvd25sb2FkcyxcbiAgT2JzaWRpYW5WZXJzaW9uTWV0YWRhdGFcbn0gZnJvbSAnLi9vYnNpZGlhbi1tZXRhZGF0YS5janMnO1xuZXhwb3J0IHsgZ2V0VmVyc2lvbk1ldGFkYXRhIH0gZnJvbSAnLi9vYnNpZGlhbi1tZXRhZGF0YS5janMnO1xuZXhwb3J0IHtcbiAgQ0FUQUxZU1RfTEFURVNULFxuICBQVUJMSUNfTEFURVNUXG59IGZyb20gJy4vb2JzaWRpYW4tdmVyc2lvbi5janMnO1xuZXhwb3J0IHR5cGUgeyBPcGVuT2JzaWRpYW5TZXR0aW5nc1RhYlBhcmFtcyB9IGZyb20gJy4vb3Blbi1vYnNpZGlhbi1zZXR0aW5ncy10YWIuY2pzJztcbmV4cG9ydCB7IG9wZW5PYnNpZGlhblNldHRpbmdzVGFiIH0gZnJvbSAnLi9vcGVuLW9ic2lkaWFuLXNldHRpbmdzLXRhYi5janMnO1xuZXhwb3J0IHR5cGUgeyBPd25lZEluc3RhbmNlRXhpdGVkRXJyb3JDb25zdHJ1Y3RvclBhcmFtcyB9IGZyb20gJy4vb3duZWQtaW5zdGFuY2UtZXhpdGVkLWVycm9yLmNqcyc7XG5leHBvcnQgeyBPd25lZEluc3RhbmNlRXhpdGVkRXJyb3IgfSBmcm9tICcuL293bmVkLWluc3RhbmNlLWV4aXRlZC1lcnJvci5janMnO1xuZXhwb3J0IHR5cGUgeyBQb2xsSW5PYnNpZGlhblBhcmFtcyB9IGZyb20gJy4vcG9sbC1pbi1vYnNpZGlhbi5janMnO1xuZXhwb3J0IHsgcG9sbEluT2JzaWRpYW4gfSBmcm9tICcuL3BvbGwtaW4tb2JzaWRpYW4uY2pzJztcbmV4cG9ydCB7IFJlbmRlcmVyRmFpbGVkVG9Jbml0aWFsaXplRXJyb3IgfSBmcm9tICcuL3JlbmRlcmVyLWZhaWxlZC10by1pbml0aWFsaXplLWVycm9yLmNqcyc7XG5leHBvcnQgdHlwZSB7IFJlc29sdmVFbXVsYXRvckRldmljZUlkUGFyYW1zIH0gZnJvbSAnLi9yZXNvbHZlLWVtdWxhdG9yLWRldmljZS1pZC5janMnO1xuZXhwb3J0IHsgcmVzb2x2ZUVtdWxhdG9yRGV2aWNlSWQgfSBmcm9tICcuL3Jlc29sdmUtZW11bGF0b3ItZGV2aWNlLWlkLmNqcyc7XG5leHBvcnQgdHlwZSB7IFJ1bk9ic2lkaWFuVmVyc2lvbk1hdHJpeFBhcmFtcyB9IGZyb20gJy4vcnVuLXZlcnNpb24tbWF0cml4LmNqcyc7XG5leHBvcnQgeyBydW5PYnNpZGlhblZlcnNpb25NYXRyaXggfSBmcm9tICcuL3J1bi12ZXJzaW9uLW1hdHJpeC5janMnO1xuZXhwb3J0IHR5cGUgeyBTaWxlbnRBc2FyRmFsbGJhY2tFcnJvckNvbnN0cnVjdG9yUGFyYW1zIH0gZnJvbSAnLi9zaWxlbnQtYXNhci1mYWxsYmFjay1lcnJvci5janMnO1xuZXhwb3J0IHsgU2lsZW50QXNhckZhbGxiYWNrRXJyb3IgfSBmcm9tICcuL3NpbGVudC1hc2FyLWZhbGxiYWNrLWVycm9yLmNqcyc7XG5leHBvcnQgdHlwZSB7XG4gIEJ1aWxkU29mdEtleWJvYXJkRGlhZ25vc3RpY01lc3NhZ2VQYXJhbXMsXG4gIENoZWNrSXNTb2Z0S2V5Ym9hcmRVcFBhcmFtcyxcbiAgRWxlbWVudFJlY3QsXG4gIFJlc29sdmVTb2Z0S2V5Ym9hcmRUYXBQb2ludHNQYXJhbXMsXG4gIFNvZnRLZXlib2FyZFRhcFBvaW50LFxuICBTb2Z0S2V5Ym9hcmRWaWV3cG9ydFNuYXBzaG90XG59IGZyb20gJy4vc29mdC1rZXlib2FyZC1nZW9tZXRyeS5janMnO1xuZXhwb3J0IHtcbiAgYnVpbGRTb2Z0S2V5Ym9hcmREaWFnbm9zdGljTWVzc2FnZSxcbiAgY2hlY2tJc1NvZnRLZXlib2FyZFVwLFxuICBERUZBVUxUX01JTklNVU1fS0VZQk9BUkRfSEVJR0hUX0lOX1BJWEVMUyxcbiAgcGFyc2VJbnB1dE1ldGhvZFN0YXRlLFxuICByZXNvbHZlU29mdEtleWJvYXJkVGFwUG9pbnRzXG59IGZyb20gJy4vc29mdC1rZXlib2FyZC1nZW9tZXRyeS5janMnO1xuZXhwb3J0IHR5cGUge1xuICBSYWlzZVNvZnRLZXlib2FyZFBhcmFtcyxcbiAgVGFwRGV2aWNlUGFyYW1zXG59IGZyb20gJy4vc29mdC1rZXlib2FyZC5janMnO1xuZXhwb3J0IHtcbiAgcmFpc2VTb2Z0S2V5Ym9hcmQsXG4gIHRhcERldmljZVxufSBmcm9tICcuL3NvZnQta2V5Ym9hcmQuY2pzJztcbmV4cG9ydCB0eXBlIHsgU3RhbGVCdWlsZEVycm9yQ29uc3RydWN0b3JQYXJhbXMgfSBmcm9tICcuL3N0YWxlLWJ1aWxkLWVycm9yLmNqcyc7XG5leHBvcnQgeyBTdGFsZUJ1aWxkRXJyb3IgfSBmcm9tICcuL3N0YWxlLWJ1aWxkLWVycm9yLmNqcyc7XG5leHBvcnQgdHlwZSB7XG4gIFBvcHVsYXRlRmlsZUNvbnRlbnQsXG4gIFBvcHVsYXRlRmlsZXNQYXJhbXMsXG4gIFRlbXBvcmFyeVZhdWx0Q29uc3RydWN0b3JPcHRpb25zXG59IGZyb20gJy4vdGVtcG9yYXJ5LXZhdWx0LmNqcyc7XG5leHBvcnQgeyBUZW1wb3JhcnlWYXVsdCB9IGZyb20gJy4vdGVtcG9yYXJ5LXZhdWx0LmNqcyc7XG5leHBvcnQgdHlwZSB7XG4gIEFwcGl1bVNlc3Npb25JbmZvLFxuICBBcHBpdW1UcmFuc3BvcnRDb25maWdcbn0gZnJvbSAnLi90cmFuc3BvcnQtYXBwaXVtLmNqcyc7XG5leHBvcnQgeyBBcHBpdW1UcmFuc3BvcnQgfSBmcm9tICcuL3RyYW5zcG9ydC1hcHBpdW0uY2pzJztcbmV4cG9ydCB0eXBlIHtcbiAgRGVza3RvcENkcFRyYW5zcG9ydENvbmZpZyxcbiAgT3duZWRJbnN0YW5jZUFzYXIsXG4gIE93bmVkSW5zdGFuY2VDb25maWcsXG4gIE93bmVkSW5zdGFuY2VFbmRwb2ludFxufSBmcm9tICcuL3RyYW5zcG9ydC1kZXNrdG9wLWNkcC5janMnO1xuZXhwb3J0IHsgRGVza3RvcENkcFRyYW5zcG9ydCB9IGZyb20gJy4vdHJhbnNwb3J0LWRlc2t0b3AtY2RwLmNqcyc7XG5leHBvcnQgeyBjcmVhdGVUcmFuc3BvcnRGcm9tT3B0aW9ucyB9IGZyb20gJy4vdHJhbnNwb3J0LWZhY3RvcnkuY2pzJztcbmV4cG9ydCB0eXBlIHtcbiAgT2JzaWRpYW5BbmRyb2lkQXBwaXVtVHJhbnNwb3J0T3B0aW9ucyxcbiAgT2JzaWRpYW5DZHBUcmFuc3BvcnRPcHRpb25zLFxuICBPYnNpZGlhblRyYW5zcG9ydE9wdGlvbnNcbn0gZnJvbSAnLi90cmFuc3BvcnQtb3B0aW9ucy5janMnO1xuZXhwb3J0IHsgY2hlY2tJc01vYmlsZVRyYW5zcG9ydCB9IGZyb20gJy4vdHJhbnNwb3J0LW9wdGlvbnMuY2pzJztcbmV4cG9ydCB0eXBlIHtcbiAgQ29uc29sZUNhcHR1cmVIYW5kbGUsXG4gIE9ic2lkaWFuVHJhbnNwb3J0LFxuICBUcmFuc3BvcnRFdmFsT3B0aW9uc1xufSBmcm9tICcuL3RyYW5zcG9ydC5janMnO1xuZXhwb3J0IHtcbiAgcmVnaXN0ZXJWYXVsdCxcbiAgdW5yZWdpc3RlclZhdWx0XG59IGZyb20gJy4vdmF1bHQtcmVnaXN0cnkuY2pzJztcbmV4cG9ydCB0eXBlIHsgT2JzaWRpYW5WZXJzaW9uTWF0cml4RW50cnkgfSBmcm9tICcuL3ZlcnNpb24tbWF0cml4LmNqcyc7XG5leHBvcnQgeyBERUZBVUxUX09CU0lESUFOX1ZFUlNJT05fU1BFQ1MgfSBmcm9tICcuL3ZlcnNpb24tbWF0cml4LmNqcyc7XG4iXSwKICAibWFwcGluZ3MiOiAiOzs7Ozs7Ozs7Ozs7Ozs7Ozs7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBT0EsaUJBSU87QUFPUCx3QkFLTztBQU1QLHFDQUFvQztBQUVwQyx5Q0FBMEM7QUFLMUMsZ0NBS087QUFFUCx1Q0FBdUM7QUFFdkMsNkNBQTZDO0FBQzdDLDhCQUdPO0FBS1AsNEJBQTZCO0FBSzdCLHdCQUEwQjtBQU0xQiw4QkFJTztBQU9QLGtDQUdPO0FBTVAsaUNBR087QUFFUCw2QkFBa0M7QUFDbEMsNENBQTJDO0FBRTNDLCtCQUF3QztBQU14QyxvQ0FHTztBQUVQLHFDQUlPO0FBTVAsNkJBS087QUFNUCxvQ0FBNkM7QUFLN0MsZ0NBQXVDO0FBRXZDLHFDQUdPO0FBQ1Asc0JBQWlEO0FBa0JqRCw4QkFBK0I7QUFNL0IsNEJBR087QUFFUCw2QkFBOEI7QUFFOUIsa0RBQWtEO0FBTWxELHFDQUE4QztBQUU5Qyw0Q0FBNEM7QUFRNUMsOEJBTU87QUFFUCwwQkFBb0M7QUFPcEMsK0JBQW1DO0FBQ25DLDhCQUdPO0FBRVAsd0NBQXdDO0FBRXhDLHlDQUF5QztBQUV6Qyw4QkFBK0I7QUFDL0IsaURBQWdEO0FBRWhELHdDQUF3QztBQUV4QyxnQ0FBeUM7QUFFekMsd0NBQXdDO0FBU3hDLG9DQU1PO0FBS1AsMkJBR087QUFFUCwrQkFBZ0M7QUFNaEMsNkJBQStCO0FBSy9CLDhCQUFnQztBQU9oQyxtQ0FBb0M7QUFDcEMsK0JBQTJDO0FBTTNDLCtCQUF1QztBQU12Qyw0QkFHTztBQUVQLDRCQUErQzsiLAogICJuYW1lcyI6IFtdCn0K
|
|
253
|
+
//# sourceMappingURL=data:application/json;base64,ewogICJ2ZXJzaW9uIjogMywKICAic291cmNlcyI6IFsiLi4vLi4vLi4vc3JjL2luZGV4LnRzIl0sCiAgInNvdXJjZXNDb250ZW50IjogWyIvKipcbiAqIEBmaWxlXG4gKlxuICogQ29udGFpbnMgdGhlIGVudHJ5IHBvaW50IGZvciB0aGUgaW50ZWdyYXRpb24gdGVzdGluZyBtb2R1bGUuXG4gKi9cblxuZXhwb3J0IHR5cGUgeyBSdW5BZGJQYXJhbXMgfSBmcm9tICcuL2FkYi5janMnO1xuZXhwb3J0IHtcbiAgcnVuQWRiQmluYXJ5LFxuICBydW5BZGJUZXh0LFxuICBydW5BZGJUZXh0V2l0aG91dERldmljZVxufSBmcm9tICcuL2FkYi5janMnO1xuZXhwb3J0IHR5cGUge1xuICBBcHBDb25maWdSZXN0b3JlLFxuICBHZXRBcHBDb25maWdQYXJhbXMsXG4gIFNldEFwcENvbmZpZ1BhcmFtcyxcbiAgV2l0aEFwcENvbmZpZ1BhcmFtc1xufSBmcm9tICcuL2FwcC1jb25maWcuY2pzJztcbmV4cG9ydCB7XG4gIGdldEFwcENvbmZpZyxcbiAgcmVzdG9yZUFwcENvbmZpZyxcbiAgc2V0QXBwQ29uZmlnLFxuICB3aXRoQXBwQ29uZmlnXG59IGZyb20gJy4vYXBwLWNvbmZpZy5janMnO1xuZXhwb3J0IHR5cGUge1xuICBBc2FyRmFsbGJhY2ssXG4gIEFzYXJGYWxsYmFja1RpZXIsXG4gIFJlc29sdmVBc2FyRmFsbGJhY2tQYXJhbXNcbn0gZnJvbSAnLi9hc2FyLWZhbGxiYWNrLWRldGVjdGlvbi5janMnO1xuZXhwb3J0IHsgcmVzb2x2ZUFzYXJGYWxsYmFjayB9IGZyb20gJy4vYXNhci1mYWxsYmFjay1kZXRlY3Rpb24uY2pzJztcbmV4cG9ydCB0eXBlIHsgQ2FwdHVyZU9ic2lkaWFuU2NyZWVuc2hvdE9wdGlvbnMgfSBmcm9tICcuL2NhcHR1cmUtb2JzaWRpYW4tc2NyZWVuc2hvdC5janMnO1xuZXhwb3J0IHsgY2FwdHVyZU9ic2lkaWFuU2NyZWVuc2hvdCB9IGZyb20gJy4vY2FwdHVyZS1vYnNpZGlhbi1zY3JlZW5zaG90LmNqcyc7XG5leHBvcnQgdHlwZSB7XG4gIENhcHR1cmVTY3JlZW5zaG90UGFyYW1zLFxuICBQbmdEaW1lbnNpb25zXG59IGZyb20gJy4vY2FwdHVyZS1zY3JlZW5zaG90LmNqcyc7XG5leHBvcnQge1xuICBidWlsZERldmljZU1ldHJpY3NPdmVycmlkZSxcbiAgZGVjb2RlQmFzZTY0UG5nLFxuICBpc1BuZyxcbiAgcmVhZFBuZ0RpbWVuc2lvbnNcbn0gZnJvbSAnLi9jYXB0dXJlLXNjcmVlbnNob3QuY2pzJztcbmV4cG9ydCB0eXBlIHsgQ2RwQ29tbWFuZFRpbWVvdXRFcnJvckNvbnN0cnVjdG9yUGFyYW1zIH0gZnJvbSAnLi9jZHAtY29tbWFuZC10aW1lb3V0LWVycm9yLmNqcyc7XG5leHBvcnQgeyBDZHBDb21tYW5kVGltZW91dEVycm9yIH0gZnJvbSAnLi9jZHAtY29tbWFuZC10aW1lb3V0LWVycm9yLmNqcyc7XG5leHBvcnQgdHlwZSB7IENvbmZpZ0RpcmVjdG9yeUZhbGxiYWNrRXJyb3JDb25zdHJ1Y3RvclBhcmFtcyB9IGZyb20gJy4vY29uZmlnLWRpcmVjdG9yeS1mYWxsYmFjay1lcnJvci5janMnO1xuZXhwb3J0IHsgQ29uZmlnRGlyZWN0b3J5RmFsbGJhY2tFcnJvciB9IGZyb20gJy4vY29uZmlnLWRpcmVjdG9yeS1mYWxsYmFjay1lcnJvci5janMnO1xuZXhwb3J0IHtcbiAgYXNzZXJ0VmFsaWRDb25maWdEaXJlY3RvcnksXG4gIERFRkFVTFRfQ09ORklHX0RJUkVDVE9SWVxufSBmcm9tICcuL2NvbmZpZy1kaXJlY3RvcnkuY2pzJztcbmV4cG9ydCB0eXBlIHtcbiAgQ2RwQ29ubmVjdGlvbixcbiAgQ29ubmVjdFRvQ2RwT3B0aW9uc1xufSBmcm9tICcuL2Nvbm5lY3QtdG8tY2RwLmNqcyc7XG5leHBvcnQgeyBjb25uZWN0VG9DZHAgfSBmcm9tICcuL2Nvbm5lY3QtdG8tY2RwLmNqcyc7XG5leHBvcnQgdHlwZSB7XG4gIENvbnRleHRBcmd1bWVudHMsXG4gIENvbnRleHRPZlxufSBmcm9tICcuL2NvbnRleHQtaWQuY2pzJztcbmV4cG9ydCB7IENvbnRleHRJZCB9IGZyb20gJy4vY29udGV4dC1pZC5janMnO1xuZXhwb3J0IHR5cGUge1xuICBTZXR1cEVycm9yUmVzb2x2ZXIsXG4gIFRyYW5zcG9ydE9wdGlvbnNSZXNvbHZlcixcbiAgVmF1bHRQYXRoUmVzb2x2ZXJcbn0gZnJvbSAnLi9jb250ZXh0LXByb3ZpZGVyLmNqcyc7XG5leHBvcnQge1xuICBzZXRTZXR1cEVycm9yUmVzb2x2ZXIsXG4gIHNldFRyYW5zcG9ydE9wdGlvbnNSZXNvbHZlcixcbiAgc2V0VmF1bHRQYXRoUmVzb2x2ZXJcbn0gZnJvbSAnLi9jb250ZXh0LXByb3ZpZGVyLmNqcyc7XG5leHBvcnQgdHlwZSB7XG4gIEJvb3RzdHJhcERlbW9WYXVsdFBsdWdpbnNQYXJhbXMsXG4gIEJvb3RzdHJhcERlbW9WYXVsdFBsdWdpbnNSZXN1bHQsXG4gIEJ1aWxkRGVtb1ZhdWx0UG9wdWxhdGVBc3luY1BhcmFtcyxcbiAgSW5zdGFsbGVkUGx1Z2luSW5mb1xufSBmcm9tICcuL2RlbW8tdmF1bHQtYm9vdHN0cmFwLmNqcyc7XG5leHBvcnQge1xuICBib290c3RyYXBEZW1vVmF1bHRQbHVnaW5zLFxuICBidWlsZERlbW9WYXVsdFBvcHVsYXRlQXN5bmNcbn0gZnJvbSAnLi9kZW1vLXZhdWx0LWJvb3RzdHJhcC5janMnO1xuZXhwb3J0IHR5cGUge1xuICBCdWlsZERlbW9WYXVsdFBvcHVsYXRlUGFyYW1zLFxuICBJbmplY3RQbHVnaW5QYXJhbXMsXG4gIFJlc29sdmVNaXNzaW5nSW5qZWN0ZWRQbHVnaW5zUGFyYW1zXG59IGZyb20gJy4vZGVtby12YXVsdC1wb3B1bGF0ZS5janMnO1xuZXhwb3J0IHtcbiAgYnVpbGREZW1vVmF1bHRQb3B1bGF0ZSxcbiAgcmVzb2x2ZU1pc3NpbmdJbmplY3RlZFBsdWdpbnNcbn0gZnJvbSAnLi9kZW1vLXZhdWx0LXBvcHVsYXRlLmNqcyc7XG5leHBvcnQgdHlwZSB7IFJlYWREZW1vVmF1bHRUcmVlUGFyYW1zIH0gZnJvbSAnLi9kZW1vLXZhdWx0LXRyZWUuY2pzJztcbmV4cG9ydCB7IHJlYWREZW1vVmF1bHRUcmVlIH0gZnJvbSAnLi9kZW1vLXZhdWx0LXRyZWUuY2pzJztcbmV4cG9ydCB7IERlc2t0b3BPbmx5UGx1Z2luU2tpcEVycm9yIH0gZnJvbSAnLi9kZXNrdG9wLW9ubHktcGx1Z2luLXNraXAtZXJyb3IuY2pzJztcbmV4cG9ydCB0eXBlIHsgQ2FwdHVyZURldmljZVNjcmVlbnNob3RQYXJhbXMgfSBmcm9tICcuL2RldmljZS1zY3JlZW5zaG90LmNqcyc7XG5leHBvcnQgeyBjYXB0dXJlRGV2aWNlU2NyZWVuc2hvdCB9IGZyb20gJy4vZGV2aWNlLXNjcmVlbnNob3QuY2pzJztcbmV4cG9ydCB0eXBlIHtcbiAgRGV2aWNlU2V0dGluZ1Jlc3RvcmUsXG4gIERldmljZVNldHRpbmdSZXN0b3JlRGVsZXRlLFxuICBEZXZpY2VTZXR0aW5nUmVzdG9yZVdyaXRlXG59IGZyb20gJy4vZGV2aWNlLXNldHRpbmctcmVzdG9yZS5janMnO1xuZXhwb3J0IHtcbiAgRGV2aWNlU2V0dGluZ1Jlc3RvcmVLaW5kLFxuICByZXNvbHZlRGV2aWNlU2V0dGluZ1Jlc3RvcmVcbn0gZnJvbSAnLi9kZXZpY2Utc2V0dGluZy1yZXN0b3JlLmNqcyc7XG5leHBvcnQgdHlwZSB7IEJ1aWxkRGV2aWNlU2V0dGluZ3NDb21tYW5kQXJndW1lbnRzUGFyYW1zIH0gZnJvbSAnLi9kZXZpY2Utc2V0dGluZ3MtY29tbWFuZC5janMnO1xuZXhwb3J0IHtcbiAgYnVpbGREZXZpY2VTZXR0aW5nc0NvbW1hbmRBcmd1bWVudHMsXG4gIERldmljZVNldHRpbmdOYW1lc3BhY2UsXG4gIERldmljZVNldHRpbmdWZXJiXG59IGZyb20gJy4vZGV2aWNlLXNldHRpbmdzLWNvbW1hbmQuY2pzJztcbmV4cG9ydCB0eXBlIHtcbiAgRGV2aWNlU2V0dGluZ1BhcmFtcyxcbiAgV2l0aFNvZnRLZXlib2FyZEVuYWJsZWRQYXJhbXMsXG4gIFdyaXRlRGV2aWNlU2V0dGluZ1BhcmFtc1xufSBmcm9tICcuL2RldmljZS1zZXR0aW5ncy5janMnO1xuZXhwb3J0IHtcbiAgZGVsZXRlRGV2aWNlU2V0dGluZyxcbiAgcmVhZERldmljZVNldHRpbmcsXG4gIHdpdGhTb2Z0S2V5Ym9hcmRFbmFibGVkLFxuICB3cml0ZURldmljZVNldHRpbmdcbn0gZnJvbSAnLi9kZXZpY2Utc2V0dGluZ3MuY2pzJztcbmV4cG9ydCB0eXBlIHtcbiAgRWxlY3Ryb25Db21wYXRpYmlsaXR5LFxuICBFbGVjdHJvbkNvbXBhdGliaWxpdHlUaWVyLFxuICBSZXNvbHZlRWxlY3Ryb25Db21wYXRpYmlsaXR5UGFyYW1zXG59IGZyb20gJy4vZWxlY3Ryb24tY29tcGF0aWJpbGl0eS5janMnO1xuZXhwb3J0IHsgcmVzb2x2ZUVsZWN0cm9uQ29tcGF0aWJpbGl0eSB9IGZyb20gJy4vZWxlY3Ryb24tY29tcGF0aWJpbGl0eS5janMnO1xuZXhwb3J0IHR5cGUge1xuICBFbXVsYXRvckRldmljZUNhbmRpZGF0ZSxcbiAgU2VsZWN0RW11bGF0b3JEZXZpY2VJZFBhcmFtc1xufSBmcm9tICcuL2VtdWxhdG9yLWRldmljZS1pZC5janMnO1xuZXhwb3J0IHsgc2VsZWN0RW11bGF0b3JEZXZpY2VJZCB9IGZyb20gJy4vZW11bGF0b3ItZGV2aWNlLWlkLmNqcyc7XG5leHBvcnQgdHlwZSB7IEV2YWxDYXBFeGNlZWRlZEVycm9yQ29uc3RydWN0b3JQYXJhbXMgfSBmcm9tICcuL2V2YWwtY2FwLWV4Y2VlZGVkLWVycm9yLmNqcyc7XG5leHBvcnQge1xuICBFdmFsQ2FwRXhjZWVkZWRFcnJvcixcbiAgaXNTY3JpcHRUaW1lb3V0RXJyb3Jcbn0gZnJvbSAnLi9ldmFsLWNhcC1leGNlZWRlZC1lcnJvci5janMnO1xuZXhwb3J0IHsgREVGQVVMVF9FVkFMX0NBUF9JTl9NSUxMSVNFQ09ORFMgfSBmcm9tICcuL2V2YWwtY2FwLmNqcyc7XG5leHBvcnQgdHlwZSB7XG4gIENsaWNrRWxlbWVudFBhcmFtcyxcbiAgQ2xpY2tNb3VzZVBhcmFtcyxcbiAgQ29tbW9uQXJndW1lbnRzLFxuICBDcmVhdGVOb3RlUGFyYW1zLFxuICBFdmFsSW5PYnNpZGlhblBhcmFtcyxcbiAgR2VuZXJpY09iamVjdCxcbiAgSG92ZXJFbGVtZW50UGFyYW1zLFxuICBMaWIsXG4gIE1vdXNlQnV0dG9uLFxuICBNb3ZlTW91c2VQYXJhbXMsXG4gIE9wZW5TZXR0aW5nc1RhYlBhcmFtcyxcbiAgUHJlc3NLZXlQYXJhbXMsXG4gIFR5cGVJbnRvRWRpdG9yUGFyYW1zLFxuICBVbmhvdmVyRWxlbWVudFBhcmFtcyxcbiAgV2FpdFVudGlsUGFyYW1zXG59IGZyb20gJy4vZXZhbC1pbi1vYnNpZGlhbi5janMnO1xuZXhwb3J0IHsgZXZhbEluT2JzaWRpYW4gfSBmcm9tICcuL2V2YWwtaW4tb2JzaWRpYW4uY2pzJztcbmV4cG9ydCB0eXBlIHtcbiAgQ29tcHV0ZUZpdFRvQ2FudmFzUGFyYW1zLFxuICBGaXRTY3JlZW5zaG90VG9DYW52YXNPcHRpb25zLFxuICBGaXRUb0NhbnZhc0dlb21ldHJ5XG59IGZyb20gJy4vZml0LXNjcmVlbnNob3QuY2pzJztcbmV4cG9ydCB7XG4gIGNvbXB1dGVGaXRUb0NhbnZhcyxcbiAgZml0U2NyZWVuc2hvdFRvQ2FudmFzXG59IGZyb20gJy4vZml0LXNjcmVlbnNob3QuY2pzJztcbmV4cG9ydCB0eXBlIHsgSGlkZVZhdWx0TmFtZU9wdGlvbnMgfSBmcm9tICcuL2hpZGUtdmF1bHQtbmFtZS5janMnO1xuZXhwb3J0IHsgaGlkZVZhdWx0TmFtZSB9IGZyb20gJy4vaGlkZS12YXVsdC1uYW1lLmNqcyc7XG5leHBvcnQgdHlwZSB7IEluY29tcGF0aWJsZUluc3RhbGxlclZlcnNpb25FcnJvckNvbnN0cnVjdG9yUGFyYW1zIH0gZnJvbSAnLi9pbmNvbXBhdGlibGUtaW5zdGFsbGVyLXZlcnNpb24tZXJyb3IuY2pzJztcbmV4cG9ydCB7IEluY29tcGF0aWJsZUluc3RhbGxlclZlcnNpb25FcnJvciB9IGZyb20gJy4vaW5jb21wYXRpYmxlLWluc3RhbGxlci12ZXJzaW9uLWVycm9yLmNqcyc7XG5leHBvcnQgdHlwZSB7XG4gIEluc3RhbGxlckNvbXBhdGliaWxpdHksXG4gIEluc3RhbGxlckNvbXBhdGliaWxpdHlUaWVyLFxuICBSZXNvbHZlSW5zdGFsbGVyQ29tcGF0aWJpbGl0eVBhcmFtc1xufSBmcm9tICcuL2luc3RhbGxlci1jb21wYXRpYmlsaXR5LmNqcyc7XG5leHBvcnQgeyByZXNvbHZlSW5zdGFsbGVyQ29tcGF0aWJpbGl0eSB9IGZyb20gJy4vaW5zdGFsbGVyLWNvbXBhdGliaWxpdHkuY2pzJztcbmV4cG9ydCB0eXBlIHsgSW50ZWdyYXRpb25TZXR1cEZhaWxlZEVycm9yQ29uc3RydWN0b3JQYXJhbXMgfSBmcm9tICcuL2ludGVncmF0aW9uLXNldHVwLWZhaWxlZC1lcnJvci5janMnO1xuZXhwb3J0IHsgSW50ZWdyYXRpb25TZXR1cEZhaWxlZEVycm9yIH0gZnJvbSAnLi9pbnRlZ3JhdGlvbi1zZXR1cC1mYWlsZWQtZXJyb3IuY2pzJztcbmV4cG9ydCB0eXBlIHtcbiAgQ29tcHV0ZUxhYmVsQmFuZFBhcmFtcyxcbiAgTGFiZWxCYW5kR2VvbWV0cnksXG4gIExhYmVsQ2FwdGlvbk1lYXN1cmVtZW50LFxuICBMYWJlbFNjcmVlbnNob3RPcHRpb25zLFxuICBNZWFzdXJlTGFiZWxDYXB0aW9uUGFyYW1zXG59IGZyb20gJy4vbGFiZWwtc2NyZWVuc2hvdC5janMnO1xuZXhwb3J0IHtcbiAgYnVpbGRMYWJlbFN2ZyxcbiAgY29tcHV0ZUxhYmVsQmFuZCxcbiAgZXNjYXBlU3ZnVGV4dCxcbiAgbGFiZWxTY3JlZW5zaG90LFxuICBtZWFzdXJlTGFiZWxDYXB0aW9uXG59IGZyb20gJy4vbGFiZWwtc2NyZWVuc2hvdC5janMnO1xuZXhwb3J0IHR5cGUgeyBMaWJSZXNvbHZlciB9IGZyb20gJy4vbGliLXJlZ2lzdHJ5LmNqcyc7XG5leHBvcnQgeyByZWdpc3RlckxpYlJlc29sdmVyIH0gZnJvbSAnLi9saWItcmVnaXN0cnkuY2pzJztcbmV4cG9ydCB0eXBlIHtcbiAgT2JzaWRpYW5SdW50aW1lVmVyc2lvbnMsXG4gIE9ic2lkaWFuVmVyc2lvbkNoYW5nZWxvZ1VybHMsXG4gIE9ic2lkaWFuVmVyc2lvbkRvd25sb2FkcyxcbiAgT2JzaWRpYW5WZXJzaW9uTWV0YWRhdGFcbn0gZnJvbSAnLi9vYnNpZGlhbi1tZXRhZGF0YS5janMnO1xuZXhwb3J0IHsgZ2V0VmVyc2lvbk1ldGFkYXRhIH0gZnJvbSAnLi9vYnNpZGlhbi1tZXRhZGF0YS5janMnO1xuZXhwb3J0IHtcbiAgQ0FUQUxZU1RfTEFURVNULFxuICBQVUJMSUNfTEFURVNUXG59IGZyb20gJy4vb2JzaWRpYW4tdmVyc2lvbi5janMnO1xuZXhwb3J0IHR5cGUgeyBPcGVuT2JzaWRpYW5TZXR0aW5nc1RhYlBhcmFtcyB9IGZyb20gJy4vb3Blbi1vYnNpZGlhbi1zZXR0aW5ncy10YWIuY2pzJztcbmV4cG9ydCB7IG9wZW5PYnNpZGlhblNldHRpbmdzVGFiIH0gZnJvbSAnLi9vcGVuLW9ic2lkaWFuLXNldHRpbmdzLXRhYi5janMnO1xuZXhwb3J0IHR5cGUgeyBPd25lZEluc3RhbmNlRXhpdGVkRXJyb3JDb25zdHJ1Y3RvclBhcmFtcyB9IGZyb20gJy4vb3duZWQtaW5zdGFuY2UtZXhpdGVkLWVycm9yLmNqcyc7XG5leHBvcnQgeyBPd25lZEluc3RhbmNlRXhpdGVkRXJyb3IgfSBmcm9tICcuL293bmVkLWluc3RhbmNlLWV4aXRlZC1lcnJvci5janMnO1xuZXhwb3J0IHR5cGUge1xuICBCdWlsZFN0YXR1c0JhckJhbmRGYWlsdXJlTWVzc2FnZVBhcmFtcyxcbiAgUGFpbnRPdXRTdGF0dXNCYXJPcHRpb25zLFxuICBSZXNvbHZlU3RhdHVzQmFyQmFuZFBhcmFtcyxcbiAgU3RhdHVzQmFyQmFuZENvbG9yLFxuICBTdGF0dXNCYXJCYW5kVmVyZGljdFxufSBmcm9tICcuL3BhaW50LW91dC1zdGF0dXMtYmFyLmNqcyc7XG5leHBvcnQge1xuICBidWlsZFN0YXR1c0JhckJhbmRGYWlsdXJlTWVzc2FnZSxcbiAgREVGQVVMVF9TVEFUVVNfQkFSX0VER0VfTUFSR0lOX0lOX1BJWEVMUyxcbiAgREVGQVVMVF9TVEFUVVNfQkFSX1NBTVBMRV9JTlNFVF9JTl9QSVhFTFMsXG4gIHBhaW50T3V0U3RhdHVzQmFyLFxuICByZXNvbHZlU3RhdHVzQmFyQmFuZFxufSBmcm9tICcuL3BhaW50LW91dC1zdGF0dXMtYmFyLmNqcyc7XG5leHBvcnQgdHlwZSB7IFBvbGxJbk9ic2lkaWFuUGFyYW1zIH0gZnJvbSAnLi9wb2xsLWluLW9ic2lkaWFuLmNqcyc7XG5leHBvcnQgeyBwb2xsSW5PYnNpZGlhbiB9IGZyb20gJy4vcG9sbC1pbi1vYnNpZGlhbi5janMnO1xuZXhwb3J0IHsgUmVuZGVyZXJGYWlsZWRUb0luaXRpYWxpemVFcnJvciB9IGZyb20gJy4vcmVuZGVyZXItZmFpbGVkLXRvLWluaXRpYWxpemUtZXJyb3IuY2pzJztcbmV4cG9ydCB0eXBlIHsgUmVzb2x2ZUVtdWxhdG9yRGV2aWNlSWRQYXJhbXMgfSBmcm9tICcuL3Jlc29sdmUtZW11bGF0b3ItZGV2aWNlLWlkLmNqcyc7XG5leHBvcnQgeyByZXNvbHZlRW11bGF0b3JEZXZpY2VJZCB9IGZyb20gJy4vcmVzb2x2ZS1lbXVsYXRvci1kZXZpY2UtaWQuY2pzJztcbmV4cG9ydCB0eXBlIHsgUnVuT2JzaWRpYW5WZXJzaW9uTWF0cml4UGFyYW1zIH0gZnJvbSAnLi9ydW4tdmVyc2lvbi1tYXRyaXguY2pzJztcbmV4cG9ydCB7IHJ1bk9ic2lkaWFuVmVyc2lvbk1hdHJpeCB9IGZyb20gJy4vcnVuLXZlcnNpb24tbWF0cml4LmNqcyc7XG5leHBvcnQgdHlwZSB7IFNpbGVudEFzYXJGYWxsYmFja0Vycm9yQ29uc3RydWN0b3JQYXJhbXMgfSBmcm9tICcuL3NpbGVudC1hc2FyLWZhbGxiYWNrLWVycm9yLmNqcyc7XG5leHBvcnQgeyBTaWxlbnRBc2FyRmFsbGJhY2tFcnJvciB9IGZyb20gJy4vc2lsZW50LWFzYXItZmFsbGJhY2stZXJyb3IuY2pzJztcbmV4cG9ydCB0eXBlIHtcbiAgQnVpbGRTb2Z0S2V5Ym9hcmREaWFnbm9zdGljTWVzc2FnZVBhcmFtcyxcbiAgQ2hlY2tJc1NvZnRLZXlib2FyZFVwUGFyYW1zLFxuICBFbGVtZW50UmVjdCxcbiAgUmVzb2x2ZVNvZnRLZXlib2FyZFRhcFBvaW50c1BhcmFtcyxcbiAgU29mdEtleWJvYXJkVGFwUG9pbnQsXG4gIFNvZnRLZXlib2FyZFZpZXdwb3J0U25hcHNob3Rcbn0gZnJvbSAnLi9zb2Z0LWtleWJvYXJkLWdlb21ldHJ5LmNqcyc7XG5leHBvcnQge1xuICBidWlsZFNvZnRLZXlib2FyZERpYWdub3N0aWNNZXNzYWdlLFxuICBjaGVja0lzSW5wdXRNZXRob2RTaG93bixcbiAgY2hlY2tJc1NvZnRLZXlib2FyZFVwLFxuICBERUZBVUxUX01JTklNVU1fS0VZQk9BUkRfSEVJR0hUX0lOX1BJWEVMUyxcbiAgcGFyc2VJbnB1dE1ldGhvZFN0YXRlLFxuICByZXNvbHZlU29mdEtleWJvYXJkVGFwUG9pbnRzXG59IGZyb20gJy4vc29mdC1rZXlib2FyZC1nZW9tZXRyeS5janMnO1xuZXhwb3J0IHR5cGUge1xuICBSYWlzZVNvZnRLZXlib2FyZFBhcmFtcyxcbiAgVGFwRGV2aWNlUGFyYW1zXG59IGZyb20gJy4vc29mdC1rZXlib2FyZC5janMnO1xuZXhwb3J0IHtcbiAgcmFpc2VTb2Z0S2V5Ym9hcmQsXG4gIHRhcERldmljZVxufSBmcm9tICcuL3NvZnQta2V5Ym9hcmQuY2pzJztcbmV4cG9ydCB0eXBlIHsgU3RhbGVCdWlsZEVycm9yQ29uc3RydWN0b3JQYXJhbXMgfSBmcm9tICcuL3N0YWxlLWJ1aWxkLWVycm9yLmNqcyc7XG5leHBvcnQgeyBTdGFsZUJ1aWxkRXJyb3IgfSBmcm9tICcuL3N0YWxlLWJ1aWxkLWVycm9yLmNqcyc7XG5leHBvcnQgdHlwZSB7XG4gIFBvcHVsYXRlRmlsZUNvbnRlbnQsXG4gIFBvcHVsYXRlRmlsZXNQYXJhbXMsXG4gIFRlbXBvcmFyeVZhdWx0Q29uc3RydWN0b3JPcHRpb25zXG59IGZyb20gJy4vdGVtcG9yYXJ5LXZhdWx0LmNqcyc7XG5leHBvcnQgeyBUZW1wb3JhcnlWYXVsdCB9IGZyb20gJy4vdGVtcG9yYXJ5LXZhdWx0LmNqcyc7XG5leHBvcnQgdHlwZSB7XG4gIEFwcGl1bVNlc3Npb25JbmZvLFxuICBBcHBpdW1UcmFuc3BvcnRDb25maWdcbn0gZnJvbSAnLi90cmFuc3BvcnQtYXBwaXVtLmNqcyc7XG5leHBvcnQgeyBBcHBpdW1UcmFuc3BvcnQgfSBmcm9tICcuL3RyYW5zcG9ydC1hcHBpdW0uY2pzJztcbmV4cG9ydCB0eXBlIHtcbiAgRGVza3RvcENkcFRyYW5zcG9ydENvbmZpZyxcbiAgT3duZWRJbnN0YW5jZUFzYXIsXG4gIE93bmVkSW5zdGFuY2VDb25maWcsXG4gIE93bmVkSW5zdGFuY2VFbmRwb2ludFxufSBmcm9tICcuL3RyYW5zcG9ydC1kZXNrdG9wLWNkcC5janMnO1xuZXhwb3J0IHsgRGVza3RvcENkcFRyYW5zcG9ydCB9IGZyb20gJy4vdHJhbnNwb3J0LWRlc2t0b3AtY2RwLmNqcyc7XG5leHBvcnQgeyBjcmVhdGVUcmFuc3BvcnRGcm9tT3B0aW9ucyB9IGZyb20gJy4vdHJhbnNwb3J0LWZhY3RvcnkuY2pzJztcbmV4cG9ydCB0eXBlIHtcbiAgT2JzaWRpYW5BbmRyb2lkQXBwaXVtVHJhbnNwb3J0T3B0aW9ucyxcbiAgT2JzaWRpYW5DZHBUcmFuc3BvcnRPcHRpb25zLFxuICBPYnNpZGlhblRyYW5zcG9ydE9wdGlvbnNcbn0gZnJvbSAnLi90cmFuc3BvcnQtb3B0aW9ucy5janMnO1xuZXhwb3J0IHsgY2hlY2tJc01vYmlsZVRyYW5zcG9ydCB9IGZyb20gJy4vdHJhbnNwb3J0LW9wdGlvbnMuY2pzJztcbmV4cG9ydCB0eXBlIHtcbiAgQ29uc29sZUNhcHR1cmVIYW5kbGUsXG4gIE9ic2lkaWFuVHJhbnNwb3J0LFxuICBUcmFuc3BvcnRFdmFsT3B0aW9uc1xufSBmcm9tICcuL3RyYW5zcG9ydC5janMnO1xuZXhwb3J0IHtcbiAgcmVnaXN0ZXJWYXVsdCxcbiAgdW5yZWdpc3RlclZhdWx0XG59IGZyb20gJy4vdmF1bHQtcmVnaXN0cnkuY2pzJztcbmV4cG9ydCB0eXBlIHsgT2JzaWRpYW5WZXJzaW9uTWF0cml4RW50cnkgfSBmcm9tICcuL3ZlcnNpb24tbWF0cml4LmNqcyc7XG5leHBvcnQgeyBERUZBVUxUX09CU0lESUFOX1ZFUlNJT05fU1BFQ1MgfSBmcm9tICcuL3ZlcnNpb24tbWF0cml4LmNqcyc7XG4iXSwKICAibWFwcGluZ3MiOiAiOzs7Ozs7Ozs7Ozs7Ozs7Ozs7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBT0EsaUJBSU87QUFPUCx3QkFLTztBQU1QLHFDQUFvQztBQUVwQyx5Q0FBMEM7QUFLMUMsZ0NBS087QUFFUCx1Q0FBdUM7QUFFdkMsNkNBQTZDO0FBQzdDLDhCQUdPO0FBS1AsNEJBQTZCO0FBSzdCLHdCQUEwQjtBQU0xQiw4QkFJTztBQU9QLGtDQUdPO0FBTVAsaUNBR087QUFFUCw2QkFBa0M7QUFDbEMsNENBQTJDO0FBRTNDLCtCQUF3QztBQU14QyxvQ0FHTztBQUVQLHFDQUlPO0FBTVAsNkJBS087QUFNUCxvQ0FBNkM7QUFLN0MsZ0NBQXVDO0FBRXZDLHFDQUdPO0FBQ1Asc0JBQWlEO0FBa0JqRCw4QkFBK0I7QUFNL0IsNEJBR087QUFFUCw2QkFBOEI7QUFFOUIsa0RBQWtEO0FBTWxELHFDQUE4QztBQUU5Qyw0Q0FBNEM7QUFRNUMsOEJBTU87QUFFUCwwQkFBb0M7QUFPcEMsK0JBQW1DO0FBQ25DLDhCQUdPO0FBRVAsd0NBQXdDO0FBRXhDLHlDQUF5QztBQVF6QyxrQ0FNTztBQUVQLDhCQUErQjtBQUMvQixpREFBZ0Q7QUFFaEQsd0NBQXdDO0FBRXhDLGdDQUF5QztBQUV6Qyx3Q0FBd0M7QUFTeEMsb0NBT087QUFLUCwyQkFHTztBQUVQLCtCQUFnQztBQU1oQyw2QkFBK0I7QUFLL0IsOEJBQWdDO0FBT2hDLG1DQUFvQztBQUNwQywrQkFBMkM7QUFNM0MsK0JBQXVDO0FBTXZDLDRCQUdPO0FBRVAsNEJBQStDOyIsCiAgIm5hbWVzIjogW10KfQo=
|
package/dist/lib/cjs/index.d.cts
CHANGED
|
@@ -69,6 +69,8 @@ export type { OpenObsidianSettingsTabParams } from './open-obsidian-settings-tab
|
|
|
69
69
|
export { openObsidianSettingsTab } from './open-obsidian-settings-tab.cjs';
|
|
70
70
|
export type { OwnedInstanceExitedErrorConstructorParams } from './owned-instance-exited-error.cjs';
|
|
71
71
|
export { OwnedInstanceExitedError } from './owned-instance-exited-error.cjs';
|
|
72
|
+
export type { BuildStatusBarBandFailureMessageParams, PaintOutStatusBarOptions, ResolveStatusBarBandParams, StatusBarBandColor, StatusBarBandVerdict } from './paint-out-status-bar.cjs';
|
|
73
|
+
export { buildStatusBarBandFailureMessage, DEFAULT_STATUS_BAR_EDGE_MARGIN_IN_PIXELS, DEFAULT_STATUS_BAR_SAMPLE_INSET_IN_PIXELS, paintOutStatusBar, resolveStatusBarBand } from './paint-out-status-bar.cjs';
|
|
72
74
|
export type { PollInObsidianParams } from './poll-in-obsidian.cjs';
|
|
73
75
|
export { pollInObsidian } from './poll-in-obsidian.cjs';
|
|
74
76
|
export { RendererFailedToInitializeError } from './renderer-failed-to-initialize-error.cjs';
|
|
@@ -79,7 +81,7 @@ export { runObsidianVersionMatrix } from './run-version-matrix.cjs';
|
|
|
79
81
|
export type { SilentAsarFallbackErrorConstructorParams } from './silent-asar-fallback-error.cjs';
|
|
80
82
|
export { SilentAsarFallbackError } from './silent-asar-fallback-error.cjs';
|
|
81
83
|
export type { BuildSoftKeyboardDiagnosticMessageParams, CheckIsSoftKeyboardUpParams, ElementRect, ResolveSoftKeyboardTapPointsParams, SoftKeyboardTapPoint, SoftKeyboardViewportSnapshot } from './soft-keyboard-geometry.cjs';
|
|
82
|
-
export { buildSoftKeyboardDiagnosticMessage, checkIsSoftKeyboardUp, DEFAULT_MINIMUM_KEYBOARD_HEIGHT_IN_PIXELS, parseInputMethodState, resolveSoftKeyboardTapPoints } from './soft-keyboard-geometry.cjs';
|
|
84
|
+
export { buildSoftKeyboardDiagnosticMessage, checkIsInputMethodShown, checkIsSoftKeyboardUp, DEFAULT_MINIMUM_KEYBOARD_HEIGHT_IN_PIXELS, parseInputMethodState, resolveSoftKeyboardTapPoints } from './soft-keyboard-geometry.cjs';
|
|
83
85
|
export type { RaiseSoftKeyboardParams, TapDeviceParams } from './soft-keyboard.cjs';
|
|
84
86
|
export { raiseSoftKeyboard, tapDevice } from './soft-keyboard.cjs';
|
|
85
87
|
export type { StaleBuildErrorConstructorParams } from './stale-build-error.cjs';
|
|
@@ -0,0 +1,46 @@
|
|
|
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 launched_device_selection_exports = {};
|
|
20
|
+
__export(launched_device_selection_exports, {
|
|
21
|
+
resolveLaunchedDevice: () => resolveLaunchedDevice,
|
|
22
|
+
splitNewDevices: () => splitNewDevices
|
|
23
|
+
});
|
|
24
|
+
module.exports = __toCommonJS(launched_device_selection_exports);
|
|
25
|
+
var import_avd_probe_verdict = require("./avd-probe-verdict.cjs");
|
|
26
|
+
function resolveLaunchedDevice(params) {
|
|
27
|
+
const match = params.candidates.find((candidate) => candidate.probedAvdName === params.avdName);
|
|
28
|
+
return {
|
|
29
|
+
deviceId: match?.deviceId,
|
|
30
|
+
otherAvdDeviceIds: params.candidates.filter((candidate) => candidate.probedAvdName !== void 0 && candidate.probedAvdName !== params.avdName).map((candidate) => candidate.deviceId),
|
|
31
|
+
unansweredDeviceIds: params.candidates.filter((candidate) => candidate.probedAvdName === void 0).map((candidate) => candidate.deviceId)
|
|
32
|
+
};
|
|
33
|
+
}
|
|
34
|
+
function splitNewDevices(params) {
|
|
35
|
+
const newDeviceIds = params.connectedDeviceIds.filter((deviceId) => !params.deviceIdsBefore.includes(deviceId));
|
|
36
|
+
return {
|
|
37
|
+
emulatorDeviceIds: newDeviceIds.filter((deviceId) => (0, import_avd_probe_verdict.checkIsEmulatorDeviceId)(deviceId)),
|
|
38
|
+
nonEmulatorDeviceIds: newDeviceIds.filter((deviceId) => !(0, import_avd_probe_verdict.checkIsEmulatorDeviceId)(deviceId))
|
|
39
|
+
};
|
|
40
|
+
}
|
|
41
|
+
// Annotate the CommonJS export names for ESM import in node:
|
|
42
|
+
0 && (module.exports = {
|
|
43
|
+
resolveLaunchedDevice,
|
|
44
|
+
splitNewDevices
|
|
45
|
+
});
|
|
46
|
+
//# sourceMappingURL=data:application/json;base64,ewogICJ2ZXJzaW9uIjogMywKICAic291cmNlcyI6IFsiLi4vLi4vLi4vc3JjL2xhdW5jaGVkLWRldmljZS1zZWxlY3Rpb24udHMiXSwKICAic291cmNlc0NvbnRlbnQiOiBbIi8qKlxuICogQGZpbGVcbiAqXG4gKiBQdXJlIHNlbGVjdGlvbiBvZiB0aGUgZGV2aWNlIGFuIGVtdWxhdG9yIHRoaXMgcnVuIGp1c3QgbGF1bmNoZWQgcHJvZHVjZWQuXG4gKlxuICogVGhlIHdhaXQgdXNlZCB0byB0YWtlIHRoZSBmaXJzdCBvbmxpbmUgZGV2aWNlIHRoYXQgd2FzIG5vdCBsaXN0ZWQgYmVmb3JlIHRoZVxuICogbGF1bmNoLiBUaGUgXCJiZWZvcmVcIiBzbmFwc2hvdCBsaXN0cyBvbmxpbmUgZGV2aWNlcyBvbmx5LCBzbyBhIGhhbmRzZXQgdGhhdCB3YXNcbiAqIGB1bmF1dGhvcml6ZWRgLCBgb2ZmbGluZWAgb3IgdW5wbHVnZ2VkIGF0IHRoYXQgbW9tZW50IFx1MjAxNCBhbmQgY2FtZSBvbmxpbmUgZHVyaW5nXG4gKiB0aGUgYm9vdCwgd2hpY2ggYSBVU0IgcmVjb25uZWN0IG9yIGFjY2VwdGluZyB0aGUgZGVidWdnaW5nIHByb21wdCBpcyBlbm91Z2hcbiAqIGZvciBcdTIwMTQgbG9va2VkIG5ldywgYW5kIHdhcyBhZG9wdGVkIGFzIHRoZSBlbXVsYXRvcjpcbiAqXG4gKiBgYGB0ZXh0XG4gKiBBVkQgXCJvYnNpZGlhbl90ZXN0XCIgbm90IGZvdW5kIG9uIGFueSBleGlzdGluZyBkZXZpY2UsIHN0YXJ0aW5nIGEgbmV3IGVtdWxhdG9yLi4uXG4gKiBXYWl0aW5nIGZvciBhIG5ldyBkZXZpY2UgdG8gYXBwZWFyIGluIEFEQiAuLi5cbiAqIERldmljZSAzQzE1Qk4wMDFZOTAwMDAwIGFwcGVhcmVkIGluIEFEQiwgd2FpdGluZyBmb3IgYm9vdCB0byBjb21wbGV0ZS4uLlxuICogRW11bGF0b3IgXCJvYnNpZGlhbl90ZXN0XCIgc3RhcnRlZCwgZGV2aWNlIDNDMTVCTjAwMVk5MDAwMDAgaXMgY29ubmVjdGVkIChvd25lZCBlbXVsYXRvciBQSURzOiBbXSlcbiAqIGBgYFxuICpcbiAqIFRoZSBzdWl0ZSB0aGVuIHJhbiBvbiB0aGUgcGhvbmUsIGFuZCB0aGUgZW11bGF0b3IgcmVhbGx5IGxhdW5jaGVkIHdhcyBvd25lZCBieVxuICogbm9ib2R5LiBTbyBhIG5ldyBkZXZpY2UgaXMgdGhlIGxhdW5jaGVkIGVtdWxhdG9yIG9ubHkgd2hlbiBpdCBpcyBhbiBlbXVsYXRvclxuICogKiphbmQqKiBpdCBzYXlzIGl0IGlzIHNlcnZpbmcgdGhlIGxhdW5jaGVkIEFWRCBcdTIwMTQgd2hpY2ggYWxzbyBrZWVwcyBhIHNlY29uZFxuICogZW11bGF0b3IgYW5vdGhlciBwcm9qZWN0IHN0YXJ0ZWQgY29uY3VycmVudGx5IGZyb20gYmVpbmcgYWRvcHRlZC5cbiAqXG4gKiBLZXB0IHNlcGFyYXRlIGZyb20gdGhlIGludGVncmF0aW9uLW9ubHkgYHRyYW5zcG9ydC1mYWN0b3J5YCBzbyB0aGUgZGVjaXNpb24gaXNcbiAqIHVuaXQtdGVzdGFibGU7IHRoZSBmYWN0b3J5IGRvZXMgdGhlIGBhZGJgIHJvdW5kLXRyaXBzLlxuICovXG5cbmltcG9ydCB7IGNoZWNrSXNFbXVsYXRvckRldmljZUlkIH0gZnJvbSAnLi9hdmQtcHJvYmUtdmVyZGljdC5janMnO1xuXG4vKipcbiAqIE9uZSBuZXcgZW11bGF0b3IgZGV2aWNlLCB3aXRoIHdoYXQgaXQgYW5zd2VyZWQgd2hlbiBhc2tlZCBmb3IgaXRzIEFWRCBuYW1lLlxuICovXG5leHBvcnQgaW50ZXJmYWNlIExhdW5jaGVkRGV2aWNlQ2FuZGlkYXRlIHtcbiAgLyoqXG4gICAqIFRoZSBkZXZpY2UgVURJRCwgZS5nLiBgZW11bGF0b3ItNTU1NGAuXG4gICAqL1xuICByZWFkb25seSBkZXZpY2VJZDogc3RyaW5nO1xuXG4gIC8qKlxuICAgKiBUaGUgQVZEIHRoZSBkZXZpY2UgcmVwb3J0ZWQsIG9yIGB1bmRlZmluZWRgIHdoZW4gaXQgZGlkIG5vdCBhbnN3ZXIuXG4gICAqL1xuICByZWFkb25seSBwcm9iZWRBdmROYW1lOiBzdHJpbmcgfCB1bmRlZmluZWQ7XG59XG5cbi8qKlxuICogVGhlIG5ldyBkZXZpY2VzIGEgcG9sbCBmb3VuZCwgc3BsaXQgYnkgd2hldGhlciB0aGV5IGNhbiBiZSB0aGUgbGF1bmNoZWQgZW11bGF0b3IuXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgTmV3RGV2aWNlU3BsaXQge1xuICAvKipcbiAgICogTmV3IGVtdWxhdG9yIGRldmljZXMsIHRvIGJlIGFza2VkIHdoaWNoIEFWRCB0aGV5IHNlcnZlLlxuICAgKi9cbiAgcmVhZG9ubHkgZW11bGF0b3JEZXZpY2VJZHM6IHN0cmluZ1tdO1xuXG4gIC8qKlxuICAgKiBOZXcgZGV2aWNlcyB0aGF0IGFyZSBub3QgZW11bGF0b3JzIChhIGhhbmRzZXQsIGEgVENQLWF0dGFjaGVkIGRldmljZSkgYW5kIGFyZSBuZXZlciBhZG9wdGVkLlxuICAgKi9cbiAgcmVhZG9ubHkgbm9uRW11bGF0b3JEZXZpY2VJZHM6IHN0cmluZ1tdO1xufVxuXG4vKipcbiAqIFBhcmFtZXRlcnMgZm9yIHtAbGluayByZXNvbHZlTGF1bmNoZWREZXZpY2V9LlxuICovXG5leHBvcnQgaW50ZXJmYWNlIFJlc29sdmVMYXVuY2hlZERldmljZVBhcmFtcyB7XG4gIC8qKlxuICAgKiBUaGUgQVZEIHRoaXMgcnVuIGxhdW5jaGVkLlxuICAgKi9cbiAgcmVhZG9ubHkgYXZkTmFtZTogc3RyaW5nO1xuXG4gIC8qKlxuICAgKiBUaGUgbmV3IGVtdWxhdG9yIGRldmljZXMsIHdpdGggdGhlaXIgcHJvYmUgYW5zd2Vycy5cbiAgICovXG4gIHJlYWRvbmx5IGNhbmRpZGF0ZXM6IHJlYWRvbmx5IExhdW5jaGVkRGV2aWNlQ2FuZGlkYXRlW107XG59XG5cbi8qKlxuICogV2hhdCB0aGUgcHJvYmUgYW5zd2VycyBzYXkgYWJvdXQgdGhlIGxhdW5jaGVkIGVtdWxhdG9yJ3MgZGV2aWNlLlxuICovXG5leHBvcnQgaW50ZXJmYWNlIFJlc29sdmVMYXVuY2hlZERldmljZVJlc3VsdCB7XG4gIC8qKlxuICAgKiBUaGUgZGV2aWNlIHNlcnZpbmcgdGhlIGxhdW5jaGVkIEFWRCwgb3IgYHVuZGVmaW5lZGAgd2hlbiBub25lIGRvZXMgeWV0LlxuICAgKi9cbiAgcmVhZG9ubHkgZGV2aWNlSWQ6IHN0cmluZyB8IHVuZGVmaW5lZDtcblxuICAvKipcbiAgICogRGV2aWNlcyB0aGF0IGFuc3dlcmVkIHdpdGggYSBkaWZmZXJlbnQgQVZEOiBhbm90aGVyIGVtdWxhdG9yLCBuZXZlciB0aGlzIHJ1bidzLlxuICAgKi9cbiAgcmVhZG9ubHkgb3RoZXJBdmREZXZpY2VJZHM6IHN0cmluZ1tdO1xuXG4gIC8qKlxuICAgKiBEZXZpY2VzIHRoYXQgZGlkIG5vdCBhbnN3ZXIgeWV0LCB0byBiZSBhc2tlZCBhZ2FpbiBvbiB0aGUgbmV4dCBwb2xsLlxuICAgKi9cbiAgcmVhZG9ubHkgdW5hbnN3ZXJlZERldmljZUlkczogc3RyaW5nW107XG59XG5cbi8qKlxuICogUGFyYW1ldGVycyBmb3Ige0BsaW5rIHNwbGl0TmV3RGV2aWNlc30uXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgU3BsaXROZXdEZXZpY2VzUGFyYW1zIHtcbiAgLyoqXG4gICAqIFRoZSBkZXZpY2VzIG9ubGluZSBub3cuXG4gICAqL1xuICByZWFkb25seSBjb25uZWN0ZWREZXZpY2VJZHM6IHJlYWRvbmx5IHN0cmluZ1tdO1xuXG4gIC8qKlxuICAgKiBUaGUgZGV2aWNlcyBvbmxpbmUgYmVmb3JlIHRoZSBsYXVuY2guXG4gICAqL1xuICByZWFkb25seSBkZXZpY2VJZHNCZWZvcmU6IHJlYWRvbmx5IHN0cmluZ1tdO1xufVxuXG4vKipcbiAqIFBpY2tzIHRoZSBuZXcgZW11bGF0b3IgZGV2aWNlIHRoYXQgc2VydmVzIHRoZSBsYXVuY2hlZCBBVkQuXG4gKlxuICogU2lsZW5jZSBpcyBub3QgYSBtYXRjaDogYSBkZXZpY2UgdGhhdCBkaWQgbm90IGFuc3dlciBpcyBhc2tlZCBhZ2FpbiwgbmV2ZXIgYWRvcHRlZFxuICogb24gdGhlIHN0cmVuZ3RoIG9mIGJlaW5nIG5ldy5cbiAqXG4gKiBAcGFyYW0gcGFyYW1zIC0gVGhlIGxhdW5jaGVkIEFWRCBhbmQgdGhlIHByb2JlZCBjYW5kaWRhdGVzLlxuICogQHJldHVybnMgVGhlIG1hdGNoaW5nIGRldmljZSwgcGx1cyB0aGUgb25lcyBydWxlZCBvdXQgYW5kIHRoZSBvbmVzIHN0aWxsIHVua25vd24uXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiByZXNvbHZlTGF1bmNoZWREZXZpY2UocGFyYW1zOiBSZXNvbHZlTGF1bmNoZWREZXZpY2VQYXJhbXMpOiBSZXNvbHZlTGF1bmNoZWREZXZpY2VSZXN1bHQge1xuICBjb25zdCBtYXRjaCA9IHBhcmFtcy5jYW5kaWRhdGVzLmZpbmQoKGNhbmRpZGF0ZSkgPT4gY2FuZGlkYXRlLnByb2JlZEF2ZE5hbWUgPT09IHBhcmFtcy5hdmROYW1lKTtcbiAgcmV0dXJuIHtcbiAgICBkZXZpY2VJZDogbWF0Y2g/LmRldmljZUlkLFxuICAgIG90aGVyQXZkRGV2aWNlSWRzOiBwYXJhbXMuY2FuZGlkYXRlc1xuICAgICAgLmZpbHRlcigoY2FuZGlkYXRlKSA9PiBjYW5kaWRhdGUucHJvYmVkQXZkTmFtZSAhPT0gdW5kZWZpbmVkICYmIGNhbmRpZGF0ZS5wcm9iZWRBdmROYW1lICE9PSBwYXJhbXMuYXZkTmFtZSlcbiAgICAgIC5tYXAoKGNhbmRpZGF0ZSkgPT4gY2FuZGlkYXRlLmRldmljZUlkKSxcbiAgICB1bmFuc3dlcmVkRGV2aWNlSWRzOiBwYXJhbXMuY2FuZGlkYXRlcy5maWx0ZXIoKGNhbmRpZGF0ZSkgPT4gY2FuZGlkYXRlLnByb2JlZEF2ZE5hbWUgPT09IHVuZGVmaW5lZCkubWFwKChjYW5kaWRhdGUpID0+IGNhbmRpZGF0ZS5kZXZpY2VJZClcbiAgfTtcbn1cblxuLyoqXG4gKiBTcGxpdHMgdGhlIGRldmljZXMgdGhhdCB3ZXJlIG5vdCBvbmxpbmUgYmVmb3JlIHRoZSBsYXVuY2ggaW50byBlbXVsYXRvcnMgYW5kIGV2ZXJ5dGhpbmcgZWxzZS5cbiAqXG4gKiBAcGFyYW0gcGFyYW1zIC0gVGhlIGRldmljZXMgb25saW5lIG5vdyBhbmQgYmVmb3JlIHRoZSBsYXVuY2guXG4gKiBAcmV0dXJucyBUaGUgbmV3IGRldmljZXMsIHNwbGl0LlxuICovXG5leHBvcnQgZnVuY3Rpb24gc3BsaXROZXdEZXZpY2VzKHBhcmFtczogU3BsaXROZXdEZXZpY2VzUGFyYW1zKTogTmV3RGV2aWNlU3BsaXQge1xuICBjb25zdCBuZXdEZXZpY2VJZHMgPSBwYXJhbXMuY29ubmVjdGVkRGV2aWNlSWRzLmZpbHRlcigoZGV2aWNlSWQpID0+ICFwYXJhbXMuZGV2aWNlSWRzQmVmb3JlLmluY2x1ZGVzKGRldmljZUlkKSk7XG4gIHJldHVybiB7XG4gICAgZW11bGF0b3JEZXZpY2VJZHM6IG5ld0RldmljZUlkcy5maWx0ZXIoKGRldmljZUlkKSA9PiBjaGVja0lzRW11bGF0b3JEZXZpY2VJZChkZXZpY2VJZCkpLFxuICAgIG5vbkVtdWxhdG9yRGV2aWNlSWRzOiBuZXdEZXZpY2VJZHMuZmlsdGVyKChkZXZpY2VJZCkgPT4gIWNoZWNrSXNFbXVsYXRvckRldmljZUlkKGRldmljZUlkKSlcbiAgfTtcbn1cbiJdLAogICJtYXBwaW5ncyI6ICI7Ozs7Ozs7Ozs7Ozs7Ozs7OztBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQTJCQSwrQkFBd0M7QUEyRmpDLFNBQVMsc0JBQXNCLFFBQWtFO0FBQ3RHLFFBQU0sUUFBUSxPQUFPLFdBQVcsS0FBSyxDQUFDLGNBQWMsVUFBVSxrQkFBa0IsT0FBTyxPQUFPO0FBQzlGLFNBQU87QUFBQSxJQUNMLFVBQVUsT0FBTztBQUFBLElBQ2pCLG1CQUFtQixPQUFPLFdBQ3ZCLE9BQU8sQ0FBQyxjQUFjLFVBQVUsa0JBQWtCLFVBQWEsVUFBVSxrQkFBa0IsT0FBTyxPQUFPLEVBQ3pHLElBQUksQ0FBQyxjQUFjLFVBQVUsUUFBUTtBQUFBLElBQ3hDLHFCQUFxQixPQUFPLFdBQVcsT0FBTyxDQUFDLGNBQWMsVUFBVSxrQkFBa0IsTUFBUyxFQUFFLElBQUksQ0FBQyxjQUFjLFVBQVUsUUFBUTtBQUFBLEVBQzNJO0FBQ0Y7QUFRTyxTQUFTLGdCQUFnQixRQUErQztBQUM3RSxRQUFNLGVBQWUsT0FBTyxtQkFBbUIsT0FBTyxDQUFDLGFBQWEsQ0FBQyxPQUFPLGdCQUFnQixTQUFTLFFBQVEsQ0FBQztBQUM5RyxTQUFPO0FBQUEsSUFDTCxtQkFBbUIsYUFBYSxPQUFPLENBQUMsaUJBQWEsa0RBQXdCLFFBQVEsQ0FBQztBQUFBLElBQ3RGLHNCQUFzQixhQUFhLE9BQU8sQ0FBQyxhQUFhLEtBQUMsa0RBQXdCLFFBQVEsQ0FBQztBQUFBLEVBQzVGO0FBQ0Y7IiwKICAibmFtZXMiOiBbXQp9Cg==
|