obsidian-integration-testing 8.3.0 → 8.4.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/asar-fallback-detection.cjs +48 -0
- package/dist/lib/cjs/asar-fallback-detection.d.cts +75 -0
- package/dist/lib/cjs/compatibility-options.cjs +18 -1
- package/dist/lib/cjs/compatibility-options.d.cts +41 -0
- package/dist/lib/cjs/connect-to-cdp.cjs +17 -18
- package/dist/lib/cjs/connect-to-cdp.d.cts +25 -0
- package/dist/lib/cjs/ecmascript-version.cjs +63 -0
- package/dist/lib/cjs/ecmascript-version.d.cts +28 -0
- package/dist/lib/cjs/index.cjs +7 -1
- package/dist/lib/cjs/index.d.cts +5 -1
- package/dist/lib/cjs/installer-asset.cjs +18 -3
- package/dist/lib/cjs/installer-asset.d.cts +26 -0
- package/dist/lib/cjs/library.cjs +1 -1
- package/dist/lib/cjs/namespace-bootstrap.cjs +44 -7
- package/dist/lib/cjs/normalize-optional-properties.cjs +31 -0
- package/dist/lib/cjs/normalize-optional-properties.d.cts +26 -0
- package/dist/lib/cjs/obsidian-installer.cjs +6 -1
- package/dist/lib/cjs/obsidian-metadata.cjs +3775 -302
- package/dist/lib/cjs/obsidian-metadata.d.cts +71 -0
- package/dist/lib/cjs/obsidian-version-switch.cjs +5 -2
- package/dist/lib/cjs/owned-vault-seed.cjs +38 -0
- package/dist/lib/cjs/owned-vault-seed.d.cts +67 -0
- package/dist/lib/cjs/silent-asar-fallback-error.cjs +48 -0
- package/dist/lib/cjs/silent-asar-fallback-error.d.cts +40 -0
- package/dist/lib/cjs/transport-desktop-cdp.cjs +197 -73
- package/dist/lib/cjs/transport-desktop-cdp.d.cts +74 -15
- package/dist/lib/cjs/transport-factory.cjs +14 -12
- package/dist/lib/cjs/transport-options.cjs +1 -1
- package/dist/lib/cjs/transport-options.d.cts +16 -0
- package/dist/lib/esm/asar-fallback-detection.d.mts +75 -0
- package/dist/lib/esm/asar-fallback-detection.mjs +24 -0
- package/dist/lib/esm/compatibility-options.d.mts +41 -0
- package/dist/lib/esm/compatibility-options.mjs +16 -1
- package/dist/lib/esm/connect-to-cdp.d.mts +25 -0
- package/dist/lib/esm/connect-to-cdp.mjs +17 -18
- package/dist/lib/esm/ecmascript-version.d.mts +28 -0
- package/dist/lib/esm/ecmascript-version.mjs +39 -0
- package/dist/lib/esm/index.d.mts +5 -1
- package/dist/lib/esm/index.mjs +5 -1
- package/dist/lib/esm/installer-asset.d.mts +26 -0
- package/dist/lib/esm/installer-asset.mjs +16 -2
- package/dist/lib/esm/library.mjs +1 -1
- package/dist/lib/esm/namespace-bootstrap.mjs +44 -7
- package/dist/lib/esm/normalize-optional-properties.d.mts +26 -0
- package/dist/lib/esm/normalize-optional-properties.mjs +7 -0
- package/dist/lib/esm/obsidian-installer.mjs +8 -2
- package/dist/lib/esm/obsidian-metadata.d.mts +71 -0
- package/dist/lib/esm/obsidian-metadata.mjs +3775 -302
- package/dist/lib/esm/obsidian-version-switch.mjs +5 -2
- package/dist/lib/esm/owned-vault-seed.d.mts +67 -0
- package/dist/lib/esm/owned-vault-seed.mjs +14 -0
- package/dist/lib/esm/silent-asar-fallback-error.d.mts +40 -0
- package/dist/lib/esm/silent-asar-fallback-error.mjs +24 -0
- package/dist/lib/esm/transport-desktop-cdp.d.mts +74 -15
- package/dist/lib/esm/transport-desktop-cdp.mjs +197 -73
- package/dist/lib/esm/transport-factory.mjs +15 -12
- package/dist/lib/esm/transport-options.d.mts +16 -0
- package/dist/obsidian-integration-testing-8.4.0.tgz +0 -0
- package/package.json +3 -1
- package/dist/obsidian-integration-testing-8.3.0.tgz +0 -0
|
@@ -18,9 +18,11 @@ import {
|
|
|
18
18
|
import process from "node:process";
|
|
19
19
|
import {
|
|
20
20
|
buildInstallerAssetNameCandidates,
|
|
21
|
-
selectInstallerAssetName
|
|
21
|
+
selectInstallerAssetName,
|
|
22
|
+
selectInstallerDownloadUrl
|
|
22
23
|
} from "./installer-asset.mjs";
|
|
23
24
|
import { log } from "./log.mjs";
|
|
25
|
+
import { getVersionMetadata } from "./obsidian-metadata.mjs";
|
|
24
26
|
const DOWNLOAD_USER_AGENT = "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/86.0.4240.183 Safari/537.36";
|
|
25
27
|
const RELEASE_DOWNLOAD_BASE_URL = "https://github.com/obsidianmd/obsidian-releases/releases/download";
|
|
26
28
|
const RELEASE_API_TAG_URL = "https://api.github.com/repos/obsidianmd/obsidian-releases/releases/tags";
|
|
@@ -176,6 +178,10 @@ function getCachedShellExePath(shellDir) {
|
|
|
176
178
|
return join(shellDir, "obsidian");
|
|
177
179
|
}
|
|
178
180
|
async function resolveInstallerAssetUrls(version) {
|
|
181
|
+
const bakedUrl = selectInstallerDownloadUrl({ downloads: getVersionMetadata(version)?.downloads, platform: process.platform });
|
|
182
|
+
if (bakedUrl !== void 0) {
|
|
183
|
+
return [bakedUrl];
|
|
184
|
+
}
|
|
179
185
|
const assetNames = await fetchReleaseAssetNames(version);
|
|
180
186
|
if (assetNames) {
|
|
181
187
|
const selected = selectInstallerAssetName({ assetNames, platform: process.platform, version });
|
|
@@ -197,4 +203,4 @@ export {
|
|
|
197
203
|
ensureShellCached,
|
|
198
204
|
getCachedShellDir
|
|
199
205
|
};
|
|
200
|
-
//# sourceMappingURL=data:application/json;base64,ewogICJ2ZXJzaW9uIjogMywKICAic291cmNlcyI6IFsiLi4vLi4vLi4vc3JjL29ic2lkaWFuLWluc3RhbGxlci50cyJdLAogICJzb3VyY2VzQ29udGVudCI6IFsiLyoqXG4gKiBAZmlsZVxuICpcbiAqIEludGVncmF0aW9uLXRpbWUgaGVscGVycyBmb3IgcmVzb2x2aW5nIHRoZSBPYnNpZGlhbiAqKnNoZWxsKiogKHRoZSBFbGVjdHJvblxuICogcnVudGltZSAvIGluc3RhbGxlciBidWlsZCkgdG8gbGF1bmNoLlxuICpcbiAqIEJ5IGRlZmF1bHQgdGhlIGhhcm5lc3MgdXNlcyB0aGUgaW5zdGFsbGVkIHNoZWxsLiBXaGVuIGEgc3BlY2lmaWMgaW5zdGFsbGVyXG4gKiB2ZXJzaW9uIGlzIHJlcXVlc3RlZCwgaXQgZG93bmxvYWRzIHRoYXQgdmVyc2lvbidzIEdpdEh1YiByZWxlYXNlIGFzc2V0IGFuZFxuICogZXh0cmFjdHMgYSBwb3J0YWJsZSBzaGVsbCBpbnRvIGEgY2FjaGUsIHJldHVybmluZyB0aGUgZXhlY3V0YWJsZSB0byBsYXVuY2guXG4gKlxuICogR2l0SHViIHJlbGVhc2UgYXNzZXRzIGV4aXN0IGZvciAqKnB1YmxpYyoqIHJlbGVhc2VzIG9ubHk7IGNhdGFseXN0IChiZXRhKVxuICogYnVpbGRzIHB1Ymxpc2ggb25seSB0aGUgYXNhciwgc28gaW5zdGFsbGVyLXBpbm5pbmcgc3VwcG9ydHMgcHVibGljIHZlcnNpb25zLlxuICogVGhlIGV4dHJhY3RlZCBzaGVsbCdzIGJ1bmRsZWQgYHJlc291cmNlcy9vYnNpZGlhbi5hc2FyYCBpcyB0aGF0IHZlcnNpb24sIHNvXG4gKiBwaW5uaW5nIHRoZSBpbnN0YWxsZXIgaXMgaG93IHlvdSBydW4gYSB2ZXJzaW9uICoqb2xkZXIqKiB0aGFuIHRoZSBpbnN0YWxsZWRcbiAqIHNoZWxsIChhc2FyLXN3YXAgaXMgdXBncmFkZS1vbmx5IFx1MjAxNCBzZWUgYG9ic2lkaWFuLXZlcnNpb24tc3dpdGNoLnRzYCkuXG4gKi9cblxuLyogdjggaWdub3JlIHN0YXJ0IC0tIEludGVncmF0aW9uLXRpbWUgZG93bmxvYWQvZXh0cmFjdGlvbiBnbHVlIGNvdmVyZWQgYnkgaW50ZWdyYXRpb24gdGVzdHMsIG5vdCB1bml0IHRlc3RzLiAqL1xuXG5pbXBvcnQge1xuICBleGVjRmlsZVN5bmMsXG4gIHNwYXduU3luY1xufSBmcm9tICdub2RlOmNoaWxkX3Byb2Nlc3MnO1xuaW1wb3J0IHtcbiAgZXhpc3RzU3luYyxcbiAgbWtkaXJTeW5jLFxuICByZWFkRmlsZVN5bmMsXG4gIHJtU3luYyxcbiAgd3JpdGVGaWxlU3luY1xufSBmcm9tICdub2RlOmZzJztcbmltcG9ydCB7IHRtcGRpciB9IGZyb20gJ25vZGU6b3MnO1xuaW1wb3J0IHtcbiAgYmFzZW5hbWUsXG4gIGRpcm5hbWUsXG4gIGpvaW5cbn0gZnJvbSAnbm9kZTpwYXRoJztcbmltcG9ydCBwcm9jZXNzIGZyb20gJ25vZGU6cHJvY2Vzcyc7XG5cbmltcG9ydCB7XG4gIGJ1aWxkSW5zdGFsbGVyQXNzZXROYW1lQ2FuZGlkYXRlcyxcbiAgc2VsZWN0SW5zdGFsbGVyQXNzZXROYW1lXG59IGZyb20gJy4vaW5zdGFsbGVyLWFzc2V0Lm1qcyc7XG5pbXBvcnQgeyBsb2cgfSBmcm9tICcuL2xvZy5tanMnO1xuXG4vKipcbiAqIEJyb3dzZXIgVXNlci1BZ2VudCBmb3IgZG93bmxvYWRpbmcgcmVsZWFzZSBhc3NldHMgKENsb3VkZmxhcmUtZ2F0ZWQpLlxuICovXG5jb25zdCBET1dOTE9BRF9VU0VSX0FHRU5UID0gJ01vemlsbGEvNS4wIChXaW5kb3dzIE5UIDEwLjA7IFdpbjY0OyB4NjQpIEFwcGxlV2ViS2l0LzUzNy4zNiAoS0hUTUwsIGxpa2UgR2Vja28pIENocm9tZS84Ni4wLjQyNDAuMTgzIFNhZmFyaS81MzcuMzYnO1xuXG4vKiogQmFzZSBVUkwgZm9yIGBvYnNpZGlhbi1yZWxlYXNlc2AgcmVsZWFzZSBhc3NldHMgKGAuLi4vZG93bmxvYWQvdjx2ZXI+Lzxhc3NldD5gKS4gKi9cbmNvbnN0IFJFTEVBU0VfRE9XTkxPQURfQkFTRV9VUkwgPSAnaHR0cHM6Ly9naXRodWIuY29tL29ic2lkaWFubWQvb2JzaWRpYW4tcmVsZWFzZXMvcmVsZWFzZXMvZG93bmxvYWQnO1xuXG4vKiogR2l0SHViIFJFU1QgZW5kcG9pbnQgbGlzdGluZyBhIHJlbGVhc2UncyBhc3NldHMgYnkgdGFnIChgLi4uL3JlbGVhc2VzL3RhZ3Mvdjx2ZXI+YCkuICovXG5jb25zdCBSRUxFQVNFX0FQSV9UQUdfVVJMID0gJ2h0dHBzOi8vYXBpLmdpdGh1Yi5jb20vcmVwb3Mvb2JzaWRpYW5tZC9vYnNpZGlhbi1yZWxlYXNlcy9yZWxlYXNlcy90YWdzJztcblxuLyoqIFRoZSBzdWJzZXQgb2YgdGhlIEdpdEh1YiByZWxlYXNlIEFQSSByZXNwb25zZSB0aGlzIG1vZHVsZSByZWFkcy4gKi9cbmludGVyZmFjZSBHaXRIdWJSZWxlYXNlIHtcbiAgLyoqIFRoZSByZWxlYXNlJ3MgZG93bmxvYWRhYmxlIGFzc2V0cy4gKi9cbiAgcmVhZG9ubHkgYXNzZXRzOiByZWFkb25seSBHaXRIdWJSZWxlYXNlQXNzZXRbXTtcbn1cblxuLyoqIFRoZSBzdWJzZXQgb2YgYSBHaXRIdWIgcmVsZWFzZSdzIGFzc2V0IG9iamVjdCB0aGlzIG1vZHVsZSByZWFkcy4gKi9cbmludGVyZmFjZSBHaXRIdWJSZWxlYXNlQXNzZXQge1xuICAvKiogVGhlIGFzc2V0IGZpbGUgbmFtZSwgZS5nLiBgT2JzaWRpYW4uMC4xNC41LmV4ZWAuICovXG4gIHJlYWRvbmx5IG5hbWU6IHN0cmluZztcbn1cblxuY29uc3QgQ0FDSEVfUk9PVCA9IGpvaW4odG1wZGlyKCksICdvYnNpZGlhbi1pbnRlZ3JhdGlvbi10ZXN0aW5nJyk7XG5jb25zdCBTSEVMTF9DQUNIRV9ESVIgPSBqb2luKENBQ0hFX1JPT1QsICdzaGVsbC1jYWNoZScpO1xuY29uc3QgTUFDX1BMSVNUX1ZFUlNJT05fUEFUVEVSTiA9IC88a2V5PkNGQnVuZGxlU2hvcnRWZXJzaW9uU3RyaW5nPFxcL2tleT5cXHMqPHN0cmluZz4oPzx2ZXJzaW9uPltePF0rKTxcXC9zdHJpbmc+LztcblxuLyoqXG4gKiBBIHJlc29sdmVkIE9ic2lkaWFuIHNoZWxsIGV4ZWN1dGFibGUuXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgUmVzb2x2ZWRTaGVsbCB7XG4gIC8qKiBBYnNvbHV0ZSBwYXRoIHRvIHRoZSBPYnNpZGlhbiBleGVjdXRhYmxlIHRvIGxhdW5jaC4gKi9cbiAgcmVhZG9ubHkgZXhlUGF0aDogc3RyaW5nO1xuXG4gIC8qKiBUaGUgc2hlbGwncyB2ZXJzaW9uLCBvciBgdW5kZWZpbmVkYCBpZiBpdCBjb3VsZCBub3QgYmUgZGV0ZWN0ZWQuICovXG4gIHJlYWRvbmx5IHZlcnNpb246IHN0cmluZyB8IHVuZGVmaW5lZDtcbn1cblxuLyoqXG4gKiBEZXRlY3RzIHRoZSB2ZXJzaW9uIG9mIGFuIGluc3RhbGxlZCBPYnNpZGlhbiBzaGVsbCBmcm9tIGl0cyBleGVjdXRhYmxlLlxuICpcbiAqIC0gV2luZG93czogdGhlIGV4ZWN1dGFibGUncyBQRSBgRmlsZVZlcnNpb25gLlxuICogLSBtYWNPUzogYENGQnVuZGxlU2hvcnRWZXJzaW9uU3RyaW5nYCBmcm9tIHRoZSBhcHAgYnVuZGxlJ3MgYEluZm8ucGxpc3RgLlxuICogLSBMaW51eDogYmVzdC1lZmZvcnQgcGFyc2UgZnJvbSB0aGUgZXhlY3V0YWJsZSBwYXRoIChvZnRlbiBgdW5kZWZpbmVkYCkuXG4gKlxuICogQHBhcmFtIGV4ZVBhdGggLSBBYnNvbHV0ZSBwYXRoIHRvIHRoZSBPYnNpZGlhbiBleGVjdXRhYmxlLlxuICogQHJldHVybnMgVGhlIGB4LnkuemAgdmVyc2lvbiwgb3IgYHVuZGVmaW5lZGAgaWYgaXQgY2Fubm90IGJlIGRldGVybWluZWQuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBkZXRlY3RJbnN0YWxsZWRTaGVsbFZlcnNpb24oZXhlUGF0aDogc3RyaW5nKTogc3RyaW5nIHwgdW5kZWZpbmVkIHtcbiAgaWYgKHByb2Nlc3MucGxhdGZvcm0gPT09ICd3aW4zMicpIHtcbiAgICByZXR1cm4gZGV0ZWN0V2luZG93c0ZpbGVWZXJzaW9uKGV4ZVBhdGgpO1xuICB9XG5cbiAgaWYgKHByb2Nlc3MucGxhdGZvcm0gPT09ICdkYXJ3aW4nKSB7XG4gICAgcmV0dXJuIGRldGVjdE1hY0J1bmRsZVZlcnNpb24oZXhlUGF0aCk7XG4gIH1cblxuICByZXR1cm4gZGV0ZWN0VmVyc2lvbkZyb21QYXRoKGV4ZVBhdGgpO1xufVxuXG4vKipcbiAqIEVuc3VyZXMgYSBwb3J0YWJsZSBPYnNpZGlhbiBzaGVsbCBmb3IgdGhlIGdpdmVuIHZlcnNpb24gaXMgZXh0cmFjdGVkIGludG8gdGhlXG4gKiBjYWNoZSwgZG93bmxvYWRpbmcgYW5kIGV4dHJhY3RpbmcgaXRzIEdpdEh1YiByZWxlYXNlIGFzc2V0IGlmIG5lY2Vzc2FyeS5cbiAqXG4gKiBAcGFyYW0gdmVyc2lvbiAtIEEgY29uY3JldGUgcHVibGljIGB4LnkuemAgdmVyc2lvbi5cbiAqIEByZXR1cm5zIFRoZSBhYnNvbHV0ZSBwYXRoIHRvIHRoZSBjYWNoZWQgc2hlbGwgZXhlY3V0YWJsZS5cbiAqIEB0aHJvd3MgRXJyb3IgaWYgdGhlIGFzc2V0IGNhbm5vdCBiZSBkb3dubG9hZGVkIG9yIGV4dHJhY3RlZC5cbiAqL1xuZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIGVuc3VyZVNoZWxsQ2FjaGVkKHZlcnNpb246IHN0cmluZyk6IFByb21pc2U8c3RyaW5nPiB7XG4gIGNvbnN0IHNoZWxsRGlyID0gZ2V0Q2FjaGVkU2hlbGxEaXIodmVyc2lvbik7XG4gIGNvbnN0IGV4ZVBhdGggPSBnZXRDYWNoZWRTaGVsbEV4ZVBhdGgoc2hlbGxEaXIpO1xuICBpZiAoZXhpc3RzU3luYyhleGVQYXRoKSkge1xuICAgIGxvZyhgW2luc3RhbGxlcl0gVXNpbmcgY2FjaGVkIHNoZWxsIGZvciAke3ZlcnNpb259LmApO1xuICAgIHJldHVybiBleGVQYXRoO1xuICB9XG5cbiAgbWtkaXJTeW5jKHNoZWxsRGlyLCB7IHJlY3Vyc2l2ZTogdHJ1ZSB9KTtcbiAgY29uc3QgYXNzZXRVcmxzID0gYXdhaXQgcmVzb2x2ZUluc3RhbGxlckFzc2V0VXJscyh2ZXJzaW9uKTtcbiAgY29uc3QgYXNzZXRQYXRoID0gYXdhaXQgZG93bmxvYWRJbnN0YWxsZXJBc3NldChhc3NldFVybHMsIHNoZWxsRGlyLCB2ZXJzaW9uKTtcbiAgZXh0cmFjdFNoZWxsKGFzc2V0UGF0aCwgc2hlbGxEaXIpO1xuICBybVN5bmMoYXNzZXRQYXRoLCB7IGZvcmNlOiB0cnVlIH0pO1xuXG4gIGlmICghZXhpc3RzU3luYyhleGVQYXRoKSkge1xuICAgIHRocm93IG5ldyBFcnJvcihgRXh0cmFjdGVkIE9ic2lkaWFuIHNoZWxsICR7dmVyc2lvbn0gYnV0IGV4ZWN1dGFibGUgbm90IGZvdW5kIGF0ICR7ZXhlUGF0aH0uYCk7XG4gIH1cbiAgbG9nKGBbaW5zdGFsbGVyXSBFeHRyYWN0ZWQgc2hlbGwgJHt2ZXJzaW9ufSAtPiAke2V4ZVBhdGh9YCk7XG4gIHJldHVybiBleGVQYXRoO1xufVxuXG4vKipcbiAqIFJldHVybnMgdGhlIGNhY2hlIGRpcmVjdG9yeSBhIHZlcnNpb24ncyBleHRyYWN0ZWQgc2hlbGwgbGl2ZXMgaW4gKHRoZVxuICogZGlyZWN0b3J5IG1heSBub3QgeWV0IGV4aXN0KS5cbiAqXG4gKiBAcGFyYW0gdmVyc2lvbiAtIEEgY29uY3JldGUgcHVibGljIGB4LnkuemAgdmVyc2lvbi5cbiAqIEByZXR1cm5zIFRoZSBhYnNvbHV0ZSBzaGVsbCBjYWNoZSBkaXJlY3RvcnkgZm9yIHRoZSB2ZXJzaW9uLlxuICovXG5leHBvcnQgZnVuY3Rpb24gZ2V0Q2FjaGVkU2hlbGxEaXIodmVyc2lvbjogc3RyaW5nKTogc3RyaW5nIHtcbiAgcmV0dXJuIGpvaW4oU0hFTExfQ0FDSEVfRElSLCB2ZXJzaW9uKTtcbn1cblxuLyoqXG4gKiBUaHJvd3MgYSBkZXNjcmlwdGl2ZSBlcnJvciBpZiBhIHJlcXVpcmVkIGNvbW1hbmQgaXMgbm90IG9uIGBQQVRIYC5cbiAqXG4gKiBAcGFyYW0gY29tbWFuZCAtIFRoZSBjb21tYW5kIG5hbWUuXG4gKiBAcGFyYW0gaGludCAtIEFjdGlvbmFibGUgZ3VpZGFuY2UgYXBwZW5kZWQgdG8gdGhlIGVycm9yLlxuICovXG5mdW5jdGlvbiBhc3NlcnRDb21tYW5kQXZhaWxhYmxlKGNvbW1hbmQ6IHN0cmluZywgaGludDogc3RyaW5nKTogdm9pZCB7XG4gIGNvbnN0IHByb2JlID0gcHJvY2Vzcy5wbGF0Zm9ybSA9PT0gJ3dpbjMyJyA/ICd3aGVyZS5leGUnIDogJ3doaWNoJztcbiAgY29uc3QgcmVzdWx0ID0gc3Bhd25TeW5jKHByb2JlLCBbY29tbWFuZF0sIHsgc3RkaW86ICdpZ25vcmUnIH0pO1xuICBpZiAocmVzdWx0LnN0YXR1cyAhPT0gMCkge1xuICAgIHRocm93IG5ldyBFcnJvcihgUmVxdWlyZWQgY29tbWFuZCBcIiR7Y29tbWFuZH1cIiB3YXMgbm90IGZvdW5kIG9uIFBBVEguICR7aGludH1gKTtcbiAgfVxufVxuXG4vKipcbiAqIFJlYWRzIGBDRkJ1bmRsZVNob3J0VmVyc2lvblN0cmluZ2AgZnJvbSBhIG1hY09TIGFwcCBidW5kbGUncyBgSW5mby5wbGlzdGAuXG4gKlxuICogQHBhcmFtIGV4ZVBhdGggLSBQYXRoIHRvIGAuLi4vT2JzaWRpYW4uYXBwL0NvbnRlbnRzL01hY09TL09ic2lkaWFuYC5cbiAqIEByZXR1cm5zIFRoZSBgeC55LnpgIHZlcnNpb24sIG9yIGB1bmRlZmluZWRgLlxuICovXG5mdW5jdGlvbiBkZXRlY3RNYWNCdW5kbGVWZXJzaW9uKGV4ZVBhdGg6IHN0cmluZyk6IHN0cmluZyB8IHVuZGVmaW5lZCB7XG4gIHRyeSB7XG4gICAgY29uc3QgY29udGVudHNEaXIgPSBkaXJuYW1lKGRpcm5hbWUoZXhlUGF0aCkpO1xuICAgIGNvbnN0IHBsaXN0ID0gcmVhZEZpbGVTeW5jKGpvaW4oY29udGVudHNEaXIsICdJbmZvLnBsaXN0JyksICd1dGYtOCcpO1xuICAgIGNvbnN0IG1hdGNoID0gTUFDX1BMSVNUX1ZFUlNJT05fUEFUVEVSTi5leGVjKHBsaXN0KTtcbiAgICByZXR1cm4gbWF0Y2g/Lmdyb3Vwcz8uWyd2ZXJzaW9uJ107XG4gIH0gY2F0Y2gge1xuICAgIHJldHVybiB1bmRlZmluZWQ7XG4gIH1cbn1cblxuLyoqXG4gKiBCZXN0LWVmZm9ydCBwYXJzZSBvZiBhbiBgeC55LnpgIHZlcnNpb24gZW1iZWRkZWQgaW4gYSBwYXRoLlxuICpcbiAqIEBwYXJhbSB2YWx1ZSAtIFRoZSBwYXRoIG9yIHN0cmluZyB0byBzY2FuLlxuICogQHJldHVybnMgVGhlIGZpcnN0IGB4LnkuemAgbWF0Y2gsIG9yIGB1bmRlZmluZWRgLlxuICovXG5mdW5jdGlvbiBkZXRlY3RWZXJzaW9uRnJvbVBhdGgodmFsdWU6IHN0cmluZyk6IHN0cmluZyB8IHVuZGVmaW5lZCB7XG4gIGNvbnN0IG1hdGNoID0gLyg/PHZlcnNpb24+XFxkK1xcLlxcZCtcXC5cXGQrKS8uZXhlYyh2YWx1ZSk7XG4gIHJldHVybiBtYXRjaD8uZ3JvdXBzPy5bJ3ZlcnNpb24nXTtcbn1cblxuLyoqXG4gKiBSZWFkcyB0aGUgUEUgYEZpbGVWZXJzaW9uYCBvZiBhIFdpbmRvd3MgZXhlY3V0YWJsZSB2aWEgUG93ZXJTaGVsbC5cbiAqXG4gKiBAcGFyYW0gZXhlUGF0aCAtIEFic29sdXRlIHBhdGggdG8gdGhlIGV4ZWN1dGFibGUuXG4gKiBAcmV0dXJucyBUaGUgYHgueS56YCB2ZXJzaW9uLCBvciBgdW5kZWZpbmVkYC5cbiAqL1xuZnVuY3Rpb24gZGV0ZWN0V2luZG93c0ZpbGVWZXJzaW9uKGV4ZVBhdGg6IHN0cmluZyk6IHN0cmluZyB8IHVuZGVmaW5lZCB7XG4gIHRyeSB7XG4gICAgY29uc3Qgb3V0cHV0ID0gZXhlY0ZpbGVTeW5jKFxuICAgICAgJ3Bvd2Vyc2hlbGwnLFxuICAgICAgWyctTm9Qcm9maWxlJywgJy1Db21tYW5kJywgYChHZXQtSXRlbSAtTGl0ZXJhbFBhdGggJHtKU09OLnN0cmluZ2lmeShleGVQYXRoKX0pLlZlcnNpb25JbmZvLkZpbGVWZXJzaW9uYF0sXG4gICAgICB7IGVuY29kaW5nOiAndXRmLTgnIH1cbiAgICApO1xuICAgIGNvbnN0IHZlcnNpb24gPSBvdXRwdXQudHJpbSgpO1xuICAgIHJldHVybiB2ZXJzaW9uLmxlbmd0aCA+IDAgPyB2ZXJzaW9uIDogdW5kZWZpbmVkO1xuICB9IGNhdGNoIHtcbiAgICByZXR1cm4gdW5kZWZpbmVkO1xuICB9XG59XG5cbi8qKlxuICogRG93bmxvYWRzIGEgc2luZ2xlIHJlbGVhc2UgYXNzZXQgZm9yIGEgdmVyc2lvbiB0byBhIGRlc3RpbmF0aW9uIGZpbGUuXG4gKlxuICogQHBhcmFtIHVybCAtIFRoZSBhc3NldCBkb3dubG9hZCBVUkwuXG4gKiBAcGFyYW0gZGVzdCAtIERlc3RpbmF0aW9uIGZpbGUgcGF0aC5cbiAqIEB0aHJvd3MgRXJyb3IgaWYgdGhlIHJlcXVlc3QgZmFpbHMuXG4gKi9cbmFzeW5jIGZ1bmN0aW9uIGRvd25sb2FkQXNzZXQodXJsOiBzdHJpbmcsIGRlc3Q6IHN0cmluZyk6IFByb21pc2U8dm9pZD4ge1xuICBsb2coYFtpbnN0YWxsZXJdIERvd25sb2FkaW5nIGluc3RhbGxlciBmcm9tICR7dXJsfSAuLi5gKTtcbiAgY29uc3QgcmVzcG9uc2UgPSBhd2FpdCBmZXRjaCh1cmwsIHsgaGVhZGVyczogeyAnVXNlci1BZ2VudCc6IERPV05MT0FEX1VTRVJfQUdFTlQgfSB9KTtcbiAgaWYgKCFyZXNwb25zZS5vaykge1xuICAgIHRocm93IG5ldyBFcnJvcihgSFRUUCAke1N0cmluZyhyZXNwb25zZS5zdGF0dXMpfWApO1xuICB9XG4gIHdyaXRlRmlsZVN5bmMoZGVzdCwgQnVmZmVyLmZyb20oYXdhaXQgcmVzcG9uc2UuYXJyYXlCdWZmZXIoKSkpO1xufVxuXG4vKipcbiAqIERvd25sb2FkcyB0aGUgZmlyc3QgcmVhY2hhYmxlIGluc3RhbGxlciBhc3NldCBmcm9tIGFuIG9yZGVyZWQgbGlzdCBvZlxuICogY2FuZGlkYXRlIFVSTHMsIHJldHVybmluZyB0aGUgcGF0aCBpdCB3YXMgc2F2ZWQgdG8uXG4gKlxuICogQHBhcmFtIHVybHMgLSBDYW5kaWRhdGUgYXNzZXQgVVJMcywgaW4gcHJpb3JpdHkgb3JkZXIuXG4gKiBAcGFyYW0gc2hlbGxEaXIgLSBUaGUgZGVzdGluYXRpb24gc2hlbGwgZGlyZWN0b3J5LlxuICogQHBhcmFtIHZlcnNpb24gLSBUaGUgcmVsZWFzZSB2ZXJzaW9uIChmb3IgZXJyb3IgbWVzc2FnZXMpLlxuICogQHJldHVybnMgVGhlIGRvd25sb2FkZWQgYXNzZXQncyBwYXRoLlxuICogQHRocm93cyBFcnJvciBpZiBub25lIG9mIHRoZSBjYW5kaWRhdGVzIGNhbiBiZSBkb3dubG9hZGVkLlxuICovXG5hc3luYyBmdW5jdGlvbiBkb3dubG9hZEluc3RhbGxlckFzc2V0KHVybHM6IHN0cmluZ1tdLCBzaGVsbERpcjogc3RyaW5nLCB2ZXJzaW9uOiBzdHJpbmcpOiBQcm9taXNlPHN0cmluZz4ge1xuICBjb25zdCBlcnJvcnM6IHN0cmluZ1tdID0gW107XG4gIGZvciAoY29uc3QgdXJsIG9mIHVybHMpIHtcbiAgICBjb25zdCBhc3NldFBhdGggPSBqb2luKHNoZWxsRGlyLCBiYXNlbmFtZSh1cmwpKTtcbiAgICB0cnkge1xuICAgICAgYXdhaXQgZG93bmxvYWRBc3NldCh1cmwsIGFzc2V0UGF0aCk7XG4gICAgICByZXR1cm4gYXNzZXRQYXRoO1xuICAgIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgICBlcnJvcnMucHVzaChgJHt1cmx9OiAke2Vycm9yIGluc3RhbmNlb2YgRXJyb3IgPyBlcnJvci5tZXNzYWdlIDogU3RyaW5nKGVycm9yKX1gKTtcbiAgICB9XG4gIH1cblxuICB0aHJvdyBuZXcgRXJyb3IoXG4gICAgYEZhaWxlZCB0byBkb3dubG9hZCBPYnNpZGlhbiBpbnN0YWxsZXIgJHt2ZXJzaW9ufS4gQXR0ZW1wdHM6ICR7ZXJyb3JzLmpvaW4oJzsgJyl9LiBgXG4gICAgICArICdDYXRhbHlzdC9iZXRhIHZlcnNpb25zIGhhdmUgbm8gcHVibGljIGluc3RhbGxlciBcdTIwMTQgcGluIGFuIGFzYXIgdmVyc2lvbiBvbiBhIHB1YmxpYy9pbnN0YWxsZWQgc2hlbGwgaW5zdGVhZC4nXG4gICk7XG59XG5cbi8qKlxuICogRXh0cmFjdHMgYSBMaW51eCBgLnRhci5nemAgcG9ydGFibGUgYnVpbGQuXG4gKlxuICogQHBhcmFtIGFzc2V0UGF0aCAtIFBhdGggdG8gdGhlIGRvd25sb2FkZWQgYC50YXIuZ3pgLlxuICogQHBhcmFtIHNoZWxsRGlyIC0gRGVzdGluYXRpb24gc2hlbGwgZGlyZWN0b3J5LlxuICovXG5mdW5jdGlvbiBleHRyYWN0TGludXhTaGVsbChhc3NldFBhdGg6IHN0cmluZywgc2hlbGxEaXI6IHN0cmluZyk6IHZvaWQge1xuICBydW4oJ3RhcicsIFsneHpmJywgYXNzZXRQYXRoLCAnLUMnLCBzaGVsbERpciwgJy0tc3RyaXAtY29tcG9uZW50cz0xJ10pO1xufVxuXG4vKipcbiAqIEV4dHJhY3RzIGEgbWFjT1MgYC5kbWdgIGJ5IG1vdW50aW5nIGl0IGFuZCBjb3B5aW5nIHRoZSBhcHAgYnVuZGxlLlxuICpcbiAqIEBwYXJhbSBhc3NldFBhdGggLSBQYXRoIHRvIHRoZSBkb3dubG9hZGVkIGAuZG1nYC5cbiAqIEBwYXJhbSBzaGVsbERpciAtIERlc3RpbmF0aW9uIHNoZWxsIGRpcmVjdG9yeS5cbiAqL1xuZnVuY3Rpb24gZXh0cmFjdE1hY1NoZWxsKGFzc2V0UGF0aDogc3RyaW5nLCBzaGVsbERpcjogc3RyaW5nKTogdm9pZCB7XG4gIGNvbnN0IG1vdW50UG9pbnQgPSBqb2luKHNoZWxsRGlyLCAnX19tbnQnKTtcbiAgbWtkaXJTeW5jKG1vdW50UG9pbnQsIHsgcmVjdXJzaXZlOiB0cnVlIH0pO1xuICBydW4oJ2hkaXV0aWwnLCBbJ2F0dGFjaCcsICctbm9icm93c2UnLCAnLW1vdW50cG9pbnQnLCBtb3VudFBvaW50LCBhc3NldFBhdGhdKTtcbiAgdHJ5IHtcbiAgICBydW4oJ2NwJywgWyctUicsIGpvaW4obW91bnRQb2ludCwgJ09ic2lkaWFuLmFwcCcpLCBzaGVsbERpcl0pO1xuICB9IGZpbmFsbHkge1xuICAgIHJ1bignaGRpdXRpbCcsIFsnZGV0YWNoJywgbW91bnRQb2ludF0pO1xuICB9XG4gIHJtU3luYyhtb3VudFBvaW50LCB7IGZvcmNlOiB0cnVlLCByZWN1cnNpdmU6IHRydWUgfSk7XG59XG5cbi8qKlxuICogRXh0cmFjdHMgYSBkb3dubG9hZGVkIGluc3RhbGxlciBhc3NldCBpbnRvIGEgc2hlbGwgZGlyZWN0b3J5LCBwZXIgcGxhdGZvcm0uXG4gKlxuICogQHBhcmFtIGFzc2V0UGF0aCAtIFRoZSBkb3dubG9hZGVkIGFzc2V0IHBhdGguXG4gKiBAcGFyYW0gc2hlbGxEaXIgLSBUaGUgZGVzdGluYXRpb24gc2hlbGwgZGlyZWN0b3J5LlxuICovXG5mdW5jdGlvbiBleHRyYWN0U2hlbGwoYXNzZXRQYXRoOiBzdHJpbmcsIHNoZWxsRGlyOiBzdHJpbmcpOiB2b2lkIHtcbiAgaWYgKHByb2Nlc3MucGxhdGZvcm0gPT09ICd3aW4zMicpIHtcbiAgICBleHRyYWN0V2luZG93c1NoZWxsKGFzc2V0UGF0aCwgc2hlbGxEaXIpO1xuICAgIHJldHVybjtcbiAgfVxuXG4gIGlmIChwcm9jZXNzLnBsYXRmb3JtID09PSAnZGFyd2luJykge1xuICAgIGV4dHJhY3RNYWNTaGVsbChhc3NldFBhdGgsIHNoZWxsRGlyKTtcbiAgICByZXR1cm47XG4gIH1cblxuICBleHRyYWN0TGludXhTaGVsbChhc3NldFBhdGgsIHNoZWxsRGlyKTtcbn1cblxuLyoqXG4gKiBFeHRyYWN0cyBhIFdpbmRvd3MgTlNJUyBpbnN0YWxsZXIncyBpbm5lciBhcHAgcGF5bG9hZCB2aWEgNy1aaXAuXG4gKlxuICogVGhlIE5TSVMgaW5zdGFsbGVyIGAuZXhlYCBjb250YWlucyBgJFBMVUdJTlNESVIvYXBwLTY0Ljd6YCwgd2hpY2ggaG9sZHMgdGhlXG4gKiBwb3J0YWJsZSBhcHAgKG1pcnJvcnMgaG93IHRoZSBzY29vcCBtYW5pZmVzdCBpbnN0YWxscyBPYnNpZGlhbikuXG4gKlxuICogQHBhcmFtIGFzc2V0UGF0aCAtIFBhdGggdG8gdGhlIGRvd25sb2FkZWQgYC5leGVgLlxuICogQHBhcmFtIHNoZWxsRGlyIC0gRGVzdGluYXRpb24gc2hlbGwgZGlyZWN0b3J5LlxuICovXG5mdW5jdGlvbiBleHRyYWN0V2luZG93c1NoZWxsKGFzc2V0UGF0aDogc3RyaW5nLCBzaGVsbERpcjogc3RyaW5nKTogdm9pZCB7XG4gIGFzc2VydENvbW1hbmRBdmFpbGFibGUoJzd6JywgJ0luc3RhbGwgNy1aaXAgKGUuZy4gYHNjb29wIGluc3RhbGwgN3ppcGApIHRvIGV4dHJhY3QgYSBwaW5uZWQgT2JzaWRpYW4gaW5zdGFsbGVyLicpO1xuICBjb25zdCBuc2lzRXh0cmFjdERpciA9IGpvaW4oc2hlbGxEaXIsICdfX25zaXMnKTtcbiAgcnVuKCc3eicsIFsneCcsICcteScsIGAtbyR7bnNpc0V4dHJhY3REaXJ9YCwgYXNzZXRQYXRoXSk7XG4gIGNvbnN0IGlubmVyQXJjaGl2ZSA9IGpvaW4obnNpc0V4dHJhY3REaXIsICckUExVR0lOU0RJUicsICdhcHAtNjQuN3onKTtcbiAgcnVuKCc3eicsIFsneCcsICcteScsIGAtbyR7c2hlbGxEaXJ9YCwgaW5uZXJBcmNoaXZlXSk7XG4gIHJtU3luYyhuc2lzRXh0cmFjdERpciwgeyBmb3JjZTogdHJ1ZSwgcmVjdXJzaXZlOiB0cnVlIH0pO1xufVxuXG4vKipcbiAqIEZldGNoZXMgYSByZWxlYXNlJ3MgYXNzZXQgbmFtZXMgZnJvbSB0aGUgR2l0SHViIEFQSS5cbiAqXG4gKiBSZWFkcyBhIGBHSVRIVUJfVE9LRU5gIChvciBgR0hfVE9LRU5gKSBmcm9tIHRoZSBlbnZpcm9ubWVudCBhbmQgc2VuZHMgaXQgYXMgYVxuICogYmVhcmVyIHRva2VuIHdoZW4gcHJlc2VudCwgdG8gbGlmdCB0aGUgYW5vbnltb3VzIHJhdGUgbGltaXQgdGhhdCBvdGhlcndpc2VcbiAqIHJldHVybnMgSFRUUCA0MDMgb24gc2hhcmVkIENJIHJ1bm5lciBJUHMuXG4gKlxuICogQHBhcmFtIHZlcnNpb24gLSBUaGUgcmVsZWFzZSB2ZXJzaW9uICh0YWcgYHY8dmVyc2lvbj5gKS5cbiAqIEByZXR1cm5zIFRoZSBhc3NldCBuYW1lcywgb3IgYHVuZGVmaW5lZGAgaWYgdGhlIEFQSSBpcyB1bmF2YWlsYWJsZS5cbiAqL1xuYXN5bmMgZnVuY3Rpb24gZmV0Y2hSZWxlYXNlQXNzZXROYW1lcyh2ZXJzaW9uOiBzdHJpbmcpOiBQcm9taXNlPHN0cmluZ1tdIHwgdW5kZWZpbmVkPiB7XG4gIHRyeSB7XG4gICAgY29uc3QgaGVhZGVycyA9IG5ldyBIZWFkZXJzKHsgJ0FjY2VwdCc6ICdhcHBsaWNhdGlvbi92bmQuZ2l0aHViK2pzb24nLCAnVXNlci1BZ2VudCc6IERPV05MT0FEX1VTRVJfQUdFTlQgfSk7XG4gICAgLy8gU2VuZCBhIGJlYXJlciB0b2tlbiB3aGVuIG9uZSBpcyBhdmFpbGFibGUgKGUuZy4gR0lUSFVCX1RPS0VOIG9uIENJKS5cbiAgICAvLyBXaXRob3V0IGl0IHRoZSBhc3NldC1saXN0IEFQSSBpcyBsaW1pdGVkIHRvIHRoZSBhbm9ueW1vdXMgcXVvdGEuXG4gICAgLy8gVGhhdCBxdW90YSByZXR1cm5zIEhUVFAgNDAzIG9uIHNoYXJlZCBDSSBydW5uZXIgSVBzIGFuZCBmb3JjZXMgdGhlIGZhbGxiYWNrLlxuICAgIGNvbnN0IHRva2VuID0gcHJvY2Vzcy5lbnZbJ0dJVEhVQl9UT0tFTiddID8/IHByb2Nlc3MuZW52WydHSF9UT0tFTiddO1xuICAgIGlmICh0b2tlbikge1xuICAgICAgaGVhZGVycy5zZXQoJ0F1dGhvcml6YXRpb24nLCBgQmVhcmVyICR7dG9rZW59YCk7XG4gICAgfVxuICAgIGNvbnN0IHJlc3BvbnNlID0gYXdhaXQgZmV0Y2goYCR7UkVMRUFTRV9BUElfVEFHX1VSTH0vdiR7dmVyc2lvbn1gLCB7IGhlYWRlcnMgfSk7XG4gICAgaWYgKCFyZXNwb25zZS5vaykge1xuICAgICAgbG9nKGBbaW5zdGFsbGVyXSBSZWxlYXNlIEFQSSBmb3IgJHt2ZXJzaW9ufSByZXR1cm5lZCBIVFRQICR7U3RyaW5nKHJlc3BvbnNlLnN0YXR1cyl9OyBmYWxsaW5nIGJhY2sgdG8gdGVtcGxhdGVkIGFzc2V0IG5hbWVzLmApO1xuICAgICAgcmV0dXJuIHVuZGVmaW5lZDtcbiAgICB9XG4gICAgY29uc3QgcmVsZWFzZSA9IGF3YWl0IHJlc3BvbnNlLmpzb24oKSBhcyBHaXRIdWJSZWxlYXNlO1xuICAgIHJldHVybiByZWxlYXNlLmFzc2V0cy5tYXAoKGFzc2V0KSA9PiBhc3NldC5uYW1lKTtcbiAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICBsb2coYFtpbnN0YWxsZXJdIFJlbGVhc2UgQVBJIGZvciAke3ZlcnNpb259IHVuYXZhaWxhYmxlICgke2Vycm9yIGluc3RhbmNlb2YgRXJyb3IgPyBlcnJvci5tZXNzYWdlIDogU3RyaW5nKGVycm9yKX0pOyBmYWxsaW5nIGJhY2sgdG8gdGVtcGxhdGVkIGFzc2V0IG5hbWVzLmApO1xuICAgIHJldHVybiB1bmRlZmluZWQ7XG4gIH1cbn1cblxuLyoqXG4gKiBSZXR1cm5zIHRoZSBleHBlY3RlZCBjYWNoZWQgc2hlbGwgZXhlY3V0YWJsZSBwYXRoIGZvciB0aGUgY3VycmVudCBwbGF0Zm9ybS5cbiAqXG4gKiBAcGFyYW0gc2hlbGxEaXIgLSBUaGUgc2hlbGwgY2FjaGUgZGlyZWN0b3J5IGZvciBhIHZlcnNpb24uXG4gKiBAcmV0dXJucyBUaGUgZXhlY3V0YWJsZSBwYXRoLlxuICovXG5mdW5jdGlvbiBnZXRDYWNoZWRTaGVsbEV4ZVBhdGgoc2hlbGxEaXI6IHN0cmluZyk6IHN0cmluZyB7XG4gIGlmIChwcm9jZXNzLnBsYXRmb3JtID09PSAnd2luMzInKSB7XG4gICAgcmV0dXJuIGpvaW4oc2hlbGxEaXIsICdPYnNpZGlhbi5leGUnKTtcbiAgfVxuXG4gIGlmIChwcm9jZXNzLnBsYXRmb3JtID09PSAnZGFyd2luJykge1xuICAgIHJldHVybiBqb2luKHNoZWxsRGlyLCAnT2JzaWRpYW4uYXBwJywgJ0NvbnRlbnRzJywgJ01hY09TJywgJ09ic2lkaWFuJyk7XG4gIH1cblxuICByZXR1cm4gam9pbihzaGVsbERpciwgJ29ic2lkaWFuJyk7XG59XG5cbi8qKlxuICogUmVzb2x2ZXMgdGhlIG9yZGVyZWQgaW5zdGFsbGVyIGFzc2V0IGRvd25sb2FkIFVSTHMgdG8gdHJ5IGZvciBhIHZlcnNpb24uXG4gKlxuICogVGhlIHJlbGVhc2UncyByZWFsIGFzc2V0IGxpc3QgaXMgcXVlcmllZCBmaXJzdCBzbyB0aGUgcGxhdGZvcm0tY29ycmVjdCBhc3NldFxuICogaXMgcGlja2VkIHJlZ2FyZGxlc3Mgb2YgdGhlIGhpc3RvcmljYWwgZG90LXZzLWh5cGhlbiBuYW1pbmc7IGlmIHRoYXQgY2FsbCBpc1xuICogdW5hdmFpbGFibGUgaXQgZmFsbHMgYmFjayB0byB0cnlpbmcgYm90aCB0ZW1wbGF0ZWQgc2VwYXJhdG9yIGZvcm1zLlxuICpcbiAqIEBwYXJhbSB2ZXJzaW9uIC0gVGhlIGNvbmNyZXRlIGB4LnkuemAgdmVyc2lvbi5cbiAqIEByZXR1cm5zIENhbmRpZGF0ZSBhc3NldCBVUkxzLCBpbiBwcmlvcml0eSBvcmRlci5cbiAqL1xuYXN5bmMgZnVuY3Rpb24gcmVzb2x2ZUluc3RhbGxlckFzc2V0VXJscyh2ZXJzaW9uOiBzdHJpbmcpOiBQcm9taXNlPHN0cmluZ1tdPiB7XG4gIGNvbnN0IGFzc2V0TmFtZXMgPSBhd2FpdCBmZXRjaFJlbGVhc2VBc3NldE5hbWVzKHZlcnNpb24pO1xuICBpZiAoYXNzZXROYW1lcykge1xuICAgIGNvbnN0IHNlbGVjdGVkID0gc2VsZWN0SW5zdGFsbGVyQXNzZXROYW1lKHsgYXNzZXROYW1lcywgcGxhdGZvcm06IHByb2Nlc3MucGxhdGZvcm0sIHZlcnNpb24gfSk7XG4gICAgaWYgKHNlbGVjdGVkICE9PSB1bmRlZmluZWQpIHtcbiAgICAgIHJldHVybiBbYCR7UkVMRUFTRV9ET1dOTE9BRF9CQVNFX1VSTH0vdiR7dmVyc2lvbn0vJHtzZWxlY3RlZH1gXTtcbiAgICB9XG4gICAgbG9nKGBbaW5zdGFsbGVyXSBObyBpbnN0YWxsZXIgYXNzZXQgbWF0Y2hlZCBmb3IgJHt2ZXJzaW9ufTsgZmFsbGluZyBiYWNrIHRvIHRlbXBsYXRlZCBhc3NldCBuYW1lcy5gKTtcbiAgfVxuXG4gIHJldHVybiBidWlsZEluc3RhbGxlckFzc2V0TmFtZUNhbmRpZGF0ZXMoeyBwbGF0Zm9ybTogcHJvY2Vzcy5wbGF0Zm9ybSwgdmVyc2lvbiB9KVxuICAgIC5tYXAoKG5hbWUpID0+IGAke1JFTEVBU0VfRE9XTkxPQURfQkFTRV9VUkx9L3Yke3ZlcnNpb259LyR7bmFtZX1gKTtcbn1cblxuLyoqXG4gKiBSdW5zIGEgY29tbWFuZCBzeW5jaHJvbm91c2x5LCB0aHJvd2luZyBvbiBhIG5vbi16ZXJvIGV4aXQuXG4gKlxuICogQHBhcmFtIGNvbW1hbmQgLSBUaGUgY29tbWFuZC5cbiAqIEBwYXJhbSBhcmdzIC0gVGhlIGFyZ3VtZW50cy5cbiAqL1xuZnVuY3Rpb24gcnVuKGNvbW1hbmQ6IHN0cmluZywgYXJnczogc3RyaW5nW10pOiB2b2lkIHtcbiAgY29uc3QgcmVzdWx0ID0gc3Bhd25TeW5jKGNvbW1hbmQsIGFyZ3MsIHsgc3RkaW86ICdpZ25vcmUnIH0pO1xuICBpZiAocmVzdWx0LnN0YXR1cyAhPT0gMCkge1xuICAgIHRocm93IG5ldyBFcnJvcihgQ29tbWFuZCBmYWlsZWQ6ICR7Y29tbWFuZH0gJHthcmdzLm1hcCgoYXJnKSA9PiBiYXNlbmFtZShhcmcpKS5qb2luKCcgJyl9IChleGl0ICR7U3RyaW5nKHJlc3VsdC5zdGF0dXMpfSlgKTtcbiAgfVxufVxuXG4vKiB2OCBpZ25vcmUgc3RvcCAqL1xuIl0sCiAgIm1hcHBpbmdzIjogIkFBbUJBO0FBQUEsRUFDRTtBQUFBLEVBQ0E7QUFBQSxPQUNLO0FBQ1A7QUFBQSxFQUNFO0FBQUEsRUFDQTtBQUFBLEVBQ0E7QUFBQSxFQUNBO0FBQUEsRUFDQTtBQUFBLE9BQ0s7QUFDUCxTQUFTLGNBQWM7QUFDdkI7QUFBQSxFQUNFO0FBQUEsRUFDQTtBQUFBLEVBQ0E7QUFBQSxPQUNLO0FBQ1AsT0FBTyxhQUFhO0FBRXBCO0FBQUEsRUFDRTtBQUFBLEVBQ0E7QUFBQSxPQUNLO0FBQ1AsU0FBUyxXQUFXO0FBS3BCLE1B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
|
|
206
|
+
//# sourceMappingURL=data:application/json;base64,ewogICJ2ZXJzaW9uIjogMywKICAic291cmNlcyI6IFsiLi4vLi4vLi4vc3JjL29ic2lkaWFuLWluc3RhbGxlci50cyJdLAogICJzb3VyY2VzQ29udGVudCI6IFsiLyoqXG4gKiBAZmlsZVxuICpcbiAqIEludGVncmF0aW9uLXRpbWUgaGVscGVycyBmb3IgcmVzb2x2aW5nIHRoZSBPYnNpZGlhbiAqKnNoZWxsKiogKHRoZSBFbGVjdHJvblxuICogcnVudGltZSAvIGluc3RhbGxlciBidWlsZCkgdG8gbGF1bmNoLlxuICpcbiAqIEJ5IGRlZmF1bHQgdGhlIGhhcm5lc3MgdXNlcyB0aGUgaW5zdGFsbGVkIHNoZWxsLiBXaGVuIGEgc3BlY2lmaWMgaW5zdGFsbGVyXG4gKiB2ZXJzaW9uIGlzIHJlcXVlc3RlZCwgaXQgZG93bmxvYWRzIHRoYXQgdmVyc2lvbidzIEdpdEh1YiByZWxlYXNlIGFzc2V0IGFuZFxuICogZXh0cmFjdHMgYSBwb3J0YWJsZSBzaGVsbCBpbnRvIGEgY2FjaGUsIHJldHVybmluZyB0aGUgZXhlY3V0YWJsZSB0byBsYXVuY2guXG4gKlxuICogR2l0SHViIHJlbGVhc2UgYXNzZXRzIGV4aXN0IGZvciAqKnB1YmxpYyoqIHJlbGVhc2VzIG9ubHk7IGNhdGFseXN0IChiZXRhKVxuICogYnVpbGRzIHB1Ymxpc2ggb25seSB0aGUgYXNhciwgc28gaW5zdGFsbGVyLXBpbm5pbmcgc3VwcG9ydHMgcHVibGljIHZlcnNpb25zLlxuICogVGhlIGV4dHJhY3RlZCBzaGVsbCdzIGJ1bmRsZWQgYHJlc291cmNlcy9vYnNpZGlhbi5hc2FyYCBpcyB0aGF0IHZlcnNpb24sIHNvXG4gKiBwaW5uaW5nIHRoZSBpbnN0YWxsZXIgaXMgaG93IHlvdSBydW4gYSB2ZXJzaW9uICoqb2xkZXIqKiB0aGFuIHRoZSBpbnN0YWxsZWRcbiAqIHNoZWxsIChhc2FyLXN3YXAgaXMgdXBncmFkZS1vbmx5IFx1MjAxNCBzZWUgYG9ic2lkaWFuLXZlcnNpb24tc3dpdGNoLnRzYCkuXG4gKi9cblxuLyogdjggaWdub3JlIHN0YXJ0IC0tIEludGVncmF0aW9uLXRpbWUgZG93bmxvYWQvZXh0cmFjdGlvbiBnbHVlIGNvdmVyZWQgYnkgaW50ZWdyYXRpb24gdGVzdHMsIG5vdCB1bml0IHRlc3RzLiAqL1xuXG5pbXBvcnQge1xuICBleGVjRmlsZVN5bmMsXG4gIHNwYXduU3luY1xufSBmcm9tICdub2RlOmNoaWxkX3Byb2Nlc3MnO1xuaW1wb3J0IHtcbiAgZXhpc3RzU3luYyxcbiAgbWtkaXJTeW5jLFxuICByZWFkRmlsZVN5bmMsXG4gIHJtU3luYyxcbiAgd3JpdGVGaWxlU3luY1xufSBmcm9tICdub2RlOmZzJztcbmltcG9ydCB7IHRtcGRpciB9IGZyb20gJ25vZGU6b3MnO1xuaW1wb3J0IHtcbiAgYmFzZW5hbWUsXG4gIGRpcm5hbWUsXG4gIGpvaW5cbn0gZnJvbSAnbm9kZTpwYXRoJztcbmltcG9ydCBwcm9jZXNzIGZyb20gJ25vZGU6cHJvY2Vzcyc7XG5cbmltcG9ydCB7XG4gIGJ1aWxkSW5zdGFsbGVyQXNzZXROYW1lQ2FuZGlkYXRlcyxcbiAgc2VsZWN0SW5zdGFsbGVyQXNzZXROYW1lLFxuICBzZWxlY3RJbnN0YWxsZXJEb3dubG9hZFVybFxufSBmcm9tICcuL2luc3RhbGxlci1hc3NldC5tanMnO1xuaW1wb3J0IHsgbG9nIH0gZnJvbSAnLi9sb2cubWpzJztcbmltcG9ydCB7IGdldFZlcnNpb25NZXRhZGF0YSB9IGZyb20gJy4vb2JzaWRpYW4tbWV0YWRhdGEubWpzJztcblxuLyoqXG4gKiBCcm93c2VyIFVzZXItQWdlbnQgZm9yIGRvd25sb2FkaW5nIHJlbGVhc2UgYXNzZXRzIChDbG91ZGZsYXJlLWdhdGVkKS5cbiAqL1xuY29uc3QgRE9XTkxPQURfVVNFUl9BR0VOVCA9ICdNb3ppbGxhLzUuMCAoV2luZG93cyBOVCAxMC4wOyBXaW42NDsgeDY0KSBBcHBsZVdlYktpdC81MzcuMzYgKEtIVE1MLCBsaWtlIEdlY2tvKSBDaHJvbWUvODYuMC40MjQwLjE4MyBTYWZhcmkvNTM3LjM2JztcblxuLyoqIEJhc2UgVVJMIGZvciBgb2JzaWRpYW4tcmVsZWFzZXNgIHJlbGVhc2UgYXNzZXRzIChgLi4uL2Rvd25sb2FkL3Y8dmVyPi88YXNzZXQ+YCkuICovXG5jb25zdCBSRUxFQVNFX0RPV05MT0FEX0JBU0VfVVJMID0gJ2h0dHBzOi8vZ2l0aHViLmNvbS9vYnNpZGlhbm1kL29ic2lkaWFuLXJlbGVhc2VzL3JlbGVhc2VzL2Rvd25sb2FkJztcblxuLyoqIEdpdEh1YiBSRVNUIGVuZHBvaW50IGxpc3RpbmcgYSByZWxlYXNlJ3MgYXNzZXRzIGJ5IHRhZyAoYC4uLi9yZWxlYXNlcy90YWdzL3Y8dmVyPmApLiAqL1xuY29uc3QgUkVMRUFTRV9BUElfVEFHX1VSTCA9ICdodHRwczovL2FwaS5naXRodWIuY29tL3JlcG9zL29ic2lkaWFubWQvb2JzaWRpYW4tcmVsZWFzZXMvcmVsZWFzZXMvdGFncyc7XG5cbi8qKiBUaGUgc3Vic2V0IG9mIHRoZSBHaXRIdWIgcmVsZWFzZSBBUEkgcmVzcG9uc2UgdGhpcyBtb2R1bGUgcmVhZHMuICovXG5pbnRlcmZhY2UgR2l0SHViUmVsZWFzZSB7XG4gIC8qKiBUaGUgcmVsZWFzZSdzIGRvd25sb2FkYWJsZSBhc3NldHMuICovXG4gIHJlYWRvbmx5IGFzc2V0czogcmVhZG9ubHkgR2l0SHViUmVsZWFzZUFzc2V0W107XG59XG5cbi8qKiBUaGUgc3Vic2V0IG9mIGEgR2l0SHViIHJlbGVhc2UncyBhc3NldCBvYmplY3QgdGhpcyBtb2R1bGUgcmVhZHMuICovXG5pbnRlcmZhY2UgR2l0SHViUmVsZWFzZUFzc2V0IHtcbiAgLyoqIFRoZSBhc3NldCBmaWxlIG5hbWUsIGUuZy4gYE9ic2lkaWFuLjAuMTQuNS5leGVgLiAqL1xuICByZWFkb25seSBuYW1lOiBzdHJpbmc7XG59XG5cbmNvbnN0IENBQ0hFX1JPT1QgPSBqb2luKHRtcGRpcigpLCAnb2JzaWRpYW4taW50ZWdyYXRpb24tdGVzdGluZycpO1xuY29uc3QgU0hFTExfQ0FDSEVfRElSID0gam9pbihDQUNIRV9ST09ULCAnc2hlbGwtY2FjaGUnKTtcbmNvbnN0IE1BQ19QTElTVF9WRVJTSU9OX1BBVFRFUk4gPSAvPGtleT5DRkJ1bmRsZVNob3J0VmVyc2lvblN0cmluZzxcXC9rZXk+XFxzKjxzdHJpbmc+KD88dmVyc2lvbj5bXjxdKyk8XFwvc3RyaW5nPi87XG5cbi8qKlxuICogQSByZXNvbHZlZCBPYnNpZGlhbiBzaGVsbCBleGVjdXRhYmxlLlxuICovXG5leHBvcnQgaW50ZXJmYWNlIFJlc29sdmVkU2hlbGwge1xuICAvKiogQWJzb2x1dGUgcGF0aCB0byB0aGUgT2JzaWRpYW4gZXhlY3V0YWJsZSB0byBsYXVuY2guICovXG4gIHJlYWRvbmx5IGV4ZVBhdGg6IHN0cmluZztcblxuICAvKiogVGhlIHNoZWxsJ3MgdmVyc2lvbiwgb3IgYHVuZGVmaW5lZGAgaWYgaXQgY291bGQgbm90IGJlIGRldGVjdGVkLiAqL1xuICByZWFkb25seSB2ZXJzaW9uOiBzdHJpbmcgfCB1bmRlZmluZWQ7XG59XG5cbi8qKlxuICogRGV0ZWN0cyB0aGUgdmVyc2lvbiBvZiBhbiBpbnN0YWxsZWQgT2JzaWRpYW4gc2hlbGwgZnJvbSBpdHMgZXhlY3V0YWJsZS5cbiAqXG4gKiAtIFdpbmRvd3M6IHRoZSBleGVjdXRhYmxlJ3MgUEUgYEZpbGVWZXJzaW9uYC5cbiAqIC0gbWFjT1M6IGBDRkJ1bmRsZVNob3J0VmVyc2lvblN0cmluZ2AgZnJvbSB0aGUgYXBwIGJ1bmRsZSdzIGBJbmZvLnBsaXN0YC5cbiAqIC0gTGludXg6IGJlc3QtZWZmb3J0IHBhcnNlIGZyb20gdGhlIGV4ZWN1dGFibGUgcGF0aCAob2Z0ZW4gYHVuZGVmaW5lZGApLlxuICpcbiAqIEBwYXJhbSBleGVQYXRoIC0gQWJzb2x1dGUgcGF0aCB0byB0aGUgT2JzaWRpYW4gZXhlY3V0YWJsZS5cbiAqIEByZXR1cm5zIFRoZSBgeC55LnpgIHZlcnNpb24sIG9yIGB1bmRlZmluZWRgIGlmIGl0IGNhbm5vdCBiZSBkZXRlcm1pbmVkLlxuICovXG5leHBvcnQgZnVuY3Rpb24gZGV0ZWN0SW5zdGFsbGVkU2hlbGxWZXJzaW9uKGV4ZVBhdGg6IHN0cmluZyk6IHN0cmluZyB8IHVuZGVmaW5lZCB7XG4gIGlmIChwcm9jZXNzLnBsYXRmb3JtID09PSAnd2luMzInKSB7XG4gICAgcmV0dXJuIGRldGVjdFdpbmRvd3NGaWxlVmVyc2lvbihleGVQYXRoKTtcbiAgfVxuXG4gIGlmIChwcm9jZXNzLnBsYXRmb3JtID09PSAnZGFyd2luJykge1xuICAgIHJldHVybiBkZXRlY3RNYWNCdW5kbGVWZXJzaW9uKGV4ZVBhdGgpO1xuICB9XG5cbiAgcmV0dXJuIGRldGVjdFZlcnNpb25Gcm9tUGF0aChleGVQYXRoKTtcbn1cblxuLyoqXG4gKiBFbnN1cmVzIGEgcG9ydGFibGUgT2JzaWRpYW4gc2hlbGwgZm9yIHRoZSBnaXZlbiB2ZXJzaW9uIGlzIGV4dHJhY3RlZCBpbnRvIHRoZVxuICogY2FjaGUsIGRvd25sb2FkaW5nIGFuZCBleHRyYWN0aW5nIGl0cyBHaXRIdWIgcmVsZWFzZSBhc3NldCBpZiBuZWNlc3NhcnkuXG4gKlxuICogQHBhcmFtIHZlcnNpb24gLSBBIGNvbmNyZXRlIHB1YmxpYyBgeC55LnpgIHZlcnNpb24uXG4gKiBAcmV0dXJucyBUaGUgYWJzb2x1dGUgcGF0aCB0byB0aGUgY2FjaGVkIHNoZWxsIGV4ZWN1dGFibGUuXG4gKiBAdGhyb3dzIEVycm9yIGlmIHRoZSBhc3NldCBjYW5ub3QgYmUgZG93bmxvYWRlZCBvciBleHRyYWN0ZWQuXG4gKi9cbmV4cG9ydCBhc3luYyBmdW5jdGlvbiBlbnN1cmVTaGVsbENhY2hlZCh2ZXJzaW9uOiBzdHJpbmcpOiBQcm9taXNlPHN0cmluZz4ge1xuICBjb25zdCBzaGVsbERpciA9IGdldENhY2hlZFNoZWxsRGlyKHZlcnNpb24pO1xuICBjb25zdCBleGVQYXRoID0gZ2V0Q2FjaGVkU2hlbGxFeGVQYXRoKHNoZWxsRGlyKTtcbiAgaWYgKGV4aXN0c1N5bmMoZXhlUGF0aCkpIHtcbiAgICBsb2coYFtpbnN0YWxsZXJdIFVzaW5nIGNhY2hlZCBzaGVsbCBmb3IgJHt2ZXJzaW9ufS5gKTtcbiAgICByZXR1cm4gZXhlUGF0aDtcbiAgfVxuXG4gIG1rZGlyU3luYyhzaGVsbERpciwgeyByZWN1cnNpdmU6IHRydWUgfSk7XG4gIGNvbnN0IGFzc2V0VXJscyA9IGF3YWl0IHJlc29sdmVJbnN0YWxsZXJBc3NldFVybHModmVyc2lvbik7XG4gIGNvbnN0IGFzc2V0UGF0aCA9IGF3YWl0IGRvd25sb2FkSW5zdGFsbGVyQXNzZXQoYXNzZXRVcmxzLCBzaGVsbERpciwgdmVyc2lvbik7XG4gIGV4dHJhY3RTaGVsbChhc3NldFBhdGgsIHNoZWxsRGlyKTtcbiAgcm1TeW5jKGFzc2V0UGF0aCwgeyBmb3JjZTogdHJ1ZSB9KTtcblxuICBpZiAoIWV4aXN0c1N5bmMoZXhlUGF0aCkpIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoYEV4dHJhY3RlZCBPYnNpZGlhbiBzaGVsbCAke3ZlcnNpb259IGJ1dCBleGVjdXRhYmxlIG5vdCBmb3VuZCBhdCAke2V4ZVBhdGh9LmApO1xuICB9XG4gIGxvZyhgW2luc3RhbGxlcl0gRXh0cmFjdGVkIHNoZWxsICR7dmVyc2lvbn0gLT4gJHtleGVQYXRofWApO1xuICByZXR1cm4gZXhlUGF0aDtcbn1cblxuLyoqXG4gKiBSZXR1cm5zIHRoZSBjYWNoZSBkaXJlY3RvcnkgYSB2ZXJzaW9uJ3MgZXh0cmFjdGVkIHNoZWxsIGxpdmVzIGluICh0aGVcbiAqIGRpcmVjdG9yeSBtYXkgbm90IHlldCBleGlzdCkuXG4gKlxuICogQHBhcmFtIHZlcnNpb24gLSBBIGNvbmNyZXRlIHB1YmxpYyBgeC55LnpgIHZlcnNpb24uXG4gKiBAcmV0dXJucyBUaGUgYWJzb2x1dGUgc2hlbGwgY2FjaGUgZGlyZWN0b3J5IGZvciB0aGUgdmVyc2lvbi5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGdldENhY2hlZFNoZWxsRGlyKHZlcnNpb246IHN0cmluZyk6IHN0cmluZyB7XG4gIHJldHVybiBqb2luKFNIRUxMX0NBQ0hFX0RJUiwgdmVyc2lvbik7XG59XG5cbi8qKlxuICogVGhyb3dzIGEgZGVzY3JpcHRpdmUgZXJyb3IgaWYgYSByZXF1aXJlZCBjb21tYW5kIGlzIG5vdCBvbiBgUEFUSGAuXG4gKlxuICogQHBhcmFtIGNvbW1hbmQgLSBUaGUgY29tbWFuZCBuYW1lLlxuICogQHBhcmFtIGhpbnQgLSBBY3Rpb25hYmxlIGd1aWRhbmNlIGFwcGVuZGVkIHRvIHRoZSBlcnJvci5cbiAqL1xuZnVuY3Rpb24gYXNzZXJ0Q29tbWFuZEF2YWlsYWJsZShjb21tYW5kOiBzdHJpbmcsIGhpbnQ6IHN0cmluZyk6IHZvaWQge1xuICBjb25zdCBwcm9iZSA9IHByb2Nlc3MucGxhdGZvcm0gPT09ICd3aW4zMicgPyAnd2hlcmUuZXhlJyA6ICd3aGljaCc7XG4gIGNvbnN0IHJlc3VsdCA9IHNwYXduU3luYyhwcm9iZSwgW2NvbW1hbmRdLCB7IHN0ZGlvOiAnaWdub3JlJyB9KTtcbiAgaWYgKHJlc3VsdC5zdGF0dXMgIT09IDApIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoYFJlcXVpcmVkIGNvbW1hbmQgXCIke2NvbW1hbmR9XCIgd2FzIG5vdCBmb3VuZCBvbiBQQVRILiAke2hpbnR9YCk7XG4gIH1cbn1cblxuLyoqXG4gKiBSZWFkcyBgQ0ZCdW5kbGVTaG9ydFZlcnNpb25TdHJpbmdgIGZyb20gYSBtYWNPUyBhcHAgYnVuZGxlJ3MgYEluZm8ucGxpc3RgLlxuICpcbiAqIEBwYXJhbSBleGVQYXRoIC0gUGF0aCB0byBgLi4uL09ic2lkaWFuLmFwcC9Db250ZW50cy9NYWNPUy9PYnNpZGlhbmAuXG4gKiBAcmV0dXJucyBUaGUgYHgueS56YCB2ZXJzaW9uLCBvciBgdW5kZWZpbmVkYC5cbiAqL1xuZnVuY3Rpb24gZGV0ZWN0TWFjQnVuZGxlVmVyc2lvbihleGVQYXRoOiBzdHJpbmcpOiBzdHJpbmcgfCB1bmRlZmluZWQge1xuICB0cnkge1xuICAgIGNvbnN0IGNvbnRlbnRzRGlyID0gZGlybmFtZShkaXJuYW1lKGV4ZVBhdGgpKTtcbiAgICBjb25zdCBwbGlzdCA9IHJlYWRGaWxlU3luYyhqb2luKGNvbnRlbnRzRGlyLCAnSW5mby5wbGlzdCcpLCAndXRmLTgnKTtcbiAgICBjb25zdCBtYXRjaCA9IE1BQ19QTElTVF9WRVJTSU9OX1BBVFRFUk4uZXhlYyhwbGlzdCk7XG4gICAgcmV0dXJuIG1hdGNoPy5ncm91cHM/LlsndmVyc2lvbiddO1xuICB9IGNhdGNoIHtcbiAgICByZXR1cm4gdW5kZWZpbmVkO1xuICB9XG59XG5cbi8qKlxuICogQmVzdC1lZmZvcnQgcGFyc2Ugb2YgYW4gYHgueS56YCB2ZXJzaW9uIGVtYmVkZGVkIGluIGEgcGF0aC5cbiAqXG4gKiBAcGFyYW0gdmFsdWUgLSBUaGUgcGF0aCBvciBzdHJpbmcgdG8gc2Nhbi5cbiAqIEByZXR1cm5zIFRoZSBmaXJzdCBgeC55LnpgIG1hdGNoLCBvciBgdW5kZWZpbmVkYC5cbiAqL1xuZnVuY3Rpb24gZGV0ZWN0VmVyc2lvbkZyb21QYXRoKHZhbHVlOiBzdHJpbmcpOiBzdHJpbmcgfCB1bmRlZmluZWQge1xuICBjb25zdCBtYXRjaCA9IC8oPzx2ZXJzaW9uPlxcZCtcXC5cXGQrXFwuXFxkKykvLmV4ZWModmFsdWUpO1xuICByZXR1cm4gbWF0Y2g/Lmdyb3Vwcz8uWyd2ZXJzaW9uJ107XG59XG5cbi8qKlxuICogUmVhZHMgdGhlIFBFIGBGaWxlVmVyc2lvbmAgb2YgYSBXaW5kb3dzIGV4ZWN1dGFibGUgdmlhIFBvd2VyU2hlbGwuXG4gKlxuICogQHBhcmFtIGV4ZVBhdGggLSBBYnNvbHV0ZSBwYXRoIHRvIHRoZSBleGVjdXRhYmxlLlxuICogQHJldHVybnMgVGhlIGB4LnkuemAgdmVyc2lvbiwgb3IgYHVuZGVmaW5lZGAuXG4gKi9cbmZ1bmN0aW9uIGRldGVjdFdpbmRvd3NGaWxlVmVyc2lvbihleGVQYXRoOiBzdHJpbmcpOiBzdHJpbmcgfCB1bmRlZmluZWQge1xuICB0cnkge1xuICAgIGNvbnN0IG91dHB1dCA9IGV4ZWNGaWxlU3luYyhcbiAgICAgICdwb3dlcnNoZWxsJyxcbiAgICAgIFsnLU5vUHJvZmlsZScsICctQ29tbWFuZCcsIGAoR2V0LUl0ZW0gLUxpdGVyYWxQYXRoICR7SlNPTi5zdHJpbmdpZnkoZXhlUGF0aCl9KS5WZXJzaW9uSW5mby5GaWxlVmVyc2lvbmBdLFxuICAgICAgeyBlbmNvZGluZzogJ3V0Zi04JyB9XG4gICAgKTtcbiAgICBjb25zdCB2ZXJzaW9uID0gb3V0cHV0LnRyaW0oKTtcbiAgICByZXR1cm4gdmVyc2lvbi5sZW5ndGggPiAwID8gdmVyc2lvbiA6IHVuZGVmaW5lZDtcbiAgfSBjYXRjaCB7XG4gICAgcmV0dXJuIHVuZGVmaW5lZDtcbiAgfVxufVxuXG4vKipcbiAqIERvd25sb2FkcyBhIHNpbmdsZSByZWxlYXNlIGFzc2V0IGZvciBhIHZlcnNpb24gdG8gYSBkZXN0aW5hdGlvbiBmaWxlLlxuICpcbiAqIEBwYXJhbSB1cmwgLSBUaGUgYXNzZXQgZG93bmxvYWQgVVJMLlxuICogQHBhcmFtIGRlc3QgLSBEZXN0aW5hdGlvbiBmaWxlIHBhdGguXG4gKiBAdGhyb3dzIEVycm9yIGlmIHRoZSByZXF1ZXN0IGZhaWxzLlxuICovXG5hc3luYyBmdW5jdGlvbiBkb3dubG9hZEFzc2V0KHVybDogc3RyaW5nLCBkZXN0OiBzdHJpbmcpOiBQcm9taXNlPHZvaWQ+IHtcbiAgbG9nKGBbaW5zdGFsbGVyXSBEb3dubG9hZGluZyBpbnN0YWxsZXIgZnJvbSAke3VybH0gLi4uYCk7XG4gIGNvbnN0IHJlc3BvbnNlID0gYXdhaXQgZmV0Y2godXJsLCB7IGhlYWRlcnM6IHsgJ1VzZXItQWdlbnQnOiBET1dOTE9BRF9VU0VSX0FHRU5UIH0gfSk7XG4gIGlmICghcmVzcG9uc2Uub2spIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoYEhUVFAgJHtTdHJpbmcocmVzcG9uc2Uuc3RhdHVzKX1gKTtcbiAgfVxuICB3cml0ZUZpbGVTeW5jKGRlc3QsIEJ1ZmZlci5mcm9tKGF3YWl0IHJlc3BvbnNlLmFycmF5QnVmZmVyKCkpKTtcbn1cblxuLyoqXG4gKiBEb3dubG9hZHMgdGhlIGZpcnN0IHJlYWNoYWJsZSBpbnN0YWxsZXIgYXNzZXQgZnJvbSBhbiBvcmRlcmVkIGxpc3Qgb2ZcbiAqIGNhbmRpZGF0ZSBVUkxzLCByZXR1cm5pbmcgdGhlIHBhdGggaXQgd2FzIHNhdmVkIHRvLlxuICpcbiAqIEBwYXJhbSB1cmxzIC0gQ2FuZGlkYXRlIGFzc2V0IFVSTHMsIGluIHByaW9yaXR5IG9yZGVyLlxuICogQHBhcmFtIHNoZWxsRGlyIC0gVGhlIGRlc3RpbmF0aW9uIHNoZWxsIGRpcmVjdG9yeS5cbiAqIEBwYXJhbSB2ZXJzaW9uIC0gVGhlIHJlbGVhc2UgdmVyc2lvbiAoZm9yIGVycm9yIG1lc3NhZ2VzKS5cbiAqIEByZXR1cm5zIFRoZSBkb3dubG9hZGVkIGFzc2V0J3MgcGF0aC5cbiAqIEB0aHJvd3MgRXJyb3IgaWYgbm9uZSBvZiB0aGUgY2FuZGlkYXRlcyBjYW4gYmUgZG93bmxvYWRlZC5cbiAqL1xuYXN5bmMgZnVuY3Rpb24gZG93bmxvYWRJbnN0YWxsZXJBc3NldCh1cmxzOiBzdHJpbmdbXSwgc2hlbGxEaXI6IHN0cmluZywgdmVyc2lvbjogc3RyaW5nKTogUHJvbWlzZTxzdHJpbmc+IHtcbiAgY29uc3QgZXJyb3JzOiBzdHJpbmdbXSA9IFtdO1xuICBmb3IgKGNvbnN0IHVybCBvZiB1cmxzKSB7XG4gICAgY29uc3QgYXNzZXRQYXRoID0gam9pbihzaGVsbERpciwgYmFzZW5hbWUodXJsKSk7XG4gICAgdHJ5IHtcbiAgICAgIGF3YWl0IGRvd25sb2FkQXNzZXQodXJsLCBhc3NldFBhdGgpO1xuICAgICAgcmV0dXJuIGFzc2V0UGF0aDtcbiAgICB9IGNhdGNoIChlcnJvcikge1xuICAgICAgZXJyb3JzLnB1c2goYCR7dXJsfTogJHtlcnJvciBpbnN0YW5jZW9mIEVycm9yID8gZXJyb3IubWVzc2FnZSA6IFN0cmluZyhlcnJvcil9YCk7XG4gICAgfVxuICB9XG5cbiAgdGhyb3cgbmV3IEVycm9yKFxuICAgIGBGYWlsZWQgdG8gZG93bmxvYWQgT2JzaWRpYW4gaW5zdGFsbGVyICR7dmVyc2lvbn0uIEF0dGVtcHRzOiAke2Vycm9ycy5qb2luKCc7ICcpfS4gYFxuICAgICAgKyAnQ2F0YWx5c3QvYmV0YSB2ZXJzaW9ucyBoYXZlIG5vIHB1YmxpYyBpbnN0YWxsZXIgXHUyMDE0IHBpbiBhbiBhc2FyIHZlcnNpb24gb24gYSBwdWJsaWMvaW5zdGFsbGVkIHNoZWxsIGluc3RlYWQuJ1xuICApO1xufVxuXG4vKipcbiAqIEV4dHJhY3RzIGEgTGludXggYC50YXIuZ3pgIHBvcnRhYmxlIGJ1aWxkLlxuICpcbiAqIEBwYXJhbSBhc3NldFBhdGggLSBQYXRoIHRvIHRoZSBkb3dubG9hZGVkIGAudGFyLmd6YC5cbiAqIEBwYXJhbSBzaGVsbERpciAtIERlc3RpbmF0aW9uIHNoZWxsIGRpcmVjdG9yeS5cbiAqL1xuZnVuY3Rpb24gZXh0cmFjdExpbnV4U2hlbGwoYXNzZXRQYXRoOiBzdHJpbmcsIHNoZWxsRGlyOiBzdHJpbmcpOiB2b2lkIHtcbiAgcnVuKCd0YXInLCBbJ3h6ZicsIGFzc2V0UGF0aCwgJy1DJywgc2hlbGxEaXIsICctLXN0cmlwLWNvbXBvbmVudHM9MSddKTtcbn1cblxuLyoqXG4gKiBFeHRyYWN0cyBhIG1hY09TIGAuZG1nYCBieSBtb3VudGluZyBpdCBhbmQgY29weWluZyB0aGUgYXBwIGJ1bmRsZS5cbiAqXG4gKiBAcGFyYW0gYXNzZXRQYXRoIC0gUGF0aCB0byB0aGUgZG93bmxvYWRlZCBgLmRtZ2AuXG4gKiBAcGFyYW0gc2hlbGxEaXIgLSBEZXN0aW5hdGlvbiBzaGVsbCBkaXJlY3RvcnkuXG4gKi9cbmZ1bmN0aW9uIGV4dHJhY3RNYWNTaGVsbChhc3NldFBhdGg6IHN0cmluZywgc2hlbGxEaXI6IHN0cmluZyk6IHZvaWQge1xuICBjb25zdCBtb3VudFBvaW50ID0gam9pbihzaGVsbERpciwgJ19fbW50Jyk7XG4gIG1rZGlyU3luYyhtb3VudFBvaW50LCB7IHJlY3Vyc2l2ZTogdHJ1ZSB9KTtcbiAgcnVuKCdoZGl1dGlsJywgWydhdHRhY2gnLCAnLW5vYnJvd3NlJywgJy1tb3VudHBvaW50JywgbW91bnRQb2ludCwgYXNzZXRQYXRoXSk7XG4gIHRyeSB7XG4gICAgcnVuKCdjcCcsIFsnLVInLCBqb2luKG1vdW50UG9pbnQsICdPYnNpZGlhbi5hcHAnKSwgc2hlbGxEaXJdKTtcbiAgfSBmaW5hbGx5IHtcbiAgICBydW4oJ2hkaXV0aWwnLCBbJ2RldGFjaCcsIG1vdW50UG9pbnRdKTtcbiAgfVxuICBybVN5bmMobW91bnRQb2ludCwgeyBmb3JjZTogdHJ1ZSwgcmVjdXJzaXZlOiB0cnVlIH0pO1xufVxuXG4vKipcbiAqIEV4dHJhY3RzIGEgZG93bmxvYWRlZCBpbnN0YWxsZXIgYXNzZXQgaW50byBhIHNoZWxsIGRpcmVjdG9yeSwgcGVyIHBsYXRmb3JtLlxuICpcbiAqIEBwYXJhbSBhc3NldFBhdGggLSBUaGUgZG93bmxvYWRlZCBhc3NldCBwYXRoLlxuICogQHBhcmFtIHNoZWxsRGlyIC0gVGhlIGRlc3RpbmF0aW9uIHNoZWxsIGRpcmVjdG9yeS5cbiAqL1xuZnVuY3Rpb24gZXh0cmFjdFNoZWxsKGFzc2V0UGF0aDogc3RyaW5nLCBzaGVsbERpcjogc3RyaW5nKTogdm9pZCB7XG4gIGlmIChwcm9jZXNzLnBsYXRmb3JtID09PSAnd2luMzInKSB7XG4gICAgZXh0cmFjdFdpbmRvd3NTaGVsbChhc3NldFBhdGgsIHNoZWxsRGlyKTtcbiAgICByZXR1cm47XG4gIH1cblxuICBpZiAocHJvY2Vzcy5wbGF0Zm9ybSA9PT0gJ2RhcndpbicpIHtcbiAgICBleHRyYWN0TWFjU2hlbGwoYXNzZXRQYXRoLCBzaGVsbERpcik7XG4gICAgcmV0dXJuO1xuICB9XG5cbiAgZXh0cmFjdExpbnV4U2hlbGwoYXNzZXRQYXRoLCBzaGVsbERpcik7XG59XG5cbi8qKlxuICogRXh0cmFjdHMgYSBXaW5kb3dzIE5TSVMgaW5zdGFsbGVyJ3MgaW5uZXIgYXBwIHBheWxvYWQgdmlhIDctWmlwLlxuICpcbiAqIFRoZSBOU0lTIGluc3RhbGxlciBgLmV4ZWAgY29udGFpbnMgYCRQTFVHSU5TRElSL2FwcC02NC43emAsIHdoaWNoIGhvbGRzIHRoZVxuICogcG9ydGFibGUgYXBwIChtaXJyb3JzIGhvdyB0aGUgc2Nvb3AgbWFuaWZlc3QgaW5zdGFsbHMgT2JzaWRpYW4pLlxuICpcbiAqIEBwYXJhbSBhc3NldFBhdGggLSBQYXRoIHRvIHRoZSBkb3dubG9hZGVkIGAuZXhlYC5cbiAqIEBwYXJhbSBzaGVsbERpciAtIERlc3RpbmF0aW9uIHNoZWxsIGRpcmVjdG9yeS5cbiAqL1xuZnVuY3Rpb24gZXh0cmFjdFdpbmRvd3NTaGVsbChhc3NldFBhdGg6IHN0cmluZywgc2hlbGxEaXI6IHN0cmluZyk6IHZvaWQge1xuICBhc3NlcnRDb21tYW5kQXZhaWxhYmxlKCc3eicsICdJbnN0YWxsIDctWmlwIChlLmcuIGBzY29vcCBpbnN0YWxsIDd6aXBgKSB0byBleHRyYWN0IGEgcGlubmVkIE9ic2lkaWFuIGluc3RhbGxlci4nKTtcbiAgY29uc3QgbnNpc0V4dHJhY3REaXIgPSBqb2luKHNoZWxsRGlyLCAnX19uc2lzJyk7XG4gIHJ1bignN3onLCBbJ3gnLCAnLXknLCBgLW8ke25zaXNFeHRyYWN0RGlyfWAsIGFzc2V0UGF0aF0pO1xuICBjb25zdCBpbm5lckFyY2hpdmUgPSBqb2luKG5zaXNFeHRyYWN0RGlyLCAnJFBMVUdJTlNESVInLCAnYXBwLTY0Ljd6Jyk7XG4gIHJ1bignN3onLCBbJ3gnLCAnLXknLCBgLW8ke3NoZWxsRGlyfWAsIGlubmVyQXJjaGl2ZV0pO1xuICBybVN5bmMobnNpc0V4dHJhY3REaXIsIHsgZm9yY2U6IHRydWUsIHJlY3Vyc2l2ZTogdHJ1ZSB9KTtcbn1cblxuLyoqXG4gKiBGZXRjaGVzIGEgcmVsZWFzZSdzIGFzc2V0IG5hbWVzIGZyb20gdGhlIEdpdEh1YiBBUEkuXG4gKlxuICogUmVhZHMgYSBgR0lUSFVCX1RPS0VOYCAob3IgYEdIX1RPS0VOYCkgZnJvbSB0aGUgZW52aXJvbm1lbnQgYW5kIHNlbmRzIGl0IGFzIGFcbiAqIGJlYXJlciB0b2tlbiB3aGVuIHByZXNlbnQsIHRvIGxpZnQgdGhlIGFub255bW91cyByYXRlIGxpbWl0IHRoYXQgb3RoZXJ3aXNlXG4gKiByZXR1cm5zIEhUVFAgNDAzIG9uIHNoYXJlZCBDSSBydW5uZXIgSVBzLlxuICpcbiAqIEBwYXJhbSB2ZXJzaW9uIC0gVGhlIHJlbGVhc2UgdmVyc2lvbiAodGFnIGB2PHZlcnNpb24+YCkuXG4gKiBAcmV0dXJucyBUaGUgYXNzZXQgbmFtZXMsIG9yIGB1bmRlZmluZWRgIGlmIHRoZSBBUEkgaXMgdW5hdmFpbGFibGUuXG4gKi9cbmFzeW5jIGZ1bmN0aW9uIGZldGNoUmVsZWFzZUFzc2V0TmFtZXModmVyc2lvbjogc3RyaW5nKTogUHJvbWlzZTxzdHJpbmdbXSB8IHVuZGVmaW5lZD4ge1xuICB0cnkge1xuICAgIGNvbnN0IGhlYWRlcnMgPSBuZXcgSGVhZGVycyh7ICdBY2NlcHQnOiAnYXBwbGljYXRpb24vdm5kLmdpdGh1Yitqc29uJywgJ1VzZXItQWdlbnQnOiBET1dOTE9BRF9VU0VSX0FHRU5UIH0pO1xuICAgIC8vIFNlbmQgYSBiZWFyZXIgdG9rZW4gd2hlbiBvbmUgaXMgYXZhaWxhYmxlIChlLmcuIEdJVEhVQl9UT0tFTiBvbiBDSSkuXG4gICAgLy8gV2l0aG91dCBpdCB0aGUgYXNzZXQtbGlzdCBBUEkgaXMgbGltaXRlZCB0byB0aGUgYW5vbnltb3VzIHF1b3RhLlxuICAgIC8vIFRoYXQgcXVvdGEgcmV0dXJucyBIVFRQIDQwMyBvbiBzaGFyZWQgQ0kgcnVubmVyIElQcyBhbmQgZm9yY2VzIHRoZSBmYWxsYmFjay5cbiAgICBjb25zdCB0b2tlbiA9IHByb2Nlc3MuZW52WydHSVRIVUJfVE9LRU4nXSA/PyBwcm9jZXNzLmVudlsnR0hfVE9LRU4nXTtcbiAgICBpZiAodG9rZW4pIHtcbiAgICAgIGhlYWRlcnMuc2V0KCdBdXRob3JpemF0aW9uJywgYEJlYXJlciAke3Rva2VufWApO1xuICAgIH1cbiAgICBjb25zdCByZXNwb25zZSA9IGF3YWl0IGZldGNoKGAke1JFTEVBU0VfQVBJX1RBR19VUkx9L3Yke3ZlcnNpb259YCwgeyBoZWFkZXJzIH0pO1xuICAgIGlmICghcmVzcG9uc2Uub2spIHtcbiAgICAgIGxvZyhgW2luc3RhbGxlcl0gUmVsZWFzZSBBUEkgZm9yICR7dmVyc2lvbn0gcmV0dXJuZWQgSFRUUCAke1N0cmluZyhyZXNwb25zZS5zdGF0dXMpfTsgZmFsbGluZyBiYWNrIHRvIHRlbXBsYXRlZCBhc3NldCBuYW1lcy5gKTtcbiAgICAgIHJldHVybiB1bmRlZmluZWQ7XG4gICAgfVxuICAgIGNvbnN0IHJlbGVhc2UgPSBhd2FpdCByZXNwb25zZS5qc29uKCkgYXMgR2l0SHViUmVsZWFzZTtcbiAgICByZXR1cm4gcmVsZWFzZS5hc3NldHMubWFwKChhc3NldCkgPT4gYXNzZXQubmFtZSk7XG4gIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgbG9nKGBbaW5zdGFsbGVyXSBSZWxlYXNlIEFQSSBmb3IgJHt2ZXJzaW9ufSB1bmF2YWlsYWJsZSAoJHtlcnJvciBpbnN0YW5jZW9mIEVycm9yID8gZXJyb3IubWVzc2FnZSA6IFN0cmluZyhlcnJvcil9KTsgZmFsbGluZyBiYWNrIHRvIHRlbXBsYXRlZCBhc3NldCBuYW1lcy5gKTtcbiAgICByZXR1cm4gdW5kZWZpbmVkO1xuICB9XG59XG5cbi8qKlxuICogUmV0dXJucyB0aGUgZXhwZWN0ZWQgY2FjaGVkIHNoZWxsIGV4ZWN1dGFibGUgcGF0aCBmb3IgdGhlIGN1cnJlbnQgcGxhdGZvcm0uXG4gKlxuICogQHBhcmFtIHNoZWxsRGlyIC0gVGhlIHNoZWxsIGNhY2hlIGRpcmVjdG9yeSBmb3IgYSB2ZXJzaW9uLlxuICogQHJldHVybnMgVGhlIGV4ZWN1dGFibGUgcGF0aC5cbiAqL1xuZnVuY3Rpb24gZ2V0Q2FjaGVkU2hlbGxFeGVQYXRoKHNoZWxsRGlyOiBzdHJpbmcpOiBzdHJpbmcge1xuICBpZiAocHJvY2Vzcy5wbGF0Zm9ybSA9PT0gJ3dpbjMyJykge1xuICAgIHJldHVybiBqb2luKHNoZWxsRGlyLCAnT2JzaWRpYW4uZXhlJyk7XG4gIH1cblxuICBpZiAocHJvY2Vzcy5wbGF0Zm9ybSA9PT0gJ2RhcndpbicpIHtcbiAgICByZXR1cm4gam9pbihzaGVsbERpciwgJ09ic2lkaWFuLmFwcCcsICdDb250ZW50cycsICdNYWNPUycsICdPYnNpZGlhbicpO1xuICB9XG5cbiAgcmV0dXJuIGpvaW4oc2hlbGxEaXIsICdvYnNpZGlhbicpO1xufVxuXG4vKipcbiAqIFJlc29sdmVzIHRoZSBvcmRlcmVkIGluc3RhbGxlciBhc3NldCBkb3dubG9hZCBVUkxzIHRvIHRyeSBmb3IgYSB2ZXJzaW9uLlxuICpcbiAqIFRoZSB2ZXJzaW9uJ3MgZXhhY3QgaW5zdGFsbGVyIFVSTCBiYWtlZCBpbnRvIHRoZSBgbWV0YWRhdGEuanNvbmAgY2F0YWxvZ1xuICogKGZyb20gdXBzdHJlYW0gYG9ic2lkaWFuLXZlcnNpb25zLmpzb25gKSBpcyB1c2VkIGRpcmVjdGx5IHdoZW4gcHJlc2VudCxcbiAqIGF2b2lkaW5nIGFueSBuZXR3b3JrIGxvb2t1cC4gT3RoZXJ3aXNlIHRoZSByZWxlYXNlJ3MgcmVhbCBhc3NldCBsaXN0IGlzXG4gKiBxdWVyaWVkIHNvIHRoZSBwbGF0Zm9ybS1jb3JyZWN0IGFzc2V0IGlzIHBpY2tlZCByZWdhcmRsZXNzIG9mIHRoZSBoaXN0b3JpY2FsXG4gKiBkb3QtdnMtaHlwaGVuIG5hbWluZzsgaWYgdGhhdCBjYWxsIHRvbyBpcyB1bmF2YWlsYWJsZSBpdCBmYWxscyBiYWNrIHRvIHRyeWluZ1xuICogYm90aCB0ZW1wbGF0ZWQgc2VwYXJhdG9yIGZvcm1zLlxuICpcbiAqIEBwYXJhbSB2ZXJzaW9uIC0gVGhlIGNvbmNyZXRlIGB4LnkuemAgdmVyc2lvbi5cbiAqIEByZXR1cm5zIENhbmRpZGF0ZSBhc3NldCBVUkxzLCBpbiBwcmlvcml0eSBvcmRlci5cbiAqL1xuYXN5bmMgZnVuY3Rpb24gcmVzb2x2ZUluc3RhbGxlckFzc2V0VXJscyh2ZXJzaW9uOiBzdHJpbmcpOiBQcm9taXNlPHN0cmluZ1tdPiB7XG4gIGNvbnN0IGJha2VkVXJsID0gc2VsZWN0SW5zdGFsbGVyRG93bmxvYWRVcmwoeyBkb3dubG9hZHM6IGdldFZlcnNpb25NZXRhZGF0YSh2ZXJzaW9uKT8uZG93bmxvYWRzLCBwbGF0Zm9ybTogcHJvY2Vzcy5wbGF0Zm9ybSB9KTtcbiAgaWYgKGJha2VkVXJsICE9PSB1bmRlZmluZWQpIHtcbiAgICByZXR1cm4gW2Jha2VkVXJsXTtcbiAgfVxuXG4gIGNvbnN0IGFzc2V0TmFtZXMgPSBhd2FpdCBmZXRjaFJlbGVhc2VBc3NldE5hbWVzKHZlcnNpb24pO1xuICBpZiAoYXNzZXROYW1lcykge1xuICAgIGNvbnN0IHNlbGVjdGVkID0gc2VsZWN0SW5zdGFsbGVyQXNzZXROYW1lKHsgYXNzZXROYW1lcywgcGxhdGZvcm06IHByb2Nlc3MucGxhdGZvcm0sIHZlcnNpb24gfSk7XG4gICAgaWYgKHNlbGVjdGVkICE9PSB1bmRlZmluZWQpIHtcbiAgICAgIHJldHVybiBbYCR7UkVMRUFTRV9ET1dOTE9BRF9CQVNFX1VSTH0vdiR7dmVyc2lvbn0vJHtzZWxlY3RlZH1gXTtcbiAgICB9XG4gICAgbG9nKGBbaW5zdGFsbGVyXSBObyBpbnN0YWxsZXIgYXNzZXQgbWF0Y2hlZCBmb3IgJHt2ZXJzaW9ufTsgZmFsbGluZyBiYWNrIHRvIHRlbXBsYXRlZCBhc3NldCBuYW1lcy5gKTtcbiAgfVxuXG4gIHJldHVybiBidWlsZEluc3RhbGxlckFzc2V0TmFtZUNhbmRpZGF0ZXMoeyBwbGF0Zm9ybTogcHJvY2Vzcy5wbGF0Zm9ybSwgdmVyc2lvbiB9KVxuICAgIC5tYXAoKG5hbWUpID0+IGAke1JFTEVBU0VfRE9XTkxPQURfQkFTRV9VUkx9L3Yke3ZlcnNpb259LyR7bmFtZX1gKTtcbn1cblxuLyoqXG4gKiBSdW5zIGEgY29tbWFuZCBzeW5jaHJvbm91c2x5LCB0aHJvd2luZyBvbiBhIG5vbi16ZXJvIGV4aXQuXG4gKlxuICogQHBhcmFtIGNvbW1hbmQgLSBUaGUgY29tbWFuZC5cbiAqIEBwYXJhbSBhcmdzIC0gVGhlIGFyZ3VtZW50cy5cbiAqL1xuZnVuY3Rpb24gcnVuKGNvbW1hbmQ6IHN0cmluZywgYXJnczogc3RyaW5nW10pOiB2b2lkIHtcbiAgY29uc3QgcmVzdWx0ID0gc3Bhd25TeW5jKGNvbW1hbmQsIGFyZ3MsIHsgc3RkaW86ICdpZ25vcmUnIH0pO1xuICBpZiAocmVzdWx0LnN0YXR1cyAhPT0gMCkge1xuICAgIHRocm93IG5ldyBFcnJvcihgQ29tbWFuZCBmYWlsZWQ6ICR7Y29tbWFuZH0gJHthcmdzLm1hcCgoYXJnKSA9PiBiYXNlbmFtZShhcmcpKS5qb2luKCcgJyl9IChleGl0ICR7U3RyaW5nKHJlc3VsdC5zdGF0dXMpfSlgKTtcbiAgfVxufVxuXG4vKiB2OCBpZ25vcmUgc3RvcCAqL1xuIl0sCiAgIm1hcHBpbmdzIjogIkFBbUJBO0FBQUEsRUFDRTtBQUFBLEVBQ0E7QUFBQSxPQUNLO0FBQ1A7QUFBQSxFQUNFO0FBQUEsRUFDQTtBQUFBLEVBQ0E7QUFBQSxFQUNBO0FBQUEsRUFDQTtBQUFBLE9BQ0s7QUFDUCxTQUFTLGNBQWM7QUFDdkI7QUFBQSxFQUNFO0FBQUEsRUFDQTtBQUFBLEVBQ0E7QUFBQSxPQUNLO0FBQ1AsT0FBTyxhQUFhO0FBRXBCO0FBQUEsRUFDRTtBQUFBLEVBQ0E7QUFBQSxFQUNBO0FBQUEsT0FDSztBQUNQLFNBQVMsV0FBVztBQUNwQixTQUFTLDBCQUEwQjtBQUtuQyxNQUFNLHNCQUFzQjtBQUc1QixNQUFNLDRCQUE0QjtBQUdsQyxNQUFNLHNCQUFzQjtBQWM1QixNQUFNLGFBQWEsS0FBSyxPQUFPLEdBQUcsOEJBQThCO0FBQ2hFLE1BQU0sa0JBQWtCLEtBQUssWUFBWSxhQUFhO0FBQ3RELE1BQU0sNEJBQTRCO0FBdUIzQixTQUFTLDRCQUE0QixTQUFxQztBQUMvRSxNQUFJLFFBQVEsYUFBYSxTQUFTO0FBQ2hDLFdBQU8seUJBQXlCLE9BQU87QUFBQSxFQUN6QztBQUVBLE1BQUksUUFBUSxhQUFhLFVBQVU7QUFDakMsV0FBTyx1QkFBdUIsT0FBTztBQUFBLEVBQ3ZDO0FBRUEsU0FBTyxzQkFBc0IsT0FBTztBQUN0QztBQVVBLGVBQXNCLGtCQUFrQixTQUFrQztBQUN4RSxRQUFNLFdBQVcsa0JBQWtCLE9BQU87QUFDMUMsUUFBTSxVQUFVLHNCQUFzQixRQUFRO0FB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
|
|
@@ -16,6 +16,56 @@
|
|
|
16
16
|
* into the output, with no runtime file read and no `bundle`-time JSON import that
|
|
17
17
|
* `bundle: false` cannot inline).
|
|
18
18
|
*/
|
|
19
|
+
/**
|
|
20
|
+
* The concrete JS runtime versions an installer's Electron shell ships — the
|
|
21
|
+
* **entire** `process.versions` object, read empirically by booting that
|
|
22
|
+
* installer over CDP (see `scripts/collect-runtime-versions.ts`). Absent for
|
|
23
|
+
* versions not yet collected (or that could not be booted). Electron bundles the
|
|
24
|
+
* same runtime on every OS for a given Electron version, so these are
|
|
25
|
+
* platform-invariant.
|
|
26
|
+
*
|
|
27
|
+
* The index signature carries every key `process.versions` exposes for that
|
|
28
|
+
* Electron build — beyond the four well-known ones below, that typically includes
|
|
29
|
+
* `ares`, `brotli`, `cldr`, `icu`, `llhttp`, `modules`, `napi`, `nghttp2`,
|
|
30
|
+
* `openssl`, `tz`, `unicode`, `uv`, `zlib` (and, on newer Electron, `ada`,
|
|
31
|
+
* `simdjson`, …). The exact set varies by Electron version, which is why it is
|
|
32
|
+
* captured wholesale rather than as a fixed field list.
|
|
33
|
+
*/
|
|
34
|
+
export interface ObsidianRuntimeVersions {
|
|
35
|
+
/** The bundled Chromium version, e.g. `'114.0.5735.289'`. */
|
|
36
|
+
readonly chrome: string;
|
|
37
|
+
/** The bundled Electron version, e.g. `'25.8.1'`. */
|
|
38
|
+
readonly electron: string;
|
|
39
|
+
/** The bundled Node.js version, e.g. `'18.15.0'`. */
|
|
40
|
+
readonly node: string;
|
|
41
|
+
/** Every `process.versions` key the Electron build exposes. */
|
|
42
|
+
readonly [key: string]: string;
|
|
43
|
+
/** The bundled V8 version, e.g. `'11.4.183.23'`. */
|
|
44
|
+
readonly v8: string;
|
|
45
|
+
}
|
|
46
|
+
/**
|
|
47
|
+
* The pre-resolved asset download URLs for a version, baked into `metadata.json`
|
|
48
|
+
* from the upstream `obsidian-versions.json` catalog (see the `metadata.json`
|
|
49
|
+
* section in `CLAUDE.md`).
|
|
50
|
+
*
|
|
51
|
+
* These are the exact URLs the version's assets are published at, so the
|
|
52
|
+
* integration-time download paths can skip the GitHub release-API lookup and the
|
|
53
|
+
* historical dot-vs-hyphen asset-name guessing. Only the assets this library
|
|
54
|
+
* actually downloads are carried: the app `asar` and the x64 desktop installers.
|
|
55
|
+
* A field is absent when the version publishes no such asset (e.g. a catalyst
|
|
56
|
+
* build ships only the `asar`), in which case the caller falls back to its
|
|
57
|
+
* hand-rolled resolution.
|
|
58
|
+
*/
|
|
59
|
+
export interface ObsidianVersionDownloads {
|
|
60
|
+
/** The `obsidian-<version>.asar.gz` package URL. */
|
|
61
|
+
readonly asar?: string;
|
|
62
|
+
/** The macOS (universal) `.dmg` installer URL. */
|
|
63
|
+
readonly dmg?: string;
|
|
64
|
+
/** The Windows x64 `.exe` installer URL. */
|
|
65
|
+
readonly exe?: string;
|
|
66
|
+
/** The Linux x64 `.tar.gz` portable-build URL. */
|
|
67
|
+
readonly tar?: string;
|
|
68
|
+
}
|
|
19
69
|
/**
|
|
20
70
|
* The subset of a `metadata.json` per-version entry this library reads.
|
|
21
71
|
*
|
|
@@ -29,6 +79,21 @@ export interface ObsidianVersionMetadata {
|
|
|
29
79
|
readonly changelogUrl?: string;
|
|
30
80
|
/** The release channel: `'public'`, `'catalyst'`, or `'public+catalyst'`. */
|
|
31
81
|
readonly channel?: string;
|
|
82
|
+
/**
|
|
83
|
+
* The pre-resolved asset download URLs for the version, baked from the
|
|
84
|
+
* upstream `obsidian-versions.json` catalog. Absent for versions not present
|
|
85
|
+
* in the catalog (the caller then falls back to hand-rolled resolution).
|
|
86
|
+
*/
|
|
87
|
+
readonly downloads?: ObsidianVersionDownloads;
|
|
88
|
+
/**
|
|
89
|
+
* The highest ECMAScript edition (e.g. `'ES2022'`) fully supported by this
|
|
90
|
+
* version's bundled Chromium, derived from {@link ObsidianRuntimeVersions.chrome}
|
|
91
|
+
* (see `deriveEcmaScriptVersion`). Baked alongside {@link runtimeVersions}, so a
|
|
92
|
+
* consumer pinning this installer knows offline which ES level a serialized
|
|
93
|
+
* `evalInObsidian` closure may safely use. Absent when the version has no
|
|
94
|
+
* collected runtime versions.
|
|
95
|
+
*/
|
|
96
|
+
readonly ecmaScriptVersion?: string;
|
|
32
97
|
/**
|
|
33
98
|
* The app's hardcoded required-minimum Electron version (e.g. `'28.2.3'`). An
|
|
34
99
|
* Electron version, not an installer version — comparing against it needs the
|
|
@@ -46,6 +111,12 @@ export interface ObsidianVersionMetadata {
|
|
|
46
111
|
* renderer dead-boots.
|
|
47
112
|
*/
|
|
48
113
|
readonly minRunnableInstallerVersion?: string;
|
|
114
|
+
/**
|
|
115
|
+
* The concrete JS runtime versions this version's Electron shell ships, read
|
|
116
|
+
* empirically from `process.versions`. Absent until collected (see
|
|
117
|
+
* {@link ObsidianRuntimeVersions} and `scripts/collect-runtime-versions.ts`).
|
|
118
|
+
*/
|
|
119
|
+
readonly runtimeVersions?: ObsidianRuntimeVersions;
|
|
49
120
|
}
|
|
50
121
|
/**
|
|
51
122
|
* Looks up the metadata entry for a concrete Obsidian app version.
|