obsidian-integration-testing 12.0.0 → 12.1.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-device-list.cjs +54 -0
- package/dist/lib/cjs/adb-device-list.d.cts +72 -0
- package/dist/lib/cjs/android-sdk.cjs +52 -0
- package/dist/lib/cjs/android-sdk.d.cts +29 -0
- package/dist/lib/cjs/app-startup-progress.cjs +87 -0
- package/dist/lib/cjs/app-startup-progress.d.cts +128 -0
- package/dist/lib/cjs/appium-server-marker.cjs +29 -32
- package/dist/lib/cjs/appium-server-marker.d.cts +22 -0
- package/dist/lib/cjs/avd-probe-verdict.cjs +90 -0
- package/dist/lib/cjs/avd-probe-verdict.d.cts +175 -0
- package/dist/lib/cjs/community-plugin-registry.cjs +1 -1
- package/dist/lib/cjs/community-plugin-registry.d.cts +1 -1
- package/dist/lib/cjs/config-directory-fallback-error.cjs +57 -0
- package/dist/lib/cjs/config-directory-fallback-error.d.cts +64 -0
- package/dist/lib/cjs/config-directory.cjs +46 -0
- package/dist/lib/cjs/config-directory.d.cts +45 -0
- package/dist/lib/cjs/connect-to-cdp.cjs +13 -7
- package/dist/lib/cjs/connect-to-cdp.d.cts +19 -0
- package/dist/lib/cjs/demo-vault-bootstrap.cjs +1 -1
- package/dist/lib/cjs/demo-vault-bootstrap.d.cts +3 -2
- package/dist/lib/cjs/demo-vault-populate.cjs +3 -2
- package/dist/lib/cjs/device-readiness.cjs +38 -3
- package/dist/lib/cjs/device-readiness.d.cts +83 -9
- package/dist/lib/cjs/emulator-arguments.cjs +6 -2
- package/dist/lib/cjs/emulator-arguments.d.cts +26 -0
- package/dist/lib/cjs/emulator-backend.cjs +71 -0
- package/dist/lib/cjs/emulator-backend.d.cts +76 -0
- package/dist/lib/cjs/emulator-liveness.cjs +72 -0
- package/dist/lib/cjs/emulator-liveness.d.cts +158 -0
- package/dist/lib/cjs/emulator-snapshot.cjs +57 -0
- package/dist/lib/cjs/emulator-snapshot.d.cts +68 -0
- package/dist/lib/cjs/global-setup-core.cjs +30 -30
- package/dist/lib/cjs/global-setup-core.d.cts +27 -2
- package/dist/lib/cjs/headless-vault-config.cjs +51 -0
- package/dist/lib/cjs/headless-vault-config.d.cts +67 -0
- package/dist/lib/cjs/index.cjs +12 -1
- package/dist/lib/cjs/index.d.cts +6 -1
- package/dist/lib/cjs/library.cjs +1 -1
- package/dist/lib/cjs/mobile-input.cjs +14 -2
- package/dist/lib/cjs/mobile-input.d.cts +5 -9
- package/dist/lib/cjs/namespace-bootstrap.cjs +1 -1
- package/dist/lib/cjs/obsidian-instance.cjs +52 -3
- package/dist/lib/cjs/obsidian-instance.d.cts +12 -0
- package/dist/lib/cjs/open-obsidian-settings-tab.cjs +1 -1
- package/dist/lib/cjs/open-obsidian-settings-tab.d.cts +3 -2
- package/dist/lib/cjs/owned-instance-exit-marker.cjs +99 -0
- package/dist/lib/cjs/owned-instance-exit-marker.d.cts +106 -0
- package/dist/lib/cjs/owned-instance-exited-error.cjs +106 -0
- package/dist/lib/cjs/owned-instance-exited-error.d.cts +98 -0
- package/dist/lib/cjs/owned-vault-seed.cjs +9 -5
- package/dist/lib/cjs/owned-vault-seed.d.cts +24 -3
- package/dist/lib/cjs/parent-liveness.cjs +42 -5
- package/dist/lib/cjs/parent-liveness.d.cts +37 -5
- package/dist/lib/cjs/port-owner.cjs +61 -0
- package/dist/lib/cjs/port-owner.d.cts +47 -0
- package/dist/lib/cjs/process-capture.cjs +62 -0
- package/dist/lib/cjs/process-capture.d.cts +83 -0
- package/dist/lib/cjs/process-exit-message.cjs +14 -8
- package/dist/lib/cjs/process-exit-message.d.cts +37 -3
- package/dist/lib/cjs/process-liveness.cjs +51 -0
- package/dist/lib/cjs/process-liveness.d.cts +18 -0
- package/dist/lib/cjs/run-version-matrix.cjs +1 -1
- package/dist/lib/cjs/run-version-matrix.d.cts +1 -1
- package/dist/lib/cjs/teardown-verdict.cjs +53 -0
- package/dist/lib/cjs/teardown-verdict.d.cts +69 -0
- package/dist/lib/cjs/temporary-vault.cjs +43 -8
- package/dist/lib/cjs/temporary-vault.d.cts +47 -5
- package/dist/lib/cjs/transport-appium.cjs +102 -17
- package/dist/lib/cjs/transport-appium.d.cts +53 -3
- package/dist/lib/cjs/transport-desktop-cdp.cjs +195 -6
- package/dist/lib/cjs/transport-desktop-cdp.d.cts +99 -0
- package/dist/lib/cjs/transport-factory.cjs +951 -133
- package/dist/lib/cjs/transport-options.cjs +11 -3
- package/dist/lib/cjs/transport-options.d.cts +131 -12
- package/dist/lib/cjs/transport.cjs +1 -1
- package/dist/lib/cjs/transport.d.cts +7 -1
- package/dist/lib/cjs/vault-plugin-install.cjs +40 -0
- package/dist/lib/cjs/vault-plugin-install.d.cts +64 -0
- package/dist/lib/cjs/vault-teardown-verdict.cjs +42 -0
- package/dist/lib/cjs/vault-teardown-verdict.d.cts +57 -0
- package/dist/lib/cjs/version-matrix.cjs +1 -1
- package/dist/lib/cjs/version-matrix.d.cts +2 -2
- package/dist/lib/cjs/webview-cdp.cjs +6 -7
- package/dist/lib/cjs/webview-cdp.d.cts +5 -1
- package/dist/lib/esm/adb-device-list.d.mts +72 -0
- package/dist/lib/esm/adb-device-list.mjs +28 -0
- package/dist/lib/esm/android-sdk.d.mts +29 -0
- package/dist/lib/esm/android-sdk.mjs +18 -0
- package/dist/lib/esm/app-startup-progress.d.mts +128 -0
- package/dist/lib/esm/app-startup-progress.mjs +59 -0
- package/dist/lib/esm/appium-server-marker.d.mts +22 -0
- package/dist/lib/esm/appium-server-marker.mjs +28 -22
- package/dist/lib/esm/avd-probe-verdict.d.mts +175 -0
- package/dist/lib/esm/avd-probe-verdict.mjs +62 -0
- package/dist/lib/esm/community-plugin-registry.d.mts +1 -1
- package/dist/lib/esm/community-plugin-registry.mjs +1 -1
- package/dist/lib/esm/config-directory-fallback-error.d.mts +64 -0
- package/dist/lib/esm/config-directory-fallback-error.mjs +33 -0
- package/dist/lib/esm/config-directory.d.mts +45 -0
- package/dist/lib/esm/config-directory.mjs +21 -0
- package/dist/lib/esm/connect-to-cdp.d.mts +19 -0
- package/dist/lib/esm/connect-to-cdp.mjs +13 -7
- package/dist/lib/esm/demo-vault-bootstrap.d.mts +3 -2
- package/dist/lib/esm/demo-vault-bootstrap.mjs +1 -1
- package/dist/lib/esm/demo-vault-populate.mjs +3 -2
- package/dist/lib/esm/device-readiness.d.mts +83 -9
- package/dist/lib/esm/device-readiness.mjs +34 -2
- package/dist/lib/esm/emulator-arguments.d.mts +26 -0
- package/dist/lib/esm/emulator-arguments.mjs +6 -2
- package/dist/lib/esm/emulator-backend.d.mts +76 -0
- package/dist/lib/esm/emulator-backend.mjs +45 -0
- package/dist/lib/esm/emulator-liveness.d.mts +158 -0
- package/dist/lib/esm/emulator-liveness.mjs +47 -0
- package/dist/lib/esm/emulator-snapshot.d.mts +68 -0
- package/dist/lib/esm/emulator-snapshot.mjs +32 -0
- package/dist/lib/esm/global-setup-core.d.mts +27 -2
- package/dist/lib/esm/global-setup-core.mjs +34 -35
- package/dist/lib/esm/headless-vault-config.d.mts +67 -0
- package/dist/lib/esm/headless-vault-config.mjs +31 -0
- package/dist/lib/esm/index.d.mts +6 -1
- package/dist/lib/esm/index.mjs +11 -1
- package/dist/lib/esm/library.mjs +1 -1
- package/dist/lib/esm/mobile-input.d.mts +5 -9
- package/dist/lib/esm/mobile-input.mjs +14 -2
- package/dist/lib/esm/namespace-bootstrap.mjs +1 -1
- package/dist/lib/esm/obsidian-instance.d.mts +12 -0
- package/dist/lib/esm/obsidian-instance.mjs +55 -3
- package/dist/lib/esm/open-obsidian-settings-tab.d.mts +3 -2
- package/dist/lib/esm/open-obsidian-settings-tab.mjs +1 -1
- package/dist/lib/esm/owned-instance-exit-marker.d.mts +106 -0
- package/dist/lib/esm/owned-instance-exit-marker.mjs +78 -0
- package/dist/lib/esm/owned-instance-exited-error.d.mts +98 -0
- package/dist/lib/esm/owned-instance-exited-error.mjs +81 -0
- package/dist/lib/esm/owned-vault-seed.d.mts +24 -3
- package/dist/lib/esm/owned-vault-seed.mjs +9 -5
- package/dist/lib/esm/parent-liveness.d.mts +37 -5
- package/dist/lib/esm/parent-liveness.mjs +42 -5
- package/dist/lib/esm/port-owner.d.mts +47 -0
- package/dist/lib/esm/port-owner.mjs +36 -0
- package/dist/lib/esm/process-capture.d.mts +83 -0
- package/dist/lib/esm/process-capture.mjs +38 -0
- package/dist/lib/esm/process-exit-message.d.mts +37 -3
- package/dist/lib/esm/process-exit-message.mjs +13 -8
- package/dist/lib/esm/process-liveness.d.mts +18 -0
- package/dist/lib/esm/process-liveness.mjs +17 -0
- package/dist/lib/esm/run-version-matrix.d.mts +1 -1
- package/dist/lib/esm/run-version-matrix.mjs +1 -1
- package/dist/lib/esm/teardown-verdict.d.mts +69 -0
- package/dist/lib/esm/teardown-verdict.mjs +28 -0
- package/dist/lib/esm/temporary-vault.d.mts +47 -5
- package/dist/lib/esm/temporary-vault.mjs +43 -8
- package/dist/lib/esm/transport-appium.d.mts +53 -3
- package/dist/lib/esm/transport-appium.mjs +108 -17
- package/dist/lib/esm/transport-desktop-cdp.d.mts +99 -0
- package/dist/lib/esm/transport-desktop-cdp.mjs +202 -7
- package/dist/lib/esm/transport-factory.mjs +995 -138
- package/dist/lib/esm/transport-options.d.mts +131 -12
- package/dist/lib/esm/transport-options.mjs +9 -2
- package/dist/lib/esm/transport.d.mts +7 -1
- package/dist/lib/esm/vault-plugin-install.d.mts +64 -0
- package/dist/lib/esm/vault-plugin-install.mjs +20 -0
- package/dist/lib/esm/vault-teardown-verdict.d.mts +57 -0
- package/dist/lib/esm/vault-teardown-verdict.mjs +18 -0
- package/dist/lib/esm/version-matrix.d.mts +2 -2
- package/dist/lib/esm/version-matrix.mjs +1 -1
- package/dist/lib/esm/webview-cdp.d.mts +5 -1
- package/dist/lib/esm/webview-cdp.mjs +6 -7
- package/package.json +24 -23
- package/dist/lib/cjs/native-dialog-monitor.cjs +0 -192
- package/dist/lib/cjs/native-dialog-monitor.d.cts +0 -66
- package/dist/lib/cjs/obsidian-namespace.cjs +0 -17
- package/dist/lib/cjs/obsidian-namespace.d.cts +0 -128
- package/dist/lib/esm/native-dialog-monitor.d.mts +0 -66
- package/dist/lib/esm/native-dialog-monitor.mjs +0 -158
- package/dist/lib/esm/obsidian-namespace.d.mts +0 -128
- package/dist/lib/esm/obsidian-namespace.mjs +0 -1
|
@@ -144,4 +144,4 @@ export {
|
|
|
144
144
|
resolveVersionSpecs,
|
|
145
145
|
runVersionMatrixEntries
|
|
146
146
|
};
|
|
147
|
-
//# sourceMappingURL=data:application/json;base64,ewogICJ2ZXJzaW9uIjogMywKICAic291cmNlcyI6IFsiLi4vLi4vLi4vc3JjL3ZlcnNpb24tbWF0cml4LnRzIl0sCiAgInNvdXJjZXNDb250ZW50IjogWyIvKipcbiAqIEBmaWxlXG4gKlxuICogUHVyZSBkZWNpc2lvbiBsYXllciBmb3IgcnVubmluZyBhIHN1aXRlIGFnYWluc3QgKipldmVyeSoqIHN1cHBvcnRlZCBPYnNpZGlhblxuICogdmVyc2lvbi5cbiAqXG4gKiBTdXBwb3J0IGlzIHRoZSByYW5nZSBgW2xhdGVzdCBwdWJsaWMsIGxhdGVzdCBjYXRhbHlzdF1gIGFuZCBib3RoIGVuZHMgbXVzdCBiZVxuICogdmVyaWZpZWQgKEc5OSkuIFRoZSB0d28gZW5kcyBhcmUgbW92aW5nIHRhcmdldHMsIGFuZCB0aGV5IHBlcmlvZGljYWxseVxuICogKipjb2luY2lkZSoqIFx1MjAxNCB3aGVuIHB1YmxpYyBjYXRjaGVzIHVwIHRvIGNhdGFseXN0LCBib3RoIHNwZWNpZmllcnMgcHJvdmlzaW9uXG4gKiB0aGUgc2FtZSBidWlsZCwgc28gcnVubmluZyB0aGUgc3VpdGVzIHR3aWNlIHJlLXJ1bnMgdGhlIHNhbWUgYnVpbGQgYW5kIGJ1eXNcbiAqIG5vdGhpbmcuIFdvcnNlLCBhIGNvbnN1bWVyIHRoYXQgcmFuIGJvdGggc3RpbGwgcmVwb3J0cyBcImdyZWVuIG9uIHB1YmxpYyBBTkRcbiAqIGNhdGFseXN0XCIsIGEgdHdvLWVuZCBjbGFpbSBpdCBuZXZlciB2ZXJpZmllZC5cbiAqXG4gKiBUaGUgZGVjaXNpb24gdGhlcmVmb3JlIGxpdmVzIGhlcmUgcmF0aGVyIHRoYW4gaW4gZXZlcnkgY29uc3VtaW5nIHJlcG86IGEgbGlzdFxuICogb2YgdmVyc2lvbiBzcGVjaWZpZXJzIGlzIHJlc29sdmVkIHRvIGNvbmNyZXRlIHZlcnNpb25zLCAqKmRlLWR1cGxpY2F0ZWQgb24gdGhlXG4gKiByZXNvbHZlZCB2ZXJzaW9uKiogKG5ldmVyIG9uIHRoZSBzcGVjaWZpZXIgc3RyaW5nLCBzbyBhbiBleHBsaWNpdCBgMS4xMy40YCBhbmRcbiAqIGBjYXRhbHlzdC1sYXRlc3RgIGNvbGxhcHNlIHdoZW4gY2F0YWx5c3QgKmlzKiAxLjEzLjQpLCBhbmQgdGhlIHN1aXRlcyBydW4gb25jZVxuICogcGVyIGRpc3RpbmN0IHZlcnNpb24uXG4gKlxuICogRXZlcnl0aGluZyBoZXJlIGlzIHB1cmUgYW5kIHVuaXQtdGVzdGVkOyB0aGUgbWFuaWZlc3QgZmV0Y2ggYW5kIHRoZSBsb2dnaW5nXG4gKiBsaXZlIGluIHRoZSBpbnRlZ3JhdGlvbi10aW1lIGBydW4tdmVyc2lvbi1tYXRyaXgudHNgIGdsdWUuXG4gKi9cblxuaW1wb3J0IHR5cGUgeyBEZXNrdG9wUmVsZWFzZXNNYW5pZmVzdCB9IGZyb20gJy4vb2JzaWRpYW4tdmVyc2lvbi5tanMnO1xuXG5pbXBvcnQge1xuICBDQVRBTFlTVF9MQVRFU1QsXG4gIHBhcnNlVmVyc2lvblNwZWMsXG4gIFBVQkxJQ19MQVRFU1QsXG4gIHJlc29sdmVWZXJzaW9uRnJvbU1hbmlmZXN0XG59IGZyb20gJy4vb2JzaWRpYW4tdmVyc2lvbi5tanMnO1xuXG4vKipcbiAqIFRoZSB2ZXJzaW9uIHNwZWNpZmllcnMgYSBtYXRyaXggcnVuIGRlZmF1bHRzIHRvOiBib3RoIGVuZHMgb2YgdGhlIHN1cHBvcnRlZFxuICogcmFuZ2UgKEc5OSkuIFRoZXkgYXJlIGRlLWR1cGxpY2F0ZWQgb24gdGhlaXIgcmVzb2x2ZWQgdmVyc2lvbnMsIHNvIHdoZW4gcHVibGljXG4gKiBoYXMgY2F1Z2h0IHVwIHRvIGNhdGFseXN0IHRoaXMgeWllbGRzIGEgc2luZ2xlIHJ1bi5cbiAqL1xuZXhwb3J0IGNvbnN0IERFRkFVTFRfT0JTSURJQU5fVkVSU0lPTl9TUEVDUzogcmVhZG9ubHkgc3RyaW5nW10gPSBbUFVCTElDX0xBVEVTVCwgQ0FUQUxZU1RfTEFURVNUXTtcblxuLyoqXG4gKiBBIHJlcXVlc3RlZCBzcGVjaWZpZXIgdGhhdCBjb3VsZCBub3QgYmUgcmVzb2x2ZWQgYW5kIHdhcyBkcm9wcGVkLlxuICovXG5leHBvcnQgaW50ZXJmYWNlIERyb3BwZWRWZXJzaW9uU3BlYyB7XG4gIC8qKlxuICBXaHkgdGhlIHNwZWNpZmllciBjb3VsZCBub3QgYmUgcmVzb2x2ZWQuXG4gICAqL1xuICByZWFkb25seSByZWFzb246IHN0cmluZztcblxuICAvKipcbiAgVGhlIHNwZWNpZmllciBhcyByZXF1ZXN0ZWQuXG4gICAqL1xuICByZWFkb25seSBzcGVjOiBzdHJpbmc7XG59XG5cbi8qKlxuICogUGFyYW1ldGVycyBmb3Ige0BsaW5rIGZvcm1hdFZlcnNpb25NYXRyaXhQbGFufS5cbiAqL1xuZXhwb3J0IGludGVyZmFjZSBGb3JtYXRWZXJzaW9uTWF0cml4UGxhblBhcmFtcyB7XG4gIC8qKlxuICBUaGUgZGUtZHVwbGljYXRlZCBtYXRyaXggdGhhdCB3aWxsIGJlIHJ1bi5cbiAgICovXG4gIHJlYWRvbmx5IGVudHJpZXM6IHJlYWRvbmx5IE9ic2lkaWFuVmVyc2lvbk1hdHJpeEVudHJ5W107XG5cbiAgLyoqXG4gIFRoZSBzcGVjaWZpZXJzIHRoYXQgcmVzb2x2ZWQsIGluIHJlcXVlc3RlZCBvcmRlci5cbiAgICovXG4gIHJlYWRvbmx5IHJlc29sdmVkU3BlY3M6IHJlYWRvbmx5IFJlc29sdmVkVmVyc2lvblNwZWNbXTtcbn1cblxuLyoqXG4gKiBQYXJhbWV0ZXJzIGZvciB7QGxpbmsgZm9ybWF0VmVyc2lvbk1hdHJpeFJ1bkhlYWRlcn0uXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgRm9ybWF0VmVyc2lvbk1hdHJpeFJ1bkhlYWRlclBhcmFtcyB7XG4gIC8qKlxuICBUaGUgZW50cnkgYWJvdXQgdG8gcnVuLlxuICAgKi9cbiAgcmVhZG9ubHkgZW50cnk6IE9ic2lkaWFuVmVyc2lvbk1hdHJpeEVudHJ5O1xuXG4gIC8qKlxuICBUaGUgZW50cnkncyB6ZXJvLWJhc2VkIHBvc2l0aW9uIGluIHRoZSBtYXRyaXguXG4gICAqL1xuICByZWFkb25seSBpbmRleDogbnVtYmVyO1xuXG4gIC8qKlxuICBUaGUgdG90YWwgbnVtYmVyIG9mIGVudHJpZXMgaW4gdGhlIG1hdHJpeC5cbiAgICovXG4gIHJlYWRvbmx5IHRvdGFsOiBudW1iZXI7XG59XG5cbi8qKlxuICogT25lIGRpc3RpbmN0IE9ic2lkaWFuIHZlcnNpb24gdGhlIHN1aXRlcyB3aWxsIHJ1biBhZ2FpbnN0LlxuICovXG5leHBvcnQgaW50ZXJmYWNlIE9ic2lkaWFuVmVyc2lvbk1hdHJpeEVudHJ5IHtcbiAgLyoqXG4gICAqIEV2ZXJ5IHJlcXVlc3RlZCBzcGVjaWZpZXIgdGhhdCByZXNvbHZlZCB0byB7QGxpbmsgdmVyc2lvbn0sIGluIHJlcXVlc3RlZFxuICAgKiBvcmRlci4gTW9yZSB0aGFuIG9uZSBtZWFucyB0aGUgc3BlY2lmaWVycyBjb2luY2lkZWQgYW5kIHdlcmUgY29sbGFwc2VkLlxuICAgKi9cbiAgcmVhZG9ubHkgc3BlY3M6IHJlYWRvbmx5IHN0cmluZ1tdO1xuXG4gIC8qKlxuICBUaGUgY29uY3JldGUgYHgueS56YCB2ZXJzaW9uLlxuICAgKi9cbiAgcmVhZG9ubHkgdmVyc2lvbjogc3RyaW5nO1xufVxuXG4vKipcbiAqIEEgcmVxdWVzdGVkIHNwZWNpZmllciBwYWlyZWQgd2l0aCB0aGUgY29uY3JldGUgdmVyc2lvbiBpdCByZXNvbHZlZCB0by5cbiAqL1xuZXhwb3J0IGludGVyZmFjZSBSZXNvbHZlZFZlcnNpb25TcGVjIHtcbiAgLyoqXG4gIFRoZSBzcGVjaWZpZXIgYXMgcmVxdWVzdGVkIChhbiBgeC55LnpgIHZlcnNpb24gb3IgYSBjaGFubmVsIGFsaWFzKS5cbiAgICovXG4gIHJlYWRvbmx5IHNwZWM6IHN0cmluZztcblxuICAvKipcbiAgVGhlIGNvbmNyZXRlIGB4LnkuemAgdmVyc2lvbiBpdCByZXNvbHZlZCB0by5cbiAgICovXG4gIHJlYWRvbmx5IHZlcnNpb246IHN0cmluZztcbn1cblxuLyoqXG4gKiBUaGUgb3V0Y29tZSBvZiB7QGxpbmsgcmVzb2x2ZVJlcXVlc3RlZFNwZWNzfS5cbiAqL1xuZXhwb3J0IGludGVyZmFjZSBSZXNvbHZlUmVxdWVzdGVkU3BlY3NSZXN1bHQge1xuICAvKipcbiAgICogV2hldGhlciB0aGUgc3BlY2lmaWVycyBjYW1lIGZyb20ge0BsaW5rIERFRkFVTFRfT0JTSURJQU5fVkVSU0lPTl9TUEVDU31cbiAgICogcmF0aGVyIHRoYW4gYmVpbmcgZXhwbGljaXRseSByZXF1ZXN0ZWQuXG4gICAqL1xuICByZWFkb25seSBpc0RlZmF1bHQ6IGJvb2xlYW47XG5cbiAgLyoqXG4gIFRoZSBzcGVjaWZpZXJzIHRvIHJlc29sdmUsIGluIG9yZGVyLlxuICAgKi9cbiAgcmVhZG9ubHkgc3BlY3M6IHJlYWRvbmx5IHN0cmluZ1tdO1xufVxuXG4vKipcbiAqIFBhcmFtZXRlcnMgZm9yIHtAbGluayByZXNvbHZlVmVyc2lvblNwZWNzfS5cbiAqL1xuZXhwb3J0IGludGVyZmFjZSBSZXNvbHZlVmVyc2lvblNwZWNzUGFyYW1zIHtcbiAgLyoqXG4gICAqIFRoZSBkZXNrdG9wIHJlbGVhc2VzIG1hbmlmZXN0LCBvciBgdW5kZWZpbmVkYCB3aGVuIG5vIHJlcXVlc3RlZCBzcGVjaWZpZXIgaXNcbiAgICogYSBjaGFubmVsIGFsaWFzIChzbyBubyBmZXRjaCB3YXMgbmVlZGVkKS5cbiAgICovXG4gIHJlYWRvbmx5IG1hbmlmZXN0OiBEZXNrdG9wUmVsZWFzZXNNYW5pZmVzdCB8IHVuZGVmaW5lZDtcblxuICAvKipcbiAgICogV2hldGhlciBhIHNwZWNpZmllciB0aGF0IGNhbm5vdCBiZSByZXNvbHZlZCBpcyBkcm9wcGVkIHdpdGggYSByZWNvcmRlZFxuICAgKiByZWFzb24gaW5zdGVhZCBvZiB0aHJvd2luZy4gU2V0IGZvciB0aGUgKipkZWZhdWx0Kiogc3BlY2lmaWVyIGxpc3Qgb25seTogYVxuICAgKiBtYW5pZmVzdCB0aGF0IHNoaXBzIG5vIGNhdGFseXN0IGVudHJ5IG11c3Qgbm90IGJyZWFrIGV2ZXJ5IGNvbnN1bWVyJ3MgZ2F0ZSxcbiAgICogd2hlcmVhcyBhbiBleHBsaWNpdGx5IHJlcXVlc3RlZCBzcGVjaWZpZXIgdGhhdCBjYW5ub3QgcmVzb2x2ZSBpcyBhIHJlYWxcbiAgICogZXJyb3IuXG4gICAqL1xuICByZWFkb25seSBzaG91bGRUb2xlcmF0ZVVucmVzb2x2YWJsZVNwZWNzOiBib29sZWFuO1xuXG4gIC8qKlxuICBUaGUgcmVxdWVzdGVkIHNwZWNpZmllcnMsIGluIG9yZGVyLlxuICAgKi9cbiAgcmVhZG9ubHkgc3BlY3M6IHJlYWRvbmx5IHN0cmluZ1tdO1xufVxuXG4vKipcbiAqIFRoZSBvdXRjb21lIG9mIHtAbGluayByZXNvbHZlVmVyc2lvblNwZWNzfS5cbiAqL1xuZXhwb3J0IGludGVyZmFjZSBSZXNvbHZlVmVyc2lvblNwZWNzUmVzdWx0IHtcbiAgLyoqXG4gIFNwZWNpZmllcnMgZHJvcHBlZCBiZWNhdXNlIHRoZXkgY291bGQgbm90IGJlIHJlc29sdmVkICh0b2xlcmFudCBtb2RlIG9ubHkpLlxuICAgKi9cbiAgcmVhZG9ubHkgZHJvcHBlZFNwZWNzOiByZWFkb25seSBEcm9wcGVkVmVyc2lvblNwZWNbXTtcblxuICAvKipcbiAgVGhlIHNwZWNpZmllcnMgdGhhdCByZXNvbHZlZCwgaW4gcmVxdWVzdGVkIG9yZGVyLlxuICAgKi9cbiAgcmVhZG9ubHkgcmVzb2x2ZWRTcGVjczogcmVhZG9ubHkgUmVzb2x2ZWRWZXJzaW9uU3BlY1tdO1xufVxuXG4vKipcbiAqIFBhcmFtZXRlcnMgZm9yIHtAbGluayBydW5WZXJzaW9uTWF0cml4RW50cmllc30uXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgUnVuVmVyc2lvbk1hdHJpeEVudHJpZXNQYXJhbXMge1xuICAvKipcbiAgVGhlIGRlLWR1cGxpY2F0ZWQgbWF0cml4IHRvIHJ1bi5cbiAgICovXG4gIHJlYWRvbmx5IGVudHJpZXM6IHJlYWRvbmx5IE9ic2lkaWFuVmVyc2lvbk1hdHJpeEVudHJ5W107XG5cbiAgLyoqXG4gIENhbGxlZCBqdXN0IGJlZm9yZSBlYWNoIGVudHJ5IHJ1bnMsIGZvciBwcm9ncmVzcyByZXBvcnRpbmcuXG4gICAqL1xuICByZWFkb25seSBvbkVudHJ5U3RhcnQ6IChwYXJhbXM6IEZvcm1hdFZlcnNpb25NYXRyaXhSdW5IZWFkZXJQYXJhbXMpID0+IHZvaWQ7XG5cbiAgLyoqXG4gIFJ1bnMgdGhlIHN1aXRlcyBhZ2FpbnN0IGEgc2luZ2xlIGVudHJ5LCB0aHJvd2luZyBvbiBmYWlsdXJlLlxuICAgKi9cbiAgcmVhZG9ubHkgcnVuOiAoZW50cnk6IE9ic2lkaWFuVmVyc2lvbk1hdHJpeEVudHJ5KSA9PiBQcm9taXNlPHZvaWQ+IHwgdm9pZDtcbn1cblxuLyoqXG4gKiBDb2xsYXBzZXMgcmVzb2x2ZWQgc3BlY2lmaWVycyBpbnRvIG9uZSBlbnRyeSBwZXIgKipkaXN0aW5jdCByZXNvbHZlZCB2ZXJzaW9uKiouXG4gKlxuICogRGUtZHVwbGljYXRpb24gaXMga2V5ZWQgb24gdGhlIHJlc29sdmVkIHZlcnNpb24sIG5vdCB0aGUgc3BlY2lmaWVyIHN0cmluZywgc29cbiAqIHNwZWNpZmllcnMgdGhhdCBuYW1lIHRoZSBzYW1lIGJ1aWxkIGNvbGxhcHNlIGhvd2V2ZXIgdGhleSB3ZXJlIHdyaXR0ZW4uXG4gKiBGaXJzdC1zZWVuIG9yZGVyIGlzIHByZXNlcnZlZCwgYW5kIGV2ZXJ5IHNwZWNpZmllciB0aGF0IGxhbmRlZCBvbiBhIHZlcnNpb24gaXNcbiAqIHJlY29yZGVkIG9uIGl0cyBlbnRyeS5cbiAqXG4gKiBAcGFyYW0gcmVzb2x2ZWRTcGVjcyAtIFRoZSByZXNvbHZlZCBzcGVjaWZpZXJzLCBpbiByZXF1ZXN0ZWQgb3JkZXIuXG4gKiBAcmV0dXJucyBPbmUgZW50cnkgcGVyIGRpc3RpbmN0IHZlcnNpb24sIGluIGZpcnN0LXNlZW4gb3JkZXIuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBidWlsZFZlcnNpb25NYXRyaXgocmVzb2x2ZWRTcGVjczogcmVhZG9ubHkgUmVzb2x2ZWRWZXJzaW9uU3BlY1tdKTogT2JzaWRpYW5WZXJzaW9uTWF0cml4RW50cnlbXSB7XG4gIGNvbnN0IHNwZWNzQnlWZXJzaW9uID0gbmV3IE1hcDxzdHJpbmcsIHN0cmluZ1tdPigpO1xuXG4gIGZvciAoY29uc3QgeyBzcGVjLCB2ZXJzaW9uIH0gb2YgcmVzb2x2ZWRTcGVjcykge1xuICAgIGNvbnN0IHNwZWNzID0gc3BlY3NCeVZlcnNpb24uZ2V0KHZlcnNpb24pO1xuICAgIGlmICghc3BlY3MpIHtcbiAgICAgIHNwZWNzQnlWZXJzaW9uLnNldCh2ZXJzaW9uLCBbc3BlY10pO1xuICAgICAgY29udGludWU7XG4gICAgfVxuICAgIGlmICghc3BlY3MuaW5jbHVkZXMoc3BlYykpIHtcbiAgICAgIHNwZWNzLnB1c2goc3BlYyk7XG4gICAgfVxuICB9XG5cbiAgcmV0dXJuIFsuLi5zcGVjc0J5VmVyc2lvbl0ubWFwKChbdmVyc2lvbiwgc3BlY3NdKSA9PiAoeyBzcGVjcywgdmVyc2lvbiB9KSk7XG59XG5cbi8qKlxuICogRm9ybWF0cyBhbiBlbnRyeSBmb3IgbG9ncyBhbmQgZXJyb3IgbWVzc2FnZXMuXG4gKlxuICogU3BlY2lmaWVycyB0aGF0IG1lcmVseSByZXBlYXQgdGhlIHZlcnNpb24gYWRkIG5vdGhpbmcsIHNvIGFuIGV4cGxpY2l0LW9ubHlcbiAqIGVudHJ5IGZvcm1hdHMgYXMgdGhlIGJhcmUgdmVyc2lvbiByYXRoZXIgdGhhbiBgMS4xMy40ICgxLjEzLjQpYC5cbiAqXG4gKiBAcGFyYW0gZW50cnkgLSBUaGUgZW50cnkgdG8gZm9ybWF0LlxuICogQHJldHVybnMgQSBzdHJpbmcgbGlrZSBgMS4xMy40IChwdWJsaWMtbGF0ZXN0LCBjYXRhbHlzdC1sYXRlc3QpYC5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGZvcm1hdFZlcnNpb25NYXRyaXhFbnRyeShlbnRyeTogT2JzaWRpYW5WZXJzaW9uTWF0cml4RW50cnkpOiBzdHJpbmcge1xuICBjb25zdCB7IHNwZWNzLCB2ZXJzaW9uIH0gPSBlbnRyeTtcbiAgY29uc3QgYWxpYXNTcGVjcyA9IHNwZWNzLmZpbHRlcigoc3BlYykgPT4gc3BlYyAhPT0gdmVyc2lvbik7XG4gIGlmIChhbGlhc1NwZWNzLmxlbmd0aCA9PT0gMCkge1xuICAgIHJldHVybiB2ZXJzaW9uO1xuICB9XG4gIHJldHVybiBgJHt2ZXJzaW9ufSAoJHthbGlhc1NwZWNzLmpvaW4oJywgJyl9KWA7XG59XG5cbi8qKlxuICogQnVpbGRzIHRoZSBsaW5lcyBhbm5vdW5jaW5nIHdoYXQgdGhlIG1hdHJpeCByZXNvbHZlZCB0byBhbmQgaG93IG1hbnkgcnVucyBpdFxuICogd2lsbCB0YWtlLlxuICpcbiAqIFRoZSBjb2xsYXBzZSBtdXN0IGJlICoqc3RhdGVkKiosIG5ldmVyIGluZmVycmVkOiBhIHJlYWRlciB3aG8gc2VlcyBvbmUgcnVuXG4gKiB3aGVyZSB0aGV5IGV4cGVjdGVkIHR3byBoYXMgdG8gYmUgdG9sZCB0aGUgc2Vjb25kIGVuZCB3YXMgYWxyZWFkeSBjb3ZlcmVkLFxuICogbm90IGxlZnQgd29uZGVyaW5nIHdoZXRoZXIgaXQgd2FzIHNraXBwZWQgYnkgYWNjaWRlbnQuXG4gKlxuICogQHBhcmFtIHBhcmFtcyAtIFRoZSBtYXRyaXggYW5kIHRoZSBzcGVjaWZpZXJzIGl0IHdhcyBidWlsdCBmcm9tLlxuICogQHJldHVybnMgVGhlIGxpbmVzIHRvIGxvZywgaW4gb3JkZXIuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBmb3JtYXRWZXJzaW9uTWF0cml4UGxhbihwYXJhbXM6IEZvcm1hdFZlcnNpb25NYXRyaXhQbGFuUGFyYW1zKTogc3RyaW5nW10ge1xuICBjb25zdCB7IGVudHJpZXMsIHJlc29sdmVkU3BlY3MgfSA9IHBhcmFtcztcblxuICBjb25zdCBsaW5lcyA9IHJlc29sdmVkU3BlY3NcbiAgICAuZmlsdGVyKCh7IHNwZWMsIHZlcnNpb24gfSkgPT4gc3BlYyAhPT0gdmVyc2lvbilcbiAgICAubWFwKCh7IHNwZWMsIHZlcnNpb24gfSkgPT4gYCR7c3BlY30gLT4gJHt2ZXJzaW9ufWApO1xuXG4gIGNvbnN0IHNwZWNpZmllckNvdW50ID0gcmVzb2x2ZWRTcGVjcy5sZW5ndGg7XG4gIGNvbnN0IHZlcnNpb25Db3VudCA9IGVudHJpZXMubGVuZ3RoO1xuICBjb25zdCBmb3JtYXR0ZWRFbnRyaWVzID0gZW50cmllcy5tYXAoKGVudHJ5KSA9PiBmb3JtYXRWZXJzaW9uTWF0cml4RW50cnkoZW50cnkpKS5qb2luKCcsICcpO1xuXG4gIGxpbmVzLnB1c2goXG4gICAgYCR7U3RyaW5nKHNwZWNpZmllckNvdW50KX0gcmVxdWVzdGVkICR7cGx1cmFsaXplKHNwZWNpZmllckNvdW50LCAnc3BlY2lmaWVyJyl9IGBcbiAgICAgICsgYCR7cmVzb2x2ZVZlcmIoc3BlY2lmaWVyQ291bnQpfSB0byAke1N0cmluZyh2ZXJzaW9uQ291bnQpfSBkaXN0aW5jdCAke3BsdXJhbGl6ZSh2ZXJzaW9uQ291bnQsICd2ZXJzaW9uJyl9OiBgXG4gICAgICArIGAke2Zvcm1hdHRlZEVudHJpZXN9LiBSdW5uaW5nIHRoZSBzdWl0ZXMgJHtmb3JtYXRSdW5Db3VudCh2ZXJzaW9uQ291bnQpfS5gXG4gICk7XG5cbiAgcmV0dXJuIGxpbmVzO1xufVxuXG4vKipcbiAqIEJ1aWxkcyB0aGUgcHJvZ3Jlc3MgbGluZSBhbm5vdW5jaW5nIGEgc2luZ2xlIGVudHJ5J3MgcnVuLlxuICpcbiAqIEBwYXJhbSBwYXJhbXMgLSBUaGUgZW50cnkgYW5kIGl0cyBwb3NpdGlvbiBpbiB0aGUgbWF0cml4LlxuICogQHJldHVybnMgQSBzdHJpbmcgbGlrZSBgUnVuIDEgb2YgMjogMS4xMi43IChwdWJsaWMtbGF0ZXN0KWAuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBmb3JtYXRWZXJzaW9uTWF0cml4UnVuSGVhZGVyKHBhcmFtczogRm9ybWF0VmVyc2lvbk1hdHJpeFJ1bkhlYWRlclBhcmFtcyk6IHN0cmluZyB7XG4gIGNvbnN0IHsgZW50cnksIGluZGV4LCB0b3RhbCB9ID0gcGFyYW1zO1xuICByZXR1cm4gYFJ1biAke1N0cmluZyhpbmRleCArIDEpfSBvZiAke1N0cmluZyh0b3RhbCl9OiAke2Zvcm1hdFZlcnNpb25NYXRyaXhFbnRyeShlbnRyeSl9YDtcbn1cblxuLyoqXG4gKiBSZXBvcnRzIHdoZXRoZXIgYW55IHNwZWNpZmllciBpcyBhIGNoYW5uZWwgYWxpYXMsIGkuZS4gd2hldGhlciB0aGUgcmVsZWFzZXNcbiAqIG1hbmlmZXN0IGhhcyB0byBiZSBmZXRjaGVkIGF0IGFsbC5cbiAqXG4gKiBAcGFyYW0gc3BlY3MgLSBUaGUgcmVxdWVzdGVkIHNwZWNpZmllcnMuXG4gKiBAcmV0dXJucyBgdHJ1ZWAgd2hlbiBhdCBsZWFzdCBvbmUgc3BlY2lmaWVyIHJlc29sdmVzIGFnYWluc3QgdGhlIG1hbmlmZXN0LlxuICovXG5leHBvcnQgZnVuY3Rpb24gaGFzQ2hhbm5lbFNwZWMoc3BlY3M6IHJlYWRvbmx5IHN0cmluZ1tdKTogYm9vbGVhbiB7XG4gIHJldHVybiBzcGVjcy5zb21lKChzcGVjKSA9PiBzcGVjID09PSBQVUJMSUNfTEFURVNUIHx8IHNwZWMgPT09IENBVEFMWVNUX0xBVEVTVCk7XG59XG5cbi8qKlxuICogU3BsaXRzIGEgY29tbWEtc2VwYXJhdGVkIHNwZWNpZmllciBsaXN0LCBzbyBhIGNvbnN1bWVyIGNhbiBoYW5kIGFuIGVudiB2YXJcbiAqIChgT0JTSURJQU5fVkVSU0lPTj0xLjEyLjcsY2F0YWx5c3QtbGF0ZXN0YCkgc3RyYWlnaHQgdGhyb3VnaC5cbiAqXG4gKiBAcGFyYW0gcmF3IC0gVGhlIHJhdyBjb21tYS1zZXBhcmF0ZWQgc3RyaW5nLlxuICogQHJldHVybnMgVGhlIHRyaW1tZWQsIG5vbi1lbXB0eSBzcGVjaWZpZXJzLCBpbiBvcmRlci5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHBhcnNlVmVyc2lvblNwZWNMaXN0KHJhdzogc3RyaW5nKTogc3RyaW5nW10ge1xuICByZXR1cm4gcmF3LnNwbGl0KCcsJykubWFwKChzcGVjKSA9PiBzcGVjLnRyaW0oKSkuZmlsdGVyKChzcGVjKSA9PiBzcGVjICE9PSAnJyk7XG59XG5cbi8qKlxuICogTm9ybWFsaXplcyB0aGUgcmVxdWVzdGVkIHZlcnNpb24gc3BlY2lmaWVycywgZmFsbGluZyBiYWNrIHRvIHRoZSBkZWZhdWx0XG4gKiBib3RoLWVuZHMgbGlzdCB3aGVuIG5vbmUgd2VyZSBnaXZlbi5cbiAqXG4gKiBBbiBlbXB0eSBzdHJpbmcgaXMgdHJlYXRlZCBhcyBhYnNlbnQsIHNvIGEgY29uc3VtZXIgY2FuIHBhc3MgYW4gdW5zZXRcbiAqIGBwcm9jZXNzLmVudlsnT0JTSURJQU5fVkVSU0lPTiddYCB3aXRob3V0IGd1YXJkaW5nIGl0LlxuICpcbiAqIEBwYXJhbSB2ZXJzaW9ucyAtIEFuIGFycmF5IG9mIHNwZWNpZmllcnMsIGEgY29tbWEtc2VwYXJhdGVkIHN0cmluZywgb3IgYHVuZGVmaW5lZGAuXG4gKiBAcmV0dXJucyBUaGUgc3BlY2lmaWVycyB0byByZXNvbHZlLCBhbmQgd2hldGhlciB0aGV5IGNhbWUgZnJvbSB0aGUgZGVmYXVsdCBsaXN0LlxuICovXG5leHBvcnQgZnVuY3Rpb24gcmVzb2x2ZVJlcXVlc3RlZFNwZWNzKHZlcnNpb25zOiByZWFkb25seSBzdHJpbmdbXSB8IHN0cmluZyB8IHVuZGVmaW5lZCk6IFJlc29sdmVSZXF1ZXN0ZWRTcGVjc1Jlc3VsdCB7XG4gIGNvbnN0IHNwZWNzID0gdHlwZW9mIHZlcnNpb25zID09PSAnc3RyaW5nJyA/IHBhcnNlVmVyc2lvblNwZWNMaXN0KHZlcnNpb25zKSA6IFsuLi52ZXJzaW9ucyA/PyBbXV07XG4gIGlmIChzcGVjcy5sZW5ndGggPT09IDApIHtcbiAgICByZXR1cm4geyBpc0RlZmF1bHQ6IHRydWUsIHNwZWNzOiBbLi4uREVGQVVMVF9PQlNJRElBTl9WRVJTSU9OX1NQRUNTXSB9O1xuICB9XG4gIHJldHVybiB7IGlzRGVmYXVsdDogZmFsc2UsIHNwZWNzIH07XG59XG5cbi8qKlxuICogUmVzb2x2ZXMgZWFjaCByZXF1ZXN0ZWQgc3BlY2lmaWVyIHRvIGEgY29uY3JldGUgdmVyc2lvbiBhZ2FpbnN0IGFcbiAqIHNpbmdsZSBtYW5pZmVzdC5cbiAqXG4gKiBAcGFyYW0gcGFyYW1zIC0gVGhlIHNwZWNpZmllcnMsIHRoZSBtYW5pZmVzdCwgYW5kIHRoZSB0b2xlcmFuY2UgbW9kZS5cbiAqIEByZXR1cm5zIFRoZSByZXNvbHZlZCBzcGVjaWZpZXJzIGFuZCBhbnkgdGhhdCB3ZXJlIGRyb3BwZWQuXG4gKiBAdGhyb3dzIEVycm9yIGlmIGEgc3BlY2lmaWVyIGNhbm5vdCBiZSByZXNvbHZlZCBhbmQgdG9sZXJhbmNlIGlzIG9mZiwgb3IgaWZcbiAqICAgdG9sZXJhbmNlIGlzIG9uIGJ1dCBub3RoaW5nIHJlc29sdmVkIGF0IGFsbC5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHJlc29sdmVWZXJzaW9uU3BlY3MocGFyYW1zOiBSZXNvbHZlVmVyc2lvblNwZWNzUGFyYW1zKTogUmVzb2x2ZVZlcnNpb25TcGVjc1Jlc3VsdCB7XG4gIGNvbnN0IHsgbWFuaWZlc3QsIHNob3VsZFRvbGVyYXRlVW5yZXNvbHZhYmxlU3BlY3MsIHNwZWNzIH0gPSBwYXJhbXM7XG5cbiAgY29uc3QgZHJvcHBlZFNwZWNzOiBEcm9wcGVkVmVyc2lvblNwZWNbXSA9IFtdO1xuICBjb25zdCByZXNvbHZlZFNwZWNzOiBSZXNvbHZlZFZlcnNpb25TcGVjW10gPSBbXTtcblxuICBmb3IgKGNvbnN0IHNwZWMgb2Ygc3BlY3MpIHtcbiAgICB0cnkge1xuICAgICAgcmVzb2x2ZWRTcGVjcy5wdXNoKHsgc3BlYywgdmVyc2lvbjogcmVzb2x2ZVNwZWMoc3BlYywgbWFuaWZlc3QpIH0pO1xuICAgIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgICBpZiAoIXNob3VsZFRvbGVyYXRlVW5yZXNvbHZhYmxlU3BlY3MpIHtcbiAgICAgICAgdGhyb3cgZXJyb3I7XG4gICAgICB9XG4gICAgICBkcm9wcGVkU3BlY3MucHVzaCh7IHJlYXNvbjogdG9SZWFzb24oZXJyb3IpLCBzcGVjIH0pO1xuICAgIH1cbiAgfVxuXG4gIGlmIChyZXNvbHZlZFNwZWNzLmxlbmd0aCA9PT0gMCkge1xuICAgIHRocm93IG5ldyBFcnJvcihcbiAgICAgIGBObyBPYnNpZGlhbiB2ZXJzaW9uIGNvdWxkIGJlIHJlc29sdmVkIGZyb206ICR7c3BlY3Muam9pbignLCAnKX0uICR7ZHJvcHBlZFNwZWNzLm1hcCgoeyByZWFzb24sIHNwZWMgfSkgPT4gYCR7c3BlY306ICR7cmVhc29ufWApLmpvaW4oJzsgJyl9YFxuICAgICk7XG4gIH1cblxuICByZXR1cm4geyBkcm9wcGVkU3BlY3MsIHJlc29sdmVkU3BlY3MgfTtcbn1cblxuLyoqXG4gKiBSdW5zIHRoZSBzdWl0ZXMgb25jZSBwZXIgbWF0cml4IGVudHJ5LCAqKmFsd2F5cyBydW5uaW5nIGV2ZXJ5IGVudHJ5KiogYmVmb3JlXG4gKiByZXBvcnRpbmcuXG4gKlxuICogQSBmYWlsaW5nIGVuZCBtdXN0IG5vdCBoaWRlIHRoZSBzdGF0ZSBvZiB0aGUgb3RoZXI6IHN0b3BwaW5nIGF0IHRoZSBmaXJzdFxuICogZmFpbHVyZSB3b3VsZCBsZWF2ZSBcImNhdGFseXN0IGJyb2tlXCIgYW5kIFwiYm90aCBlbmRzIGJyb2tlXCIgaW5kaXN0aW5ndWlzaGFibGVcbiAqIHdpdGhvdXQgYSBzZWNvbmQgcnVuLiBFdmVyeSBlbnRyeSB0aGVyZWZvcmUgcnVucywgYW5kIHRoZSBzdW1tYXJ5IG5hbWVzIHdoaWNoXG4gKiBjb25jcmV0ZSB2ZXJzaW9ucyBmYWlsZWQgYW5kIHdoaWNoIHBhc3NlZC5cbiAqXG4gKiBAcGFyYW0gcGFyYW1zIC0gVGhlIG1hdHJpeCwgdGhlIHBlci1lbnRyeSBydW5uZXIsIGFuZCB0aGUgcHJvZ3Jlc3MgcmVwb3J0ZXIuXG4gKiBAcmV0dXJucyBBIHtAbGluayBQcm9taXNlfSB0aGF0IHJlc29sdmVzIG9uY2UgZXZlcnkgZW50cnkgaGFzIHJ1biBzdWNjZXNzZnVsbHkuXG4gKiBAdGhyb3dzIEVycm9yIGlmIHRoZSBtYXRyaXggaXMgZW1wdHksIG9yIGFuIHtAbGluayBBZ2dyZWdhdGVFcnJvcn0gbmFtaW5nIGV2ZXJ5XG4gKiAgIHZlcnNpb24gdGhhdCBmYWlsZWQuXG4gKi9cbmV4cG9ydCBhc3luYyBmdW5jdGlvbiBydW5WZXJzaW9uTWF0cml4RW50cmllcyhwYXJhbXM6IFJ1blZlcnNpb25NYXRyaXhFbnRyaWVzUGFyYW1zKTogUHJvbWlzZTx2b2lkPiB7XG4gIGNvbnN0IHsgZW50cmllcywgb25FbnRyeVN0YXJ0LCBydW4gfSA9IHBhcmFtcztcblxuICBpZiAoZW50cmllcy5sZW5ndGggPT09IDApIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoJ1JlZnVzaW5nIHRvIHJ1biBhbiBlbXB0eSBPYnNpZGlhbiB2ZXJzaW9uIG1hdHJpeDogbm8gdmVyc2lvbiB3b3VsZCBiZSB2ZXJpZmllZC4nKTtcbiAgfVxuXG4gIGNvbnN0IGVycm9yczogdW5rbm93bltdID0gW107XG4gIGNvbnN0IGZhaWxlZEVudHJpZXM6IE9ic2lkaWFuVmVyc2lvbk1hdHJpeEVudHJ5W10gPSBbXTtcbiAgY29uc3QgcGFzc2VkRW50cmllczogT2JzaWRpYW5WZXJzaW9uTWF0cml4RW50cnlbXSA9IFtdO1xuXG4gIGZvciAoY29uc3QgW2luZGV4LCBlbnRyeV0gb2YgZW50cmllcy5lbnRyaWVzKCkpIHtcbiAgICBvbkVudHJ5U3RhcnQoeyBlbnRyeSwgaW5kZXgsIHRvdGFsOiBlbnRyaWVzLmxlbmd0aCB9KTtcbiAgICB0cnkge1xuICAgICAgYXdhaXQgcnVuKGVudHJ5KTtcbiAgICAgIHBhc3NlZEVudHJpZXMucHVzaChlbnRyeSk7XG4gICAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICAgIGVycm9ycy5wdXNoKGVycm9yKTtcbiAgICAgIGZhaWxlZEVudHJpZXMucHVzaChlbnRyeSk7XG4gICAgfVxuICB9XG5cbiAgaWYgKGZhaWxlZEVudHJpZXMubGVuZ3RoID09PSAwKSB7XG4gICAgcmV0dXJuO1xuICB9XG5cbiAgY29uc3QgcGFzc2VkQ2xhdXNlID0gcGFzc2VkRW50cmllcy5sZW5ndGggPT09IDBcbiAgICA/ICcnXG4gICAgOiBgIFBhc3NlZDogJHtwYXNzZWRFbnRyaWVzLm1hcCgoZW50cnkpID0+IGZvcm1hdFZlcnNpb25NYXRyaXhFbnRyeShlbnRyeSkpLmpvaW4oJywgJyl9LmA7XG5cbiAgdGhyb3cgbmV3IEFnZ3JlZ2F0ZUVycm9yKFxuICAgIGVycm9ycyxcbiAgICBgT2JzaWRpYW4gdmVyc2lvbiBtYXRyaXggZmFpbGVkIG9uICR7U3RyaW5nKGZhaWxlZEVudHJpZXMubGVuZ3RoKX0gb2YgJHtTdHJpbmcoZW50cmllcy5sZW5ndGgpfSBgXG4gICAgICArIGAke3BsdXJhbGl6ZShlbnRyaWVzLmxlbmd0aCwgJ3ZlcnNpb24nKX06IGBcbiAgICAgICsgYCR7ZmFpbGVkRW50cmllcy5tYXAoKGVudHJ5KSA9PiBmb3JtYXRWZXJzaW9uTWF0cml4RW50cnkoZW50cnkpKS5qb2luKCcsICcpfS4ke3Bhc3NlZENsYXVzZX1gXG4gICk7XG59XG5cbi8qKlxuICogRm9ybWF0cyBhIHJ1biBjb3VudCBhcyBwcm9zZSwgc28gdGhlIHNpbmdsZS1ydW4gY2FzZSByZWFkcyBhcyBhIGRlbGliZXJhdGVcbiAqIGRlY2lzaW9uIHJhdGhlciB0aGFuIGEgc3VzcGljaW91cyBgMWAuXG4gKlxuICogQHBhcmFtIGNvdW50IC0gVGhlIG51bWJlciBvZiBydW5zLlxuICogQHJldHVybnMgYG9uY2VgLCBgdHdpY2VgLCBvciBgTiB0aW1lc2AuXG4gKi9cbmZ1bmN0aW9uIGZvcm1hdFJ1bkNvdW50KGNvdW50OiBudW1iZXIpOiBzdHJpbmcge1xuICBjb25zdCBUV0lDRSA9IDI7XG4gIGlmIChjb3VudCA9PT0gMSkge1xuICAgIHJldHVybiAnb25jZSc7XG4gIH1cbiAgaWYgKGNvdW50ID09PSBUV0lDRSkge1xuICAgIHJldHVybiAndHdpY2UnO1xuICB9XG4gIHJldHVybiBgJHtTdHJpbmcoY291bnQpfSB0aW1lc2A7XG59XG5cbi8qKlxuICogUGx1cmFsaXplcyBhIG5vdW4gYnkgY291bnQuXG4gKlxuICogQHBhcmFtIGNvdW50IC0gVGhlIGNvdW50LlxuICogQHBhcmFtIG5vdW4gLSBUaGUgc2luZ3VsYXIgbm91bi5cbiAqIEByZXR1cm5zIFRoZSBub3VuLCBzdWZmaXhlZCB3aXRoIGBzYCB1bmxlc3MgdGhlIGNvdW50IGlzIGV4YWN0bHkgb25lLlxuICovXG5mdW5jdGlvbiBwbHVyYWxpemUoY291bnQ6IG51bWJlciwgbm91bjogc3RyaW5nKTogc3RyaW5nIHtcbiAgcmV0dXJuIGNvdW50ID09PSAxID8gbm91biA6IGAke25vdW59c2A7XG59XG5cbi8qKlxuICogUmVzb2x2ZXMgYSBzaW5nbGUgc3BlY2lmaWVyIGFnYWluc3QgYSBtYW5pZmVzdC5cbiAqXG4gKiBAcGFyYW0gc3BlYyAtIFRoZSBzcGVjaWZpZXIuXG4gKiBAcGFyYW0gbWFuaWZlc3QgLSBUaGUgbWFuaWZlc3QsIG9yIGB1bmRlZmluZWRgIHdoZW4gbm9uZSB3YXMgZmV0Y2hlZC5cbiAqIEByZXR1cm5zIFRoZSBjb25jcmV0ZSBgeC55LnpgIHZlcnNpb24uXG4gKiBAdGhyb3dzIEVycm9yIGlmIHRoZSBzcGVjaWZpZXIgaXMgaW52YWxpZCwgb3IgbmFtZXMgYSBjaGFubmVsIHdpdGggbm8gbWFuaWZlc3RcbiAqICAgZW50cnkuXG4gKi9cbmZ1bmN0aW9uIHJlc29sdmVTcGVjKHNwZWM6IHN0cmluZywgbWFuaWZlc3Q6IERlc2t0b3BSZWxlYXNlc01hbmlmZXN0IHwgdW5kZWZpbmVkKTogc3RyaW5nIHtcbiAgY29uc3QgcGFyc2VkID0gcGFyc2VWZXJzaW9uU3BlYyhzcGVjKTtcbiAgaWYgKHBhcnNlZC5raW5kID09PSAnZXhwbGljaXQnKSB7XG4gICAgcmV0dXJuIHBhcnNlZC52ZXJzaW9uO1xuICB9XG4gIGlmICghbWFuaWZlc3QpIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoYENhbm5vdCByZXNvbHZlIFwiJHtzcGVjfVwiIHdpdGhvdXQgdGhlIGRlc2t0b3AgcmVsZWFzZXMgbWFuaWZlc3QuYCk7XG4gIH1cbiAgcmV0dXJuIHJlc29sdmVWZXJzaW9uRnJvbU1hbmlmZXN0KG1hbmlmZXN0LCBwYXJzZWQuY2hhbm5lbCk7XG59XG5cbi8qKlxuICogQ2hvb3NlcyB0aGUgc3ViamVjdC12ZXJiIGFncmVlbWVudCBmb3IgdGhlIHNwZWNpZmllciBjb3VudC5cbiAqXG4gKiBAcGFyYW0gY291bnQgLSBUaGUgbnVtYmVyIG9mIHNwZWNpZmllcnMuXG4gKiBAcmV0dXJucyBgcmVzb2x2ZXNgIG9yIGByZXNvbHZlYC5cbiAqL1xuZnVuY3Rpb24gcmVzb2x2ZVZlcmIoY291bnQ6IG51bWJlcik6IHN0cmluZyB7XG4gIHJldHVybiBjb3VudCA9PT0gMSA/ICdyZXNvbHZlcycgOiAncmVzb2x2ZSc7XG59XG5cbi8qKlxuICogRXh0cmFjdHMgYSBodW1hbi1yZWFkYWJsZSByZWFzb24gZnJvbSBhIHRocm93biB2YWx1ZS5cbiAqXG4gKiBAcGFyYW0gZXJyb3IgLSBUaGUgdGhyb3duIHZhbHVlLlxuICogQHJldHVybnMgVGhlIHJlYXNvbiB0ZXh0LlxuICovXG5mdW5jdGlvbiB0b1JlYXNvbihlcnJvcjogdW5rbm93bik6IHN0cmluZyB7XG4gIC8qIHY4IGlnbm9yZSBuZXh0IC0tIERlZmVuc2l2ZTogZXZlcnkgdGhyb3cgc2l0ZSByZWFjaGFibGUgZnJvbSBoZXJlIChwYXJzZVZlcnNpb25TcGVjLCByZXNvbHZlVmVyc2lvbkZyb21NYW5pZmVzdCwgdGhlIG1pc3NpbmctbWFuaWZlc3QgZ3VhcmQpIHRocm93cyBhbiBFcnJvci4gKi9cbiAgcmV0dXJuIGVycm9yIGluc3RhbmNlb2YgRXJyb3IgPyBlcnJvci5tZXNzYWdlIDogU3RyaW5nKGVycm9yKTtcbn1cbiJdLAogICJtYXBwaW5ncyI6ICJBQXlCQTtBQUFBLEVBQ0U7QUFBQSxFQUNBO0FBQUEsRUFDQTtBQUFBLEVBQ0E7QUFBQSxPQUNLO0FBT0EsTUFBTSxpQ0FBb0QsQ0FBQyxlQUFlLGVBQWU7QUEwS3pGLFNBQVMsbUJBQW1CLGVBQTZFO0FBQzlHLFFBQU0saUJBQWlCLG9CQUFJLElBQXNCO0FBRWpELGFBQVcsRUFBRSxNQUFNLFFBQVEsS0FBSyxlQUFlO0FBQzdDLFVBQU0sUUFBUSxlQUFlLElBQUksT0FBTztBQUN4QyxRQUFJLENBQUMsT0FBTztBQUNWLHFCQUFlLElBQUksU0FBUyxDQUFDLElBQUksQ0FBQztBQUNsQztBQUFBLElBQ0Y7QUFDQSxRQUFJLENBQUMs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
|
|
147
|
+
//# sourceMappingURL=data:application/json;base64,ewogICJ2ZXJzaW9uIjogMywKICAic291cmNlcyI6IFsiLi4vLi4vLi4vc3JjL3ZlcnNpb24tbWF0cml4LnRzIl0sCiAgInNvdXJjZXNDb250ZW50IjogWyIvKipcbiAqIEBmaWxlXG4gKlxuICogUHVyZSBkZWNpc2lvbiBsYXllciBmb3IgcnVubmluZyBhIHN1aXRlIGFnYWluc3QgKipldmVyeSoqIHN1cHBvcnRlZCBPYnNpZGlhblxuICogdmVyc2lvbi5cbiAqXG4gKiBTdXBwb3J0IGlzIHRoZSByYW5nZSBgW2xhdGVzdCBwdWJsaWMsIGxhdGVzdCBjYXRhbHlzdF1gIGFuZCBib3RoIGVuZHMgbXVzdCBiZVxuICogdmVyaWZpZWQuIFRoZSB0d28gZW5kcyBhcmUgbW92aW5nIHRhcmdldHMsIGFuZCB0aGV5IHBlcmlvZGljYWxseVxuICogKipjb2luY2lkZSoqIFx1MjAxNCB3aGVuIHB1YmxpYyBjYXRjaGVzIHVwIHRvIGNhdGFseXN0LCBib3RoIHNwZWNpZmllcnMgcHJvdmlzaW9uXG4gKiB0aGUgc2FtZSBidWlsZCwgc28gcnVubmluZyB0aGUgc3VpdGVzIHR3aWNlIHJlLXJ1bnMgdGhlIHNhbWUgYnVpbGQgYW5kIGJ1eXNcbiAqIG5vdGhpbmcuIFdvcnNlLCBhIGNvbnN1bWVyIHRoYXQgcmFuIGJvdGggc3RpbGwgcmVwb3J0cyBcImdyZWVuIG9uIHB1YmxpYyBBTkRcbiAqIGNhdGFseXN0XCIsIGEgdHdvLWVuZCBjbGFpbSBpdCBuZXZlciB2ZXJpZmllZC5cbiAqXG4gKiBUaGUgZGVjaXNpb24gdGhlcmVmb3JlIGxpdmVzIGhlcmUgcmF0aGVyIHRoYW4gaW4gZXZlcnkgY29uc3VtaW5nIHJlcG86IGEgbGlzdFxuICogb2YgdmVyc2lvbiBzcGVjaWZpZXJzIGlzIHJlc29sdmVkIHRvIGNvbmNyZXRlIHZlcnNpb25zLCAqKmRlLWR1cGxpY2F0ZWQgb24gdGhlXG4gKiByZXNvbHZlZCB2ZXJzaW9uKiogKG5ldmVyIG9uIHRoZSBzcGVjaWZpZXIgc3RyaW5nLCBzbyBhbiBleHBsaWNpdCBgMS4xMy40YCBhbmRcbiAqIGBjYXRhbHlzdC1sYXRlc3RgIGNvbGxhcHNlIHdoZW4gY2F0YWx5c3QgKmlzKiAxLjEzLjQpLCBhbmQgdGhlIHN1aXRlcyBydW4gb25jZVxuICogcGVyIGRpc3RpbmN0IHZlcnNpb24uXG4gKlxuICogRXZlcnl0aGluZyBoZXJlIGlzIHB1cmUgYW5kIHVuaXQtdGVzdGVkOyB0aGUgbWFuaWZlc3QgZmV0Y2ggYW5kIHRoZSBsb2dnaW5nXG4gKiBsaXZlIGluIHRoZSBpbnRlZ3JhdGlvbi10aW1lIGBydW4tdmVyc2lvbi1tYXRyaXgudHNgIGdsdWUuXG4gKi9cblxuaW1wb3J0IHR5cGUgeyBEZXNrdG9wUmVsZWFzZXNNYW5pZmVzdCB9IGZyb20gJy4vb2JzaWRpYW4tdmVyc2lvbi5tanMnO1xuXG5pbXBvcnQge1xuICBDQVRBTFlTVF9MQVRFU1QsXG4gIHBhcnNlVmVyc2lvblNwZWMsXG4gIFBVQkxJQ19MQVRFU1QsXG4gIHJlc29sdmVWZXJzaW9uRnJvbU1hbmlmZXN0XG59IGZyb20gJy4vb2JzaWRpYW4tdmVyc2lvbi5tanMnO1xuXG4vKipcbiAqIFRoZSB2ZXJzaW9uIHNwZWNpZmllcnMgYSBtYXRyaXggcnVuIGRlZmF1bHRzIHRvOiBib3RoIGVuZHMgb2YgdGhlIHN1cHBvcnRlZFxuICogcmFuZ2UuIFRoZXkgYXJlIGRlLWR1cGxpY2F0ZWQgb24gdGhlaXIgcmVzb2x2ZWQgdmVyc2lvbnMsIHNvIHdoZW4gcHVibGljXG4gKiBoYXMgY2F1Z2h0IHVwIHRvIGNhdGFseXN0IHRoaXMgeWllbGRzIGEgc2luZ2xlIHJ1bi5cbiAqL1xuZXhwb3J0IGNvbnN0IERFRkFVTFRfT0JTSURJQU5fVkVSU0lPTl9TUEVDUzogcmVhZG9ubHkgc3RyaW5nW10gPSBbUFVCTElDX0xBVEVTVCwgQ0FUQUxZU1RfTEFURVNUXTtcblxuLyoqXG4gKiBBIHJlcXVlc3RlZCBzcGVjaWZpZXIgdGhhdCBjb3VsZCBub3QgYmUgcmVzb2x2ZWQgYW5kIHdhcyBkcm9wcGVkLlxuICovXG5leHBvcnQgaW50ZXJmYWNlIERyb3BwZWRWZXJzaW9uU3BlYyB7XG4gIC8qKlxuICBXaHkgdGhlIHNwZWNpZmllciBjb3VsZCBub3QgYmUgcmVzb2x2ZWQuXG4gICAqL1xuICByZWFkb25seSByZWFzb246IHN0cmluZztcblxuICAvKipcbiAgVGhlIHNwZWNpZmllciBhcyByZXF1ZXN0ZWQuXG4gICAqL1xuICByZWFkb25seSBzcGVjOiBzdHJpbmc7XG59XG5cbi8qKlxuICogUGFyYW1ldGVycyBmb3Ige0BsaW5rIGZvcm1hdFZlcnNpb25NYXRyaXhQbGFufS5cbiAqL1xuZXhwb3J0IGludGVyZmFjZSBGb3JtYXRWZXJzaW9uTWF0cml4UGxhblBhcmFtcyB7XG4gIC8qKlxuICBUaGUgZGUtZHVwbGljYXRlZCBtYXRyaXggdGhhdCB3aWxsIGJlIHJ1bi5cbiAgICovXG4gIHJlYWRvbmx5IGVudHJpZXM6IHJlYWRvbmx5IE9ic2lkaWFuVmVyc2lvbk1hdHJpeEVudHJ5W107XG5cbiAgLyoqXG4gIFRoZSBzcGVjaWZpZXJzIHRoYXQgcmVzb2x2ZWQsIGluIHJlcXVlc3RlZCBvcmRlci5cbiAgICovXG4gIHJlYWRvbmx5IHJlc29sdmVkU3BlY3M6IHJlYWRvbmx5IFJlc29sdmVkVmVyc2lvblNwZWNbXTtcbn1cblxuLyoqXG4gKiBQYXJhbWV0ZXJzIGZvciB7QGxpbmsgZm9ybWF0VmVyc2lvbk1hdHJpeFJ1bkhlYWRlcn0uXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgRm9ybWF0VmVyc2lvbk1hdHJpeFJ1bkhlYWRlclBhcmFtcyB7XG4gIC8qKlxuICBUaGUgZW50cnkgYWJvdXQgdG8gcnVuLlxuICAgKi9cbiAgcmVhZG9ubHkgZW50cnk6IE9ic2lkaWFuVmVyc2lvbk1hdHJpeEVudHJ5O1xuXG4gIC8qKlxuICBUaGUgZW50cnkncyB6ZXJvLWJhc2VkIHBvc2l0aW9uIGluIHRoZSBtYXRyaXguXG4gICAqL1xuICByZWFkb25seSBpbmRleDogbnVtYmVyO1xuXG4gIC8qKlxuICBUaGUgdG90YWwgbnVtYmVyIG9mIGVudHJpZXMgaW4gdGhlIG1hdHJpeC5cbiAgICovXG4gIHJlYWRvbmx5IHRvdGFsOiBudW1iZXI7XG59XG5cbi8qKlxuICogT25lIGRpc3RpbmN0IE9ic2lkaWFuIHZlcnNpb24gdGhlIHN1aXRlcyB3aWxsIHJ1biBhZ2FpbnN0LlxuICovXG5leHBvcnQgaW50ZXJmYWNlIE9ic2lkaWFuVmVyc2lvbk1hdHJpeEVudHJ5IHtcbiAgLyoqXG4gICAqIEV2ZXJ5IHJlcXVlc3RlZCBzcGVjaWZpZXIgdGhhdCByZXNvbHZlZCB0byB7QGxpbmsgdmVyc2lvbn0sIGluIHJlcXVlc3RlZFxuICAgKiBvcmRlci4gTW9yZSB0aGFuIG9uZSBtZWFucyB0aGUgc3BlY2lmaWVycyBjb2luY2lkZWQgYW5kIHdlcmUgY29sbGFwc2VkLlxuICAgKi9cbiAgcmVhZG9ubHkgc3BlY3M6IHJlYWRvbmx5IHN0cmluZ1tdO1xuXG4gIC8qKlxuICBUaGUgY29uY3JldGUgYHgueS56YCB2ZXJzaW9uLlxuICAgKi9cbiAgcmVhZG9ubHkgdmVyc2lvbjogc3RyaW5nO1xufVxuXG4vKipcbiAqIEEgcmVxdWVzdGVkIHNwZWNpZmllciBwYWlyZWQgd2l0aCB0aGUgY29uY3JldGUgdmVyc2lvbiBpdCByZXNvbHZlZCB0by5cbiAqL1xuZXhwb3J0IGludGVyZmFjZSBSZXNvbHZlZFZlcnNpb25TcGVjIHtcbiAgLyoqXG4gIFRoZSBzcGVjaWZpZXIgYXMgcmVxdWVzdGVkIChhbiBgeC55LnpgIHZlcnNpb24gb3IgYSBjaGFubmVsIGFsaWFzKS5cbiAgICovXG4gIHJlYWRvbmx5IHNwZWM6IHN0cmluZztcblxuICAvKipcbiAgVGhlIGNvbmNyZXRlIGB4LnkuemAgdmVyc2lvbiBpdCByZXNvbHZlZCB0by5cbiAgICovXG4gIHJlYWRvbmx5IHZlcnNpb246IHN0cmluZztcbn1cblxuLyoqXG4gKiBUaGUgb3V0Y29tZSBvZiB7QGxpbmsgcmVzb2x2ZVJlcXVlc3RlZFNwZWNzfS5cbiAqL1xuZXhwb3J0IGludGVyZmFjZSBSZXNvbHZlUmVxdWVzdGVkU3BlY3NSZXN1bHQge1xuICAvKipcbiAgICogV2hldGhlciB0aGUgc3BlY2lmaWVycyBjYW1lIGZyb20ge0BsaW5rIERFRkFVTFRfT0JTSURJQU5fVkVSU0lPTl9TUEVDU31cbiAgICogcmF0aGVyIHRoYW4gYmVpbmcgZXhwbGljaXRseSByZXF1ZXN0ZWQuXG4gICAqL1xuICByZWFkb25seSBpc0RlZmF1bHQ6IGJvb2xlYW47XG5cbiAgLyoqXG4gIFRoZSBzcGVjaWZpZXJzIHRvIHJlc29sdmUsIGluIG9yZGVyLlxuICAgKi9cbiAgcmVhZG9ubHkgc3BlY3M6IHJlYWRvbmx5IHN0cmluZ1tdO1xufVxuXG4vKipcbiAqIFBhcmFtZXRlcnMgZm9yIHtAbGluayByZXNvbHZlVmVyc2lvblNwZWNzfS5cbiAqL1xuZXhwb3J0IGludGVyZmFjZSBSZXNvbHZlVmVyc2lvblNwZWNzUGFyYW1zIHtcbiAgLyoqXG4gICAqIFRoZSBkZXNrdG9wIHJlbGVhc2VzIG1hbmlmZXN0LCBvciBgdW5kZWZpbmVkYCB3aGVuIG5vIHJlcXVlc3RlZCBzcGVjaWZpZXIgaXNcbiAgICogYSBjaGFubmVsIGFsaWFzIChzbyBubyBmZXRjaCB3YXMgbmVlZGVkKS5cbiAgICovXG4gIHJlYWRvbmx5IG1hbmlmZXN0OiBEZXNrdG9wUmVsZWFzZXNNYW5pZmVzdCB8IHVuZGVmaW5lZDtcblxuICAvKipcbiAgICogV2hldGhlciBhIHNwZWNpZmllciB0aGF0IGNhbm5vdCBiZSByZXNvbHZlZCBpcyBkcm9wcGVkIHdpdGggYSByZWNvcmRlZFxuICAgKiByZWFzb24gaW5zdGVhZCBvZiB0aHJvd2luZy4gU2V0IGZvciB0aGUgKipkZWZhdWx0Kiogc3BlY2lmaWVyIGxpc3Qgb25seTogYVxuICAgKiBtYW5pZmVzdCB0aGF0IHNoaXBzIG5vIGNhdGFseXN0IGVudHJ5IG11c3Qgbm90IGJyZWFrIGV2ZXJ5IGNvbnN1bWVyJ3MgZ2F0ZSxcbiAgICogd2hlcmVhcyBhbiBleHBsaWNpdGx5IHJlcXVlc3RlZCBzcGVjaWZpZXIgdGhhdCBjYW5ub3QgcmVzb2x2ZSBpcyBhIHJlYWxcbiAgICogZXJyb3IuXG4gICAqL1xuICByZWFkb25seSBzaG91bGRUb2xlcmF0ZVVucmVzb2x2YWJsZVNwZWNzOiBib29sZWFuO1xuXG4gIC8qKlxuICBUaGUgcmVxdWVzdGVkIHNwZWNpZmllcnMsIGluIG9yZGVyLlxuICAgKi9cbiAgcmVhZG9ubHkgc3BlY3M6IHJlYWRvbmx5IHN0cmluZ1tdO1xufVxuXG4vKipcbiAqIFRoZSBvdXRjb21lIG9mIHtAbGluayByZXNvbHZlVmVyc2lvblNwZWNzfS5cbiAqL1xuZXhwb3J0IGludGVyZmFjZSBSZXNvbHZlVmVyc2lvblNwZWNzUmVzdWx0IHtcbiAgLyoqXG4gIFNwZWNpZmllcnMgZHJvcHBlZCBiZWNhdXNlIHRoZXkgY291bGQgbm90IGJlIHJlc29sdmVkICh0b2xlcmFudCBtb2RlIG9ubHkpLlxuICAgKi9cbiAgcmVhZG9ubHkgZHJvcHBlZFNwZWNzOiByZWFkb25seSBEcm9wcGVkVmVyc2lvblNwZWNbXTtcblxuICAvKipcbiAgVGhlIHNwZWNpZmllcnMgdGhhdCByZXNvbHZlZCwgaW4gcmVxdWVzdGVkIG9yZGVyLlxuICAgKi9cbiAgcmVhZG9ubHkgcmVzb2x2ZWRTcGVjczogcmVhZG9ubHkgUmVzb2x2ZWRWZXJzaW9uU3BlY1tdO1xufVxuXG4vKipcbiAqIFBhcmFtZXRlcnMgZm9yIHtAbGluayBydW5WZXJzaW9uTWF0cml4RW50cmllc30uXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgUnVuVmVyc2lvbk1hdHJpeEVudHJpZXNQYXJhbXMge1xuICAvKipcbiAgVGhlIGRlLWR1cGxpY2F0ZWQgbWF0cml4IHRvIHJ1bi5cbiAgICovXG4gIHJlYWRvbmx5IGVudHJpZXM6IHJlYWRvbmx5IE9ic2lkaWFuVmVyc2lvbk1hdHJpeEVudHJ5W107XG5cbiAgLyoqXG4gIENhbGxlZCBqdXN0IGJlZm9yZSBlYWNoIGVudHJ5IHJ1bnMsIGZvciBwcm9ncmVzcyByZXBvcnRpbmcuXG4gICAqL1xuICByZWFkb25seSBvbkVudHJ5U3RhcnQ6IChwYXJhbXM6IEZvcm1hdFZlcnNpb25NYXRyaXhSdW5IZWFkZXJQYXJhbXMpID0+IHZvaWQ7XG5cbiAgLyoqXG4gIFJ1bnMgdGhlIHN1aXRlcyBhZ2FpbnN0IGEgc2luZ2xlIGVudHJ5LCB0aHJvd2luZyBvbiBmYWlsdXJlLlxuICAgKi9cbiAgcmVhZG9ubHkgcnVuOiAoZW50cnk6IE9ic2lkaWFuVmVyc2lvbk1hdHJpeEVudHJ5KSA9PiBQcm9taXNlPHZvaWQ+IHwgdm9pZDtcbn1cblxuLyoqXG4gKiBDb2xsYXBzZXMgcmVzb2x2ZWQgc3BlY2lmaWVycyBpbnRvIG9uZSBlbnRyeSBwZXIgKipkaXN0aW5jdCByZXNvbHZlZCB2ZXJzaW9uKiouXG4gKlxuICogRGUtZHVwbGljYXRpb24gaXMga2V5ZWQgb24gdGhlIHJlc29sdmVkIHZlcnNpb24sIG5vdCB0aGUgc3BlY2lmaWVyIHN0cmluZywgc29cbiAqIHNwZWNpZmllcnMgdGhhdCBuYW1lIHRoZSBzYW1lIGJ1aWxkIGNvbGxhcHNlIGhvd2V2ZXIgdGhleSB3ZXJlIHdyaXR0ZW4uXG4gKiBGaXJzdC1zZWVuIG9yZGVyIGlzIHByZXNlcnZlZCwgYW5kIGV2ZXJ5IHNwZWNpZmllciB0aGF0IGxhbmRlZCBvbiBhIHZlcnNpb24gaXNcbiAqIHJlY29yZGVkIG9uIGl0cyBlbnRyeS5cbiAqXG4gKiBAcGFyYW0gcmVzb2x2ZWRTcGVjcyAtIFRoZSByZXNvbHZlZCBzcGVjaWZpZXJzLCBpbiByZXF1ZXN0ZWQgb3JkZXIuXG4gKiBAcmV0dXJucyBPbmUgZW50cnkgcGVyIGRpc3RpbmN0IHZlcnNpb24sIGluIGZpcnN0LXNlZW4gb3JkZXIuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBidWlsZFZlcnNpb25NYXRyaXgocmVzb2x2ZWRTcGVjczogcmVhZG9ubHkgUmVzb2x2ZWRWZXJzaW9uU3BlY1tdKTogT2JzaWRpYW5WZXJzaW9uTWF0cml4RW50cnlbXSB7XG4gIGNvbnN0IHNwZWNzQnlWZXJzaW9uID0gbmV3IE1hcDxzdHJpbmcsIHN0cmluZ1tdPigpO1xuXG4gIGZvciAoY29uc3QgeyBzcGVjLCB2ZXJzaW9uIH0gb2YgcmVzb2x2ZWRTcGVjcykge1xuICAgIGNvbnN0IHNwZWNzID0gc3BlY3NCeVZlcnNpb24uZ2V0KHZlcnNpb24pO1xuICAgIGlmICghc3BlY3MpIHtcbiAgICAgIHNwZWNzQnlWZXJzaW9uLnNldCh2ZXJzaW9uLCBbc3BlY10pO1xuICAgICAgY29udGludWU7XG4gICAgfVxuICAgIGlmICghc3BlY3MuaW5jbHVkZXMoc3BlYykpIHtcbiAgICAgIHNwZWNzLnB1c2goc3BlYyk7XG4gICAgfVxuICB9XG5cbiAgcmV0dXJuIFsuLi5zcGVjc0J5VmVyc2lvbl0ubWFwKChbdmVyc2lvbiwgc3BlY3NdKSA9PiAoeyBzcGVjcywgdmVyc2lvbiB9KSk7XG59XG5cbi8qKlxuICogRm9ybWF0cyBhbiBlbnRyeSBmb3IgbG9ncyBhbmQgZXJyb3IgbWVzc2FnZXMuXG4gKlxuICogU3BlY2lmaWVycyB0aGF0IG1lcmVseSByZXBlYXQgdGhlIHZlcnNpb24gYWRkIG5vdGhpbmcsIHNvIGFuIGV4cGxpY2l0LW9ubHlcbiAqIGVudHJ5IGZvcm1hdHMgYXMgdGhlIGJhcmUgdmVyc2lvbiByYXRoZXIgdGhhbiBgMS4xMy40ICgxLjEzLjQpYC5cbiAqXG4gKiBAcGFyYW0gZW50cnkgLSBUaGUgZW50cnkgdG8gZm9ybWF0LlxuICogQHJldHVybnMgQSBzdHJpbmcgbGlrZSBgMS4xMy40IChwdWJsaWMtbGF0ZXN0LCBjYXRhbHlzdC1sYXRlc3QpYC5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGZvcm1hdFZlcnNpb25NYXRyaXhFbnRyeShlbnRyeTogT2JzaWRpYW5WZXJzaW9uTWF0cml4RW50cnkpOiBzdHJpbmcge1xuICBjb25zdCB7IHNwZWNzLCB2ZXJzaW9uIH0gPSBlbnRyeTtcbiAgY29uc3QgYWxpYXNTcGVjcyA9IHNwZWNzLmZpbHRlcigoc3BlYykgPT4gc3BlYyAhPT0gdmVyc2lvbik7XG4gIGlmIChhbGlhc1NwZWNzLmxlbmd0aCA9PT0gMCkge1xuICAgIHJldHVybiB2ZXJzaW9uO1xuICB9XG4gIHJldHVybiBgJHt2ZXJzaW9ufSAoJHthbGlhc1NwZWNzLmpvaW4oJywgJyl9KWA7XG59XG5cbi8qKlxuICogQnVpbGRzIHRoZSBsaW5lcyBhbm5vdW5jaW5nIHdoYXQgdGhlIG1hdHJpeCByZXNvbHZlZCB0byBhbmQgaG93IG1hbnkgcnVucyBpdFxuICogd2lsbCB0YWtlLlxuICpcbiAqIFRoZSBjb2xsYXBzZSBtdXN0IGJlICoqc3RhdGVkKiosIG5ldmVyIGluZmVycmVkOiBhIHJlYWRlciB3aG8gc2VlcyBvbmUgcnVuXG4gKiB3aGVyZSB0aGV5IGV4cGVjdGVkIHR3byBoYXMgdG8gYmUgdG9sZCB0aGUgc2Vjb25kIGVuZCB3YXMgYWxyZWFkeSBjb3ZlcmVkLFxuICogbm90IGxlZnQgd29uZGVyaW5nIHdoZXRoZXIgaXQgd2FzIHNraXBwZWQgYnkgYWNjaWRlbnQuXG4gKlxuICogQHBhcmFtIHBhcmFtcyAtIFRoZSBtYXRyaXggYW5kIHRoZSBzcGVjaWZpZXJzIGl0IHdhcyBidWlsdCBmcm9tLlxuICogQHJldHVybnMgVGhlIGxpbmVzIHRvIGxvZywgaW4gb3JkZXIuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBmb3JtYXRWZXJzaW9uTWF0cml4UGxhbihwYXJhbXM6IEZvcm1hdFZlcnNpb25NYXRyaXhQbGFuUGFyYW1zKTogc3RyaW5nW10ge1xuICBjb25zdCB7IGVudHJpZXMsIHJlc29sdmVkU3BlY3MgfSA9IHBhcmFtcztcblxuICBjb25zdCBsaW5lcyA9IHJlc29sdmVkU3BlY3NcbiAgICAuZmlsdGVyKCh7IHNwZWMsIHZlcnNpb24gfSkgPT4gc3BlYyAhPT0gdmVyc2lvbilcbiAgICAubWFwKCh7IHNwZWMsIHZlcnNpb24gfSkgPT4gYCR7c3BlY30gLT4gJHt2ZXJzaW9ufWApO1xuXG4gIGNvbnN0IHNwZWNpZmllckNvdW50ID0gcmVzb2x2ZWRTcGVjcy5sZW5ndGg7XG4gIGNvbnN0IHZlcnNpb25Db3VudCA9IGVudHJpZXMubGVuZ3RoO1xuICBjb25zdCBmb3JtYXR0ZWRFbnRyaWVzID0gZW50cmllcy5tYXAoKGVudHJ5KSA9PiBmb3JtYXRWZXJzaW9uTWF0cml4RW50cnkoZW50cnkpKS5qb2luKCcsICcpO1xuXG4gIGxpbmVzLnB1c2goXG4gICAgYCR7U3RyaW5nKHNwZWNpZmllckNvdW50KX0gcmVxdWVzdGVkICR7cGx1cmFsaXplKHNwZWNpZmllckNvdW50LCAnc3BlY2lmaWVyJyl9IGBcbiAgICAgICsgYCR7cmVzb2x2ZVZlcmIoc3BlY2lmaWVyQ291bnQpfSB0byAke1N0cmluZyh2ZXJzaW9uQ291bnQpfSBkaXN0aW5jdCAke3BsdXJhbGl6ZSh2ZXJzaW9uQ291bnQsICd2ZXJzaW9uJyl9OiBgXG4gICAgICArIGAke2Zvcm1hdHRlZEVudHJpZXN9LiBSdW5uaW5nIHRoZSBzdWl0ZXMgJHtmb3JtYXRSdW5Db3VudCh2ZXJzaW9uQ291bnQpfS5gXG4gICk7XG5cbiAgcmV0dXJuIGxpbmVzO1xufVxuXG4vKipcbiAqIEJ1aWxkcyB0aGUgcHJvZ3Jlc3MgbGluZSBhbm5vdW5jaW5nIGEgc2luZ2xlIGVudHJ5J3MgcnVuLlxuICpcbiAqIEBwYXJhbSBwYXJhbXMgLSBUaGUgZW50cnkgYW5kIGl0cyBwb3NpdGlvbiBpbiB0aGUgbWF0cml4LlxuICogQHJldHVybnMgQSBzdHJpbmcgbGlrZSBgUnVuIDEgb2YgMjogMS4xMi43IChwdWJsaWMtbGF0ZXN0KWAuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBmb3JtYXRWZXJzaW9uTWF0cml4UnVuSGVhZGVyKHBhcmFtczogRm9ybWF0VmVyc2lvbk1hdHJpeFJ1bkhlYWRlclBhcmFtcyk6IHN0cmluZyB7XG4gIGNvbnN0IHsgZW50cnksIGluZGV4LCB0b3RhbCB9ID0gcGFyYW1zO1xuICByZXR1cm4gYFJ1biAke1N0cmluZyhpbmRleCArIDEpfSBvZiAke1N0cmluZyh0b3RhbCl9OiAke2Zvcm1hdFZlcnNpb25NYXRyaXhFbnRyeShlbnRyeSl9YDtcbn1cblxuLyoqXG4gKiBSZXBvcnRzIHdoZXRoZXIgYW55IHNwZWNpZmllciBpcyBhIGNoYW5uZWwgYWxpYXMsIGkuZS4gd2hldGhlciB0aGUgcmVsZWFzZXNcbiAqIG1hbmlmZXN0IGhhcyB0byBiZSBmZXRjaGVkIGF0IGFsbC5cbiAqXG4gKiBAcGFyYW0gc3BlY3MgLSBUaGUgcmVxdWVzdGVkIHNwZWNpZmllcnMuXG4gKiBAcmV0dXJucyBgdHJ1ZWAgd2hlbiBhdCBsZWFzdCBvbmUgc3BlY2lmaWVyIHJlc29sdmVzIGFnYWluc3QgdGhlIG1hbmlmZXN0LlxuICovXG5leHBvcnQgZnVuY3Rpb24gaGFzQ2hhbm5lbFNwZWMoc3BlY3M6IHJlYWRvbmx5IHN0cmluZ1tdKTogYm9vbGVhbiB7XG4gIHJldHVybiBzcGVjcy5zb21lKChzcGVjKSA9PiBzcGVjID09PSBQVUJMSUNfTEFURVNUIHx8IHNwZWMgPT09IENBVEFMWVNUX0xBVEVTVCk7XG59XG5cbi8qKlxuICogU3BsaXRzIGEgY29tbWEtc2VwYXJhdGVkIHNwZWNpZmllciBsaXN0LCBzbyBhIGNvbnN1bWVyIGNhbiBoYW5kIGFuIGVudiB2YXJcbiAqIChgT0JTSURJQU5fVkVSU0lPTj0xLjEyLjcsY2F0YWx5c3QtbGF0ZXN0YCkgc3RyYWlnaHQgdGhyb3VnaC5cbiAqXG4gKiBAcGFyYW0gcmF3IC0gVGhlIHJhdyBjb21tYS1zZXBhcmF0ZWQgc3RyaW5nLlxuICogQHJldHVybnMgVGhlIHRyaW1tZWQsIG5vbi1lbXB0eSBzcGVjaWZpZXJzLCBpbiBvcmRlci5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHBhcnNlVmVyc2lvblNwZWNMaXN0KHJhdzogc3RyaW5nKTogc3RyaW5nW10ge1xuICByZXR1cm4gcmF3LnNwbGl0KCcsJykubWFwKChzcGVjKSA9PiBzcGVjLnRyaW0oKSkuZmlsdGVyKChzcGVjKSA9PiBzcGVjICE9PSAnJyk7XG59XG5cbi8qKlxuICogTm9ybWFsaXplcyB0aGUgcmVxdWVzdGVkIHZlcnNpb24gc3BlY2lmaWVycywgZmFsbGluZyBiYWNrIHRvIHRoZSBkZWZhdWx0XG4gKiBib3RoLWVuZHMgbGlzdCB3aGVuIG5vbmUgd2VyZSBnaXZlbi5cbiAqXG4gKiBBbiBlbXB0eSBzdHJpbmcgaXMgdHJlYXRlZCBhcyBhYnNlbnQsIHNvIGEgY29uc3VtZXIgY2FuIHBhc3MgYW4gdW5zZXRcbiAqIGBwcm9jZXNzLmVudlsnT0JTSURJQU5fVkVSU0lPTiddYCB3aXRob3V0IGd1YXJkaW5nIGl0LlxuICpcbiAqIEBwYXJhbSB2ZXJzaW9ucyAtIEFuIGFycmF5IG9mIHNwZWNpZmllcnMsIGEgY29tbWEtc2VwYXJhdGVkIHN0cmluZywgb3IgYHVuZGVmaW5lZGAuXG4gKiBAcmV0dXJucyBUaGUgc3BlY2lmaWVycyB0byByZXNvbHZlLCBhbmQgd2hldGhlciB0aGV5IGNhbWUgZnJvbSB0aGUgZGVmYXVsdCBsaXN0LlxuICovXG5leHBvcnQgZnVuY3Rpb24gcmVzb2x2ZVJlcXVlc3RlZFNwZWNzKHZlcnNpb25zOiByZWFkb25seSBzdHJpbmdbXSB8IHN0cmluZyB8IHVuZGVmaW5lZCk6IFJlc29sdmVSZXF1ZXN0ZWRTcGVjc1Jlc3VsdCB7XG4gIGNvbnN0IHNwZWNzID0gdHlwZW9mIHZlcnNpb25zID09PSAnc3RyaW5nJyA/IHBhcnNlVmVyc2lvblNwZWNMaXN0KHZlcnNpb25zKSA6IFsuLi52ZXJzaW9ucyA/PyBbXV07XG4gIGlmIChzcGVjcy5sZW5ndGggPT09IDApIHtcbiAgICByZXR1cm4geyBpc0RlZmF1bHQ6IHRydWUsIHNwZWNzOiBbLi4uREVGQVVMVF9PQlNJRElBTl9WRVJTSU9OX1NQRUNTXSB9O1xuICB9XG4gIHJldHVybiB7IGlzRGVmYXVsdDogZmFsc2UsIHNwZWNzIH07XG59XG5cbi8qKlxuICogUmVzb2x2ZXMgZWFjaCByZXF1ZXN0ZWQgc3BlY2lmaWVyIHRvIGEgY29uY3JldGUgdmVyc2lvbiBhZ2FpbnN0IGFcbiAqIHNpbmdsZSBtYW5pZmVzdC5cbiAqXG4gKiBAcGFyYW0gcGFyYW1zIC0gVGhlIHNwZWNpZmllcnMsIHRoZSBtYW5pZmVzdCwgYW5kIHRoZSB0b2xlcmFuY2UgbW9kZS5cbiAqIEByZXR1cm5zIFRoZSByZXNvbHZlZCBzcGVjaWZpZXJzIGFuZCBhbnkgdGhhdCB3ZXJlIGRyb3BwZWQuXG4gKiBAdGhyb3dzIEVycm9yIGlmIGEgc3BlY2lmaWVyIGNhbm5vdCBiZSByZXNvbHZlZCBhbmQgdG9sZXJhbmNlIGlzIG9mZiwgb3IgaWZcbiAqICAgdG9sZXJhbmNlIGlzIG9uIGJ1dCBub3RoaW5nIHJlc29sdmVkIGF0IGFsbC5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHJlc29sdmVWZXJzaW9uU3BlY3MocGFyYW1zOiBSZXNvbHZlVmVyc2lvblNwZWNzUGFyYW1zKTogUmVzb2x2ZVZlcnNpb25TcGVjc1Jlc3VsdCB7XG4gIGNvbnN0IHsgbWFuaWZlc3QsIHNob3VsZFRvbGVyYXRlVW5yZXNvbHZhYmxlU3BlY3MsIHNwZWNzIH0gPSBwYXJhbXM7XG5cbiAgY29uc3QgZHJvcHBlZFNwZWNzOiBEcm9wcGVkVmVyc2lvblNwZWNbXSA9IFtdO1xuICBjb25zdCByZXNvbHZlZFNwZWNzOiBSZXNvbHZlZFZlcnNpb25TcGVjW10gPSBbXTtcblxuICBmb3IgKGNvbnN0IHNwZWMgb2Ygc3BlY3MpIHtcbiAgICB0cnkge1xuICAgICAgcmVzb2x2ZWRTcGVjcy5wdXNoKHsgc3BlYywgdmVyc2lvbjogcmVzb2x2ZVNwZWMoc3BlYywgbWFuaWZlc3QpIH0pO1xuICAgIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgICBpZiAoIXNob3VsZFRvbGVyYXRlVW5yZXNvbHZhYmxlU3BlY3MpIHtcbiAgICAgICAgdGhyb3cgZXJyb3I7XG4gICAgICB9XG4gICAgICBkcm9wcGVkU3BlY3MucHVzaCh7IHJlYXNvbjogdG9SZWFzb24oZXJyb3IpLCBzcGVjIH0pO1xuICAgIH1cbiAgfVxuXG4gIGlmIChyZXNvbHZlZFNwZWNzLmxlbmd0aCA9PT0gMCkge1xuICAgIHRocm93IG5ldyBFcnJvcihcbiAgICAgIGBObyBPYnNpZGlhbiB2ZXJzaW9uIGNvdWxkIGJlIHJlc29sdmVkIGZyb206ICR7c3BlY3Muam9pbignLCAnKX0uICR7ZHJvcHBlZFNwZWNzLm1hcCgoeyByZWFzb24sIHNwZWMgfSkgPT4gYCR7c3BlY306ICR7cmVhc29ufWApLmpvaW4oJzsgJyl9YFxuICAgICk7XG4gIH1cblxuICByZXR1cm4geyBkcm9wcGVkU3BlY3MsIHJlc29sdmVkU3BlY3MgfTtcbn1cblxuLyoqXG4gKiBSdW5zIHRoZSBzdWl0ZXMgb25jZSBwZXIgbWF0cml4IGVudHJ5LCAqKmFsd2F5cyBydW5uaW5nIGV2ZXJ5IGVudHJ5KiogYmVmb3JlXG4gKiByZXBvcnRpbmcuXG4gKlxuICogQSBmYWlsaW5nIGVuZCBtdXN0IG5vdCBoaWRlIHRoZSBzdGF0ZSBvZiB0aGUgb3RoZXI6IHN0b3BwaW5nIGF0IHRoZSBmaXJzdFxuICogZmFpbHVyZSB3b3VsZCBsZWF2ZSBcImNhdGFseXN0IGJyb2tlXCIgYW5kIFwiYm90aCBlbmRzIGJyb2tlXCIgaW5kaXN0aW5ndWlzaGFibGVcbiAqIHdpdGhvdXQgYSBzZWNvbmQgcnVuLiBFdmVyeSBlbnRyeSB0aGVyZWZvcmUgcnVucywgYW5kIHRoZSBzdW1tYXJ5IG5hbWVzIHdoaWNoXG4gKiBjb25jcmV0ZSB2ZXJzaW9ucyBmYWlsZWQgYW5kIHdoaWNoIHBhc3NlZC5cbiAqXG4gKiBAcGFyYW0gcGFyYW1zIC0gVGhlIG1hdHJpeCwgdGhlIHBlci1lbnRyeSBydW5uZXIsIGFuZCB0aGUgcHJvZ3Jlc3MgcmVwb3J0ZXIuXG4gKiBAcmV0dXJucyBBIHtAbGluayBQcm9taXNlfSB0aGF0IHJlc29sdmVzIG9uY2UgZXZlcnkgZW50cnkgaGFzIHJ1biBzdWNjZXNzZnVsbHkuXG4gKiBAdGhyb3dzIEVycm9yIGlmIHRoZSBtYXRyaXggaXMgZW1wdHksIG9yIGFuIHtAbGluayBBZ2dyZWdhdGVFcnJvcn0gbmFtaW5nIGV2ZXJ5XG4gKiAgIHZlcnNpb24gdGhhdCBmYWlsZWQuXG4gKi9cbmV4cG9ydCBhc3luYyBmdW5jdGlvbiBydW5WZXJzaW9uTWF0cml4RW50cmllcyhwYXJhbXM6IFJ1blZlcnNpb25NYXRyaXhFbnRyaWVzUGFyYW1zKTogUHJvbWlzZTx2b2lkPiB7XG4gIGNvbnN0IHsgZW50cmllcywgb25FbnRyeVN0YXJ0LCBydW4gfSA9IHBhcmFtcztcblxuICBpZiAoZW50cmllcy5sZW5ndGggPT09IDApIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoJ1JlZnVzaW5nIHRvIHJ1biBhbiBlbXB0eSBPYnNpZGlhbiB2ZXJzaW9uIG1hdHJpeDogbm8gdmVyc2lvbiB3b3VsZCBiZSB2ZXJpZmllZC4nKTtcbiAgfVxuXG4gIGNvbnN0IGVycm9yczogdW5rbm93bltdID0gW107XG4gIGNvbnN0IGZhaWxlZEVudHJpZXM6IE9ic2lkaWFuVmVyc2lvbk1hdHJpeEVudHJ5W10gPSBbXTtcbiAgY29uc3QgcGFzc2VkRW50cmllczogT2JzaWRpYW5WZXJzaW9uTWF0cml4RW50cnlbXSA9IFtdO1xuXG4gIGZvciAoY29uc3QgW2luZGV4LCBlbnRyeV0gb2YgZW50cmllcy5lbnRyaWVzKCkpIHtcbiAgICBvbkVudHJ5U3RhcnQoeyBlbnRyeSwgaW5kZXgsIHRvdGFsOiBlbnRyaWVzLmxlbmd0aCB9KTtcbiAgICB0cnkge1xuICAgICAgYXdhaXQgcnVuKGVudHJ5KTtcbiAgICAgIHBhc3NlZEVudHJpZXMucHVzaChlbnRyeSk7XG4gICAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICAgIGVycm9ycy5wdXNoKGVycm9yKTtcbiAgICAgIGZhaWxlZEVudHJpZXMucHVzaChlbnRyeSk7XG4gICAgfVxuICB9XG5cbiAgaWYgKGZhaWxlZEVudHJpZXMubGVuZ3RoID09PSAwKSB7XG4gICAgcmV0dXJuO1xuICB9XG5cbiAgY29uc3QgcGFzc2VkQ2xhdXNlID0gcGFzc2VkRW50cmllcy5sZW5ndGggPT09IDBcbiAgICA/ICcnXG4gICAgOiBgIFBhc3NlZDogJHtwYXNzZWRFbnRyaWVzLm1hcCgoZW50cnkpID0+IGZvcm1hdFZlcnNpb25NYXRyaXhFbnRyeShlbnRyeSkpLmpvaW4oJywgJyl9LmA7XG5cbiAgdGhyb3cgbmV3IEFnZ3JlZ2F0ZUVycm9yKFxuICAgIGVycm9ycyxcbiAgICBgT2JzaWRpYW4gdmVyc2lvbiBtYXRyaXggZmFpbGVkIG9uICR7U3RyaW5nKGZhaWxlZEVudHJpZXMubGVuZ3RoKX0gb2YgJHtTdHJpbmcoZW50cmllcy5sZW5ndGgpfSBgXG4gICAgICArIGAke3BsdXJhbGl6ZShlbnRyaWVzLmxlbmd0aCwgJ3ZlcnNpb24nKX06IGBcbiAgICAgICsgYCR7ZmFpbGVkRW50cmllcy5tYXAoKGVudHJ5KSA9PiBmb3JtYXRWZXJzaW9uTWF0cml4RW50cnkoZW50cnkpKS5qb2luKCcsICcpfS4ke3Bhc3NlZENsYXVzZX1gXG4gICk7XG59XG5cbi8qKlxuICogRm9ybWF0cyBhIHJ1biBjb3VudCBhcyBwcm9zZSwgc28gdGhlIHNpbmdsZS1ydW4gY2FzZSByZWFkcyBhcyBhIGRlbGliZXJhdGVcbiAqIGRlY2lzaW9uIHJhdGhlciB0aGFuIGEgc3VzcGljaW91cyBgMWAuXG4gKlxuICogQHBhcmFtIGNvdW50IC0gVGhlIG51bWJlciBvZiBydW5zLlxuICogQHJldHVybnMgYG9uY2VgLCBgdHdpY2VgLCBvciBgTiB0aW1lc2AuXG4gKi9cbmZ1bmN0aW9uIGZvcm1hdFJ1bkNvdW50KGNvdW50OiBudW1iZXIpOiBzdHJpbmcge1xuICBjb25zdCBUV0lDRSA9IDI7XG4gIGlmIChjb3VudCA9PT0gMSkge1xuICAgIHJldHVybiAnb25jZSc7XG4gIH1cbiAgaWYgKGNvdW50ID09PSBUV0lDRSkge1xuICAgIHJldHVybiAndHdpY2UnO1xuICB9XG4gIHJldHVybiBgJHtTdHJpbmcoY291bnQpfSB0aW1lc2A7XG59XG5cbi8qKlxuICogUGx1cmFsaXplcyBhIG5vdW4gYnkgY291bnQuXG4gKlxuICogQHBhcmFtIGNvdW50IC0gVGhlIGNvdW50LlxuICogQHBhcmFtIG5vdW4gLSBUaGUgc2luZ3VsYXIgbm91bi5cbiAqIEByZXR1cm5zIFRoZSBub3VuLCBzdWZmaXhlZCB3aXRoIGBzYCB1bmxlc3MgdGhlIGNvdW50IGlzIGV4YWN0bHkgb25lLlxuICovXG5mdW5jdGlvbiBwbHVyYWxpemUoY291bnQ6IG51bWJlciwgbm91bjogc3RyaW5nKTogc3RyaW5nIHtcbiAgcmV0dXJuIGNvdW50ID09PSAxID8gbm91biA6IGAke25vdW59c2A7XG59XG5cbi8qKlxuICogUmVzb2x2ZXMgYSBzaW5nbGUgc3BlY2lmaWVyIGFnYWluc3QgYSBtYW5pZmVzdC5cbiAqXG4gKiBAcGFyYW0gc3BlYyAtIFRoZSBzcGVjaWZpZXIuXG4gKiBAcGFyYW0gbWFuaWZlc3QgLSBUaGUgbWFuaWZlc3QsIG9yIGB1bmRlZmluZWRgIHdoZW4gbm9uZSB3YXMgZmV0Y2hlZC5cbiAqIEByZXR1cm5zIFRoZSBjb25jcmV0ZSBgeC55LnpgIHZlcnNpb24uXG4gKiBAdGhyb3dzIEVycm9yIGlmIHRoZSBzcGVjaWZpZXIgaXMgaW52YWxpZCwgb3IgbmFtZXMgYSBjaGFubmVsIHdpdGggbm8gbWFuaWZlc3RcbiAqICAgZW50cnkuXG4gKi9cbmZ1bmN0aW9uIHJlc29sdmVTcGVjKHNwZWM6IHN0cmluZywgbWFuaWZlc3Q6IERlc2t0b3BSZWxlYXNlc01hbmlmZXN0IHwgdW5kZWZpbmVkKTogc3RyaW5nIHtcbiAgY29uc3QgcGFyc2VkID0gcGFyc2VWZXJzaW9uU3BlYyhzcGVjKTtcbiAgaWYgKHBhcnNlZC5raW5kID09PSAnZXhwbGljaXQnKSB7XG4gICAgcmV0dXJuIHBhcnNlZC52ZXJzaW9uO1xuICB9XG4gIGlmICghbWFuaWZlc3QpIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoYENhbm5vdCByZXNvbHZlIFwiJHtzcGVjfVwiIHdpdGhvdXQgdGhlIGRlc2t0b3AgcmVsZWFzZXMgbWFuaWZlc3QuYCk7XG4gIH1cbiAgcmV0dXJuIHJlc29sdmVWZXJzaW9uRnJvbU1hbmlmZXN0KG1hbmlmZXN0LCBwYXJzZWQuY2hhbm5lbCk7XG59XG5cbi8qKlxuICogQ2hvb3NlcyB0aGUgc3ViamVjdC12ZXJiIGFncmVlbWVudCBmb3IgdGhlIHNwZWNpZmllciBjb3VudC5cbiAqXG4gKiBAcGFyYW0gY291bnQgLSBUaGUgbnVtYmVyIG9mIHNwZWNpZmllcnMuXG4gKiBAcmV0dXJucyBgcmVzb2x2ZXNgIG9yIGByZXNvbHZlYC5cbiAqL1xuZnVuY3Rpb24gcmVzb2x2ZVZlcmIoY291bnQ6IG51bWJlcik6IHN0cmluZyB7XG4gIHJldHVybiBjb3VudCA9PT0gMSA/ICdyZXNvbHZlcycgOiAncmVzb2x2ZSc7XG59XG5cbi8qKlxuICogRXh0cmFjdHMgYSBodW1hbi1yZWFkYWJsZSByZWFzb24gZnJvbSBhIHRocm93biB2YWx1ZS5cbiAqXG4gKiBAcGFyYW0gZXJyb3IgLSBUaGUgdGhyb3duIHZhbHVlLlxuICogQHJldHVybnMgVGhlIHJlYXNvbiB0ZXh0LlxuICovXG5mdW5jdGlvbiB0b1JlYXNvbihlcnJvcjogdW5rbm93bik6IHN0cmluZyB7XG4gIC8qIHY4IGlnbm9yZSBuZXh0IC0tIERlZmVuc2l2ZTogZXZlcnkgdGhyb3cgc2l0ZSByZWFjaGFibGUgZnJvbSBoZXJlIChwYXJzZVZlcnNpb25TcGVjLCByZXNvbHZlVmVyc2lvbkZyb21NYW5pZmVzdCwgdGhlIG1pc3NpbmctbWFuaWZlc3QgZ3VhcmQpIHRocm93cyBhbiBFcnJvci4gKi9cbiAgcmV0dXJuIGVycm9yIGluc3RhbmNlb2YgRXJyb3IgPyBlcnJvci5tZXNzYWdlIDogU3RyaW5nKGVycm9yKTtcbn1cbiJdLAogICJtYXBwaW5ncyI6ICJBQXlCQTtBQUFBLEVBQ0U7QUFBQSxFQUNBO0FBQUEsRUFDQTtBQUFBLEVBQ0E7QUFBQSxPQUNLO0FBT0EsTUFBTSxpQ0FBb0QsQ0FBQyxlQUFlLGVBQWU7QUEwS3pGLFNBQVMsbUJBQW1CLGVBQTZFO0FBQzlHLFFBQU0saUJBQWlCLG9CQUFJLElBQXNCO0FBRWpELGFBQVcsRUFBRSxNQUFNLFFBQVEsS0FBSyxlQUFlO0FBQzdDLFVBQU0sUUFBUSxlQUFlLElBQUksT0FBTztBQUN4QyxRQUFJLENBQUMsT0FBTztBQUNWLHFCQUFlLElBQUksU0FBUyxDQUFDLElBQUksQ0FBQztBQUNsQztBQUFBLElBQ0Y7QUFDQSxRQUFJLENBQUMsTUFBTSxTQUFTLElB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
|
|
@@ -98,7 +98,11 @@ export declare class WebViewCdpConnection {
|
|
|
98
98
|
*/
|
|
99
99
|
send(method: string, params?: Record<string, unknown>): Promise<Record<string, unknown>>;
|
|
100
100
|
/**
|
|
101
|
-
* Sends an ordered command sequence,
|
|
101
|
+
* Sends an ordered command sequence, one command at a time.
|
|
102
|
+
*
|
|
103
|
+
* Each command is awaited before the next is sent, which is the only ordering guarantee an input
|
|
104
|
+
* sequence needs — a long-press holds itself for its own `duration` rather than asking the host to
|
|
105
|
+
* sleep between two touches, so there is no inter-command delay to honor.
|
|
102
106
|
*
|
|
103
107
|
* @param commands - The commands to send, in order.
|
|
104
108
|
*/
|
|
@@ -107,17 +107,16 @@ class WebViewCdpConnection {
|
|
|
107
107
|
});
|
|
108
108
|
}
|
|
109
109
|
/**
|
|
110
|
-
* Sends an ordered command sequence,
|
|
110
|
+
* Sends an ordered command sequence, one command at a time.
|
|
111
|
+
*
|
|
112
|
+
* Each command is awaited before the next is sent, which is the only ordering guarantee an input
|
|
113
|
+
* sequence needs — a long-press holds itself for its own `duration` rather than asking the host to
|
|
114
|
+
* sleep between two touches, so there is no inter-command delay to honor.
|
|
111
115
|
*
|
|
112
116
|
* @param commands - The commands to send, in order.
|
|
113
117
|
*/
|
|
114
118
|
async sendAll(commands) {
|
|
115
119
|
for (const command of commands) {
|
|
116
|
-
if (command.delayBeforeInMilliseconds !== void 0) {
|
|
117
|
-
await new Promise((resolve) => {
|
|
118
|
-
setTimeout(resolve, command.delayBeforeInMilliseconds);
|
|
119
|
-
});
|
|
120
|
-
}
|
|
121
120
|
await this.send(command.method, command.params);
|
|
122
121
|
}
|
|
123
122
|
}
|
|
@@ -233,4 +232,4 @@ export {
|
|
|
233
232
|
parseWebViewDevtoolsSocketName,
|
|
234
233
|
selectWebViewPageTarget
|
|
235
234
|
};
|
|
236
|
-
//# sourceMappingURL=data:application/json;base64,ewogICJ2ZXJzaW9uIjogMywKICAic291cmNlcyI6IFsiLi4vLi4vLi4vc3JjL3dlYnZpZXctY2RwLnRzIl0sCiAgInNvdXJjZXNDb250ZW50IjogWyIvKipcbiAqIEBmaWxlXG4gKlxuICogQSBzZWNvbmQsIGluZGVwZW5kZW50IENocm9tZSBEZXZUb29scyBQcm90b2NvbCBjb25uZWN0aW9uIHRvIE9ic2lkaWFuIE1vYmlsZSdzIFdlYlZpZXcsIHVzZWQgdG8gaW5qZWN0XG4gKiAqKnRydXN0ZWQqKiBpbnB1dCBvbiBBbmRyb2lkIChzZWUgKipMMzkqKikuXG4gKlxuICogSXQgaXMgZGVsaWJlcmF0ZWx5IHNlcGFyYXRlIGZyb20gdGhlIEFwcGl1bSBzZXNzaW9uIHJhdGhlciB0aGFuIGxheWVyZWQgb24gaXQuIGBBcHBpdW1UcmFuc3BvcnQuZXZhbHVhdGVgXG4gKiBydW5zIHRoZSB3aG9sZSBgZXZhbEluT2JzaWRpYW5gIGNsb3N1cmUgaW5zaWRlIG9uZSBXM0MgKkV4ZWN1dGUgU2NyaXB0Kiwgd2hpY2ggYXdhaXRzIHRoZSByZXR1cm5lZFxuICogcHJvbWlzZSBcdTIwMTQgc28gd2hpbGUgYSBjbG9zdXJlIHNpdHMgd2FpdGluZyBvbiBgbGliLmNsaWNrRWxlbWVudCguLi4pYCwgdGhlIFdlYkRyaXZlciBzZXNzaW9uIGlzIGJ1c3kgYW5kXG4gKiBjYW5ub3QgYmUgYXNrZWQgdG8gZG8gYW55dGhpbmcgZWxzZS4gQ0RQIGlzIGlkLW11bHRpcGxleGVkIGFuZCBDaHJvbWl1bSBhY2NlcHRzIG11bHRpcGxlIGRlYnVnZ2VyXG4gKiBjbGllbnRzLCBzbyB0aGlzIHNvY2tldCBzdGF5cyBmcmVlIGV4YWN0bHkgd2hlbiB0aGUgQXBwaXVtIG9uZSBkb2VzIG5vdC4gVGhhdCBpcyB3aGF0IGxldHMgdGhlIHJlbmRlcmVyXG4gKiBjYWxsIGJhY2sgb3V0IHRvIHRoZSBob3N0IG1pZC1jbG9zdXJlLlxuICpcbiAqIFJlYWNoaW5nIHRoZSBXZWJWaWV3J3MgZGVidWdnZXIgaXMgYSB0d28tc3RlcDogdGhlIGFwcCBwdWJsaXNoZXMgYW4gYWJzdHJhY3QgdW5peCBzb2NrZXQgbmFtZWRcbiAqIGB3ZWJ2aWV3X2RldnRvb2xzX3JlbW90ZV88cGlkPmAsIGBhZGIgZm9yd2FyZGAgbWFwcyBpdCB0byBhIGxvY2FsIFRDUCBwb3J0LCBhbmQgdGhlIHVzdWFsIGAvanNvbmBcbiAqIGVuZHBvaW50IHRoZW4gbGlzdHMgdGhlIHBhZ2UgdGFyZ2V0cy5cbiAqL1xuXG5pbXBvcnQgeyBleGVjRmlsZVN5bmMgfSBmcm9tICdub2RlOmNoaWxkX3Byb2Nlc3MnO1xuXG5pbXBvcnQgdHlwZSB7IENkcElucHV0Q29tbWFuZCB9IGZyb20gJy4vbW9iaWxlLWlucHV0Lm1qcyc7XG5cbmltcG9ydCB7IGV4ZWMgfSBmcm9tICcuL2V4ZWMubWpzJztcbmltcG9ydCB7IGxvZyB9IGZyb20gJy4vbG9nLm1qcyc7XG5pbXBvcnQgeyBwaWNrRnJlZVBvcnQgfSBmcm9tICcuL29ic2lkaWFuLWluc3RhbmNlLm1qcyc7XG5cbmNvbnN0IEFEQl9USU1FT1VUX0lOX01JTExJU0VDT05EUyA9IDE1XzAwMDtcbi8vIGBhZGIgZm9yd2FyZCAtLWxpc3RgIHByaW50cyB0aHJlZSBjb2x1bW5zOiBgPGRldmljZUlkPiB0Y3A6PHBvcnQ+IGxvY2FsYWJzdHJhY3Q6PHNvY2tldE5hbWU+YC5cbmNvbnN0IEZPUldBUkRfTElTVF9DT0xVTU5fQ09VTlQgPSAzO1xuY29uc3QgREVDSU1BTF9SQURJWCA9IDEwO1xuY29uc3QgQ0RQX0NPTU1BTkRfVElNRU9VVF9JTl9NSUxMSVNFQ09ORFMgPSAzMF8wMDA7XG5jb25zdCBDRFBfSE9TVCA9ICcxMjcuMC4wLjEnO1xuXG4vKipcbiAqIE9uZSBlbnRyeSBvZiB0aGUgZGVidWdnZXIncyBgL2pzb25gIHRhcmdldCBsaXN0LlxuICovXG5leHBvcnQgaW50ZXJmYWNlIENkcFRhcmdldCB7XG4gIHJlYWRvbmx5IHRpdGxlPzogc3RyaW5nO1xuICByZWFkb25seSB0eXBlPzogc3RyaW5nO1xuICByZWFkb25seSB1cmw/OiBzdHJpbmc7XG4gIHJlYWRvbmx5IHdlYlNvY2tldERlYnVnZ2VyVXJsPzogc3RyaW5nO1xufVxuXG4vKipcbiAqIFBhcmFtZXRlcnMgZm9yIHtAbGluayBjb25uZWN0VG9XZWJWaWV3Q2RwfS5cbiAqL1xuZXhwb3J0IGludGVyZmFjZSBDb25uZWN0VG9XZWJWaWV3Q2RwUGFyYW1zIHtcbiAgLyoqXG4gICAqIFRoZSBBbmRyb2lkIGFwcGxpY2F0aW9uIGlkIHdob3NlIFdlYlZpZXcgdG8gYXR0YWNoIHRvLCBlLmcuIGBtZC5vYnNpZGlhbmAuXG4gICAqL1xuICByZWFkb25seSBhcHBJZDogc3RyaW5nO1xuXG4gIC8qKlxuICAgKiBUaGUgYWRiIGRldmljZSBpZCAoYGVtdWxhdG9yLTU1NTRgLCBhIHNlcmlhbCkgdG8gcnVuIGFkYiBhZ2FpbnN0LlxuICAgKi9cbiAgcmVhZG9ubHkgZGV2aWNlSWQ6IHN0cmluZztcbn1cblxuLyoqXG4gKiBUaGUgZXJyb3IgaGFsZiBvZiBhIGZhaWxlZCBDRFAgY29tbWFuZCByZXNwb25zZS5cbiAqL1xuaW50ZXJmYWNlIENkcEVycm9yIHtcbiAgcmVhZG9ubHkgbWVzc2FnZT86IHN0cmluZztcbn1cblxuLyoqXG4gKiBIYW5kbGVzIGEgQ0RQIGV2ZW50LlxuICovXG50eXBlIENkcEV2ZW50SGFuZGxlciA9IChwYXJhbXM6IFJlY29yZDxzdHJpbmcsIHVua25vd24+KSA9PiB2b2lkO1xuXG4vKipcbiAqIEEgQ0RQIG1lc3NhZ2U6IGVpdGhlciBhIHJlc3BvbnNlIHRvIGEgY29tbWFuZCAoYGlkYCkgb3IgYW4gZXZlbnQgKGBtZXRob2RgKS5cbiAqL1xuaW50ZXJmYWNlIENkcE1lc3NhZ2Uge1xuICByZWFkb25seSBlcnJvcj86IENkcEVycm9yO1xuICByZWFkb25seSBpZD86IG51bWJlcjtcbiAgcmVhZG9ubHkgbWV0aG9kPzogc3RyaW5nO1xuICByZWFkb25seSBwYXJhbXM/OiBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPjtcbiAgcmVhZG9ubHkgcmVzdWx0PzogUmVjb3JkPHN0cmluZywgdW5rbm93bj47XG59XG5cbi8qIHY4IGlnbm9yZSBzdGFydCAtLSBJbnRlZ3JhdGlvbi10aW1lIGNvZGUgKGEgbGl2ZSBXZWJTb2NrZXQgdG8gYSBXZWJWaWV3LCBhZGIgcG9ydCBmb3J3YXJkaW5nKS4gQ292ZXJlZCBieSB0aGUgQW5kcm9pZCBpbnRlZ3JhdGlvbiB0ZXN0cywgbm90IGJ5IHVuaXQgdGVzdHMuIEl0IGVuZHMgYmVmb3JlIGBwYXJzZUZvcndhcmRlZFBvcnRgOiBgcGVyZmVjdGlvbmlzdC9zb3J0LW1vZHVsZXNgIHBsYWNlcyB0aGUgcHVyZSwgdW5pdC10ZXN0ZWQgaGVscGVycyBBRlRFUiB0aGlzIGNsYXNzIGFuZCBgY29ubmVjdFRvV2ViVmlld0NkcGAsIHNvIHRoZXkgbXVzdCBzdGF5IG1lYXN1cmVkLiAqL1xuXG4vKipcbiAqIEFuIG9wZW4gQ0RQIGNvbm5lY3Rpb24gdG8gYSBXZWJWaWV3LlxuICpcbiAqIENvbW1hbmRzIGFyZSBpZC1tdWx0aXBsZXhlZCwgc28gYSBjb21tYW5kIGlzc3VlZCBmcm9tIGluc2lkZSBhbiBldmVudCBoYW5kbGVyIGNvbXBsZXRlcyB3aGlsZSBhbiBlYXJsaWVyXG4gKiBgUnVudGltZS5ldmFsdWF0ZWAgaXMgc3RpbGwgYXdhaXRpbmcgaXRzIHByb21pc2UgXHUyMDE0IHdoaWNoIGlzIHRoZSB3aG9sZSByZWFzb24gdGhpcyBjbGFzcyBleGlzdHMuXG4gKi9cbmV4cG9ydCBjbGFzcyBXZWJWaWV3Q2RwQ29ubmVjdGlvbiB7XG4gIC8qKlxuICAgKiBXaGV0aGVyIHRoZSBzb2NrZXQgaXMgc3RpbGwgdXNhYmxlLlxuICAgKlxuICAgKiBSZXN0YXJ0aW5nIHRoZSBhcHAgdGVhcnMgaXRzIFdlYlZpZXcgZG93biBhbmQgdGFrZXMgdGhlIGRlYnVnZ2VyIHRhcmdldCB3aXRoIGl0LCBzbyBhIGNhY2hlZFxuICAgKiBjb25uZWN0aW9uIGhhcyB0byBiZSByZS1jaGVja2VkIHJhdGhlciB0aGFuIGFzc3VtZWQgbGl2ZS5cbiAgICpcbiAgICogQHJldHVybnMgYHRydWVgIHdoaWxlIHRoZSBzb2NrZXQgaXMgb3Blbi5cbiAgICovXG4gIHB1YmxpYyBnZXQgaXNPcGVuKCk6IGJvb2xlYW4ge1xuICAgIHJldHVybiB0aGlzLndlYlNvY2tldC5yZWFkeVN0YXRlID09PSBXZWJTb2NrZXQuT1BFTjtcbiAgfVxuXG4gIHByaXZhdGUgcmVhZG9ubHkgZXZlbnRIYW5kbGVycyA9IG5ldyBNYXA8c3RyaW5nLCBDZHBFdmVudEhhbmRsZXI+KCk7XG5cbiAgcHJpdmF0ZSBtZXNzYWdlSWQgPSAwO1xuXG4gIC8qKlxuICAgKiBXcmFwcyBhbiBhbHJlYWR5LW9wZW4gZGVidWdnZXIgc29ja2V0LCBwbHVzIHdoYXQgaXMgbmVlZGVkIHRvIHRlYXIgaXRzIHBvcnQgZm9yd2FyZCBkb3duLlxuICAgKlxuICAgKiBAcGFyYW0gd2ViU29ja2V0IC0gVGhlIG9wZW4gZGVidWdnZXIgc29ja2V0LlxuICAgKiBAcGFyYW0gZGV2aWNlSWQgLSBUaGUgYWRiIGRldmljZSBpZCwgbmVlZGVkIHRvIGRyb3AgdGhlIHBvcnQgZm9yd2FyZCBvbiBkaXNwb3NlLlxuICAgKiBAcGFyYW0gcG9ydCAtIFRoZSBmb3J3YXJkZWQgbG9jYWwgcG9ydC5cbiAgICovXG4gIHB1YmxpYyBjb25zdHJ1Y3Rvcihwcml2YXRlIHJlYWRvbmx5IHdlYlNvY2tldDogV2ViU29ja2V0LCBwcml2YXRlIHJlYWRvbmx5IGRldmljZUlkOiBzdHJpbmcsIHByaXZhdGUgcmVhZG9ubHkgcG9ydDogbnVtYmVyKSB7XG4gICAgdGhpcy53ZWJTb2NrZXQuYWRkRXZlbnRMaXN0ZW5lcignbWVzc2FnZScsIChldmVudDogTWVzc2FnZUV2ZW50KSA9PiB7XG4gICAgICBjb25zdCBtZXNzYWdlID0gSlNPTi5wYXJzZShTdHJpbmcoZXZlbnQuZGF0YSkpIGFzIENkcE1lc3NhZ2U7XG4gICAgICBpZiAobWVzc2FnZS5tZXRob2QgPT09IHVuZGVmaW5lZCkge1xuICAgICAgICByZXR1cm47XG4gICAgICB9XG5cbiAgICAgIHRoaXMuZXZlbnRIYW5kbGVycy5nZXQobWVzc2FnZS5tZXRob2QpPy4obWVzc2FnZS5wYXJhbXMgPz8ge30pO1xuICAgIH0pO1xuICB9XG5cbiAgLyoqXG4gICAqIENsb3NlcyB0aGUgc29ja2V0IGFuZCBkcm9wcyB0aGUgYWRiIHBvcnQgZm9yd2FyZC5cbiAgICovXG4gIHB1YmxpYyBhc3luYyBkaXNwb3NlKCk6IFByb21pc2U8dm9pZD4ge1xuICAgIHRoaXMuY2xvc2VTb2NrZXQoKTtcbiAgICBhd2FpdCByZW1vdmVGb3J3YXJkKHRoaXMuZGV2aWNlSWQsIHRoaXMucG9ydCk7XG4gIH1cblxuICAvKipcbiAgICogU3luY2hyb25vdXMgZGlzcG9zYWwsIGZvciBgcHJvY2Vzcy5vbignZXhpdCcpYCBoYW5kbGVycyB3aGVyZSBhc3luYyB3b3JrIGNhbm5vdCBydW4uXG4gICAqXG4gICAqIFdpdGhvdXQgdGhpcyBhbiBhYnJ1cHQgd29ya2VyIGV4aXQgbGVhdmVzIHRoZSBwb3J0IGZvcndhcmQgYmVoaW5kIFx1MjAxNCB0aGUgYXN5bmMge0BsaW5rIGRpc3Bvc2V9IGFib3ZlXG4gICAqIG5ldmVyIGdldHMgYSB0dXJuLlxuICAgKi9cbiAgcHVibGljIGRpc3Bvc2VTeW5jKCk6IHZvaWQge1xuICAgIHRoaXMuY2xvc2VTb2NrZXQoKTtcbiAgICB0cnkge1xuICAgICAgZXhlY0ZpbGVTeW5jKCdhZGInLCBbJy1zJywgdGhpcy5kZXZpY2VJZCwgJ2ZvcndhcmQnLCAnLS1yZW1vdmUnLCBgdGNwOiR7U3RyaW5nKHRoaXMucG9ydCl9YF0sIHtcbiAgICAgICAgc3RkaW86ICdpZ25vcmUnLFxuICAgICAgICB0aW1lb3V0OiBBREJfVElNRU9VVF9JTl9NSUxMSVNFQ09ORFNcbiAgICAgIH0pO1xuICAgIH0gY2F0Y2gge1xuICAgICAgLy8gQmVzdCBlZmZvcnQ6IGFkYiBkcm9wcyBldmVyeSBmb3J3YXJkIHdoZW4gdGhlIGRldmljZSBkaXNjb25uZWN0cyBhbnl3YXkuXG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqIFN1YnNjcmliZXMgdG8gYSBDRFAgZXZlbnQuIE9uZSBoYW5kbGVyIHBlciBtZXRob2Q7IHN1YnNjcmliaW5nIGFnYWluIHJlcGxhY2VzIGl0LlxuICAgKlxuICAgKiBAcGFyYW0gbWV0aG9kIC0gVGhlIENEUCBldmVudCBuYW1lLCBlLmcuIGBSdW50aW1lLmJpbmRpbmdDYWxsZWRgLlxuICAgKiBAcGFyYW0gaGFuZGxlciAtIENhbGxlZCB3aXRoIHRoZSBldmVudCBwYXJhbWV0ZXJzLlxuICAgKi9cbiAgcHVibGljIG9uKG1ldGhvZDogc3RyaW5nLCBoYW5kbGVyOiBDZHBFdmVudEhhbmRsZXIpOiB2b2lkIHtcbiAgICB0aGlzLmV2ZW50SGFuZGxlcnMuc2V0KG1ldGhvZCwgaGFuZGxlcik7XG4gIH1cblxuICAvKipcbiAgICogU2VuZHMgYSBDRFAgY29tbWFuZCBhbmQgd2FpdHMgZm9yIGl0cyByZXNwb25zZS5cbiAgICpcbiAgICogQHBhcmFtIG1ldGhvZCAtIFRoZSBDRFAgbWV0aG9kIG5hbWUuXG4gICAqIEBwYXJhbSBwYXJhbXMgLSBUaGUgQ0RQIG1ldGhvZCBwYXJhbWV0ZXJzLlxuICAgKiBAcmV0dXJucyBUaGUgY29tbWFuZCByZXN1bHQuXG4gICAqL1xuICBwdWJsaWMgc2VuZChtZXRob2Q6IHN0cmluZywgcGFyYW1zOiBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPiA9IHt9KTogUHJvbWlzZTxSZWNvcmQ8c3RyaW5nLCB1bmtub3duPj4ge1xuICAgIGNvbnN0IGlkID0gKyt0aGlzLm1lc3NhZ2VJZDtcblxuICAgIHJldHVybiBuZXcgUHJvbWlzZTxSZWNvcmQ8c3RyaW5nLCB1bmtub3duPj4oKHJlc29sdmUsIHJlamVjdCkgPT4ge1xuICAgICAgY29uc3QgdGltZW91dCA9IHNldFRpbWVvdXQoKCkgPT4ge1xuICAgICAgICB0aGlzLndlYlNvY2tldC5yZW1vdmVFdmVudExpc3RlbmVyKCdtZXNzYWdlJywgaGFuZGxlcik7XG4gICAgICAgIHJlamVjdChuZXcgRXJyb3IoYFdlYlZpZXcgQ0RQIGNvbW1hbmQgdGltZWQgb3V0IGFmdGVyICR7U3RyaW5nKENEUF9DT01NQU5EX1RJTUVPVVRfSU5fTUlMTElTRUNPTkRTKX1tczogJHttZXRob2R9YCkpO1xuICAgICAgfSwgQ0RQX0NPTU1BTkRfVElNRU9VVF9JTl9NSUxMSVNFQ09ORFMpO1xuXG4gICAgICBjb25zdCBoYW5kbGVyID0gKGV2ZW50OiBNZXNzYWdlRXZlbnQpOiB2b2lkID0+IHtcbiAgICAgICAgY29uc3QgbWVzc2FnZSA9IEpTT04ucGFyc2UoU3RyaW5nKGV2ZW50LmRhdGEpKSBhcyBDZHBNZXNzYWdlO1xuICAgICAgICBpZiAobWVzc2FnZS5pZCAhPT0gaWQpIHtcbiAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cblxuICAgICAgICBjbGVhclRpbWVvdXQodGltZW91dCk7XG4gICAgICAgIHRoaXMud2ViU29ja2V0LnJlbW92ZUV2ZW50TGlzdGVuZXIoJ21lc3NhZ2UnLCBoYW5kbGVyKTtcbiAgICAgICAgaWYgKG1lc3NhZ2UuZXJyb3IpIHtcbiAgICAgICAgICByZWplY3QobmV3IEVycm9yKGBXZWJWaWV3IENEUCBjb21tYW5kICR7bWV0aG9kfSBmYWlsZWQ6ICR7bWVzc2FnZS5lcnJvci5tZXNzYWdlID8/ICd1bmtub3duIGVycm9yJ31gKSk7XG4gICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG5cbiAgICAgICAgcmVzb2x2ZShtZXNzYWdlLnJlc3VsdCA/PyB7fSk7XG4gICAgICB9O1xuXG4gICAgICB0aGlzLndlYlNvY2tldC5hZGRFdmVudExpc3RlbmVyKCdtZXNzYWdlJywgaGFuZGxlcik7XG4gICAgICB0aGlzLndlYlNvY2tldC5zZW5kKEpTT04uc3RyaW5naWZ5KHsgaWQsIG1ldGhvZCwgcGFyYW1zIH0pKTtcbiAgICB9KTtcbiAgfVxuXG4gIC8qKlxuICAgKiBTZW5kcyBhbiBvcmRlcmVkIGNvbW1hbmQgc2VxdWVuY2UsIGhvbm9yaW5nIGVhY2ggY29tbWFuZCdzIGRlbGF5LlxuICAgKlxuICAgKiBAcGFyYW0gY29tbWFuZHMgLSBUaGUgY29tbWFuZHMgdG8gc2VuZCwgaW4gb3JkZXIuXG4gICAqL1xuICBwdWJsaWMgYXN5bmMgc2VuZEFsbChjb21tYW5kczogcmVhZG9ubHkgQ2RwSW5wdXRDb21tYW5kW10pOiBQcm9taXNlPHZvaWQ+IHtcbiAgICBmb3IgKGNvbnN0IGNvbW1hbmQgb2YgY29tbWFuZHMpIHtcbiAgICAgIGlmIChjb21tYW5kLmRlbGF5QmVmb3JlSW5NaWxsaXNlY29uZHMgIT09IHVuZGVmaW5lZCkge1xuICAgICAgICBhd2FpdCBuZXcgUHJvbWlzZTx2b2lkPigocmVzb2x2ZSkgPT4ge1xuICAgICAgICAgIHNldFRpbWVvdXQocmVzb2x2ZSwgY29tbWFuZC5kZWxheUJlZm9yZUluTWlsbGlzZWNvbmRzKTtcbiAgICAgICAgfSk7XG4gICAgICB9XG5cbiAgICAgIGF3YWl0IHRoaXMuc2VuZChjb21tYW5kLm1ldGhvZCwgY29tbWFuZC5wYXJhbXMpO1xuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKiBDbG9zZXMgdGhlIGRlYnVnZ2VyIHNvY2tldCBhbmQgc3RvcHMgcm91dGluZyBpdHMgZXZlbnRzLlxuICAgKi9cbiAgcHJpdmF0ZSBjbG9zZVNvY2tldCgpOiB2b2lkIHtcbiAgICB0aGlzLmV2ZW50SGFuZGxlcnMuY2xlYXIoKTtcbiAgICBpZiAodGhpcy53ZWJTb2NrZXQucmVhZHlTdGF0ZSA9PT0gV2ViU29ja2V0Lk9QRU4pIHtcbiAgICAgIHRoaXMud2ViU29ja2V0LmNsb3NlKCk7XG4gICAgfVxuICB9XG59XG5cbi8qKlxuICogT3BlbnMgYSBDRFAgY29ubmVjdGlvbiB0byB0aGUgYXBwJ3MgV2ViVmlldy5cbiAqXG4gKiBAcGFyYW0gcGFyYW1zIC0gV2hpY2ggYXBwIG9uIHdoaWNoIGRldmljZS5cbiAqIEByZXR1cm5zIFRoZSBvcGVuIGNvbm5lY3Rpb24uIERpc3Bvc2UgaXQgdG8gY2xvc2UgdGhlIHNvY2tldCBhbmQgZHJvcCB0aGUgYWRiIHBvcnQgZm9yd2FyZC5cbiAqL1xuZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIGNvbm5lY3RUb1dlYlZpZXdDZHAocGFyYW1zOiBDb25uZWN0VG9XZWJWaWV3Q2RwUGFyYW1zKTogUHJvbWlzZTxXZWJWaWV3Q2RwQ29ubmVjdGlvbj4ge1xuICBjb25zdCB7IGFwcElkLCBkZXZpY2VJZCB9ID0gcGFyYW1zO1xuXG4gIC8vIGBwaWRvZmAgbGlzdHMgZXZlcnkgbWF0Y2hpbmcgcHJvY2VzczsgdGhlIGFwcCdzIG1haW4gb25lIGlzIGZpcnN0LlxuICBjb25zdCBwaWRvZk91dHB1dCA9IGF3YWl0IGFkYihkZXZpY2VJZCwgWydzaGVsbCcsICdwaWRvZicsIGFwcElkXSk7XG4gIGNvbnN0IHBpZCA9IHBpZG9mT3V0cHV0LnNwbGl0KC9cXHMrLywgMSlbMF0gPz8gJyc7XG4gIGlmICghcGlkKSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKGAke2FwcElkfSBpcyBub3QgcnVubmluZyBvbiAke2RldmljZUlkfSwgc28gaXRzIFdlYlZpZXcgaGFzIG5vIGRlYnVnZ2VyIHRvIGF0dGFjaCB0by5gKTtcbiAgfVxuXG4gIGNvbnN0IHByb2NOZXRVbml4ID0gYXdhaXQgYWRiKGRldmljZUlkLCBbJ3NoZWxsJywgJ2NhdCcsICcvcHJvYy9uZXQvdW5peCddKTtcbiAgY29uc3Qgc29ja2V0TmFtZSA9IHBhcnNlV2ViVmlld0RldnRvb2xzU29ja2V0TmFtZShwcm9jTmV0VW5peCwgcGlkKTtcblxuICBjb25zdCBmb3J3YXJkTGlzdCA9IGF3YWl0IGFkYihkZXZpY2VJZCwgWydmb3J3YXJkJywgJy0tbGlzdCddKTtcbiAgY29uc3QgZXhpc3RpbmdQb3J0ID0gcGFyc2VGb3J3YXJkZWRQb3J0KGZvcndhcmRMaXN0LCBkZXZpY2VJZCwgc29ja2V0TmFtZSk7XG4gIGNvbnN0IHBvcnQgPSBleGlzdGluZ1BvcnQgPz8gYXdhaXQgcGlja0ZyZWVQb3J0KCk7XG4gIGlmIChleGlzdGluZ1BvcnQgPT09IHVuZGVmaW5lZCkge1xuICAgIGF3YWl0IGFkYihkZXZpY2VJZCwgWydmb3J3YXJkJywgYHRjcDoke1N0cmluZyhwb3J0KX1gLCBgbG9jYWxhYnN0cmFjdDoke3NvY2tldE5hbWV9YF0pO1xuICAgIGxvZyhgW3dlYnZpZXctY2RwXSBGb3J3YXJkZWQgdGNwOiR7U3RyaW5nKHBvcnQpfSAtPiBsb2NhbGFic3RyYWN0OiR7c29ja2V0TmFtZX0gKCR7YXBwSWR9IHBpZCAke3BpZH0pYCk7XG4gIH0gZWxzZSB7XG4gICAgbG9nKGBbd2Vidmlldy1jZHBdIFJldXNpbmcgZm9yd2FyZCB0Y3A6JHtTdHJpbmcocG9ydCl9IC0+IGxvY2FsYWJzdHJhY3Q6JHtzb2NrZXROYW1lfSAoJHthcHBJZH0gcGlkICR7cGlkfSlgKTtcbiAgfVxuXG4gIHRyeSB7XG4gICAgY29uc3QgcmVzcG9uc2UgPSBhd2FpdCBmZXRjaChgaHR0cDovLyR7Q0RQX0hPU1R9OiR7U3RyaW5nKHBvcnQpfS9qc29uYCk7XG4gICAgY29uc3QgdGFyZ2V0ID0gc2VsZWN0V2ViVmlld1BhZ2VUYXJnZXQoYXdhaXQgcmVzcG9uc2UuanNvbigpIGFzIENkcFRhcmdldFtdKTtcbiAgICBjb25zdCB3ZWJTb2NrZXQgPSBuZXcgV2ViU29ja2V0KHRhcmdldC53ZWJTb2NrZXREZWJ1Z2dlclVybCA/PyAnJyk7XG4gICAgYXdhaXQgbmV3IFByb21pc2U8dm9pZD4oKHJlc29sdmUsIHJlamVjdCkgPT4ge1xuICAgICAgd2ViU29ja2V0LmFkZEV2ZW50TGlzdGVuZXIoJ29wZW4nLCAoKSA9PiB7XG4gICAgICAgIHJlc29sdmUoKTtcbiAgICAgIH0sIHsgb25jZTogdHJ1ZSB9KTtcbiAgICAgIHdlYlNvY2tldC5hZGRFdmVudExpc3RlbmVyKCdlcnJvcicsICgpID0+IHtcbiAgICAgICAgcmVqZWN0KG5ldyBFcnJvcihgQ291bGQgbm90IG9wZW4gdGhlIFdlYlZpZXcgQ0RQIHNvY2tldCBhdCAke3RhcmdldC53ZWJTb2NrZXREZWJ1Z2dlclVybCA/PyAnJ30uYCkpO1xuICAgICAgfSwgeyBvbmNlOiB0cnVlIH0pO1xuICAgIH0pO1xuICAgIGxvZyhgW3dlYnZpZXctY2RwXSBBdHRhY2hlZCB0byBXZWJWaWV3IHRhcmdldCBcIiR7dGFyZ2V0LnRpdGxlID8/ICcnfVwiYCk7XG5cbiAgICByZXR1cm4gbmV3IFdlYlZpZXdDZHBDb25uZWN0aW9uKHdlYlNvY2tldCwgZGV2aWNlSWQsIHBvcnQpO1xuICB9IGNhdGNoIChlcnJvcjogdW5rbm93bikge1xuICAgIGF3YWl0IHJlbW92ZUZvcndhcmQoZGV2aWNlSWQsIHBvcnQpO1xuICAgIHRocm93IGVycm9yO1xuICB9XG59XG5cbi8qIHY4IGlnbm9yZSBzdG9wICovXG5cbi8qKlxuICogRmluZHMgYSBwb3J0IGFscmVhZHkgZm9yd2FyZGVkIHRvIHRoaXMgZGV2aWNlIHNvY2tldCwgc28gcmVwZWF0ZWQgcnVucyByZXVzZSBvbmUgZm9yd2FyZC5cbiAqXG4gKiBXaXRob3V0IHRoaXMgZXZlcnkgcnVuIGFsbG9jYXRlcyBhIGZyZXNoIHBvcnQsIGFuZCBhbnkgcnVuIHRoYXQgZXhpdHMgd2l0aG91dCB0aGUgYXN5bmNcbiAqIHtAbGluayBXZWJWaWV3Q2RwQ29ubmVjdGlvbi5kaXNwb3NlfSBcdTIwMTQgYW4gYWJydXB0IHdvcmtlciBleGl0LCB3aGVyZSBvbmx5IHRoZSBzeW5jaHJvbm91cyB0ZWFyZG93blxuICogcGF0aCBydW5zIFx1MjAxNCBsZWF2ZXMgaXRzIGZvcndhcmQgYmVoaW5kIGZvcmV2ZXIuIFJldXNlIGJvdW5kcyB0aGF0IHRvIGEgc2luZ2xlIGZvcndhcmQgcGVyIHNvY2tldFxuICogcmF0aGVyIHRoYW4gb25lIHBlciBydW4uXG4gKlxuICogQHBhcmFtIGZvcndhcmRMaXN0IC0gVGhlIG91dHB1dCBvZiBgYWRiIGZvcndhcmQgLS1saXN0YC5cbiAqIEBwYXJhbSBkZXZpY2VJZCAtIFRoZSBhZGIgZGV2aWNlIGlkIHRvIG1hdGNoLlxuICogQHBhcmFtIHNvY2tldE5hbWUgLSBUaGUgYWJzdHJhY3Qgc29ja2V0IG5hbWUgdG8gbWF0Y2guXG4gKiBAcmV0dXJucyBUaGUgYWxyZWFkeS1mb3J3YXJkZWQgbG9jYWwgcG9ydCwgb3IgYHVuZGVmaW5lZGAgd2hlbiB0aGVyZSBpcyBub25lLlxuICovXG5leHBvcnQgZnVuY3Rpb24gcGFyc2VGb3J3YXJkZWRQb3J0KGZvcndhcmRMaXN0OiBzdHJpbmcsIGRldmljZUlkOiBzdHJpbmcsIHNvY2tldE5hbWU6IHN0cmluZyk6IG51bWJlciB8IHVuZGVmaW5lZCB7XG4gIGZvciAoY29uc3QgbGluZSBvZiBmb3J3YXJkTGlzdC5zcGxpdCgnXFxuJykpIHtcbiAgICAvLyBgYWRiIGZvcndhcmQgLS1saXN0YCBwcmludHMgYDxkZXZpY2VJZD4gdGNwOjxwb3J0PiBsb2NhbGFic3RyYWN0Ojxzb2NrZXROYW1lPmAuXG4gICAgY29uc3QgW2xpbmVEZXZpY2VJZCwgbG9jYWwsIHJlbW90ZV0gPSBsaW5lLnRyaW0oKS5zcGxpdCgvXFxzKy8sIEZPUldBUkRfTElTVF9DT0xVTU5fQ09VTlQpO1xuICAgIGlmIChsaW5lRGV2aWNlSWQgIT09IGRldmljZUlkIHx8IHJlbW90ZSAhPT0gYGxvY2FsYWJzdHJhY3Q6JHtzb2NrZXROYW1lfWAgfHwgIWxvY2FsPy5zdGFydHNXaXRoKCd0Y3A6JykpIHtcbiAgICAgIGNvbnRpbnVlO1xuICAgIH1cblxuICAgIGNvbnN0IHBvcnQgPSBOdW1iZXIucGFyc2VJbnQobG9jYWwuc2xpY2UoJ3RjcDonLmxlbmd0aCksIERFQ0lNQUxfUkFESVgpO1xuICAgIGlmIChOdW1iZXIuaXNTYWZlSW50ZWdlcihwb3J0KSkge1xuICAgICAgcmV0dXJuIHBvcnQ7XG4gICAgfVxuICB9XG5cbiAgcmV0dXJuIHVuZGVmaW5lZDtcbn1cblxuLyoqXG4gKiBQaWNrcyB0aGUgV2ViVmlldydzIGRldnRvb2xzIHNvY2tldCBuYW1lIG91dCBvZiBgL3Byb2MvbmV0L3VuaXhgLlxuICpcbiAqIEEgZGV2aWNlIGNhbiBob3N0IHNldmVyYWwgZGVidWdnYWJsZSBXZWJWaWV3cyAob3RoZXIgYXBwcywgYSBsZWZ0b3ZlciBwcm9jZXNzKSwgc28gdGhlIGFwcCdzIG93biBwaWQgaXNcbiAqIHdoYXQgZGlzYW1iaWd1YXRlcyB0aGVtLiBXaGVuIG5vIHNvY2tldCBtYXRjaGVzIHRoYXQgcGlkIHRoZSBzb2xlIHJlbWFpbmluZyBjYW5kaWRhdGUgaXMgdXNlZCBcdTIwMTQgYVxuICogV2ViVmlldyB3aG9zZSBzb2NrZXQgaXMgbmFtZWQgYWZ0ZXIgYSBjaGlsZCBwcm9jZXNzIHJhdGhlciB0aGFuIHRoZSBvbmUgYHBpZG9mYCByZXBvcnRlZCBzdGlsbCBoYXMgdG8gYmVcbiAqIHJlYWNoYWJsZSBcdTIwMTQgYnV0IHR3byB1bmF0dHJpYnV0YWJsZSBjYW5kaWRhdGVzIGlzIGFtYmlndW91cyBlbm91Z2ggdG8gcmVmdXNlLlxuICpcbiAqIEBwYXJhbSBwcm9jTmV0VW5peCAtIFRoZSBjb250ZW50cyBvZiBgL3Byb2MvbmV0L3VuaXhgLlxuICogQHBhcmFtIHBpZCAtIFRoZSBhcHBsaWNhdGlvbidzIHByb2Nlc3MgaWQuXG4gKiBAcmV0dXJucyBUaGUgc29ja2V0IG5hbWUsIGUuZy4gYHdlYnZpZXdfZGV2dG9vbHNfcmVtb3RlXzE4MDU2YC5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHBhcnNlV2ViVmlld0RldnRvb2xzU29ja2V0TmFtZShwcm9jTmV0VW5peDogc3RyaW5nLCBwaWQ6IHN0cmluZyk6IHN0cmluZyB7XG4gIC8vIFRoZSB3aG9sZSBtYXRjaCBtaW51cyBpdHMgbGVhZGluZyBgQGAsIHJhdGhlciB0aGFuIGEgbmFtZWQgY2FwdHVyZSBncm91cDogYSBtYW5kYXRvcnkgZ3JvdXAgaXMgYWx3YXlzXG4gIC8vIFByZXNlbnQgb25jZSB0aGUgcGF0dGVybiBoYXMgbWF0Y2hlZCwgc28gYG1hdGNoLmdyb3Vwcz8uWyduYW1lJ10gPz8gJydgIHdvdWxkIGxlYXZlIGJlaGluZCB0d28gYnJhbmNoZXNcbiAgLy8gTm8gaW5wdXQgY2FuIGV2ZXIgcmVhY2ggXHUyMDE0IGFuZCB0aGlzIGZpbGUgaXMgbWVhc3VyZWQgYWdhaW5zdCBhIDEwMCUgYnJhbmNoIGdhdGUuXG4gIGNvbnN0IG5hbWVzID0gW1xuICAgIC4uLm5ldyBTZXQoWy4uLnByb2NOZXRVbml4Lm1hdGNoQWxsKC9Ad2Vidmlld19kZXZ0b29sc19yZW1vdGVfXFx3Ky9nKV1cbiAgICAgIC5tYXAoKG1hdGNoKSA9PiBtYXRjaFswXS5zbGljZSgnQCcubGVuZ3RoKSkpXG4gIF07XG5cbiAgLy8gRGVzdHJ1Y3R1cmVkIHJhdGhlciB0aGFuIGluZGV4ZWQgZm9yIHRoZSBzYW1lIHJlYXNvbjogYHNvbGVOYW1lYCBjYXJyaWVzIHRoZSBcInRoZXJlIGlzIGF0IGxlYXN0IG9uZVwiXG4gIC8vIEZhY3QgaW4gdGhlIHR5cGUsIHNvIG5laXRoZXIgdGhlIGVtcHR5IGNoZWNrIGJlbG93IG5vciB0aGUgc2luZ2xlLWNhbmRpZGF0ZSBvbmUgbGVhdmVzIGEgZGVhZCBicmFuY2guXG4gIGNvbnN0IFtzb2xlTmFtZSwgLi4ub3RoZXJOYW1lc10gPSBuYW1lcztcblxuICBpZiAoc29sZU5hbWUgPT09IHVuZGVmaW5lZCkge1xuICAgIHRocm93IG5ldyBFcnJvcihcbiAgICAgICdObyBgd2Vidmlld19kZXZ0b29sc19yZW1vdGVfKmAgc29ja2V0IG9uIHRoZSBkZXZpY2UuIE9ic2lkaWFuIE1vYmlsZSBpcyBub3QgcnVubmluZywgb3IgaXRzIFdlYlZpZXcgJ1xuICAgICAgICArICdkZWJ1Z2dlciBpcyBkaXNhYmxlZC4nXG4gICAgKTtcbiAgfVxuXG4gIGNvbnN0IGV4YWN0TmFtZSA9IGB3ZWJ2aWV3X2RldnRvb2xzX3JlbW90ZV8ke3BpZH1gO1xuICBpZiAobmFtZXMuaW5jbHVkZXMoZXhhY3ROYW1lKSkge1xuICAgIHJldHVybiBleGFjdE5hbWU7XG4gIH1cblxuICBpZiAob3RoZXJOYW1lcy5sZW5ndGggPT09IDApIHtcbiAgICByZXR1cm4gc29sZU5hbWU7XG4gIH1cblxuICB0aHJvdyBuZXcgRXJyb3IoXG4gICAgYE5vIFxcYCR7ZXhhY3ROYW1lfVxcYCBzb2NrZXQsIGFuZCAke1N0cmluZyhuYW1lcy5sZW5ndGgpfSBvdGhlciBkZWJ1Z2dhYmxlIFdlYlZpZXdzIGFyZSBwcmVzZW50IGBcbiAgICAgICsgYCgke25hbWVzLmpvaW4oJywgJyl9KSwgc28gdGhlIHJpZ2h0IG9uZSBjYW5ub3QgYmUgY2hvc2VuLmBcbiAgKTtcbn1cblxuLyoqXG4gKiBQaWNrcyB0aGUgT2JzaWRpYW4gcGFnZSB0YXJnZXQgb3V0IG9mIHRoZSBkZWJ1Z2dlcidzIGAvanNvbmAgbGlzdC5cbiAqXG4gKiBAcGFyYW0gdGFyZ2V0cyAtIFRoZSBgL2pzb25gIHJlc3BvbnNlLlxuICogQHJldHVybnMgVGhlIHBhZ2UgdGFyZ2V0IHRvIGF0dGFjaCB0by5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHNlbGVjdFdlYlZpZXdQYWdlVGFyZ2V0KHRhcmdldHM6IHJlYWRvbmx5IENkcFRhcmdldFtdKTogQ2RwVGFyZ2V0IHtcbiAgY29uc3QgdGFyZ2V0ID0gdGFyZ2V0cy5maW5kKChjYW5kaWRhdGUpID0+IGNhbmRpZGF0ZS50eXBlID09PSAncGFnZScgJiYgQm9vbGVhbihjYW5kaWRhdGUud2ViU29ja2V0RGVidWdnZXJVcmwpKVxuICAgID8/IHRhcmdldHMuZmluZCgoY2FuZGlkYXRlKSA9PiBCb29sZWFuKGNhbmRpZGF0ZS53ZWJTb2NrZXREZWJ1Z2dlclVybCkpO1xuXG4gIGlmICghdGFyZ2V0KSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKCdUaGUgV2ViVmlldyBkZWJ1Z2dlciBsaXN0ZWQgbm8gdGFyZ2V0IHdpdGggYSBXZWJTb2NrZXQgZW5kcG9pbnQuJyk7XG4gIH1cblxuICByZXR1cm4gdGFyZ2V0O1xufVxuXG4vKiB2OCBpZ25vcmUgc3RhcnQgLS0gSW50ZWdyYXRpb24tdGltZSBjb2RlIChhZGIgc2hlbGwtb3V0cykuIENvdmVyZWQgYnkgdGhlIEFuZHJvaWQgaW50ZWdyYXRpb24gdGVzdHMsIG5vdCBieSB1bml0IHRlc3RzLiAqL1xuXG4vKipcbiAqIFJ1bnMgYW4gYWRiIGNvbW1hbmQgYWdhaW5zdCBvbmUgZGV2aWNlLlxuICpcbiAqIEBwYXJhbSBkZXZpY2VJZCAtIFRoZSBhZGIgZGV2aWNlIGlkLlxuICogQHBhcmFtIGNvbW1hbmRBcmd1bWVudHMgLSBUaGUgYWRiIGFyZ3VtZW50cyBhZnRlciBgLXMgPGRldmljZUlkPmAuXG4gKiBAcmV0dXJucyBUcmltbWVkIHN0ZG91dC5cbiAqL1xuYXN5bmMgZnVuY3Rpb24gYWRiKGRldmljZUlkOiBzdHJpbmcsIGNvbW1hbmRBcmd1bWVudHM6IHN0cmluZ1tdKTogUHJvbWlzZTxzdHJpbmc+IHtcbiAgY29uc3Qgc3Rkb3V0ID0gYXdhaXQgZXhlYyhbJ2FkYicsICctcycsIGRldmljZUlkLCAuLi5jb21tYW5kQXJndW1lbnRzXSwge1xuICAgIGlzUXVpZXQ6IHRydWUsXG4gICAgdGltZW91dEluTWlsbGlzZWNvbmRzOiBBREJfVElNRU9VVF9JTl9NSUxMSVNFQ09ORFNcbiAgfSk7XG5cbiAgcmV0dXJuIHN0ZG91dC50cmltKCk7XG59XG5cbi8qKlxuICogRHJvcHMgYW4gYWRiIHBvcnQgZm9yd2FyZCwgaWdub3JpbmcgdGhlIFwibm90IGZvdW5kXCIgY2FzZS5cbiAqXG4gKiBAcGFyYW0gZGV2aWNlSWQgLSBUaGUgYWRiIGRldmljZSBpZC5cbiAqIEBwYXJhbSBwb3J0IC0gVGhlIGZvcndhcmRlZCBsb2NhbCBwb3J0LlxuICovXG5hc3luYyBmdW5jdGlvbiByZW1vdmVGb3J3YXJkKGRldmljZUlkOiBzdHJpbmcsIHBvcnQ6IG51bWJlcik6IFByb21pc2U8dm9pZD4ge1xuICB0cnkge1xuICAgIGF3YWl0IGV4ZWMoWydhZGInLCAnLXMnLCBkZXZpY2VJZCwgJ2ZvcndhcmQnLCAnLS1yZW1vdmUnLCBgdGNwOiR7U3RyaW5nKHBvcnQpfWBdLCB7XG4gICAgICBpc1F1aWV0OiB0cnVlLFxuICAgICAgc2hvdWxkSWdub3JlRXhpdENvZGU6IHRydWUsXG4gICAgICB0aW1lb3V0SW5NaWxsaXNlY29uZHM6IEFEQl9USU1FT1VUX0lOX01JTExJU0VDT05EU1xuICAgIH0pO1xuICB9IGNhdGNoIHtcbiAgICAvLyBCZXN0IGVmZm9ydDogdGhlIGZvcndhcmQgaXMgcGVyLXJ1biBhbmQgYWRiIGRyb3BzIGl0IHdoZW4gdGhlIGRldmljZSBkaXNjb25uZWN0cyBhbnl3YXkuXG4gIH1cbn1cblxuLyogdjggaWdub3JlIHN0b3AgKi9cbiJdLAogICJtYXBwaW5ncyI6ICJBQWtCQSxTQUFTLG9CQUFvQjtBQUk3QixTQUFTLFlBQVk7QUFDckIsU0FBUyxXQUFXO0FBQ3BCLFNBQVMsb0JBQW9CO0FBRTdCLE1BQU0sOEJBQThCO0FBRXBDLE1BQU0sNEJBQTRCO0FBQ2xDLE1BQU0sZ0JBQWdCO0FBQ3RCLE1BQU0sc0NBQXNDO0FBQzVDLE1BQU0sV0FBVztBQTBEVixNQUFNLHFCQUFxQjtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUEsRUF3QnpCLFlBQTZCLFdBQXVDLFVBQW1DLE1BQWM7QUFBeEY7QUFBdUM7QUFBbUM7QUFDNUcsU0FBSyxVQUFVLGlCQUFpQixXQUFXLENBQUMsVUFBd0I7QUFDbEUsWUFBTSxVQUFVLEtBQUssTUFBTSxPQUFPLE1BQU0sSUFBSSxDQUFDO0FBQzdDLFVBQUksUUFBUSxXQUFXLFFBQVc7QUFDaEM7QUFBQSxNQUNGO0FBRUEsV0FBSyxjQUFjLElBQUksUUFBUSxNQUFNLElBQUksUUFBUSxVQUFVLENBQUMsQ0FBQztBQUFBLElBQy9ELENBQUM7QUFBQSxFQUNIO0FBQUEsRUFUb0M7QUFBQSxFQUF1QztBQUFBLEVBQW1DO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBLEVBZjlHLElBQVcsU0FBa0I7QUFDM0IsV0FBTyxLQUFLLFVBQVUsZUFBZSxVQUFVO0FBQUEsRUFDakQ7QUFBQSxFQUVpQixnQkFBZ0Isb0JBQUksSUFBNkI7QUFBQSxFQUUxRCxZQUFZO0FBQUE7QUFBQTtBQUFBO0FBQUEsRUF1QnBCLE1BQWEsVUFBeUI7QUFDcEMsU0FBSyxZQUFZO0FBQ2pCLFVBQU0sY0FBYyxLQUFLLFVBQVUsS0FBSyxJQUFJO0FBQUEsRUFD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
|
|
235
|
+
//# sourceMappingURL=data:application/json;base64,ewogICJ2ZXJzaW9uIjogMywKICAic291cmNlcyI6IFsiLi4vLi4vLi4vc3JjL3dlYnZpZXctY2RwLnRzIl0sCiAgInNvdXJjZXNDb250ZW50IjogWyIvKipcbiAqIEBmaWxlXG4gKlxuICogQSBzZWNvbmQsIGluZGVwZW5kZW50IENocm9tZSBEZXZUb29scyBQcm90b2NvbCBjb25uZWN0aW9uIHRvIE9ic2lkaWFuIE1vYmlsZSdzIFdlYlZpZXcsIHVzZWQgdG8gaW5qZWN0XG4gKiAqKnRydXN0ZWQqKiBpbnB1dCBvbiBBbmRyb2lkIChzZWUgKipMMzkqKikuXG4gKlxuICogSXQgaXMgZGVsaWJlcmF0ZWx5IHNlcGFyYXRlIGZyb20gdGhlIEFwcGl1bSBzZXNzaW9uIHJhdGhlciB0aGFuIGxheWVyZWQgb24gaXQuIGBBcHBpdW1UcmFuc3BvcnQuZXZhbHVhdGVgXG4gKiBydW5zIHRoZSB3aG9sZSBgZXZhbEluT2JzaWRpYW5gIGNsb3N1cmUgaW5zaWRlIG9uZSBXM0MgKkV4ZWN1dGUgU2NyaXB0Kiwgd2hpY2ggYXdhaXRzIHRoZSByZXR1cm5lZFxuICogcHJvbWlzZSBcdTIwMTQgc28gd2hpbGUgYSBjbG9zdXJlIHNpdHMgd2FpdGluZyBvbiBgbGliLmNsaWNrRWxlbWVudCguLi4pYCwgdGhlIFdlYkRyaXZlciBzZXNzaW9uIGlzIGJ1c3kgYW5kXG4gKiBjYW5ub3QgYmUgYXNrZWQgdG8gZG8gYW55dGhpbmcgZWxzZS4gQ0RQIGlzIGlkLW11bHRpcGxleGVkIGFuZCBDaHJvbWl1bSBhY2NlcHRzIG11bHRpcGxlIGRlYnVnZ2VyXG4gKiBjbGllbnRzLCBzbyB0aGlzIHNvY2tldCBzdGF5cyBmcmVlIGV4YWN0bHkgd2hlbiB0aGUgQXBwaXVtIG9uZSBkb2VzIG5vdC4gVGhhdCBpcyB3aGF0IGxldHMgdGhlIHJlbmRlcmVyXG4gKiBjYWxsIGJhY2sgb3V0IHRvIHRoZSBob3N0IG1pZC1jbG9zdXJlLlxuICpcbiAqIFJlYWNoaW5nIHRoZSBXZWJWaWV3J3MgZGVidWdnZXIgaXMgYSB0d28tc3RlcDogdGhlIGFwcCBwdWJsaXNoZXMgYW4gYWJzdHJhY3QgdW5peCBzb2NrZXQgbmFtZWRcbiAqIGB3ZWJ2aWV3X2RldnRvb2xzX3JlbW90ZV88cGlkPmAsIGBhZGIgZm9yd2FyZGAgbWFwcyBpdCB0byBhIGxvY2FsIFRDUCBwb3J0LCBhbmQgdGhlIHVzdWFsIGAvanNvbmBcbiAqIGVuZHBvaW50IHRoZW4gbGlzdHMgdGhlIHBhZ2UgdGFyZ2V0cy5cbiAqL1xuXG5pbXBvcnQgeyBleGVjRmlsZVN5bmMgfSBmcm9tICdub2RlOmNoaWxkX3Byb2Nlc3MnO1xuXG5pbXBvcnQgdHlwZSB7IENkcElucHV0Q29tbWFuZCB9IGZyb20gJy4vbW9iaWxlLWlucHV0Lm1qcyc7XG5cbmltcG9ydCB7IGV4ZWMgfSBmcm9tICcuL2V4ZWMubWpzJztcbmltcG9ydCB7IGxvZyB9IGZyb20gJy4vbG9nLm1qcyc7XG5pbXBvcnQgeyBwaWNrRnJlZVBvcnQgfSBmcm9tICcuL29ic2lkaWFuLWluc3RhbmNlLm1qcyc7XG5cbmNvbnN0IEFEQl9USU1FT1VUX0lOX01JTExJU0VDT05EUyA9IDE1XzAwMDtcbi8vIGBhZGIgZm9yd2FyZCAtLWxpc3RgIHByaW50cyB0aHJlZSBjb2x1bW5zOiBgPGRldmljZUlkPiB0Y3A6PHBvcnQ+IGxvY2FsYWJzdHJhY3Q6PHNvY2tldE5hbWU+YC5cbmNvbnN0IEZPUldBUkRfTElTVF9DT0xVTU5fQ09VTlQgPSAzO1xuY29uc3QgREVDSU1BTF9SQURJWCA9IDEwO1xuY29uc3QgQ0RQX0NPTU1BTkRfVElNRU9VVF9JTl9NSUxMSVNFQ09ORFMgPSAzMF8wMDA7XG5jb25zdCBDRFBfSE9TVCA9ICcxMjcuMC4wLjEnO1xuXG4vKipcbiAqIE9uZSBlbnRyeSBvZiB0aGUgZGVidWdnZXIncyBgL2pzb25gIHRhcmdldCBsaXN0LlxuICovXG5leHBvcnQgaW50ZXJmYWNlIENkcFRhcmdldCB7XG4gIHJlYWRvbmx5IHRpdGxlPzogc3RyaW5nO1xuICByZWFkb25seSB0eXBlPzogc3RyaW5nO1xuICByZWFkb25seSB1cmw/OiBzdHJpbmc7XG4gIHJlYWRvbmx5IHdlYlNvY2tldERlYnVnZ2VyVXJsPzogc3RyaW5nO1xufVxuXG4vKipcbiAqIFBhcmFtZXRlcnMgZm9yIHtAbGluayBjb25uZWN0VG9XZWJWaWV3Q2RwfS5cbiAqL1xuZXhwb3J0IGludGVyZmFjZSBDb25uZWN0VG9XZWJWaWV3Q2RwUGFyYW1zIHtcbiAgLyoqXG4gICAqIFRoZSBBbmRyb2lkIGFwcGxpY2F0aW9uIGlkIHdob3NlIFdlYlZpZXcgdG8gYXR0YWNoIHRvLCBlLmcuIGBtZC5vYnNpZGlhbmAuXG4gICAqL1xuICByZWFkb25seSBhcHBJZDogc3RyaW5nO1xuXG4gIC8qKlxuICAgKiBUaGUgYWRiIGRldmljZSBpZCAoYGVtdWxhdG9yLTU1NTRgLCBhIHNlcmlhbCkgdG8gcnVuIGFkYiBhZ2FpbnN0LlxuICAgKi9cbiAgcmVhZG9ubHkgZGV2aWNlSWQ6IHN0cmluZztcbn1cblxuLyoqXG4gKiBUaGUgZXJyb3IgaGFsZiBvZiBhIGZhaWxlZCBDRFAgY29tbWFuZCByZXNwb25zZS5cbiAqL1xuaW50ZXJmYWNlIENkcEVycm9yIHtcbiAgcmVhZG9ubHkgbWVzc2FnZT86IHN0cmluZztcbn1cblxuLyoqXG4gKiBIYW5kbGVzIGEgQ0RQIGV2ZW50LlxuICovXG50eXBlIENkcEV2ZW50SGFuZGxlciA9IChwYXJhbXM6IFJlY29yZDxzdHJpbmcsIHVua25vd24+KSA9PiB2b2lkO1xuXG4vKipcbiAqIEEgQ0RQIG1lc3NhZ2U6IGVpdGhlciBhIHJlc3BvbnNlIHRvIGEgY29tbWFuZCAoYGlkYCkgb3IgYW4gZXZlbnQgKGBtZXRob2RgKS5cbiAqL1xuaW50ZXJmYWNlIENkcE1lc3NhZ2Uge1xuICByZWFkb25seSBlcnJvcj86IENkcEVycm9yO1xuICByZWFkb25seSBpZD86IG51bWJlcjtcbiAgcmVhZG9ubHkgbWV0aG9kPzogc3RyaW5nO1xuICByZWFkb25seSBwYXJhbXM/OiBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPjtcbiAgcmVhZG9ubHkgcmVzdWx0PzogUmVjb3JkPHN0cmluZywgdW5rbm93bj47XG59XG5cbi8qIHY4IGlnbm9yZSBzdGFydCAtLSBJbnRlZ3JhdGlvbi10aW1lIGNvZGUgKGEgbGl2ZSBXZWJTb2NrZXQgdG8gYSBXZWJWaWV3LCBhZGIgcG9ydCBmb3J3YXJkaW5nKS4gQ292ZXJlZCBieSB0aGUgQW5kcm9pZCBpbnRlZ3JhdGlvbiB0ZXN0cywgbm90IGJ5IHVuaXQgdGVzdHMuIEl0IGVuZHMgYmVmb3JlIGBwYXJzZUZvcndhcmRlZFBvcnRgOiBgcGVyZmVjdGlvbmlzdC9zb3J0LW1vZHVsZXNgIHBsYWNlcyB0aGUgcHVyZSwgdW5pdC10ZXN0ZWQgaGVscGVycyBBRlRFUiB0aGlzIGNsYXNzIGFuZCBgY29ubmVjdFRvV2ViVmlld0NkcGAsIHNvIHRoZXkgbXVzdCBzdGF5IG1lYXN1cmVkLiAqL1xuXG4vKipcbiAqIEFuIG9wZW4gQ0RQIGNvbm5lY3Rpb24gdG8gYSBXZWJWaWV3LlxuICpcbiAqIENvbW1hbmRzIGFyZSBpZC1tdWx0aXBsZXhlZCwgc28gYSBjb21tYW5kIGlzc3VlZCBmcm9tIGluc2lkZSBhbiBldmVudCBoYW5kbGVyIGNvbXBsZXRlcyB3aGlsZSBhbiBlYXJsaWVyXG4gKiBgUnVudGltZS5ldmFsdWF0ZWAgaXMgc3RpbGwgYXdhaXRpbmcgaXRzIHByb21pc2UgXHUyMDE0IHdoaWNoIGlzIHRoZSB3aG9sZSByZWFzb24gdGhpcyBjbGFzcyBleGlzdHMuXG4gKi9cbmV4cG9ydCBjbGFzcyBXZWJWaWV3Q2RwQ29ubmVjdGlvbiB7XG4gIC8qKlxuICAgKiBXaGV0aGVyIHRoZSBzb2NrZXQgaXMgc3RpbGwgdXNhYmxlLlxuICAgKlxuICAgKiBSZXN0YXJ0aW5nIHRoZSBhcHAgdGVhcnMgaXRzIFdlYlZpZXcgZG93biBhbmQgdGFrZXMgdGhlIGRlYnVnZ2VyIHRhcmdldCB3aXRoIGl0LCBzbyBhIGNhY2hlZFxuICAgKiBjb25uZWN0aW9uIGhhcyB0byBiZSByZS1jaGVja2VkIHJhdGhlciB0aGFuIGFzc3VtZWQgbGl2ZS5cbiAgICpcbiAgICogQHJldHVybnMgYHRydWVgIHdoaWxlIHRoZSBzb2NrZXQgaXMgb3Blbi5cbiAgICovXG4gIHB1YmxpYyBnZXQgaXNPcGVuKCk6IGJvb2xlYW4ge1xuICAgIHJldHVybiB0aGlzLndlYlNvY2tldC5yZWFkeVN0YXRlID09PSBXZWJTb2NrZXQuT1BFTjtcbiAgfVxuXG4gIHByaXZhdGUgcmVhZG9ubHkgZXZlbnRIYW5kbGVycyA9IG5ldyBNYXA8c3RyaW5nLCBDZHBFdmVudEhhbmRsZXI+KCk7XG5cbiAgcHJpdmF0ZSBtZXNzYWdlSWQgPSAwO1xuXG4gIC8qKlxuICAgKiBXcmFwcyBhbiBhbHJlYWR5LW9wZW4gZGVidWdnZXIgc29ja2V0LCBwbHVzIHdoYXQgaXMgbmVlZGVkIHRvIHRlYXIgaXRzIHBvcnQgZm9yd2FyZCBkb3duLlxuICAgKlxuICAgKiBAcGFyYW0gd2ViU29ja2V0IC0gVGhlIG9wZW4gZGVidWdnZXIgc29ja2V0LlxuICAgKiBAcGFyYW0gZGV2aWNlSWQgLSBUaGUgYWRiIGRldmljZSBpZCwgbmVlZGVkIHRvIGRyb3AgdGhlIHBvcnQgZm9yd2FyZCBvbiBkaXNwb3NlLlxuICAgKiBAcGFyYW0gcG9ydCAtIFRoZSBmb3J3YXJkZWQgbG9jYWwgcG9ydC5cbiAgICovXG4gIHB1YmxpYyBjb25zdHJ1Y3Rvcihwcml2YXRlIHJlYWRvbmx5IHdlYlNvY2tldDogV2ViU29ja2V0LCBwcml2YXRlIHJlYWRvbmx5IGRldmljZUlkOiBzdHJpbmcsIHByaXZhdGUgcmVhZG9ubHkgcG9ydDogbnVtYmVyKSB7XG4gICAgdGhpcy53ZWJTb2NrZXQuYWRkRXZlbnRMaXN0ZW5lcignbWVzc2FnZScsIChldmVudDogTWVzc2FnZUV2ZW50KSA9PiB7XG4gICAgICBjb25zdCBtZXNzYWdlID0gSlNPTi5wYXJzZShTdHJpbmcoZXZlbnQuZGF0YSkpIGFzIENkcE1lc3NhZ2U7XG4gICAgICBpZiAobWVzc2FnZS5tZXRob2QgPT09IHVuZGVmaW5lZCkge1xuICAgICAgICByZXR1cm47XG4gICAgICB9XG5cbiAgICAgIHRoaXMuZXZlbnRIYW5kbGVycy5nZXQobWVzc2FnZS5tZXRob2QpPy4obWVzc2FnZS5wYXJhbXMgPz8ge30pO1xuICAgIH0pO1xuICB9XG5cbiAgLyoqXG4gICAqIENsb3NlcyB0aGUgc29ja2V0IGFuZCBkcm9wcyB0aGUgYWRiIHBvcnQgZm9yd2FyZC5cbiAgICovXG4gIHB1YmxpYyBhc3luYyBkaXNwb3NlKCk6IFByb21pc2U8dm9pZD4ge1xuICAgIHRoaXMuY2xvc2VTb2NrZXQoKTtcbiAgICBhd2FpdCByZW1vdmVGb3J3YXJkKHRoaXMuZGV2aWNlSWQsIHRoaXMucG9ydCk7XG4gIH1cblxuICAvKipcbiAgICogU3luY2hyb25vdXMgZGlzcG9zYWwsIGZvciBgcHJvY2Vzcy5vbignZXhpdCcpYCBoYW5kbGVycyB3aGVyZSBhc3luYyB3b3JrIGNhbm5vdCBydW4uXG4gICAqXG4gICAqIFdpdGhvdXQgdGhpcyBhbiBhYnJ1cHQgd29ya2VyIGV4aXQgbGVhdmVzIHRoZSBwb3J0IGZvcndhcmQgYmVoaW5kIFx1MjAxNCB0aGUgYXN5bmMge0BsaW5rIGRpc3Bvc2V9IGFib3ZlXG4gICAqIG5ldmVyIGdldHMgYSB0dXJuLlxuICAgKi9cbiAgcHVibGljIGRpc3Bvc2VTeW5jKCk6IHZvaWQge1xuICAgIHRoaXMuY2xvc2VTb2NrZXQoKTtcbiAgICB0cnkge1xuICAgICAgZXhlY0ZpbGVTeW5jKCdhZGInLCBbJy1zJywgdGhpcy5kZXZpY2VJZCwgJ2ZvcndhcmQnLCAnLS1yZW1vdmUnLCBgdGNwOiR7U3RyaW5nKHRoaXMucG9ydCl9YF0sIHtcbiAgICAgICAgc3RkaW86ICdpZ25vcmUnLFxuICAgICAgICB0aW1lb3V0OiBBREJfVElNRU9VVF9JTl9NSUxMSVNFQ09ORFNcbiAgICAgIH0pO1xuICAgIH0gY2F0Y2gge1xuICAgICAgLy8gQmVzdCBlZmZvcnQ6IGFkYiBkcm9wcyBldmVyeSBmb3J3YXJkIHdoZW4gdGhlIGRldmljZSBkaXNjb25uZWN0cyBhbnl3YXkuXG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqIFN1YnNjcmliZXMgdG8gYSBDRFAgZXZlbnQuIE9uZSBoYW5kbGVyIHBlciBtZXRob2Q7IHN1YnNjcmliaW5nIGFnYWluIHJlcGxhY2VzIGl0LlxuICAgKlxuICAgKiBAcGFyYW0gbWV0aG9kIC0gVGhlIENEUCBldmVudCBuYW1lLCBlLmcuIGBSdW50aW1lLmJpbmRpbmdDYWxsZWRgLlxuICAgKiBAcGFyYW0gaGFuZGxlciAtIENhbGxlZCB3aXRoIHRoZSBldmVudCBwYXJhbWV0ZXJzLlxuICAgKi9cbiAgcHVibGljIG9uKG1ldGhvZDogc3RyaW5nLCBoYW5kbGVyOiBDZHBFdmVudEhhbmRsZXIpOiB2b2lkIHtcbiAgICB0aGlzLmV2ZW50SGFuZGxlcnMuc2V0KG1ldGhvZCwgaGFuZGxlcik7XG4gIH1cblxuICAvKipcbiAgICogU2VuZHMgYSBDRFAgY29tbWFuZCBhbmQgd2FpdHMgZm9yIGl0cyByZXNwb25zZS5cbiAgICpcbiAgICogQHBhcmFtIG1ldGhvZCAtIFRoZSBDRFAgbWV0aG9kIG5hbWUuXG4gICAqIEBwYXJhbSBwYXJhbXMgLSBUaGUgQ0RQIG1ldGhvZCBwYXJhbWV0ZXJzLlxuICAgKiBAcmV0dXJucyBUaGUgY29tbWFuZCByZXN1bHQuXG4gICAqL1xuICBwdWJsaWMgc2VuZChtZXRob2Q6IHN0cmluZywgcGFyYW1zOiBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPiA9IHt9KTogUHJvbWlzZTxSZWNvcmQ8c3RyaW5nLCB1bmtub3duPj4ge1xuICAgIGNvbnN0IGlkID0gKyt0aGlzLm1lc3NhZ2VJZDtcblxuICAgIHJldHVybiBuZXcgUHJvbWlzZTxSZWNvcmQ8c3RyaW5nLCB1bmtub3duPj4oKHJlc29sdmUsIHJlamVjdCkgPT4ge1xuICAgICAgY29uc3QgdGltZW91dCA9IHNldFRpbWVvdXQoKCkgPT4ge1xuICAgICAgICB0aGlzLndlYlNvY2tldC5yZW1vdmVFdmVudExpc3RlbmVyKCdtZXNzYWdlJywgaGFuZGxlcik7XG4gICAgICAgIHJlamVjdChuZXcgRXJyb3IoYFdlYlZpZXcgQ0RQIGNvbW1hbmQgdGltZWQgb3V0IGFmdGVyICR7U3RyaW5nKENEUF9DT01NQU5EX1RJTUVPVVRfSU5fTUlMTElTRUNPTkRTKX1tczogJHttZXRob2R9YCkpO1xuICAgICAgfSwgQ0RQX0NPTU1BTkRfVElNRU9VVF9JTl9NSUxMSVNFQ09ORFMpO1xuXG4gICAgICBjb25zdCBoYW5kbGVyID0gKGV2ZW50OiBNZXNzYWdlRXZlbnQpOiB2b2lkID0+IHtcbiAgICAgICAgY29uc3QgbWVzc2FnZSA9IEpTT04ucGFyc2UoU3RyaW5nKGV2ZW50LmRhdGEpKSBhcyBDZHBNZXNzYWdlO1xuICAgICAgICBpZiAobWVzc2FnZS5pZCAhPT0gaWQpIHtcbiAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cblxuICAgICAgICBjbGVhclRpbWVvdXQodGltZW91dCk7XG4gICAgICAgIHRoaXMud2ViU29ja2V0LnJlbW92ZUV2ZW50TGlzdGVuZXIoJ21lc3NhZ2UnLCBoYW5kbGVyKTtcbiAgICAgICAgaWYgKG1lc3NhZ2UuZXJyb3IpIHtcbiAgICAgICAgICByZWplY3QobmV3IEVycm9yKGBXZWJWaWV3IENEUCBjb21tYW5kICR7bWV0aG9kfSBmYWlsZWQ6ICR7bWVzc2FnZS5lcnJvci5tZXNzYWdlID8/ICd1bmtub3duIGVycm9yJ31gKSk7XG4gICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG5cbiAgICAgICAgcmVzb2x2ZShtZXNzYWdlLnJlc3VsdCA/PyB7fSk7XG4gICAgICB9O1xuXG4gICAgICB0aGlzLndlYlNvY2tldC5hZGRFdmVudExpc3RlbmVyKCdtZXNzYWdlJywgaGFuZGxlcik7XG4gICAgICB0aGlzLndlYlNvY2tldC5zZW5kKEpTT04uc3RyaW5naWZ5KHsgaWQsIG1ldGhvZCwgcGFyYW1zIH0pKTtcbiAgICB9KTtcbiAgfVxuXG4gIC8qKlxuICAgKiBTZW5kcyBhbiBvcmRlcmVkIGNvbW1hbmQgc2VxdWVuY2UsIG9uZSBjb21tYW5kIGF0IGEgdGltZS5cbiAgICpcbiAgICogRWFjaCBjb21tYW5kIGlzIGF3YWl0ZWQgYmVmb3JlIHRoZSBuZXh0IGlzIHNlbnQsIHdoaWNoIGlzIHRoZSBvbmx5IG9yZGVyaW5nIGd1YXJhbnRlZSBhbiBpbnB1dFxuICAgKiBzZXF1ZW5jZSBuZWVkcyBcdTIwMTQgYSBsb25nLXByZXNzIGhvbGRzIGl0c2VsZiBmb3IgaXRzIG93biBgZHVyYXRpb25gIHJhdGhlciB0aGFuIGFza2luZyB0aGUgaG9zdCB0b1xuICAgKiBzbGVlcCBiZXR3ZWVuIHR3byB0b3VjaGVzLCBzbyB0aGVyZSBpcyBubyBpbnRlci1jb21tYW5kIGRlbGF5IHRvIGhvbm9yLlxuICAgKlxuICAgKiBAcGFyYW0gY29tbWFuZHMgLSBUaGUgY29tbWFuZHMgdG8gc2VuZCwgaW4gb3JkZXIuXG4gICAqL1xuICBwdWJsaWMgYXN5bmMgc2VuZEFsbChjb21tYW5kczogcmVhZG9ubHkgQ2RwSW5wdXRDb21tYW5kW10pOiBQcm9taXNlPHZvaWQ+IHtcbiAgICBmb3IgKGNvbnN0IGNvbW1hbmQgb2YgY29tbWFuZHMpIHtcbiAgICAgIGF3YWl0IHRoaXMuc2VuZChjb21tYW5kLm1ldGhvZCwgY29tbWFuZC5wYXJhbXMpO1xuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKiBDbG9zZXMgdGhlIGRlYnVnZ2VyIHNvY2tldCBhbmQgc3RvcHMgcm91dGluZyBpdHMgZXZlbnRzLlxuICAgKi9cbiAgcHJpdmF0ZSBjbG9zZVNvY2tldCgpOiB2b2lkIHtcbiAgICB0aGlzLmV2ZW50SGFuZGxlcnMuY2xlYXIoKTtcbiAgICBpZiAodGhpcy53ZWJTb2NrZXQucmVhZHlTdGF0ZSA9PT0gV2ViU29ja2V0Lk9QRU4pIHtcbiAgICAgIHRoaXMud2ViU29ja2V0LmNsb3NlKCk7XG4gICAgfVxuICB9XG59XG5cbi8qKlxuICogT3BlbnMgYSBDRFAgY29ubmVjdGlvbiB0byB0aGUgYXBwJ3MgV2ViVmlldy5cbiAqXG4gKiBAcGFyYW0gcGFyYW1zIC0gV2hpY2ggYXBwIG9uIHdoaWNoIGRldmljZS5cbiAqIEByZXR1cm5zIFRoZSBvcGVuIGNvbm5lY3Rpb24uIERpc3Bvc2UgaXQgdG8gY2xvc2UgdGhlIHNvY2tldCBhbmQgZHJvcCB0aGUgYWRiIHBvcnQgZm9yd2FyZC5cbiAqL1xuZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIGNvbm5lY3RUb1dlYlZpZXdDZHAocGFyYW1zOiBDb25uZWN0VG9XZWJWaWV3Q2RwUGFyYW1zKTogUHJvbWlzZTxXZWJWaWV3Q2RwQ29ubmVjdGlvbj4ge1xuICBjb25zdCB7IGFwcElkLCBkZXZpY2VJZCB9ID0gcGFyYW1zO1xuXG4gIC8vIGBwaWRvZmAgbGlzdHMgZXZlcnkgbWF0Y2hpbmcgcHJvY2VzczsgdGhlIGFwcCdzIG1haW4gb25lIGlzIGZpcnN0LlxuICBjb25zdCBwaWRvZk91dHB1dCA9IGF3YWl0IGFkYihkZXZpY2VJZCwgWydzaGVsbCcsICdwaWRvZicsIGFwcElkXSk7XG4gIGNvbnN0IHBpZCA9IHBpZG9mT3V0cHV0LnNwbGl0KC9cXHMrLywgMSlbMF0gPz8gJyc7XG4gIGlmICghcGlkKSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKGAke2FwcElkfSBpcyBub3QgcnVubmluZyBvbiAke2RldmljZUlkfSwgc28gaXRzIFdlYlZpZXcgaGFzIG5vIGRlYnVnZ2VyIHRvIGF0dGFjaCB0by5gKTtcbiAgfVxuXG4gIGNvbnN0IHByb2NOZXRVbml4ID0gYXdhaXQgYWRiKGRldmljZUlkLCBbJ3NoZWxsJywgJ2NhdCcsICcvcHJvYy9uZXQvdW5peCddKTtcbiAgY29uc3Qgc29ja2V0TmFtZSA9IHBhcnNlV2ViVmlld0RldnRvb2xzU29ja2V0TmFtZShwcm9jTmV0VW5peCwgcGlkKTtcblxuICBjb25zdCBmb3J3YXJkTGlzdCA9IGF3YWl0IGFkYihkZXZpY2VJZCwgWydmb3J3YXJkJywgJy0tbGlzdCddKTtcbiAgY29uc3QgZXhpc3RpbmdQb3J0ID0gcGFyc2VGb3J3YXJkZWRQb3J0KGZvcndhcmRMaXN0LCBkZXZpY2VJZCwgc29ja2V0TmFtZSk7XG4gIGNvbnN0IHBvcnQgPSBleGlzdGluZ1BvcnQgPz8gYXdhaXQgcGlja0ZyZWVQb3J0KCk7XG4gIGlmIChleGlzdGluZ1BvcnQgPT09IHVuZGVmaW5lZCkge1xuICAgIGF3YWl0IGFkYihkZXZpY2VJZCwgWydmb3J3YXJkJywgYHRjcDoke1N0cmluZyhwb3J0KX1gLCBgbG9jYWxhYnN0cmFjdDoke3NvY2tldE5hbWV9YF0pO1xuICAgIGxvZyhgW3dlYnZpZXctY2RwXSBGb3J3YXJkZWQgdGNwOiR7U3RyaW5nKHBvcnQpfSAtPiBsb2NhbGFic3RyYWN0OiR7c29ja2V0TmFtZX0gKCR7YXBwSWR9IHBpZCAke3BpZH0pYCk7XG4gIH0gZWxzZSB7XG4gICAgbG9nKGBbd2Vidmlldy1jZHBdIFJldXNpbmcgZm9yd2FyZCB0Y3A6JHtTdHJpbmcocG9ydCl9IC0+IGxvY2FsYWJzdHJhY3Q6JHtzb2NrZXROYW1lfSAoJHthcHBJZH0gcGlkICR7cGlkfSlgKTtcbiAgfVxuXG4gIHRyeSB7XG4gICAgY29uc3QgcmVzcG9uc2UgPSBhd2FpdCBmZXRjaChgaHR0cDovLyR7Q0RQX0hPU1R9OiR7U3RyaW5nKHBvcnQpfS9qc29uYCk7XG4gICAgY29uc3QgdGFyZ2V0ID0gc2VsZWN0V2ViVmlld1BhZ2VUYXJnZXQoYXdhaXQgcmVzcG9uc2UuanNvbigpIGFzIENkcFRhcmdldFtdKTtcbiAgICBjb25zdCB3ZWJTb2NrZXQgPSBuZXcgV2ViU29ja2V0KHRhcmdldC53ZWJTb2NrZXREZWJ1Z2dlclVybCA/PyAnJyk7XG4gICAgYXdhaXQgbmV3IFByb21pc2U8dm9pZD4oKHJlc29sdmUsIHJlamVjdCkgPT4ge1xuICAgICAgd2ViU29ja2V0LmFkZEV2ZW50TGlzdGVuZXIoJ29wZW4nLCAoKSA9PiB7XG4gICAgICAgIHJlc29sdmUoKTtcbiAgICAgIH0sIHsgb25jZTogdHJ1ZSB9KTtcbiAgICAgIHdlYlNvY2tldC5hZGRFdmVudExpc3RlbmVyKCdlcnJvcicsICgpID0+IHtcbiAgICAgICAgcmVqZWN0KG5ldyBFcnJvcihgQ291bGQgbm90IG9wZW4gdGhlIFdlYlZpZXcgQ0RQIHNvY2tldCBhdCAke3RhcmdldC53ZWJTb2NrZXREZWJ1Z2dlclVybCA/PyAnJ30uYCkpO1xuICAgICAgfSwgeyBvbmNlOiB0cnVlIH0pO1xuICAgIH0pO1xuICAgIGxvZyhgW3dlYnZpZXctY2RwXSBBdHRhY2hlZCB0byBXZWJWaWV3IHRhcmdldCBcIiR7dGFyZ2V0LnRpdGxlID8/ICcnfVwiYCk7XG5cbiAgICByZXR1cm4gbmV3IFdlYlZpZXdDZHBDb25uZWN0aW9uKHdlYlNvY2tldCwgZGV2aWNlSWQsIHBvcnQpO1xuICB9IGNhdGNoIChlcnJvcjogdW5rbm93bikge1xuICAgIGF3YWl0IHJlbW92ZUZvcndhcmQoZGV2aWNlSWQsIHBvcnQpO1xuICAgIHRocm93IGVycm9yO1xuICB9XG59XG5cbi8qIHY4IGlnbm9yZSBzdG9wICovXG5cbi8qKlxuICogRmluZHMgYSBwb3J0IGFscmVhZHkgZm9yd2FyZGVkIHRvIHRoaXMgZGV2aWNlIHNvY2tldCwgc28gcmVwZWF0ZWQgcnVucyByZXVzZSBvbmUgZm9yd2FyZC5cbiAqXG4gKiBXaXRob3V0IHRoaXMgZXZlcnkgcnVuIGFsbG9jYXRlcyBhIGZyZXNoIHBvcnQsIGFuZCBhbnkgcnVuIHRoYXQgZXhpdHMgd2l0aG91dCB0aGUgYXN5bmNcbiAqIHtAbGluayBXZWJWaWV3Q2RwQ29ubmVjdGlvbi5kaXNwb3NlfSBcdTIwMTQgYW4gYWJydXB0IHdvcmtlciBleGl0LCB3aGVyZSBvbmx5IHRoZSBzeW5jaHJvbm91cyB0ZWFyZG93blxuICogcGF0aCBydW5zIFx1MjAxNCBsZWF2ZXMgaXRzIGZvcndhcmQgYmVoaW5kIGZvcmV2ZXIuIFJldXNlIGJvdW5kcyB0aGF0IHRvIGEgc2luZ2xlIGZvcndhcmQgcGVyIHNvY2tldFxuICogcmF0aGVyIHRoYW4gb25lIHBlciBydW4uXG4gKlxuICogQHBhcmFtIGZvcndhcmRMaXN0IC0gVGhlIG91dHB1dCBvZiBgYWRiIGZvcndhcmQgLS1saXN0YC5cbiAqIEBwYXJhbSBkZXZpY2VJZCAtIFRoZSBhZGIgZGV2aWNlIGlkIHRvIG1hdGNoLlxuICogQHBhcmFtIHNvY2tldE5hbWUgLSBUaGUgYWJzdHJhY3Qgc29ja2V0IG5hbWUgdG8gbWF0Y2guXG4gKiBAcmV0dXJucyBUaGUgYWxyZWFkeS1mb3J3YXJkZWQgbG9jYWwgcG9ydCwgb3IgYHVuZGVmaW5lZGAgd2hlbiB0aGVyZSBpcyBub25lLlxuICovXG5leHBvcnQgZnVuY3Rpb24gcGFyc2VGb3J3YXJkZWRQb3J0KGZvcndhcmRMaXN0OiBzdHJpbmcsIGRldmljZUlkOiBzdHJpbmcsIHNvY2tldE5hbWU6IHN0cmluZyk6IG51bWJlciB8IHVuZGVmaW5lZCB7XG4gIGZvciAoY29uc3QgbGluZSBvZiBmb3J3YXJkTGlzdC5zcGxpdCgnXFxuJykpIHtcbiAgICAvLyBgYWRiIGZvcndhcmQgLS1saXN0YCBwcmludHMgYDxkZXZpY2VJZD4gdGNwOjxwb3J0PiBsb2NhbGFic3RyYWN0Ojxzb2NrZXROYW1lPmAuXG4gICAgY29uc3QgW2xpbmVEZXZpY2VJZCwgbG9jYWwsIHJlbW90ZV0gPSBsaW5lLnRyaW0oKS5zcGxpdCgvXFxzKy8sIEZPUldBUkRfTElTVF9DT0xVTU5fQ09VTlQpO1xuICAgIGlmIChsaW5lRGV2aWNlSWQgIT09IGRldmljZUlkIHx8IHJlbW90ZSAhPT0gYGxvY2FsYWJzdHJhY3Q6JHtzb2NrZXROYW1lfWAgfHwgIWxvY2FsPy5zdGFydHNXaXRoKCd0Y3A6JykpIHtcbiAgICAgIGNvbnRpbnVlO1xuICAgIH1cblxuICAgIGNvbnN0IHBvcnQgPSBOdW1iZXIucGFyc2VJbnQobG9jYWwuc2xpY2UoJ3RjcDonLmxlbmd0aCksIERFQ0lNQUxfUkFESVgpO1xuICAgIGlmIChOdW1iZXIuaXNTYWZlSW50ZWdlcihwb3J0KSkge1xuICAgICAgcmV0dXJuIHBvcnQ7XG4gICAgfVxuICB9XG5cbiAgcmV0dXJuIHVuZGVmaW5lZDtcbn1cblxuLyoqXG4gKiBQaWNrcyB0aGUgV2ViVmlldydzIGRldnRvb2xzIHNvY2tldCBuYW1lIG91dCBvZiBgL3Byb2MvbmV0L3VuaXhgLlxuICpcbiAqIEEgZGV2aWNlIGNhbiBob3N0IHNldmVyYWwgZGVidWdnYWJsZSBXZWJWaWV3cyAob3RoZXIgYXBwcywgYSBsZWZ0b3ZlciBwcm9jZXNzKSwgc28gdGhlIGFwcCdzIG93biBwaWQgaXNcbiAqIHdoYXQgZGlzYW1iaWd1YXRlcyB0aGVtLiBXaGVuIG5vIHNvY2tldCBtYXRjaGVzIHRoYXQgcGlkIHRoZSBzb2xlIHJlbWFpbmluZyBjYW5kaWRhdGUgaXMgdXNlZCBcdTIwMTQgYVxuICogV2ViVmlldyB3aG9zZSBzb2NrZXQgaXMgbmFtZWQgYWZ0ZXIgYSBjaGlsZCBwcm9jZXNzIHJhdGhlciB0aGFuIHRoZSBvbmUgYHBpZG9mYCByZXBvcnRlZCBzdGlsbCBoYXMgdG8gYmVcbiAqIHJlYWNoYWJsZSBcdTIwMTQgYnV0IHR3byB1bmF0dHJpYnV0YWJsZSBjYW5kaWRhdGVzIGlzIGFtYmlndW91cyBlbm91Z2ggdG8gcmVmdXNlLlxuICpcbiAqIEBwYXJhbSBwcm9jTmV0VW5peCAtIFRoZSBjb250ZW50cyBvZiBgL3Byb2MvbmV0L3VuaXhgLlxuICogQHBhcmFtIHBpZCAtIFRoZSBhcHBsaWNhdGlvbidzIHByb2Nlc3MgaWQuXG4gKiBAcmV0dXJucyBUaGUgc29ja2V0IG5hbWUsIGUuZy4gYHdlYnZpZXdfZGV2dG9vbHNfcmVtb3RlXzE4MDU2YC5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHBhcnNlV2ViVmlld0RldnRvb2xzU29ja2V0TmFtZShwcm9jTmV0VW5peDogc3RyaW5nLCBwaWQ6IHN0cmluZyk6IHN0cmluZyB7XG4gIC8vIFRoZSB3aG9sZSBtYXRjaCBtaW51cyBpdHMgbGVhZGluZyBgQGAsIHJhdGhlciB0aGFuIGEgbmFtZWQgY2FwdHVyZSBncm91cDogYSBtYW5kYXRvcnkgZ3JvdXAgaXMgYWx3YXlzXG4gIC8vIFByZXNlbnQgb25jZSB0aGUgcGF0dGVybiBoYXMgbWF0Y2hlZCwgc28gYG1hdGNoLmdyb3Vwcz8uWyduYW1lJ10gPz8gJydgIHdvdWxkIGxlYXZlIGJlaGluZCB0d28gYnJhbmNoZXNcbiAgLy8gTm8gaW5wdXQgY2FuIGV2ZXIgcmVhY2ggXHUyMDE0IGFuZCB0aGlzIGZpbGUgaXMgbWVhc3VyZWQgYWdhaW5zdCBhIDEwMCUgYnJhbmNoIGdhdGUuXG4gIGNvbnN0IG5hbWVzID0gW1xuICAgIC4uLm5ldyBTZXQoWy4uLnByb2NOZXRVbml4Lm1hdGNoQWxsKC9Ad2Vidmlld19kZXZ0b29sc19yZW1vdGVfXFx3Ky9nKV1cbiAgICAgIC5tYXAoKG1hdGNoKSA9PiBtYXRjaFswXS5zbGljZSgnQCcubGVuZ3RoKSkpXG4gIF07XG5cbiAgLy8gRGVzdHJ1Y3R1cmVkIHJhdGhlciB0aGFuIGluZGV4ZWQgZm9yIHRoZSBzYW1lIHJlYXNvbjogYHNvbGVOYW1lYCBjYXJyaWVzIHRoZSBcInRoZXJlIGlzIGF0IGxlYXN0IG9uZVwiXG4gIC8vIEZhY3QgaW4gdGhlIHR5cGUsIHNvIG5laXRoZXIgdGhlIGVtcHR5IGNoZWNrIGJlbG93IG5vciB0aGUgc2luZ2xlLWNhbmRpZGF0ZSBvbmUgbGVhdmVzIGEgZGVhZCBicmFuY2guXG4gIGNvbnN0IFtzb2xlTmFtZSwgLi4ub3RoZXJOYW1lc10gPSBuYW1lcztcblxuICBpZiAoc29sZU5hbWUgPT09IHVuZGVmaW5lZCkge1xuICAgIHRocm93IG5ldyBFcnJvcihcbiAgICAgICdObyBgd2Vidmlld19kZXZ0b29sc19yZW1vdGVfKmAgc29ja2V0IG9uIHRoZSBkZXZpY2UuIE9ic2lkaWFuIE1vYmlsZSBpcyBub3QgcnVubmluZywgb3IgaXRzIFdlYlZpZXcgJ1xuICAgICAgICArICdkZWJ1Z2dlciBpcyBkaXNhYmxlZC4nXG4gICAgKTtcbiAgfVxuXG4gIGNvbnN0IGV4YWN0TmFtZSA9IGB3ZWJ2aWV3X2RldnRvb2xzX3JlbW90ZV8ke3BpZH1gO1xuICBpZiAobmFtZXMuaW5jbHVkZXMoZXhhY3ROYW1lKSkge1xuICAgIHJldHVybiBleGFjdE5hbWU7XG4gIH1cblxuICBpZiAob3RoZXJOYW1lcy5sZW5ndGggPT09IDApIHtcbiAgICByZXR1cm4gc29sZU5hbWU7XG4gIH1cblxuICB0aHJvdyBuZXcgRXJyb3IoXG4gICAgYE5vIFxcYCR7ZXhhY3ROYW1lfVxcYCBzb2NrZXQsIGFuZCAke1N0cmluZyhuYW1lcy5sZW5ndGgpfSBvdGhlciBkZWJ1Z2dhYmxlIFdlYlZpZXdzIGFyZSBwcmVzZW50IGBcbiAgICAgICsgYCgke25hbWVzLmpvaW4oJywgJyl9KSwgc28gdGhlIHJpZ2h0IG9uZSBjYW5ub3QgYmUgY2hvc2VuLmBcbiAgKTtcbn1cblxuLyoqXG4gKiBQaWNrcyB0aGUgT2JzaWRpYW4gcGFnZSB0YXJnZXQgb3V0IG9mIHRoZSBkZWJ1Z2dlcidzIGAvanNvbmAgbGlzdC5cbiAqXG4gKiBAcGFyYW0gdGFyZ2V0cyAtIFRoZSBgL2pzb25gIHJlc3BvbnNlLlxuICogQHJldHVybnMgVGhlIHBhZ2UgdGFyZ2V0IHRvIGF0dGFjaCB0by5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHNlbGVjdFdlYlZpZXdQYWdlVGFyZ2V0KHRhcmdldHM6IHJlYWRvbmx5IENkcFRhcmdldFtdKTogQ2RwVGFyZ2V0IHtcbiAgY29uc3QgdGFyZ2V0ID0gdGFyZ2V0cy5maW5kKChjYW5kaWRhdGUpID0+IGNhbmRpZGF0ZS50eXBlID09PSAncGFnZScgJiYgQm9vbGVhbihjYW5kaWRhdGUud2ViU29ja2V0RGVidWdnZXJVcmwpKVxuICAgID8/IHRhcmdldHMuZmluZCgoY2FuZGlkYXRlKSA9PiBCb29sZWFuKGNhbmRpZGF0ZS53ZWJTb2NrZXREZWJ1Z2dlclVybCkpO1xuXG4gIGlmICghdGFyZ2V0KSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKCdUaGUgV2ViVmlldyBkZWJ1Z2dlciBsaXN0ZWQgbm8gdGFyZ2V0IHdpdGggYSBXZWJTb2NrZXQgZW5kcG9pbnQuJyk7XG4gIH1cblxuICByZXR1cm4gdGFyZ2V0O1xufVxuXG4vKiB2OCBpZ25vcmUgc3RhcnQgLS0gSW50ZWdyYXRpb24tdGltZSBjb2RlIChhZGIgc2hlbGwtb3V0cykuIENvdmVyZWQgYnkgdGhlIEFuZHJvaWQgaW50ZWdyYXRpb24gdGVzdHMsIG5vdCBieSB1bml0IHRlc3RzLiAqL1xuXG4vKipcbiAqIFJ1bnMgYW4gYWRiIGNvbW1hbmQgYWdhaW5zdCBvbmUgZGV2aWNlLlxuICpcbiAqIEBwYXJhbSBkZXZpY2VJZCAtIFRoZSBhZGIgZGV2aWNlIGlkLlxuICogQHBhcmFtIGNvbW1hbmRBcmd1bWVudHMgLSBUaGUgYWRiIGFyZ3VtZW50cyBhZnRlciBgLXMgPGRldmljZUlkPmAuXG4gKiBAcmV0dXJucyBUcmltbWVkIHN0ZG91dC5cbiAqL1xuYXN5bmMgZnVuY3Rpb24gYWRiKGRldmljZUlkOiBzdHJpbmcsIGNvbW1hbmRBcmd1bWVudHM6IHN0cmluZ1tdKTogUHJvbWlzZTxzdHJpbmc+IHtcbiAgY29uc3Qgc3Rkb3V0ID0gYXdhaXQgZXhlYyhbJ2FkYicsICctcycsIGRldmljZUlkLCAuLi5jb21tYW5kQXJndW1lbnRzXSwge1xuICAgIGlzUXVpZXQ6IHRydWUsXG4gICAgdGltZW91dEluTWlsbGlzZWNvbmRzOiBBREJfVElNRU9VVF9JTl9NSUxMSVNFQ09ORFNcbiAgfSk7XG5cbiAgcmV0dXJuIHN0ZG91dC50cmltKCk7XG59XG5cbi8qKlxuICogRHJvcHMgYW4gYWRiIHBvcnQgZm9yd2FyZCwgaWdub3JpbmcgdGhlIFwibm90IGZvdW5kXCIgY2FzZS5cbiAqXG4gKiBAcGFyYW0gZGV2aWNlSWQgLSBUaGUgYWRiIGRldmljZSBpZC5cbiAqIEBwYXJhbSBwb3J0IC0gVGhlIGZvcndhcmRlZCBsb2NhbCBwb3J0LlxuICovXG5hc3luYyBmdW5jdGlvbiByZW1vdmVGb3J3YXJkKGRldmljZUlkOiBzdHJpbmcsIHBvcnQ6IG51bWJlcik6IFByb21pc2U8dm9pZD4ge1xuICB0cnkge1xuICAgIGF3YWl0IGV4ZWMoWydhZGInLCAnLXMnLCBkZXZpY2VJZCwgJ2ZvcndhcmQnLCAnLS1yZW1vdmUnLCBgdGNwOiR7U3RyaW5nKHBvcnQpfWBdLCB7XG4gICAgICBpc1F1aWV0OiB0cnVlLFxuICAgICAgc2hvdWxkSWdub3JlRXhpdENvZGU6IHRydWUsXG4gICAgICB0aW1lb3V0SW5NaWxsaXNlY29uZHM6IEFEQl9USU1FT1VUX0lOX01JTExJU0VDT05EU1xuICAgIH0pO1xuICB9IGNhdGNoIHtcbiAgICAvLyBCZXN0IGVmZm9ydDogdGhlIGZvcndhcmQgaXMgcGVyLXJ1biBhbmQgYWRiIGRyb3BzIGl0IHdoZW4gdGhlIGRldmljZSBkaXNjb25uZWN0cyBhbnl3YXkuXG4gIH1cbn1cblxuLyogdjggaWdub3JlIHN0b3AgKi9cbiJdLAogICJtYXBwaW5ncyI6ICJBQWtCQSxTQUFTLG9CQUFvQjtBQUk3QixTQUFTLFlBQVk7QUFDckIsU0FBUyxXQUFXO0FBQ3BCLFNBQVMsb0JBQW9CO0FBRTdCLE1BQU0sOEJBQThCO0FBRXBDLE1BQU0sNEJBQTRCO0FBQ2xDLE1BQU0sZ0JBQWdCO0FBQ3RCLE1BQU0sc0NBQXNDO0FBQzVDLE1BQU0sV0FBVztBQTBEVixNQUFNLHFCQUFxQjtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUEsRUF3QnpCLFlBQTZCLFdBQXVDLFVBQW1DLE1BQWM7QUFBeEY7QUFBdUM7QUFBbUM7QUFDNUcsU0FBSyxVQUFVLGlCQUFpQixXQUFXLENBQUMsVUFBd0I7QUFDbEUsWUFBTSxVQUFVLEtBQUssTUFBTSxPQUFPLE1BQU0sSUFBSSxDQUFDO0FBQzdDLFVBQUksUUFBUSxXQUFXLFFBQVc7QUFDaEM7QUFBQSxNQUNGO0FBRUEsV0FBSyxjQUFjLElBQUksUUFBUSxNQUFNLElBQUksUUFBUSxVQUFVLENBQUMsQ0FBQztBQUFBLElBQy9ELENBQUM7QUFBQSxFQUNIO0FBQUEsRUFUb0M7QUFBQSxFQUF1QztBQUFBLEVBQW1DO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBLEVBZjlHLElBQVcsU0FBa0I7QUFDM0IsV0FBTyxLQUFLLFVBQVUsZUFBZSxVQUFVO0FBQUEsRUFDakQ7QUFBQSxFQUVpQixnQkFBZ0Isb0JBQUksSUFBNkI7QUFBQSxFQUUxRCxZQUFZO0FBQUE7QUFBQTtBQUFBO0FBQUEsRUF1QnBCLE1BQWEsVUFBeUI7QUFDcEMsU0FBSyxZQUFZO0FBQ2pCLFVBQU0sY0FBYyxLQUFLLFVBQVUsS0FBSyxJQUFJO0FBQUEsRUFDOUM7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQSxFQVFPLGNBQW9CO0FBQ3pCLFNBQUssWUFBWTtBQUNqQixRQUFJO0FBQ0YsbUJBQWEsT0FBTyxDQUFDLE1BQU0sS0FBSyxVQUFVLFdBQVcsWUFBWSxPQUFPLE9BQU8sS0FBSyxJQUFJLENBQUMsRUFBRSxHQUFHO0FBQUEsUUFDNUYsT0FBTztBQUFBLFFBQ1AsU0FBUztBQUFBLE1BQ1gsQ0FBQztBQUFBLElBQ0gsUUFBUTtBQUFBLElBRVI7QUFBQSxFQUNGO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUEsRUFRTyxHQUFHLFFBQWdCLFNBQWdDO0FBQ3hELFNBQUssY0FBYyxJQUFJLFFBQVEsT0FBTztBQUFBLEVBQ3hDO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQSxFQVNPLEtBQUssUUFBZ0IsU0FBa0MsQ0FBQyxHQUFxQztBQUNsRyxVQUFNLEtBQUssRUFBRSxLQUFLO0FBRWxCLFdBQU8sSUFBSSxRQUFpQyxDQUFDLFNBQVMsV0FBVztBQUMvRCxZQUFNLFVBQVUsV0FBVyxNQUFNO0FBQy9CLGFBQUssVUFBVSxvQkFBb0IsV0FBVyxPQUFPO0FBQ3JELGVBQU8sSUFBSSxNQUFNLHVDQUF1QyxPQUFPLG1DQUFtQyxDQUFDLE9BQU8sTUFBTSxFQUFFLENBQUM7QUFBQSxNQUNySCxHQUFHLG1DQUFtQztBQUV0QyxZQUFNLFVBQVUsQ0FBQyxVQUE4QjtBQUM3QyxjQUFNLFVBQVUsS0FBSyxNQUFNLE9BQU8sTUFBTSxJQUFJLENBQUM7QUFDN0MsWUFBSSxRQUFRLE9BQU8sSUFBSTtBQUNyQjtBQUFBLFFBQ0Y7QUFFQSxxQkFBYSxPQUFPO0FBQ3BCLGFBQUssVUFBVSxvQkFBb0IsV0FBVyxPQUFPO0FBQ3JELFlBQUksUUFBUSxPQUFPO0FBQ2pCLGlCQUFPLElBQUksTUFBTSx1QkFBdUIsTUFBTSxZQUFZLFFBQVEsTUFBTSxXQUFXLGVBQWUsRUFBRSxDQUFDO0FBQ3JHO0FBQUEsUUFDRjtBQUVBLGdCQUFRLFFBQVEsVUFBVSxDQUFDLENBQUM7QUFBQSxNQUM5QjtBQUVBLFdBQUssVUFBVSxpQkFBaUIsV0FBVyxPQUFPO0FBQ2xELFdBQUssVUFBVSxLQUFLLEtBQUssVUFBVSxFQUFFLElBQUksUUFBUSxPQUFPLENBQUMsQ0FBQztBQUFBLElBQzVELENBQUM7QUFBQSxFQUNIO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUEsRUFXQSxNQUFhLFFBQVEsVUFBcUQ7QUFDeEUsZUFBVyxXQUFXLFVBQVU7QUFDOUIsWUFBTSxLQUFLLEtBQUssUUFBUSxRQUFRLFFBQVEsTUFBTTtBQUFBLElBQ2hEO0FBQUEsRUFDRjtBQUFBO0FBQUE7QUFBQTtBQUFBLEVBS1EsY0FBb0I7QUFDMUIsU0FBSyxjQUFjLE1BQU07QUFDekIsUUFBSSxLQUFLLFVBQVUsZUFBZSxVQUFVLE1BQU07QUFDaEQsV0FBSyxVQUFVLE1BQU07QUFBQSxJQUN2QjtBQUFBLEVBQ0Y7QUFDRjtBQVFBLGVBQXNCLG9CQUFvQixRQUFrRTtBQUMxRyxRQUFNLEVBQUUsT0FBTyxTQUFTLElBQUk7QUFHNUIsUUFBTSxjQUFjLE1BQU0sSUFBSSxVQUFVLENBQUMsU0FBUyxTQUFTLEtBQUssQ0FBQztBQUNqRSxRQUFNLE1BQU0sWUFBWSxNQUFNLE9BQU8sQ0FBQyxFQUFFLENBQUMsS0FBSztBQUM5QyxNQUFJLENBQUMsS0FBSztBQUNSLFVBQU0sSUFBSSxNQUFNLEdBQUcsS0FBSyxzQkFBc0IsUUFBUSxnREFBZ0Q7QUFBQSxFQUN4RztBQUVBLFFBQU0sY0FBYyxNQUFNLElBQUksVUFBVSxDQUFDLFNBQVMsT0FBTyxnQkFBZ0IsQ0FBQztBQUMxRSxRQUFNLGFBQWEsK0JBQStCLGFBQWEsR0FBRztBQUVsRSxRQUFNLGNBQWMsTUFBTSxJQUFJLFVBQVUsQ0FBQyxXQUFXLFFBQVEsQ0FBQztBQUM3RCxRQUFNLGVBQWUsbUJBQW1CLGFBQWEsVUFBVSxVQUFVO0FBQ3pFLFFBQU0sT0FBTyxnQkFBZ0IsTUFBTSxhQUFhO0FBQ2hELE1BQUksaUJBQWlCLFFBQVc7QUFDOUIsVUFBTSxJQUFJLFVBQVUsQ0FBQyxXQUFXLE9BQU8sT0FBTyxJQUFJLENBQUMsSUFBSSxpQkFBaUIsVUFBVSxFQUFFLENBQUM7QUFDckYsUUFBSSwrQkFBK0IsT0FBTyxJQUFJLENBQUMscUJBQXFCLFVBQVUsS0FBSyxLQUFLLFFBQVEsR0FBRyxHQUFHO0FBQUEsRUFDeEcsT0FBTztBQUNMLFFBQUkscUNBQXFDLE9BQU8sSUFBSSxDQUFDLHFCQUFxQixVQUFVLEtBQUssS0FBSyxRQUFRLEdBQUcsR0FBRztBQUFBLEVBQzlHO0FBRUEsTUFBSTtBQUNGLFVBQU0sV0FBVyxNQUFNLE1BQU0sVUFBVSxRQUFRLElBQUksT0FBTyxJQUFJLENBQUMsT0FBTztBQUN0RSxVQUFNLFNBQVMsd0JBQXdCLE1BQU0sU0FBUyxLQUFLLENBQWdCO0FBQzNFLFVBQU0sWUFBWSxJQUFJLFVBQVUsT0FBTyx3QkFBd0IsRUFBRTtBQUNqRSxVQUFNLElBQUksUUFBYyxDQUFDLFNBQVMsV0FBVztBQUMzQyxnQkFBVSxpQkFBaUIsUUFBUSxNQUFNO0FBQ3ZDLGdCQUFRO0FBQUEsTUFDVixHQUFHLEVBQUUsTUFBTSxLQUFLLENBQUM7QUFDakIsZ0JBQVUsaUJBQWlCLFNBQVMsTUFBTTtBQUN4QyxlQUFPLElBQUksTUFBTSw0Q0FBNEMsT0FBTyx3QkFBd0IsRUFBRSxHQUFHLENBQUM7QUFBQSxNQUNwRyxHQUFHLEVBQUUsTUFBTSxLQUFLLENBQUM7QUFBQSxJQUNuQixDQUFDO0FBQ0QsUUFBSSw2Q0FBNkMsT0FBTyxTQUFTLEVBQUUsR0FBRztBQUV0RSxXQUFPLElBQUkscUJBQXFCLFdBQVcsVUFBVSxJQUFJO0FBQUEsRUFDM0QsU0FBUyxPQUFnQjtBQUN2QixVQUFNLGNBQWMsVUFBVSxJQUFJO0FBQ2xDLFVBQU07QUFBQSxFQUNSO0FBQ0Y7QUFpQk8sU0FBUyxtQkFBbUIsYUFBcUIsVUFBa0IsWUFBd0M7QUFDaEgsYUFBVyxRQUFRLFlBQVksTUFBTSxJQUFJLEdBQUc7QUFFMUMsVUFBTSxDQUFDLGNBQWMsT0FBTyxNQUFNLElBQUksS0FBSyxLQUFLLEVBQUUsTUFBTSxPQUFPLHlCQUF5QjtBQUN4RixRQUFJLGlCQUFpQixZQUFZLFdBQVcsaUJBQWlCLFVBQVUsTUFBTSxDQUFDLE9BQU8sV0FBVyxNQUFNLEdBQUc7QUFDdkc7QUFBQSxJQUNGO0FBRUEsVUFBTSxPQUFPLE9BQU8sU0FBUyxNQUFNLE1BQU0sT0FBTyxNQUFNLEdBQUcsYUFBYTtBQUN0RSxRQUFJLE9BQU8sY0FBYyxJQUFJLEdBQUc7QUFDOUIsYUFBTztBQUFBLElBQ1Q7QUFBQSxFQUNGO0FBRUEsU0FBTztBQUNUO0FBY08sU0FBUywrQkFBK0IsYUFBcUIsS0FBcUI7QUFJdkYsUUFBTSxRQUFRO0FBQUEsSUFDWixHQUFHLElBQUksSUFBSSxDQUFDLEdBQUcsWUFBWSxTQUFTLCtCQUErQixDQUFDLEVBQ2pFLElBQUksQ0FBQyxVQUFVLE1BQU0sQ0FBQyxFQUFFLE1BQU0sSUFBSSxNQUFNLENBQUMsQ0FBQztBQUFBLEVBQy9DO0FBSUEsUUFBTSxDQUFDLFVBQVUsR0FBRyxVQUFVLElBQUk7QUFFbEMsTUFBSSxhQUFhLFFBQVc7QUFDMUIsVUFBTSxJQUFJO0FBQUEsTUFDUjtBQUFBLElBRUY7QUFBQSxFQUNGO0FBRUEsUUFBTSxZQUFZLDJCQUEyQixHQUFHO0FBQ2hELE1BQUksTUFBTSxTQUFTLFNBQVMsR0FBRztBQUM3QixXQUFPO0FBQUEsRUFDVDtBQUVBLE1BQUksV0FBVyxXQUFXLEdBQUc7QUFDM0IsV0FBTztBQUFBLEVBQ1Q7QUFFQSxRQUFNLElBQUk7QUFBQSxJQUNSLFFBQVEsU0FBUyxrQkFBa0IsT0FBTyxNQUFNLE1BQU0sQ0FBQywyQ0FDL0MsTUFBTSxLQUFLLElBQUksQ0FBQztBQUFBLEVBQzFCO0FBQ0Y7QUFRTyxTQUFTLHdCQUF3QixTQUEwQztBQUNoRixRQUFNLFNBQVMsUUFBUSxLQUFLLENBQUMsY0FBYyxVQUFVLFNBQVMsVUFBVSxRQUFRLFVBQVUsb0JBQW9CLENBQUMsS0FDMUcsUUFBUSxLQUFLLENBQUMsY0FBYyxRQUFRLFVBQVUsb0JBQW9CLENBQUM7QUFFeEUsTUFBSSxDQUFDLFFBQVE7QUFDWCxVQUFNLElBQUksTUFBTSxrRUFBa0U7QUFBQSxFQUNwRjtBQUVBLFNBQU87QUFDVDtBQVdBLGVBQWUsSUFBSSxVQUFrQixrQkFBNkM7QUFDaEYsUUFBTSxTQUFTLE1BQU0sS0FBSyxDQUFDLE9BQU8sTUFBTSxVQUFVLEdBQUcsZ0JBQWdCLEdBQUc7QUFBQSxJQUN0RSxTQUFTO0FBQUEsSUFDVCx1QkFBdUI7QUFBQSxFQUN6QixDQUFDO0FBRUQsU0FBTyxPQUFPLEtBQUs7QUFDckI7QUFRQSxlQUFlLGNBQWMsVUFBa0IsTUFBNkI7QUFDMUUsTUFBSTtBQUNGLFVBQU0sS0FBSyxDQUFDLE9BQU8sTUFBTSxVQUFVLFdBQVcsWUFBWSxPQUFPLE9BQU8sSUFBSSxDQUFDLEVBQUUsR0FBRztBQUFBLE1BQ2hGLFNBQVM7QUFBQSxNQUNULHNCQUFzQjtBQUFBLE1BQ3RCLHVCQUF1QjtBQUFBLElBQ3pCLENBQUM7QUFBQSxFQUNILFFBQVE7QUFBQSxFQUVSO0FBQ0Y7IiwKICAibmFtZXMiOiBbXQp9Cg==
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "obsidian-integration-testing",
|
|
3
|
-
"version": "12.
|
|
3
|
+
"version": "12.1.0",
|
|
4
4
|
"description": "Simplifies integration testing of Obsidian plugins.",
|
|
5
5
|
"keywords": [
|
|
6
6
|
"obsidian",
|
|
@@ -137,7 +137,6 @@
|
|
|
137
137
|
"build": "jiti scripts/build.ts",
|
|
138
138
|
"build:clean": "jiti scripts/build-clean.ts",
|
|
139
139
|
"build:compile": "jiti scripts/build-compile.ts",
|
|
140
|
-
"build:compile:typescript": "jiti scripts/build-compile-typescript.ts",
|
|
141
140
|
"build:lib": "jiti scripts/build-lib.ts",
|
|
142
141
|
"build:types": "jiti scripts/build-types.ts",
|
|
143
142
|
"collect:runtime-versions": "jiti scripts/collect-runtime-versions.ts",
|
|
@@ -153,6 +152,7 @@
|
|
|
153
152
|
"lint:md:fix": "jiti scripts/lint-md-fix.ts",
|
|
154
153
|
"merge:runtime-versions": "jiti scripts/merge-runtime-versions.ts",
|
|
155
154
|
"prepare": "jiti scripts/prepare.ts",
|
|
155
|
+
"probe:emulator-wedge": "jiti scripts/emulator-wedge-probe.ts",
|
|
156
156
|
"refresh:metadata": "jiti scripts/refresh-metadata.ts",
|
|
157
157
|
"spellcheck": "jiti scripts/spellcheck.ts",
|
|
158
158
|
"test": "jiti scripts/test.ts",
|
|
@@ -163,11 +163,12 @@
|
|
|
163
163
|
"version": "jiti scripts/version.ts"
|
|
164
164
|
},
|
|
165
165
|
"overrides": {
|
|
166
|
-
"@puppeteer/browsers": "^3.2.
|
|
166
|
+
"@puppeteer/browsers": "^3.2.2",
|
|
167
167
|
"@sinonjs/fake-timers": "13.0.5",
|
|
168
168
|
"brace-expansion": "^5.0.9",
|
|
169
169
|
"deepmerge-ts": "^8.0.2",
|
|
170
170
|
"eslint-plugin-import": "$eslint-plugin-import-x",
|
|
171
|
+
"fflate": "^0.8.3",
|
|
171
172
|
"glob": "^13.0.6",
|
|
172
173
|
"js-yaml": "4.3.1",
|
|
173
174
|
"lodash": "4.18.1",
|
|
@@ -180,47 +181,47 @@
|
|
|
180
181
|
"vite": "$vite"
|
|
181
182
|
},
|
|
182
183
|
"dependencies": {
|
|
183
|
-
"puppeteer-core": "^25.
|
|
184
|
+
"puppeteer-core": "^25.10.0",
|
|
184
185
|
"webdriverio": "9.27.0"
|
|
185
186
|
},
|
|
186
187
|
"devDependencies": {
|
|
187
|
-
"@astrojs/markdown-remark": "^7.
|
|
188
|
-
"@astrojs/starlight": "^0.
|
|
188
|
+
"@astrojs/markdown-remark": "^7.3.1",
|
|
189
|
+
"@astrojs/starlight": "^0.42.0",
|
|
189
190
|
"@commitlint/cli": "^21.2.2",
|
|
190
191
|
"@commitlint/config-conventional": "^21.2.2",
|
|
191
192
|
"@commitlint/types": "^21.2.0",
|
|
192
|
-
"@eslint-community/eslint-plugin-eslint-comments": "^4.
|
|
193
|
+
"@eslint-community/eslint-plugin-eslint-comments": "^4.8.0",
|
|
193
194
|
"@eslint/config-helpers": "^0.7.0",
|
|
194
195
|
"@eslint/js": "^10.0.1",
|
|
195
|
-
"@obsidian-typings/obsidian-public-latest": "^6.
|
|
196
|
+
"@obsidian-typings/obsidian-public-latest": "^6.36.0",
|
|
196
197
|
"@resvg/resvg-js": "^2.6.2",
|
|
197
198
|
"@stylistic/eslint-plugin": "^5.10.0",
|
|
198
199
|
"@total-typescript/ts-reset": "^0.6.1",
|
|
199
200
|
"@tsconfig/strictest": "^2.0.8",
|
|
200
201
|
"@types/jest": "^30.0.0",
|
|
201
202
|
"@types/semver": "^7.8.0",
|
|
202
|
-
"@typescript-eslint/rule-tester": "^8.
|
|
203
|
-
"@typescript-eslint/utils": "^8.
|
|
204
|
-
"@vitest/coverage-v8": "^
|
|
205
|
-
"astro": "^7.2
|
|
203
|
+
"@typescript-eslint/rule-tester": "^8.70.0",
|
|
204
|
+
"@typescript-eslint/utils": "^8.70.0",
|
|
205
|
+
"@vitest/coverage-v8": "^5.0.0",
|
|
206
|
+
"astro": "^7.3.2",
|
|
206
207
|
"better-typescript-lib": "^2.12.0",
|
|
207
|
-
"cspell": "^10.
|
|
208
|
+
"cspell": "^10.3.0",
|
|
208
209
|
"czg": "^1.14.0",
|
|
209
210
|
"dedent": "^1.7.2",
|
|
210
|
-
"dprint": "^0.
|
|
211
|
+
"dprint": "^0.57.4",
|
|
211
212
|
"esbuild": "^0.28.2",
|
|
212
|
-
"eslint": "^10.
|
|
213
|
+
"eslint": "^10.10.0",
|
|
213
214
|
"eslint-import-resolver-typescript": "^4.4.5",
|
|
214
215
|
"eslint-plugin-astro": "^3.1.0",
|
|
215
216
|
"eslint-plugin-import-x": "^4.17.1",
|
|
216
|
-
"eslint-plugin-jsdoc": "^64.
|
|
217
|
-
"eslint-plugin-perfectionist": "^5.
|
|
217
|
+
"eslint-plugin-jsdoc": "^64.3.6",
|
|
218
|
+
"eslint-plugin-perfectionist": "^5.11.0",
|
|
218
219
|
"eslint-plugin-tsdoc": "^0.5.2",
|
|
219
220
|
"eslint-plugin-unicorn": "^74.0.0",
|
|
220
|
-
"globals": "^17.
|
|
221
|
+
"globals": "^17.12.0",
|
|
221
222
|
"husky": "^9.1.7",
|
|
222
|
-
"jest": "^30.5.
|
|
223
|
-
"jest-config": "^30.5.
|
|
223
|
+
"jest": "^30.5.1",
|
|
224
|
+
"jest-config": "^30.5.1",
|
|
224
225
|
"jiti": "^2.7.0",
|
|
225
226
|
"linkinator": "^8.1.0",
|
|
226
227
|
"markdownlint": "^0.41.1",
|
|
@@ -235,13 +236,13 @@
|
|
|
235
236
|
"ts-jest": "^29.4.12",
|
|
236
237
|
"ts-morph": "^28.0.0",
|
|
237
238
|
"tslib": "^2.8.1",
|
|
238
|
-
"type-fest": "^5.
|
|
239
|
+
"type-fest": "^5.9.0",
|
|
239
240
|
"typedoc-plugin-mdn-links": "^5.1.1",
|
|
240
241
|
"typescript": "6.0.3",
|
|
241
|
-
"typescript-eslint": "^8.
|
|
242
|
+
"typescript-eslint": "^8.70.0",
|
|
242
243
|
"unist-util-visit": "^5.1.0",
|
|
243
244
|
"vite": "^8.2.2",
|
|
244
|
-
"vitest": "^
|
|
245
|
+
"vitest": "^5.0.0",
|
|
245
246
|
"yaml": "^2.9.0"
|
|
246
247
|
},
|
|
247
248
|
"peerDependencies": {
|
|
@@ -1,192 +0,0 @@
|
|
|
1
|
-
"use strict";
|
|
2
|
-
var __create = Object.create;
|
|
3
|
-
var __defProp = Object.defineProperty;
|
|
4
|
-
var __getOwnPropDesc = Object.getOwnPropertyDescriptor;
|
|
5
|
-
var __getOwnPropNames = Object.getOwnPropertyNames;
|
|
6
|
-
var __getProtoOf = Object.getPrototypeOf;
|
|
7
|
-
var __hasOwnProp = Object.prototype.hasOwnProperty;
|
|
8
|
-
var __export = (target, all) => {
|
|
9
|
-
for (var name in all)
|
|
10
|
-
__defProp(target, name, { get: all[name], enumerable: true });
|
|
11
|
-
};
|
|
12
|
-
var __copyProps = (to, from, except, desc) => {
|
|
13
|
-
if (from && typeof from === "object" || typeof from === "function") {
|
|
14
|
-
for (let key of __getOwnPropNames(from))
|
|
15
|
-
if (!__hasOwnProp.call(to, key) && key !== except)
|
|
16
|
-
__defProp(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable });
|
|
17
|
-
}
|
|
18
|
-
return to;
|
|
19
|
-
};
|
|
20
|
-
var __toESM = (mod, isNodeMode, target) => (target = mod != null ? __create(__getProtoOf(mod)) : {}, __copyProps(
|
|
21
|
-
// If the importer is in node compatibility mode or this is not an ESM
|
|
22
|
-
// file that has been converted to a CommonJS file using a Babel-
|
|
23
|
-
// compatible transform (i.e. "__esModule" has not been set), then set
|
|
24
|
-
// "default" to the CommonJS "module.exports" for node compatibility.
|
|
25
|
-
isNodeMode || !mod || !mod.__esModule ? __defProp(target, "default", { value: mod, enumerable: true }) : target,
|
|
26
|
-
mod
|
|
27
|
-
));
|
|
28
|
-
var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod);
|
|
29
|
-
var native_dialog_monitor_exports = {};
|
|
30
|
-
__export(native_dialog_monitor_exports, {
|
|
31
|
-
NativeDialogMonitor: () => NativeDialogMonitor
|
|
32
|
-
});
|
|
33
|
-
module.exports = __toCommonJS(native_dialog_monitor_exports);
|
|
34
|
-
var import_node_process = __toESM(require("node:process"), 1);
|
|
35
|
-
var import_exec = require("./exec.cjs");
|
|
36
|
-
const DIALOG_TITLES = /* @__PURE__ */ new Set([
|
|
37
|
-
"Error",
|
|
38
|
-
"Vault not found."
|
|
39
|
-
]);
|
|
40
|
-
const POLL_INTERVAL_IN_MILLISECONDS = 500;
|
|
41
|
-
class NativeDialogMonitor {
|
|
42
|
-
events = [];
|
|
43
|
-
intervalId;
|
|
44
|
-
isPolling = false;
|
|
45
|
-
/**
|
|
46
|
-
* Asserts that no native dialogs were detected during monitoring.
|
|
47
|
-
*
|
|
48
|
-
* @throws If any dialogs were recorded.
|
|
49
|
-
*/
|
|
50
|
-
assertNoDialogs() {
|
|
51
|
-
if (this.events.length === 0) {
|
|
52
|
-
return;
|
|
53
|
-
}
|
|
54
|
-
const descriptions = this.events.map((dialogEvent) => ` - "${dialogEvent.title}" at ${new Date(dialogEvent.timestamp).toISOString()}`).join("\n");
|
|
55
|
-
throw new Error(`Native dialog(s) detected during test:
|
|
56
|
-
${descriptions}`);
|
|
57
|
-
}
|
|
58
|
-
/**
|
|
59
|
-
* Returns all dialog events recorded since the monitor started.
|
|
60
|
-
*
|
|
61
|
-
* @returns The recorded dialog events.
|
|
62
|
-
*/
|
|
63
|
-
getEvents() {
|
|
64
|
-
return this.events;
|
|
65
|
-
}
|
|
66
|
-
/**
|
|
67
|
-
* Resets the recorded events without stopping the monitor.
|
|
68
|
-
*/
|
|
69
|
-
reset() {
|
|
70
|
-
this.events = [];
|
|
71
|
-
}
|
|
72
|
-
/**
|
|
73
|
-
* Starts polling for native dialogs in the background.
|
|
74
|
-
*/
|
|
75
|
-
start() {
|
|
76
|
-
if (this.intervalId) {
|
|
77
|
-
return;
|
|
78
|
-
}
|
|
79
|
-
this.events = [];
|
|
80
|
-
this.intervalId = setInterval(() => {
|
|
81
|
-
this.poll().catch(() => {
|
|
82
|
-
});
|
|
83
|
-
}, POLL_INTERVAL_IN_MILLISECONDS);
|
|
84
|
-
}
|
|
85
|
-
/**
|
|
86
|
-
* Stops polling and returns all recorded events.
|
|
87
|
-
*
|
|
88
|
-
* @returns The recorded dialog events.
|
|
89
|
-
*/
|
|
90
|
-
stop() {
|
|
91
|
-
if (this.intervalId) {
|
|
92
|
-
clearInterval(this.intervalId);
|
|
93
|
-
this.intervalId = void 0;
|
|
94
|
-
}
|
|
95
|
-
return this.events;
|
|
96
|
-
}
|
|
97
|
-
/**
|
|
98
|
-
* Single poll iteration: detects and dismisses any Obsidian dialog windows.
|
|
99
|
-
*/
|
|
100
|
-
async poll() {
|
|
101
|
-
if (this.isPolling) {
|
|
102
|
-
return;
|
|
103
|
-
}
|
|
104
|
-
this.isPolling = true;
|
|
105
|
-
try {
|
|
106
|
-
const titles = await getObsidianWindowTitles();
|
|
107
|
-
for (const title of titles) {
|
|
108
|
-
if (!DIALOG_TITLES.has(title)) {
|
|
109
|
-
continue;
|
|
110
|
-
}
|
|
111
|
-
this.events.push({ timestamp: Date.now(), title });
|
|
112
|
-
await dismissDialogByTitle(title);
|
|
113
|
-
}
|
|
114
|
-
} catch {
|
|
115
|
-
} finally {
|
|
116
|
-
this.isPolling = false;
|
|
117
|
-
}
|
|
118
|
-
}
|
|
119
|
-
}
|
|
120
|
-
async function dismissDialogByTitle(title) {
|
|
121
|
-
if (import_node_process.default.platform === "win32") {
|
|
122
|
-
await dismissDialogWindows(title);
|
|
123
|
-
} else if (import_node_process.default.platform === "darwin") {
|
|
124
|
-
await dismissDialogMac(title);
|
|
125
|
-
} else {
|
|
126
|
-
await dismissDialogLinux(title);
|
|
127
|
-
}
|
|
128
|
-
}
|
|
129
|
-
async function dismissDialogLinux(title) {
|
|
130
|
-
const escapedTitle = title.replaceAll('"', String.raw`\"`);
|
|
131
|
-
await (0, import_exec.exec)(
|
|
132
|
-
`xdotool search --name "${escapedTitle}" windowactivate --sync key Return 2>/dev/null || true`,
|
|
133
|
-
{ isQuiet: true }
|
|
134
|
-
);
|
|
135
|
-
}
|
|
136
|
-
async function dismissDialogMac(title) {
|
|
137
|
-
const escapedTitle = title.replaceAll('"', String.raw`\"`);
|
|
138
|
-
await (0, import_exec.exec)(
|
|
139
|
-
`osascript -e 'tell application "System Events" to tell process "Obsidian" to click button 1 of window "${escapedTitle}"'`,
|
|
140
|
-
{ isQuiet: true }
|
|
141
|
-
);
|
|
142
|
-
}
|
|
143
|
-
async function dismissDialogWindows(title) {
|
|
144
|
-
const escapedTitle = title.replaceAll("'", "''");
|
|
145
|
-
const script = [
|
|
146
|
-
'Add-Type -TypeDefinition @"',
|
|
147
|
-
"using System; using System.Runtime.InteropServices;",
|
|
148
|
-
"public class DlgClose {",
|
|
149
|
-
' [DllImport("user32.dll")] public static extern IntPtr FindWindow(string c, string t);',
|
|
150
|
-
' [DllImport("user32.dll")] public static extern IntPtr SendMessage(IntPtr h, uint m, IntPtr w, IntPtr l);',
|
|
151
|
-
"}",
|
|
152
|
-
'"@',
|
|
153
|
-
`$h = [DlgClose]::FindWindow($null, '${escapedTitle}')`,
|
|
154
|
-
"if ($h -ne [IntPtr]::Zero) { [DlgClose]::SendMessage($h, 0x0010, [IntPtr]::Zero, [IntPtr]::Zero) }"
|
|
155
|
-
].join("; ");
|
|
156
|
-
await (0, import_exec.exec)(`powershell -Command "${script}"`, { isQuiet: true });
|
|
157
|
-
}
|
|
158
|
-
async function getObsidianWindowTitles() {
|
|
159
|
-
if (import_node_process.default.platform === "win32") {
|
|
160
|
-
return getWindowTitlesWindows();
|
|
161
|
-
}
|
|
162
|
-
if (import_node_process.default.platform === "darwin") {
|
|
163
|
-
return getWindowTitlesMac();
|
|
164
|
-
}
|
|
165
|
-
return getWindowTitlesLinux();
|
|
166
|
-
}
|
|
167
|
-
async function getWindowTitlesLinux() {
|
|
168
|
-
const output = await (0, import_exec.exec)(
|
|
169
|
-
'xdotool search --name "Obsidian" getwindowname 2>/dev/null || true',
|
|
170
|
-
{ isQuiet: true }
|
|
171
|
-
);
|
|
172
|
-
return output.trim().split("\n").filter(Boolean);
|
|
173
|
-
}
|
|
174
|
-
async function getWindowTitlesMac() {
|
|
175
|
-
const output = await (0, import_exec.exec)(
|
|
176
|
-
`osascript -e 'tell application "System Events" to get name of every window of (processes whose name is "Obsidian")'`,
|
|
177
|
-
{ isQuiet: true }
|
|
178
|
-
);
|
|
179
|
-
return output.trim().split(", ").filter(Boolean);
|
|
180
|
-
}
|
|
181
|
-
async function getWindowTitlesWindows() {
|
|
182
|
-
const output = await (0, import_exec.exec)(
|
|
183
|
-
`powershell -Command "Get-Process Obsidian -ErrorAction SilentlyContinue | Where-Object { $_.MainWindowTitle -ne '' } | Select-Object -ExpandProperty MainWindowTitle"`,
|
|
184
|
-
{ isQuiet: true }
|
|
185
|
-
);
|
|
186
|
-
return output.trim().split("\n").map((line) => line.trim()).filter(Boolean);
|
|
187
|
-
}
|
|
188
|
-
// Annotate the CommonJS export names for ESM import in node:
|
|
189
|
-
0 && (module.exports = {
|
|
190
|
-
NativeDialogMonitor
|
|
191
|
-
});
|
|
192
|
-
//# sourceMappingURL=data:application/json;base64,ewogICJ2ZXJzaW9uIjogMywKICAic291cmNlcyI6IFsiLi4vLi4vLi4vc3JjL25hdGl2ZS1kaWFsb2ctbW9uaXRvci50cyJdLAogICJzb3VyY2VzQ29udGVudCI6IFsiLyoqXG4gKiBAZmlsZVxuICpcbiAqIE1vbml0b3JzIGZvciBuYXRpdmUgT1MgZGlhbG9ncyAoRWxlY3Ryb24gYGRpYWxvZy5zaG93RXJyb3JCb3hgLCBgZGlhbG9nLnNob3dNZXNzYWdlQm94U3luY2ApXG4gKiBmcm9tIHRoZSBPYnNpZGlhbiBwcm9jZXNzLiBUaGVzZSBkaWFsb2dzIGJsb2NrIHRoZSBtYWluIHByb2Nlc3MgYW5kIGNhbm5vdCBiZSBpbnRlcmNlcHRlZFxuICogZnJvbSB0aGUgcmVuZGVyZXIgdmlhIGBAZWxlY3Ryb24vcmVtb3RlYC5cbiAqXG4gKiBVc2VzIHBsYXRmb3JtLXNwZWNpZmljIHByb2Nlc3Mgd2luZG93IHRpdGxlIGluc3BlY3Rpb24gdG8gZGV0ZWN0IGRpYWxvZ3MsIGFuZFxuICogYXV0by1kaXNtaXNzZXMgdGhlbSBzbyB0aGV5IGRvbid0IGJsb2NrIHRlc3QgZXhlY3V0aW9uLlxuICovXG5cbi8qIHY4IGlnbm9yZSBzdGFydCAtLSBJbnRlZ3JhdGlvbi10aW1lIHV0aWxpdHkuIE5vdCB1bml0LXRlc3RhYmxlOiByZWxpZXMgb24gT1MgcHJvY2VzcyBpbnNwZWN0aW9uLiAqL1xuXG5pbXBvcnQgcHJvY2VzcyBmcm9tICdub2RlOnByb2Nlc3MnO1xuXG5pbXBvcnQgeyBleGVjIH0gZnJvbSAnLi9leGVjLmNqcyc7XG5cbi8qKlxuICogQSBjYXB0dXJlZCBuYXRpdmUgZGlhbG9nIGV2ZW50LlxuICovXG5leHBvcnQgaW50ZXJmYWNlIE5hdGl2ZURpYWxvZ0V2ZW50IHtcbiAgLyoqXG4gICAqIFdoZW4gdGhlIGRpYWxvZyB3YXMgZGV0ZWN0ZWQuXG4gICAqL1xuICB0aW1lc3RhbXA6IG51bWJlcjtcblxuICAvKipcbiAgICogVGhlIHdpbmRvdyB0aXRsZSBvZiB0aGUgZGlhbG9nLlxuICAgKi9cbiAgdGl0bGU6IHN0cmluZztcbn1cblxuLyoqXG4gKiBLbm93biBPYnNpZGlhbiBkaWFsb2cgd2luZG93IHRpdGxlcyB0aGF0IGluZGljYXRlIGFuIGVycm9yIG9yIGJsb2NraW5nIHByb21wdC5cbiAqL1xuY29uc3QgRElBTE9HX1RJVExFUyA9IG5ldyBTZXQoW1xuICAnRXJyb3InLFxuICAnVmF1bHQgbm90IGZvdW5kLidcbl0pO1xuXG5jb25zdCBQT0xMX0lOVEVSVkFMX0lOX01JTExJU0VDT05EUyA9IDUwMDtcblxuLyoqXG4gKiBNb25pdG9ycyB0aGUgT2JzaWRpYW4gcHJvY2VzcyBmb3IgbmF0aXZlIE9TIGRpYWxvZ3MgYnkgcG9sbGluZyBwcm9jZXNzIHdpbmRvdyB0aXRsZXMuXG4gKlxuICogRGV0ZWN0ZWQgZGlhbG9ncyBhcmUgYXV0by1kaXNtaXNzZWQgKHZpYSBXTV9DTE9TRSAvIEFwcGxlU2NyaXB0IC8geGRvdG9vbCkgc28gdGhleVxuICogZG9uJ3QgYmxvY2sgdGhlIG1haW4gcHJvY2VzcywgYW5kIHJlY29yZGVkIGZvciBsYXRlciBhc3NlcnRpb24uXG4gKlxuICogQ3Jvc3MtcGxhdGZvcm06IHdvcmtzIG9uIFdpbmRvd3MsIG1hY09TLCBhbmQgTGludXguXG4gKi9cbmV4cG9ydCBjbGFzcyBOYXRpdmVEaWFsb2dNb25pdG9yIHtcbiAgcHJpdmF0ZSBldmVudHM6IE5hdGl2ZURpYWxvZ0V2ZW50W10gPSBbXTtcbiAgcHJpdmF0ZSBpbnRlcnZhbElkOiBSZXR1cm5UeXBlPHR5cGVvZiBzZXRJbnRlcnZhbD4gfCB1bmRlZmluZWQ7XG4gIHByaXZhdGUgaXNQb2xsaW5nID0gZmFsc2U7XG5cbiAgLyoqXG4gICAqIEFzc2VydHMgdGhhdCBubyBuYXRpdmUgZGlhbG9ncyB3ZXJlIGRldGVjdGVkIGR1cmluZyBtb25pdG9yaW5nLlxuICAgKlxuICAgKiBAdGhyb3dzIElmIGFueSBkaWFsb2dzIHdlcmUgcmVjb3JkZWQuXG4gICAqL1xuICBwdWJsaWMgYXNzZXJ0Tm9EaWFsb2dzKCk6IHZvaWQge1xuICAgIGlmICh0aGlzLmV2ZW50cy5sZW5ndGggPT09IDApIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICBjb25zdCBkZXNjcmlwdGlvbnMgPSB0aGlzLmV2ZW50c1xuICAgICAgLm1hcCgoZGlhbG9nRXZlbnQpID0+IGAgIC0gXCIke2RpYWxvZ0V2ZW50LnRpdGxlfVwiIGF0ICR7bmV3IERhdGUoZGlhbG9nRXZlbnQudGltZXN0YW1wKS50b0lTT1N0cmluZygpfWApXG4gICAgICAuam9pbignXFxuJyk7XG4gICAgdGhyb3cgbmV3IEVycm9yKGBOYXRpdmUgZGlhbG9nKHMpIGRldGVjdGVkIGR1cmluZyB0ZXN0OlxcbiR7ZGVzY3JpcHRpb25zfWApO1xuICB9XG5cbiAgLyoqXG4gICAqIFJldHVybnMgYWxsIGRpYWxvZyBldmVudHMgcmVjb3JkZWQgc2luY2UgdGhlIG1vbml0b3Igc3RhcnRlZC5cbiAgICpcbiAgICogQHJldHVybnMgVGhlIHJlY29yZGVkIGRpYWxvZyBldmVudHMuXG4gICAqL1xuICBwdWJsaWMgZ2V0RXZlbnRzKCk6IHJlYWRvbmx5IE5hdGl2ZURpYWxvZ0V2ZW50W10ge1xuICAgIHJldHVybiB0aGlzLmV2ZW50cztcbiAgfVxuXG4gIC8qKlxuICAgKiBSZXNldHMgdGhlIHJlY29yZGVkIGV2ZW50cyB3aXRob3V0IHN0b3BwaW5nIHRoZSBtb25pdG9yLlxuICAgKi9cbiAgcHVibGljIHJlc2V0KCk6IHZvaWQge1xuICAgIHRoaXMuZXZlbnRzID0gW107XG4gIH1cblxuICAvKipcbiAgICogU3RhcnRzIHBvbGxpbmcgZm9yIG5hdGl2ZSBkaWFsb2dzIGluIHRoZSBiYWNrZ3JvdW5kLlxuICAgKi9cbiAgcHVibGljIHN0YXJ0KCk6IHZvaWQge1xuICAgIGlmICh0aGlzLmludGVydmFsSWQpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgdGhpcy5ldmVudHMgPSBbXTtcbiAgICB0aGlzLmludGVydmFsSWQgPSBzZXRJbnRlcnZhbCgoKSA9PiB7XG4gICAgICB0aGlzLnBvbGwoKS5jYXRjaCgoKSA9PiB7XG4gICAgICAgIC8vIElnbm9yZSBwb2xsIGVycm9ycy5cbiAgICAgIH0pO1xuICAgIH0sIFBPTExfSU5URVJWQUxfSU5fTUlMTElTRUNPTkRTKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBTdG9wcyBwb2xsaW5nIGFuZCByZXR1cm5zIGFsbCByZWNvcmRlZCBldmVudHMuXG4gICAqXG4gICAqIEByZXR1cm5zIFRoZSByZWNvcmRlZCBkaWFsb2cgZXZlbnRzLlxuICAgKi9cbiAgcHVibGljIHN0b3AoKTogcmVhZG9ubHkgTmF0aXZlRGlhbG9nRXZlbnRbXSB7XG4gICAgaWYgKHRoaXMuaW50ZXJ2YWxJZCkge1xuICAgICAgY2xlYXJJbnRlcnZhbCh0aGlzLmludGVydmFsSWQpO1xuICAgICAgdGhpcy5pbnRlcnZhbElkID0gdW5kZWZpbmVkO1xuICAgIH1cbiAgICByZXR1cm4gdGhpcy5ldmVudHM7XG4gIH1cblxuICAvKipcbiAgICogU2luZ2xlIHBvbGwgaXRlcmF0aW9uOiBkZXRlY3RzIGFuZCBkaXNtaXNzZXMgYW55IE9ic2lkaWFuIGRpYWxvZyB3aW5kb3dzLlxuICAgKi9cbiAgcHJpdmF0ZSBhc3luYyBwb2xsKCk6IFByb21pc2U8dm9pZD4ge1xuICAgIGlmICh0aGlzLmlzUG9sbGluZykge1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICB0aGlzLmlzUG9sbGluZyA9IHRydWU7XG4gICAgdHJ5IHtcbiAgICAgIGNvbnN0IHRpdGxlcyA9IGF3YWl0IGdldE9ic2lkaWFuV2luZG93VGl0bGVzKCk7XG4gICAgICBmb3IgKGNvbnN0IHRpdGxlIG9mIHRpdGxlcykge1xuICAgICAgICBpZiAoIURJQUxPR19USVRMRVMuaGFzKHRpdGxlKSkge1xuICAgICAgICAgIGNvbnRpbnVlO1xuICAgICAgICB9XG5cbiAgICAgICAgdGhpcy5ldmVudHMucHVzaCh7IHRpbWVzdGFtcDogRGF0ZS5ub3coKSwgdGl0bGUgfSk7XG4gICAgICAgIGF3YWl0IGRpc21pc3NEaWFsb2dCeVRpdGxlKHRpdGxlKTtcbiAgICAgIH1cbiAgICB9IGNhdGNoIHtcbiAgICAgIC8vIFByb2Nlc3MgbWF5IG5vdCBiZSBydW5uaW5nIFx1MjAxNCBpZ25vcmUuXG4gICAgfSBmaW5hbGx5IHtcbiAgICAgIHRoaXMuaXNQb2xsaW5nID0gZmFsc2U7XG4gICAgfVxuICB9XG59XG5cbi8qKlxuICogRGlzbWlzc2VzIGEgbmF0aXZlIGRpYWxvZyB3aW5kb3cgYnkgaXRzIHRpdGxlLlxuICpcbiAqIEBwYXJhbSB0aXRsZSAtIFRoZSB3aW5kb3cgdGl0bGUgdG8gZGlzbWlzcy5cbiAqL1xuYXN5bmMgZnVuY3Rpb24gZGlzbWlzc0RpYWxvZ0J5VGl0bGUodGl0bGU6IHN0cmluZyk6IFByb21pc2U8dm9pZD4ge1xuICBpZiAocHJvY2Vzcy5wbGF0Zm9ybSA9PT0gJ3dpbjMyJykge1xuICAgIGF3YWl0IGRpc21pc3NEaWFsb2dXaW5kb3dzKHRpdGxlKTtcbiAgfSBlbHNlIGlmIChwcm9jZXNzLnBsYXRmb3JtID09PSAnZGFyd2luJykge1xuICAgIGF3YWl0IGRpc21pc3NEaWFsb2dNYWModGl0bGUpO1xuICB9IGVsc2Uge1xuICAgIGF3YWl0IGRpc21pc3NEaWFsb2dMaW51eCh0aXRsZSk7XG4gIH1cbn1cblxuLyoqXG4gKiBEaXNtaXNzZXMgYSBkaWFsb2cgb24gTGludXggdmlhIHhkb3Rvb2wuXG4gKlxuICogQHBhcmFtIHRpdGxlIC0gVGhlIHdpbmRvdyB0aXRsZSB0byBkaXNtaXNzLlxuICovXG5hc3luYyBmdW5jdGlvbiBkaXNtaXNzRGlhbG9nTGludXgodGl0bGU6IHN0cmluZyk6IFByb21pc2U8dm9pZD4ge1xuICBjb25zdCBlc2NhcGVkVGl0bGUgPSB0aXRsZS5yZXBsYWNlQWxsKCdcIicsIFN0cmluZy5yYXdgXFxcImApO1xuICBhd2FpdCBleGVjKFxuICAgIGB4ZG90b29sIHNlYXJjaCAtLW5hbWUgXCIke2VzY2FwZWRUaXRsZX1cIiB3aW5kb3dhY3RpdmF0ZSAtLXN5bmMga2V5IFJldHVybiAyPi9kZXYvbnVsbCB8fCB0cnVlYCxcbiAgICB7IGlzUXVpZXQ6IHRydWUgfVxuICApO1xufVxuXG4vKipcbiAqIERpc21pc3NlcyBhIGRpYWxvZyBvbiBtYWNPUyB2aWEgQXBwbGVTY3JpcHQuXG4gKlxuICogQHBhcmFtIHRpdGxlIC0gVGhlIHdpbmRvdyB0aXRsZSB0byBkaXNtaXNzLlxuICovXG5hc3luYyBmdW5jdGlvbiBkaXNtaXNzRGlhbG9nTWFjKHRpdGxlOiBzdHJpbmcpOiBQcm9taXNlPHZvaWQ+IHtcbiAgY29uc3QgZXNjYXBlZFRpdGxlID0gdGl0bGUucmVwbGFjZUFsbCgnXCInLCBTdHJpbmcucmF3YFxcXCJgKTtcbiAgYXdhaXQgZXhlYyhcbiAgICBgb3Nhc2NyaXB0IC1lICd0ZWxsIGFwcGxpY2F0aW9uIFwiU3lzdGVtIEV2ZW50c1wiIHRvIHRlbGwgcHJvY2VzcyBcIk9ic2lkaWFuXCIgdG8gY2xpY2sgYnV0dG9uIDEgb2Ygd2luZG93IFwiJHtlc2NhcGVkVGl0bGV9XCInYCxcbiAgICB7IGlzUXVpZXQ6IHRydWUgfVxuICApO1xufVxuXG4vKipcbiAqIERpc21pc3NlcyBhIGRpYWxvZyBvbiBXaW5kb3dzIGJ5IHNlbmRpbmcgV01fQ0xPU0UgdmlhIFdpbjMyIEFQSS5cbiAqXG4gKiBAcGFyYW0gdGl0bGUgLSBUaGUgd2luZG93IHRpdGxlIHRvIGRpc21pc3MuXG4gKi9cbmFzeW5jIGZ1bmN0aW9uIGRpc21pc3NEaWFsb2dXaW5kb3dzKHRpdGxlOiBzdHJpbmcpOiBQcm9taXNlPHZvaWQ+IHtcbiAgY29uc3QgZXNjYXBlZFRpdGxlID0gdGl0bGUucmVwbGFjZUFsbCgnXFwnJywgJ1xcJ1xcJycpO1xuICBjb25zdCBzY3JpcHQgPSBbXG4gICAgJ0FkZC1UeXBlIC1UeXBlRGVmaW5pdGlvbiBAXCInLFxuICAgICd1c2luZyBTeXN0ZW07IHVzaW5nIFN5c3RlbS5SdW50aW1lLkludGVyb3BTZXJ2aWNlczsnLFxuICAgICdwdWJsaWMgY2xhc3MgRGxnQ2xvc2UgeycsXG4gICAgJyAgW0RsbEltcG9ydChcInVzZXIzMi5kbGxcIildIHB1YmxpYyBzdGF0aWMgZXh0ZXJuIEludFB0ciBGaW5kV2luZG93KHN0cmluZyBjLCBzdHJpbmcgdCk7JyxcbiAgICAnICBbRGxsSW1wb3J0KFwidXNlcjMyLmRsbFwiKV0gcHVibGljIHN0YXRpYyBleHRlcm4gSW50UHRyIFNlbmRNZXNzYWdlKEludFB0ciBoLCB1aW50IG0sIEludFB0ciB3LCBJbnRQdHIgbCk7JyxcbiAgICAnfScsXG4gICAgJ1wiQCcsXG4gICAgYCRoID0gW0RsZ0Nsb3NlXTo6RmluZFdpbmRvdygkbnVsbCwgJyR7ZXNjYXBlZFRpdGxlfScpYCxcbiAgICAnaWYgKCRoIC1uZSBbSW50UHRyXTo6WmVybykgeyBbRGxnQ2xvc2VdOjpTZW5kTWVzc2FnZSgkaCwgMHgwMDEwLCBbSW50UHRyXTo6WmVybywgW0ludFB0cl06Olplcm8pIH0nXG4gIF0uam9pbignOyAnKTtcbiAgYXdhaXQgZXhlYyhgcG93ZXJzaGVsbCAtQ29tbWFuZCBcIiR7c2NyaXB0fVwiYCwgeyBpc1F1aWV0OiB0cnVlIH0pO1xufVxuXG4vKipcbiAqIFJldHVybnMgd2luZG93IHRpdGxlcyBvZiBhbGwgT2JzaWRpYW4gcHJvY2VzcyB3aW5kb3dzLlxuICpcbiAqIEByZXR1cm5zIEFuIGFycmF5IG9mIHdpbmRvdyB0aXRsZSBzdHJpbmdzLlxuICovXG5hc3luYyBmdW5jdGlvbiBnZXRPYnNpZGlhbldpbmRvd1RpdGxlcygpOiBQcm9taXNlPHN0cmluZ1tdPiB7XG4gIGlmIChwcm9jZXNzLnBsYXRmb3JtID09PSAnd2luMzInKSB7XG4gICAgcmV0dXJuIGdldFdpbmRvd1RpdGxlc1dpbmRvd3MoKTtcbiAgfVxuXG4gIGlmIChwcm9jZXNzLnBsYXRmb3JtID09PSAnZGFyd2luJykge1xuICAgIHJldHVybiBnZXRXaW5kb3dUaXRsZXNNYWMoKTtcbiAgfVxuXG4gIHJldHVybiBnZXRXaW5kb3dUaXRsZXNMaW51eCgpO1xufVxuXG4vKipcbiAqIFJldHVybnMgT2JzaWRpYW4gd2luZG93IHRpdGxlcyBvbiBMaW51eCB2aWEgeGRvdG9vbC5cbiAqXG4gKiBAcmV0dXJucyBBbiBhcnJheSBvZiB3aW5kb3cgdGl0bGUgc3RyaW5ncy5cbiAqL1xuYXN5bmMgZnVuY3Rpb24gZ2V0V2luZG93VGl0bGVzTGludXgoKTogUHJvbWlzZTxzdHJpbmdbXT4ge1xuICBjb25zdCBvdXRwdXQgPSBhd2FpdCBleGVjKFxuICAgICd4ZG90b29sIHNlYXJjaCAtLW5hbWUgXCJPYnNpZGlhblwiIGdldHdpbmRvd25hbWUgMj4vZGV2L251bGwgfHwgdHJ1ZScsXG4gICAgeyBpc1F1aWV0OiB0cnVlIH1cbiAgKTtcbiAgcmV0dXJuIG91dHB1dC50cmltKCkuc3BsaXQoJ1xcbicpLmZpbHRlcihCb29sZWFuKTtcbn1cblxuLyoqXG4gKiBSZXR1cm5zIE9ic2lkaWFuIHdpbmRvdyB0aXRsZXMgb24gbWFjT1MgdmlhIEFwcGxlU2NyaXB0LlxuICpcbiAqIEByZXR1cm5zIEFuIGFycmF5IG9mIHdpbmRvdyB0aXRsZSBzdHJpbmdzLlxuICovXG5hc3luYyBmdW5jdGlvbiBnZXRXaW5kb3dUaXRsZXNNYWMoKTogUHJvbWlzZTxzdHJpbmdbXT4ge1xuICBjb25zdCBvdXRwdXQgPSBhd2FpdCBleGVjKFxuICAgICdvc2FzY3JpcHQgLWUgXFwndGVsbCBhcHBsaWNhdGlvbiBcIlN5c3RlbSBFdmVudHNcIiB0byBnZXQgbmFtZSBvZiBldmVyeSB3aW5kb3cgb2YgKHByb2Nlc3NlcyB3aG9zZSBuYW1lIGlzIFwiT2JzaWRpYW5cIilcXCcnLFxuICAgIHsgaXNRdWlldDogdHJ1ZSB9XG4gICk7XG4gIHJldHVybiBvdXRwdXQudHJpbSgpLnNwbGl0KCcsICcpLmZpbHRlcihCb29sZWFuKTtcbn1cblxuLyoqXG4gKiBSZXR1cm5zIE9ic2lkaWFuIHdpbmRvdyB0aXRsZXMgb24gV2luZG93cyB2aWEgR2V0LVByb2Nlc3MuXG4gKlxuICogQHJldHVybnMgQW4gYXJyYXkgb2Ygd2luZG93IHRpdGxlIHN0cmluZ3MuXG4gKi9cbmFzeW5jIGZ1bmN0aW9uIGdldFdpbmRvd1RpdGxlc1dpbmRvd3MoKTogUHJvbWlzZTxzdHJpbmdbXT4ge1xuICBjb25zdCBvdXRwdXQgPSBhd2FpdCBleGVjKFxuICAgICdwb3dlcnNoZWxsIC1Db21tYW5kIFwiR2V0LVByb2Nlc3MgT2JzaWRpYW4gLUVycm9yQWN0aW9uIFNpbGVudGx5Q29udGludWUgfCBXaGVyZS1PYmplY3QgeyAkXy5NYWluV2luZG93VGl0bGUgLW5lIFxcJ1xcJyB9IHwgU2VsZWN0LU9iamVjdCAtRXhwYW5kUHJvcGVydHkgTWFpbldpbmRvd1RpdGxlXCInLFxuICAgIHsgaXNRdWlldDogdHJ1ZSB9XG4gICk7XG4gIHJldHVybiBvdXRwdXQudHJpbSgpLnNwbGl0KCdcXG4nKS5tYXAoKGxpbmUpID0+IGxpbmUudHJpbSgpKS5maWx0ZXIoQm9vbGVhbik7XG59XG5cbi8qIHY4IGlnbm9yZSBzdG9wICovXG4iXSwKICAibWFwcGluZ3MiOiAiOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQWFBLDBCQUFvQjtBQUVwQixrQkFBcUI7QUFvQnJCLE1BQU0sZ0JBQWdCLG9CQUFJLElBQUk7QUFBQSxFQUM1QjtBQUFBLEVBQ0E7QUFDRixDQUFDO0FBRUQsTUFBTSxnQ0FBZ0M7QUFVL0IsTUFBTSxvQkFBb0I7QUFBQSxFQUN2QixTQUE4QixDQUFDO0FBQUEsRUFDL0I7QUFBQSxFQUNBLFlBQVk7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUEsRUFPYixrQkFBd0I7QUFDN0IsUUFBSSxLQUFLLE9BQU8sV0FBVyxHQUFHO0FBQzVCO0FBQUEsSUFDRjtBQUVBLFVBQU0sZUFBZSxLQUFLLE9BQ3ZCLElBQUksQ0FBQyxnQkFBZ0IsUUFBUSxZQUFZLEtBQUssUUFBUSxJQUFJLEtBQUssWUFBWSxTQUFTLEVBQUUsWUFBWSxDQUFDLEVBQUUsRUFDckcsS0FBSyxJQUFJO0FBQ1osVUFBTSxJQUFJLE1BQU07QUFBQSxFQUEyQyxZQUFZLEVBQUU7QUFB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
|